summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2010-09-19 18:19:39 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2010-09-19 18:19:39 +0000
commite56043cd2c207982e812ce6fcecb7353dea58363 (patch)
tree01a6f37ad5a9ae6b18bdc20f052b04e19b4255c0 /libstdc++-v3
parent2e02a1a4548f2ee1ea519c88e68b20621ad16fcc (diff)
downloadgcc-e56043cd2c207982e812ce6fcecb7353dea58363.tar.gz
2010-09-19 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 164348, with some improvements in gcc/melt-runtime.[ch] 2010-09-19 Basile Starynkevitch <basile@starynkevitch.net> [[merged with trunk rev.164348, so improved MELT runtime!]] * gcc/melt-runtime.h: improved comments. (melt_debug_garbcoll, melt_debuggc_eprintf): Moved from melt-runtime.c. (melt_obmag_string): New declaration. (struct meltobject_st, struct meltclosure_st, struct meltroutine_st, struct meltmixbigint_st, struct meltstring_st): using GTY variable_size and @@MELTGTY@@ comment. (melt_mark_special): added debug print. * gcc/melt-runtime.c: Improved comments. Include bversion.h, realmpfr.h, gimple-pretty-print.h. (ggc_force_collect) Declared external. (melt_forward_counter): Added. (melt_obmag_string): New function. (melt_alptr_1, melt_alptr_2, melt_break_alptr_1_at) (melt_break_alptr_2_at, melt_break_alptr_1,melt_break_alptr_1) (melt_allocate_young_gc_zone, melt_free_young_gc_zone): New. (delete_special, meltgc_make_special): Improved debug printf and use melt_break_alptr_1... (ggc_alloc_*) macros defined for backport to GCC 4.5 (melt_forwarded_copy): Don't clear the new destination zone in old GGC heap. (meltgc_add_out_raw_len): Use ggc_alloc_atomic. (meltgc_raw_new_mappointers, meltgc_raw_put_mappointers) (meltgc_raw_remove_mappointers): Corrected length argument to ggc_alloc_cleared_vec_entrypointermelt_st. (melt_really_initialize): Call melt_allocate_young_gc_zone. (melt_initialize): Set flag_plugin_added. (melt_val2passflag): TODO_verify_loops only in GCC 4.5 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@164424 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog3027
-rw-r--r--libstdc++-v3/Makefile.in249
-rw-r--r--libstdc++-v3/acinclude.m4143
-rw-r--r--libstdc++-v3/config.h.in17
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver59
-rw-r--r--libstdc++-v3/config/io/c_io_stdio.h3
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc11
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.h7
-rw-r--r--libstdc++-v3/config/locale/generic/codecvt_members.cc4
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.cc4
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.h7
-rw-r--r--libstdc++-v3/config/locale/gnu/c_locale.h7
-rw-r--r--libstdc++-v3/config/locale/gnu/codecvt_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.cc6
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.h4
-rw-r--r--libstdc++-v3/config/locale/gnu/monetary_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.h11
-rw-r--r--libstdc++-v3/config/os/bionic/ctype_base.h (renamed from libstdc++-v3/config/os/irix/irix5.2/ctype_base.h)20
-rw-r--r--libstdc++-v3/config/os/bionic/ctype_inline.h (renamed from libstdc++-v3/config/os/irix/irix5.2/ctype_inline.h)14
-rw-r--r--libstdc++-v3/config/os/bionic/ctype_noninline.h (renamed from libstdc++-v3/config/os/irix/irix5.2/ctype_noninline.h)41
-rw-r--r--libstdc++-v3/config/os/bionic/os_defines.h (renamed from libstdc++-v3/config/os/irix/irix5.2/os_defines.h)24
-rw-r--r--libstdc++-v3/config/os/djgpp/error_constants.h124
-rwxr-xr-xlibstdc++-v3/configure455
-rw-r--r--libstdc++-v3/configure.ac9
-rw-r--r--libstdc++-v3/configure.host17
-rw-r--r--libstdc++-v3/crossconfig.m42
-rw-r--r--libstdc++-v3/doc/Makefile.am145
-rw-r--r--libstdc++-v3/doc/Makefile.in213
-rw-r--r--libstdc++-v3/doc/doxygen/doxygroups.cc9
-rw-r--r--libstdc++-v3/doc/doxygen/user.cfg.in709
-rw-r--r--libstdc++-v3/doc/html/api.html35
-rw-r--r--libstdc++-v3/doc/html/bk02.html2
-rw-r--r--libstdc++-v3/doc/html/bk03.html2
-rw-r--r--libstdc++-v3/doc/html/faq.html27
-rw-r--r--libstdc++-v3/doc/html/manual/abi.html219
-rw-r--r--libstdc++-v3/doc/html/manual/algorithms.html60
-rw-r--r--libstdc++-v3/doc/html/manual/api.html14
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_contributing.html56
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_free.html12
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_gfdl.html490
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_gpl.html12
-rw-r--r--libstdc++-v3/doc/html/manual/appendix_porting.html12
-rw-r--r--libstdc++-v3/doc/html/manual/associative.html113
-rw-r--r--libstdc++-v3/doc/html/manual/atomics.html31
-rw-r--r--libstdc++-v3/doc/html/manual/auto_ptr.html90
-rw-r--r--libstdc++-v3/doc/html/manual/backwards.html211
-rw-r--r--libstdc++-v3/doc/html/manual/bitmap_allocator.html14
-rw-r--r--libstdc++-v3/doc/html/manual/bitset.html105
-rw-r--r--libstdc++-v3/doc/html/manual/bk01ix01.html51
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02.html46
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02ch04s02.html49
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02ch04s03.html29
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt03ch08.html)9
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt02pr01.html17
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html20
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch07s03.html4
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch30s02.html)6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html24
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch30s04.html)32
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch31s02.html)4
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html)6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch31s04.html)10
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch31s05.html)8
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html)22
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s03.html)4
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s04.html)4
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s05.html)14
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s06.html)16
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html)100
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch34s02.html)6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch34s03.html)4
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch41s02.html)6
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12ch41s03.html)7
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt03pr01.html (renamed from libstdc++-v3/doc/html/manual/bk01pt12pr03.html)14
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt04.html21
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13.html90
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13s02.html40
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13s03.html57
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13s04.html79
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13s05.html16
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt05ch13s06.html94
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt08ch19.html39
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt08ch19s02.html86
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt09ch20.html19
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt09pr02.html41
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt10ch23s02.html19
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt11ch25s02.html77
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt11ch27s02.html101
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt11ch28s02.html49
-rw-r--r--libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html24
-rw-r--r--libstdc++-v3/doc/html/manual/bugs.html270
-rw-r--r--libstdc++-v3/doc/html/manual/codecvt.html379
-rw-r--r--libstdc++-v3/doc/html/manual/complex.html25
-rw-r--r--libstdc++-v3/doc/html/manual/concurrency.html42
-rw-r--r--libstdc++-v3/doc/html/manual/configure.html261
-rw-r--r--libstdc++-v3/doc/html/manual/containers.html54
-rw-r--r--libstdc++-v3/doc/html/manual/containers_and_c.html20
-rw-r--r--libstdc++-v3/doc/html/manual/debug.html33
-rw-r--r--libstdc++-v3/doc/html/manual/debug_mode.html8
-rw-r--r--libstdc++-v3/doc/html/manual/diagnostics.html42
-rw-r--r--libstdc++-v3/doc/html/manual/documentation_style.html76
-rw-r--r--libstdc++-v3/doc/html/manual/dynamic_memory.html15
-rw-r--r--libstdc++-v3/doc/html/manual/exceptions.html22
-rw-r--r--libstdc++-v3/doc/html/manual/ext_algorithms.html10
-rw-r--r--libstdc++-v3/doc/html/manual/ext_allocators.html80
-rw-r--r--libstdc++-v3/doc/html/manual/ext_compile_checks.html6
-rw-r--r--libstdc++-v3/doc/html/manual/ext_concurrency.html16
-rw-r--r--libstdc++-v3/doc/html/manual/ext_containers.html6
-rw-r--r--libstdc++-v3/doc/html/manual/ext_demangling.html8
-rw-r--r--libstdc++-v3/doc/html/manual/ext_io.html58
-rw-r--r--libstdc++-v3/doc/html/manual/ext_iterators.html6
-rw-r--r--libstdc++-v3/doc/html/manual/ext_numerics.html6
-rw-r--r--libstdc++-v3/doc/html/manual/ext_utilities.html14
-rw-r--r--libstdc++-v3/doc/html/manual/extensions.html8
-rw-r--r--libstdc++-v3/doc/html/manual/facets.html723
-rw-r--r--libstdc++-v3/doc/html/manual/fstreams.html114
-rw-r--r--libstdc++-v3/doc/html/manual/functors.html15
-rw-r--r--libstdc++-v3/doc/html/manual/fundamental_types.html43
-rw-r--r--libstdc++-v3/doc/html/manual/generalized_numeric_operations.html11
-rw-r--r--libstdc++-v3/doc/html/manual/internals.html86
-rw-r--r--libstdc++-v3/doc/html/manual/intro.html2
-rw-r--r--libstdc++-v3/doc/html/manual/io.html120
-rw-r--r--libstdc++-v3/doc/html/manual/io_and_c.html54
-rw-r--r--libstdc++-v3/doc/html/manual/iostream_objects.html119
-rw-r--r--libstdc++-v3/doc/html/manual/iterators.html129
-rw-r--r--libstdc++-v3/doc/html/manual/license.html6
-rw-r--r--libstdc++-v3/doc/html/manual/locales.html428
-rw-r--r--libstdc++-v3/doc/html/manual/localization.html438
-rw-r--r--libstdc++-v3/doc/html/manual/make.html2
-rw-r--r--libstdc++-v3/doc/html/manual/memory.html505
-rw-r--r--libstdc++-v3/doc/html/manual/messages.html284
-rw-r--r--libstdc++-v3/doc/html/manual/numerics.html29
-rw-r--r--libstdc++-v3/doc/html/manual/numerics_and_c.html22
-rw-r--r--libstdc++-v3/doc/html/manual/pairs.html11
-rw-r--r--libstdc++-v3/doc/html/manual/parallel_mode.html10
-rw-r--r--libstdc++-v3/doc/html/manual/profile_mode.html22
-rw-r--r--libstdc++-v3/doc/html/manual/sequences.html43
-rw-r--r--libstdc++-v3/doc/html/manual/setup.html28
-rw-r--r--libstdc++-v3/doc/html/manual/shared_ptr.html304
-rw-r--r--libstdc++-v3/doc/html/manual/source_code_style.html420
-rw-r--r--libstdc++-v3/doc/html/manual/source_organization.html12
-rw-r--r--libstdc++-v3/doc/html/manual/spine.html40
-rw-r--r--libstdc++-v3/doc/html/manual/status.html62
-rw-r--r--libstdc++-v3/doc/html/manual/streambufs.html83
-rw-r--r--libstdc++-v3/doc/html/manual/strings.html365
-rw-r--r--libstdc++-v3/doc/html/manual/stringstreams.html10
-rw-r--r--libstdc++-v3/doc/html/manual/support.html129
-rw-r--r--libstdc++-v3/doc/html/manual/termination.html104
-rw-r--r--libstdc++-v3/doc/html/manual/test.html10
-rw-r--r--libstdc++-v3/doc/html/manual/traits.html6
-rw-r--r--libstdc++-v3/doc/html/manual/using.html4
-rw-r--r--libstdc++-v3/doc/html/manual/using_concurrency.html2
-rw-r--r--libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html26
-rw-r--r--libstdc++-v3/doc/html/manual/using_exceptions.html91
-rw-r--r--libstdc++-v3/doc/html/manual/using_headers.html12
-rw-r--r--libstdc++-v3/doc/html/manual/using_macros.html10
-rw-r--r--libstdc++-v3/doc/html/manual/utilities.html16
-rw-r--r--libstdc++-v3/doc/html/manual/vector.html13
-rw-r--r--libstdc++-v3/doc/html/manual/verbose_termination.html79
-rw-r--r--libstdc++-v3/doc/html/spine.html38
-rw-r--r--libstdc++-v3/doc/xml/api.xml46
-rw-r--r--libstdc++-v3/doc/xml/authors.xml137
-rw-r--r--libstdc++-v3/doc/xml/book.txml31
-rw-r--r--libstdc++-v3/doc/xml/chapter.txml43
-rw-r--r--libstdc++-v3/doc/xml/class.txml70
-rw-r--r--libstdc++-v3/doc/xml/faq.xml423
-rw-r--r--libstdc++-v3/doc/xml/gnu/fdl-1.2.xml36
-rw-r--r--libstdc++-v3/doc/xml/gnu/fdl-1.3.xml562
-rw-r--r--libstdc++-v3/doc/xml/gnu/gpl-2.0.xml100
-rw-r--r--libstdc++-v3/doc/xml/gnu/gpl-3.0.xml201
-rw-r--r--libstdc++-v3/doc/xml/manual/abi.xml341
-rw-r--r--libstdc++-v3/doc/xml/manual/algorithms.xml44
-rw-r--r--libstdc++-v3/doc/xml/manual/allocator.xml167
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_contributing.xml778
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_free.xml32
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_porting.xml44
-rw-r--r--libstdc++-v3/doc/xml/manual/atomics.xml26
-rw-r--r--libstdc++-v3/doc/xml/manual/auto_ptr.xml17
-rw-r--r--libstdc++-v3/doc/xml/manual/backwards_compatibility.xml260
-rw-r--r--libstdc++-v3/doc/xml/manual/bitmap_allocator.xml110
-rw-r--r--libstdc++-v3/doc/xml/manual/build_hacking.xml57
-rw-r--r--libstdc++-v3/doc/xml/manual/codecvt.xml169
-rw-r--r--libstdc++-v3/doc/xml/manual/concurrency.xml26
-rw-r--r--libstdc++-v3/doc/xml/manual/concurrency_extensions.xml60
-rw-r--r--libstdc++-v3/doc/xml/manual/configure.xml58
-rw-r--r--libstdc++-v3/doc/xml/manual/containers.xml113
-rw-r--r--libstdc++-v3/doc/xml/manual/ctype.xml94
-rw-r--r--libstdc++-v3/doc/xml/manual/debug.xml134
-rw-r--r--libstdc++-v3/doc/xml/manual/debug_mode.xml166
-rw-r--r--libstdc++-v3/doc/xml/manual/diagnostics.xml50
-rw-r--r--libstdc++-v3/doc/xml/manual/evolution.xml101
-rw-r--r--libstdc++-v3/doc/xml/manual/extensions.xml142
-rw-r--r--libstdc++-v3/doc/xml/manual/internals.xml47
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml316
-rw-r--r--libstdc++-v3/doc/xml/manual/io.xml158
-rw-r--r--libstdc++-v3/doc/xml/manual/iterators.xml48
-rw-r--r--libstdc++-v3/doc/xml/manual/locale.xml99
-rw-r--r--libstdc++-v3/doc/xml/manual/localization.xml40
-rw-r--r--libstdc++-v3/doc/xml/manual/messages.xml132
-rw-r--r--libstdc++-v3/doc/xml/manual/mt_allocator.xml69
-rw-r--r--libstdc++-v3/doc/xml/manual/numerics.xml60
-rw-r--r--libstdc++-v3/doc/xml/manual/parallel_mode.xml160
-rw-r--r--libstdc++-v3/doc/xml/manual/prerequisites.xml55
-rw-r--r--libstdc++-v3/doc/xml/manual/profile_mode.xml521
-rw-r--r--libstdc++-v3/doc/xml/manual/shared_ptr.xml156
-rw-r--r--libstdc++-v3/doc/xml/manual/spine.xml90
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx1998.xml389
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx200x.xml1504
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxxtr1.xml574
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml82
-rw-r--r--libstdc++-v3/doc/xml/manual/strings.xml105
-rw-r--r--libstdc++-v3/doc/xml/manual/support.xml89
-rw-r--r--libstdc++-v3/doc/xml/manual/test.xml124
-rw-r--r--libstdc++-v3/doc/xml/manual/using.xml421
-rw-r--r--libstdc++-v3/doc/xml/manual/using_exceptions.xml177
-rw-r--r--libstdc++-v3/doc/xml/manual/utilities.xml49
-rw-r--r--libstdc++-v3/doc/xml/spine.xml152
-rw-r--r--libstdc++-v3/include/Makefile.am13
-rw-r--r--libstdc++-v3/include/Makefile.in70
-rw-r--r--libstdc++-v3/include/backward/hash_fun.h2
-rw-r--r--libstdc++-v3/include/backward/hash_map3
-rw-r--r--libstdc++-v3/include/backward/hash_set3
-rw-r--r--libstdc++-v3/include/bits/algorithmfwd.h12
-rw-r--r--libstdc++-v3/include/bits/basic_string.h84
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc4
-rw-r--r--libstdc++-v3/include/bits/boost_concept_check.h5
-rw-r--r--libstdc++-v3/include/bits/c++config46
-rw-r--r--libstdc++-v3/include/bits/char_traits.h13
-rw-r--r--libstdc++-v3/include/bits/cpp_type_traits.h28
-rw-r--r--libstdc++-v3/include/bits/deque.tcc56
-rw-r--r--libstdc++-v3/include/bits/forward_list.h24
-rw-r--r--libstdc++-v3/include/bits/forward_list.tcc60
-rw-r--r--libstdc++-v3/include/bits/fstream.tcc16
-rw-r--r--libstdc++-v3/include/bits/functional_hash.h123
-rw-r--r--libstdc++-v3/include/bits/hashtable.h153
-rw-r--r--libstdc++-v3/include/bits/hashtable_policy.h8
-rw-r--r--libstdc++-v3/include/bits/ios_base.h28
-rw-r--r--libstdc++-v3/include/bits/list.tcc55
-rw-r--r--libstdc++-v3/include/bits/locale_classes.h6
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h20
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc4
-rw-r--r--libstdc++-v3/include/bits/locale_facets_nonio.h47
-rw-r--r--libstdc++-v3/include/bits/locale_facets_nonio.tcc2
-rw-r--r--libstdc++-v3/include/bits/move.h47
-rw-r--r--libstdc++-v3/include/bits/random.h13
-rw-r--r--libstdc++-v3/include/bits/random.tcc73
-rw-r--r--libstdc++-v3/include/bits/range_access.h102
-rw-r--r--libstdc++-v3/include/bits/regex.h2428
-rw-r--r--libstdc++-v3/include/bits/regex_compiler.h1115
-rw-r--r--libstdc++-v3/include/bits/regex_constants.h299
-rw-r--r--libstdc++-v3/include/bits/regex_cursor.h92
-rw-r--r--libstdc++-v3/include/bits/regex_error.h160
-rw-r--r--libstdc++-v3/include/bits/regex_grep_matcher.h131
-rw-r--r--libstdc++-v3/include/bits/regex_grep_matcher.tcc177
-rw-r--r--libstdc++-v3/include/bits/regex_nfa.h403
-rw-r--r--libstdc++-v3/include/bits/regex_nfa.tcc170
-rw-r--r--libstdc++-v3/include/bits/shared_ptr.h88
-rw-r--r--libstdc++-v3/include/bits/shared_ptr_base.h89
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h52
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h38
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h2
-rw-r--r--libstdc++-v3/include/bits/stl_construct.h21
-rw-r--r--libstdc++-v3/include/bits/stl_deque.h108
-rw-r--r--libstdc++-v3/include/bits/stl_heap.h2
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h28
-rw-r--r--libstdc++-v3/include/bits/stl_iterator_base_funcs.h7
-rw-r--r--libstdc++-v3/include/bits/stl_iterator_base_types.h51
-rw-r--r--libstdc++-v3/include/bits/stl_list.h82
-rw-r--r--libstdc++-v3/include/bits/stl_map.h2
-rw-r--r--libstdc++-v3/include/bits/stl_multimap.h2
-rw-r--r--libstdc++-v3/include/bits/stl_multiset.h2
-rw-r--r--libstdc++-v3/include/bits/stl_pair.h78
-rw-r--r--libstdc++-v3/include/bits/stl_queue.h23
-rw-r--r--libstdc++-v3/include/bits/stl_raw_storage_iter.h4
-rw-r--r--libstdc++-v3/include/bits/stl_set.h2
-rw-r--r--libstdc++-v3/include/bits/stl_tempbuf.h69
-rw-r--r--libstdc++-v3/include/bits/stl_tree.h18
-rw-r--r--libstdc++-v3/include/bits/stl_uninitialized.h284
-rw-r--r--libstdc++-v3/include/bits/stl_vector.h111
-rw-r--r--libstdc++-v3/include/bits/stringfwd.h18
-rw-r--r--libstdc++-v3/include/bits/unique_ptr.h189
-rw-r--r--libstdc++-v3/include/bits/unordered_map.h85
-rw-r--r--libstdc++-v3/include/bits/unordered_set.h92
-rw-r--r--libstdc++-v3/include/bits/valarray_array.h14
-rw-r--r--libstdc++-v3/include/bits/vector.tcc59
-rw-r--r--libstdc++-v3/include/c_global/cmath248
-rw-r--r--libstdc++-v3/include/c_global/cstddef12
-rw-r--r--libstdc++-v3/include/c_global/cstdio14
-rw-r--r--libstdc++-v3/include/c_global/cstdlib9
-rw-r--r--libstdc++-v3/include/c_global/cstring1
-rw-r--r--libstdc++-v3/include/c_global/ctime2
-rw-r--r--libstdc++-v3/include/c_global/cwchar7
-rw-r--r--libstdc++-v3/include/c_global/cwctype8
-rw-r--r--libstdc++-v3/include/c_std/cstddef7
-rw-r--r--libstdc++-v3/include/c_std/cstdio15
-rw-r--r--libstdc++-v3/include/c_std/cstdlib5
-rw-r--r--libstdc++-v3/include/c_std/cstring1
-rw-r--r--libstdc++-v3/include/c_std/ctime2
-rw-r--r--libstdc++-v3/include/c_std/cwchar7
-rw-r--r--libstdc++-v3/include/c_std/cwctype8
-rw-r--r--libstdc++-v3/include/debug/debug.h1
-rw-r--r--libstdc++-v3/include/debug/deque64
-rw-r--r--libstdc++-v3/include/debug/formatter.h24
-rw-r--r--libstdc++-v3/include/debug/functions.h14
-rw-r--r--libstdc++-v3/include/debug/list88
-rw-r--r--libstdc++-v3/include/debug/map.h9
-rw-r--r--libstdc++-v3/include/debug/multimap.h9
-rw-r--r--libstdc++-v3/include/debug/multiset.h19
-rw-r--r--libstdc++-v3/include/debug/safe_iterator.h39
-rw-r--r--libstdc++-v3/include/debug/set.h9
-rw-r--r--libstdc++-v3/include/debug/string26
-rw-r--r--libstdc++-v3/include/debug/unordered_map30
-rw-r--r--libstdc++-v3/include/debug/unordered_set30
-rw-r--r--libstdc++-v3/include/debug/vector58
-rw-r--r--libstdc++-v3/include/ext/algorithm4
-rw-r--r--libstdc++-v3/include/ext/array_allocator.h12
-rw-r--r--libstdc++-v3/include/ext/bitmap_allocator.h9
-rw-r--r--libstdc++-v3/include/ext/codecvt_specializations.h7
-rw-r--r--libstdc++-v3/include/ext/concurrence.h4
-rw-r--r--libstdc++-v3/include/ext/extptr_allocator.h6
-rw-r--r--libstdc++-v3/include/ext/functional3
-rw-r--r--libstdc++-v3/include/ext/malloc_allocator.h6
-rw-r--r--libstdc++-v3/include/ext/mt_allocator.h18
-rw-r--r--libstdc++-v3/include/ext/new_allocator.h7
-rw-r--r--libstdc++-v3/include/ext/pb_ds/assoc_container.hpp1
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp20
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp32
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp22
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp42
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp36
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp52
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp28
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp24
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp54
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp26
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp20
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp22
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp28
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp30
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp26
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp5
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp16
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp22
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp12
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp8
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp18
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp32
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp70
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp14
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp6
-rw-r--r--libstdc++-v3/include/ext/pb_ds/exception.hpp4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/hash_policy.hpp21
-rw-r--r--libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp9
-rw-r--r--libstdc++-v3/include/ext/pb_ds/priority_queue.hpp10
-rw-r--r--libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/tree_policy.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/trie_policy.hpp3
-rw-r--r--libstdc++-v3/include/ext/pointer.h4
-rw-r--r--libstdc++-v3/include/ext/pool_allocator.h6
-rw-r--r--libstdc++-v3/include/ext/rc_string_base.h11
-rw-r--r--libstdc++-v3/include/ext/sso_string_base.h2
-rw-r--r--libstdc++-v3/include/ext/string_conversions.h4
-rw-r--r--libstdc++-v3/include/ext/throw_allocator.h8
-rw-r--r--libstdc++-v3/include/ext/vstring.h14
-rw-r--r--libstdc++-v3/include/ext/vstring_util.h4
-rw-r--r--libstdc++-v3/include/parallel/base.h16
-rw-r--r--libstdc++-v3/include/parallel/basic_iterator.h3
-rw-r--r--libstdc++-v3/include/parallel/find.h18
-rw-r--r--libstdc++-v3/include/parallel/multiseq_selection.h10
-rw-r--r--libstdc++-v3/include/parallel/multiway_merge.h4
-rw-r--r--libstdc++-v3/include/parallel/multiway_mergesort.h2
-rw-r--r--libstdc++-v3/include/parallel/partial_sum.h9
-rw-r--r--libstdc++-v3/include/parallel/partition.h146
-rw-r--r--libstdc++-v3/include/parallel/set_operations.h6
-rw-r--r--libstdc++-v3/include/parallel/settings.h6
-rw-r--r--libstdc++-v3/include/profile/base.h2
-rw-r--r--libstdc++-v3/include/profile/deque34
-rw-r--r--libstdc++-v3/include/profile/impl/profiler.h67
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_algos.h118
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_container_size.h366
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_hash_func.h260
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_hashtable_size.h97
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_list_to_slist.h285
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_list_to_vector.h518
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h435
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_node.h215
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_state.h43
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_trace.h1121
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_vector_size.h94
-rw-r--r--libstdc++-v3/include/profile/impl/profiler_vector_to_list.h564
-rw-r--r--libstdc++-v3/include/profile/iterator_tracker.h465
-rw-r--r--libstdc++-v3/include/profile/list38
-rw-r--r--libstdc++-v3/include/profile/map.h32
-rw-r--r--libstdc++-v3/include/profile/multimap.h2
-rw-r--r--libstdc++-v3/include/profile/multiset.h2
-rw-r--r--libstdc++-v3/include/profile/set.h2
-rw-r--r--libstdc++-v3/include/profile/unordered_map34
-rw-r--r--libstdc++-v3/include/profile/unordered_set30
-rw-r--r--libstdc++-v3/include/profile/vector46
-rw-r--r--libstdc++-v3/include/std/array1
-rw-r--r--libstdc++-v3/include/std/atomic22
-rw-r--r--libstdc++-v3/include/std/bitset3
-rw-r--r--libstdc++-v3/include/std/complex81
-rw-r--r--libstdc++-v3/include/std/deque1
-rw-r--r--libstdc++-v3/include/std/forward_list1
-rw-r--r--libstdc++-v3/include/std/fstream6
-rw-r--r--libstdc++-v3/include/std/functional72
-rw-r--r--libstdc++-v3/include/std/iterator4
-rw-r--r--libstdc++-v3/include/std/list1
-rw-r--r--libstdc++-v3/include/std/map1
-rw-r--r--libstdc++-v3/include/std/memory5
-rw-r--r--libstdc++-v3/include/std/mutex1
-rw-r--r--libstdc++-v3/include/std/ratio33
-rw-r--r--libstdc++-v3/include/std/regex36
-rw-r--r--libstdc++-v3/include/std/set1
-rw-r--r--libstdc++-v3/include/std/string1
-rw-r--r--libstdc++-v3/include/std/system_error22
-rw-r--r--libstdc++-v3/include/std/thread4
-rw-r--r--libstdc++-v3/include/std/tuple175
-rw-r--r--libstdc++-v3/include/std/type_traits100
-rw-r--r--libstdc++-v3/include/std/unordered_map1
-rw-r--r--libstdc++-v3/include/std/unordered_set1
-rw-r--r--libstdc++-v3/include/std/valarray45
-rw-r--r--libstdc++-v3/include/std/vector1
-rw-r--r--libstdc++-v3/include/tr1/functional17
-rw-r--r--libstdc++-v3/include/tr1/hashtable_policy.h8
-rw-r--r--libstdc++-v3/include/tr1/random.tcc5
-rw-r--r--libstdc++-v3/include/tr1/shared_ptr.h8
-rw-r--r--libstdc++-v3/include/tr1/type_traits5
-rw-r--r--libstdc++-v3/include/tr1_impl/array20
-rw-r--r--libstdc++-v3/include/tr1_impl/boost_sp_counted_base.h15
-rw-r--r--libstdc++-v3/include/tr1_impl/cmath126
-rw-r--r--libstdc++-v3/include/tr1_impl/utility2
-rw-r--r--libstdc++-v3/libsupc++/Makefile.in80
-rw-r--r--libstdc++-v3/libsupc++/cxxabi.h38
-rw-r--r--libstdc++-v3/libsupc++/eh_arm.cc12
-rw-r--r--libstdc++-v3/libsupc++/eh_ptr.cc9
-rw-r--r--libstdc++-v3/libsupc++/exception_ptr.h35
-rw-r--r--libstdc++-v3/libsupc++/initializer_list24
-rw-r--r--libstdc++-v3/libsupc++/new2
-rw-r--r--libstdc++-v3/libsupc++/unwind-cxx.h33
-rw-r--r--libstdc++-v3/po/Makefile.in57
-rw-r--r--libstdc++-v3/python/Makefile.in53
-rw-r--r--libstdc++-v3/python/hook.in6
-rw-r--r--libstdc++-v3/python/libstdcxx/v6/printers.py64
-rw-r--r--libstdc++-v3/src/Makefile.am32
-rw-r--r--libstdc++-v3/src/Makefile.in124
-rw-r--r--libstdc++-v3/src/atomic.cc5
-rw-r--r--libstdc++-v3/src/chrono.cc4
-rw-r--r--libstdc++-v3/src/compatibility-c++0x.cc28
-rw-r--r--libstdc++-v3/src/compatibility.cc12
-rw-r--r--libstdc++-v3/src/condition_variable.cc4
-rw-r--r--libstdc++-v3/src/future.cc4
-rw-r--r--libstdc++-v3/src/hash-string-aux.cc48
-rw-r--r--libstdc++-v3/src/hash_bytes.cc184
-rw-r--r--libstdc++-v3/src/hash_tr1.cc25
-rw-r--r--libstdc++-v3/src/ios_init.cc5
-rw-r--r--libstdc++-v3/src/localename.cc2
-rw-r--r--libstdc++-v3/src/mt_allocator.cc36
-rw-r--r--libstdc++-v3/src/system_error.cc4
-rw-r--r--libstdc++-v3/src/thread.cc4
-rw-r--r--libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c16
-rw-r--r--libstdc++-v3/testsuite/18_support/exception/38732.cc9
-rw-r--r--libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc38
-rw-r--r--libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc60
-rw-r--r--libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc30
-rw-r--r--libstdc++-v3/testsuite/18_support/new_delete_placement.cc4
-rw-r--r--libstdc++-v3/testsuite/18_support/pthread_guard.cc8
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc8
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc5
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc5
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc8
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc9
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc5
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc10
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc3
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc5
-rw-r--r--libstdc++-v3/testsuite/20_util/addressof/1.cc51
-rw-r--r--libstdc++-v3/testsuite/20_util/addressof/requirements/explicit_instantiation.cc (renamed from libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc)9
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/clocks/1.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc8
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/explicit_instantiation.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/value.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/identity/value.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc31
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc78
-rw-r--r--libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc9
-rw-r--r--libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc9
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/44487.cc51
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/piecewise.cc98
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc9
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc9
-rw-r--r--libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc13
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc34
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc14
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc93
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc48
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc51
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc43
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc72
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc54
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc37
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc46
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc36
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc52
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc48
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc50
-rw-r--r--libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc9
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc10
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc37
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc5
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc6
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc5
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc7
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/facet/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc9
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc9
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/2.cc11
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc7
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc9
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc17
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc13
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc17
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc13
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc10
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc8
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc12
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc14
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc14
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc11
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc13
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc13
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc13
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc6
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc17
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc18
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc19
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc14
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc15
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc16
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/bitset/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc43
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/deque/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/deque/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/3.cc (renamed from libstdc++-v3/testsuite/23_containers/deque/invalidation/3.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/4.cc (renamed from libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/capacity/resize_size.cc (renamed from libstdc++-v3/testsuite/23_containers/forward_list/cons/10.cc)19
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/cons_size.cc (renamed from libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc)19
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc94
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc43
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/list/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/list/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc (renamed from libstdc++-v3/testsuite/23_containers/list/invalidation/3.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc (renamed from libstdc++-v3/testsuite/23_containers/list/invalidation/4.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/pthread1.cc16
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/pthread5.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/map/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/map/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/dr130.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/pthread6.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/multimap/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/multimap/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc30
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/multiset/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/multiset/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/set/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/set/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/dr130.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc (renamed from libstdc++-v3/testsuite/23_containers/unordered_map/dr1189.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc (renamed from libstdc++-v3/testsuite/23_containers/unordered_multimap/dr1189.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc (renamed from libstdc++-v3/testsuite/23_containers/unordered_multiset/dr1189.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc57
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/dr1189.cc (renamed from libstdc++-v3/testsuite/23_containers/unordered_set/dr1189.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc10
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc10
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/resize/1.cc (renamed from libstdc++-v3/testsuite/23_containers/vector/resize/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc56
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc43
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc32
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/1.cc (renamed from libstdc++-v3/testsuite/23_containers/vector/invalidation/1.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/2.cc (renamed from libstdc++-v3/testsuite/23_containers/vector/invalidation/2.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/3.cc (renamed from libstdc++-v3/testsuite/23_containers/vector/invalidation/3.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/4.cc (renamed from libstdc++-v3/testsuite/23_containers/vector/invalidation/4.cc)0
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/range_access.cc35
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc29
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/resize/moveable.cc75
-rw-r--r--libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc4
-rw-r--r--libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc3
-rw-r--r--libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc33
-rw-r--r--libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc4
-rw-r--r--libstdc++-v3/testsuite/24_iterators/operations/40497.cc41
-rw-r--r--libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc4
-rw-r--r--libstdc++-v3/testsuite/24_iterators/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc30
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc30
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/minmax/3.cc5
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc3
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc16
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc92
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc4
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc6
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc10
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc85
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc85
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc10
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc13
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc12
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc14
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc14
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc14
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc27
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc27
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc35
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc35
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/10.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/5268.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/9.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/types/2.cc3
-rw-r--r--libstdc++-v3/testsuite/28_regex/03_requirements/typedefs.cc38
-rw-r--r--libstdc++-v3/testsuite/28_regex/04_header/regex/std_c++0x_neg.cc23
-rw-r--r--libstdc++-v3/testsuite/28_regex/05_constants/error_type.cc54
-rw-r--r--libstdc++-v3/testsuite/28_regex/05_constants/match_flag_type.cc53
-rw-r--r--libstdc++-v3/testsuite/28_regex/05_constants/syntax_option_type.cc51
-rw-r--r--libstdc++-v3/testsuite/28_regex/06_exception_type/regex_error.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/ctor.cc50
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/isctype.cc48
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/length.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_classname.cc54
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_collatename.cc50
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/transform.cc51
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/transform_primary.cc55
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/translate.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/translate_nocase.cc46
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/char/value.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/ctor.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/length.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/transform.cc51
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate_nocase.cc46
-rw-r--r--libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/value.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring_op.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/moveable.cc50
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/pstring.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/range.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string_op.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring_op.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/pstring.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/range.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string.cc45
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string_op.cc45
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/cstring.cc (renamed from libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc)24
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_char.cc42
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_wchar_t.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/string_range_01_02_03.cc52
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring.cc42
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_awk.cc37
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_ecma.cc37
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_egrep.cc37
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_grep.cc39
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/default.cc47
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/range.cc42
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/copy_char.cc45
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/cstring.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/string_range_01_02_03.cc52
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/move_char.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_char.cc54
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_wchar_t.cc56
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/cstring.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/default.cc48
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/range.cc43
-rw-r--r--libstdc++-v3/testsuite/28_regex/08_basic_regex/regex.cc37
-rw-r--r--libstdc++-v3/testsuite/28_regex/09_sub_match/cast_char.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/09_sub_match/cast_wchar_t.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/09_sub_match/length.cc49
-rw-r--r--libstdc++-v3/testsuite/28_regex/09_sub_match/typedefs.cc38
-rw-r--r--libstdc++-v3/testsuite/28_regex/10_match_results/ctors/char/default.cc52
-rw-r--r--libstdc++-v3/testsuite/28_regex/10_match_results/ctors/wchar_t/default.cc52
-rw-r--r--libstdc++-v3/testsuite/28_regex/10_match_results/typedefs.cc44
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_01.cc63
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_00_03.cc60
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_01_03.cc60
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_02_03.cc61
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_plus.cc65
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_questionmark.cc65
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_any.cc60
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_00_03.cc60
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_01_03.cc60
-rw-r--r--libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_02_03.cc61
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/char/default.cc35
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t/default.cc35
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/typedefs.cc40
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char/default.cc35
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/wchar_t/default.cc35
-rw-r--r--libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/typedefs.cc40
-rw-r--r--libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/28_regex/range_access.cc31
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc19
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc19
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc5
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc4
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc4
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc13
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc13
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/wait.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc5
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc7
-rw-r--r--libstdc++-v3/testsuite/Makefile.am8
-rw-r--r--libstdc++-v3/testsuite/Makefile.in65
-rw-r--r--libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc6
-rw-r--r--libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc11
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc6
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc5
-rw-r--r--libstdc++-v3/testsuite/ext/profile/profiler_algos.cc147
-rw-r--r--libstdc++-v3/testsuite/ext/rope/44708.cc31
-rw-r--r--libstdc++-v3/testsuite/ext/rope/44963.cc31
-rw-r--r--libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc6
-rw-r--r--libstdc++-v3/testsuite/ext/slist/23781.cc3
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc7
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc7
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/range_access.cc37
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp2
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp144
-rw-r--r--libstdc++-v3/testsuite/lib/prune.exp31
-rw-r--r--libstdc++-v3/testsuite/libstdc++-abi/abi.exp2
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/append-1.cc (renamed from libstdc++-v3/testsuite/performance/21_strings/string_append.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/append-2.cc (renamed from libstdc++-v3/testsuite/performance/21_strings/string_append_2.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc (renamed from libstdc++-v3/testsuite/performance/21_strings/string_cons_input_iterator.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc (renamed from libstdc++-v3/testsuite/performance/21_strings/string_copy_cons_and_dest.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/find.cc (renamed from libstdc++-v3/testsuite/performance/21_strings/string_find.cc)0
-rw-r--r--libstdc++-v3/testsuite/performance/21_strings/hash.cc58
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc43
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc44
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc43
-rw-r--r--libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc43
-rw-r--r--libstdc++-v3/testsuite/performance/30_threads/future/polling.cc11
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc38
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc4
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc8
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc6
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc9
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc4
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc10
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc14
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc3
-rw-r--r--libstdc++-v3/testsuite/util/debug/checks.h379
-rw-r--r--libstdc++-v3/testsuite/util/exception/safety.h8
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc52
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc18
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/replacement_memory_operators.h8
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.h4
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_allocator.h11
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_api.h48
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_common_types.h5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_error.h6
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_hooks.cc7
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_hooks.h5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_io.h38
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_iterators.h26
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_performance.h20
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_tr1.h34
1558 files changed, 39750 insertions, 17266 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index a5f2cafdc3e..aa9d6249248 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,3030 @@
+2010-09-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_raw_storage_iter.h (raw_storage_iterator<>::
+ operator=(const _Tp&)): Use std::__addressof.
+
+2010-09-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/system_error (system_error::system_error(error_code),
+ system_error(error_code, const string&), system_error(int, const
+ error_category&), system_error(int, const error_category&,
+ const string&)): Fix for what() to return the NBTS recommended in
+ the Note in 19.5.6.2/14.
+ * testsuite/19_diagnostics/system_error/cons-1.cc: Adjust.
+ * testsuite/19_diagnostics/system_error/what-1.cc: Likewise.
+ * testsuite/19_diagnostics/system_error/what-2.cc: Likewise.
+ * testsuite/19_diagnostics/system_error/what-big.cc: Likewise.
+ * testsuite/19_diagnostics/system_error/what-3.cc: Likewise.
+
+ * testsuite/19_diagnostics/system_error/what-4.cc: Tidy includes.
+
+2010-09-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/complex (complex<float>::operator=(float),
+ complex<float>::operator+=(float),
+ complex<float>::operator-=(float),
+ complex<double>::operator=(double),
+ complex<double>::operator+=(double),
+ complex<double>::operator-=(double),
+ complex<long double>::operator=(long double),
+ complex<long double>::operator+=(long double),
+ complex<long double>::operator-=(long double)): Simplify a tad,
+ just forward to the underlying __complex__ T operators, as
+ operator*= and operator/= already do.
+
+ * include/std/complex (complex<float>, complex<double>,
+ complex<long double>): Simplify spelling of return types, just
+ say complex, instead of complex<float>, complex<double>,
+ complex<long double>, respectively.
+
+2010-09-15 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/lib/libstdc++.exp,([check_v3_target_namedlocale]):
+ Clean temporary source file once compiled.
+
+2010-09-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * doc/xml/manual/prerequisites.xml: Update "C" library locale
+ information prerequisites.
+
+2010-09-15 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/lib/libstdc++.exp, dg-options.exp
+ ([check_v3_target_namedlocale]): Take the name of the required locale.
+ * testsuite/27_io/objects/wchar_t/9520.cc, 11.cc, 13.cc, 10.cc, 12.cc:
+ Specify locale name to check.
+ * testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc, 13007-1.cc,
+ 13007-2.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/imbue/char/9322.cc, 13007-1.cc,
+ 13007-2.cc: Likewise.
+ * testsuite/27_io/basic_ios/copyfmt/char/2.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/imbue/char/9322.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc:
+ Likewise.
+ * testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc:
+ Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc, 2.cc:
+ Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc, 9322.cc,
+ 13582-2.cc, 2.cc, 13582-3.cc, 12868.cc, 14975-2.cc, 13007.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc, 13171-4.cc,
+ 9322.cc, 13582-2.cc, 2.cc, 14975-1.cc, 13007.cc, 13171-1.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc,
+ 11305-2.cc, 11305-3.cc, 11305-4.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc, 1.cc, 2.cc,
+ 3.cc, 11389-1.cc, 4.cc, 11389-2.cc, 5.cc, 11389-3.cc, 11389-4.cc:
+ Likewise.
+ * testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc: Likewise.
+ * testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc:
+ Likewise.
+ * testsuite/27_io/manipulators/extended/put_money/char/1.cc: Likewise.
+ * testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc:
+ Likewise.
+ * testsuite/27_io/manipulators/extended/get_money/char/1.cc: Likewise.
+ * testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc: Likewise.
+ * testsuite/22_locale/money_put/put/wchar_t/1.cc, 2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/money_put/put/char/1.cc, 2.cc, 3.cc, 9780-3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/facet/2.cc: Likewise.
+ * testsuite/22_locale/collate/hash/wchar_t/2.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate/hash/char/2.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate/compare/wchar_t/1.cc, 2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate/compare/char/1.cc, 2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate/transform/wchar_t/2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate/transform/char/2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/cons/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/to/char/wrapped_locale.cc, wrapped_env.cc:
+ Likewise.
+ * testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/scan/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/widen/wchar_t/2.cc, 3.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/widen/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/narrow/wchar_t/3.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/ctype/is/wchar_t/2.cc,wrapped_locale.cc,
+ wrapped_env.cc: Likewise
+ * testsuite/22_locale/ctype/is/char/2.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/2.cc, 3.cc, 4.cc, 6.cc,
+ 7.cc, 8.cc, wrapped_env.cc, wrapped_locale.cc, 17038.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/2.cc, 3.cc, 4.cc, 6.cc,
+ 9780-1.cc, 7.cc, 8.cc, wrapped_env.cc, wrapped_locale.cc, 17038.cc:
+ Likewise.
+ * testsuite/22_locale/money_get/get/wchar_t/1.cc, 2.cc, 3.cc, 4.cc,
+ wrapped_env.cc, 10.cc, 11528.cc, wrapped_locale.cc, 11.cc, 12.cc,
+ 13.cc, 15.cc, 16.cc, 17.cc, 18.cc: Likewise.
+ * testsuite/22_locale/money_get/get/char/1.cc, 2.cc, 3.cc, 4.cc,
+ wrapped_env.cc, 10.cc, 11528.cc, wrapped_locale.cc, 11.cc, 12.cc,
+ 13.cc, 15.cc, 16.cc, 17.cc, 18.cc: Likewise
+ * testsuite/22_locale/num_put/put/wchar_t/1.cc, 3.cc, 5.cc,
+ wrapped_env.cc, 20914.cc, wrapped_locale.cc, 20909.cc: Likewise.
+ * testsuite/22_locale/num_put/put/char/1.cc, 3.cc, 5.cc, 9780-2.cc,
+ wrapped_env.cc, 20914.cc, wrapped_locale.cc, 20909.cc: Likewise.
+ * testsuite/22_locale/codecvt/unshift/wchar_t/2.cc, wrapped_locale.cc,
+ 3.cc, 4.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ testsuite/22_locale/codecvt/length/wchar_t/2.cc, wrapped_locale.cc,
+ 3.cc, 4.cc, 7.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/length/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc,
+ wrapped_locale.cc, 3.cc, 4.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/encoding/wchar_t/2.cc, wrapped_locale.cc,
+ 3.cc, 4.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/in/wchar_t/2.cc, wrapped_locale.cc, 3.cc,
+ 4.cc, 7.cc, 8.cc, 9.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/in/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/max_length/wchar_t/2.cc,
+ wrapped_locale.cc, 3.cc, 4.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/out/wchar_t/2.cc, wrapped_locale.cc,
+ 3.cc, 4.cc, 7.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/codecvt/out/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/moneypunct_byname/named_equivalence.cc: Likewise.
+ * testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_monthname/char/2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_weekday/char/2.cc, 38081-1.cc,
+ wrapped_locale.cc, 38081-2.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_date/wchar_t/12750.cc, 26701.cc,
+ 2.cc, wrapped_locale.cc, 4.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_date/char/12750.cc, 26701.cc,
+ 2.cc, wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_time/wchar_t/1.cc, 2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/time_get/get_time/char/1.cc, 2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/num_get/get/wchar_t/1.cc, 3.cc, 5.cc, 6.cc, 9.cc,
+ wrapped_env.cc, wrapped_locale.cc: Likewise.
+ * testsuite/22_locale/num_get/get/char/1.cc, 3.cc, 5.cc, 6.cc, 9.cc,
+ wrapped_env.cc, wrapped_locale.cc: Likewise.
+ * testsuite/22_locale/locale/cons/38368.cc, 2.cc, 4.cc, 5.cc, 7.cc,
+ 12658_thread-1.cc, 12658_thread-2.cc, 40184.cc, 29217.cc, 38365.cc:
+ Likewise.
+ * testsuite/22_locale/locale/global_locale_objects/14071.cc, 2.cc:
+ Likewise.
+ * testsuite/22_locale/moneypunct/40712.cc: Likewise.
+ * testsuite/22_locale/moneypunct/members/wchar_t/2.cc,
+ wrapped_locale.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/moneypunct/members/char/2.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/messages_byname/named_equivalence.cc: Likewise.
+ * testsuite/22_locale/numpunct_byname/named_equivalence.cc: Likewise.
+ * testsuite/22_locale/messages/members/char/1.cc, 2.cc,
+ wrapped_locale.cc, 3.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/numpunct/members/wchar_t/2.cc, wrapped_locale.cc,
+ wrapped_env.cc: Likewise.
+ * testsuite/22_locale/numpunct/members/char/2.cc, wrapped_locale.cc,
+ 3.cc, wrapped_env.cc: Likewise.
+ * testsuite/22_locale/collate_byname/named_equivalence.cc: Likewise.
+
+2010-09-14 Matt Austern <austern@google.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/performance/21_strings/hash.cc: New.
+
+2010-09-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/performance/21_strings/string_append.cc: Rename to...
+ * testsuite/performance/21_strings/append-1.cc: ... this.
+ * testsuite/performance/21_strings/string_append_2.cc: Rename to...
+ * testsuite/performance/21_strings/append-2.cc: ... this.
+ * testsuite/performance/21_strings/string_cons_input_iterator.cc:
+ Rename to...
+ * testsuite/performance/21_strings/cons_input_iterator.cc: ... this.
+ * testsuite/performance/21_strings/string_copy_cons_and_dest.cc:
+ Rename to...
+ * testsuite/performance/21_strings/copy_cons_and_dest.cc: ... this.
+ * testsuite/performance/21_strings/string_find.cc: Rename to...
+ * testsuite/performance/21_strings/find.cc: ... this.
+
+2010-09-13 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/api.xml: Add title.
+ * doc/xml/manual/spine.xml: Same.
+ * doc/xml/spine.xml: Same.
+
+2010-09-13 Matt Austern <austern@google.com>
+
+ * src/hash_bytes.cc: New file, exports _Hash_bytes (a Murmur hash),
+ and _Fnv_hash_bytes (based on a FNV algorithm).
+ * src/compatibility-c++0x.cc (hash<string>::operator(),
+ hash<const string&>::operator(), hash<wstring>::operator(),
+ hash<const wstring&>::operator(), hash<error_code>::operator()):
+ Adjust, use _Hash_bytes.
+ * include/std/system_error (hash<error_code>::operator()): Likewise.
+ * include/std/thread (hash<thread::id>operator()): Likewise.
+ * include/std/bitset (hash<bitset>operator()): Likewise.
+ * include/bits/basic_string.h (hash<string>::operator(),
+ hash<wstring>::operator(), hash<u16string>::operator(),
+ hash<u32string>::operator()): Adjust.
+ * include/bits/vector.tcc (hash<vector<bool>>::operator()): Adjust.
+ * include/bits/functional_hash.h (_Hash_bytes, _Fnv_hash_bytes):
+ Declare.
+ (struct _Hash_impl, struct _Fnv_hash_impl): Add, use _Hash_bytes
+ and _Fnv_hash_bytes, respectively.
+ (hash<float>::operator(), hash<double>::operator()): Adjust.
+ * config/abi/pre/gnu.ver: Add exports.
+ * src/Makefile.am: Add.
+ * src/Makefile.in: Regenerate.
+
+2010-09-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/forward_list.h (forward_list<>::resize(size_type,
+ value_type)): Fix signature, per LWG 1340.
+ * include/bits/forward_list.tcc: Adjust definition.
+
+2010-09-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/27_io/basic_filebuf/seekoff/char/4.cc: New.
+ * testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc: Likewise.
+
+2010-09-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/hash-string-aux.cc: Remove. Move contents...
+ * src/hash_tr1.cc: ... here.
+ * src/compatibility-c++0x.cc: ... and here.
+
+2010-09-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45613
+ * include/bits/random.tcc: Add missing include guards.
+ * include/bits/random.h: Likewise.
+ * include/tr1/random.tcc: Likewise.
+
+2010-09-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * libsupc++/cxxabi.h: Uglify nothrow to __nothrow__; fix a few
+ inconsistent uglifications everywhere.
+
+2010-09-07 Paolo Carlini <paolo.carlini@oracle.com>
+ Marc Glisse <marc.glisse@normalesup.org>
+
+ PR libstdc++/45549
+ * include/bits/cpp_type_traits.h (__is_iterator_helper): Rename to
+ __has_iterator_category.
+ (__is_iterator): Adjust.
+ * include/bits/stl_iterator_base_types.h (__iterator_traits): Add
+ in C++0x mode, use the latter.
+ (iterator_traits): In C++0x mode, derive from the latter.
+ * include/bits/stl_iterator_base_funcs.h (next, prev): Remove
+ enable_if on the return type.
+
+2010-09-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45398
+ * include/std/atomic (atomic<_TP*>::store): Define.
+
+ * include/std/atomic (atomic<_TP*>::load, exchange): Define inline.
+
+2010-09-06 Jason Merrill <jason@redhat.com>
+
+ * testsuite/libstdc++-abi/abi.exp: Add "libstdc++-abi/" to
+ abi_check FAIL message.
+
+2010-09-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45347
+ * include/ext/concurrence.h: Add #pragma GCC system_header.
+
+2010-09-03 François Dumont <francois.cppdevs@free.fr>
+
+ * testsuite/lib/libstdc++.exp ([check_v3_target_debug_mode]): Fix so
+ that it really detects when debug mode is activated.
+ * testsuite/util/debug/construct_neg.h, insert_neg.h, assign_neg.h:
+ Remove, content moved...
+ * testsuite/util/debug/checks.h: ... here. Modify checks to take the
+ type of the container to test rather than an intermediate container
+ type traits helper.
+ * testsuite/23_containers/unordered_map/debug/insert1_neg.cc: Update to
+ use dg-require-debug-mode when necessary and use new check functions.
+ * testsuite/23_containers/unordered_map/debug/construct1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_map/debug/construct2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_map/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_map/debug/construct3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_map/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_map/debug/construct4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_map/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/multimap/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/debug/assign1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/assign2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/assign3_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/assign4_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/debug/construct1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/debug/construct2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/debug/construct3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/debug/construct4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_set/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/assign1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/assign2_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/assign3_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/assign4_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/assign1_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/assign2_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/assign3_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/assign4_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc:
+ Likewise.
+ * testsuite/23_containers/map/debug/insert1_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/construct1_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/construct2_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/insert2_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/construct3_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/insert3_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/construct4_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/insert4_neg.cc: Likewise.
+
+ * testsuite/23_containers/unordered_map/debug/cont_traits.h: Remove.
+ * testsuite/23_containers/unordered_map/debug/debug_cont_traits.h:
+ Likewise.
+ * testsuite/23_containers/multimap/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/multimap/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/set/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/set/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/cont_traits.h:
+ Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/
+ debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/vector/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/vector/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/unordered_set/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/unordered_set/debug/debug_cont_traits.h:
+ Likewise.
+ * testsuite/23_containers/deque/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/deque/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/multiset/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/multiset/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/list/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/list/debug/debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/cont_traits.h:
+ Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/
+ debug_cont_traits.h: Likewise.
+ * testsuite/23_containers/map/debug/cont_traits.h: Likewise.
+ * testsuite/23_containers/map/debug/debug_cont_traits.h: Likewise.
+
+ * testsuite/21_strings/basic_string/element_access/char: Tidy.
+ * testsuite/21_strings/basic_string/element_access/wchar_t: Likewise.
+
+2010-09-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/40974
+ * include/Makefile.am: Add -nostdinc++ to PCHFLAGS.
+ * include/Makefile.in: Regenerate.
+
+2010-09-01 Christopher Yeleighton <giecrilj@stegny.2a.pl>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45488
+ * include/bits/stl_algobase.h (lower_bound): Clean-up a tad, move
+ two variables inside the main loop.
+ * include/bits/stl_algo.h (lower_bound, upper_bound, equal_range):
+ Likewise.
+
+2010-08-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44480
+ * include/bits/hashtable.h (_Hashtable<>::_M_begin_bucket_index):
+ Add, caching the index of the first non-empty bucket.
+ (begin, cbegin): Use it.
+ (_Hashtable<>::_Hashtable(_InputIterator, _InputIterator, ...),
+ _Hashtable(const _Hashtable&), _Hashtable(_Hashtable&&),
+ swap(_Hashtable&), clear): Adjust.
+ (_M_insert_bucket, _M_insert, erase(const_iterator),
+ erase(const key_type&), _M_rehash): Update it.
+
+ * include/bits/hashtable.h (_Hashtable<>::_M_erase): Remove.
+ (erase(const_iterator)): Inline the latter.
+
+2010-08-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/forward_list/operations/remove_freed.cc:
+ Fix test01 return type to void.
+ * testsuite/util/exception/safety.h: Avoid -Wall -m32 warnings.
+ * testsuite/util/replacement_memory_operators.h: Likewise.
+
+2010-08-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/bitset/invalidation: Move...
+ * testsuite/23_containers/bitset/debug/invalidation: ... here.
+ * testsuite/23_containers/deque/invalidation: Move...
+ * testsuite/23_containers/deque/debug/invalidation: ... here.
+ * testsuite/23_containers/list/invalidation: Move...
+ * testsuite/23_containers/list/debug/invalidation: ... here.
+ * testsuite/23_containers/map/invalidation: Move...
+ * testsuite/23_containers/map/debug/invalidation: ... here.
+ * testsuite/23_containers/multimap/invalidation: Move...
+ * testsuite/23_containers/multimap/debug/invalidation: ... here.
+ * testsuite/23_containers/set/invalidation: Move...
+ * testsuite/23_containers/set/debug/invalidation: ... here.
+ * testsuite/23_containers/multiset/invalidation: Move...
+ * testsuite/23_containers/multiset/debug/invalidation: ... here.
+ * testsuite/23_containers/vector/invalidation: Move...
+ * testsuite/23_containers/vector/debug/invalidation: ... here.
+
+2010-08-29 François Dumont <francois.cppdevs@free.fr>
+
+ * include/bits/stl_algobase.h (_Iter_base): Move...
+ * include/bits/stl_iterator_base_types.h: ...here.
+ * include/debug/functions.h (__check_valid_range, __check_string,
+ __check_sorted): Fix to not depend on _GLIBCXX_DEBUG; include
+ formatter.h and use formatting macros for a consistent debug result.
+ * include/debug/formatter.h (__check_singular): Declare; do not
+ include debug.h.
+ * include/debug/debug.h: Do not include formatter.h.
+ * include/debug/safe_iterator.h (_Safe_iterator::_Base_Iterator)
+ rename to iterator_type.
+ (__gnu_debug::__base): Add.
+ * include/debug/set.h: Use everywhere __gnu_debug::__base once
+ iterator range valided.
+ * include/debug/unordered_map: Likewise.
+ * include/debug/multiset.h: Likewise.
+ * include/debug/vector: Likewise.
+ * include/debug/unordered_set: Likewise.
+ * include/debug/deque: Likewise.
+ * include/debug/map.h: Likewise.
+ * include/debug/string: Likewise.
+ * include/debug/list: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * testsuite/23_containers/util/debug/assign_neg.h: New test cases on
+ debug checks performed on container assign operation.
+ * testsuite/23_containers/util/debug/construct_neg.h: New test cases
+ on debug checks on constructors.
+ * testsuite/23_containers/util/debug/insert_neg.h: New test cases on
+ debug checks performed on container insert operations.
+ * testsuite/23_containers/unordered_map/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: New.
+ * testsuite/23_containers/multimap/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/set/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/map/debug/cont_traits.h,
+ debug_cont_traits.h, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/vector/debug/cont_traits.h,
+ debug_cont_traits.h, assign1_neg.cc, assign2_neg.cc, assign3_neg.cc,
+ assign4_neg.cc, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/deque/debug/cont_traits.h,
+ debug_cont_traits.h, assign1_neg.cc, assign2_neg.cc, assign3_neg.cc,
+ assign4_neg.cc, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/23_containers/list/debug/cont_traits.h,
+ debug_cont_traits.h, assign1_neg.cc, assign2_neg.cc, assign3_neg.cc,
+ assign4_neg.cc, construct1_neg.cc, construct2_neg.cc,
+ construct3_neg.cc, construct4_neg.cc, insert1_neg.cc, insert2_neg.cc,
+ insert3_neg.cc, insert4_neg.cc: Likewise.
+ * testsuite/performance/23_containers/range_construct/
+ list_construct1.cc: New, validate performance impact of the patch
+ on the debug mode.
+ * testsuite/performance/23_containers/range_construct/
+ list_construct2.cc: Likewise.
+ * testsuite/performance/23_containers/range_construct/
+ vector_construct.cc: Likewise.
+ * testsuite/performance/23_containers/range_construct/
+ deque_construct.cc: Likewise.
+
+2010-08-26 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/stl_iterator_base_types.h: Fix doxygen warning.
+
+2010-08-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure: Regenerate.
+
+2010-08-18 Kostya Serebryany <kcc@google.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45276
+ * doc/xml/manual/debug.xml ([debug.races]): Add.
+
+2010-08-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45300
+ * include/c_std/cwchar: Replace 'restrict' -> '__restrict'.
+ * include/c_global/cwchar: Likewise.
+
+2010-08-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45300
+ * include/c_std/cstdlib: Replace 'restrict' -> '__restrict'.
+ * include/c_std/cstdio: Likewise.
+ * include/c_global/cstdlib: Likewise.
+ * include/c_global/cstdio: Likewise.
+
+2010-08-16 Chris Moller <cmoller@redhat.com>
+
+ http://sourceware.org/bugzilla/show_bug.cgi?id=11874
+ * python/libstdcxx/v6/printers.py (StdVectorPrinter): Added stuff
+ to handle pretty-printing of std::vector<bool>.
+
+2010-08-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/45283
+ * testsuite/performance/30_threads/future/polling.cc: Replace calls to
+ shared_future::is_ready.
+
+2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::operator=(const
+ _Hashtable&)): Move inline.
+ (operator=(_Hashtable&&)): Define.
+ * include/bits/unordered_map.h (unordered_map(unordered_map&&),
+ unordered_map(const unordered_map&), unordered_multimap
+ (unordered_multimap&&), unordered_multimap(const unordered_multimap&),
+ __unordered_map(__unordered_map&&), __unordered_map(const
+ __unordered_map&), __unordered_multimap(__unordered_multimap&&),
+ __unordered_multimap(const __unordered_multimap&)): Do not define,
+ leave implicit.
+ * include/bits/unordered_set.h (unordered_set(unordered_set&&),
+ unordered_set(const unordered_set&), unordered_multiset
+ (unordered_multiset&&), unordered_multiset(const unordered_multiset&),
+ __unordered_set(__unordered_set&&), __unordered_set(const
+ __unordered_set&), __unordered_multiset(__unordered_multiset&&),
+ __unordered_multiset(const __unordered_multiset&)): Likewise.
+
+ * include/bits/unordered_map.h (__unordered_map(initializer_list<>),
+ __unordered_map<>::operator=(initializer_list<>),
+ __unordered_multimap(initializer_list<>), __unordered_multimap<>::
+ operator=(initializer_list<>)): Add.
+ * include/bits/unordered_set.h (__unordered_set(initializer_list<>),
+ __unordered_set<>::operator=(initializer_list<>),
+ __unordered_multiset(initializer_list<>), __unordered_multiset<>::
+ operator=(initializer_list<>)): Likewise.
+
+ * include/bits/unordered_map.h (__unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Fix __n default to 0.
+ * include/bits/unordered_set.h (__unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/debug/unordered_map (unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_map(_InputIterator, _InputIterator,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/debug/unordered_set (unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_set(_InputIterator, _InputIterator,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/profile/unordered_map (unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_map(_InputIterator, _InputIterator,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/profile/unordered_set (unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_set(_InputIterator, _InputIterator,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+
+2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45281
+ * include/bits/stl_queue.h (queue(queue&&), operator=(queue&&),
+ priority_queue(priority_queue&&), operator=(priority_queue&&)):
+ Remove, per CH 15.
+
+2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/unordered_map/dr1189.cc: Move to...
+ * testsuite/23_containers/unordered_map/hash_policy/dr1189.cc:
+ ... here.
+ * testsuite/23_containers/unordered_set/dr1189.cc: Move to...
+ * testsuite/23_containers/unordered_set/hash_policy/dr1189.cc:
+ ... here.
+ * testsuite/23_containers/unordered_multimap/dr1189.cc: Move to...
+ * testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc:
+ ... here.
+ * testsuite/23_containers/unordered_multiset/dr1189.cc: Move to...
+ * testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc:
+ ... here.
+
+ * testsuite/23_containers/unordered_set/hash_policy/26132.cc: New.
+
+2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * src/ios_init.cc (ios_base::Init::~Init): Add back semicolon
+ at the end of the _GLIBCXX_SYNCHRONIZATION_HAPPENS_* macros,
+ removed by mistake.
+ * include/tr1_impl/boost_sp_counted_base.h: Likewise.
+ * include/ext/rc_string_base.h: Likewise.
+ * include/bits/locale_classes.h: Likewise.
+ * include/bits/basic_string.h: Likewise.
+ * include/bits/ios_base.h: Likewise.
+ * include/bits/c++config: Adjust comment.
+
+2010-08-12 Kostya Serebryany <kcc@google.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/c++config (_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE,
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER): Add.
+ * src/ios_init.cc (ios_base::Init::~Init): Decorate with the
+ latter.
+ * include/tr1_impl/boost_sp_counted_base.h: Likewise.
+ * include/ext/rc_string_base.h: Likewise.
+ * include/bits/locale_classes.h: Likewise.
+ * include/bits/basic_string.h: Likewise.
+ * include/bits/ios_base.h: Likewise.
+ * testsuite/27_io/ios_base/cons/assign_neg.cc: Adjust dg-error
+ line number.
+ * testsuite/27_io/ios_base/cons/copy_neg.cc: Likewise.
+ * testsuite/ext/profile/mutex_extensions.cc: Likewise.
+
+2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::erase(const key_type&)):
+ Use std::__addressof.
+
+ * include/bits/forward_list.tcc (forward_list<>::remove): Deal
+ correctly with &__tmp->_M_value == &__val.
+ * testsuite/23_containers/forward_list/operations/remove_freed.cc:
+ New.
+
+2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_algo.h (shuffle): Change signature consistently
+ with random_shuffle (US 121).
+ * include/bits/algorithmfwd.h: Adjust.
+ * testsuite/25_algorithms/shuffle/requirements/
+ explicit_instantiation/2.cc: Likewise.
+ * testsuite/25_algorithms/shuffle/requirements/
+ explicit_instantiation/pod.cc: Likewise.
+
+2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (forward): Reinstate the N2835 version.
+
+2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/42925
+ * include/bits/unique_ptr.h (operator==(const unique_ptr<>&,
+ nullptr_t), operator==(nullptr_t, const unique_ptr<>&),
+ operator!=(const unique_ptr<>&, nullptr_t),
+ operator!=(nullptr_t, const unique_ptr<>&)): Add.
+ * include/bits/shared_ptr_base.h (operator==(const __shared_ptr<>&,
+ nullptr_t), operator==(nullptr_t, const __shared_ptr<>&),
+ operator!=(const __shared_ptr<>&, nullptr_t),
+ operator!=(nullptr_t, const __shared_ptr<>&)): Likewise.
+ * include/bits/shared_ptr.h (operator==(const shared_ptr<>&,
+ nullptr_t), operator==(nullptr_t, const shared_ptr<>&),
+ operator!=(const shared_ptr<>&, nullptr_t),
+ operator!=(nullptr_t, const shared_ptr<>&)): Likewise.
+ * testsuite/20_util/unique_ptr/comparison/42925.cc: New.
+ * testsuite/20_util/shared_ptr/comparison/42925.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
+ dg-error line numbers.
+
+2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/unique_ptr.h: Replace _Tp_Deleter -> _Dp, and
+ _Up_Deleter -> _Ep.
+
+2010-08-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/shared_ptr_base.h: Remove a few now redundant
+ __glibcxx_function_requires(_ConvertibleConcept...).
+ * testsuite/20_util/shared_ptr/cons/43820.cc: Adjust dg-error
+ line number.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
+
+2010-08-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/ext/stdio_sync_filebuf/char/1.cc: Avoid -Wall
+ warnings.
+ * testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc: Likewise.
+
+2010-08-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/array/range_access.cc: Avoid -Wall
+ warnings.
+
+2010-08-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Avoid -Wall
+ warnings.
+
+ * include/bits/shared_ptr.h (shared_ptr<>::shared_ptr
+ (const shared_ptr<>&), shared_ptr(shared_ptr<>&&), weak_ptr<>::
+ weak_ptr(const weak_ptr<>&), weak_ptr(const shared_ptr<>&)):
+ Constrain appropriately via std::is_convertible, etc.
+ * include/bits/shared_ptr_base.h: Likewise.
+ * include/bits/unique_ptr.h (default_delete<>::
+ default_delete(const default_delete<>&),
+ unique_ptr<>::unique_ptr(unique_ptr<>&&), operator=(unique_ptr<>&&)):
+ Likewise.
+
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/20_util/shared_ptr/cons/43820.cc: Likewise.
+
+ * include/bits/unique_ptr.h (unique_ptr<>::unique_ptr(auto_ptr<>&&)):
+ Add.
+ * include/std/memory: Adjust includes order.
+ * testsuite/20_util/unique_ptr/cons/auto_ptr.cc: New.
+ * testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc: Minor tweaks.
+
+2010-08-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/45228
+ * include/std/tuple (tuple<typename... _Elements>): Constrain
+ converting constructors and assignment operators with
+ sizeof...(_UElements) == sizeof...(_Elements).
+ (tuple(tuple<_UElements...>&): Remove.
+ (tuple<typename _T1>): Add.
+ * testsuite/20_util/tuple/cons/45228.cc: New.
+ * testsuite/20_util/tuple/cons/converting.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
+ dg-error line number.
+
+ * include/std/tuple (_Tuple_impl<>::_Tuple_impl(const _Tuple_impl&)):
+ Defaulted.
+
+ * include/std/tuple (tuple<typename _T1, typename _T2>
+ ::operator=(pair<_U1, _U2>&&)): Use forward.
+
+2010-08-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44963
+ * include/bits/stl_iterator.h (insert_iterator<>::
+ operator=(const typename _Container::value_type&,
+ back_insert_iterator<>::
+ operator=(const typename _Container::value_type&),
+ front_insert_iterator<>::
+ operator=(const typename _Container::value_type&))): Add
+ in C++0x mode.
+ * testsuite/ext/rope/44963.cc: New.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
+ dg-error line number.
+
+2010-08-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/c_global/cmath: Implement US 136.
+ * include/tr1_impl/cmath: Do not bring fpclassify, etc from namespace
+ std, define namespace tr1.
+ * testsuite/26_numerics/headers/cmath/
+ c99_classification_macros_c++0x.cc: New.
+
+2010-08-06 David Malcolm <dmalcolm@redhat.com>
+ Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * python/hook.in: Rename variable dir to dir_.
+
+2010-08-06 Jason Merrill <jason@redhat.com>
+
+ * include/std/thread: Add deleted thread(thread&).
+ * testsuite/30_threads/thread/cons/copy_neg.cc: Remove XFAIL.
+
+2010-08-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (pack_arguments): Rename to forward_as_tuple
+ and simplify, per US 98 and US 99.
+ * testsuite/20_util/tuple/creation_functions/pack_arguments.cc:
+ Rename to...
+ * testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc:
+ ... this, adjust.
+ * testsuite/20_util/pair/piecewise.cc: Adjust.
+
+2010-08-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (begin, end): Remove per GB 87.
+ * testsuite/20_util/tuple/range_access.cc: Remove.
+
+2010-08-06 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/ratio (ratio_less): Improve, use ratio_divide to avoid
+ more overflows.
+ * testsuite/20_util/ratio/comparisons/comp1.cc: Extend.
+ * testsuite/20_util/ratio/comparisons/comp2.cc: Likewise.
+
+2010-08-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/tr1_impl/utility (begin, end): Remove per GB 85.
+ * testsuite/20_util/pair/range_access.cc: Remove.
+
+ * include/std/functional (function<>::function()): Remove explicit,
+ per JP 3.
+
+2010-08-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (forward): Update to N3092.
+ (identity): Remove (US 92 is NAD).
+ * include/debug/set.h: Fix move constructor to simply use move.
+ * include/debug/unordered_map: Likewise.
+ * include/debug/multiset.h: Likewise.
+ * include/debug/vector: Likewise.
+ * include/debug/unordered_set: Likewise.
+ * include/debug/deque: Likewise.
+ * include/debug/map.h: Likewise.
+ * include/debug/string: Likewise.
+ * include/debug/list: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * include/profile/set.h: Likewise.
+ * include/profile/unordered_map: Likewise.
+ * include/profile/multiset.h: Likewise.
+ * include/profile/unordered_set: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/deque: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/list: Likewise.
+ * include/profile/multimap.h: Likewise.
+ * include/ext/vstring.h: Likewise.
+ * include/bits/stl_list.h: Likewise.
+ * include/bits/stl_map.h: Likewise.
+ * include/bits/stl_set.h: Likewise.
+ * include/bits/forward_list.h: Likewise.
+ * include/bits/stl_multimap.h: Likewise.
+ * include/bits/unordered_map.h: Likewise.
+ * include/bits/stl_vector.h: Likewise.
+ * include/bits/stl_deque.h: Likewise.
+ * include/bits/stl_multiset.h: Likewise.
+ * include/bits/unordered_set.h: Likewise.
+ * include/bits/stl_bvector.h: Likewise.
+ * testsuite/20_util/identity/value.cc: Remove
+ * testsuite/20_util/identity/requirements/typedefs.cc: Likewise.
+ * testsuite/20_util/identity/requirements/explicit_instantiation.cc:
+ Likewise.
+
+2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * acinclude.m4 ([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS]): Fix
+ messages.
+ * configure: Regenerate.
+
+2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/vstring_util.h: Include bits/range_access.h.
+ * testsuite/ext/vstring/range_access.cc: New test.
+
+2010-07-27 Ed Smith-Rowland <3dw4rd@verizon.net>
+
+ * include/bits/range_access.h: New.
+ * include/Makefile.in: Add bits/range_access.h.
+ * include/Makefile.am: Regenerate.
+ * include/std/array: Include bits/range_access.h.
+ * include/std/deque: Ditto.
+ * include/std/forward_list: Ditto.
+ * include/std/iterator: Ditto.
+ * include/std/list: Ditto.
+ * include/std/map: Ditto.
+ * include/std/regex: Ditto.
+ * include/std/set: Ditto.
+ * include/std/string: Ditto.
+ * include/std/unordered_map: Ditto.
+ * include/std/unordered_set: Ditto.
+ * include/std/vector: Ditto.
+ * include/std/valarray: Add begin() and end().
+ * libsupc++/initializer_list: Ditto.
+ * include/tr1_impl/utility: Add begin() and end().
+ * include/std/tuple: Ditto.
+ * testsuite/24_iterators/headers/iterator/range_access.cc: New test.
+ * testsuite/24_iterators/range_access.cc: Ditto.
+ * testsuite/28_regex/range_access.cc: Ditto.
+ * testsuite/18_support/initializer_list/range_access.cc: Ditto.
+ * testsuite/21_strings/basic_string/range_access.cc: Ditto.
+ * testsuite/26_numerics/valarray/range_access.cc: Ditto.
+ * testsuite/23_containers/unordered_map/range_access.cc: Ditto.
+ * testsuite/23_containers/multimap/range_access.cc: Ditto.
+ * testsuite/23_containers/set/range_access.cc: Ditto.
+ * testsuite/23_containers/unordered_multimap/range_access.cc: Ditto.
+ * testsuite/23_containers/forward_list/range_access.cc: Ditto.
+ * testsuite/23_containers/unordered_set/range_access.cc: Ditto.
+ * testsuite/23_containers/vector/range_access.cc: Ditto.
+ * testsuite/23_containers/deque/range_access.cc: Ditto.
+ * testsuite/23_containers/multiset/range_access.cc: Ditto.
+ * testsuite/23_containers/list/range_access.cc: Ditto.
+ * testsuite/23_containers/unordered_multiset/range_access.cc: Ditto.
+ * testsuite/23_containers/map/range_access.cc: Ditto.
+ * testsuite/23_containers/array/range_access.cc: Ditto.
+ * testsuite/20_util/tuple/range_access.cc: Ditto.
+ * testsuite/20_util/pair/range_access.cc: Ditto.
+
+2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * acinclude.m4 ([GLIBCXX_CHECK_STDIO_MACROS]): Remove.
+ ([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS]): Add, actually
+ compute the constants via AC_COMPUTE_INT.
+ * configure.ac: Call the latter.
+ * include/bits/ios_base.h: Adjust.
+ * include/bits/char_traits.h: Likewise.
+ * testsuite/27_io/ios_base/cons/assign_neg.cc: Adjust dg-error
+ line number.
+ * testsuite/27_io/ios_base/cons/copy_neg.cc: Likewise.
+ * config.h.in: Regenerate.
+ * configure: Likewise.
+
+2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * config/io/c_io_stdio.h: Do not include <cstddef>.
+
+2010-07-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * testsuite/22_locale/num_put/put/char/14220.cc: XFAIL on Solaris
+ 9/x86, 32-bit Solaris 10/x86 and 64-bit Solaris 10/SPARC.
+ * testsuite/22_locale/num_put/put/wchar_t/14220.cc: XFAIL on
+ Solaris 9/x86 and 32-bit Solaris 10/x86.
+
+ * testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc:
+ Only XFAIL on Solaris 8 and 9.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc:
+ Likewise.
+
+ * testsuite/ext/enc_filebuf/char/13598.cc: XFAIL before Solaris 11.
+
+2010-07-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/45060
+ * include/bits/hashtable.h (_Hashtable::_Hashtable(_Hashtable&&)):
+ Reorder mem-initializers.
+
+2010-07-22 Benjamin Kosnik <bkoz@redhat.com>
+
+ DocBook 4.5 to 5.0 transition.
+ * doc/xml/authors.xml: Update markup to DocBook 5.0.
+ * doc/xml/faq.xml: Same.
+ * doc/xml/api.xml: Same.
+ * doc/xml/class.txml
+ * doc/xml/gnu/gpl-3.0.xml: Same.
+ * doc/xml/gnu/fdl-1.2.xml: Same.
+ * doc/xml/gnu/fdl-1.3.xml: Same.
+ * doc/xml/gnu/gpl-2.0.xml: Same.
+ * doc/xml/chapter.txml: Same.
+ * doc/xml/manual/mt_allocator.xml: Same.
+ * doc/xml/manual/allocator.xml: Same.
+ * doc/xml/manual/ctype.xml: Same.
+ * doc/xml/manual/numerics.xml: Same.
+ * doc/xml/manual/codecvt.xml: Same.
+ * doc/xml/manual/backwards_compatibility.xml: Same.
+ * doc/xml/manual/concurrency.xml: Same.
+ * doc/xml/manual/intro.xml: Same.
+ * doc/xml/manual/abi.xml: Same.
+ * doc/xml/manual/shared_ptr.xml: Same.
+ * doc/xml/manual/status_cxxtr1.xml: Same.
+ * doc/xml/manual/auto_ptr.xml: Same.
+ * doc/xml/manual/internals.xml: Same.
+ * doc/xml/manual/atomics.xml: Same.
+ * doc/xml/manual/parallel_mode.xml: Same.
+ * doc/xml/manual/status_cxx1998.xml: Same.
+ * doc/xml/manual/profile_mode.xml: Same.
+ * doc/xml/manual/containers.xml: Same.
+ * doc/xml/manual/io.xml: Same.
+ * doc/xml/manual/concurrency_extensions.xml: Same.
+ * doc/xml/manual/appendix_porting.xml: Same.
+ * doc/xml/manual/utilities.xml: Same.
+ * doc/xml/manual/support.xml: Same.
+ * doc/xml/manual/bitmap_allocator.xml: Same.
+ * doc/xml/manual/configure.xml: Same.
+ * doc/xml/manual/build_hacking.xml: Same.
+ * doc/xml/manual/evolution.xml: Same.
+ * doc/xml/manual/using.xml: Same.
+ * doc/xml/manual/using_exceptions.xml: Same.
+ * doc/xml/manual/debug.xml: Same.
+ * doc/xml/manual/localization.xml: Same.
+ * doc/xml/manual/strings.xml: Same.
+ * doc/xml/manual/debug_mode.xml: Same.
+ * doc/xml/manual/locale.xml: Same.
+ * doc/xml/manual/extensions.xml: Same.
+ * doc/xml/manual/appendix_contributing.xml: Same.
+ * doc/xml/manual/prerequisites.xml: Same.
+ * doc/xml/manual/messages.xml: Same.
+ * doc/xml/manual/diagnostics.xml: Same.
+ * doc/xml/manual/algorithms.xml: Same.
+ * doc/xml/manual/appendix_free.xml: Same.
+ * doc/xml/manual/iterators.xml: Same.
+ * doc/xml/manual/spine.xml: Same.
+ * doc/xml/manual/status_cxxtr24733.xml: Same.
+ * doc/xml/manual/status_cxx200x.xml: Same.
+ * doc/xml/manual/test.xml: Same.
+ * doc/xml/book.txml: Same.
+ * doc/xml/spine.xml: Same.
+ * doc/Makefile.am: Same.
+ * doc/Makefile.in: Regenerate.
+
+2010-07-20 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/xml/manual/appendix_contributing.xml: Update for new reality.
+ * doc/Makefile.am (doc-xml): New default rule for XML output.
+ (doc-xml-single-doxygen): Standardize output names.
+ * doc/Makefile.in: Regenerate.
+
+ * doc/doxygen/user.cfg.in: Tweak.
+
+2010-07-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * libsupc++/unwind-cxx.h: Minor formatting / stylistic tweaks.
+
+2010-07-20 Mikael Pettersson <mikpe@it.uu.se>
+
+ PR libstdc++/44902
+ * libsupc++/unwind-cxx.h (__cxa_type_match): Correct prototype.
+ (__cxa_begin_cleanup): Likewise.
+
+2010-07-19 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/Makefile.am (doc-texinfo): New rule.
+ (doc-texinfo-docbook): New rule.
+ (DB2TEXI_FLAGS): New.
+ (doc-xml-single-docbook): Just the manual, not the set. Tweak flags.
+ * doc/Makefile.in: Regenerate.
+
+2010-07-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/shared_ptr.xml: Update.
+ * doc/html/*: Regenerate.
+
+2010-07-13 Benjamin Kosnik <bkoz@redhat.com>
+
+ * doc/Makefile.am: Edit pdf rules.
+ (doc-man, doc-pdf, doc-html): Expand default rules.
+ * doc/Makefile.in: Regenerate.
+ * doc/doxygen/user.cfg.in: Update to Doxygen 1.7.1.
+
+2010-07-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (is_convertible): Use SFINAE.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+ dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2010-07-09 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/44875
+ * doc/xml/manual/status_cxx200x.xml: Corrections to status.
+ * doc/html/*: Regenerate.
+
+2010-07-08 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/stl_heap.h: Update markup.
+ * include/bits/move.h: Same.
+ * include/bits/algorithmfwd.h: Same.
+ * include/bits/regex.h: Same.
+ * include/bits/random.h: Same.
+ * doc/doxygen/doxygroups.cc: Same.
+ * doc/doxygen/user.cfg.in: Remove include/tr1_impl/regex from
+ input file list.
+ * doc/Makefile.am (doc-pdf-doxygen): Add comment, put generated
+ pdf in location consistent with docbook pdf generation.
+ * doc/Makefile.in: Regenerate.
+
+2010-07-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Add some missing features.
+ * doc/html/*: Regenerate.
+
+2010-07-03 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/regex_compiler.h: Fix filename in doxygen comment.
+ * include/bits/regex_constants.h: Likewise.
+ * include/bits/regex_error.h: Likewise.
+ * include/bits/regex_grep_matcher.h: Likewise.
+ * include/bits/regex_grep_matcher.tcc: Likewise.
+ * include/bits/regex_nfa.tcc: Likewise.
+
+2010-07-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * acinclude.m4 (symvers_renaming): Define
+ HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT instead of
+ _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT.
+ Fix syntax error.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+
+2010-07-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Handle sun style.
+ Require GCC_PROG_GNU_CXXFILT.
+ (_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT): Define
+ unless targetting solaris2*.
+ Include ../config/gc++filt.m4.
+ * configure.host (i?86-*-solaris2*): Set abi_baseline_pair.
+ (sparc-*-solaris2*): Likewise.
+ * src/Makefile.am [ENABLE_SYMVERS_SUN] (version_dep, version_arg):
+ New variables.
+ (libstdc++-symbols.ver-sun): New target.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+ * Makefile.in: Likewise.
+ * doc/Makefile.in: Likewise.
+ * include/Makefile.in: Likewise.
+ * libsupc++/Makefile.in: Likewise.
+ * po/Makefile.in: Likewise.
+ * python/Makefile.in: Likewise.
+ * src/Makefile.in: Likewise.
+ * src/atomic.cc: Only define/use _GLIBCXX_ASM_SYMVER if
+ _GLIBCXX_HAVE_SYMVER_RENAMING_RUNTIME_SUPPORT.
+ * src/compatibility.cc: Likewise.
+ * testsuite/Makefile.am (baseline_subdir): Define.
+ (baseline_symbols): Use it.
+ (new-abi-baseline): Likewise.
+ * testsuite/Makefile.in: Regenerate.
+
+ * config/abi/pre/gnu.ver (GLIBCXX_3.4.5): Enclose duplicates in
+ #ifdef HAVE_SYMVER_RENAMING_RUNTIME_SUPPORT.
+ (GLIBCXX_3.4.6): Likewise.
+
+ * doc/xml/manual/configure.xml (--enable-symvers): Document sun
+ style.
+
+ * doc/xml/manual/abi.xml: Fix grammar.
+ (Symbol versioning on the libstdc++.so binary): Fix mapfile path.
+ (Incremental bumping of a library pre-defined macro): Fix
+ c++config path.
+ (Incremental bumping of a library pre-defined macro,
+ _GLIBCPP_VERSION): Likewise.
+ (Matching each specific C++ compiler release to a specific set of
+ C++ include files): Fix acinclude.m4 path.
+ (Prerequisites): Allow for Sun linker on Solaris 2.5+.
+ Use proper link to Configuring.
+ Fix acinclude.m4 path.
+ (Checking Active): Allow for additional symbol versioning styles.
+ Provide Solaris 2 example with pvs -r.
+ (Bibliography): Update Linker and Libraries Guide, C++ Migration
+ Guide entries.
+
+2010-06-29 Jason Merrill <jason@redhat.com>
+
+ Enable implicitly declared move constructor/operator= (N3053).
+ * include/bits/unordered_map.h: Explicitly default copy constructors.
+ * include/bits/unordered_set.h: Likewise.
+
+ * 19_diagnostics/error_category/cons/copy_neg.cc: Adjust expected
+ errors, use dg-prune-output.
+ * 20_util/function/cmp/cmp_neg.cc: Likewise.
+ * 20_util/unique_ptr/assign/assign_neg.cc: Likewise.
+ * 20_util/unique_ptr/cons/pointer_array_convertible.cc: Likewise.
+ * 20_util/unique_ptr/modifiers/reset_neg.cc: Likewise.
+ * 29_atomics/atomic/cons/assign_neg.cc: Likewise.
+ * 29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * 29_atomics/atomic_address/cons/assign_neg.cc: Likewise.
+ * 29_atomics/atomic_address/cons/copy_neg.cc: Likewise.
+ * 29_atomics/atomic_flag/cons/assign_neg.cc: Likewise.
+ * 29_atomics/atomic_flag/cons/copy_neg.cc: Likewise.
+ * 29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
+ * 29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
+ * 29_atomics/condition_variable/cons/assign_neg.cc: Likewise.
+ * 30_threads/condition_variable/cons/copy_neg.cc: Likewise.
+ * 30_threads/condition_variable_any/cons/assign_neg.cc: Likewise.
+ * 30_threads/condition_variable_any/cons/copy_neg.cc: Likewise.
+ * 30_threads/future/cons/assign_neg.cc: Likewise.
+ * 30_threads/future/cons/copy_neg.cc: Likewise.
+ * 30_threads/mutex/cons/assign_neg.cc: Likewise.
+ * 30_threads/mutex/cons/copy_neg.cc: Likewise.
+ * 30_threads/packaged_task/cons/assign_neg.cc: Likewise.
+ * 30_threads/packaged_task/cons/copy_neg.cc: Likewise.
+ * 30_threads/promise/cons/assign_neg.cc: Likewise.
+ * 30_threads/promise/cons/copy_neg.cc: Likewise.
+ * 30_threads/recursive_mutex/cons/assign_neg.cc: Likewise.
+ * 30_threads/recursive_mutex/cons/copy_neg.cc: Likewise.
+ * 30_threads/recursive_timed_mutex/cons/assign_neg.cc: Likewise.
+ * 30_threads/recursive_timed_mutex/cons/copy_neg.cc: Likewise.
+ * 30_threads/thread/cons/assign_neg.cc: Likewise.
+ * 30_threads/thread/cons/copy_neg.cc: Likewise.
+ * 30_threads/timed_mutex/cons/assign_neg.cc: Likewise.
+ * 30_threads/timed_mutex/cons/copy_neg.cc: Likewise.
+ * ext/ext_pointer/1_neg.cc: Likewise.
+
+2010-06-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44708
+ * include/ext/algorithm (copy_n): Qualify __copy_n call with
+ __gnu_cxx::
+ * testsuite/ext/rope/44708.cc: New.
+
+2010-06-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/regex_compiler.h: Trivial formatting / stylistic fixes.
+ * include/bits/regex_grep_matcher.tcc: Likewise.
+ * include/bits/regex_cursor.h: Likewise.
+ * include/bits/regex.h: Likewise.
+
+2010-06-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_hooks.h: Cast fn to bool.
+
+2010-06-26 Kees Cook <kees.cook@canonical.com>
+
+ * testsuite/27_io/ios_base/sync_with_stdio/1.cc: Verify freopen.
+ * testsuite/27_io/objects/wchar_t/9520.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/9661-1.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/12048-2.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/12048-4.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/11.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/12048-1.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/12048-3.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/10.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/12048-5.cc: Likewise.
+ * testsuite/27_io/objects/char/9661-1.cc: Likewise.
+ * testsuite/27_io/objects/char/12048-2.cc: Likewise.
+ * testsuite/27_io/objects/char/12048-4.cc: Likewise.
+ * testsuite/27_io/objects/char/9.cc: Likewise.
+ * testsuite/27_io/objects/char/12048-1.cc: Likewise.
+ * testsuite/27_io/objects/char/12048-3.cc: Likewise.
+ * testsuite/27_io/objects/char/12048-5.cc: Likewise.
+ * testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc: Verify fgets.
+ * testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc: Verify
+ fwrite.
+ * testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc: Likewise.
+ * testsuite/ext/stdio_sync_filebuf/char/1.cc: Likewise.
+
+2010-06-26 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/faq.xml: Fix typo.
+ * doc/html/faq.xml: Likewise.
+
+2010-06-25 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+
+ Initial regex implementation.
+ * include/std/regex: Modified to use bits/regex_* headers.
+ * include/bits/regex_compiler.h: New.
+ * include/bits/regex_constants.h: Likewise.
+ * include/bits/regex_cursor.h: Likewise.
+ * include/bits/regex_error.h: Likewise.
+ * include/bits/regex_grep_matcher.h: Likewise.
+ * include/bits/regex_grep_matcher.tcc: Likewise.
+ * include/bits/regex.h: Likewise.
+ * include/bits/regex_nfa.h: Likewise.
+ * include/bits/regex_nfa.tcc: Likewise.
+ * include/Makefile.am: Add.
+ * include/Makefile.in: Regenerated.
+ * testsuite/28_regex/02_definitions: New.
+ * testsuite/28_regex/03_requirements: Likewise.
+ * testsuite/28_regex/03_requirements/typedefs.cc: Likewise.
+ * testsuite/28_regex/04_header: Likewise.
+ * testsuite/28_regex/04_header/regex: Likewise.
+ * testsuite/28_regex/04_header/regex/std_c++0x_neg.cc: Likewise.
+ * testsuite/28_regex/05_constants: Likewise.
+ * testsuite/28_regex/05_constants/error_type.cc: Likewise.
+ * testsuite/28_regex/05_constants/match_flag_type.cc: Likewise.
+ * testsuite/28_regex/05_constants/syntax_option_type.cc: Likewise.
+ * testsuite/28_regex/06_exception_type: Likewise.
+ * testsuite/28_regex/06_exception_type/regex_error.cc: Likewise.
+ * testsuite/28_regex/07_traits: Likewise.
+ * testsuite/28_regex/07_traits/char: Likewise.
+ * testsuite/28_regex/07_traits/char/ctor.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/isctype.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/length.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/lookup_classname.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/lookup_collatename.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/transform.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/transform_primary.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/translate.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/translate_nocase.cc: Likewise.
+ * testsuite/28_regex/07_traits/char/value.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/ctor.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/length.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/transform.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/translate.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/translate_nocase.cc: Likewise.
+ * testsuite/28_regex/07_traits/wchar_t/value.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/cstring_op.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/moveable.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/pstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/range.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/string.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/char/string_op.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring_op.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/pstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/range.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/string.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/assign/wchar_t/string_op.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/basic: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/basic/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/basic/pstring_char.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/basic/pstring_wchar_t.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/basic/
+ string_range_01_02_03.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/cstring_awk.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/cstring_ecma.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/cstring_egrep.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/cstring_grep.cc:
+ Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/default.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/char/range.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/copy_char.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/extended: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/extended/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/extended/
+ string_range_01_02_03.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/move_char.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/string_char.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/string_wchar_t.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/wchar_t: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/wchar_t/cstring.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/wchar_t/default.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/ctors/wchar_t/range.cc: Likewise.
+ * testsuite/28_regex/08_basic_regex/regex.cc: Likewise.
+ * testsuite/28_regex/09_sub_match: Likewise.
+ * testsuite/28_regex/09_sub_match/cast_char.cc: Likewise.
+ * testsuite/28_regex/09_sub_match/cast_wchar_t.cc: Likewise.
+ * testsuite/28_regex/09_sub_match/length.cc: Likewise.
+ * testsuite/28_regex/09_sub_match/typedefs.cc: Likewise.
+ * testsuite/28_regex/10_match_results: Likewise.
+ * testsuite/28_regex/10_match_results/ctors: Likewise.
+ * testsuite/28_regex/10_match_results/ctors/char: Likewise.
+ * testsuite/28_regex/10_match_results/ctors/char/default.cc: Likewise.
+ * testsuite/28_regex/10_match_results/ctors/wchar_t: Likewise.
+ * testsuite/28_regex/10_match_results/ctors/wchar_t/default.cc:
+ Likewise.
+ * testsuite/28_regex/10_match_results/typedefs.cc: Likewise.
+ * testsuite/28_regex/11_algorithms: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/basic: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/basic/string_01.cc:
+ Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/basic/
+ string_range_00_03.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/basic/
+ string_range_01_03.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/basic/
+ string_range_02_03.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/cstring_plus.cc:
+ Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/
+ cstring_questionmark.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/string_any.cc:
+ Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/
+ string_range_00_03.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/
+ string_range_01_03.cc: Likewise.
+ * testsuite/28_regex/11_algorithms/02_match/extended/
+ string_range_02_03.cc: Likewise.
+ * testsuite/28_regex/12_iterators: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/ctors: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/ctors/char: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/ctors/char/
+ default.cc: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t:
+ Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t/
+ default.cc: Likewise.
+ * testsuite/28_regex/12_iterators/regex_iterator/typedefs.cc: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/ctors: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char:
+ Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char/
+ default.cc: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/ctors/
+ wchar_t: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/ctors/
+ wchar_t/default.cc: Likewise.
+ * testsuite/28_regex/12_iterators/regex_token_iterator/
+ typedefs.cc: Likewise.
+ * testsuite/28_regex/13_ecmascript: Likewise.
+
+2010-06-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/impl/profiler_list_to_slist.h: Remove spurious
+ semicolon; prefer pre-increment.
+ * include/profile/impl/profiler_container_size.h: Use everywhere
+ qualified std::size_t.
+ * include/profile/impl/profiler_trace.h (__trace_base<>::
+ __collect_warnings): Tidy loop.
+ * include/profile/impl/profiler_vector_to_list.h: Minor formatting
+ changes.
+
+2010-06-25 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/impl/profiler_trace.h: Uglify it to __it, use
+ everywhere std::size_t instead of size_t.
+
+2010-06-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/impl/profiler_trace.h (__trace_base<>::
+ __trace_base()): Move inline, simplify; formatting tweaks.
+ * include/profile/impl/profiler_hash_func.h: Formatting tweaks.
+
+2010-06-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/impl/profiler_trace.h (__warning_data::
+ __warning_message): Change to std::string; clean-up includes,
+ qualify size_t, fprintf, etc, with std everywhere.
+ (struct __warn::operator()): Adjust.
+ * include/profile/impl/profiler_list_to_slist.h
+ (__list2slist_info::__advice): Change to return a std::string;
+ clean-up includes, qualify size_t, fprintf, etc, with std.
+ * include/profile/impl/profiler_container_size.h
+ (__container_size_info::__advice): Likewise.
+ * include/profile/impl/profiler_hash_func.h (__hashfunc_info::
+ __advice): Likewise.
+ * include/profile/impl/profiler_list_to_vector.h
+ (__list2vector_info::__advice): Likewise.
+ * include/profile/impl/profiler_vector_to_list.h
+ (__vector2list_info::__advice): Likewise.
+ * include/profile/impl/profiler_map_to_unordered_map.h
+ (__map2umap_info::__advice): Likewise.
+ * include/profile/impl/profiler.h: Likewise.
+ * include/profile/impl/profiler_hashtable_size.h: Likewise.
+ * include/profile/impl/profiler_node.h: Likewise.
+ * include/profile/impl/profiler_vector_size.h: Likewise.
+
+ * include/profile/iterator_tracker.h: Formatting and stylistic
+ tweaks.
+ * include/profile/base.h: Likewise.
+ * include/profile/map.h: Likewise.
+
+2010-06-23 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_tree.h (erase(iterator), erase(const_iterator)):
+ Remove inline specifier.
+
+2010-06-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/impl/profiler_list_to_slist.h: Fix formatting,
+ other minor stylistic changes.
+ * include/profile/impl/profiler_container_size.h: Likewise.
+ * include/profile/impl/profiler_vector_size.h: Likewise.
+ * include/profile/impl/profiler_hash_func.h: Likewise.
+ * include/profile/impl/profiler_trace.h: Likewise.
+ * include/profile/impl/profiler_list_to_vector.h: Likewise.
+ * include/profile/impl/profiler_vector_to_list.h: Likewise.
+ * include/profile/impl/profiler_state.h: Likewise.
+ * include/profile/impl/profiler_map_to_unordered_map.h: Likewise.
+ * include/profile/impl/profiler_hashtable_size.h: Likewise.
+ * include/profile/impl/profiler_node.h: Likewise.
+
+2010-06-22 Matthias Klose <doko@ubuntu.com>
+
+ * python/libstdcxx/v6/printers.py: Don't use string exceptions.
+
+2010-06-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44630
+ * include/profile/impl/profiler_trace.h (__min, __max): Remove,
+ use std::min, std::max everywhere.
+ * include/profile/impl/profiler_container_size.h: Use std::min and
+ std::max.
+ * include/profile/impl/profiler_hash_func.h: Likewise.
+ * include/profile/impl/profiler_list_to_vector.h: Likewise.
+
+2010-06-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc:
+ Add *-*-solaris2.1[0-9]* to dg-xfail-if, dg-excess-errors.
+
+2010-06-20 Paolo Carlini <paolo.carlini@oracle.com>
+ Kai-Uwe Bux <bux@kubux.net>
+
+ * include/bits/random.tcc (uniform_int_distribution<>::operator()):
+ Fix to work well for arbitrary urng.max() and urng.min().
+
+2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/32618
+ * include/bits/stl_list.h (vector<>::_M_default_initialize,
+ _M_default_append): Declare.
+ (list<>::list(size_type), resize(size_type)): Add in C++0x mode,
+ use the latter.
+ * include/bits/list.tcc (list<>::resize, _M_default_append): Define.
+ * include/bits/stl_vector.h (vector<>::_M_default_initialize,
+ _M_default_append): Declare.
+ (vector<>::vector(size_type), resize(size_type)): Add in C++0x mode,
+ use the latter.
+ * include/bits/vector.tcc (vector<>::_M_default_append): Define.
+ * include/bits/stl_deque.h (deque<>::_M_default_initialize,
+ _M_default_append): Declare.
+ (deque<>::deque(size_type), resize(size_type)): Add in C++0x mode,
+ use the latter.
+ * include/bits/deque.tcc (deque<>::_M_default_append): Define.
+ * include/debug/vector: Update.
+ * include/debug/deque: Likewise.
+ * include/debug/list: Likewise.
+ * include/profile/vector: Likewise.
+ * include/profile/deque: Likewise.
+ * include/profile/list: Likewise.
+ * include/bits/forward_list.h (_M_default_initialize,
+ _M_default_insert_after): Declare.
+ (forward_list<>::forward_list(size_type), resize(size_type)): Fix,
+ use the latter.
+ * include/bits/forward_list.tcc (forward_list<>::_M_default_append,
+ _M_default_insert_after): Define.
+ * testsuite/util/testsuite_api.h (NonCopyConstructible): Add.
+ * testsuite/23_containers/forward_list/modifiers/6.cc: Move to...
+ * testsuite/23_containers/forward_list/capacity/resize_size.cc:
+ ... here.
+ * testsuite/23_containers/forward_list/cons/10.cc: Move to...
+ * testsuite/23_containers/forward_list/cons/cons_size.cc: ... here.
+ * testsuite/23_containers/vector/resize/1.cc: Move to...
+ * testsuite/23_containers/vector/capacity/resize/1.cc: ... here.
+ * testsuite/23_containers/vector/resize/moveable.cc: Move to...
+ * testsuite/23_containers/vector/resize/capacity/moveable.cc: ... here.
+ * testsuite/23_containers/vector/cons/cons_size.cc: New.
+ * testsuite/23_containers/vector/capacity/resize/resize_size.cc:
+ Likewise.
+ * testsuite/23_containers/deque/cons/cons_size.cc: Likewise.
+ * testsuite/23_containers/deque/capacity/resize_size.cc: Likewise.
+ * testsuite/23_containers/list/cons/cons_size.cc: Likewise.
+ * testsuite/23_containers/list/capacity/resize_size.cc: Likewise.
+ * testsuite/23_containers/vector/capacity/resize/moveable.cc: Adjust.
+ * testsuite/23_containers/deque/capacity/moveable.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line numbers.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2010-06-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_uninitialized.h (__uninitialized_default,
+ __uninitialized_default_n, __uninitialized_default_a,
+ __uninitialized_default_n_a): Add.
+
+ * include/bits/stl_uninitialized.h (uninitialized_copy,
+ uninitialized_fill, uninitialized_fill_n): Use __is_trivial
+ instead of __is_pod.
+ * include/bits/valarray_array.h: Likewise.
+ * include/bits/stl_algobase.h (__copy_move_backward_a,
+ __copy_move_a): Likewise.
+
+2010-06-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_construct.h (_Construct): Change to variadic in
+ C++0x mode, consistently with allocator::construct.
+ * include/bits/stl_uninitialized.h (__uninitialized_copy_n): Use
+ _Construct.
+ (__uninitialized_construct_range): Move to...
+ * include/bits/stl_tempbuf.h (__uninitialized_construct_buf): ... here.
+
+2010-06-16 Matthias Klose <doko@ubuntu.com>
+
+ * src/compatibility.cc: Export long double versions of "C" math
+ library for arm-linux-gnueabi, m68k-linux-gnu (ColdFire),
+ mips*-linux-gnu (o32 ABI), sh*-linux-gnu (32 bit).
+
+2010-06-15 Jason Merrill <jason@redhat.com>
+
+ * testsuite/lib/libstdc++.exp: Set additional_prunes.
+ (libstdc++-dg-test): Don't prune here.
+ * testsuite/lib/prune.exp (dg-prune-output): New.
+ (libstdc++-dg-prune): Rename from prune_g++_output.
+ Add a bunch of prunes from gcc's prune.exp.
+ * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc:
+ Remove dg-excess-errors.
+ * testsuite/18_support/headers/cstdint/std_c++0x_neg.cc: Likewise.
+ * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Likewise.
+ * testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Likewise.
+ * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise.
+ * testsuite/20_util/headers/type_traits/std_c++0x_neg.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Likewise.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc: Likewise.
+ * testsuite/20_util/shared_ptr/cons/43820.cc: Likewise.
+ * testsuite/23_containers/headers/array/std_c++0x_neg.cc: Likewise.
+ * testsuite/23_containers/headers/tuple/std_c++0x_neg.cc: Likewise.
+ * testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc:
+ Likewise.
+ * testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc:
+ Likewise.
+ * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Likewise.
+ * testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc: Likewise.
+ * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Likewise.
+ * testsuite/26_numerics/headers/random/std_c++0x_neg.cc: Likewise.
+ * testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc: Likewise.
+ * testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
+ Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
+ Likewise.
+ * testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc:
+ Likewise.
+ * testsuite/30_threads/headers/future/std_c++0x_neg.cc: Likewise.
+ * testsuite/30_threads/headers/mutex/std_c++0x_neg.cc: Likewise.
+ * testsuite/30_threads/headers/thread/std_c++0x_neg.cc: Likewise.
+ * testsuite/ext/pb_ds/example/hash_resize_neg.cc: Likewise.
+ * testsuite/ext/profile/mutex_extensions.cc: Likewise.
+ * testsuite/ext/type_traits/add_unsigned_floating_neg.cc: Likewise.
+ * testsuite/ext/type_traits/remove_unsigned_floating_neg.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/assign/
+ shared_ptr_neg.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc: Likewise.
+
+2010-06-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/parallel/base.h (min, max): Mark inline.
+ * include/parallel/set_operations.h (__parallel_set_operation):
+ Uglify the Operation template parameter.
+
+2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/shared_ptr.h (hash<shared_ptr>): Add.
+ * include/bits/shared_ptr_base.h (hash<__shared_ptr>): Likewise.
+ * include/bits/unique_ptr.h (hash<unique_ptr>): Likewise.
+ * testsuite/20_util/shared_ptr/hash/1.cc: New.
+ * testsuite/20_util/unique_ptr/hash/1.cc: Likewise.
+
+2010-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/appendix_contributing.xml: Indent code examples
+ to match original C++STYLE document. Fix typos and syntax errors.
+ Add some basic docbook markup.
+ * doc/html/*: Regenerate.
+
+2010-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/44268
+ * doc/xml/manual/abi.xml: Fix libgcc version for hppa-linux.
+
+2010-06-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/tuple (_Swallow_assign::operator=): Add const.
+ (ignore): Replace anonymous namespace member with const instance.
+
+2010-06-10 Suresh Gumpula <suresh.gumpula@amd.com>
+
+ PR libstdc++/43918
+ * config/os/djgpp/error_constants.h: New.
+ * configure.host: Use it.
+
+2010-06-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/tuple (tuple(const tuple&)): Define explicitly-defaulted.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Tweak dg-warning
+ line number.
+
+2010-06-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44487
+ * include/bits/stl_pair.h (pair(pair&&)): Remove.
+ (pair(pair<_U1, _U2>&&): Use forward, consistently with Bullet 5
+ of LWG 1326.
+ * include/std/tuple (tuple(pair<_U1, _U2>&&)): Likewise.
+ * testsuite/20_util/pair/44487.cc: Add.
+ * testsuite/20_util/tuple/cons/44487.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-warning
+ line numbers.
+
+2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (is_nothrow_constructible): Add.
+ (declval): Add noexcept specification.
+ * testsuite/util/testsuite_tr1.h (struct NothrowExplicitClass,
+ ThrowExplicitClass, NoexceptExplicitClass, ExceptExplicitClass):
+ Add.
+ * testsuite/20_util/is_nothrow_constructible/value.cc: New.
+ * testsuite/20_util/is_nothrow_constructible/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/is_nothrow_constructible/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+ Adjust dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2010-06-09 Khem Raj <raj.khem@gmail.com>
+
+ PR libstdc++/44461
+ * libsupc++/eh_arm.cc (__cxa_end_cleanup): Use .pushsection/.popsection
+ to emit inline assembly into .text section.
+
+2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ Revert:
+ 2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44413
+ * include/ext/vstring_util.h (__vstring_utility<>::_S_compare):
+ Simplify, just return -1, 0, 1.
+
+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * configure: Regenerate.
+
+2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44413
+ * include/ext/vstring_util.h (__vstring_utility<>::_S_compare):
+ Simplify, just return -1, 0, 1.
+
+2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/type_traits (has_nothrow_assign): Rename to
+ has_nothrow_copy_assign.
+ (has_trivial_assign): Rename to has_trivial_copy_assign.
+ * testsuite/20_util/has_nothrow_copy_assign/value.cc: New.
+ * testsuite/20_util/has_nothrow_copy_assign/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/has_nothrow_copy_assign/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/20_util/has_trivial_copy_assign/value.cc: Likewise.
+ * testsuite/20_util/has_trivial_copy_assign/requirements/
+ typedefs.cc: Likewise.
+ * testsuite/20_util/has_trivial_copy_assign/requirements/
+ explicit_instantiation.cc: Likewise.
+
+2010-06-08 Johannes Singler <singler@kit.edu>
+
+ * include/parallel/find.h
+ (__find_template(.., growing_blocks_tag)): Make block size
+ proportional to current position.
+ * include/parallel/settings.h (_Settings): Introduce new tuning
+ parameter find_scale_factor to the end of the struct, defaults to
+ 0.01f.
+
+2010-06-08 Johannes Singler <singler@kit.edu>
+
+ * include/parallel/partial_sum.h
+ (__parallel_partial_sum_linear):
+ Correctly calculate part lengths for partial_sum_dilation!=1.
+
+2010-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/44417
+ * include/c_std/cwctype: Provide a workaround for bug glibc
+ BZ 9694 affecting glibc 2.9 and older.
+ * include/c_global/cwctype: Likewise.
+ * testsuite/util/testsuite_abi.h: Remove temporary workaround.
+ * testsuite/util/testsuite_allocator.h: Use everywhere std::size_t
+ and std::ptrdiff_t, don't include <cstddef>.
+
+ * testsuite/27_io/basic_ostream/inserters_other/wchar_t/
+ error_code.cc: Minor tweak, prefer <cwchar> to <wchar.h>.
+
+2010-06-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp:
+ Avoid -Wall warnings.
+ * testsuite/27_io/ios_base/failure/what-3.cc: Likewise.
+ * testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_ostringstream/str/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sgetn/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/seekoff/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/snextc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sgetc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sungetc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/seekpos/char/1.cc: Likewise.
+ * testsuite/27_io/types/2.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/peek/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/peek/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/ws/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/ws/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc: Likewise.
+ * testsuite/27_io/basic_istream/seekg/char/8348-2.cc: Likewise.
+ * testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc: Likewise.
+ * testsuite/27_io/basic_istream/tellg/char/8348.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc:
+ Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc:
+ Likewise.
+ * testsuite/27_io/fpos/mbstate_t/4_neg.cc: Likewise.
+ * testsuite/27_io/fpos/mbstate_t/2.cc: Likewise.
+ * testsuite/27_io/fpos/mbstate_t/3.cc: Likewise.
+ * testsuite/27_io/fpos/mbstate_t/5.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc:
+ Likewise.
+ * testsuite/27_io/basic_ostream/inserters_character/char/4.cc:
+ Likewise.
+ * testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-4.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc: Likewise.
+ * testsuite/25_algorithms/minmax/3.cc: Likewise.
+ * testsuite/19_diagnostics/logic_error/what-3.cc: Likewise.
+ * testsuite/19_diagnostics/runtime_error/what-3.cc: Likewise.
+ * testsuite/19_diagnostics/system_error/what-3.cc: Likewise.
+ * testsuite/24_iterators/front_insert_iterator/2.cc: Likewise.
+ * testsuite/24_iterators/back_insert_iterator/2.cc: Likewise.
+ * testsuite/24_iterators/insert_iterator/2.cc: Likewise.
+ * testsuite/18_support/exception_ptr/make_exception_ptr.cc: Likewise.
+ * testsuite/21_strings/c_strings/wchar_t/1.cc: Likewise.
+ * testsuite/21_strings/c_strings/wchar_t/2.cc: Likewise.
+ * testsuite/21_strings/c_strings/char/1.cc: Likewise.
+ * testsuite/21_strings/c_strings/char/2.cc: Likewise.
+ * testsuite/26_numerics/random/independent_bits_engine/cons/
+ copy.cc: Likewise.
+ * testsuite/26_numerics/random/subtract_with_carry_engine/
+ cons/copy.cc: Likewise.
+ * testsuite/26_numerics/random/subtract_with_carry_engine/
+ requirements/constants.cc: Likewise.
+ * testsuite/26_numerics/random/discard_block_engine/
+ cons/copy.cc: Likewise.
+ * testsuite/26_numerics/random/mersenne_twister_engine/
+ cons/copy.cc: Likewise.
+ * testsuite/26_numerics/random/mersenne_twister_engine/
+ requirements/constants.cc: Likewise.
+ * testsuite/26_numerics/random/linear_congruential_engine/
+ cons/copy.cc: Likewise.
+ * testsuite/26_numerics/random/linear_congruential_engine/
+ requirements/constants.cc: Likewise.
+ * testsuite/26_numerics/random/shuffle_order_engine/
+ cons/copy.cc: Likewise.
+ * testsuite/26_numerics/random/shuffle_order_engine/
+ requirements/constants.cc: Likewise.
+ * testsuite/26_numerics/complex/complex_value.cc: Likewise.
+ * testsuite/26_numerics/headers/cmath/overloads.cc: Likewise.
+ * testsuite/26_numerics/headers/cmath/
+ c99_classification_macros_c++.cc: Likewise.
+ * testsuite/26_numerics/slice_array/array_assignment.cc: Likewise.
+ * testsuite/22_locale/money_put/put/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/money_put/put/wchar_t/2.cc: Likewise.
+ * testsuite/22_locale/money_put/put/wchar_t/3.cc: Likewise.
+ * testsuite/22_locale/money_put/put/wchar_t/12971.cc: Likewise.
+ * testsuite/22_locale/money_put/put/char/1.cc: Likewise.
+ * testsuite/22_locale/money_put/put/char/2.cc: Likewise.
+ * testsuite/22_locale/money_put/put/char/3.cc: Likewise.
+ * testsuite/22_locale/money_put/put/char/12971.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/2.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/3.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/4.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/6.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/7.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/8.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/17038.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/2.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/3.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/4.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/5.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/6.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/7.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/8.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/17038.cc: Likewise.
+ * testsuite/22_locale/num_put/put/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/num_put/put/char/1.cc: Likewise.
+ * testsuite/22_locale/time_get/get_year/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_year/char/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_monthname/char/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_weekday/char/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_date/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_date/char/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_time/wchar_t/5.cc: Likewise.
+ * testsuite/22_locale/time_get/get_time/char/5.cc: Likewise.
+ * testsuite/22_locale/num_get/get/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/num_get/get/char/1.cc: Likewise.
+ * testsuite/22_locale/moneypunct/members/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/moneypunct/members/char/1.cc: Likewise.
+ * testsuite/22_locale/ctype_base/mask.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ subtract_with_carry/requirements/constants.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ subtract_with_carry_01/requirements/constants.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ discard_block/requirements/constants.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ linear_congruential/requirements/constants.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ mersenne_twister/requirements/constants.cc: Likewise.
+ * testsuite/tr1/5_numerical_facilities/random/
+ xor_combine/requirements/constants.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cfenv/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cinttypes/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cstdlib/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cstdio/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cctype/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cwchar/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cmath/templates.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cmath/functions.cc: Likewise.
+ * testsuite/tr1/8_c_compatibility/cwctype/functions.cc: Likewise.
+ * testsuite/tr1/6_containers/utility/pair.cc: Likewise.
+ * testsuite/29_atomics/atomic_address/cons/aggregate.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/
+ increment_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/
+ bitwise_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/
+ decrement_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_flag/cons/1.cc: Likewise.
+ * testsuite/29_atomics/atomic/cons/assign_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * testsuite/23_containers/priority_queue/members/7161.cc
+ * testsuite/23_containers/set/dr130.cc: Likewise.
+ * testsuite/23_containers/list/pthread5.cc: Likewise.
+ * testsuite/23_containers/map/dr130.cc: Likewise.
+ * testsuite/util/exception/safety.h: Likewise.
+ * testsuite/util/testsuite_common_types.h: Likewise.
+ * testsuite/20_util/clocks/1.cc: Likewise.
+
+2010-06-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/Makefile.am, doc/Makefile.in (xml_sources_extra): Add
+ fdl-1.3.xml.
+ * doc/xml/manual/intro.xml: Update FDL link.
+ * doc/xml/manual/spine.xml: Update FDL include.
+ * doc/xml/gnu/fdl-1.3.xml: Add.
+ * doc/html/*: Regenerate.
+
+2010-06-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/ext/pointer.h (_Pointer_adapter::operator++): Remove
+ name of unused parameter.
+
+2010-06-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/40296
+ * libsupc++/exception_ptr.h (exception_ptr::exception_ptr): Replace
+ __safe_bool constructor with nullptr_t constructor in C++0x mode.
+ (exception_ptr::operator bool): Add explicit conversion to bool.
+ (swap(exception_ptr&, exception_ptr&)): Add.
+ (exception_ptr::_M_safe_bool_dummy): Only declare for old ABI.
+ * libsupc++/eh_ptr.cc (exception_ptr::_M_safe_bool_dummy): Move
+ next to other functions retained for ABI compatibility.
+ * testsuite/18_support/exception_ptr/requirements.cc: New.
+ * testsuite/18_support/exception_ptr/requirements_neg.cc: New.
+
+2010-06-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr::_M_dispose): Make
+ nullptr_t specializations inline.
+
+2010-06-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update.
+
+2010-06-05 Magnus Fromreide <magfr@lysator.liu.se>
+ Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/functional (function): Add nullptr_t support.
+ * include/bits/shared_ptr.h (shared_ptr): Likewise.
+ * include/bits/unique_ptr.h (unique_ptr): Likewise.
+
+2010-06-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/shared_ptr_base.h (__shared_ptr): Add nullptr_t support.
+ (__shared_count): Add nullptr_t support and make constructors explicit.
+ * testsuite/20_util/shared_ptr/cons/43820.cc: Adjust.
+ * testsuite/20_util/shared_ptr/cons/nullptr.cc: New.
+ * testsuite/20_util/unique_ptr/cons/nullptr.cc: New.
+ * testsuite/20_util/unique_ptr/assign/nullptr.cc: New.
+ * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Adjust.
+ * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Adjust.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust.
+
+2010-06-04 Jason Merrill <jason@redhat.com>
+
+ * testsuite/util/testsuite_abi.h: Work around glibc BZ 9694.
+
+2010-06-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/util/testsuite_iterators.h: Don't include <cstddef>,
+ don't use NULL, use std::size_t and std::ptrdiff_t.
+ * testsuite/18_support/exception/38732.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_2.cc: Likewise.
+ * testsuite/22_locale/time_put/put/wchar_t/12439_3.cc: Likewise.
+ * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise.
+ * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise.
+ * testsuite/23_containers/list/pthread1.cc: Likewise.
+ * testsuite/23_containers/map/pthread6.cc: Likewise.
+ * testsuite/util/testsuite_hooks.cc: Likewise.
+ * config/locale/gnu/codecvt_members.cc: Likewise.
+ * config/locale/gnu/messages_members.cc: Likewise.
+ * config/locale/gnu/c_locale.h: Likewise.
+ * config/locale/gnu/messages_members.h: Likewise.
+ * config/locale/gnu/monetary_members.cc: Likewise.
+ * config/locale/gnu/time_members.cc: Likewise.
+ * config/locale/gnu/time_members.h: Likewise.
+ * config/locale/generic/c_locale.cc: Likewise.
+ * config/locale/generic/codecvt_members.cc: Likewise.
+ * config/locale/generic/c_locale.h: Likewise.
+ * config/locale/generic/time_members.cc: Likewise.
+ * config/locale/generic/time_members.h: Likewise.
+
+2010-06-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/c++config (std::size_t, std::ptrdiff_t,
+ std::nullptr_t): Provide typedefs.
+ * include/c_std/cstddef: Don't provide std::size_t and
+ std::ptrdiff_t here.
+ * include/c_global/cstddef: Likewise.
+ * src/condition_variable.cc: Don't include <cstddef>,
+ don't use NULL, use std::size_t and std::ptrdiff_t.
+ * src/mt_allocator.cc: Likewise.
+ * src/localename.cc: Likewise.
+ * src/chrono.cc: Likewise.
+ * src/thread.cc: Likewise.
+ * include/debug/formatter.h: Likewise.
+ * include/debug/functions.h: Likewise.
+ * include/std/valarray: Likewise.
+ * include/std/thread: Likewise.
+ * include/std/type_traits: Likewise.
+ * include/std/atomic: Likewise.
+ * include/std/iterator: Likewise.
+ * include/std/bitset: Likewise.
+ * include/std/fstream: Likewise.
+ * include/std/mutex: Likewise.
+ * include/c_std/cstdlib: Likewise.
+ * include/c_std/cstdio: Likewise.
+ * include/c_std/ctime: Likewise.
+ * include/c_std/cwchar: Likewise.
+ * include/c_std/cstring: Likewise.
+ * include/parallel/multiway_merge.h: Likewise.
+ * include/parallel/multiseq_selection.h: Likewise.
+ * include/parallel/base.h: Likewise.
+ * include/parallel/basic_iterator.h: Likewise.
+ * include/parallel/multiway_mergesort.h
+ * include/parallel/partition.h: Likewise.
+ * include/ext/string_conversions.h: Likewise.
+ * include/ext/pb_ds/assoc_container.hpp: Likewise.
+ * include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp:
+ Likewise.
+ * include/ext/pb_ds/detail/resize_policy/
+ hash_prime_size_policy_imp.hpp: Likewise.
+ * include/ext/pb_ds/detail/resize_policy/
+ sample_resize_policy.hpp: Likewise.
+ * include/ext/pb_ds/detail/resize_policy/
+ sample_resize_trigger.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/binomial_heap_base_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_store_hash_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/d: Likewise.etail/cc_hash_table_map_/
+ insert_no_store_hash_fn_imps.hpp
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ cmp_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ insert_store_hash_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ info_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ entry_list_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ trace_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ cc_ht_map_.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ resize_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ constructor_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/cc_hash_table_map_/
+ erase_no_store_hash_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/unordered_iterator/
+ iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/unordered_iterator/
+ const_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/unordered_iterator/
+ point_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/unordered_iterator/
+ const_point_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/
+ insert_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/
+ const_child_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/internal_node.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp: Likewise.
+ * include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ r_erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ rotate_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ node_iterators.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ point_iterators.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/bin_search_tree_/
+ iterators_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ gp_ht_map_.hpp: Likewise.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ resize_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/gp_hash_table_map_/
+ standard_policies.hpp: Likewise.
+ * include/ext/pb_ds/detail/tree_policy/
+ sample_tree_node_update.hpp: Likewise.
+ * include/ext/pb_ds/detail/basic_tree_policy/
+ null_node_metadata.hpp: Likewise.
+ * include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/binary_heap_/
+ const_point_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/binary_heap_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/trie_policy/
+ sample_trie_node_update.hpp: Likewise.
+ * include/ext/pb_ds/detail/trie_policy/
+ sample_trie_e_access_traits.hpp: Likewise.
+ * include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/pairing_heap_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_policy/
+ counter_lu_metadata.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ trace_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ null_metadata.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ const_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ iterators_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/left_child_next_sibling_heap_/
+ const_point_iterator.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/thin_heap_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/
+ constructors_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp: Likewise.
+ * include/ext/pb_ds/detail/ov_tree_map_/
+ iterators_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp: Likewise.
+ * include/ext/pb_ds/detail/hash_fn/
+ sample_ranged_probe_fn.hpp: Likewise.
+ * include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp: Likewise.
+ * include/ext/pb_ds/detail/hash_fn/
+ sample_ranged_hash_fn.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/splay_tree_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ trace_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ find_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ constructor_destructor_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ info_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/list_update_map_/
+ iterators_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rc_binomial_heap_/
+ debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/
+ split_join_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp: Likewise.
+ * include/ext/pb_ds/list_update_policy.hpp: Likewise.
+ * include/ext/pb_ds/exception.hpp: Likewise.
+ * include/ext/pb_ds/tree_policy.hpp: Likewise.
+ * include/ext/pb_ds/tag_and_trait.hpp: Likewise.
+ * include/ext/pb_ds/hash_policy.hpp: Likewise.
+ * include/ext/pb_ds/trie_policy.hpp: Likewise.
+ * include/ext/pb_ds/priority_queue.hpp: Likewise.
+ * include/ext/throw_allocator.h: Likewis: Likewise.e.
+ * include/ext/bitmap_allocator.h
+ * include/ext/rc_string_base.h: Likewise.
+ * include/ext/new_allocator.h: Likewise.
+ * include/ext/codecvt_specializations.h: Likewise.
+ * include/ext/functional: Likewise.: Likewise.
+ * include/ext/array_allocator.h: Likewise.
+ * include/ext/mt_allocator.h: Likewise.
+ * include/ext/sso_string_base.h: Likewise.
+ * include/profile/impl/profiler_trace.h: Likewise.
+ * include/profile/impl/profiler_node.h: Likewise.
+ * include/bits/stl_algobase.h: Likewise.
+ * include/bits/functional_hash.h: Likewise.
+ * include/bits/locale_facets.tcc: Likewise.
+ * include/bits/locale_facets.h: Likewise.
+ * include/bits/stl_iterator_base_types.h: Likewise.
+ * include/bits/move.h: Likewise.
+ * include/bits/boost_concept_check.h: Likewise.
+ * include/bits/basic_string.tcc: Likewise.
+ * include/bits/locale_facets_nonio.tcc: Likewise.
+ * include/bits/fstream.tcc: Likewise.
+ * include/bits/locale_facets_nonio.h: Likewise.
+ * include/c_global/cstdlib: Likewise.
+ * include/c_global/cstdio: Likewise.
+ * include/c_global/ctime: Likewise.
+ * include/c_global/cwchar: Likewise.
+ * include/c_global/cstring
+ * include/tr1/type_traits: Likewise.
+ * include/backward/hash_fun.h: Likewise.
+ * libsupc++/new: Likewise.
+ * libsupc++/initializer_list: Likewise.
+ * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise.
+ * testsuite/27_io/basic_iostream/cons/2020.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sgetn/char/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/overflow/char/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sgetc/char/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputn/char/1057.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputn/char/1.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc: Likewise.
+ * testsuite/27_io/basic_streambuf/sputc/char/1057.cc: Likewise.
+ * testsuite/27_io/objects/wchar_t/5268.cc: Likewise.
+ * testsuite/27_io/objects/char/9661-1.cc: Likewise.
+ * testsuite/27_io/objects/char/5268.cc: Likewise.
+ * testsuite/27_io/objects/char/10.cc: Likewise.
+ * testsuite/27_io/basic_ios/copyfmt/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ios/copyfmt/char/2.cc: Likewise.
+ * testsuite/27_io/basic_ios/exceptions/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ios/locales/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ios/clear/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputc/char/1057.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc: Likewise.
+ * testsuite/27_io/basic_stringbuf/sputn/char/1057.cc: Likewise.
+ * testsuite/27_io/basic_istream/get/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/get/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/peek/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/peek/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/getline/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/getline/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_other/wchar_t/
+ exceptions_null.cc
+ * testsuite/27_io/basic_istream/extractors_other/wchar_t/
+ 1.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_other/char/
+ exceptions_null.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_other/char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/cons/3.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/
+ wchar_t/01.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/
+ char/01.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ wchar_t/2.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ wchar_t/3.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ char/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ char/2.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ char/3.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/
+ char/9826.cc: Likewise.
+ * testsuite/27_io/basic_istream/read/wchar_t/1.cc: Likewise.
+ * testsuite/27_io/basic_istream/read/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_other/wchar_t/
+ exceptions_null.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_other/wchar_t/
+ 1.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_other/char/
+ exceptions_null.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_other/char/1.cc: Likewise.
+ * testsuite/27_io/basic_ostream/cons/2020.cc: Likewise.
+ * testsuite/27_io/basic_ostream/sentry/pod/1.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_character/
+ wchar_t/8.cc: Likewise.
+ * testsuite/27_io/basic_ostream/inserters_character/
+ char/8.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/setbuf/char/1.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/sputc/char/1057.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/open/char/1.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/open/char/2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/open/char/9507.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/9964.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/1.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/12790-3.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/sputn/char/1057.cc: Likewise.
+ * testsuite/24_iterators/ostreambuf_iterator/2.cc: Likewise.
+ * testsuite/18_support/bad_exception/23591_thread-1.c
+ * testsuite/18_support/new_delete_placement.cc: Likewise.
+ * testsuite/18_support/pthread_guard.cc: Likewise.
+ * testsuite/21_strings/basic_string/operations/wchar_t/1.cc: Likewise.
+ * testsuite/21_strings/basic_string/operations/char/1.cc: Likewise.
+ * testsuite/21_strings/basic_string/pthread4.cc: Likewise.
+ * testsuite/21_strings/basic_string/cons/wchar_t/5.cc: Likewise.
+ * testsuite/21_strings/basic_string/cons/char/5.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/timed_mutex/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/recursive_mutex/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/recursive_mutex/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/mutex/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/mutex/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/thread/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/thread/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/cons/
+ assign_neg.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/cons/
+ copy_neg.cc: Likewise.
+ * testsuite/ext/mt_allocator/22309_thread.cc: Likewise.
+ * testsuite/ext/slist/23781.cc: Likewise.
+ * testsuite/ext/rope/pthread7-rope.cc: Likewise.
+ * testsuite/ext/stdio_filebuf/char/10063-2.cc: Likewise.
+ * testsuite/22_locale/ctype/is/wchar_t/1.cc: Likewise.
+ * testsuite/22_locale/ctype/is/char/1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/12439_1.cc: Likewise.
+ * testsuite/22_locale/time_put/put/char/12439_3.cc: Likewise.
+ * testsuite/22_locale/locale/cons/2.cc: Likewise.
+ * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise.
+ * testsuite/22_locale/locale/cons/29217.cc: Likewise.
+ * testsuite/22_locale/locale/global_locale_objects/14071.cc: Likewise.
+ * testsuite/22_locale/locale/global_locale_objects/2.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_multimap/
+ requirements/iterator_null_neg.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_multiset/
+ requirements/iterator_null_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_address/cons/single_value.cc: Likewise.
+ * testsuite/29_atomics/atomic_address/cons/aggregate.cc: Likewise.
+ * testsuite/23_containers/multimap/23781.cc: Likewise.
+ * testsuite/23_containers/set/23781.cc: Likewise.
+ * testsuite/23_containers/multiset/23781.cc: Likewise.
+ * testsuite/23_containers/list/pthread1.cc: Likewise.
+ * testsuite/23_containers/list/23781.cc: Likewise.
+ * testsuite/23_containers/map/pthread6.cc: Likewise.
+ * testsuite/23_containers/map/23781.cc: Likewise.
+ * testsuite/util/regression/rand/priority_queue/
+ rand_regression_test.hpp: Likewise.
+ * testsuite/util/regression/rand/priority_queue/
+ container_rand_regression_test.tcc: Likewise.
+ * testsuite/util/regression/rand/assoc/
+ rand_regression_test.hpp: Likewise.
+ * testsuite/util/regression/rand/assoc/
+ container_rand_regression_test.tcc: Likewise.
+ * testsuite/util/testsuite_hooks.cc: Likewise.
+ * testsuite/util/testsuite_io.h: Likewise.
+ * testsuite/util/testsuite_iterators.h: Likewise.
+ * testsuite/util/replacement_memory_operators.h: Likewise.
+ * testsuite/util/testsuite_allocator.h: Likewise.
+ * testsuite/util/testsuite_performance.h: Likewise.
+
+2010-06-02 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc: Fix
+ which tests are run.
+ * testsuite/20_util/shared_ptr/cons/pointer.cc: Likewise.
+
+2010-06-01 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * acinclude.m4, configure.host: Support Bionic C library.
+ * configure: Regenerate.
+ * config/os/bionic/ctype_base.h, config/os/bionic/ctype_inline.h,
+ * config/os/bionic/ctype_noincline.h, config/os/bionic/os_defines.h:
+ New files, based on config/os/newlib/*.
+
+2010-05-31 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/43820
+ * include/bits/shared_ptr_base.h: Require complete type.
+ * include/tr1/shared_ptr.h: Likewise.
+ * testsuite/20_util/shared_ptr/cons/43820.cc: New.
+ * testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc: New.
+
+2010-05-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/basic_string.h (front, back): Add.
+ * include/debug/string: Adjust.
+ * include/ext/vstring.h (front, back): Tweak the implementation
+ to follow more closely the letter of the specs.
+ * testsuite/21_strings/basic_string/element_access/char/
+ front_back.cc: New.
+ * testsuite/21_strings/basic_string/element_access/wchar_t/
+ front_back.cc: Likewise.
+ * config/abi/pre/gnu.ver: Export new symbols.
+ * testsuite/util/testsuite_abi.cc: Adjust.
+ * configure.ac: Bump minor version to 6:15:0.
+ * configure: Regenerate.
+
+2010-05-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_vector.h (vector<>::data): Fix return type
+ in c++0x mode.
+ * testsuite/23_containers/vector/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line number.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+ Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2010-05-27 Jason Merrill <jason@redhat.com>
+
+ Revert:
+ PR libstdc++/42832
+ * include/std/functional (function<>::swap): Perform bytewise
+ swap of _M_functor.
+ * include/tr1/functional (function<>::swap): Likewise.
+
+2010-05-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/40497
+ * include/bits/cpp_type_traits.h (__is_iterator): Add.
+ * include/bits/stl_iterator_base_funcs.h (next, prev): Use it.
+ * testsuite/24_iterators/operations/40497.cc: New.
+
+2010-05-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/25306
+ * include/bits/stl_algobase.h (fill_n): Use a properly typed __niter
+ initialized to __n.
+ * include/bits/stl_algo.h (generate_n): Likewise.
+ * testsuite/25_algorithms/fill_n/25306.cc: New.
+ * testsuite/25_algorithms/generate_n/25306.cc: Likewise.
+
+2010-05-21 Joseph Myers <joseph@codesourcery.com>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_CLOCALE): Use GNU locale model for
+ glibc 2.3 and later, but not uClibc, without an execution test.
+ * configure: Regenerate.
+ * doc/xml/manual/configure.xml, doc/xml/manual/prerequisites.xml,
+ doc/xml/faq.xml: Update.
+
+2010-05-21 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/tr1/functional: Use std::__addressof.
+ * include/tr1/hashtable_policy.h: Likewise.
+
+2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/41792
+ * include/tr1_impl/array: Use std::__addressof.
+ * include/std/functional (reference_wrapper): Likewise.
+ * include/ext/throw_allocator.h: Likewise.
+ * include/ext/pool_allocator.h: Likewise.
+ * include/ext/bitmap_allocator.h: Likewise.
+ * include/ext/new_allocator.h: Likewise.
+ * include/ext/malloc_allocator.h: Likewise.
+ * include/ext/array_allocator.h: Likewise.
+ * include/ext/mt_allocator.h: Likewise.
+ * include/ext/extptr_allocator.h: Likewise.
+ * include/bits/stl_list.h: Likewise.
+ * include/bits/hashtable_policy.h: Likewise.
+ * include/bits/forward_list.h: Likewise.
+ * include/bits/stl_uninitialized.h: Likewise.
+ * include/bits/list.tcc: Likewise.
+ * include/bits/stl_construct.h: Likewise.
+ * include/bits/stl_tree.h: Likewise.
+ * testsuite/20_util/reference_wrapper/41792.cc: New.
+ * testsuite/23_containers/unordered_map/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/multimap/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/set/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/unordered_set/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/multiset/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/list/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/map/requirements/
+ explicit_instantiation/4.cc: Likewise.
+ * testsuite/23_containers/array/requirements/
+ explicit_instantiation/3.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/
+ dr438/assign_neg.cc: Adjust dg-error line numbers.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/forward_list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ assign_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/list/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2010-05-20 Peter Dimov <pdimov@pdimov.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/move.h (__addressof, addressof): Add.
+ * testsuite/util/testsuite_api.h (struct OverloadedAddress): Add.
+ * testsuite/20_util/addressof/requirements/
+ explicit_instantiation.cc: New.
+ * testsuite/20_util/addressof/1.cc: Likewise.
+
+2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_pair.h (pair<>::pair(const pair&)): Defaulted
+ in C++0x mode.
+ (pair<>::operator=(const pair<>&)): Add in C++0x mode.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust dg-error
+ line number.
+
+2010-05-19 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/30_threads/future/members/wait.cc (wait): Rename.
+ * testsuite/30_threads/shared_future/members/wait.cc (wait): Likewise.
+
+2010-05-18 Eelis van der Weegen <gcc-bugzilla@contacts.eelis.net>
+
+ PR libstdc++/44190
+ * include/debug/vector (vector<>::resize): Call
+ _M_update_guaranteed_capacity.
+ * testsuite/23_containers/vector/capacity/44190.cc: New.
+
+2010-05-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/std/functional (result_of): Move...
+ * include/std/type_traits: ... here.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+ line number.
+
+2010-05-12 Jason Merrill <jason@redhat.com>
+
+ * testsuite/20_util/auto_ptr/assign_neg.cc: Expect template
+ candidate messages.
+ * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Likewise.
+ * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
+
+2010-05-11 Silvius Rus <silvius.rus@gmail.com>
+
+ PR libstdc++/43259
+ * include/profile/impl/profiler_algos.h: New.
+ * include/Makefile.am: Add.
+ * include/Makefile.in: Regenerate.
+ * include/profile/impl/profiler.h
+ (_GLIBCXX_PROFILE_DEFINE_UNINIT_DATA): Add.
+ * include/profile/impl/profiler_trace.h
+ (__mutex_t, __lock, __unlock): Remove.
+ (__lock_object_table, __lock_stack_table): Remove. Replace uses with
+ calls to __gnu_cxx::__mutex::lock.
+ (__unlock_object_table, __unlock_stack_table): Remove. Replace uses
+ with calls to __gnu_cxx::__mutex::unlock.
+ (__warn, __cost_factor_writer, __cost_factor_setter): Add.
+ * testsuite/ext/profile/profiler_algos.cc: New.
+
+2010-05-07 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * libsupc++/exception_ptr.h (make_exception_ptr): Add.
+ * testsuite/18_support/exception_ptr/make_exception_ptr.cc: New.
+
+2010-05-06 Jason Merrill <jason@redhat.com>
+
+ * config/abi/pre/gnu.ver: Move decltype(nullptr) into CXXABI_1.3.5.
+ * testsuite/util/testsuite_abi.cc (check_version): Add CXXABI_1.3.5.
+
+ * config/abi/pre/gnu.ver: Add typeinfo for decltype(nullptr).
+
+2010-05-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/basic_string.h: Escape class names in doxygen docs.
+
+2010-05-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/44014
+ * include/bits/stringfwd.h: Add doxygen comments and new group.
+ * include/bits/basic_string.h: Add to new doxygen group.
+ * doc/doxygen/user.cfg.in (ALIASES): Link to correct group.
+
+2010-05-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.host: Removed irix[1-6], irix[1-5].*, irix6.[0-4]*
+ support.
+ * config/os/irix/irix5.2: Removed.
+
+2010-05-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/vector/bool/capacity/29134.cc: Adjust
+ for profile-mode too.
+ * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc:
+ Likewise.
+
+2010-05-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/profile/unordered_map (unordered_map<>::insert(_InputIter,
+ _InputIter), unordered_multimap<>::insert(_InputIter, _InputIter)):
+ Fix typo, don't call base() on __first and __last.
+
+2010-05-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+ Fix profile-mode vs -std=c++0x
+ * include/profile/impl/profiler_trace.h: Do not include the
+ whole <algorithm>, include <bits/stl_heap.h> (additionally
+ to <bits/stl_algobase.h>).
+ (__write_cost_factors): Replace std::for_each with open-coding.
+ (__set_cost_factors): Likewise.
+ (__report): Likewise; use std::make_heap / std::sort_heap
+ instead of std::sort.
+ (__report_cost_factors): Replace std::remove with open-coding.
+ (__warn, __cost_factor_writer, __cost_factor_setter): Remove.
+
+2010-05-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ PR other/43620
+ * configure.ac (AM_INIT_AUTOMAKE): Add no-dist.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * include/Makefile.in: Regenerate.
+ * libsupc++/Makefile.in: Regenerate.
+ * po/Makefile.in: Regenerate.
+ * python/Makefile.in: Regenerate.
+ * src/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
+2010-05-01 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/faq.xml: Fix anachronisms.
+ * doc/xml/manual/intro.xml (Make): Tweak grammar and whitespace.
+ * doc/xml/manual/support.xml (NULL): Use inline <code> element
+ instead of <programlisting> block.
+ * doc/html/*: Regenerate.
+
+2010-04-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_pair.h (piecewise_construct_t,
+ pair<>::pair(piecewise_construct_t, tuple, tuple)): Add.
+ (pair<>::__cons, pair<>::__do_cons): Declare.
+ (__decay_and_strip, __strip_reference_wrapper): Move...
+ * include/std/type_traits: ... here.
+ * include/std/functional (_Index_tuple, _Build_index_tuple): Move...
+ * include/std/tuple: ... here.
+ (pack_arguments): Add.
+ (pair<>::__cons, pair<>::__do_cons): Define.
+ * testsuite/20_util/tuple/creation_functions/pack_arguments.cc: New.
+ * testsuite/20_util/pair/piecewise.cc: Likewise.
+ * testsuite/20_util/tuple/cons/big_tuples.cc: Include <utility>.
+ * testsuite/20_util/tuple/cons/constructor.cc: Likewise.
+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+ dg-error line numbers.
+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+ Likewise.
+ * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
+2010-04-27 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/43865
+ * include/c_global/cstdlib (abort, exit): _GLIBCXX_NORETURN typo.
+
+2010-04-27 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update quick_exit status.
+ * doc/html/*: Regenerate.
+
+2010-04-27 Fabien Chêne <fabien.chene@gmail.com>
+
+ * testsuite/util/testsuite_error.h: Add empty default constructor
+ to __gnu_test::test_category and
+ __gnu_test::test_derived_category.
+ * src/future.cc: Add empty default constructor to
+ future_error_category.
+ * src/system_error.cc: Add default ctor to generic_error_category
+ and system_error_category.
+
+2010-04-27 Alexander Monakov <amonakov@ispras.ru>
+
+ * testsuite/22_locale/codecvt/unshift/char/1.cc (test01): Clarify size
+ definition. Use memcpy and memcmp to avoid access beyond allocated
+ memory.
+
+2010-04-27 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update to match n3092.
+ * doc/html/*: Regenerate.
+
+2010-04-25 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/manual/status_cxx200x.xml: Update Threads status.
+ * doc/html/manual/status.html: Regenerate.
+
+2010-04-24 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/unique_ptr (unique_ptr::pointer): Use deleter's
+ pointer type if it exists.
+ * testsuite/20_util/unique_ptr/requirements/pointer_type.cc: New.
+ * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Adjust.
+ * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Adjust.
+
+2010-04-22 Johannes Singler <singler@kit.edu>
+
+ * include/parallel/partition.h (__parallel_partition):
+ Improve scalability by:
+ -introducing new variables __leftold, __rightold, __dist, thus
+ -getting rid of omp lock by using atomic operations
+ -getting rid of two omp barriers
+
+2010-04-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * doc/xml/faq.xml: Link to manual.
+ * doc/xml/manual/using.xml: Expand dynamic libraries section.
+ * doc/xml/manual/strings.xml: Mention shrink_to_fit() member.
+ * doc/xml/manual/prerequisites.xml: Link to doxygen requirements.
+ * doc/xml/manual/appendix_contributing.xml: Update Bash version.
+ * doc/html/*: Regenerate.
+
+2010-04-13 Ian Lance Taylor <iant@google.com>
+
+ * include/backward/hash_map: Don't #include "backward_warning.h"
+ if _GLIBCXX_PERMIT_BACKWARD_HASH is defined.
+ * include/backward/hash_set: Likewise.
+
+2010-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.host (os_include_dir): Removed solaris2.7 support.
+ * crossconfig.m4 (GLIBCXX_CROSSCONFIG): Likewise.
+ * configure: Regenerate.
+
2010-04-06 Matthias Klose <doko@ubuntu.com>
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Show test result.
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index ecfe02a2ac7..f62595fc278 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -34,13 +34,11 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
- $(srcdir)/../config.sub $(srcdir)/../install-sh \
- $(srcdir)/../ltmain.sh $(srcdir)/../missing \
- $(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(top_srcdir)/configure $(top_srcdir)/fragment.am \
- $(top_srcdir)/scripts/testsuite_flags.in ChangeLog
+DIST_COMMON = $(top_srcdir)/fragment.am README ChangeLog \
+ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/configure $(am__configure_deps) \
+ $(srcdir)/config.h.in $(srcdir)/../mkinstalldirs \
+ $(top_srcdir)/scripts/testsuite_flags.in
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -59,6 +57,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -70,7 +69,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
@@ -87,47 +85,10 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir dist dist-all distcheck
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = include libsupc++ doc src po testsuite python
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
- { test ! -d "$(distdir)" \
- || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr "$(distdir)"; }; }
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -164,6 +125,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -559,182 +521,6 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- $(am__remove_distdir)
- test -d "$(distdir)" || mkdir "$(distdir)"
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
- -test -n "$(am__skip_mode_fix)" \
- || find "$(distdir)" -type d ! -perm -755 \
- -exec chmod u+rwx,go+rx {} \; -o \
- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
- || chmod -R a+r "$(distdir)"
-dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-dist-lzma: distdir
- tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
- $(am__remove_distdir)
-
-dist-xz: distdir
- tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
- $(am__remove_distdir)
-
-dist-tarZ: distdir
- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
-
-dist-shar: distdir
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
-
-dist-zip: distdir
- -rm -f $(distdir).zip
- zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
-
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- case '$(DIST_ARCHIVES)' in \
- *.tar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
- *.tar.bz2*) \
- bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.lzma*) \
- lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
- *.tar.xz*) \
- xz -dc $(distdir).tar.xz | $(am__untar) ;;\
- *.tar.Z*) \
- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
- *.shar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
- *.zip*) \
- unzip $(distdir).zip ;;\
- esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
- mkdir $(distdir)/_build
- mkdir $(distdir)/_inst
- chmod a-w $(distdir)
- test -d $(distdir)/_build || exit 0; \
- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
- && am__cwd=`pwd` \
- && $(am__cd) $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
- $(DISTCHECK_CONFIGURE_FLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
- && $(MAKE) $(AM_MAKEFLAGS) check \
- && $(MAKE) $(AM_MAKEFLAGS) install \
- && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- && $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
- distuninstallcheck \
- && chmod -R a-w "$$dc_install_base" \
- && ({ \
- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
- } || { rm -rf "$$dc_destdir"; exit 1; }) \
- && rm -rf "$$dc_destdir" \
- && $(MAKE) $(AM_MAKEFLAGS) dist \
- && rm -rf $(DIST_ARCHIVES) \
- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
- && cd "$$am__cwd" \
- || exit 1
- $(am__remove_distdir)
- @(echo "$(distdir) archives ready for distribution: "; \
- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
- sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
- @$(am__cd) '$(distuninstallcheck_dir)' \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
- || { echo "ERROR: files left after uninstall:" ; \
- if test -n "$(DESTDIR)"; then \
- echo " (check DESTDIR support)"; \
- fi ; \
- $(distuninstallcheck_listfiles) ; \
- exit 1; } >&2
-distcleancheck: distclean
- @if test '$(srcdir)' = . ; then \
- echo "ERROR: distcleancheck can only run from a VPATH build" ; \
- exit 1 ; \
- fi
- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
- || { echo "ERROR: files left in build directory after distclean:" ; \
- $(distcleancheck_listfiles) ; \
- exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile all-multi config.h
@@ -843,17 +629,14 @@ uninstall-am:
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am all-multi am--refresh check check-am clean \
clean-generic clean-libtool clean-multi ctags ctags-recursive \
- dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
- dist-tarZ dist-xz dist-zip distcheck distclean \
- distclean-generic distclean-hdr distclean-libtool \
- distclean-multi distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-multi install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs installdirs-am maintainer-clean \
+ distclean distclean-generic distclean-hdr distclean-libtool \
+ distclean-multi distclean-tags dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-multi install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic maintainer-clean-multi mostlyclean \
mostlyclean-generic mostlyclean-libtool mostlyclean-multi pdf \
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index f54517f200a..5c856baab8d 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -95,7 +95,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- # Check for uClibc since Linux platforms use different configuration
+ # Check for C library flavor since Linux platforms use different configuration
# directories depending on the C library in use.
AC_EGREP_CPP([_using_uclibc], [
#include <stdio.h>
@@ -104,6 +104,13 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
#endif
], uclibc=yes, uclibc=no)
+ AC_EGREP_CPP([_using_bionic], [
+ #include <stdio.h>
+ #if __BIONIC__
+ _using_bionic
+ #endif
+ ], bionic=yes, bionic=no)
+
# Find platform-specific directories containing configuration info.
# Also possibly modify flags used elsewhere, as needed by the platform.
GLIBCXX_CHECK_HOST
@@ -1612,26 +1619,33 @@ AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
])
dnl
-dnl Check whether EOF, SEEK_CUR, and SEEK_END have the most common values:
-dnl in that case including <cstdio> in some C++ headers can be avoided.
+dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
dnl
-AC_DEFUN([GLIBCXX_CHECK_STDIO_MACROS], [
+AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
- AC_MSG_CHECKING([for EOF == -1, SEEK_CUR == 1, SEEK_END == 2])
- AC_CACHE_VAL(glibcxx_cv_stdio_macros, [
- AC_TRY_COMPILE([#include <stdio.h>],
- [#if ((EOF != -1) || (SEEK_CUR != 1) || (SEEK_END != 2))
- unusual values...
- #endif
- ], [glibcxx_cv_stdio_macros=yes],
- [glibcxx_cv_stdio_macros=no])
+ AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing EOF failed])])
])
- AC_MSG_RESULT($glibcxx_cv_stdio_macros)
- if test x"$glibcxx_cv_stdio_macros" = x"yes"; then
- AC_DEFINE(_GLIBCXX_STDIO_MACROS, 1,
- [Define if EOF == -1, SEEK_CUR == 1, SEEK_END == 2.])
- fi
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
+ [Define to the value of the EOF integer constant.])
+ AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing SEEK_CUR failed])])
+ ])
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
+ [Define to the value of the SEEK_CUR integer constant.])
+
+ AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing SEEK_END failed])])
+ ])
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
+ [Define to the value of the SEEK_END integer constant.])
])
dnl
@@ -1740,41 +1754,11 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
if test $enable_clocale_flag = gnu; then
AC_EGREP_CPP([_GLIBCXX_ok], [
#include <features.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
_GLIBCXX_ok
#endif
], enable_clocale_flag=gnu, enable_clocale_flag=generic)
- if test $enable_clocale = auto; then
- # Test for bugs early in glibc-2.2.x series
- AC_TRY_RUN([
- #define _GNU_SOURCE 1
- #include <locale.h>
- #include <string.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- extern __typeof(newlocale) __newlocale;
- extern __typeof(duplocale) __duplocale;
- extern __typeof(strcoll_l) __strcoll_l;
- #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
- const char __two[] = "Äuglein";
- int i;
- int j;
- __locale_t loc;
- __locale_t loc_dup;
- loc = __newlocale(1 << LC_ALL, "de_DE", 0);
- loc_dup = __duplocale(loc);
- i = __strcoll_l(__one, __two, loc);
- j = __strcoll_l(__one, __two, loc_dup);
- return 0;
- }
- ],
- [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
- [enable_clocale_flag=generic])
- fi
-
# Set it to scream when it hurts.
ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Wimplicit-function-declaration -Werror"
@@ -2835,11 +2819,14 @@ AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
GLIBCXX_ENABLE(symvers,$1,[=STYLE],
[enables symbol versioning of the shared library],
- [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export])
+ [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
+# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
+# with extern "C++" in version scripts.
+AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
# Turn a 'yes' into a suitable default.
if test x$enable_symvers = xyes ; then
@@ -2857,6 +2844,20 @@ if test x$enable_symvers = xyes ; then
case ${target_os} in
darwin*)
enable_symvers=darwin ;;
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
+ # make_sunver.pl needs GNU c++filt to support extern "C++" in
+ # version scripts, so disable symbol versioning if none can be
+ # found.
+ if test -z "$ac_cv_path_CXXFILT"; then
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
+ AC_MSG_WARN([=== no GNU c++filt could be found.])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ else
+ enable_symvers=sun
+ fi
+ ;;
*)
enable_symvers=no ;;
esac
@@ -2869,8 +2870,26 @@ if test x$enable_symvers = xdarwin-export ; then
enable_symvers=darwin
fi
+# Check if 'sun' was requested on non-Solaris 2 platforms.
+if test x$enable_symvers = xsun ; then
+ case ${target_os} in
+ solaris2*)
+ # All fine.
+ ;;
+ *)
+ # Unlikely to work.
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
+ AC_MSG_WARN([=== you are not targetting Solaris 2.])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ ;;
+ esac
+fi
+
# Check to see if 'gnu' can win.
-if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then
+if test $enable_symvers = gnu ||
+ test $enable_symvers = gnu-versioned-namespace ||
+ test $enable_symvers = sun; then
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
AC_MSG_CHECKING([for shared libgcc])
ac_save_CFLAGS="$CFLAGS"
@@ -2906,6 +2925,8 @@ changequote([,])dnl
AC_MSG_WARN([=== you are not building a shared libgcc_s.])
AC_MSG_WARN([=== Symbol versioning will be disabled.])
enable_symvers=no
+ elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
+ : All interesting versions of Sun ld support sun style symbol versioning.
elif test $with_gnu_ld != yes ; then
# just fail for now
AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
@@ -2945,6 +2966,11 @@ case $enable_symvers in
AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
[Define to use darwin versioning in the shared library.])
;;
+ sun)
+ SYMVER_FILE=config/abi/pre/gnu.ver
+ AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
+ [Define to use Sun versioning in the shared library.])
+ ;;
esac
if test x$enable_symvers != xno ; then
@@ -2968,8 +2994,24 @@ GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
+GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
+if test $enable_symvers != no ; then
+ case ${target_os} in
+ # The Solaris 2 runtime linker doesn't support the GNU extension of
+ # binding the same symbol to different versions
+ solaris2*)
+ symvers_renaming=no ;;
+ # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
+ *)
+ AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
+ [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
+ symvers_renaming=yes ;;
+ esac
+fi
+GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no)
+
# Now, set up compatibility support, if any.
# In addition, need this to deal with std::size_t mangling in
# src/compatibility.cc. In a perfect world, could use
@@ -3106,5 +3148,6 @@ AC_DEFUN([AC_LC_MESSAGES], [
])
# Macros from the top-level gcc directory.
+m4_include([../config/gc++filt.m4])
m4_include([../config/tls.m4])
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index 55fa49e29d7..6ab257fa344 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -349,6 +349,10 @@
/* Define if strxfrm_l is available in <string.h>. */
#undef HAVE_STRXFRM_L
+/* Define to 1 if the target runtime linker supports binding the same symbol
+ to different versions. */
+#undef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT
+
/* Define to 1 if you have the <sys/filio.h> header file. */
#undef HAVE_SYS_FILIO_H
@@ -709,8 +713,14 @@
/* Define if the compiler is configured for setjmp/longjmp exceptions. */
#undef _GLIBCXX_SJLJ_EXCEPTIONS
-/* Define if EOF == -1, SEEK_CUR == 1, SEEK_END == 2. */
-#undef _GLIBCXX_STDIO_MACROS
+/* Define to the value of the EOF integer constant. */
+#undef _GLIBCXX_STDIO_EOF
+
+/* Define to the value of the SEEK_CUR integer constant. */
+#undef _GLIBCXX_STDIO_SEEK_CUR
+
+/* Define to the value of the SEEK_END integer constant. */
+#undef _GLIBCXX_STDIO_SEEK_END
/* Define to use symbol versioning in the shared library. */
#undef _GLIBCXX_SYMVER
@@ -724,6 +734,9 @@
/* Define to use GNU namespace versioning in the shared library. */
#undef _GLIBCXX_SYMVER_GNU_NAMESPACE
+/* Define to use Sun versioning in the shared library. */
+#undef _GLIBCXX_SYMVER_SUN
+
/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
<stdio.h>, and <stdlib.h> can be used or exposed. */
#undef _GLIBCXX_USE_C99
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 1df649911a0..aff2593425e 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -185,7 +185,10 @@ GLIBCXX_3.4 {
# where it is used for size_type on LLP64 platforms.
_ZNSsC[12][EI][PRjmvyN]*;
_ZNSsD*;
- _ZNSs[0-58-9][a-z]*;
+ _ZNSs[0-58-9]a*;
+ _ZNSs5beginEv;
+ _ZNSs[0-58-9][c-e]*;
+ _ZNSs[0-58-9][g-z]*;
# _ZNSs[67][a-z]*E[PRcjmvy]*;
_ZNSs6appendE[PRcjmvy]*;
_ZNSs6assignE[PRcjmvy]*;
@@ -219,9 +222,12 @@ GLIBCXX_3.4 {
_ZNSsaSE[PRc]*;
_ZNSsixE*;
_ZNSspLE[PRc]*;
- _ZNKSs[0-9][a-b]*;
- _ZNKSs[0-9][d-z]*;
+ _ZNKSs[0-3][a-b]*;
+ _ZNKSs[5-9][a-b]*;
+ _ZNKSs[0-9][d-e]*;
+ _ZNKSs[0-9][g-z]*;
_ZNKSs[0-9][0-9][a-z]*;
+ _ZNKSs4find*;
_ZNKSs[a-z]*;
_ZNKSs4_Rep12_M_is_leakedEv;
_ZNKSs4_Rep12_M_is_sharedEv;
@@ -240,7 +246,10 @@ GLIBCXX_3.4 {
# std::wstring
_ZNSbIwSt11char_traitsIwESaIwEEC[12][EI][PRjmvyN]*;
_ZNSbIwSt11char_traitsIwESaIwEED*;
- _ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][a-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-58-9]a*;
+ _ZNSbIwSt11char_traitsIwESaIwEE5beginEv;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][c-e]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][g-z]*;
# _ZNSbIwSt11char_traitsIwESaIwEE[67][a-b]*E[PRwjmvy]*;
_ZNSbIwSt11char_traitsIwESaIwEE6appendE[PRwjmvy]*;
_ZNSbIwSt11char_traitsIwESaIwEE6assignE[PRwjmvy]*;
@@ -274,10 +283,13 @@ GLIBCXX_3.4 {
_ZNSbIwSt11char_traitsIwESaIwEEaSE[PRw]*;
_ZNSbIwSt11char_traitsIwESaIwEEixE*;
_ZNSbIwSt11char_traitsIwESaIwEEpLE[PRw]*;
- _ZNKSbIwSt11char_traitsIwESaIwEE[0-9][a-b]*;
- _ZNKSbIwSt11char_traitsIwESaIwEE[0-9][d-z]*;
+ _ZNKSbIwSt11char_traitsIwESaIwEE[0-3][a-b]*;
+ _ZNKSbIwSt11char_traitsIwESaIwEE[5-9][a-b]*;
+ _ZNKSbIwSt11char_traitsIwESaIwEE[0-9][d-e]*;
+ _ZNKSbIwSt11char_traitsIwESaIwEE[0-9][g-z]*;
_ZNKSbIwSt11char_traitsIwESaIwEE[0-9][0-9][a-z]*;
_ZNKSbIwSt11char_traitsIwESaIwEE[a-z]*;
+ _ZNKSbIwSt11char_traitsIwESaIwEE4find*;
_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv;
_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv;
_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv;
@@ -728,6 +740,7 @@ GLIBCXX_3.4 {
sqrtl;
copysignf;
+#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT
# GLIBCXX_ABI compatibility only.
# std::string
_ZNKSs11_M_disjunctEPKc;
@@ -755,6 +768,7 @@ GLIBCXX_3.4 {
_ZNSt11char_traitsI[cw]E2eqERK[cw]S2_;
_ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv;
+#endif
# std::locale::Impl _M_ members
_ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPKNS_5facetE;
@@ -863,7 +877,9 @@ GLIBCXX_3.4.6 {
_ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE9showmanycEv;
+#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT
_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv;
+#endif
_ZN9__gnu_cxx6__poolILb1EE13_M_initializeEv;
@@ -1150,6 +1166,25 @@ GLIBCXX_3.4.14 {
} GLIBCXX_3.4.13;
+GLIBCXX_3.4.15 {
+
+ # string|wstring front and back member functions
+ _ZNSs5frontEv;
+ _ZNKSs5frontEv;
+ _ZNSbIwSt11char_traitsIwESaIwEE5frontEv;
+ _ZNKSbIwSt11char_traitsIwESaIwEE5frontEv;
+ _ZNSs4backEv;
+ _ZNKSs4backEv;
+ _ZNSbIwSt11char_traitsIwESaIwEE4backEv;
+ _ZNKSbIwSt11char_traitsIwESaIwEE4backEv;
+
+ # Default function.
+ _ZSt11_Hash_bytesPKv*;
+
+ # FNV hash.
+ _ZSt15_Fnv_hash_bytesPKv*;
+
+} GLIBCXX_3.4.14;
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.3 {
@@ -1311,8 +1346,14 @@ CXXABI_1.3.4 {
_ZTID[fde];
_ZTIPD[fde];
_ZTIPKD[fde];
- _ZTID[fde];
- _ZTIPD[fde];
- _ZTIPKD[fde];
} CXXABI_1.3.3;
+
+CXXABI_1.3.5 {
+
+ # typeinfo for decltype(nullptr)
+ _ZTIDn;
+ _ZTIPDn;
+ _ZTIPKDn;
+
+} CXXABI_1.3.4;
diff --git a/libstdc++-v3/config/io/c_io_stdio.h b/libstdc++-v3/config/io/c_io_stdio.h
index 86ca53baafb..f6eeadc9ba9 100644
--- a/libstdc++-v3/config/io/c_io_stdio.h
+++ b/libstdc++-v3/config/io/c_io_stdio.h
@@ -1,6 +1,6 @@
// Underlying io library details -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,6 @@
#define _GLIBCXX_CXX_IO_H 1
#include <cstdio>
-#include <cstddef>
#include <bits/gthr.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc
index 4ae951e7711..468816092d7 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -36,7 +36,6 @@
#include <cstdio>
#include <locale>
#include <limits>
-#include <cstddef>
#ifdef _GLIBCXX_HAVE_IEEEFP_H
#include <ieeefp.h>
@@ -50,7 +49,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const __c_locale&) throw()
{
// Assumes __s formatted for "C" locale.
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __len = strlen(__old) + 1;
char* __sav = new char[__len];
memcpy(__sav, __old, __len);
@@ -115,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const __c_locale&) throw()
{
// Assumes __s formatted for "C" locale.
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __len = strlen(__old) + 1;
char* __sav = new char[__len];
memcpy(__sav, __old, __len);
@@ -160,7 +159,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ios_base::iostate& __err, const __c_locale&) throw()
{
// Assumes __s formatted for "C" locale.
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __len = strlen(__old) + 1;
char* __sav = new char[__len];
memcpy(__sav, __old, __len);
@@ -212,7 +211,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
// Currently, the generic model only supports the "C" locale.
// See http://gcc.gnu.org/ml/libstdc++/2003-02/msg00345.html
- __cloc = NULL;
+ __cloc = 0;
if (strcmp(__s, "C"))
__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
"name not valid"));
@@ -220,7 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
- { __cloc = NULL; }
+ { __cloc = 0; }
__c_locale
locale::facet::_S_clone_c_locale(__c_locale&) throw()
diff --git a/libstdc++-v3/config/locale/generic/c_locale.h b/libstdc++-v3/config/locale/generic/c_locale.h
index 472ef550530..7d685b8b607 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.h
+++ b/libstdc++-v3/config/locale/generic/c_locale.h
@@ -1,6 +1,6 @@
// Wrapper for underlying C-language localization -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,7 +40,6 @@
#pragma GCC system_header
#include <clocale>
-#include <cstddef>
#define _GLIBCXX_NUM_CATEGORIES 0
@@ -57,8 +56,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const int __size __attribute__((__unused__)),
const char* __fmt, ...)
{
- char* __old = std::setlocale(LC_NUMERIC, NULL);
- char* __sav = NULL;
+ char* __old = std::setlocale(LC_NUMERIC, 0);
+ char* __sav = 0;
if (__builtin_strcmp(__old, "C"))
{
const size_t __len = __builtin_strlen(__old) + 1;
diff --git a/libstdc++-v3/config/locale/generic/codecvt_members.cc b/libstdc++-v3/config/locale/generic/codecvt_members.cc
index b68e18aaf54..655ce822666 100644
--- a/libstdc++-v3/config/locale/generic/codecvt_members.cc
+++ b/libstdc++-v3/config/locale/generic/codecvt_members.cc
@@ -1,6 +1,6 @@
// std::codecvt implementation details, generic version -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -186,7 +186,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
while (__from < __end && __max)
{
- size_t __conv = mbrtowc(NULL, __from, __end - __from, &__tmp_state);
+ size_t __conv = mbrtowc(0, __from, __end - __from, &__tmp_state);
if (__conv == static_cast<size_t>(-1))
{
// Invalid source character
diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc
index 225bc3c247c..040e228fd05 100644
--- a/libstdc++-v3/config/locale/generic/time_members.cc
+++ b/libstdc++-v3/config/locale/generic/time_members.cc
@@ -42,7 +42,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_put(char* __s, size_t __maxlen, const char* __format,
const tm* __tm) const throw()
{
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
@@ -127,7 +127,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
const tm* __tm) const throw()
{
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
diff --git a/libstdc++-v3/config/locale/generic/time_members.h b/libstdc++-v3/config/locale/generic/time_members.h
index d06faf409b1..394989edd11 100644
--- a/libstdc++-v3/config/locale/generic/time_members.h
+++ b/libstdc++-v3/config/locale/generic/time_members.h
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, generic version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -39,7 +40,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT>
__timepunct<_CharT>::__timepunct(size_t __refs)
- : facet(__refs), _M_data(NULL)
+ : facet(__refs), _M_data(0)
{
_M_name_timepunct = _S_get_c_name();
_M_initialize_timepunct();
@@ -56,7 +57,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT>
__timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
size_t __refs)
- : facet(__refs), _M_data(NULL)
+ : facet(__refs), _M_data(0)
{
if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
{
diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h
index 749a97ad6af..1809119d384 100644
--- a/libstdc++-v3/config/locale/gnu/c_locale.h
+++ b/libstdc++-v3/config/locale/gnu/c_locale.h
@@ -1,6 +1,6 @@
// Wrapper for underlying C-language localization -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,7 +40,6 @@
#pragma GCC system_header
#include <clocale>
-#include <cstddef>
#define _GLIBCXX_C_LOCALE_GNU 1
@@ -71,8 +70,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__c_locale __old = __gnu_cxx::__uselocale(__cloc);
#else
- char* __old = std::setlocale(LC_NUMERIC, NULL);
- char* __sav = NULL;
+ char* __old = std::setlocale(LC_NUMERIC, 0);
+ char* __sav = 0;
if (__builtin_strcmp(__old, "C"))
{
const size_t __len = __builtin_strlen(__old) + 1;
diff --git a/libstdc++-v3/config/locale/gnu/codecvt_members.cc b/libstdc++-v3/config/locale/gnu/codecvt_members.cc
index 1215e4816e4..7cc12edc191 100644
--- a/libstdc++-v3/config/locale/gnu/codecvt_members.cc
+++ b/libstdc++-v3/config/locale/gnu/codecvt_members.cc
@@ -1,6 +1,6 @@
// std::codecvt implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -268,7 +268,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// mbrtowc.
for (__from = __tmp_from;; __from += __conv)
{
- __conv = mbrtowc(NULL, __from, __end - __from,
+ __conv = mbrtowc(0, __from, __end - __from,
&__tmp_state);
if (__conv == static_cast<size_t>(-1)
|| __conv == static_cast<size_t>(-2))
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.cc b/libstdc++-v3/config/locale/gnu/messages_members.cc
index 1a42b38983a..94ebcb5fa7f 100644
--- a/libstdc++-v3/config/locale/gnu/messages_members.cc
+++ b/libstdc++-v3/config/locale/gnu/messages_members.cc
@@ -1,6 +1,6 @@
// std::messages implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -44,7 +44,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__uselocale(__old);
return string(__msg);
#else
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __len = strlen(__old) + 1;
char* __sav = new char[__len];
memcpy(__sav, __old, __len);
@@ -67,7 +67,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__uselocale(__old);
return _M_convert_from_char(__msg);
# else
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __len = strlen(__old) + 1;
char* __sav = new char[__len];
memcpy(__sav, __old, __len);
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h
index 8773562b0c4..b633efa54fd 100644
--- a/libstdc++-v3/config/locale/gnu/messages_members.h
+++ b/libstdc++-v3/config/locale/gnu/messages_members.h
@@ -1,6 +1,6 @@
// std::messages implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT>
messages<_CharT>::messages(__c_locale __cloc, const char* __s,
size_t __refs)
- : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
+ : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0)
{
if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
{
diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc
index 159eb97cad5..e5f90ca5b0f 100644
--- a/libstdc++-v3/config/locale/gnu/monetary_members.cc
+++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc
@@ -574,7 +574,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__c_locale __old = __uselocale(__cloc);
#else
// Switch to named locale so that mbsrtowcs will work.
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
@@ -757,7 +757,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__c_locale __old = __uselocale(__cloc);
#else
// Switch to named locale so that mbsrtowcs will work.
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
diff --git a/libstdc++-v3/config/locale/gnu/time_members.cc b/libstdc++-v3/config/locale/gnu/time_members.cc
index 43cab22964c..cf139716ee9 100644
--- a/libstdc++-v3/config/locale/gnu/time_members.cc
+++ b/libstdc++-v3/config/locale/gnu/time_members.cc
@@ -45,7 +45,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
_M_c_locale_timepunct);
#else
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
@@ -201,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
_M_c_locale_timepunct);
#else
- char* __old = setlocale(LC_ALL, NULL);
+ char* __old = setlocale(LC_ALL, 0);
const size_t __llen = strlen(__old) + 1;
char* __sav = new char[__llen];
memcpy(__sav, __old, __llen);
diff --git a/libstdc++-v3/config/locale/gnu/time_members.h b/libstdc++-v3/config/locale/gnu/time_members.h
index 90bc0cec329..5b81d9ce2fc 100644
--- a/libstdc++-v3/config/locale/gnu/time_members.h
+++ b/libstdc++-v3/config/locale/gnu/time_members.h
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -39,21 +40,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT>
__timepunct<_CharT>::__timepunct(size_t __refs)
- : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
+ : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
_M_name_timepunct(_S_get_c_name())
{ _M_initialize_timepunct(); }
template<typename _CharT>
__timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
- : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
+ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0),
_M_name_timepunct(_S_get_c_name())
{ _M_initialize_timepunct(); }
template<typename _CharT>
__timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
size_t __refs)
- : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
- _M_name_timepunct(NULL)
+ : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
+ _M_name_timepunct(0)
{
if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
{
diff --git a/libstdc++-v3/config/os/irix/irix5.2/ctype_base.h b/libstdc++-v3/config/os/bionic/ctype_base.h
index 0ba7eb1f09a..15f00636d3e 100644
--- a/libstdc++-v3/config/os/irix/irix5.2/ctype_base.h
+++ b/libstdc++-v3/config/os/bionic/ctype_base.h
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 1997-1999, 2001, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -25,28 +25,30 @@
//
// ISO C++ 14882: 22.1 Locales
//
-
-// Information as gleaned from /usr/include/ctype.h on irix 5.2
-
+
+// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1
+
+// Support for Solaris 2.5.1
+
_GLIBCXX_BEGIN_NAMESPACE(std)
/// @brief Base class for ctype.
struct ctype_base
{
// Non-standard typedefs.
- typedef unsigned int* __to_type;
+ typedef const int* __to_type;
// NB: Offsets into ctype<char>::_M_table force a particular size
// on the mask type. Because of this, we don't use an enum.
- typedef unsigned char mask;
+ typedef char mask;
static const mask upper = _U;
static const mask lower = _L;
static const mask alpha = _U | _L;
static const mask digit = _N;
- static const mask xdigit = _X;
+ static const mask xdigit = _X | _N;
static const mask space = _S;
- static const mask print = _U | _L | _N | _P | _B;
- static const mask graph = _U | _L | _N | _P;
+ static const mask print = _P | _U | _L | _N | _B;
+ static const mask graph = _P | _U | _L | _N;
static const mask cntrl = _C;
static const mask punct = _P;
static const mask alnum = _U | _L | _N;
diff --git a/libstdc++-v3/config/os/irix/irix5.2/ctype_inline.h b/libstdc++-v3/config/os/bionic/ctype_inline.h
index 1b105b2a6c8..2c88eb66d64 100644
--- a/libstdc++-v3/config/os/irix/irix5.2/ctype_inline.h
+++ b/libstdc++-v3/config/os/bionic/ctype_inline.h
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 2001, 2002, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,23 +30,23 @@
//
// ISO C++ 14882: 22.1 Locales
//
-
+
// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
// functions go in ctype.cc
-
+
_GLIBCXX_BEGIN_NAMESPACE(std)
bool
ctype<char>::
is(mask __m, char __c) const
- { return (_M_table)[static_cast<unsigned char>(__c)] & __m; }
+ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
while (__low < __high)
- *__vec++ = (_M_table)[static_cast<unsigned char>(*__low++)];
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
return __high;
}
@@ -54,7 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ctype<char>::
scan_is(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high && ! this->is(__m, *__low))
+ while (__low < __high && !this->is(__m, *__low))
++__low;
return __low;
}
@@ -63,7 +63,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ctype<char>::
scan_not(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high && this->is(__m, *__low))
+ while (__low < __high && this->is(__m, *__low) != 0)
++__low;
return __low;
}
diff --git a/libstdc++-v3/config/os/irix/irix5.2/ctype_noninline.h b/libstdc++-v3/config/os/bionic/ctype_noninline.h
index d70e398f4bf..55eecd8716e 100644
--- a/libstdc++-v3/config/os/irix/irix5.2/ctype_noninline.h
+++ b/libstdc++-v3/config/os/bionic/ctype_noninline.h
@@ -1,7 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,19 +30,19 @@
//
// ISO C++ 14882: 22.1 Locales
//
-
+
// Information as gleaned from /usr/include/ctype.h
const ctype_base::mask*
ctype<char>::classic_table() throw()
- { return __ctype + 1; }
+ { return _ctype_ + 1; }
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(!__table ? classic_table() : __table)
- {
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
memset(_M_widen, 0, sizeof(_M_widen));
_M_widen_ok = 0;
memset(_M_narrow, 0, sizeof(_M_narrow));
@@ -51,10 +50,10 @@
}
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
- : facet(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL), _M_tolower(NULL),
- _M_table(!__table ? classic_table() : __table)
- {
+ : facet(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(NULL), _M_tolower(NULL),
+ _M_table(__table ? __table : classic_table())
+ {
memset(_M_widen, 0, sizeof(_M_widen));
_M_widen_ok = 0;
memset(_M_narrow, 0, sizeof(_M_narrow));
@@ -63,14 +62,17 @@
char
ctype<char>::do_toupper(char __c) const
- { return _toupper(__c); }
+ {
+ int __x = __c;
+ return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
+ }
const char*
ctype<char>::do_toupper(char* __low, const char* __high) const
{
while (__low < __high)
{
- *__low = do_toupper(*__low);
+ *__low = this->do_toupper(*__low);
++__low;
}
return __high;
@@ -78,14 +80,17 @@
char
ctype<char>::do_tolower(char __c) const
- { return _tolower(__c); }
+ {
+ int __x = __c;
+ return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
+ }
- const char*
+ const char*
ctype<char>::do_tolower(char* __low, const char* __high) const
{
while (__low < __high)
{
- *__low = do_tolower(*__low);
+ *__low = this->do_tolower(*__low);
++__low;
}
return __high;
diff --git a/libstdc++-v3/config/os/irix/irix5.2/os_defines.h b/libstdc++-v3/config/os/bionic/os_defines.h
index 8769a752d1a..832592acd49 100644
--- a/libstdc++-v3/config/os/irix/irix5.2/os_defines.h
+++ b/libstdc++-v3/config/os/bionic/os_defines.h
@@ -1,6 +1,6 @@
-// Specific definitions for IRIX -*- C++ -*-
+// Specific definitions for Bionic -*- C++ -*-
-// Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,25 +22,15 @@
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
+/** @file os_defines.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
#ifndef _GLIBCXX_OS_DEFINES
#define _GLIBCXX_OS_DEFINES 1
// System-specific #define, typedefs, corrections, etc, go here. This
// file will come before all others.
-// We need large file support. There are two ways to turn it on: by
-// defining either _LARGEFILE64_SOURCE or _SGI_SOURCE. However, it
-// does not actually work to define only the former, as then
-// <sys/stat.h> is invalid: `st_blocks' is defined to be a macro, but
-// then used as a field name. So, we have to turn on _SGI_SOURCE.
-// That only works if _POSIX_SOURCE is turned off, so we have to
-// explicitly turn it off. (Some of the libio C files explicitly try
-// to turn it on.) _SGI_SOURCE is actually turned on implicitly via
-// the command-line.
-#undef _POSIX_SOURCE
-
-// GCC does not use thunks on IRIX.
-#define _G_USING_THUNKS 0
-
#endif
-
diff --git a/libstdc++-v3/config/os/djgpp/error_constants.h b/libstdc++-v3/config/os/djgpp/error_constants.h
new file mode 100644
index 00000000000..3efe540d302
--- /dev/null
+++ b/libstdc++-v3/config/os/djgpp/error_constants.h
@@ -0,0 +1,124 @@
+// Specific definitions for DJGPP platform -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file error_constants.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_ERROR_CONSTANTS
+#define _GLIBCXX_ERROR_CONSTANTS 1
+
+#include <bits/c++config.h>
+#include <cerrno>
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+// Most of the commented-out error codes are socket-related and could be
+// replaced by Winsock WSA-prefixed equivalents.
+ enum class errc
+ {
+// address_family_not_supported = EAFNOSUPPORT,
+// address_in_use = EADDRINUSE,
+// address_not_available = EADDRNOTAVAIL,
+// already_connected = EISCONN,
+ argument_list_too_long = E2BIG,
+ argument_out_of_domain = EDOM,
+ bad_address = EFAULT,
+ bad_file_descriptor = EBADF,
+// bad_message = EBADMSG,
+ broken_pipe = EPIPE,
+// connection_aborted = ECONNABORTED,
+// connection_already_in_progress = EALREADY,
+// connection_refused = ECONNREFUSED,
+// connection_reset = ECONNRESET,
+// cross_device_link = EXDEV,
+// destination_address_required = EDESTADDRREQ,
+ device_or_resource_busy = EBUSY,
+ directory_not_empty = ENOTEMPTY,
+ executable_format_error = ENOEXEC,
+ file_exists = EEXIST,
+ file_too_large = EFBIG,
+ filename_too_long = ENAMETOOLONG,
+ function_not_supported = ENOSYS,
+// host_unreachable = EHOSTUNREACH,
+// identifier_removed = EIDRM,
+ illegal_byte_sequence = EILSEQ,
+ inappropriate_io_control_operation = ENOTTY,
+ interrupted = EINTR,
+ invalid_argument = EINVAL,
+ invalid_seek = ESPIPE,
+ io_error = EIO,
+ is_a_directory = EISDIR,
+// message_size = EMSGSIZE,
+// network_down = ENETDOWN,
+// network_reset = ENETRESET,
+// network_unreachable = ENETUNREACH,
+// no_buffer_space = ENOBUFS,
+// no_child_process = ECHILD,
+// no_link = ENOLINK,
+ no_lock_available = ENOLCK,
+// no_message_available = ENODATA,
+// no_message = ENOMSG,
+// no_protocol_option = ENOPROTOOPT,
+// no_space_on_device = ENOSPC,
+// no_stream_resources = ENOSR,
+ no_such_device_or_address = ENXIO,
+ no_such_device = ENODEV,
+ no_such_file_or_directory = ENOENT,
+ no_such_process = ESRCH,
+ not_a_directory = ENOTDIR,
+// not_a_socket = ENOTSOCK,
+// not_a_stream = ENOSTR,
+// not_connected = ENOTCONN,
+ not_enough_memory = ENOMEM,
+// not_supported = ENOTSUP,
+// operation_canceled = ECANCELED,
+// operation_in_progress = EINPROGRESS,
+// operation_not_permitted = EPERM,
+// operation_not_supported = EOPNOTSUPP,
+// operation_would_block = EWOULDBLOCK,
+// owner_dead = EOWNERDEAD,
+ permission_denied = EACCES,
+// protocol_error = EPROTO,
+// protocol_not_supported = EPROTONOSUPPORT,
+ read_only_file_system = EROFS,
+ resource_deadlock_would_occur = EDEADLK,
+ resource_unavailable_try_again = EAGAIN,
+ result_out_of_range = ERANGE,
+// state_not_recoverable = ENOTRECOVERABLE,
+// stream_timeout = ETIME,
+// text_file_busy = ETXTBSY,
+// timed_out = ETIMEDOUT,
+ too_many_files_open_in_system = ENFILE,
+ too_many_files_open = EMFILE,
+ too_many_links = EMLINK
+ // too_many_symbolic_link_levels = ELOOP,
+ // value_too_large = EOVERFLOW,
+ // wrong_protocol_type = EPROTOTYPE
+ };
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index dc77c0d7c1f..0032823bcfd 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -623,6 +623,10 @@ GLIBCXX_LDBL_COMPAT_FALSE
GLIBCXX_LDBL_COMPAT_TRUE
ENABLE_VISIBILITY_FALSE
ENABLE_VISIBILITY_TRUE
+ENABLE_SYMVERS_SOL2_FALSE
+ENABLE_SYMVERS_SOL2_TRUE
+ENABLE_SYMVERS_SUN_FALSE
+ENABLE_SYMVERS_SUN_TRUE
ENABLE_SYMVERS_DARWIN_FALSE
ENABLE_SYMVERS_DARWIN_TRUE
ENABLE_SYMVERS_GNU_NAMESPACE_FALSE
@@ -633,6 +637,7 @@ ENABLE_SYMVERS_FALSE
ENABLE_SYMVERS_TRUE
port_specific_symbol_files
SYMVER_FILE
+CXXFILT
LTLIBICONV
LIBICONV
OPT_LDFLAGS
@@ -852,7 +857,8 @@ CXX
CXXFLAGS
CCC
CPP
-CXXCPP'
+CXXCPP
+CXXFILT'
# Initialize some variables set by options.
@@ -1553,6 +1559,8 @@ Some influential environment variables:
CXXFLAGS C++ compiler flags
CPP C preprocessor
CXXCPP C++ preprocessor
+ CXXFILT Location of GNU c++filt. Defaults to the first GNU version of
+ `c++filt', `gc++filt' on PATH.
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -2193,60 +2201,6 @@ fi
} # ac_fn_cxx_check_header_mongrel
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_type
-
# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
# --------------------------------------------
# Tries to find the compile-time value of EXPR in a program that includes
@@ -2424,6 +2378,60 @@ rm -f conftest.val
return $ac_retval
} # ac_fn_c_compute_int
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
@@ -2789,7 +2797,7 @@ ac_config_headers="$ac_config_headers config.h"
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:14:0
+libtool_VERSION=6:15:0
# Find the rest of the source tree framework.
@@ -3018,6 +3026,7 @@ fi
# foreign: we don't follow the normal rules for GNU packages (no COPYING
# file in the top srcdir, etc, etc), so stop complaining.
# no-dependencies: turns off auto dependency generation (just for now)
+# no-dist: we don't want 'dist' and related rules.
# -Wall: turns on all automake warnings...
# -Wno-portability: ...except this one, since GNU make is now required.
am__api_version='1.11'
@@ -5185,7 +5194,7 @@ fi
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- # Check for uClibc since Linux platforms use different configuration
+ # Check for C library flavor since Linux platforms use different configuration
# directories depending on the C library in use.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5205,6 +5214,24 @@ fi
rm -f conftest*
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdio.h>
+ #if __BIONIC__
+ _using_bionic
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "_using_bionic" >/dev/null 2>&1; then :
+ bionic=yes
+else
+ bionic=no
+fi
+rm -f conftest*
+
+
# Find platform-specific directories containing configuration info.
# Also possibly modify flags used elsewhere, as needed by the platform.
@@ -11441,7 +11468,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11444 "configure"
+#line 11471 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11547,7 +11574,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11550 "configure"
+#line 11577 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14887,7 +14914,7 @@ fi
#
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
-#line 14890 "configure"
+#line 14917 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -15255,7 +15282,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 15258 "configure"
+#line 15285 "configure"
int main()
{
typedef bool atomic_type;
@@ -15292,7 +15319,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15295 "configure"
+#line 15322 "configure"
int main()
{
typedef short atomic_type;
@@ -15329,7 +15356,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15332 "configure"
+#line 15359 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -15367,7 +15394,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15370 "configure"
+#line 15397 "configure"
int main()
{
typedef long long atomic_type;
@@ -15443,7 +15470,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 15446 "configure"
+#line 15473 "configure"
int main()
{
_Decimal32 d1;
@@ -15627,7 +15654,7 @@ fi
/* end confdefs.h. */
#include <features.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
_GLIBCXX_ok
#endif
@@ -15641,49 +15668,6 @@ fi
rm -f conftest*
- if test $enable_clocale = auto; then
- # Test for bugs early in glibc-2.2.x series
- if test "$cross_compiling" = yes; then :
- enable_clocale_flag=generic
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #define _GNU_SOURCE 1
- #include <locale.h>
- #include <string.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- extern __typeof(newlocale) __newlocale;
- extern __typeof(duplocale) __duplocale;
- extern __typeof(strcoll_l) __strcoll_l;
- #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
- const char __two[] = "Äuglein";
- int i;
- int j;
- __locale_t loc;
- __locale_t loc_dup;
- loc = __newlocale(1 << LC_ALL, "de_DE", 0);
- loc_dup = __duplocale(loc);
- i = __strcoll_l(__one, __two, loc);
- j = __strcoll_l(__one, __two, loc_dup);
- return 0;
- }
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- enable_clocale_flag=gnu
-else
- enable_clocale_flag=generic
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
-
# Set it to scream when it hurts.
ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Wimplicit-function-declaration -Werror"
@@ -18692,45 +18676,73 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# For common values of EOF, SEEK_CUR, SEEK_END.
+# For the EOF, SEEK_CUR, and SEEK_END integer constants.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOF == -1, SEEK_CUR == 1, SEEK_END == 2" >&5
-$as_echo_n "checking for EOF == -1, SEEK_CUR == 1, SEEK_END == 2... " >&6; }
- if test "${glibcxx_cv_stdio_macros+set}" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the value of EOF" >&5
+$as_echo_n "checking for the value of EOF... " >&6; }
+if test "${glibcxx_cv_stdio_eof+set}" = set; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-#if ((EOF != -1) || (SEEK_CUR != 1) || (SEEK_END != 2))
- unusual values...
- #endif
+ if ac_fn_c_compute_int "$LINENO" "EOF" "glibcxx_cv_stdio_eof" "#include <stdio.h>"; then :
- ;
- return 0;
-}
+else
+ as_fn_error "computing EOF failed" "$LINENO" 5
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_stdio_eof" >&5
+$as_echo "$glibcxx_cv_stdio_eof" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define _GLIBCXX_STDIO_EOF $glibcxx_cv_stdio_eof
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- glibcxx_cv_stdio_macros=yes
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the value of SEEK_CUR" >&5
+$as_echo_n "checking for the value of SEEK_CUR... " >&6; }
+if test "${glibcxx_cv_stdio_seek_cur+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if ac_fn_c_compute_int "$LINENO" "SEEK_CUR" "glibcxx_cv_stdio_seek_cur" "#include <stdio.h>"; then :
+
else
- glibcxx_cv_stdio_macros=no
+ as_fn_error "computing SEEK_CUR failed" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_stdio_seek_cur" >&5
+$as_echo "$glibcxx_cv_stdio_seek_cur" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_stdio_macros" >&5
-$as_echo "$glibcxx_cv_stdio_macros" >&6; }
- if test x"$glibcxx_cv_stdio_macros" = x"yes"; then
+cat >>confdefs.h <<_ACEOF
+#define _GLIBCXX_STDIO_SEEK_CUR $glibcxx_cv_stdio_seek_cur
+_ACEOF
-$as_echo "#define _GLIBCXX_STDIO_MACROS 1" >>confdefs.h
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the value of SEEK_END" >&5
+$as_echo_n "checking for the value of SEEK_END... " >&6; }
+if test "${glibcxx_cv_stdio_seek_end+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if ac_fn_c_compute_int "$LINENO" "SEEK_END" "glibcxx_cv_stdio_seek_end" "#include <stdio.h>"; then :
+
+else
+ as_fn_error "computing SEEK_END failed" "$LINENO" 5
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_stdio_seek_end" >&5
+$as_echo "$glibcxx_cv_stdio_seek_end" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define _GLIBCXX_STDIO_SEEK_END $glibcxx_cv_stdio_seek_end
+_ACEOF
@@ -25562,7 +25574,7 @@ rm -f core conftest.err conftest.$ac_objext \
CFLAGS="$chktls_save_CFLAGS"
if test "X$thread_CFLAGS" != Xfailed; then
CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "cannot run test program while cross compiling
@@ -25572,7 +25584,7 @@ else
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
@@ -25584,11 +25596,11 @@ main ()
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
@@ -44500,7 +44512,7 @@ rm -f core conftest.err conftest.$ac_objext \
CFLAGS="$chktls_save_CFLAGS"
if test "X$thread_CFLAGS" != Xfailed; then
CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "cannot run test program while cross compiling
@@ -44510,7 +44522,7 @@ else
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
@@ -44522,11 +44534,11 @@ main ()
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
@@ -50585,7 +50597,7 @@ rm -f core conftest.err conftest.$ac_objext \
CFLAGS="$chktls_save_CFLAGS"
if test "X$thread_CFLAGS" != Xfailed; then
CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
- if test "$cross_compiling" = yes; then :
+ if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "cannot run test program while cross compiling
@@ -50595,7 +50607,7 @@ else
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
@@ -50607,11 +50619,11 @@ main ()
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
@@ -57091,7 +57103,7 @@ $as_echo "$ac_ld_relro" >&6; }
;;
*-solaris*)
case "$target" in
- *-solaris2.7 | *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
+ *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
# If we're not using GNU ld, then there's no point in even trying these
# tests. Check for that first. We should have already tested for gld
@@ -58041,8 +58053,7 @@ _ACEOF
$as_echo_n "checking for type equivalent to int8_t... " >&6; }
case "$ac_cv_sizeof_char" in
1) acx_cv_type_int8_t=char ;;
- *) { as_fn_set_status please report a bug
-as_fn_error "no 8-bit type" "$LINENO" 5; }
+ *) as_fn_error "no 8-bit type, please report a bug" "$LINENO" 5
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int8_t" >&5
$as_echo "$acx_cv_type_int8_t" >&6; }
@@ -58052,8 +58063,7 @@ $as_echo_n "checking for type equivalent to int16_t... " >&6; }
case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in
2:*) acx_cv_type_int16_t=int ;;
*:2) acx_cv_type_int16_t=short ;;
- *) { as_fn_set_status please report a bug
-as_fn_error "no 16-bit type" "$LINENO" 5; }
+ *) as_fn_error "no 16-bit type, please report a bug" "$LINENO" 5
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int16_t" >&5
$as_echo "$acx_cv_type_int16_t" >&6; }
@@ -58063,8 +58073,7 @@ $as_echo_n "checking for type equivalent to int32_t... " >&6; }
case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in
4:*) acx_cv_type_int32_t=int ;;
*:4) acx_cv_type_int32_t=long ;;
- *) { as_fn_set_status please report a bug
-as_fn_error "no 32-bit type" "$LINENO" 5; }
+ *) as_fn_error "no 32-bit type, please report a bug" "$LINENO" 5
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int32_t" >&5
$as_echo "$acx_cv_type_int32_t" >&6; }
@@ -58091,8 +58100,7 @@ $as_echo_n "checking for type equivalent to intptr_t... " >&6; }
2) acx_cv_type_intptr_t=int16_t ;;
4) acx_cv_type_intptr_t=int32_t ;;
8) acx_cv_type_intptr_t=int64_t ;;
- *) { as_fn_set_status please report a bug
-as_fn_error "no equivalent for intptr_t" "$LINENO" 5; }
+ *) as_fn_error "no equivalent for intptr_t, please report a bug" "$LINENO" 5
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_intptr_t" >&5
$as_echo "$acx_cv_type_intptr_t" >&6; }
@@ -58106,12 +58114,53 @@ ac_config_commands="$ac_config_commands include/gstdint.h"
# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU c++filt" >&5
+$as_echo_n "checking for GNU c++filt... " >&6; }
+if test "${ac_cv_path_CXXFILT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$CXXFILT"; then
+ ac_path_CXXFILT_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in c++filt gc++filt; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_CXXFILT="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_CXXFILT" && $as_test_x "$ac_path_CXXFILT"; } || continue
+# Check for GNU $ac_path_CXXFILT
+case `"$ac_path_CXXFILT" --version 2>&1` in
+*GNU*)
+ ac_cv_path_CXXFILT=$ac_path_CXXFILT && ac_path_CXXFILT_found=:;;
+esac
+
+ $ac_path_CXXFILT_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_CXXFILT"; then
+ :
+ fi
+else
+ ac_cv_path_CXXFILT=$CXXFILT
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_CXXFILT" >&5
+$as_echo "$ac_cv_path_CXXFILT" >&6; }
+ CXXFILT=$ac_cv_path_CXXFILT
+
+
# Check whether --enable-symvers was given.
if test "${enable_symvers+set}" = set; then :
enableval=$enable_symvers;
case "$enableval" in
- yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export) ;;
+ yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun) ;;
*) as_fn_error "Unknown argument to enable/disable symvers" "$LINENO" 5 ;;
esac
@@ -58124,6 +58173,9 @@ fi
# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
+# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
+# with extern "C++" in version scripts.
+
# Turn a 'yes' into a suitable default.
if test x$enable_symvers = xyes ; then
@@ -58141,6 +58193,23 @@ if test x$enable_symvers = xyes ; then
case ${target_os} in
darwin*)
enable_symvers=darwin ;;
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[5-9]* | solaris2.1[0-9]*)
+ # make_sunver.pl needs GNU c++filt to support extern "C++" in
+ # version scripts, so disable symbol versioning if none can be
+ # found.
+ if test -z "$ac_cv_path_CXXFILT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You have requested Sun symbol versioning, but" >&5
+$as_echo "$as_me: WARNING: === You have requested Sun symbol versioning, but" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === no GNU c++filt could be found." >&5
+$as_echo "$as_me: WARNING: === no GNU c++filt could be found." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ else
+ enable_symvers=sun
+ fi
+ ;;
*)
enable_symvers=no ;;
esac
@@ -58153,8 +58222,29 @@ if test x$enable_symvers = xdarwin-export ; then
enable_symvers=darwin
fi
+# Check if 'sun' was requested on non-Solaris 2 platforms.
+if test x$enable_symvers = xsun ; then
+ case ${target_os} in
+ solaris2*)
+ # All fine.
+ ;;
+ *)
+ # Unlikely to work.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You have requested Sun symbol versioning, but" >&5
+$as_echo "$as_me: WARNING: === You have requested Sun symbol versioning, but" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === you are not targetting Solaris 2." >&5
+$as_echo "$as_me: WARNING: === you are not targetting Solaris 2." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ ;;
+ esac
+fi
+
# Check to see if 'gnu' can win.
-if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then
+if test $enable_symvers = gnu ||
+ test $enable_symvers = gnu-versioned-namespace ||
+ test $enable_symvers = sun; then
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared libgcc" >&5
$as_echo_n "checking for shared libgcc... " >&6; }
@@ -58231,6 +58321,8 @@ $as_echo "$as_me: WARNING: === you are not building a shared libgcc_s." >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
enable_symvers=no
+ elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
+ : All interesting versions of Sun ld support sun style symbol versioning.
elif test $with_gnu_ld != yes ; then
# just fail for now
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You have requested GNU symbol versioning, but" >&5
@@ -58281,6 +58373,12 @@ $as_echo "#define _GLIBCXX_SYMVER_GNU_NAMESPACE 1" >>confdefs.h
$as_echo "#define _GLIBCXX_SYMVER_DARWIN 1" >>confdefs.h
;;
+ sun)
+ SYMVER_FILE=config/abi/pre/gnu.ver
+
+$as_echo "#define _GLIBCXX_SYMVER_SUN 1" >>confdefs.h
+
+ ;;
esac
if test x$enable_symvers != xno ; then
@@ -58327,9 +58425,26 @@ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: versioning on shared library symbols is $enable_symvers" >&5
$as_echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;}
+if test $enable_symvers != no ; then
+ case ${target_os} in
+ # The Solaris 2 runtime linker doesn't support the GNU extension of
+ # binding the same symbol to different versions
+ solaris2*)
+ symvers_renaming=no ;;
+ # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
+ *)
+
+$as_echo "#define HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1" >>confdefs.h
+
+ symvers_renaming=yes ;;
+ esac
+fi
+
+
# Now, set up compatibility support, if any.
# In addition, need this to deal with std::size_t mangling in
# src/compatibility.cc. In a perfect world, could use
@@ -58935,6 +59050,24 @@ else
fi
+ if test $enable_symvers = sun; then
+ ENABLE_SYMVERS_SUN_TRUE=
+ ENABLE_SYMVERS_SUN_FALSE='#'
+else
+ ENABLE_SYMVERS_SUN_TRUE='#'
+ ENABLE_SYMVERS_SUN_FALSE=
+fi
+
+
+ if test $symvers_renaming = no; then
+ ENABLE_SYMVERS_SOL2_TRUE=
+ ENABLE_SYMVERS_SOL2_FALSE='#'
+else
+ ENABLE_SYMVERS_SOL2_TRUE='#'
+ ENABLE_SYMVERS_SOL2_FALSE=
+fi
+
+
if test $enable_visibility = yes; then
ENABLE_VISIBILITY_TRUE=
ENABLE_VISIBILITY_FALSE='#'
@@ -59348,6 +59481,14 @@ if test -z "${ENABLE_SYMVERS_DARWIN_TRUE}" && test -z "${ENABLE_SYMVERS_DARWIN_F
as_fn_error "conditional \"ENABLE_SYMVERS_DARWIN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_SYMVERS_SUN_TRUE}" && test -z "${ENABLE_SYMVERS_SUN_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_SYMVERS_SUN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_SYMVERS_SOL2_TRUE}" && test -z "${ENABLE_SYMVERS_SOL2_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_SYMVERS_SOL2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_VISIBILITY_TRUE}" && test -z "${ENABLE_VISIBILITY_FALSE}"; then
as_fn_error "conditional \"ENABLE_VISIBILITY\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 9fe9c33964c..f3dfe0142d0 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -12,7 +12,7 @@ AC_CONFIG_HEADER(config.h)
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:14:0
+libtool_VERSION=6:15:0
AC_SUBST(libtool_VERSION)
# Find the rest of the source tree framework.
@@ -72,9 +72,10 @@ fi
# foreign: we don't follow the normal rules for GNU packages (no COPYING
# file in the top srcdir, etc, etc), so stop complaining.
# no-dependencies: turns off auto dependency generation (just for now)
+# no-dist: we don't want 'dist' and related rules.
# -Wall: turns on all automake warnings...
# -Wno-portability: ...except this one, since GNU make is now required.
-AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dependencies -Wall -Wno-portability -Wno-override])
+AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dependencies no-dist -Wall -Wno-portability -Wno-override])
AH_TEMPLATE(PACKAGE, [Name of package])
AH_TEMPLATE(VERSION, [Version number of package])
@@ -152,8 +153,8 @@ GLIBCXX_CHECK_WRITEV
# For C99 support to TR1.
GLIBCXX_CHECK_C99_TR1
-# For common values of EOF, SEEK_CUR, SEEK_END.
-GLIBCXX_CHECK_STDIO_MACROS
+# For the EOF, SEEK_CUR, and SEEK_END integer constants.
+GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS
# For gettimeofday support.
GLIBCXX_CHECK_GETTIMEOFDAY
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
index 02292b016d0..06874d5cf0a 100644
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -231,6 +231,7 @@ case "${host_os}" in
;;
*djgpp*) # leading * picks up "msdosdjgpp"
os_include_dir="os/djgpp"
+ error_constants_dir="os/djgpp"
;;
freebsd*)
os_include_dir="os/bsd/freebsd"
@@ -238,6 +239,8 @@ case "${host_os}" in
gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
if [ "$uclibc" = "yes" ]; then
os_include_dir="os/uclibc"
+ elif [ "$bionic" = "yes" ]; then
+ os_include_dir="os/bionic"
else
os_include_dir="os/gnu-linux"
fi
@@ -245,12 +248,6 @@ case "${host_os}" in
hpux*)
os_include_dir="os/hpux"
;;
- irix[1-6] | irix[1-5].* | irix6.[0-4]*)
- # This is known to work on at least IRIX 5.2 and 6.3.
- os_include_dir="os/irix/irix5.2"
- atomicity_dir=os/irix
- atomic_word_dir=os/irix
- ;;
irix6.5*)
os_include_dir="os/irix/irix6.5"
atomicity_dir=os/irix
@@ -274,7 +271,7 @@ case "${host_os}" in
echo "Please specify the full version of Solaris, ie. solaris2.9 " 1>&2
exit 1
;;
- solaris2.[789] | solaris2.1[0-9])
+ solaris2.[89] | solaris2.1[0-9])
os_include_dir="os/solaris/solaris2.7"
;;
tpf)
@@ -323,7 +320,13 @@ case "${host}" in
;;
esac
;;
+ i?86-*-solaris2*)
+ abi_baseline_pair=i386-solaris2
+ ;;
powerpc*-*-darwin*)
port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
;;
+ sparc*-*-solaris2*)
+ abi_baseline_pair=sparc-solaris2
+ ;;
esac
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
index fdaa9d6d0dd..3a266963819 100644
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -200,7 +200,7 @@ case "${host}" in
;;
*-solaris*)
case "$target" in
- *-solaris2.7 | *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
+ *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
GLIBCXX_CHECK_LINKER_FEATURES
AC_DEFINE(HAVE_MBSTATE_T)
AC_DEFINE(HAVE_FINITE)
diff --git a/libstdc++-v3/doc/Makefile.am b/libstdc++-v3/doc/Makefile.am
index 4f79f9b187f..06ce75a3095 100644
--- a/libstdc++-v3/doc/Makefile.am
+++ b/libstdc++-v3/doc/Makefile.am
@@ -25,26 +25,46 @@ include $(top_srcdir)/fragment.am
# Documentation Overview
#
# There are two main source materials for libstdc++ documentation.
-# The first is the doxygen markup in libstdc++ sources. And the second
-# is the docbook markup in doc/xml/. A third and more obscure option
-# deals with charting performance tests.
+# The first is the doxygen markup in libstdc++ sources, which is a
+# reference to the API. And the second is the docbook markup in
+# doc/xml/.
+#
+# A third and more obscure option deals with charting
+# performance tests, and should be considered experimental.
+
+# Default rules.
+#
+# Point to best sub-rule for the requested documentation target,
+# create, and then copy into toplevel directory with standardized names
+# and layouts.
+
+# HTML
+doc-html: doc-html-docbook doc-html-doxygen
+ cp -R ${docbook_outdir}/html ./libstdc++-manual.html
+ cp -R ${doxygen_outdir}/html ./libstdc++-api.html
-# Default, points to current best sub-rule that is the best conversion.
# MAN
doc-man: doc-man-doxygen
+ cp -R ${doxygen_outdir}/man ./libstdc++-api.man
# PDF
-doc-pdf: doc-pdf-docbook
+doc-pdf: doc-pdf-docbook doc-pdf-doxygen
+ cp ${docbook_outdir}/pdf/libstdc++-manual.pdf .
+ cp ${doxygen_outdir}/pdf/libstdc++-api.pdf .
-# HTML
-doc-html: doc-html-docbook
+# TEXINFO
+doc-texinfo: doc-texinfo-docbook
+
+# XML
+doc-xml: doc-xml-single-docbook doc-xml-single-doxygen
+ cp ${manual_xml} .
+ cp ${api_xml} .
# Doxygen configuration
# Assumes doxygen, graphviz (with dot), pdflatex installed
doxygen_script=${top_srcdir}/scripts/run_doxygen
doxygen_outdir = ${glibcxx_builddir}/doc/doxygen
-doxygen_pdf = ${doxygen_outdir}/latex/refman.pdf
doc-html-doxygen:
-(srcdir=`cd ${top_srcdir}; ${PWD_COMMAND}`; \
@@ -64,10 +84,11 @@ doc-xml-doxygen:
${SHELL} ${doxygen_script} \
--host_alias=${host_alias} --mode=xml $${srcdir} $${builddir} NO)
-doc-xml-single-doxygen:
+api_xml = ${doxygen_outdir}/xml/libstdc++-api-single.xml
+doc-xml-single-doxygen: doc-xml-doxygen
@echo "Generating doxygen xml single file..."
$(XSLTPROC) ${doxygen_outdir}/xml/combine.xslt \
- ${doxygen_outdir}/xml/index.xml > ${doxygen_outdir}/xml/api-spine.xml;
+ ${doxygen_outdir}/xml/index.xml > ${api_xml};
doc-latex-doxygen:
-(srcdir=`cd ${top_srcdir}; ${PWD_COMMAND}`; \
@@ -75,12 +96,23 @@ doc-latex-doxygen:
${SHELL} ${doxygen_script} \
--host_alias=${host_alias} --mode=latex $${srcdir} $${builddir} NO)
-# Chance of loooooonnggg creation time on this rule.
-doc-pdf-doxygen: stamp-latex-doxygen
+# Chance of loooooonnggg creation time on this rule. Iff this fails,
+# look at refman.log and see if TeX's memory is exhausted. Symptoms
+# include asking a wizard to enlarge capacity. If this is the case,
+# find texmf.cnf and add a zero for pool_size, string_vacancies,
+# max_strings, and pool_free values.
+doxygen_pdf = ${doxygen_outdir}/latex/refman.pdf
+api_pdf = ${doxygen_outdir}/pdf/libstdc++-api.pdf
+
+${doxygen_outdir}/pdf:
+ mkdir -p ${doxygen_outdir}/pdf
+
+doc-pdf-doxygen: stamp-latex-doxygen ${doxygen_outdir}/pdf
-(cd ${doxygen_outdir}/latex && $(MAKE) -i pdf;)
echo "Generating doxygen pdf file...";
if [ -f ${doxygen_pdf} ]; then \
- echo "... ${doxygen_pdf}"; \
+ mv ${doxygen_pdf} ${api_pdf} ; \
+ echo ":: PDF file is ${api_pdf}"; \
else \
echo "... error"; \
exit 12; \
@@ -172,6 +204,7 @@ xml_sources_manual = \
xml_sources_extra = \
${xml_dir}/gnu/fdl-1.2.xml \
+ ${xml_dir}/gnu/fdl-1.3.xml \
${xml_dir}/gnu/gpl-2.0.xml \
${xml_dir}/gnu/gpl-3.0.xml
@@ -187,20 +220,23 @@ xml_noinst = \
XSLTPROC = xsltproc
XSLTPROC_FLAGS = --nonet --xinclude
-XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-stylesheets
+XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-ns-stylesheets
XSL_FO_STYLE = $(XSL_STYLE_DIR)/fo/docbook.xsl
XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml/chunk.xsl
#XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml/onechunk.xsl
XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml/docbook.xsl
+${docbook_outdir}/fo:
+ mkdir -p ${docbook_outdir}/fo
+
${docbook_outdir}/html:
mkdir -p ${docbook_outdir}/html
${docbook_outdir}/pdf:
mkdir -p ${docbook_outdir}/pdf
-${docbook_outdir}/fo:
- mkdir -p ${docbook_outdir}/fo
+${docbook_outdir}/texinfo:
+ mkdir -p ${docbook_outdir}/texinfo
${docbook_outdir}/xml:
mkdir -p ${docbook_outdir}/xml
@@ -209,18 +245,22 @@ ${docbook_outdir}/xml:
XMLLINT = xmllint
#LINT_FLAGS = --debug --nonet --xinclude --nsclean --postvalid --nowarning
#LINT_FLAGS = --noblanks --noout --xinclude --postvalid --noent
-LINT_FLAGS = --postvalid --debug --xinclude --noent --noblanks --nonet --noout
-DTD_FLAGS = --dtdvalid http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
-XMLLINT_FLAGS = $(LINT_FLAGS) $(DTD_FLAGS)
+LINT_FLAGS = --debug --xinclude --noent --noblanks --nonet --noout
+#SCHEMA_FLAGS = --relaxng /usr/share/xml/docbook5/schema/rng/5.0/docbookxi.rng
+SCHEMA_FLAGS = --dtdvalid /usr/share/xml/docbook5/schema/dtd/5.0/docbook.dtd
+XMLLINT_FLAGS = $(LINT_FLAGS) $(SCHEMA_FLAGS)
doc-xml-validate-docbook: $(xml_sources)
@echo "Generating XML validation log..."
$(XMLLINT) $(XMLLINT_FLAGS) ${top_srcdir}/doc/xml/spine.xml
+# XML, all one page
+# Some info on canonicalization
+# http://www.mail-archive.com/help-texinfo@gnu.org/msg00864.html
+manual_xml = ${docbook_outdir}/xml/libstdc++-manual-single.xml
doc-xml-single-docbook: $(xml_sources) ${docbook_outdir}/xml
@echo "Generating XML single..."
- $(XMLLINT) --xinclude --noent --noblanks \
- -o ${docbook_outdir}/xml/spine-single.xml \
- ${top_srcdir}/doc/xml/spine.xml
+ $(XMLLINT) --xinclude --noent --noblanks --nocdata --nsclean --c14n \
+ ${top_srcdir}/doc/xml/manual/spine.xml > ${manual_xml}
# HTML, index plus chapters
doc-html-docbook: $(xml_sources) ${docbook_outdir}/html
@@ -229,9 +269,10 @@ doc-html-docbook: $(xml_sources) ${docbook_outdir}/html
$(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
# HTML, all one page
+manual_html = ${docbook_outdir}/html/libstdc++-manual-single.html
doc-html-single-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html single file..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
+ $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${manual_html} \
$(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
# FO
@@ -240,52 +281,24 @@ doc-fo-docbook: $(xml_sources) ${docbook_outdir}/fo
$(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
$(XSL_FO_STYLE) ${top_srcdir}/doc/xml/spine.xml
-# PDF 1
-# fop
-FOP = fop
-FOP_FLAGS = -d -r
-doc-pdf-fop-xml-docbook: $(xml_sources) ${glibcxx_builddir}/doc/pdf
- @echo "Generating pdf fop files from xml..."
- $(FOP) $(FOP_FLAGS) -xml ${top_srcdir}/doc/xml/spine.xml \
- -xsl $(XSL_FO_STYLE) -pdf ${docbook_outdir}/pdf/spine.pdf
-
-doc-pdf-fop-fo-docbook: $(xml_sources) ${glibcxx_builddir}/doc/pdf doc-fo
- @echo "Generating pdf fop files from fo..."
- $(FOP) $(FOP_FLAGS) -fo ${docbook_outdir}/fo/spine.fo \
- -pdf ${docbook_outdir}/pdf/spine.pdf
-
-# PDF 2
-# xmlto
-XML2PDF = xmlto
-XML2PDF_FLAGS = -v pdf --skip-validation -o pdf
-doc-pdf-xmlto-docbook: $(xml_sources) ${docbook_outdir}/pdf
- @echo "Generating pdf xmlto files..."
- $(XML2PDF) $(XML2PDF_FLAGS) ${top_srcdir}/doc/xml/spine.xml
-
-# PDF 3
-# xmlroff
-XMLROFF = xmlroff
-XMLROFF_FLAGS = --format=pdf --backend=cairo --warn=1 --debug=1 --continue
-doc-pdf-xmlroff-docbook: $(xml_sources) doc-fo
- @echo "Generating pdf xmlroff files..."
- $(XMLROFF) $(XMLROFF_FLAGS) ${docbook_outdir}/fo/spine.fo
-
-# PDF 4
-# prince
-PRINCE = prince
-PRINCE_FLAGS = --log prince.log -o pdf/spine.pdf
-doc-pdf-prince-docbook: $(xml_sources) ${docbook_outdir}/pdf
- @echo "Generating pdf prince files..."
- $(PRINCE) $(PRINCE_FLAGS) ${top_srcdir}/xml/spine.xml
-
-# PDF 5
-# dblatex
-DBLATEX_FLAGS = --dump --verbose --pdf -o ${docbook_outdir}/pdf/manual.pdf
+# PDF, via dblatex
+manual_pdf = ${docbook_outdir}/pdf/libstdc++-manual.pdf
+DBLATEX_FLAGS = --dump --verbose --pdf -o ${manual_pdf}
+doc-pdf-docbook: doc-pdf-dblatex-docbook
+
doc-pdf-dblatex-docbook: $(xml_sources) ${docbook_outdir}/pdf
@echo "Generating pdf dblatex files..."
dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml
-doc-pdf-docbook: doc-pdf-dblatex-docbook
+# Texinfo, via docbook2X
+DB2TEXI_FLAGS = \
+ --encoding=utf-8//TRANSLIT \
+ --string-param output-file="libstdc++-manual" \
+ --string-param directory-category="GNU C++ Library" \
+ --string-param explicit-node-names=true
+doc-texinfo-docbook: doc-xml-single-docbook ${docbook_outdir}/texinfo
+ @echo "Generating texinfo files..."
+ db2x_docbook2texi $(DB2TEXI_FLAGS) ${manual_xml}
# Performance doc and graph configuration.
@@ -307,4 +320,4 @@ CLEANFILES = *.log
# To remove directories.
clean-local:
- rm -rf man html pdf fo xml doxygen docbook stamp*
+ rm -rf man html pdf fo xml doxygen docbook stamp* ./libstdc++-* db2t*
diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in
index 408961e3f21..005e1b8927b 100644
--- a/libstdc++-v3/doc/Makefile.in
+++ b/libstdc++-v3/doc/Makefile.in
@@ -34,8 +34,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -54,6 +54,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -63,8 +64,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -101,6 +100,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -267,7 +267,15 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
# Assumes doxygen, graphviz (with dot), pdflatex installed
doxygen_script = ${top_srcdir}/scripts/run_doxygen
doxygen_outdir = ${glibcxx_builddir}/doc/doxygen
+api_xml = ${doxygen_outdir}/xml/libstdc++-api-single.xml
+
+# Chance of loooooonnggg creation time on this rule. Iff this fails,
+# look at refman.log and see if TeX's memory is exhausted. Symptoms
+# include asking a wizard to enlarge capacity. If this is the case,
+# find texmf.cnf and add a zero for pool_size, string_vacancies,
+# max_strings, and pool_free values.
doxygen_pdf = ${doxygen_outdir}/latex/refman.pdf
+api_pdf = ${doxygen_outdir}/pdf/libstdc++-api.pdf
# Docbook configuration.
# Assumes
@@ -335,6 +343,7 @@ xml_sources_manual = \
xml_sources_extra = \
${xml_dir}/gnu/fdl-1.2.xml \
+ ${xml_dir}/gnu/fdl-1.3.xml \
${xml_dir}/gnu/gpl-2.0.xml \
${xml_dir}/gnu/gpl-3.0.xml
@@ -350,7 +359,7 @@ xml_noinst = \
XSLTPROC = xsltproc
XSLTPROC_FLAGS = --nonet --xinclude
-XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-stylesheets
+XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-ns-stylesheets
XSL_FO_STYLE = $(XSL_STYLE_DIR)/fo/docbook.xsl
XSL_HTML_STYLE = $(XSL_STYLE_DIR)/xhtml/chunk.xsl
#XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml/onechunk.xsl
@@ -360,33 +369,30 @@ XSL_HTML_SINGLE_STYLE = $(XSL_STYLE_DIR)/xhtml/docbook.xsl
XMLLINT = xmllint
#LINT_FLAGS = --debug --nonet --xinclude --nsclean --postvalid --nowarning
#LINT_FLAGS = --noblanks --noout --xinclude --postvalid --noent
-LINT_FLAGS = --postvalid --debug --xinclude --noent --noblanks --nonet --noout
-DTD_FLAGS = --dtdvalid http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
-XMLLINT_FLAGS = $(LINT_FLAGS) $(DTD_FLAGS)
-
-# PDF 1
-# fop
-FOP = fop
-FOP_FLAGS = -d -r
-
-# PDF 2
-# xmlto
-XML2PDF = xmlto
-XML2PDF_FLAGS = -v pdf --skip-validation -o pdf
-
-# PDF 3
-# xmlroff
-XMLROFF = xmlroff
-XMLROFF_FLAGS = --format=pdf --backend=cairo --warn=1 --debug=1 --continue
-
-# PDF 4
-# prince
-PRINCE = prince
-PRINCE_FLAGS = --log prince.log -o pdf/spine.pdf
-
-# PDF 5
-# dblatex
-DBLATEX_FLAGS = --dump --verbose --pdf -o ${docbook_outdir}/pdf/manual.pdf
+LINT_FLAGS = --debug --xinclude --noent --noblanks --nonet --noout
+#SCHEMA_FLAGS = --relaxng /usr/share/xml/docbook5/schema/rng/5.0/docbookxi.rng
+SCHEMA_FLAGS = --dtdvalid /usr/share/xml/docbook5/schema/dtd/5.0/docbook.dtd
+XMLLINT_FLAGS = $(LINT_FLAGS) $(SCHEMA_FLAGS)
+
+# XML, all one page
+# Some info on canonicalization
+# http://www.mail-archive.com/help-texinfo@gnu.org/msg00864.html
+manual_xml = ${docbook_outdir}/xml/libstdc++-manual-single.xml
+
+# HTML, all one page
+manual_html = ${docbook_outdir}/html/libstdc++-manual-single.html
+
+# PDF, via dblatex
+manual_pdf = ${docbook_outdir}/pdf/libstdc++-manual.pdf
+DBLATEX_FLAGS = --dump --verbose --pdf -o ${manual_pdf}
+
+# Texinfo, via docbook2X
+DB2TEXI_FLAGS = \
+ --encoding=utf-8//TRANSLIT \
+ --string-param output-file="libstdc++-manual" \
+ --string-param directory-category="GNU C++ Library" \
+ --string-param explicit-node-names=true
+
# Performance doc and graph configuration.
# Assumes pychart, beautiful soup installed.
@@ -440,37 +446,6 @@ TAGS:
ctags: CTAGS
CTAGS:
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile
@@ -570,34 +545,54 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- clean-local distclean distclean-generic distclean-libtool \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am
+ clean-local distclean distclean-generic distclean-libtool dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# Documentation Overview
#
# There are two main source materials for libstdc++ documentation.
-# The first is the doxygen markup in libstdc++ sources. And the second
-# is the docbook markup in doc/xml/. A third and more obscure option
-# deals with charting performance tests.
+# The first is the doxygen markup in libstdc++ sources, which is a
+# reference to the API. And the second is the docbook markup in
+# doc/xml/.
+#
+# A third and more obscure option deals with charting
+# performance tests, and should be considered experimental.
+
+# Default rules.
+#
+# Point to best sub-rule for the requested documentation target,
+# create, and then copy into toplevel directory with standardized names
+# and layouts.
+
+# HTML
+doc-html: doc-html-docbook doc-html-doxygen
+ cp -R ${docbook_outdir}/html ./libstdc++-manual.html
+ cp -R ${doxygen_outdir}/html ./libstdc++-api.html
-# Default, points to current best sub-rule that is the best conversion.
# MAN
doc-man: doc-man-doxygen
+ cp -R ${doxygen_outdir}/man ./libstdc++-api.man
# PDF
-doc-pdf: doc-pdf-docbook
+doc-pdf: doc-pdf-docbook doc-pdf-doxygen
+ cp ${docbook_outdir}/pdf/libstdc++-manual.pdf .
+ cp ${doxygen_outdir}/pdf/libstdc++-api.pdf .
-# HTML
-doc-html: doc-html-docbook
+# TEXINFO
+doc-texinfo: doc-texinfo-docbook
+
+# XML
+doc-xml: doc-xml-single-docbook doc-xml-single-doxygen
+ cp ${manual_xml} .
+ cp ${api_xml} .
doc-html-doxygen:
-(srcdir=`cd ${top_srcdir}; ${PWD_COMMAND}`; \
@@ -616,11 +611,10 @@ doc-xml-doxygen:
builddir=`cd ..; ${PWD_COMMAND}`; \
${SHELL} ${doxygen_script} \
--host_alias=${host_alias} --mode=xml $${srcdir} $${builddir} NO)
-
-doc-xml-single-doxygen:
+doc-xml-single-doxygen: doc-xml-doxygen
@echo "Generating doxygen xml single file..."
$(XSLTPROC) ${doxygen_outdir}/xml/combine.xslt \
- ${doxygen_outdir}/xml/index.xml > ${doxygen_outdir}/xml/api-spine.xml;
+ ${doxygen_outdir}/xml/index.xml > ${api_xml};
doc-latex-doxygen:
-(srcdir=`cd ${top_srcdir}; ${PWD_COMMAND}`; \
@@ -628,12 +622,15 @@ doc-latex-doxygen:
${SHELL} ${doxygen_script} \
--host_alias=${host_alias} --mode=latex $${srcdir} $${builddir} NO)
-# Chance of loooooonnggg creation time on this rule.
-doc-pdf-doxygen: stamp-latex-doxygen
+${doxygen_outdir}/pdf:
+ mkdir -p ${doxygen_outdir}/pdf
+
+doc-pdf-doxygen: stamp-latex-doxygen ${doxygen_outdir}/pdf
-(cd ${doxygen_outdir}/latex && $(MAKE) -i pdf;)
echo "Generating doxygen pdf file...";
if [ -f ${doxygen_pdf} ]; then \
- echo "... ${doxygen_pdf}"; \
+ mv ${doxygen_pdf} ${api_pdf} ; \
+ echo ":: PDF file is ${api_pdf}"; \
else \
echo "... error"; \
exit 12; \
@@ -658,37 +655,36 @@ stamp-latex-doxygen:
fi
$(STAMP) stamp-latex-doxygen
+${docbook_outdir}/fo:
+ mkdir -p ${docbook_outdir}/fo
+
${docbook_outdir}/html:
mkdir -p ${docbook_outdir}/html
${docbook_outdir}/pdf:
mkdir -p ${docbook_outdir}/pdf
-${docbook_outdir}/fo:
- mkdir -p ${docbook_outdir}/fo
+${docbook_outdir}/texinfo:
+ mkdir -p ${docbook_outdir}/texinfo
${docbook_outdir}/xml:
mkdir -p ${docbook_outdir}/xml
doc-xml-validate-docbook: $(xml_sources)
@echo "Generating XML validation log..."
$(XMLLINT) $(XMLLINT_FLAGS) ${top_srcdir}/doc/xml/spine.xml
-
doc-xml-single-docbook: $(xml_sources) ${docbook_outdir}/xml
@echo "Generating XML single..."
- $(XMLLINT) --xinclude --noent --noblanks \
- -o ${docbook_outdir}/xml/spine-single.xml \
- ${top_srcdir}/doc/xml/spine.xml
+ $(XMLLINT) --xinclude --noent --noblanks --nocdata --nsclean --c14n \
+ ${top_srcdir}/doc/xml/manual/spine.xml > ${manual_xml}
# HTML, index plus chapters
doc-html-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html files..."
$(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
$(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
-
-# HTML, all one page
doc-html-single-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html single file..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
+ $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${manual_html} \
$(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
# FO
@@ -696,29 +692,14 @@ doc-fo-docbook: $(xml_sources) ${docbook_outdir}/fo
@echo "Generating FO files..."
$(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
$(XSL_FO_STYLE) ${top_srcdir}/doc/xml/spine.xml
-doc-pdf-fop-xml-docbook: $(xml_sources) ${glibcxx_builddir}/doc/pdf
- @echo "Generating pdf fop files from xml..."
- $(FOP) $(FOP_FLAGS) -xml ${top_srcdir}/doc/xml/spine.xml \
- -xsl $(XSL_FO_STYLE) -pdf ${docbook_outdir}/pdf/spine.pdf
-
-doc-pdf-fop-fo-docbook: $(xml_sources) ${glibcxx_builddir}/doc/pdf doc-fo
- @echo "Generating pdf fop files from fo..."
- $(FOP) $(FOP_FLAGS) -fo ${docbook_outdir}/fo/spine.fo \
- -pdf ${docbook_outdir}/pdf/spine.pdf
-doc-pdf-xmlto-docbook: $(xml_sources) ${docbook_outdir}/pdf
- @echo "Generating pdf xmlto files..."
- $(XML2PDF) $(XML2PDF_FLAGS) ${top_srcdir}/doc/xml/spine.xml
-doc-pdf-xmlroff-docbook: $(xml_sources) doc-fo
- @echo "Generating pdf xmlroff files..."
- $(XMLROFF) $(XMLROFF_FLAGS) ${docbook_outdir}/fo/spine.fo
-doc-pdf-prince-docbook: $(xml_sources) ${docbook_outdir}/pdf
- @echo "Generating pdf prince files..."
- $(PRINCE) $(PRINCE_FLAGS) ${top_srcdir}/xml/spine.xml
+doc-pdf-docbook: doc-pdf-dblatex-docbook
+
doc-pdf-dblatex-docbook: $(xml_sources) ${docbook_outdir}/pdf
@echo "Generating pdf dblatex files..."
dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml
-
-doc-pdf-docbook: doc-pdf-dblatex-docbook
+doc-texinfo-docbook: doc-xml-single-docbook ${docbook_outdir}/texinfo
+ @echo "Generating texinfo files..."
+ db2x_docbook2texi $(DB2TEXI_FLAGS) ${manual_xml}
doc-html-performance:
-@(chmod + ${doc_performance_script}; \
${doc_performance_script} ${top_srcdir} \
@@ -730,7 +711,7 @@ doc-html-performance:
# To remove directories.
clean-local:
- rm -rf man html pdf fo xml doxygen docbook stamp*
+ rm -rf man html pdf fo xml doxygen docbook stamp* ./libstdc++-* db2t*
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libstdc++-v3/doc/doxygen/doxygroups.cc b/libstdc++-v3/doc/doxygen/doxygroups.cc
index e7c664a92fb..00175388301 100644
--- a/libstdc++-v3/doc/doxygen/doxygroups.cc
+++ b/libstdc++-v3/doc/doxygen/doxygroups.cc
@@ -1,5 +1,6 @@
/*
- Copyright (C) 2001, 2002, 2005, 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2005, 2008, 2009, 2010
+ Free Software Foundation, Inc.
See license.html for license.
This just provides documentation for stuff that doesn't need to be in the
@@ -47,7 +48,7 @@
* Components generally useful that are not part of any standard.
*/
-/** @defgroup SGIextensions SGI STL extensions
+/** @defgroup SGIextensions SGI
* @ingroup extensions
Because libstdc++ based its implementation of the STL subsections of
the library on the SGI 3.3 implementation, we inherited their extensions
@@ -115,7 +116,7 @@ All sequences must meet certain requirements, summarized in
<a href="tables.html">tables</a>.
*/
-/** @defgroup associative_containers Associative Containers
+/** @defgroup associative_containers Associative
* @ingroup containers
Associative containers allow fast retrieval of data based on keys.
@@ -126,7 +127,7 @@ All associative containers must meet certain requirements, summarized in
<a href="tables.html">tables</a>.
*/
-/** @defgroup unordered_associative_containers Unordered Associative Containers
+/** @defgroup unordered_associative_containers Unordered Associative
* @ingroup containers
Unordered associative containers allow fast retrieval of data based on keys.
diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in
index 40e75087be6..c9e86a51884 100644
--- a/libstdc++-v3/doc/doxygen/user.cfg.in
+++ b/libstdc++-v3/doc/doxygen/user.cfg.in
@@ -1,4 +1,4 @@
-# Doxyfile 1.6.1
+# Doxyfile 1.7.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
@@ -180,7 +180,7 @@ TAB_SIZE = 4
# You can put \n's in the value part of an alias to insert newlines.
ALIASES = "doctodo=@todo\nDoc me! See doc/doxygen/TODO and http://gcc.gnu.org/ml/libstdc++/2002-02/msg00003.html for more. " \
- "isiosfwd=One of the @link ios I/O @endlink "
+ "isiosfwd=One of the @link io I/O @endlink typedefs"
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
@@ -208,17 +208,15 @@ OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
-# Doxygen selects the parser to use depending on the extension of the
-# files it parses. With this tag you can assign which parser to use
-# for a given extension. Doxygen has a built-in mapping, but you can
-# override or extend it using this tag. The format is ext=language,
-# where ext is a file extension, and language is one of the parsers
-# supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f
-# files as C (default is Fortran), use: inc=Fortran f=C. Note that for
-# custom extensions you also need to set FILE_PATTERNS otherwise the
-# files are not read by doxygen.
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
EXTENSION_MAPPING =
@@ -236,63 +234,57 @@ BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
-# Set the SIP_SUPPORT tag to YES if your project consists of sip
-# sources only. Doxygen will parse them like normal C++ but will
-# assume all classes use public instead of private inheritance when no
-# explicit protection keyword is present.
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
SIP_SUPPORT = NO
-# For Microsoft's IDL there are propget and propput attributes to
-# indicate getter and setter methods for a property. Setting this
-# option to YES (the default) will make doxygen to replace the get and
-# set methods by a property in the documentation. This will only work
-# if the methods are indeed getting or setting a simple type. If this
-# is not the case, or you want to show the methods anyway, you should
-# set this option to NO.
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
-IDL_PROPERTY_SUPPORT = YES
+IDL_PROPERTY_SUPPORT = NO
-# If member grouping is used in the documentation and the
-# DISTRIBUTE_GROUP_DOC tag is set to YES, then doxygen will reuse the
-# documentation of the first member in the group (if any) for the
-# other members of the group. By default all members of a group must
-# be documented explicitly.
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = YES
-# Set the SUBGROUPING tag to YES (the default) to allow class member
-# groups of the same type (for instance a group of public functions)
-# to be put as a subgroup of that type (e.g. under the Public
-# Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
SUBGROUPING = YES
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union,
-# or enum is documented as struct, union, or enum with the name of the
-# typedef. So typedef struct TypeS {} TypeT, will appear in the
-# documentation as a struct with name TypeT. When disabled the typedef
-# will appear as a member of a file, namespace, or class. And the
-# struct will be named TypeS. This can typically be useful for C code
-# in case the coding convention dictates that all compound types are
-# typedef'ed and only the typedef is referenced, never the tag name.
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
TYPEDEF_HIDES_STRUCT = NO
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use
-# to determine which symbols to keep in memory and which to flush to
-# disk. When the cache is full, less often used symbols will be
-# written to disk. For small to medium size projects (<1000 input
-# files) the default value is probably good enough. For larger
-# projects a too small cache size can cause doxygen to be busy
-# swapping symbols to and from disk most of the time causing a
-# significant performance penality. If the system has enough physical
-# memory increasing the cache will improve the performance by keeping
-# more symbols in memory. Note that the value works on a logarithmic
-# scale so increasing the size by one will rougly double the memory
-# usage. The cache size is given by this formula:
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
# corresponding to a cache size of 2^16 = 65536 symbols
@@ -396,6 +388,12 @@ HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = NO
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
@@ -415,13 +413,13 @@ SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = YES
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will
-# sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the
-# default) the constructors will appear in the respective orders
-# defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be
-# ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored
-# for detailed docs if SORT_MEMBER_DOCS is set to NO.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
SORT_MEMBERS_CTORS_1ST = YES
@@ -505,24 +503,22 @@ SHOW_FILES = YES
SHOW_NAMESPACES = YES
-# The FILE_VERSION_FILTER tag can be used to specify a program or
-# script that doxygen should invoke to get the current version for
-# each file (typically from the version control system). Doxygen will
-# invoke the program by executing (via popen()) the command <command>
-# <input-file>, where <command> is the value of the
-# FILE_VERSION_FILTER tag, and <input-file> is the name of an input
-# file provided by doxygen. Whatever the program writes to standard
-# output is used as the file version. See the manual for examples.
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
FILE_VERSION_FILTER =
-# The LAYOUT_FILE tag can be used to specify a layout file which will
-# be parsed by doxygen. The layout file controls the global structure
-# of the generated output files in an output format independent
-# way. The create the layout file that represents doxygen's defaults,
-# run doxygen with the -l option. You can optionally specify a file
-# name after the option, if omitted DoxygenLayout.xml will be used as
-# the name of the layout file.
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
LAYOUT_FILE =
@@ -581,162 +577,161 @@ WARN_LOGFILE =
# configuration options related to the input files
#---------------------------------------------------------------------------
-# The INPUT tag can be used to specify the files and/or directories
-# that contain documented source files. You may enter file names like
-# "myfile.cpp" or directories like "/usr/src/myproject". Separate the
-# files or directories with spaces.
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
INPUT = @srcdir@/doc/doxygen/doxygroups.cc \
- @srcdir@/libsupc++/cxxabi.h \
- @srcdir@/libsupc++/cxxabi-forced.h \
- @srcdir@/libsupc++/exception \
- @srcdir@/libsupc++/exception_ptr.h \
- @srcdir@/libsupc++/initializer_list \
- @srcdir@/libsupc++/nested_exception.h \
- @srcdir@/libsupc++/new \
- @srcdir@/libsupc++/typeinfo \
- include/algorithm \
- include/array \
- include/atomic \
- include/bitset \
- include/chrono \
- include/complex \
- include/condition_variable \
- include/deque \
- include/fstream \
- include/functional \
- include/future \
- include/iomanip \
- include/ios \
- include/iosfwd \
- include/iostream \
- include/istream \
- include/iterator \
- include/limits \
- include/list \
- include/locale \
- include/map \
- include/memory \
- include/mutex \
- include/numeric \
- include/ostream \
- include/queue \
- include/random \
- include/ratio \
- include/regex \
- include/set \
- include/sstream \
- include/stack \
- include/stdexcept \
- include/streambuf \
- include/string \
- include/system_error \
- include/thread \
- include/tuple \
- include/type_traits \
- include/unordered_map \
- include/unordered_set \
- include/utility \
- include/valarray \
- include/vector \
- include/cassert \
- include/ccomplex \
- include/cctype \
- include/cerrno \
- include/cfenv \
- include/cfloat \
- include/cinttypes \
- include/ciso646 \
- include/climits \
- include/clocale \
- include/cmath \
- include/csetjmp \
- include/csignal \
- include/cstdarg \
- include/cstdbool \
- include/cstddef \
- include/cstdint \
- include/cstdio \
- include/cstdlib \
- include/cstring \
- include/ctgmath \
- include/ctime \
- include/cwchar \
- include/cwctype \
- include/backward/hash_map \
- include/backward/hash_set \
- include/backward/strstream \
- include/debug/bitset \
- include/debug/deque \
- include/debug/list \
- include/debug/map \
- include/debug/set \
- include/debug/string \
- include/debug/unordered_map \
- include/debug/unordered_set \
- include/debug/vector \
- include/profile/bitset \
- include/profile/deque \
- include/profile/list \
- include/profile/map \
- include/profile/set \
- include/profile/unordered_map \
- include/profile/unordered_set \
- include/profile/vector \
- include/ext/algorithm \
- include/ext/functional \
- include/ext/iterator \
- include/ext/memory \
- include/ext/numeric \
- include/ext/rb_tree \
- include/ext/rope \
- include/ext/slist \
- include/parallel/algorithm \
- include/parallel/numeric \
- include/tr1/ccomplex \
- include/tr1/cctype \
- include/tr1/cfenv \
- include/tr1/cfloat \
- include/tr1/cinttypes \
- include/tr1/climits \
- include/tr1/cmath \
- include/tr1/complex \
- include/tr1/cstdarg \
- include/tr1/cstdbool \
- include/tr1/cstdint \
- include/tr1/cstdio \
- include/tr1/cstdlib \
- include/tr1/ctgmath \
- include/tr1/ctime \
- include/tr1/cwchar \
- include/tr1/cwctype \
- include/tr1_impl/array \
- include/tr1_impl/cctype \
- include/tr1_impl/cfenv \
- include/tr1_impl/cinttypes \
- include/tr1_impl/cmath \
- include/tr1_impl/complex \
- include/tr1_impl/cstdint \
- include/tr1_impl/cstdio \
- include/tr1_impl/cstdlib \
- include/tr1_impl/cwchar \
- include/tr1_impl/cwctype \
- include/tr1_impl/regex \
- include/tr1_impl/type_traits \
- include/tr1_impl/utility \
- include/tr1_impl \
- include/decimal/decimal \
- include/ \
- include/@host_alias@/bits \
- include/backward \
- include/bits \
- include/debug \
- include/parallel \
- include/profile \
- include/profile/impl \
- include/ext \
- include/ext/pb_ds \
- include/ext/pb_ds/detail
+ @srcdir@/libsupc++/cxxabi.h \
+ @srcdir@/libsupc++/cxxabi-forced.h \
+ @srcdir@/libsupc++/exception \
+ @srcdir@/libsupc++/exception_ptr.h \
+ @srcdir@/libsupc++/initializer_list \
+ @srcdir@/libsupc++/nested_exception.h \
+ @srcdir@/libsupc++/new \
+ @srcdir@/libsupc++/typeinfo \
+ include/algorithm \
+ include/array \
+ include/atomic \
+ include/bitset \
+ include/chrono \
+ include/complex \
+ include/condition_variable \
+ include/deque \
+ include/fstream \
+ include/functional \
+ include/future \
+ include/iomanip \
+ include/ios \
+ include/iosfwd \
+ include/iostream \
+ include/istream \
+ include/iterator \
+ include/limits \
+ include/list \
+ include/locale \
+ include/map \
+ include/memory \
+ include/mutex \
+ include/numeric \
+ include/ostream \
+ include/queue \
+ include/random \
+ include/ratio \
+ include/regex \
+ include/set \
+ include/sstream \
+ include/stack \
+ include/stdexcept \
+ include/streambuf \
+ include/string \
+ include/system_error \
+ include/thread \
+ include/tuple \
+ include/type_traits \
+ include/unordered_map \
+ include/unordered_set \
+ include/utility \
+ include/valarray \
+ include/vector \
+ include/cassert \
+ include/ccomplex \
+ include/cctype \
+ include/cerrno \
+ include/cfenv \
+ include/cfloat \
+ include/cinttypes \
+ include/ciso646 \
+ include/climits \
+ include/clocale \
+ include/cmath \
+ include/csetjmp \
+ include/csignal \
+ include/cstdarg \
+ include/cstdbool \
+ include/cstddef \
+ include/cstdint \
+ include/cstdio \
+ include/cstdlib \
+ include/cstring \
+ include/ctgmath \
+ include/ctime \
+ include/cwchar \
+ include/cwctype \
+ include/backward/hash_map \
+ include/backward/hash_set \
+ include/backward/strstream \
+ include/debug/bitset \
+ include/debug/deque \
+ include/debug/list \
+ include/debug/map \
+ include/debug/set \
+ include/debug/string \
+ include/debug/unordered_map \
+ include/debug/unordered_set \
+ include/debug/vector \
+ include/profile/bitset \
+ include/profile/deque \
+ include/profile/list \
+ include/profile/map \
+ include/profile/set \
+ include/profile/unordered_map \
+ include/profile/unordered_set \
+ include/profile/vector \
+ include/ext/algorithm \
+ include/ext/functional \
+ include/ext/iterator \
+ include/ext/memory \
+ include/ext/numeric \
+ include/ext/rb_tree \
+ include/ext/rope \
+ include/ext/slist \
+ include/parallel/algorithm \
+ include/parallel/numeric \
+ include/tr1/ccomplex \
+ include/tr1/cctype \
+ include/tr1/cfenv \
+ include/tr1/cfloat \
+ include/tr1/cinttypes \
+ include/tr1/climits \
+ include/tr1/cmath \
+ include/tr1/complex \
+ include/tr1/cstdarg \
+ include/tr1/cstdbool \
+ include/tr1/cstdint \
+ include/tr1/cstdio \
+ include/tr1/cstdlib \
+ include/tr1/ctgmath \
+ include/tr1/ctime \
+ include/tr1/cwchar \
+ include/tr1/cwctype \
+ include/tr1_impl/array \
+ include/tr1_impl/cctype \
+ include/tr1_impl/cfenv \
+ include/tr1_impl/cinttypes \
+ include/tr1_impl/cmath \
+ include/tr1_impl/complex \
+ include/tr1_impl/cstdint \
+ include/tr1_impl/cstdio \
+ include/tr1_impl/cstdlib \
+ include/tr1_impl/cwchar \
+ include/tr1_impl/cwctype \
+ include/tr1_impl/type_traits \
+ include/tr1_impl/utility \
+ include/tr1_impl \
+ include/decimal/decimal \
+ include/ \
+ include/@host_alias@/bits \
+ include/backward \
+ include/bits \
+ include/debug \
+ include/parallel \
+ include/profile \
+ include/profile/impl \
+ include/ext \
+ include/ext/pb_ds \
+ include/ext/pb_ds/detail
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -754,8 +749,8 @@ INPUT_ENCODING = UTF-8
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
FILE_PATTERNS = *.h \
- *.hpp \
- *.tcc
+ *.hpp \
+ *.tcc
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
@@ -782,10 +777,10 @@ EXCLUDE_SYMLINKS = NO
# for example use the pattern */test/*
EXCLUDE_PATTERNS = stamp-* \
- *stdc++.h* \
- *stdtr1c++.h* \
- *extc++.h* \
- */.svn/*
+ *stdc++.h* \
+ *stdtr1c++.h* \
+ *extc++.h* \
+ */.svn/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -961,11 +956,6 @@ HTML_HEADER =
HTML_FOOTER =
-# If the HTML_TIMESTAMP tag is set to YES then the generated HTML
-# documentation will contain the timesstamp.
-
-HTML_TIMESTAMP = NO
-
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
@@ -975,6 +965,37 @@ HTML_TIMESTAMP = NO
HTML_STYLESHEET =
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = NO
+
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
@@ -991,14 +1012,14 @@ HTML_DYNAMIC_SECTIONS = NO
# If the GENERATE_DOCSET tag is set to YES, additional index files
# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5
-# (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the
-# docset in that directory and running "make install" will install the
-# docset in ~/Library/Developer/Shared/Documentation/DocSets so that
-# Xcode will find it at startup. See
-# http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for
-# more information.
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
GENERATE_DOCSET = NO
@@ -1014,7 +1035,18 @@ DOCSET_FEEDNAME = "Doxygen generated docs"
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
# will append .docset to the name.
-DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_BUNDLE_ID = org.gnu.libstdc++
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should
+# uniquely identify the documentation publisher. This should be a
+# reverse domain-name style string,
+# e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.fsf
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = libstdc++
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
@@ -1061,10 +1093,9 @@ BINARY_TOC = NO
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be
-# generated that can be used as input for Qt's qhelpgenerator to
-# generate a Qt Compressed Help (.qch) of the generated HTML
-# documentation.
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
GENERATE_QHP = NO
@@ -1086,23 +1117,24 @@ QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom
-# filter to add. For more information please see
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
# http://doc.trolltech.com/qthelpproject.html#custom-filters
QHP_CUST_FILTER_NAME =
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of
-# the custom filter to add.For more information please see <a
-# href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt
-# Help Project / Custom Filters</a>.
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
QHP_CUST_FILTER_ATTRS =
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes
-# this project's filter section matches. <a
-# href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt
-# Help Project / Filter Attributes</a>.
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
QHP_SECT_FILTER_ATTRS =
@@ -1113,6 +1145,23 @@ QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
# top of each HTML page. The value NO (the default) enables the index and
# the value YES disables it.
@@ -1145,6 +1194,11 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
# when you change the font size after a successful doxygen run you need
@@ -1153,15 +1207,34 @@ TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
-# When the SEARCHENGINE tag is enable doxygen will generate a search
-# box for the HTML output. The underlying search engine uses
-# javascript and DHTML and should work on any modern browser. Note
-# that when using HTML help (GENERATE_HTMLHELP) or Qt help
-# (GENERATE_QHP) there is already a search function so this one should
-# typically be disabled.
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
SEARCHENGINE = NO
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
@@ -1179,6 +1252,9 @@ LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
LATEX_CMD_NAME = latex
@@ -1225,11 +1301,10 @@ PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the
-# \\batchmode. command to the generated LaTeX files. This will
-# instruct LaTeX to keep running if errors occur, instead of asking
-# the user for help. This option is also used when generating
-# formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
LATEX_BATCHMODE = YES
@@ -1239,10 +1314,10 @@ LATEX_BATCHMODE = YES
LATEX_HIDE_INDICES = YES
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output. Note that which
-# sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
LATEX_SOURCE_CODE = NO
@@ -1448,37 +1523,37 @@ INCLUDE_FILE_PATTERNS =
# instead of the = operator.
PREDEFINED = __cplusplus \
- __GTHREADS \
- _GLIBCXX_HAS_GTHREADS \
- __GXX_EXPERIMENTAL_CXX0X__ \
- _GLIBCXX_INCLUDE_AS_CXX0X \
- "_GLIBCXX_STD_P= " \
- "_GLIBCXX_STD_D= " \
- _GLIBCXX_STD=std \
- "_GLIBCXX_TR1= " \
- "_GLIBCXX_BEGIN_NAMESPACE_TR1= " \
- "_GLIBCXX_END_NAMESPACE_TR1= " \
- "_GLIBCXX_BEGIN_NAMESPACE(name)=namespace name { " \
- "_GLIBCXX_BEGIN_NESTED_NAMESPACE(name, unused)=namespace name { " \
- _GLIBCXX_END_NAMESPACE=} \
- _GLIBCXX_END_NESTED_NAMESPACE=} \
- "_GLIBCXX_TEMPLATE_ARGS=... " \
- _GLIBCXX_DEPRECATED \
- _GLIBCXX_USE_WCHAR_T \
- _GLIBCXX_USE_LONG_LONG \
- _GLIBCXX_USE_C99_STDINT_TR1 \
- _GLIBCXX_ATOMIC_BUILTINS_1 \
- _GLIBCXX_ATOMIC_BUILTINS_2 \
- _GLIBCXX_ATOMIC_BUILTINS_4 \
- _GLIBCXX_ATOMIC_BUILTINS_8 \
- _GLIBCXX_USE_SCHED_YIELD \
- _GLIBCXX_USE_NANOSLEEP \
- __GXX_RTTI \
- __glibcxx_function_requires=// \
- __glibcxx_class_requires=// \
- __glibcxx_class_requires2=// \
- __glibcxx_class_requires3=// \
- __glibcxx_class_requires4=//
+ __GTHREADS \
+ _GLIBCXX_HAS_GTHREADS \
+ __GXX_EXPERIMENTAL_CXX0X__ \
+ _GLIBCXX_INCLUDE_AS_CXX0X \
+ "_GLIBCXX_STD_P= " \
+ "_GLIBCXX_STD_D= " \
+ _GLIBCXX_STD=std \
+ "_GLIBCXX_TR1= " \
+ "_GLIBCXX_BEGIN_NAMESPACE_TR1= " \
+ "_GLIBCXX_END_NAMESPACE_TR1= " \
+ "_GLIBCXX_BEGIN_NAMESPACE(name)=namespace name { " \
+ "_GLIBCXX_BEGIN_NESTED_NAMESPACE(name, unused)=namespace name { " \
+ _GLIBCXX_END_NAMESPACE=} \
+ _GLIBCXX_END_NESTED_NAMESPACE=} \
+ "_GLIBCXX_TEMPLATE_ARGS=... " \
+ _GLIBCXX_DEPRECATED \
+ _GLIBCXX_USE_WCHAR_T \
+ _GLIBCXX_USE_LONG_LONG \
+ _GLIBCXX_USE_C99_STDINT_TR1 \
+ _GLIBCXX_ATOMIC_BUILTINS_1 \
+ _GLIBCXX_ATOMIC_BUILTINS_2 \
+ _GLIBCXX_ATOMIC_BUILTINS_4 \
+ _GLIBCXX_ATOMIC_BUILTINS_8 \
+ _GLIBCXX_USE_SCHED_YIELD \
+ _GLIBCXX_USE_NANOSLEEP \
+ __GXX_RTTI \
+ __glibcxx_function_requires=// \
+ __glibcxx_class_requires=// \
+ __glibcxx_class_requires2=// \
+ __glibcxx_class_requires3=// \
+ __glibcxx_class_requires4=//
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
@@ -1575,6 +1650,14 @@ HIDE_UNDOC_RELATIONS = NO
HAVE_DOT = YES
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
# By default doxygen will write a font called FreeSans.ttf to the
# output directory and reference it in all dot files that doxygen
# generates. This font does not include all possible unicode
@@ -1590,7 +1673,7 @@ DOT_FONTNAME = FreeSans
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
# The default size is 10pt.
-DOT_FONTSIZE = 10
+DOT_FONTSIZE = 9
# By default doxygen will tell dot to use the output directory to look for the
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
diff --git a/libstdc++-v3/doc/html/api.html b/libstdc++-v3/doc/html/api.html
index 61ddda971a2..c9aab0adbfa 100644
--- a/libstdc++-v3/doc/html/api.html
+++ b/libstdc++-v3/doc/html/api.html
@@ -1,24 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API and Source Level Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API and Source Level Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article" title="API and Source Level Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>API and Source Level Documentation</h2></div><div><p class="copyright">Copyright ©
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article" title="API Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>API Documentation</h2></div><div><p class="copyright">Copyright ©
2008
+ ,
+ 2010
<a class="ulink" href="http://www.fsf.org/" target="_top">FSF
</a>
- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id561368"></a><p>
+ </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id343928"></a><p>
<a class="link" href="manual/license.html" title="License">License
</a>
</p></div></div></div><hr /></div><p>
-The GNU C++ library sources have been specially formatted so that with the
-proper invocation of another tool (Doxygen), a set of HTML pages
-are generated from the sources files themselves. The resultant
-documentation is referred to as Source Level Documentation, and is
-useful for examining the signatures of public member functions for
-the library classes, finding out what is in a particular include
-file, looking at inheritance diagrams, etc.
+ The GNU C++ library sources have been specially formatted so that
+ with the proper invocation of another tool (Doxygen), a set of
+ indexed reference material can generated from the sources files
+ themselves. The resultant documentation is referred to as the API
+ documentation, and is useful for examining the signatures of public
+ member functions for the library classes, finding out what is in a
+ particular include file, looking at inheritance diagrams, etc.
</p><p>
-The source-level documentation for the most recent releases can be
-viewed online:
+ The API documentation, rendered into HTML, can be viewed online:
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
</a>
@@ -39,16 +40,14 @@ viewed online:
</a>
(For the main development tree; see the date on the first page.)
</p></li></ul></div><p>
-This generated HTML collection, as above, is also available for download in the libstdc++ snapshots directory at
+ The rendered HTML, as above, is also available for download on the
+ gcc.org site in a directory located at
<code class="literal">&lt;URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/&gt;</code>.
You will almost certainly need to use one of the
<a class="ulink" href="http://gcc.gnu.org/mirrors.html" target="_top">mirror sites</a> to download
- the tarball. After unpacking, simply load libstdc++-html-*/index.html
+ the tarball. After unpacking, simply load libstdc++-html-*/index.html
into a browser.
</p><p>
-Documentation for older releases is available for download only, not
-online viewing.
-</p><p>
-In addition, an initial set of man pages are also available in the
-same place as the HTML collections. Start with C++Intro(3).
+ In addition, a rendered set of man pages are available in the same
+ location specified above. Start with C++Intro(3).
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/bk02.html b/libstdc++-v3/doc/html/bk02.html
index f0dbebb2ac4..16ac5f094f6 100644
--- a/libstdc++-v3/doc/html/bk02.html
+++ b/libstdc++-v3/doc/html/bk02.html
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="API and Source Level Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="api.html">API and Source Level Documentation</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> API and Source Level Documentation</td></tr></table></div></body></html>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="API Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="api.html">API Documentation</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Documentation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/bk03.html b/libstdc++-v3/doc/html/bk03.html
index bc43c8d07bb..89beabfeb26 100644
--- a/libstdc++-v3/doc/html/bk03.html
+++ b/libstdc++-v3/doc/html/bk03.html
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="api.html" title="API and Source Level Documentation" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API and Source Level Documentation </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="api.html" title="API Documentation" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Documentation </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/faq.html b/libstdc++-v3/doc/html/faq.html
index 31ba54106aa..db71bd0e065 100644
--- a/libstdc++-v3/doc/html/faq.html
+++ b/libstdc++-v3/doc/html/faq.html
@@ -4,7 +4,7 @@
2008
<a class="ulink" href="http://www.fsf.org" target="_top">FSF</a>
- </p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="id571249"></a><dl><dt>1. <a href="faq.html#faq.info">General Information</a></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+ </p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="id460433"></a><dl><dt>1. <a href="faq.html#faq.info">General Information</a></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
What is libstdc++?
</a></dt><dt>1.2. <a href="faq.html#faq.why">
Why should I use libstdc++?
@@ -315,12 +315,15 @@
and <span class="command"><strong>ldconfig</strong></span> for more information. The dynamic
linker has different names on different platforms but the man page
is usually called something such as <code class="filename">ld.so/rtld/dld.so</code>.
+ </p><p>
+ Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
+ Libraries</a> in the manual gives some alternatives.
</p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><b>3.5.</b></p></td><td align="left" valign="top"><p>
What's libsupc++?
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
If the only functions from <code class="filename">libstdc++.a</code>
which you need are language support functions (those listed in
- <a class="link" href="manual/support.html" title="Part II.  Support">clause 18</a> of the
+ <a class="link" href="manual/support.html" title="Chapter 4.  Support">clause 18</a> of the
standard, e.g., <code class="function">new</code> and
<code class="function">delete</code>), then try linking against
<code class="filename">libsupc++.a</code>, which is a subset of
@@ -393,7 +396,7 @@
non-standard features of g++ that are not present in older
versions of proprietary compilers. It may take as much as a year or two
after an official release of GCC that contains these features for
- proprietary tools support these constructs.
+ proprietary tools to support these constructs.
</p><p>
In the near past, specific released versions of libstdc++ have
been known to work with versions of the EDG C++ compiler, and
@@ -470,9 +473,10 @@
Recent GNU/Linux glibc required?
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
5.0.1) and later uses localization and formatting code from the system
- C library (glibc) version 2.2.5. That version of glibc is over a
- year old and contains necessary bugfixes. Many GNU/Linux distros make
- glibc version 2.3.x available now.
+ C library (glibc) version 2.2.5 which contains necessary bugfixes.
+ Most GNU/Linux distros make more recent versions available now.
+ libstdc++ 4.6.0 and later require glibc 2.3 or later for this
+ localization and formatting code.
</p><p>The guideline is simple: the more recent the C++ library, the
more recent the C library. (This is also documented in the main
GCC installation instructions.)
@@ -517,7 +521,7 @@
For those people who are not part of the ISO Library Group
(i.e., nearly all of us needing to read this page in the first
place), a public list of the library defects is occasionally
- published <a class="ulink" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/" target="_top">here</a>.
+ published <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">here</a>.
Some of these issues have resulted in code changes in libstdc++.
</p><p>
If you think you've discovered a new bug that is not listed,
@@ -647,8 +651,9 @@
typo, or wrong visibility, or you just plain forgot, etc).
</p><p>
More information, including how to optionally enable/disable the
- checks, is available
- <a class="link" href="manual/bk01pt03ch08.html" title="Chapter 8. Concept Checking">here</a>.
+ checks, is available in the
+ <a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
+ chapter of the manual.
</p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><b>6.6.</b></p></td><td align="left" valign="top"><p>
Program crashes when using library code in a
dynamically-loaded library
@@ -685,7 +690,7 @@
list::size() is O(n)!
</p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
See
- the <a class="link" href="manual/containers.html" title="Part VII.  Containers">Containers</a>
+ the <a class="link" href="manual/containers.html" title="Chapter 9.  Containers">Containers</a>
chapter.
</p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><b>6.9.</b></p></td><td align="left" valign="top"><p>
Aw, that's easy to fix!
@@ -869,6 +874,6 @@
    </p></div><p>
The copy will take O(n) time and the swap is constant time.
</p><p>
- See <a class="link" href="manual/bk01pt05ch13s05.html" title="Shrink to Fit">Shrink-to-fit
+ See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
strings</a> for a similar solution for strings.
</p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html
index 25d0a568ee6..6aaacb98ccf 100644
--- a/libstdc++-v3/doc/html/manual/abi.html
+++ b/libstdc++-v3/doc/html/manual/abi.html
@@ -5,15 +5,15 @@
</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="ABI Policy and Guidelines"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
</p><div class="sect2" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
- C++ applications often dependent on specific language support
+ C++ applications often depend on specific language support
routines, say for throwing exceptions, or catching exceptions, and
- perhaps also dependent on features in the C++ Standard Library.
-</p><p>
+ perhaps also depend on features in the C++ Standard Library.
+</p><p>
The C++ Standard Library has many include files, types defined in
those include files, specific named functions, and other
behavior. The text of these behaviors, as written in source include
files, is called the Application Programing Interface, or API.
-</p><p>
+</p><p>
Furthermore, C++ source that is compiled into object files is
transformed by the compiler: it arranges objects with specific
alignment and in a particular layout, mangling names according to a
@@ -32,7 +32,7 @@
<code class="code">-fno-exceptions</code>, but include others: see the complete
list in the GCC manual under the heading <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options" target="_top">Options
for Code Generation Conventions</a>.
-</p><p>
+</p><p>
The configure options used when building a specific libstdc++
version may also impact the resulting library ABI. The available
configure options, and their impact on the library ABI, are
@@ -65,7 +65,7 @@ as to give distinct versions to the C++ interface.
releases of library binaries the ability to add new symbols and add
functionality, all the while retaining compatibility with the previous
releases in the series. Thus, program binaries linked with the initial
-release of a library binary will still link correctly if the library
+release of a library binary will still run correctly if the library
binary is replaced by carefully-managed subsequent library
binaries. This is called forward compatibility.
</p><p>
@@ -87,16 +87,19 @@ compatible.
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
<code class="constant">DT_SONAME</code> mechanism (at least on ELF
systems). It is versioned as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.4: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: on m68k-linux and
- hppa-linux this is either libgcc_s.so.1 (when configuring
- <code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all
- others, this is libgcc_s.so.1. </p></li></ul></div></li><li class="listitem"><p>Symbol versioning on the libgcc_s.so binary.</p><p>It is versioned with the following labels and version
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.0.4: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.1.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.2.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.0: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.1: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.2: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.3.3: libgcc_s.so.1</p></li><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </p></li><li class="listitem"><p>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
+ <code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
+ </p></li></ul></div></li><li class="listitem"><p>Symbol versioning on the libgcc_s.so binary.</p><p>It is versioned with the following labels and version
definitions, where the version definition is the maximum for a
particular release. Labels are cumulative. If a particular release
is not listed, it has the same version labels as the preceding
release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>gcc-3.0.0: GCC_3.0</p></li><li class="listitem"><p>gcc-3.3.0: GCC_3.3</p></li><li class="listitem"><p>gcc-3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>gcc-3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>gcc-3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>gcc-3.4.0: GCC_3.4</p></li><li class="listitem"><p>gcc-3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>gcc-3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>gcc-4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>gcc-4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>gcc-4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>gcc-4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>gcc-4.4.0: GCC_4.4.0</p></li></ul></div></li><li class="listitem"><p>
Release versioning on the libstdc++.so binary, implemented in
- the same was as the libgcc_s.so binary above. Listed is the
+ the same way as the libgcc_s.so binary above. Listed is the
filename: <code class="constant">DT_SONAME</code> can be deduced from
the filename by removing the last two period-delimited numbers. For
example, filename <code class="filename">libstdc++.so.5.0.4</code>
@@ -114,9 +117,9 @@ compatible.
Note 3: This release (but not previous or subsequent) has one
known incompatibility, see <a class="ulink" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678" target="_top">33678</a>
in the GCC bug database.
- </p></li><li class="listitem"><p>Symbol versioning on the libstdc++.so binary.</p><p>mapfile: libstdc++/config/linker-map.gnu</p><p>It is versioned with the following labels and version
+ </p></li><li class="listitem"><p>Symbol versioning on the libstdc++.so binary.</p><p>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</p><p>It is versioned with the following labels and version
definitions, where the version definition is the maximum for a
- particular release. Note, only symbol which are newly introduced
+ particular release. Note, only symbols which are newly introduced
will use the maximum version definition. Thus, for release series
with the same label, but incremented version definitions, the later
release has both versions. (An example of this would be the
@@ -148,7 +151,7 @@ compatible.
was released, in compressed ISO date format, as an unsigned long.
</p><p>
This macro is defined in the file "c++config" in the
- "libstdc++/include/bits" directory. (Up to gcc-4.1.0, it was
+ "libstdc++-v3/include/bits" directory. (Up to gcc-4.1.0, it was
changed every night by an automated script. Since gcc-4.1.0, it is
the same value as gcc/DATESTAMP.)
</p><p>
@@ -161,7 +164,7 @@ compatible.
is called _GLIBCXX_VERSION).
</p><p>
This macro is defined in the file "c++config" in the
- "libstdc++/include/bits" directory and is generated
+ "libstdc++-v3/include/bits" directory and is generated
automatically by autoconf as part of the configure-time generation
of config.h.
</p><p>
@@ -174,7 +177,7 @@ compatible.
All C++ includes are installed in include/c++, then nest in a
directory hierarchy corresponding to the C++ compiler's released
version. This version corresponds to the variable "gcc_version" in
- "libstdc++/acinclude.m4," and more details can be found in that
+ "libstdc++-v3/acinclude.m4," and more details can be found in that
file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
</p><p>
C++ includes are versioned as follows:
@@ -187,7 +190,8 @@ compatible.
</p></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
Minimum environment that supports a versioned ABI: A supported
dynamic linker, a GNU linker of sufficient vintage to understand
- demangled C++ name globbing (ld), a shared executable compiled
+ demangled C++ name globbing (ld) or the Sun linker, a shared
+ executable compiled
with g++, and shared libraries (libgcc_s, libstdc++) compiled by
a compiler (g++) with a compatible ABI. Phew.
</p><p>
@@ -197,7 +201,7 @@ compatible.
</p><p>
Most modern Linux and BSD versions, particularly ones using
gcc-3.1.x tools and more recent vintages, will meet the
- requirements above.
+ requirements above, as does Solaris 2.5 and up.
</p></div><div class="sect3" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
It turns out that most of the configure options that change
default behavior will impact the mangled names of exported
@@ -205,12 +209,12 @@ compatible.
</p><p>
For more information on configure options, including ABI
impacts, see:
- http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html
+ <a class="link" href="configure.html" title="Configure">here</a>
</p><p>
There is one flag that explicitly deals with symbol versioning:
--enable-symvers.
</p><p>
- In particular, libstdc++/acinclude.m4 has a macro called
+ In particular, libstdc++-v3/acinclude.m4 has a macro called
GLIBCXX_ENABLE_SYMVERS that defaults to yes (or the argument
passed in via --enable-symvers=foo). At that point, the macro
attempts to make sure that all the requirement for symbol
@@ -225,6 +229,7 @@ compatible.
checking versioning on shared library symbols... gnu
</code>
</pre><p>
+ or another of the supported styles.
If you don't see this line in the configure output, or if this line
appears but the last word is 'no', then you are out of luck.
</p><p>
@@ -240,11 +245,11 @@ int main()
%g++ hello.cc -o hello.out
%ldd hello.out
- libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
- libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
- libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000)
- libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
- /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
%nm hello.out
</pre><p>
@@ -252,6 +257,17 @@ If you see symbols in the resulting output with "GLIBCXX_3" as part
of the name, then the executable is versioned. Here's an example:
</p><p>
<code class="code">U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4</code>
+</p><p>
+On Solaris 2, you can use <code class="code">pvs -r</code> instead:
+</p><pre class="programlisting">
+%g++ hello.cc -o hello.out
+
+%pvs -r hello.out
+ libstdc++.so.6 (GLIBCXX_3.4, GLIBCXX_3.4.12);
+ libgcc_s.so.1 (GCC_3.0);
+ libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
+</pre><p>
+<code class="code">ldd -v</code> works too, but is very verbose.
</p></div></div><div class="sect2" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
The following will cause the library minor version number to
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
@@ -271,9 +287,9 @@ number to increase, say from "libstdc++.so.3.0.4" to
</p></li><li class="listitem"><p> Adding an explicit copy constructor or destructor to a
class that would otherwise have implicit versions. This will change
the way the compiler deals with this class in by-value return
-statements or parameters: instead of being passing instances of this
+statements or parameters: instead of passing instances of this
class in registers, the compiler will be forced to use memory. See <a class="ulink" href="http://www.codesourcery.com/cxx-abi/abi.html#calls" target="_top"> this part</a>
- of the C++ ABI documentation for further details.
+ of the C++ ABI documentation for further details.
</p></li></ol></div></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
Separation of interface and implementation
</p><p>
@@ -298,7 +314,7 @@ class in registers, the compiler will be forced to use memory. See <a class="uli
char</code> and <code class="code"> wchar_t</code> instantiations, and
includes <code class="code"> basic_string</code>, the locale facets, and the
types in <code class="code"> iostreams</code>.
- </p></dd></dl></div><p>
+ </p></dd></dl></div><p>
In addition, these techniques have the additional benefit that they
reduce binary size, which can increase runtime performance.
</p></li><li class="listitem"><p>
@@ -329,7 +345,7 @@ standard includes.</p></li></ol></div></div><div class="sect2" title="Testing"><
</p><p>
Testing the C++ compiler ABI can be done various ways.
</p><p>
- One. Intel ABI checker.
+ One. Intel ABI checker.
</p><p>
Two.
The second is yet unreleased, but has been announced on the gcc
@@ -344,18 +360,18 @@ discussed on the gcc mailing lists.
</p><p>
Testing the C++ library ABI can also be done various ways.
</p><p>
-One.
-(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways,
+One.
+(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways,
one with a new compiler and an old library, and the other with an old
compiler and a new library, and look for testsuite regressions)
</p><p>
Details on how to set this kind of test up can be found here:
http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html
</p><p>
-Two.
-Use the 'make check-abi' rule in the libstdc++ Makefile.
+Two.
+Use the 'make check-abi' rule in the libstdc++ Makefile.
</p><p>
-This is a proactive check the library ABI. Currently, exported symbol
+This is a proactive check of the library ABI. Currently, exported symbol
names that are either weak or defined are checked against a last known
good baseline. Currently, this baseline is keyed off of 3.4.0
binaries, as this was the last time the .so number was incremented. In
@@ -372,7 +388,7 @@ machinery.
</p><p>
This dataset is insufficient, yet a start. Also needed is a
comprehensive check for all user-visible types part of the standard
-library for sizeof() and alignof() changes.
+library for sizeof() and alignof() changes.
</p><p>
Verifying compatible layouts of objects is not even attempted. It
should be possible to use sizeof, alignof, and offsetof to compute
@@ -384,13 +400,13 @@ Another approach might be to use the -fdump-class-hierarchy flag to
get information. However, currently this approach gives insufficient
data for use in library testing, as class data members, their offsets,
and other detailed data is not displayed with this flag.
-(See g++/7470 on how this was used to find bugs.)
+(See PR g++/7470 on how this was used to find bugs.)
</p><p>
Perhaps there are other C++ ABI checkers. If so, please notify
us. We'd like to know about them!
</p></div><div class="sect3" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
A "C" application, dynamically linked to two shared libraries, liba,
-libb. The dependent library liba is C++ shared library compiled with
+libb. The dependent library liba is a C++ shared library compiled with
gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
libb is a C++ shared library compiled with gcc-3.4.x, and also uses io,
exceptions, locale, etc.
@@ -403,7 +419,7 @@ exceptions, locale, etc.
%$bld/H-x86-gcc-3.4.0/bin/g++ -c a.cc
-%ar cru libone.a a.o
+%ar cru libone.a a.o
</pre><p> And, libtwo is constructed as follows: </p><pre class="programlisting">
%$bld/H-x86-gcc-3.3.3/bin/g++ -fPIC -DPIC -c b.cc
@@ -413,24 +429,24 @@ exceptions, locale, etc.
%$bld/H-x86-gcc-3.3.3/bin/g++ -c b.cc
-%ar cru libtwo.a b.o
+%ar cru libtwo.a b.o
</pre><p> ...with the resulting libraries looking like </p><pre class="screen">
<code class="computeroutput">
%ldd libone.so.1.0.0
- libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000)
- libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000)
- libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000)
- libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000)
- /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
%ldd libtwo.so.1.0.0
- libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000)
- libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000)
- libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000)
- libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000)
- /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
</code>
-</pre><p>
+</pre><p>
Then, the "C" compiler is used to compile a source file that uses
functions from each library.
</p><pre class="programlisting">
@@ -440,18 +456,18 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</p><pre class="screen">
<code class="computeroutput">
%ldd a.out
- libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
- libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000)
- libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
- libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
- libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000)
- /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
</code>
</pre><p>
This resulting binary, when executed, will be able to safely use
code from both liba, and the dependent libstdc++.so.6, and libb,
with the dependent libstdc++.so.5.
-</p></div></div><div class="sect2" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
+</p></div></div><div class="sect2" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
Some features in the C++ language make versioning especially
difficult. In particular, compiler generated constructs such as
implicit instantiations for templates, typeinfo information, and
@@ -464,60 +480,71 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<a class="ulink" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a>
</p><p>
<a class="ulink" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
-</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="ABIcheck, a vague idea of checking ABI compatibility"><a id="id725008"></a><p><span class="title"><i>
- ABIcheck, a vague idea of checking ABI compatibility
- </i>. </span><span class="biblioid">
+</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id396917"></a><p><span class="biblioid">
<a class="ulink" href="http://abicheck.sourceforge.net/" target="_top">
+ <em class="citetitle">
+ ABIcheck, a vague idea of checking ABI compatibility
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="C++ ABI Reference"><a id="id725026"></a><p><span class="title"><i>
- C++ ABI Reference
- </i>. </span><span class="biblioid">
+ . </span></p></div><div class="biblioentry"><a id="id396937"></a><p><span class="biblioid">
<a class="ulink" href="http://www.codesourcery.com/public/cxx-abi/" target="_top">
+ <em class="citetitle">
+ C++ ABI Reference
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Intel® Compilers for Linux* -Compatibility with the GNU Compilers"><a id="id725043"></a><p><span class="title"><i>
- Intel® Compilers for Linux* -Compatibility with the GNU Compilers
- </i>. </span><span class="biblioid">
+ . </span></p></div><div class="biblioentry"><a id="id396956"></a><p><span class="biblioid">
<a class="ulink" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
+ <em class="citetitle">
+ Intel Compilers for Linux Compatibility with the GNU Compilers
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386)"><a id="id725060"></a><p><span class="title"><i>
- Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386)
- </i>. </span><span class="biblioid">
- <a class="ulink" href="http://docs.sun.com/app/docs/doc/817-1984" target="_top">
+ . </span></p></div><div class="biblioentry"><a id="id396976"></a><p><span class="biblioid">
+ <a class="ulink" href="http://docs.sun.com/app/docs/doc/819-0690" target="_top">
+ <em class="citetitle">
+ Linker and Libraries Guide (document 819-0690)
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Sun Solaris 2.9 : C++ Migration Guide (document 816-2459)"><a id="id725077"></a><p><span class="title"><i>
- Sun Solaris 2.9 : C++ Migration Guide (document 816-2459)
- </i>. </span><span class="biblioid">
- <a class="ulink" href="http://docs.sun.com/app/docs/doc/819-5266" target="_top">
+ . </span></p></div><div class="biblioentry"><a id="id396995"></a><p><span class="biblioid">
+ <a class="ulink" href="http://docs.sun.com/app/docs/doc/819-3689" target="_top">
+ <em class="citetitle">
+ Sun Studio 11: C++ Migration Guide (document 819-3689)
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="How to Write Shared Libraries"><a id="id725094"></a><p><span class="title"><i>
- How to Write Shared Libraries
- </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="biblioid">
+ . </span></p></div><div class="biblioentry"><a id="id397015"></a><p><span class="biblioid">
<a class="ulink" href="http://people.redhat.com/drepper/dsohowto.pdf" target="_top">
+ <em class="citetitle">
+ How to Write Shared Libraries
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="C++ ABI for the ARM Architecture"><a id="id725122"></a><p><span class="title"><i>
- C++ ABI for the ARM Architecture
- </i>. </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="id397046"></a><p><span class="biblioid">
<a class="ulink" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
+ <em class="citetitle">
+ C++ ABI for the ARM Architecture
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Dynamic Shared Objects: Survey and Issues"><a id="id651420"></a><p><span class="title"><i>
- Dynamic Shared Objects: Survey and Issues
- </i>. </span><span class="subtitle">
- ISO C++ J16/06-0046
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span><span class="biblioid">
+ . </span></p></div><div class="biblioentry"><a id="id397065"></a><p><span class="biblioid">
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
+ <em class="citetitle">
+ Dynamic Shared Objects: Survey and Issues
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Versioning With Namespaces"><a id="id651453"></a><p><span class="title"><i>
- Versioning With Namespaces
- </i>. </span><span class="subtitle">
- ISO C++ J16/06-0083
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span><span class="biblioid">
+ . </span><span class="subtitle">
+ ISO C++ J16/06-0046
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id397100"></a><p><span class="biblioid">
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
+ <em class="citetitle">
+ Versioning With Namespaces
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems"><a id="id651486"></a><p><span class="title"><i>
- Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems
- </i>. </span><span class="subtitle">
-SYRCoSE 2009
- . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span><span class="biblioid">
+ . </span><span class="subtitle">
+ ISO C++ J16/06-0083
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="id397135"></a><p><span class="biblioid">
<a class="ulink" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
+ <em class="citetitle">
+ Binary Compatibility of Shared Libraries Implemented in C++
+ on GNU/Linux Systems
+ </em>
</a>
- . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
+ . </span><span class="subtitle">
+ SYRCoSE 2009
+ . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/algorithms.html b/libstdc++-v3/doc/html/manual/algorithms.html
index 6049cd8ec0e..d72518a6d70 100644
--- a/libstdc++-v3/doc/html/manual/algorithms.html
+++ b/libstdc++-v3/doc/html/manual/algorithms.html
@@ -1,9 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IX.  Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt08ch19s02.html" title="One Past the End" /><link rel="next" href="bk01pt09pr02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IX. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
Algorithms
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt08ch19s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt09pr02.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part IX.  Algorithms"><div class="titlepage"><div><div><h1 class="title"><a id="manual.algorithms"></a>Part IX. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11.  Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
Algorithms
- <a id="id638163" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt09pr02.html"></a></span></dt><dt><span class="chapter"><a href="bk01pt09ch20.html">20. Mutating</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt09ch20.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt09ch20.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt08ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt09pr02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">One Past the End </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+ <a id="id511298" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></div><p>
+ The neatest accomplishment of the algorithms sect1 is that all the
+ work is done via iterators, not containers directly. This means two
+ important things:
+</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Anything that behaves like an iterator can be used in one of
+ these algorithms. Raw pointers make great candidates, thus
+ built-in arrays are fine containers, as well as your own
+ iterators.
+ </p></li><li class="listitem"><p>
+ The algorithms do not (and cannot) affect the container as a
+ whole; only the things between the two iterator endpoints. If
+ you pass a range of iterators only enclosing the middle third of
+ a container, then anything outside that range is inviolate.
+ </p></li></ol></div><p>
+ Even strings can be fed through the algorithms here, although the
+ string class has specialized versions of many of these functions
+ (for example, <code class="code">string::find()</code>). Most of the examples
+ on this page will use simple arrays of integers as a playground
+ for algorithms, just to keep things simple. The use of
+ <span class="emphasis"><em>N</em></span> as a size in the examples is to keep things
+ easy to read but probably won't be valid code. You can use wrappers
+ such as those described in
+ the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers sect1</a> to keep
+ real code readable.
+</p><p>
+ The single thing that trips people up the most is the definition
+ of <span class="emphasis"><em>range</em></span> used with iterators; the famous
+ "past-the-end" rule that everybody loves to hate. The
+ <a class="link" href="iterators.html" title="Chapter 10.  Iterators">iterators sect1</a> of this
+ document has a complete explanation of this simple rule that seems
+ to cause so much confusion. Once you
+ get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
+ honest!), then the algorithms are a cakewalk.
+</p><div class="sect1" title="Mutating"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="sect2" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="sect3" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
+ containers, then the call will automatically be replaced by a call to
+ <code class="code"> x.swap(y); </code> instead.
+ </p><p>This allows member functions of each container class to take over, and
+ containers' swap functions should have O(1) complexity according to
+ the standard. (And while "should" allows implementations to
+ behave otherwise and remain compliant, this implementation does in
+ fact use constant-time swaps.) This should not be surprising, since
+ for two containers of the same type to swap contents, only some
+ internal pointers to storage need to be exchanged.
+ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10. 
+ Iterators
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. 
+ Numerics
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html
index 0b70a4cb1bc..d53fa3ebb65 100644
--- a/libstdc++-v3/doc/html/manual/api.html
+++ b/libstdc++-v3/doc/html/manual/api.html
@@ -30,8 +30,8 @@ Removal of <code class="filename">ext/tree</code>, moved to <code class="filenam
</p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
<code class="literal">__USE_MALLOC</code> on the gcc command line would change the
default allocation strategy to instead use <code class="code"> malloc</code> and
- <code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
- <a class="link" href="using_macros.html" title="Macros">this page</a>
+ <code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
+ <a class="link" href="using_macros.html" title="Macros">this page</a>
for details.
</p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="sect2" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
</p></div><div class="sect2" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
@@ -75,11 +75,11 @@ _Alloc_traits</code> have been removed.
<span class="type">__alloc</span> to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
- </p><div class="table"><a id="id653273"></a><p class="title"><b>Table B.1. Extension Allocators</b></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+ </p><div class="table"><a id="id510444"></a><p class="title"><b>Table B.1. Extension Allocators</b></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
of available allocators. All of these new allocators are
standard-style. The following table includes details, along with
the first released version of GCC that included the extension allocator.
- </p><div class="table"><a id="id594438"></a><p class="title"><b>Table B.2. Extension Allocators Continued</b></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="id396448"></a><p class="title"><b>Table B.2. Extension Allocators Continued</b></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
Debug mode first appears.
</p><p>
Precompiled header support <acronym class="acronym">PCH</acronym> support.
@@ -143,13 +143,13 @@ Debug mode for <code class="filename">unordered_map</code> and <code class="file
</p><p>
Parallel mode first appears.
</p><p>Variadic template implementations of items in <code class="filename">tuple</code> and
- <code class="filename">functional</code>.
+ <code class="filename">functional</code>.
</p><p>Default <code class="code">what</code> implementations give more elaborate
exception strings for <code class="code">bad_cast</code>,
<code class="code">bad_typeid</code>, <code class="code">bad_exception</code>, and
<code class="code">bad_alloc</code>.
</p><p>
-PCH binary files no longer installed. Instead, the source files are installed.
+PCH binary files no longer installed. Instead, the source files are installed.
</p><p>
Namespace pb_ds moved to __gnu_pb_ds.
</p></div><div class="sect2" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
@@ -227,7 +227,7 @@ C++0X features.
</p></li></ul></div><p>
Profile mode first appears.
</p><p>
-Support for decimal floating-point arithmetic, including <code class="classname">decimal32</code>, <code class="classname">decimal64</code>, and <code class="classname">decimal128</code>.
+Support for decimal floating-point arithmetic, including <code class="classname">decimal32</code>, <code class="classname">decimal64</code>, and <code class="classname">decimal128</code>.
</p><p>
Python pretty-printers are added for use with appropriately-advanced versions of <span class="command"><strong>gdb</strong></span>.
</p><p>
diff --git a/libstdc++-v3/doc/html/manual/appendix_contributing.html b/libstdc++-v3/doc/html/manual/appendix_contributing.html
index 422b57a813e..fff5258f25a 100644
--- a/libstdc++-v3/doc/html/manual/appendix_contributing.html
+++ b/libstdc++-v3/doc/html/manual/appendix_contributing.html
@@ -1,17 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt12ch41s03.html" title="Use" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
Contributing
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch41s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.contrib"></a>Appendix A. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.contrib"></a>Appendix A. 
Contributing
- <a id="id598653" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
+ <a id="id431932" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.combines">Combines</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
The GNU C++ Library follows an open development model. Active
contributors are assigned maintainer-ship responsibility, and given
write access to the source repository. First time contributors
should follow this procedure:
-</p><div class="sect1" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="sect2" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+</p><div class="sect1" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="sect2" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Get and read the relevant sections of the C++ language
specification. Copies of the full ISO 14882 standard are
available on line via the ISO mirror site for committee
@@ -21,29 +23,29 @@
the standard from their respective national standards
organization. In the USA, this national standards
organization is ANSI and their web-site is right
- <a class="ulink" href="http://www.ansi.org" target="_top">here.</a>
- (And if you've already registered with them, clicking this link will take you to directly to the place where you can
- <a class="ulink" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003" target="_top">buy the standard on-line.)</a>
- </p></li><li class="listitem"><p>
+ <a class="ulink" href="http://www.ansi.org" target="_top">here.</a>
+ (And if you've already registered with them, clicking this link will take you to directly to the place where you can
+ <a class="ulink" href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003" target="_top">buy the standard on-line</a>.)
+ </p></li><li class="listitem"><p>
The library working group bugs, and known defects, can
be obtained here:
<a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/" target="_top">http://www.open-std.org/jtc1/sc22/wg21 </a>
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
The newsgroup dedicated to standardization issues is
comp.std.c++: this FAQ for this group is quite useful and
can be
found <a class="ulink" href="http://www.comeaucomputing.com/csc/faq.html" target="_top">
here </a>.
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
Peruse
the <a class="ulink" href="http://www.gnu.org/prep/standards" target="_top">GNU
Coding Standards</a>, and chuckle when you hit the part
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>â€</span>.
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
Be familiar with the extensions that preceded these
general GNU rules. These style issues for libstdc++ can be
found <a class="link" href="source_code_style.html" title="Coding Style">here</a>.
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
And last but certainly not least, read the
library-specific information
found <a class="link" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance"> here</a>.
@@ -51,8 +53,8 @@
Small changes can be accepted without a copyright assignment form on
file. New code and additions to the library need completed copyright
assignment form on file at the FSF. Note: your employer may be required
- to fill out appropriate disclaimer forms as well.
- </p><p>
+ to fill out appropriate disclaimer forms as well.
+ </p><p>
Historically, the libstdc++ assignment form added the following
question:
</p><p>
@@ -64,7 +66,7 @@
While not strictly necessary, humoring the maintainers and answering
this question would be appreciated.
</p><p>
- For more information about getting a copyright assignment, please see
+ For more information about getting a copyright assignment, please see
<a class="ulink" href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html" target="_top">Legal
Matters</a>.
</p><p>
@@ -81,22 +83,22 @@
Every patch must have several pieces of information before it can be
properly evaluated. Ideally (and to ensure the fastest possible
response from the maintainers) it would have all of these pieces:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
A description of the bug and how your patch fixes this
bug. For new features a description of the feature and your
- implementation.
- </p></li><li class="listitem"><p>
+ implementation.
+ </p></li><li class="listitem"><p>
A ChangeLog entry as plain text; see the various
ChangeLog files for format and content. If you are
using emacs as your editor, simply position the insertion
point at the beginning of your change and hit CX-4a to bring
up the appropriate ChangeLog entry. See--magic! Similar
- functionality also exists for vi.
- </p></li><li class="listitem"><p>
+ functionality also exists for vi.
+ </p></li><li class="listitem"><p>
A testsuite submission or sample program that will
easily and simply show the existing error or test new
- functionality.
- </p></li><li class="listitem"><p>
+ functionality.
+ </p></li><li class="listitem"><p>
The patch itself. If you are accessing the SVN
repository use <span class="command"><strong>svn update; svn diff NEW</strong></span>;
else, use <span class="command"><strong>diff -cp OLD NEW</strong></span> ... If your
@@ -105,9 +107,11 @@
diff. The <a class="ulink" href="http://gcc.gnu.org/wiki/SvnTricks" target="_top">SVN
Tricks</a> wiki page has information on customising the
output of <code class="code">svn diff</code>.
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
When you have all these pieces, bundle them up in a
mail message and send it to libstdc++@gcc.gnu.org. All
patches and related discussion should be sent to the
- libstdc++ mailing list.
- </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch41s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Use </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
+ libstdc++ mailing list.
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. 
+ Appendices
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_free.html b/libstdc++-v3/doc/html/manual/appendix_free.html
index dd77c972f07..847d386aacb 100644
--- a/libstdc++-v3/doc/html/manual/appendix_free.html
+++ b/libstdc++-v3/doc/html/manual/appendix_free.html
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
Free Software Needs Free Documentation
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.free"></a>Appendix C. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.free"></a>Appendix C. 
Free Software Needs Free Documentation
- <a id="id702684" class="indexterm"></a>
+ <a id="id381354" class="indexterm"></a>
</h2></div></div></div><p>
The biggest deficiency in free operating systems is not in the
software--it is the lack of good free manuals that we can include in
@@ -35,7 +37,7 @@ restrict it so that we cannot use it.
</p><p>
Given that writing good English is a rare skill among programmers, we
can ill afford to lose manuals this way.
-</p><p>
+</p><p>
Free documentation, like free software, is a matter of freedom,
not price. The problem with these manuals was not that O'Reilly
Associates charged a price for printed copies--that in itself is fine.
@@ -119,6 +121,6 @@ prefer copylefted manuals to non-copylefted ones.
that lists free books available from other publishers</a>].
</p><p>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</p><p>Verbatim copying and distribution of this entire article are
permitted worldwide, without royalty, in any medium, provided this
-notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix D. 
+notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_gfdl.html b/libstdc++-v3/doc/html/manual/appendix_gfdl.html
index 6b6e69ea86d..ab34a73c02a 100644
--- a/libstdc++-v3/doc/html/manual/appendix_gfdl.html
+++ b/libstdc++-v3/doc/html/manual/appendix_gfdl.html
@@ -1,148 +1,154 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="bk01ix01.html" title="Index" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01ix01.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gfdl-1.2"></a>Appendix E. GNU Free Documentation License</h2></div></div></div><p>
- Copyright (C) 2000, 2001, 2002 Free Software Foundation,
- <abbr class="abbrev">Inc.</abbr> 51 Franklin <abbr class="abbrev">St</abbr>, Fifth Floor,
- Boston, <abbr class="abbrev">MA</abbr> 02110-1301 <abbr class="abbrev">USA</abbr>. Everyone is permitted to copy and
- distribute verbatim copies of this license document, but changing it is
- not allowed.
- </p><h2><a id="fdl-1-preamble"></a>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gfdl-1.3"></a>Appendix E. GNU Free Documentation License</h2></div></div></div><p>Version 1.3, 3 November 2008</p><p>
+ Copyright © 2000, 2001, 2002, 2007, 2008
+ <a class="ulink" href="http://www.fsf.org/" target="_top">Free Software Foundation, Inc.</a>
+ </p><p>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ </p><h3><a id="fdl-1-section0"></a>
0. PREAMBLE
- </h2><p>
+ </h3><p>
The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to assure
- everyone the effective freedom to copy and redistribute it, with or
- without modifying it, either commercially or noncommercially.
- Secondarily, this License preserves for the author and publisher a way to
- get credit for their work, while not being considered responsible for
- modifications made by others.
- </p><p>
- This License is a kind of "copyleft", which means that derivative works of
- the document must themselves be free in the same sense. It complements
- the GNU General Public License, which is a copyleft license designed for
- free software.
+ functional and useful document “free†in the sense of freedom:
+ to assure everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the author and
+ publisher a way to get credit for their work, while not being considered
+ responsible for modifications made by others.
+ </p><p>
+ This License is a kind of “copyleftâ€, which means that
+ derivative works of the document must themselves be free in the same
+ sense. It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
</p><p>
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free program
should come with manuals providing the same freedoms that the software
- does. But this License is not limited to software manuals; it can be used
+ does. But this License is not limited to software manuals; it can be used
for any textual work, regardless of subject matter or whether it is
- published as a printed book. We recommend this License principally for
- works whose purpose is instruction or reference.</p><h2><a id="fdl-1-definitions"></a>
+ published as a printed book. We recommend this License principally for
+ works whose purpose is instruction or reference.
+ </p><h3><a id="fdl-1-section1"></a>
1. APPLICABILITY AND DEFINITIONS
- </h2><p>
+ </h3><p>
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
- distributed under the terms of this License. Such a notice grants a
+ distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that work
- under the conditions stated herein. The "Document", below, refers to any
- such manual or work. Any member of the public is a licensee, and is
- addressed as "you". You accept the license if you copy, modify or
- distribute the work in a way requiring permission under copyright
- law.
- </p><p>
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with modifications
- and/or translated into another language.
- </p><p>
- A "Secondary Section" is a named appendix or a front-matter section of the
- Document that deals exclusively with the relationship of the publishers or
- authors of the Document to the Document's overall subject (or to related
- matters) and contains nothing that could fall directly within that overall
- subject. (Thus, if the Document is in part a textbook of mathematics, a
- Secondary Section may not explain any mathematics.) The relationship
- could be a matter of historical connection with the subject or with
- related matters, or of legal, commercial, philosophical, ethical or
- political position regarding them.
- </p><p>
- The "Invariant Sections" are certain Secondary Sections whose titles are
- designated, as being those of Invariant Sections, in the notice that says
- that the Document is released under this License. If a section does not
- fit the above definition of Secondary then it is not allowed to be
- designated as Invariant. The Document may contain zero Invariant
- Sections. If the Document does not identify any Invariant Sections then
+ under the conditions stated herein. The “Documentâ€, below,
+ refers to any such manual or work. Any member of the public is a licensee,
+ and is addressed as “youâ€. You accept the license if you copy,
+ modify or distribute the work in a way requiring permission under
+ copyright law.
+ </p><p>
+ A “Modified Version†of the Document means any work containing
+ the Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ </p><p>
+ A “Secondary Section†is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship of
+ the publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.) The relationship could be a matter of historical connection
+ with the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+ </p><p>
+ The “Invariant Sections†are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License. If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant. The Document may contain zero Invariant
+ Sections. If the Document does not identify any Invariant Sections then
there are none.
</p><p>
- The "Cover Texts" are certain short passages of text that are listed, as
- Front-Cover Texts or Back-Cover Texts, in the notice that says that the
- Document is released under this License. A Front-Cover Text may be at
- most 5 words, and a Back-Cover Text may be at most 25 words.
- </p><p>
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the general
- public, that is suitable for revising the document straightforwardly with
- generic text editors or (for images composed of pixels) generic paint
- programs or (for drawings) some widely available drawing editor, and that
- is suitable for input to text formatters or for automatic translation to a
- variety of formats suitable for input to text formatters. A copy made in
- an otherwise Transparent file format whose markup, or absence of markup,
- has been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if used
- for any substantial amount of text. A copy that is not "Transparent" is
- called "Opaque".
+ The “Cover Texts†are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says
+ that the Document is released under this License. A Front-Cover Text may
+ be at most 5 words, and a Back-Cover Text may be at most 25 words.
+ </p><p>
+ A “Transparent†copy of the Document means a machine-readable
+ copy, represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or for
+ automatic translation to a variety of formats suitable for input to text
+ formatters. A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A copy that is
+ not “Transparent†is called “Opaqueâ€.
</p><p>
Examples of suitable formats for Transparent copies include plain ASCII
without markup, Texinfo input format, LaTeX input format, SGML or XML
using a publicly available DTD, and standard-conforming simple HTML,
- PostScript or PDF designed for human modification. Examples of
- transparent image formats include PNG, XCF and JPG. Opaque formats
- include proprietary formats that can be read and edited only by
- proprietary word processors, SGML or XML for which the DTD and/or
- processing tools are not generally available, and the machine-generated
- HTML, PostScript or PDF produced by some word processors for output
- purposes only.
- </p><p>
- The "Title Page" means, for a printed book, the title page itself, plus
- such following pages as are needed to hold, legibly, the material this
- License requires to appear in the title page. For works in formats which
- do not have any title page as such, "Title Page" means the text near the
- most prominent appearance of the work's title, preceding the beginning of
- the body of the text.
- </p><p>
- A section "Entitled XYZ" means a named subunit of the Document whose title
- either is precisely XYZ or contains XYZ in parentheses following text that
- translates XYZ in another language. (Here XYZ stands for a specific
- section name mentioned below, such as "Acknowledgements", "Dedications",
- "Endorsements", or "History".) To "Preserve the Title" of such a section
- when you modify the Document means that it remains a section "Entitled
- XYZ" according to this definition.
+ PostScript or PDF designed for human modification. Examples of transparent
+ image formats include PNG, XCF and JPG. Opaque formats include proprietary
+ formats that can be read and edited only by proprietary word processors,
+ SGML or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF produced by
+ some word processors for output purposes only.
+ </p><p>
+ The “Title Page†means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For works in
+ formats which do not have any title page as such, “Title Pageâ€
+ means the text near the most prominent appearance of the work’s
+ title, preceding the beginning of the body of the text.
+ </p><p>
+ The “publisher†means any person or entity that distributes
+ copies of the Document to the public.
+ </p><p>
+ A section “Entitled XYZ†means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ stands
+ for a specific section name mentioned below, such as
+ “Acknowledgementsâ€, “Dedicationsâ€,
+ “Endorsementsâ€, or “Historyâ€.) To “Preserve
+ the Title†of such a section when you modify the Document means that
+ it remains a section “Entitled XYZ†according to this
+ definition.
</p><p>
The Document may include Warranty Disclaimers next to the notice which
- states that this License applies to the Document. These Warranty
+ states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this License,
but only as regards disclaiming warranties: any other implication that
these Warranty Disclaimers may have is void and has no effect on the
meaning of this License.
- </p><h2><a id="VerbatimCopying"></a>
+ </p><h3><a id="fdl-1-section2"></a>
2. VERBATIM COPYING
- </h2><p>
+ </h3><p>
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the copyright
notices, and the license notice saying this License applies to the
Document are reproduced in all copies, and that you add no other
- conditions whatsoever to those of this License. You may not use technical
+ conditions whatsoever to those of this License. You may not use technical
measures to obstruct or control the reading or further copying of the
- copies you make or distribute. However, you may accept compensation in
- exchange for copies. If you distribute a large enough number of copies
- you must also follow the conditions in section 3.
+ copies you make or distribute. However, you may accept compensation in
+ exchange for copies. If you distribute a large enough number of copies you
+ must also follow the conditions in section 3.
</p><p>
You may also lend copies, under the same conditions stated above, and you
may publicly display copies.
- </p><h2><a id="QuantityCopying"></a>
+ </p><h3><a id="fdl-1-section3"></a>
3. COPYING IN QUANTITY
- </h2><p>
+ </h3><p>
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
- Document's license notice requires Cover Texts, you must enclose the
- copies in covers that carry, clearly and legibly, all these Cover Texts:
- Front-Cover Texts on the front cover, and Back-Cover Texts on the back
- cover. Both covers must also clearly and legibly identify you as the
- publisher of these copies. The front cover must present the full title
- with all words of the title equally prominent and visible. You may add
- other material on the covers in addition. Copying with changes limited to
+ Document’s license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
+ back cover. Both covers must also clearly and legibly identify you as the
+ publisher of these copies. The front cover must present the full title
+ with all words of the title equally prominent and visible. You may add
+ other material on the covers in addition. Copying with changes limited to
the covers, as long as they preserve the title of the Document and satisfy
- these conditions, can be treated as verbatim copying in other
- respects.
+ these conditions, can be treated as verbatim copying in other respects.
</p><p>
If the required texts for either cover are too voluminous to fit legibly,
you should put the first ones listed (as many as fit reasonably) on the
@@ -153,7 +159,7 @@
along with each Opaque copy, or state in or with each Opaque copy a
computer-network location from which the general network-using public has
access to download using public-standard network protocols a complete
- Transparent copy of the Document, free of added material. If you use the
+ Transparent copy of the Document, free of added material. If you use the
latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent
copy will remain thus accessible at the stated location until at least one
@@ -162,24 +168,23 @@
</p><p>
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
- them a chance to provide you with an updated version of the
- Document.
- </p><h2><a id="Modifications"></a>
+ them a chance to provide you with an updated version of the Document.
+ </p><h3><a id="fdl-1-section4"></a>
4. MODIFICATIONS
- </h2><p>
+ </h3><p>
You may copy and distribute a Modified Version of the Document under the
conditions of sections 2 and 3 above, provided that you release the
Modified Version under precisely this License, with the Modified Version
filling the role of the Document, thus licensing distribution and
- modification of the Modified Version to whoever possesses a copy of it.
- In addition, you must do these things in the Modified Version:
+ modification of the Modified Version to whoever possesses a copy of it. In
+ addition, you must do these things in the Modified Version:
</p><div class="orderedlist"><ol class="orderedlist" type="A"><li class="listitem">
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions (which
should, if there were any, be listed in the History section of the
- Document). You may use the same title as a previous version if the
+ Document). You may use the same title as a previous version if the
original publisher of that version gives permission.
- </li><li class="listitem">
+ </li><li class="listitem">
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
@@ -199,60 +204,63 @@
terms of this License, in the form shown in the Addendum below.
</li><li class="listitem">
Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
+ and required Cover Texts given in the Document’s license
+ notice.
</li><li class="listitem">
Include an unaltered copy of this License.
</li><li class="listitem">
- Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
+ Preserve the section Entitled “Historyâ€, Preserve its
+ Title, and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the Title
+ Page. If there is no section Entitled “History†in the
+ Document, create one stating the title, year, authors, and publisher
+ of the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous sentence.
</li><li class="listitem">
Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise the
network locations given in the Document for previous versions it was
- based on. These may be placed in the "History" section. You may omit
- a network location for a work that was published at least four years
- before the Document itself, or if the original publisher of the
- version it refers to gives permission.
+ based on. These may be placed in the “Historyâ€
+ section. You may omit a network location for a work that was published
+ at least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
</li><li class="listitem">
- For any section Entitled "Acknowledgements" or "Dedications", Preserve
- the Title of the section, and preserve in the section all the
- substance and tone of each of the contributor acknowledgements and/or
- dedications given therein.
+ For any section Entitled “Acknowledgements†or
+ “Dedicationsâ€, Preserve the Title of the section, and
+ preserve in the section all the substance and tone of each of the
+ contributor acknowledgements and/or dedications given therein.
</li><li class="listitem">
Preserve all the Invariant Sections of the Document, unaltered in
- their text and in their titles. Section numbers or the equivalent are
+ their text and in their titles. Section numbers or the equivalent are
not considered part of the section titles.
</li><li class="listitem">
- Delete any section Entitled "Endorsements". Such a section may not be
- included in the Modified Version.
+ Delete any section Entitled “Endorsementsâ€. Such a section
+ may not be included in the Modified Version.
</li><li class="listitem">
- Do not retitle any existing section to be Entitled "Endorsements" or
- to conflict in title with any Invariant Section.
+ Do not retitle any existing section to be Entitled
+ “Endorsements†or to conflict in title with any Invariant
+ Section.
</li><li class="listitem">
Preserve any Warranty Disclaimers.
</li></ol></div><p>
If the Modified Version includes new front-matter sections or appendices
that qualify as Secondary Sections and contain no material copied from the
Document, you may at your option designate some or all of these sections
- as invariant. To do this, add their titles to the list of Invariant
- Sections in the Modified Version's license notice. These titles must be
- distinct from any other section titles.
+ as invariant. To do this, add their titles to the list of Invariant
+ Sections in the Modified Version’s license notice. These titles
+ must be distinct from any other section titles.
</p><p>
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various parties--for
- example, statements of peer review or that the text has been approved by
- an organization as the authoritative definition of a standard.
+ You may add a section Entitled “Endorsementsâ€, provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties — for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative definition of a
+ standard.
</p><p>
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list of
- Cover Texts in the Modified Version. Only one passage of Front-Cover Text
+ Cover Texts in the Modified Version. Only one passage of Front-Cover Text
and one of Back-Cover Text may be added by (or through arrangements made
- by) any one entity. If the Document already includes a cover text for the
+ by) any one entity. If the Document already includes a cover text for the
same cover, previously added by you or by arrangement made by the same
entity you are acting on behalf of, you may not add another; but you may
replace the old one, on explicit permission from the previous publisher
@@ -261,9 +269,9 @@
The author(s) and publisher(s) of the Document do not by this License give
permission to use their names for publicity for or to assert or imply
endorsement of any Modified Version.
- </p><h2><a id="Combining"></a>
+ </p><h3><a id="fdl-1-section5"></a>
5. COMBINING DOCUMENTS
- </h2><p>
+ </h3><p>
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified versions,
provided that you include in the combination all of the Invariant Sections
@@ -272,22 +280,23 @@
you preserve all their Warranty Disclaimers.
</p><p>
The combined work need only contain one copy of this License, and multiple
- identical Invariant Sections may be replaced with a single copy. If there
+ identical Invariant Sections may be replaced with a single copy. If there
are multiple Invariant Sections with the same name but different contents,
make the title of each such section unique by adding at the end of it, in
parentheses, the name of the original author or publisher of that section
- if known, or else a unique number. Make the same adjustment to the
- section titles in the list of Invariant Sections in the license notice of
- the combined work.
- </p><p>
- In the combination, you must combine any sections Entitled "History" in
- the various original documents, forming one section Entitled "History";
- likewise combine any sections Entitled "Acknowledgements", and any
- sections Entitled "Dedications". You must delete all sections Entitled
- "Endorsements".
- </p><h2><a id="Collections"></a>
+ if known, or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of the
+ combined work.
+ </p><p>
+ In the combination, you must combine any sections Entitled
+ “History†in the various original documents, forming one
+ section Entitled “Historyâ€; likewise combine any sections
+ Entitled “Acknowledgementsâ€, and any sections Entitled
+ “Dedicationsâ€. You must delete all sections Entitled
+ “Endorsementsâ€.
+ </p><h3><a id="fdl-1-section6"></a>
6. COLLECTIONS OF DOCUMENTS
- </h2><p>
+ </h3><p>
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
@@ -298,90 +307,135 @@
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all other
respects regarding verbatim copying of that document.
- </p><h2><a id="Aggregation"></a>
+ </p><h3><a id="fdl-1-section7"></a>
7. AGGREGATION WITH INDEPENDENT WORKS
- </h2><p>
+ </h3><p>
A compilation of the Document or its derivatives with other separate and
independent documents or works, in or on a volume of a storage or
- distribution medium, is called an "aggregate" if the copyright resulting
- from the compilation is not used to limit the legal rights of the
- compilation's users beyond what the individual works permit. When the
- Document is included in an aggregate, this License does not apply to the
- other works in the aggregate which are not themselves derivative works of
- the Document.
+ distribution medium, is called an “aggregate†if the copyright
+ resulting from the compilation is not used to limit the legal rights of
+ the compilation’s users beyond what the individual works
+ permit. When the Document is included in an aggregate, this License does
+ not apply to the other works in the aggregate which are not themselves
+ derivative works of the Document.
</p><p>
If the Cover Text requirement of section 3 is applicable to these copies
of the Document, then if the Document is less than one half of the entire
- aggregate, the Document's Cover Texts may be placed on covers that bracket
- the Document within the aggregate, or the electronic equivalent of covers
- if the Document is in electronic form. Otherwise they must appear on
- printed covers that bracket the whole aggregate.
- </p><h2><a id="Translation"></a>
+ aggregate, the Document’s Cover Texts may be placed on covers that
+ bracket the Document within the aggregate, or the electronic equivalent of
+ covers if the Document is in electronic form. Otherwise they must appear
+ on printed covers that bracket the whole aggregate.
+ </p><h3><a id="fdl-1-section8"></a>
8. TRANSLATION
- </h2><p>
+ </h3><p>
Translation is considered a kind of modification, so you may distribute
- translations of the Document under the terms of section 4. Replacing
+ translations of the Document under the terms of section 4. Replacing
Invariant Sections with translations requires special permission from
their copyright holders, but you may include translations of some or all
Invariant Sections in addition to the original versions of these Invariant
- Sections. You may include a translation of this License, and all the
+ Sections. You may include a translation of this License, and all the
license notices in the Document, and any Warranty Disclaimers, provided
that you also include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
+ original versions of those notices and disclaimers. In case of a
disagreement between the translation and the original version of this
License or a notice or disclaimer, the original version will prevail.
</p><p>
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to Preserve its
- Title (section 1) will typically require changing the actual title.
- </p><h2><a id="fdl-1-termination"></a>
+ If a section in the Document is Entitled “Acknowledgementsâ€,
+ “Dedicationsâ€, or “Historyâ€, the requirement
+ (section 4) to Preserve its Title (section 1) will typically require
+ changing the actual title.
+ </p><h3><a id="fdl-1-section9"></a>
9. TERMINATION
- </h2><p>
+ </h3><p>
You may not copy, modify, sublicense, or distribute the Document except as
- expressly provided for under this License. Any other attempt to copy,
- modify, sublicense or distribute the Document is void, and will
- automatically terminate your rights under this License. However, parties
- who have received copies, or rights, from you under this License will not
- have their licenses terminated so long as such parties remain in full
- compliance.
- </p><h2><a id="FutureRevisions"></a>
+ expressly provided under this License. Any attempt otherwise to copy,
+ modify, sublicense, or distribute it is void, and will automatically
+ terminate your rights under this License.
+ </p><p>
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally, unless
+ and until the copyright holder explicitly and finally terminates your
+ license, and (b) permanently, if the copyright holder fails to notify you
+ of the violation by some reasonable means prior to 60 days after the
+ cessation.
+ </p><p>
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by some
+ reasonable means, this is the first time you have received notice of
+ violation of this License (for any work) from that copyright holder, and
+ you cure the violation prior to 30 days after your receipt of the notice.
+ </p><p>
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under this
+ License. If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does not
+ give you any rights to use it.
+ </p><h3><a id="fdl-1-section10"></a>
10. FUTURE REVISIONS OF THIS LICENSE
- </h2><p>
+ </h3><p>
The Free Software Foundation may publish new, revised versions of the GNU
- Free Documentation License from time to time. Such new versions will be
+ Free Documentation License from time to time. Such new versions will be
similar in spirit to the present version, but may differ in detail to
- address new problems or concerns. See <a class="ulink" href="http://www.gnu.org/copyleft/" target="_top">http://www.gnu.org/copyleft/</a>.
+ address new problems or concerns. See
+ <a class="ulink" href="http://www.gnu.org/copyleft/" target="_top">Copyleft</a>.
</p><p>
- Each version of the License is given a distinguishing version number. If
+ Each version of the License is given a distinguishing version number. If
the Document specifies that a particular numbered version of this License
- "or any later version" applies to it, you have the option of following the
- terms and conditions either of that specified version or of any later
- version that has been published (not as a draft) by the Free Software
- Foundation. If the Document does not specify a version number of this
- License, you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
- </p><h2><a id="HowToUse"></a>
+ “or any later version†applies to it, you have the option of
+ following the terms and conditions either of that specified version or of
+ any later version that has been published (not as a draft) by the Free
+ Software Foundation. If the Document does not specify a version number of
+ this License, you may choose any version ever published (not as a draft)
+ by the Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+ </p><h3><a id="fdl-1-section11"></a>
+ 11. RELICENSING
+ </h3><p>
+ “Massive Multiauthor Collaboration Site†(or “MMC
+ Siteâ€) means any World Wide Web server that publishes copyrightable
+ works and also provides prominent facilities for anybody to edit those
+ works. A public wiki that anybody can edit is an example of such a
+ server. A “Massive Multiauthor Collaboration†(or
+ “MMCâ€) contained in the site means any set of copyrightable
+ works thus published on the MMC site.
+ </p><p>
+ “CC-BY-SA†means the Creative Commons Attribution-Share Alike
+ 3.0 license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license published
+ by that same organization.
+ </p><p>
+ “Incorporate†means to publish or republish a Document, in
+ whole or in part, as part of another Document.
+ </p><p>
+ An MMC is “eligible for relicensing†if it is licensed under
+ this License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently incorporated in
+ whole or in part into the MMC, (1) had no cover texts or invariant
+ sections, and (2) were thus incorporated prior to November 1, 2008.
+ </p><p>
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ </p><h3><a id="fdl-1-addendum"></a>
ADDENDUM: How to use this License for your documents
- </h2><p>
+ </h3><p>
To use this License in a document you have written, include a copy of the
License in the document and put the following copyright and license
notices just after the title page:
- </p><div class="blockquote"><blockquote class="blockquote"><p>
- Copyright (C) YEAR YOUR NAME.
- </p><p>
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
- copy of the license is included in the section entitled "GNU Free
- Documentation License".
- </p></blockquote></div><p>
+ </p><pre class="screen">Copyright © YEAR YOUR NAME
+
+Permission is granted to copy, distribute and/or modify this document under the
+terms of the GNU Free Documentation License, Version 1.3 or any later version
+published by the Free Software Foundation; with no Invariant Sections, no
+Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in
+the section entitled “GNU Free Documentation Licenseâ€.</pre><p>
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
- replace the "with...Texts." line with this:
- </p><div class="blockquote"><blockquote class="blockquote"><p>
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
- </p></blockquote></div><p>
+ replace the “with… Texts.†line with this:
+ </p><pre class="screen">with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts
+being LIST, and with the Back-Cover Texts being LIST.</pre><p>
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
@@ -390,6 +444,6 @@
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit their
use in free software.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01ix01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
-  </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Index</td></tr></table></div></body></html>
+  </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_gpl.html b/libstdc++-v3/doc/html/manual/appendix_gpl.html
index 5dd0a7da6d1..9e5814957d8 100644
--- a/libstdc++-v3/doc/html/manual/appendix_gpl.html
+++ b/libstdc++-v3/doc/html/manual/appendix_gpl.html
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
- </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gpl-3.0"></a>Appendix D. 
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.gpl-3.0"></a>Appendix D. 
<acronym class="acronym">GNU</acronym> General Public License version 3
</h2></div></div></div><p>
Version 3, 29 June 2007
@@ -76,7 +78,7 @@
</p><p>
The precise terms and conditions for copying, distribution and modification
follow.
- </p><h2><a id="id703002"></a>
+ </p><h2><a id="id487484"></a>
TERMS AND CONDITIONS
</h2><h2><a id="gpl-3-definitions"></a>
0. Definitions.
@@ -617,7 +619,7 @@
waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in
return for a fee.
- </p><h2><a id="id635999"></a>
+ </p><h2><a id="id378663"></a>
END OF TERMS AND CONDITIONS
</h2><h2><a id="HowToApply"></a>
How to Apply These Terms to Your New Programs
@@ -675,7 +677,7 @@ under certain conditions; type ‘<code class="literal">show c</code>’ for det
proprietary applications with the library. If this is what you want to do,
use the <acronym class="acronym">GNU</acronym> Lesser General Public License instead of this
License. But first, please read <a class="ulink" href="http://www.gnu.org/philosophy/why-not-lgpl.html" target="_top">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. 
Free Software Needs Free Documentation
 </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html
index ef6924f2892..d53ccecf751 100644
--- a/libstdc++-v3/doc/html/manual/appendix_porting.html
+++ b/libstdc++-v3/doc/html/manual/appendix_porting.html
@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
Porting and Maintenance
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting"></a>Appendix B. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting"></a>Appendix B. 
Porting and Maintenance
- <a id="id631944" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="sect2"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></div><div class="sect1" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="sect2" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
+ <a id="id487054" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="sect2"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></div><div class="sect1" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="sect2" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
As noted <a class="ulink" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">previously</a>,
certain other tools are necessary for hacking on files that
control configure (<code class="code">configure.ac</code>,
@@ -227,4 +229,4 @@
argument checking at all is done in this signature. See
GLIBCXX_ENABLE_CXX_FLAGS for an example of handling, and an error
message.
-</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
+</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/associative.html b/libstdc++-v3/doc/html/manual/associative.html
index bf0731243c9..2173413e41c 100644
--- a/libstdc++-v3/doc/html/manual/associative.html
+++ b/libstdc++-v3/doc/html/manual/associative.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Associative</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Part VII.  Containers" /><link rel="prev" href="vector.html" title="vector" /><link rel="next" href="bitset.html" title="bitset" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="vector.html">Prev</a> </td><th width="60%" align="center">Part VII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
-</th><td width="20%" align="right"> <a accesskey="n" href="bitset.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Associative"><div class="titlepage"><div><div><h2 class="title"><a id="manual.containers.associative"></a>Chapter 17. Associative</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect1"><a href="bitset.html">bitset</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitset.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="sect2"><a href="bitset.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></div><div class="sect1" title="Insertion Hints"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.associative.insert_hints"></a>Insertion Hints</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Associative"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="sect2" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
Section [23.1.2], Table 69, of the C++ standard lists this
function for all of the associative containers (map, set, etc):
</p><pre class="programlisting">
@@ -48,7 +48,7 @@
<code class="code">end()</code>, then the item being inserted should have
a key greater than all the other keys in the container. The
item will be inserted at the end of the container, becoming
- the new entry before <code class="code">end()</code>.
+ the new entry before <code class="code">end()</code>.
</p></li><li class="listitem"><p>
neither <code class="code">begin()</code> nor <code class="code">end()</code>, then:
Let <code class="code">h</code> be the entry in the container pointed to
@@ -84,4 +84,109 @@
the new item would in fact belong there. If the hint does not
point to the correct place, then no further local searching is
done; the search begins from scratch in logarithmic time.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="vector.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitset.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">vector </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> bitset</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="sect3" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
+ No, you cannot write code of the form
+ </p><pre class="programlisting">
+ #include &lt;bitset&gt;
+
+ void foo (size_t n)
+ {
+ std::bitset&lt;n&gt; bits;
+ ....
+ }
+ </pre><p>
+ because <code class="code">n</code> must be known at compile time. Your
+ compiler is correct; it is not a bug. That's the way templates
+ work. (Yes, it <span class="emphasis"><em>is</em></span> a feature.)
+ </p><p>
+ There are a couple of ways to handle this kind of thing. Please
+ consider all of them before passing judgement. They include, in
+ no chaptericular order:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
+ <span class="emphasis"><em>A very large N in
+ <code class="code">bitset&lt;N&gt;</code>.  </em></span> It has been
+ pointed out a few times in newsgroups that N bits only takes up
+ (N/8) bytes on most systems, and division by a factor of eight is
+ pretty impressive when speaking of memory. Half a megabyte given
+ over to a bitset (recall that there is zero space overhead for
+ housekeeping info; it is known at compile time exactly how large
+ the set is) will hold over four million bits. If you're using
+ those bits as status flags (e.g.,
+ <span class="quote">“<span class="quote">changed</span>â€</span>/<span class="quote">“<span class="quote">unchanged</span>â€</span> flags), that's a
+ <span class="emphasis"><em>lot</em></span> of state.
+ </p><p>
+ You can then keep track of the <span class="quote">“<span class="quote">maximum bit used</span>â€</span>
+ during some testing runs on representative data, make note of how
+ many of those bits really need to be there, and then reduce N to
+ a smaller number. Leave some extra space, of course. (If you
+ plan to write code like the incorrect example above, where the
+ bitset is a local variable, then you may have to talk your
+ compiler into allowing that much stack space; there may be zero
+ space overhead, but it's all allocated inside the object.)
+ </p><p>
+ <span class="emphasis"><em>A container&lt;bool&gt;.  </em></span> The
+ Committee made provision for the space savings possible with that
+ (N/8) usage previously mentioned, so that you don't have to do
+ wasteful things like <code class="code">Container&lt;char&gt;</code> or
+ <code class="code">Container&lt;short int&gt;</code>. Specifically,
+ <code class="code">vector&lt;bool&gt;</code> is required to be specialized for
+ that space savings.
+ </p><p>
+ The problem is that <code class="code">vector&lt;bool&gt;</code> doesn't
+ behave like a normal vector anymore. There have been
+ journal articles which discuss the problems (the ones by Herb
+ Sutter in the May and July/August 1999 issues of C++ Report cover
+ it well). Future revisions of the ISO C++ Standard will change
+ the requirement for <code class="code">vector&lt;bool&gt;</code>
+ specialization. In the meantime, <code class="code">deque&lt;bool&gt;</code>
+ is recommended (although its behavior is sane, you probably will
+ not get the space savings, but the allocation scheme is different
+ than that of vector).
+ </p><p>
+ <span class="emphasis"><em>Extremely weird solutions.  </em></span> If
+ you have access to the compiler and linker at runtime, you can do
+ something insane, like figuring out just how many bits you need,
+ then writing a temporary source code file. That file contains an
+ instantiation of <code class="code">bitset</code> for the required number of
+ bits, inside some wrapper functions with unchanging signatures.
+ Have your program then call the compiler on that file using
+ Position Independent Code, then open the newly-created object
+ file and load those wrapper functions. You'll have an
+ instantiation of <code class="code">bitset&lt;N&gt;</code> for the exact
+ <code class="code">N</code> that you need at the time. Don't forget to delete
+ the temporary files. (Yes, this <span class="emphasis"><em>can</em></span> be, and
+ <span class="emphasis"><em>has been</em></span>, done.)
+ </p><p>
+ This would be the approach of either a visionary genius or a
+ raving lunatic, depending on your programming and management
+ style. Probably the latter.
+ </p><p>
+ Which of the above techniques you use, if any, are up to you and
+ your intended application. Some time/space profiling is
+ indicated if it really matters (don't just guess). And, if you
+ manage to do anything along the lines of the third category, the
+ author would love to hear from you...
+ </p><p>
+ Also note that the implementation of bitset used in libstdc++ has
+ <a class="link" href="bk01pt03ch21s02.html" title="HP/SGI">some extensions</a>.
+ </p></div><div class="sect3" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
+ </p><p>
+ Bitmasks do not take char* nor const char* arguments in their
+ constructors. This is something of an accident, but you can read
+ about the problem: follow the library's <span class="quote">“<span class="quote">Links</span>â€</span> from
+ the homepage, and from the C++ information <span class="quote">“<span class="quote">defect
+ reflector</span>â€</span> link, select the library issues list. Issue
+ number 116 describes the problem.
+ </p><p>
+ For now you can simply make a temporary string object using the
+ constructor expression:
+ </p><pre class="programlisting">
+ std::bitset&lt;5&gt; b ( std::string(<span class="quote">“<span class="quote">10110</span>â€</span>) );
+ </pre><p>
+ instead of
+ </p><pre class="programlisting">
+ std::bitset&lt;5&gt; b ( <span class="quote">“<span class="quote">10110</span>â€</span> ); // invalid
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. 
+ Containers
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/atomics.html b/libstdc++-v3/doc/html/manual/atomics.html
new file mode 100644
index 00000000000..31158a46c57
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/atomics.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
+ Atomics
+
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14.  Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
+ Atomics
+ <a id="id379773" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
+ Facilities for atomic operations.
+</p><div class="sect1" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
+ All items are declared in the standard header
+ file <code class="filename">atomic</code>.
+ </p><p>
+ Set of typedefs that map <span class="type">int</span> to
+ <code class="classname">atomic_int</code>, and so on for all builtin
+ integral types. Global enumeration <span class="type">memory_order</span> to
+ control memory ordering. Also includes
+ <code class="classname">atomic</code>, a class template with member
+ functions such as <code class="function">load</code> and
+ <code class="function">store</code> that is instantiable such that
+ <code class="classname">atomic_int</code> is the base class of
+ <code class="classname">atomic&lt;int&gt;</code>.
+ </p><p>
+ Full API details.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. 
+ Concurrency
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/auto_ptr.html b/libstdc++-v3/doc/html/manual/auto_ptr.html
deleted file mode 100644
index 777264504bf..00000000000
--- a/libstdc++-v3/doc/html/manual/auto_ptr.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>auto_ptr</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; auto_ptr&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="memory.html" title="Chapter 11. Memory" /><link rel="prev" href="memory.html" title="Chapter 11. Memory" /><link rel="next" href="shared_ptr.html" title="shared_ptr" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">auto_ptr</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Memory</th><td width="20%" align="right"> <a accesskey="n" href="shared_ptr.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="auto_ptr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.util.memory.auto_ptr"></a>auto_ptr</h2></div></div></div><div class="sect2" title="Limitations"><div class="titlepage"><div><div><h3 class="title"><a id="auto_ptr.limitations"></a>Limitations</h3></div></div></div><p>Explaining all of the fun and delicious things that can
- happen with misuse of the <code class="classname">auto_ptr</code> class
- template (called <acronym class="acronym">AP</acronym> here) would take some
- time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
- safely in the presence of copying has some subtleties.
- </p><p>
- The AP class is a really
- nifty idea for a smart pointer, but it is one of the dumbest of
- all the smart pointers -- and that's fine.
- </p><p>
- AP is not meant to be a supersmart solution to all resource
- leaks everywhere. Neither is it meant to be an effective form
- of garbage collection (although it can help, a little bit).
- And it can <span class="emphasis"><em>not</em></span>be used for arrays!
- </p><p>
- <acronym class="acronym">AP</acronym> is meant to prevent nasty leaks in the
- presence of exceptions. That's <span class="emphasis"><em>all</em></span>. This
- code is AP-friendly:
- </p><pre class="programlisting">
- // Not a recommend naming scheme, but good for web-based FAQs.
- typedef std::auto_ptr&lt;MyClass&gt; APMC;
-
- extern function_taking_MyClass_pointer (MyClass*);
- extern some_throwable_function ();
-
- void func (int data)
- {
- APMC ap (new MyClass(data));
-
- some_throwable_function(); // this will throw an exception
-
- function_taking_MyClass_pointer (ap.get());
- }
- </pre><p>When an exception gets thrown, the instance of MyClass that's
- been created on the heap will be <code class="function">delete</code>'d as the stack is
- unwound past <code class="function">func()</code>.
- </p><p>Changing that code as follows is not <acronym class="acronym">AP</acronym>-friendly:
- </p><pre class="programlisting">
- APMC ap (new MyClass[22]);
- </pre><p>You will get the same problems as you would without the use
- of <acronym class="acronym">AP</acronym>:
- </p><pre class="programlisting">
- char* array = new char[10]; // array new...
- ...
- delete array; // ...but single-object delete
- </pre><p>
- AP cannot tell whether the pointer you've passed at creation points
- to one or many things. If it points to many things, you are about
- to die. AP is trivial to write, however, so you could write your
- own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
- been done many times; check the mailing lists, Usenet, Boost, etc).
- </p></div><div class="sect2" title="Use in Containers"><div class="titlepage"><div><div><h3 class="title"><a id="auto_ptr.using"></a>Use in Containers</h3></div></div></div><p>
- </p><p>All of the <a class="link" href="containers.html" title="Part VII.  Containers">containers</a>
- described in the standard library require their contained types
- to have, among other things, a copy constructor like this:
- </p><pre class="programlisting">
- struct My_Type
- {
- My_Type (My_Type const&amp;);
- };
- </pre><p>
- Note the const keyword; the object being copied shouldn't change.
- The template class <code class="code">auto_ptr</code> (called AP here) does not
- meet this requirement. Creating a new AP by copying an existing
- one transfers ownership of the pointed-to object, which means that
- the AP being copied must change, which in turn means that the
- copy ctors of AP do not take const objects.
- </p><p>
- The resulting rule is simple: <span class="emphasis"><em>Never ever use a
- container of auto_ptr objects</em></span>. The standard says that
- <span class="quote">“<span class="quote">undefined</span>â€</span> behavior is the result, but it is
- guaranteed to be messy.
- </p><p>
- To prevent you from doing this to yourself, the
- <a class="link" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks">concept checks</a> built
- in to this implementation will issue an error if you try to
- compile code like this:
- </p><pre class="programlisting">
- #include &lt;vector&gt;
- #include &lt;memory&gt;
-
- void f()
- {
- std::vector&lt; std::auto_ptr&lt;int&gt; &gt; vec_ap_int;
- }
- </pre><p>
-Should you try this with the checks enabled, you will see an error.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="memory.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="shared_ptr.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11. Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> shared_ptr</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/backwards.html b/libstdc++-v3/doc/html/manual/backwards.html
index 2844247f184..27f3ccb783d 100644
--- a/libstdc++-v3/doc/html/manual/backwards.html
+++ b/libstdc++-v3/doc/html/manual/backwards.html
@@ -17,8 +17,8 @@ ISO Standard (e.g., statistical analysis). While there are a lot of
really useful things that are used by a lot of people, the Standards
Committee couldn't include everything, and so a lot of those
<span class="quote">“<span class="quote">obvious</span>â€</span> classes didn't get included.
-</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="id646429"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
-</p></div><div class="sect3" title="No cout in ostream.h, no cin in istream.h"><div class="titlepage"><div><div><h4 class="title"><a id="id646461"></a>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p>
+</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="id509028"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
+</p></div><div class="sect3" title="No cout in ostream.h, no cin in istream.h"><div class="titlepage"><div><div><h4 class="title"><a id="id509060"></a>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p>
In earlier versions of the standard,
<code class="filename">fstream.h</code>,
<code class="filename">ostream.h</code>
@@ -32,26 +32,26 @@ archived. For the desperate,
the <a class="ulink" href="http://gcc.gnu.org/extensions.html" target="_top">GCC extensions
page</a> describes where to find the last libg++ source. The code is
considered replaced and rewritten.
-</p></div></div><div class="sect2" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
+</p></div></div><div class="sect2" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
The second generation GNU C++ library was called libstdc++, or
libstdc++-v2. It spans the time between libg++ and pre-ISO C++
standardization and is usually associated with the following GCC
releases: egcs 1.x, gcc 2.95, and gcc 2.96.
-</p><p>
+</p><p>
The STL portions of this library are based on SGI/HP STL release 3.11.
</p><p>
This project is no longer maintained or supported, and the sources
archived. The code is considered replaced and rewritten.
</p><p>
Portability notes and known implementation limitations are as follows.
-</p><div class="sect3" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="id646559"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
+</p><div class="sect3" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="id509158"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
Some care is required to support C++ compiler and or library
implementation that do not have the standard library in
<code class="code">namespace std</code>.
</p><p>
The following sections list some possible solutions to support compilers
that cannot ignore <code class="code">std::</code>-qualified names.
- </p><p>
+ </p><p>
First, see if the compiler has a flag for this. Namespace
back-portability-issues are generally not a problem for g++
compilers that do not have libstdc++ in <code class="code">std::</code>, as the
@@ -62,7 +62,7 @@ considered replaced and rewritten.
probably applies to some other compilers as well.
</p><p>
Second, experiment with a variety of pre-processor tricks.
- </p><p>
+ </p><p>
By defining <code class="code">std</code> as a macro, fully-qualified namespace
calls become global. Volia.
</p><pre class="programlisting">
@@ -99,8 +99,8 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
ac_cv_cxx_have_std_namespace,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include &lt;iostream&gt;
- std::istream&amp; is = std::cin;],,
+ AC_TRY_COMPILE([#include &lt;iostream&gt;
+ std::istream&amp; is = std::cin;],,
ac_cv_cxx_have_std_namespace=yes, ac_cv_cxx_have_std_namespace=no)
AC_LANG_RESTORE
])
@@ -108,7 +108,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
fi
])
-</pre></div><div class="sect3" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="id699742"></a>Illegal iterator usage</h4></div></div></div><p>
+</pre></div><div class="sect3" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="id509280"></a>Illegal iterator usage</h4></div></div></div><p>
The following illustrate implementation-allowed illegal iterator
use, and then correct use.
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
@@ -120,28 +120,28 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
0</code>) =&gt; use <code class="code">iterator = iterator_type();</code>
</p></li><li class="listitem"><p>
<code class="code">if (iterator)</code> won't work any more =&gt; use
- <code class="code">if (iterator != iterator_type())</code>
- </p></li></ul></div></div><div class="sect3" title="isspace from cctype is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="id699804"></a><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro
- </h4></div></div></div><p>
+ <code class="code">if (iterator != iterator_type())</code>
+ </p></li></ul></div></div><div class="sect3" title="isspace from cctype is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="id509341"></a><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro
+ </h4></div></div></div><p>
Glibc 2.0.x and 2.1.x define <code class="filename">ctype.h</code> functionality as macros
(isspace, isalpha etc.).
</p><p>
This implementations of libstdc++, however, keep these functions
as macros, and so it is not back-portable to use fully qualified
names. For example:
- </p><pre class="programlisting">
-#include &lt;cctype&gt;
-int main() { std::isspace('X'); }
+ </p><pre class="programlisting">
+#include &lt;cctype&gt;
+int main() { std::isspace('X'); }
</pre><p>
Results in something like this:
-</p><pre class="programlisting">
-std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
-</pre><p>
+</p><pre class="programlisting">
+std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
+</pre><p>
A solution is to modify a header-file so that the compiler tells
<code class="filename">ctype.h</code> to define functions
instead of macros:
</p><pre class="programlisting">
-// This keeps isalnum, et al from being propagated as macros.
+// This keeps isalnum, et al from being propagated as macros.
#if __linux__
# define __NO_CTYPE 1
#endif
@@ -154,7 +154,7 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
(<code class="filename">ctype.h</code>) and the
definitions in namespace <code class="code">std::</code>
(<code class="code">&lt;cctype&gt;</code>).
-</p></div><div class="sect3" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="id699897"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
+</p></div><div class="sect3" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="id509434"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
One solution is to add an autoconf-test for this:
</p><pre class="programlisting">
AC_MSG_CHECKING(for container::at)
@@ -163,7 +163,7 @@ AC_TRY_COMPILE(
#include &lt;vector&gt;
#include &lt;deque&gt;
#include &lt;string&gt;
-
+
using namespace std;
],
[
@@ -180,7 +180,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
</pre><p>
If you are using other (non-GNU) compilers it might be a good idea
to check for <code class="code">string::at</code> separately.
-</p></div><div class="sect3" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="id716937"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
+</p></div><div class="sect3" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="id509472"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
Use some kind of autoconf test, plus this:
</p><pre class="programlisting">
#ifdef HAVE_CHAR_TRAITS
@@ -188,45 +188,45 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
#else
#define CPP_EOF EOF
#endif
-</pre></div><div class="sect3" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="id716955"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
+</pre></div><div class="sect3" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="id509490"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
There are two functions for deleting the contents of a string:
<code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
string).
</p><pre class="programlisting">
-void
+void
clear() { _M_mutate(0, this-&gt;size(), 0); }
</pre><pre class="programlisting">
-basic_string&amp;
+basic_string&amp;
erase(size_type __pos = 0, size_type __n = npos)
-{
+{
return this-&gt;replace(_M_check(__pos), _M_fold(__pos, __n),
- _M_data(), _M_data());
+ _M_data(), _M_data());
}
</pre><p>
Unfortunately, <code class="code">clear</code> is not implemented in this
version, so you should use <code class="code">erase</code> (which is probably
faster than <code class="code">operator=(charT*)</code>).
-</p></div><div class="sect3" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="id717001"></a>
+</p></div><div class="sect3" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="id384734"></a>
Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
extensions
-</h4></div></div></div><p>
+</h4></div></div></div><p>
These are no longer supported. Please use stringstreams instead.
-</p></div><div class="sect3" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="id717020"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
+</p></div><div class="sect3" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="id384753"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
Although the ISO standard <code class="code">i/ostringstream</code>-classes are
provided, (<code class="filename">sstream</code>), for
compatibility with older implementations the pre-ISO
<code class="code">i/ostrstream</code> (<code class="filename">strstream</code>) interface is also provided,
with these caveats:
-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="code">strstream</code> is considered to be deprecated
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
<code class="code">strstream</code> is limited to <code class="code">char</code>
- </p></li><li class="listitem"><p>
+ </p></li><li class="listitem"><p>
with <code class="code">ostringstream</code> you don't have to take care of
- terminating the string or freeing its memory
- </p></li><li class="listitem"><p>
+ terminating the string or freeing its memory
+ </p></li><li class="listitem"><p>
<code class="code">istringstream</code> can be re-filled (clear();
- str(input);)
+ str(input);)
</p></li></ul></div><p>
You can then use output-stringstreams like this:
</p><pre class="programlisting">
@@ -268,7 +268,7 @@ std::istrstream iss(input.c_str());
#endif
int i;
-iss &gt;&gt; i;
+iss &gt;&gt; i;
</pre><p> One (the only?) restriction is that an istrstream cannot be re-filled:
</p><pre class="programlisting">
std::istringstream iss(numerator);
@@ -295,18 +295,18 @@ if (iss.fail())
throw runtime_error(..)
any = temp;
}
-</pre><p>
- Another example of using stringstreams is in <a class="link" href="bk01pt05ch13s05.html" title="Shrink to Fit">this howto</a>.
+</pre><p>
+ Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
</p><p> There is additional information in the libstdc++-v2 info files, in
particular <span class="quote">“<span class="quote">info iostream</span>â€</span>.
-</p></div><div class="sect3" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="id717171"></a>Little or no wide character support</h4></div></div></div><p>
+</p></div><div class="sect3" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="id384904"></a>Little or no wide character support</h4></div></div></div><p>
Classes <code class="classname">wstring</code> and
<code class="classname">char_traits&lt;wchar_t&gt;</code> are
not supported.
- </p></div><div class="sect3" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="id717190"></a>No templatized iostreams</h4></div></div></div><p>
+ </p></div><div class="sect3" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="id384923"></a>No templatized iostreams</h4></div></div></div><p>
Classes <code class="classname">wfilebuf</code> and
<code class="classname">wstringstream</code> are not supported.
- </p></div><div class="sect3" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="id717209"></a>Thread safety issues</h4></div></div></div><p>
+ </p></div><div class="sect3" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="id384942"></a>Thread safety issues</h4></div></div></div><p>
Earlier GCC releases had a somewhat different approach to
threading configuration and proper compilation. Before GCC 3.0,
configuration of the threading model was dictated by compiler
@@ -348,10 +348,10 @@ particular <span class="quote">“<span class="quote">info iostream</span>â€</s
release series.
</p></li><li class="listitem"><p>
<a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html" target="_top">
- This message</a> inspired a recent updating of issues with
- threading and the SGI STL library. It also contains some
- example POSIX-multithreaded STL code.
- </p></li></ul></div><p>
+ This message</a> inspired a recent updating of issues with
+ threading and the SGI STL library. It also contains some
+ example POSIX-multithreaded STL code.
+ </p></li></ul></div><p>
(A large selection of links to older messages has been removed;
many of the messages from 1999 were lost in a disk crash, and the
few people with access to the backup tapes have been too swamped
@@ -360,11 +360,11 @@ particular <span class="quote">“<span class="quote">info iostream</span>â€</s
</p></div></div><div class="sect2" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
libstdc++-v3.
</p><p>The subset commonly known as the Standard Template Library
- (chapters 23 through 25, mostly) is adapted from the final release
- of the SGI STL (version 3.3), with extensive changes.
+ (chapters 23 through 25, mostly) is adapted from the final release
+ of the SGI STL (version 3.3), with extensive changes.
</p><p>A more formal description of the V3 goals can be found in the
- official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
- </p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="id706015"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
+ official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
+ </p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="id385058"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
(<code class="code">iostream.h</code>, <code class="code">defalloc.h</code> etc.) are
available, unlike previous libstdc++ versions, but inclusion
generates a warning that you are using deprecated headers.
@@ -385,7 +385,7 @@ AC_DEFUN([AC_HEADER_PRE_STDCXX], [
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -Wno-deprecated"
+ CXXFLAGS="$CXXFLAGS -Wno-deprecated"
# Omit defalloc.h, as compilation with newer compilers is problematic.
AC_TRY_COMPILE([
@@ -436,11 +436,11 @@ like <code class="filename">vector.h</code> can be replaced with <code class="fi
directive <code class="code">using namespace std;</code> can be put at the global
scope. This should be enough to get this code compiling, assuming the
other usage is correct.
-</p></div><div class="sect3" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="id706097"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
- replaced by standardized libraries.
- In particular, the unordered_map and unordered_set containers of TR1
- are suitable replacement for the non-standard hash_map and hash_set
- containers in the SGI STL.
+</p></div><div class="sect3" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="id385141"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
+ replaced by standardized libraries.
+ In particular, the unordered_map and unordered_set containers of TR1
+ are suitable replacement for the non-standard hash_map and hash_set
+ containers in the SGI STL.
</p><p> Header files <code class="filename">hash_map</code> and <code class="filename">hash_set</code> moved
to <code class="filename">ext/hash_map</code> and <code class="filename">ext/hash_set</code>,
respectively. At the same time, all types in these files are enclosed
@@ -448,29 +448,29 @@ in <code class="code">namespace __gnu_cxx</code>. Later versions move deprecate
these files, and suggest using TR1's <code class="filename">unordered_map</code>
and <code class="filename">unordered_set</code> instead.
</p><p>The extensions are no longer in the global or <code class="code">std</code>
- namespaces, instead they are declared in the <code class="code">__gnu_cxx</code>
- namespace. For maximum portability, consider defining a namespace
- alias to use to talk about extensions, e.g.:
+ namespaces, instead they are declared in the <code class="code">__gnu_cxx</code>
+ namespace. For maximum portability, consider defining a namespace
+ alias to use to talk about extensions, e.g.:
</p><pre class="programlisting">
#ifdef __GNUC__
#if __GNUC__ &lt; 3
- #include &lt;hash_map.h&gt;
- namespace extension { using ::hash_map; }; // inherit globals
+ #include &lt;hash_map.h&gt;
+ namespace extension { using ::hash_map; }; // inherit globals
#else
- #include &lt;backward/hash_map&gt;
- #if __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ == 0
- namespace extension = std; // GCC 3.0
- #else
- namespace extension = ::__gnu_cxx; // GCC 3.1 and later
- #endif
+ #include &lt;backward/hash_map&gt;
+ #if __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ == 0
+ namespace extension = std; // GCC 3.0
+ #else
+ namespace extension = ::__gnu_cxx; // GCC 3.1 and later
+ #endif
#endif
#else // ... there are other compilers, right?
- namespace extension = std;
+ namespace extension = std;
#endif
- extension::hash_map&lt;int,int&gt; my_map;
+ extension::hash_map&lt;int,int&gt; my_map;
</pre><p>This is a bit cleaner than defining typedefs for all the
- instantiations you might need.
+ instantiations you might need.
</p><p>The following autoconf tests check for working HP/SGI hash containers.
</p><pre class="programlisting">
# AC_HEADER_EXT_HASH_MAP
@@ -480,7 +480,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_MAP], [
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -Werror"
+ CXXFLAGS="$CXXFLAGS -Werror"
AC_TRY_COMPILE([#include &lt;ext/hash_map&gt;], [using __gnu_cxx::hash_map;],
ac_cv_cxx_ext_hash_map=yes, ac_cv_cxx_ext_hash_map=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -498,7 +498,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -Werror"
+ CXXFLAGS="$CXXFLAGS -Werror"
AC_TRY_COMPILE([#include &lt;ext/hash_set&gt;], [using __gnu_cxx::hash_set;],
ac_cv_cxx_ext_hash_set=yes, ac_cv_cxx_ext_hash_set=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -508,7 +508,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
fi
])
-</pre></div><div class="sect3" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="id706200"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
+</pre></div><div class="sect3" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="id385242"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
</h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
input-streams has been confirmed, most probably because the author
thought it would be more correct to specify nocreate explicitly. So
@@ -519,7 +519,7 @@ open the file for reading, check if it has been opened, and then
decide whether you want to create/replace or not. To my knowledge,
even older implementations support <code class="code">app</code>, <code class="code">ate</code>
and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
-</p></div><div class="sect3" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="id703184"></a>
+</p></div><div class="sect3" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="id380988"></a>
No <code class="code">stream::attach(int fd)</code>
</h4></div></div></div><p>
Phil Edwards writes: It was considered and rejected for the ISO
@@ -531,7 +531,7 @@ No <code class="code">stream::attach(int fd)</code>
<code class="code">std::streambuf</code> (or
<code class="code">std::basic_streambuf&lt;..&gt;</code>) which opens a file
given a descriptor, and then pass an instance of this to the
- stream-constructor.
+ stream-constructor.
</p><p>
An extension is available that implements this.
<code class="filename">ext/stdio_filebuf.h</code> contains a derived class called
@@ -540,9 +540,9 @@ No <code class="code">stream::attach(int fd)</code>
descriptor, and provides the <code class="code">fd()</code> function.
</p><p>
For another example of this, refer to
- <a class="ulink" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
+ <a class="ulink" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
by Nicolai Josuttis.
-</p></div><div class="sect3" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id703247"></a>
+</p></div><div class="sect3" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381051"></a>
Support for C++98 dialect.
</h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
</p><pre class="programlisting">
@@ -610,7 +610,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
fi
])
-</pre></div><div class="sect3" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id703275"></a>
+</pre></div><div class="sect3" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381079"></a>
Support for C++TR1 dialect.
</h4></div></div></div><p>Check for library coverage of the TR1 standard.
</p><pre class="programlisting">
@@ -687,7 +687,7 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
fi
])
-</pre></div><div class="sect3" title="Support for C++0x dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id703319"></a>
+</pre></div><div class="sect3" title="Support for C++0x dialect."><div class="titlepage"><div><div><h4 class="title"><a id="id381123"></a>
Support for C++0x dialect.
</h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++0xstandard.
</p><pre class="programlisting">
@@ -699,7 +699,7 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check
{
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
};
@@ -721,10 +721,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=c++0x"
+ CXXFLAGS="$CXXFLAGS -std=c++0x"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check
{
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
};
@@ -747,10 +747,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([
template &lt;typename T&gt;
- struct check
+ struct check
{
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
};
@@ -768,8 +768,8 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
AC_LANG_RESTORE
])
- if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
- test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
+ if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
+ test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then
AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ])
fi
@@ -784,7 +784,7 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([
#include &lt;cassert&gt;
@@ -870,7 +870,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([#include &lt;unordered_map&gt;], [using std::unordered_map;],
ac_cv_cxx_unordered_map=yes, ac_cv_cxx_unordered_map=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -889,7 +889,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=gnu++0x"
+ CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([#include &lt;unordered_set&gt;], [using std::unordered_set;],
ac_cv_cxx_unordered_set=yes, ac_cv_cxx_unordered_set=no)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -899,32 +899,29 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ])
fi
])
-</pre></div><div class="sect3" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="id703396"></a>
+</pre></div><div class="sect3" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="id381200"></a>
Container::iterator_type is not necessarily Container::value_type*
</h4></div></div></div><p>
This is a change in behavior from the previous version. Now, most
<span class="type">iterator_type</span> typedefs in container classes are POD
objects, not <span class="type">value_type</span> pointers.
-</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="Migrating to GCC 4.1"><a id="id703425"></a><p>[<abbr class="abbrev">
- kegel41
- </abbr>] <span class="title"><i>
- Migrating to GCC 4.1
- </i>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span><span class="biblioid">
+</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id381229"></a><p><span class="biblioid">
<a class="ulink" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="Building the Whole Debian Archive with GCC 4.1: A Summary"><a id="id703458"></a><p>[<abbr class="abbrev">
- kegel41
- </abbr>] <span class="title"><i>
- Building the Whole Debian Archive with GCC 4.1: A Summary
- </i>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span><span class="biblioid">
+ <em class="citetitle">
+ Migrating to GCC 4.1
+ </em>
+ </a>
+ . </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="id381260"></a><p><span class="biblioid">
<a class="ulink" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
+ <em class="citetitle">
+ Building the Whole Debian Archive with GCC 4.1: A Summary
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Migration guide for GCC-3.2"><a id="id703491"></a><p>[<abbr class="abbrev">
- lbl32
- </abbr>] <span class="title"><i>
- Migration guide for GCC-3.2
- </i>. </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="id381292"></a><p><span class="biblioid">
<a class="ulink" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
+ <em class="citetitle">
+ Migration guide for GCC-3.2
+ </em>
</a>
. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C. 
Free Software Needs Free Documentation
diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/libstdc++-v3/doc/html/manual/bitmap_allocator.html
index 32a44a2bb2c..2edd195696d 100644
--- a/libstdc++-v3/doc/html/manual/bitmap_allocator.html
+++ b/libstdc++-v3/doc/html/manual/bitmap_allocator.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bitmap_allocator</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_allocators.html" title="Chapter 33. Allocators" /><link rel="prev" href="ext_allocators.html" title="Chapter 33. Allocators" /><link rel="next" href="ext_containers.html" title="Chapter 34. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><th width="60%" align="center">Chapter 33. Allocators</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="bitmap_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.bitmap"></a>bitmap_allocator</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bitmap_allocator</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_allocators.html" title="Chapter 20. Allocators" /><link rel="prev" href="ext_allocators.html" title="Chapter 20. Allocators" /><link rel="next" href="ext_containers.html" title="Chapter 21. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><th width="60%" align="center">Chapter 20. Allocators</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="bitmap_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.bitmap"></a>bitmap_allocator</h2></div></div></div><p>
</p><div class="sect2" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.bitmap.design"></a>Design</h3></div></div></div><p>
As this name suggests, this allocator uses a bit-map to keep track
of the used and unused memory locations for it's book-keeping
@@ -103,7 +103,7 @@ else return false.</p></li></ol></div><p>
</p><p>
Consider a block of size 64 ints. In memory, it would look like this:
(assume a 32-bit system where, size_t is a 32-bit entity).
- </p><div class="table"><a id="id620814"></a><p class="title"><b>Table 33.1. Bitmap Allocator Memory Map</b></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="id376664"></a><p class="title"><b>Table 20.1. Bitmap Allocator Memory Map</b></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
The first Column(268) represents the size of the Block in bytes as
seen by the Bitmap Allocator. Internally, a global free list is
used to keep track of the free blocks used and given back by the
@@ -192,20 +192,20 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
_S_refill_pool which does the following:
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
Gets more memory from the Global Free List of the Required
- size.
+ size.
</p></li><li class="listitem"><p>
- Adjusts the size for the next call to itself.
+ Adjusts the size for the next call to itself.
</p></li><li class="listitem"><p>
Writes the appropriate headers in the bit-maps.
</p></li><li class="listitem"><p>
Sets the use count for that super-block just allocated to 0
- (zero).
+ (zero).
</p></li><li class="listitem"><p>
All of the above accounts to maintaining the basic invariant
for the allocator. If the invariant is maintained, we are
sure that all is well. Now, the same process is applied on
the newly acquired free blocks, which are dispatched
- accordingly.
+ accordingly.
</p></li></ul></div></li></ol></div><p>
Thus, you can clearly see that the allocate function is nothing but a
combination of the next-fit and first-fit algorithm optimized ONLY for
@@ -337,4 +337,4 @@ equivalent.</p></li><li class="listitem"><p>And also this would preserve the cac
sizeof(size_t) x 8 which is the number of bits in an integer,
which can fit exactly in a CPU register. Hence, the term given is
exponential growth of the internal pool.
- </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_allocators.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 33. Allocators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 34. Containers</td></tr></table></div></body></html>
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_allocators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_allocators.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. Allocators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. Containers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bitset.html b/libstdc++-v3/doc/html/manual/bitset.html
deleted file mode 100644
index 0d9fbeb2088..00000000000
--- a/libstdc++-v3/doc/html/manual/bitset.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>bitset</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="associative.html" title="Chapter 17. Associative" /><link rel="prev" href="associative.html" title="Chapter 17. Associative" /><link rel="next" href="containers_and_c.html" title="Chapter 18. Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">bitset</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Associative</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="bitset"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.associative.bitset"></a>bitset</h2></div></div></div><div class="sect2" title="Size Variable"><div class="titlepage"><div><div><h3 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h3></div></div></div><p>
- No, you cannot write code of the form
- </p><pre class="programlisting">
- #include &lt;bitset&gt;
-
- void foo (size_t n)
- {
- std::bitset&lt;n&gt; bits;
- ....
- }
- </pre><p>
- because <code class="code">n</code> must be known at compile time. Your
- compiler is correct; it is not a bug. That's the way templates
- work. (Yes, it <span class="emphasis"><em>is</em></span> a feature.)
- </p><p>
- There are a couple of ways to handle this kind of thing. Please
- consider all of them before passing judgement. They include, in
- no particular order:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
- <span class="emphasis"><em>A very large N in
- <code class="code">bitset&lt;N&gt;</code>.  </em></span> It has been
- pointed out a few times in newsgroups that N bits only takes up
- (N/8) bytes on most systems, and division by a factor of eight is
- pretty impressive when speaking of memory. Half a megabyte given
- over to a bitset (recall that there is zero space overhead for
- housekeeping info; it is known at compile time exactly how large
- the set is) will hold over four million bits. If you're using
- those bits as status flags (e.g.,
- <span class="quote">“<span class="quote">changed</span>â€</span>/<span class="quote">“<span class="quote">unchanged</span>â€</span> flags), that's a
- <span class="emphasis"><em>lot</em></span> of state.
- </p><p>
- You can then keep track of the <span class="quote">“<span class="quote">maximum bit used</span>â€</span>
- during some testing runs on representative data, make note of how
- many of those bits really need to be there, and then reduce N to
- a smaller number. Leave some extra space, of course. (If you
- plan to write code like the incorrect example above, where the
- bitset is a local variable, then you may have to talk your
- compiler into allowing that much stack space; there may be zero
- space overhead, but it's all allocated inside the object.)
- </p><p>
- <span class="emphasis"><em>A container&lt;bool&gt;.  </em></span> The
- Committee made provision for the space savings possible with that
- (N/8) usage previously mentioned, so that you don't have to do
- wasteful things like <code class="code">Container&lt;char&gt;</code> or
- <code class="code">Container&lt;short int&gt;</code>. Specifically,
- <code class="code">vector&lt;bool&gt;</code> is required to be specialized for
- that space savings.
- </p><p>
- The problem is that <code class="code">vector&lt;bool&gt;</code> doesn't
- behave like a normal vector anymore. There have been
- journal articles which discuss the problems (the ones by Herb
- Sutter in the May and July/August 1999 issues of C++ Report cover
- it well). Future revisions of the ISO C++ Standard will change
- the requirement for <code class="code">vector&lt;bool&gt;</code>
- specialization. In the meantime, <code class="code">deque&lt;bool&gt;</code>
- is recommended (although its behavior is sane, you probably will
- not get the space savings, but the allocation scheme is different
- than that of vector).
- </p><p>
- <span class="emphasis"><em>Extremely weird solutions.  </em></span> If
- you have access to the compiler and linker at runtime, you can do
- something insane, like figuring out just how many bits you need,
- then writing a temporary source code file. That file contains an
- instantiation of <code class="code">bitset</code> for the required number of
- bits, inside some wrapper functions with unchanging signatures.
- Have your program then call the compiler on that file using
- Position Independent Code, then open the newly-created object
- file and load those wrapper functions. You'll have an
- instantiation of <code class="code">bitset&lt;N&gt;</code> for the exact
- <code class="code">N</code> that you need at the time. Don't forget to delete
- the temporary files. (Yes, this <span class="emphasis"><em>can</em></span> be, and
- <span class="emphasis"><em>has been</em></span>, done.)
- </p><p>
- This would be the approach of either a visionary genius or a
- raving lunatic, depending on your programming and management
- style. Probably the latter.
- </p><p>
- Which of the above techniques you use, if any, are up to you and
- your intended application. Some time/space profiling is
- indicated if it really matters (don't just guess). And, if you
- manage to do anything along the lines of the third category, the
- author would love to hear from you...
- </p><p>
- Also note that the implementation of bitset used in libstdc++ has
- <a class="link" href="bk01pt12ch34s02.html" title="HP/SGI">some extensions</a>.
- </p></div><div class="sect2" title="Type String"><div class="titlepage"><div><div><h3 class="title"><a id="associative.bitset.type_string"></a>Type String</h3></div></div></div><p>
- </p><p>
- Bitmasks do not take char* nor const char* arguments in their
- constructors. This is something of an accident, but you can read
- about the problem: follow the library's <span class="quote">“<span class="quote">Links</span>â€</span> from
- the homepage, and from the C++ information <span class="quote">“<span class="quote">defect
- reflector</span>â€</span> link, select the library issues list. Issue
- number 116 describes the problem.
- </p><p>
- For now you can simply make a temporary string object using the
- constructor expression:
- </p><pre class="programlisting">
- std::bitset&lt;5&gt; b ( std::string(<span class="quote">“<span class="quote">10110</span>â€</span>) );
- </pre><p>
- instead of
- </p><pre class="programlisting">
- std::bitset&lt;5&gt; b ( <span class="quote">“<span class="quote">10110</span>â€</span> ); // invalid
- </pre></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="associative.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Associative </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01ix01.html b/libstdc++-v3/doc/html/manual/bk01ix01.html
deleted file mode 100644
index 185b1c4bd2a..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01ix01.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Index</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gfdl.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="index" title="Index"><div class="titlepage"><div><div><h2 class="title"><a id="id649926"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>A</h3><dl><dt>Algorithms, <a class="indexterm" href="algorithms.html">
- Algorithms
-
-</a></dt><dt>Appendix</dt><dd><dl><dt>Contributing, <a class="indexterm" href="appendix_contributing.html">
- Contributing
-
-</a></dt><dt>Free Documentation, <a class="indexterm" href="appendix_free.html">
- Free Software Needs Free Documentation
-
-</a></dt><dt>Porting and Maintenance, <a class="indexterm" href="appendix_porting.html">
- Porting and Maintenance
-
-</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>Containers, <a class="indexterm" href="containers.html">
- Containers
-
-</a></dt></dl></div><div class="indexdiv"><h3>D</h3><dl><dt>Diagnostics, <a class="indexterm" href="diagnostics.html">
- Diagnostics
-
-</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>Extensions, <a class="indexterm" href="extensions.html">
- Extensions
-
-</a></dt></dl></div><div class="indexdiv"><h3>I</h3><dl><dt>Input and Output, <a class="indexterm" href="io.html">
- Input and Output
-
-</a></dt><dt>Introduction, <a class="indexterm" href="intro.html">
- Introduction
-
-</a></dt><dt>Iterators, <a class="indexterm" href="iterators.html">
- Iterators
-
-</a></dt></dl></div><div class="indexdiv"><h3>L</h3><dl><dt>Localization, <a class="indexterm" href="localization.html">
- Localization
-
-</a></dt></dl></div><div class="indexdiv"><h3>N</h3><dl><dt>Numerics, <a class="indexterm" href="numerics.html">
- Numerics
-
-</a></dt></dl></div><div class="indexdiv"><h3>S</h3><dl><dt>Strings, <a class="indexterm" href="strings.html">
- Strings
-
-</a></dt><dt>Support, <a class="indexterm" href="support.html">
- Support
-
-</a></dt></dl></div><div class="indexdiv"><h3>T</h3><dl><dt>Test</dt><dd><dl><dt>Exception Safety, <a class="indexterm" href="test.html#test.exception.safety">
- Qualifying Exception Safety Guarantees
-
-</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>U</h3><dl><dt>Utilities, <a class="indexterm" href="utilities.html">
- Utilities
-
-</a></dt></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gfdl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix E. GNU Free Documentation License </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02.html b/libstdc++-v3/doc/html/manual/bk01pt02.html
new file mode 100644
index 00000000000..b9aa00be293
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt02.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
+ Standard Contents
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part II.  Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
+ Standard Contents
+</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="support.html">4.
+ Support
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
+ Diagnostics
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
+ Strings
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
+ Localization
+
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
+ Containers
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
+ Iterators
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
+ Algorithms
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
+ Numerics
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
+ Input and Output
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
+ Atomics
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
+ Concurrency
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. 
+ Support
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02ch04s02.html b/libstdc++-v3/doc/html/manual/bk01pt02ch04s02.html
deleted file mode 100644
index 45fa1f6e2b4..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt02ch04s02.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Numeric Properties</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="fundamental_types.html" title="Chapter 4. Types" /><link rel="prev" href="fundamental_types.html" title="Chapter 4. Types" /><link rel="next" href="bk01pt02ch04s03.html" title="NULL" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Numeric Properties</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fundamental_types.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Types</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch04s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Numeric Properties"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.support.types.numeric_limits"></a>Numeric Properties</h2></div></div></div><p>
- The header <code class="filename">limits</code> defines
- traits classes to give access to various implementation
- defined-aspects of the fundamental types. The traits classes --
- fourteen in total -- are all specializations of the template class
- <code class="classname">numeric_limits</code>, documented <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html" target="_top">here</a>
- and defined as follows:
- </p><pre class="programlisting">
- template&lt;typename T&gt;
- struct class
- {
- static const bool is_specialized;
- static T max() throw();
- static T min() throw();
-
- static const int digits;
- static const int digits10;
- static const bool is_signed;
- static const bool is_integer;
- static const bool is_exact;
- static const int radix;
- static T epsilon() throw();
- static T round_error() throw();
-
- static const int min_exponent;
- static const int min_exponent10;
- static const int max_exponent;
- static const int max_exponent10;
-
- static const bool has_infinity;
- static const bool has_quiet_NaN;
- static const bool has_signaling_NaN;
- static const float_denorm_style has_denorm;
- static const bool has_denorm_loss;
- static T infinity() throw();
- static T quiet_NaN() throw();
- static T denorm_min() throw();
-
- static const bool is_iec559;
- static const bool is_bounded;
- static const bool is_modulo;
-
- static const bool traps;
- static const bool tinyness_before;
- static const float_round_style round_style;
- };
- </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fundamental_types.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="fundamental_types.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch04s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. Types </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> NULL</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02ch04s03.html b/libstdc++-v3/doc/html/manual/bk01pt02ch04s03.html
deleted file mode 100644
index c9225c8b9ca..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt02ch04s03.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>NULL</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="fundamental_types.html" title="Chapter 4. Types" /><link rel="prev" href="bk01pt02ch04s02.html" title="Numeric Properties" /><link rel="next" href="dynamic_memory.html" title="Chapter 5. Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">NULL</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch04s02.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Types</th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="NULL"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.support.types.null"></a>NULL</h2></div></div></div><p>
- The only change that might affect people is the type of
- <code class="constant">NULL</code>: while it is required to be a macro,
- the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
- to be <code class="constant">(void*)0</code>, which is often used in C.
- </p><p>
- For <span class="command"><strong>g++</strong></span>, <code class="constant">NULL</code> is
- </p><pre class="programlisting">#define</pre><p>'d to be
- <code class="constant">__null</code>, a magic keyword extension of
- <span class="command"><strong>g++</strong></span>.
- </p><p>
- The biggest problem of #defining <code class="constant">NULL</code> to be
- something like <span class="quote">“<span class="quote">0L</span>â€</span> is that the compiler will view
- that as a long integer before it views it as a pointer, so
- overloading won't do what you expect. (This is why
- <span class="command"><strong>g++</strong></span> has a magic extension, so that
- <code class="constant">NULL</code> is always a pointer.)
- </p><p>In his book <a class="ulink" href="http://www.awprofessional.com/titles/0-201-92488-9/" target="_top"><span class="emphasis"><em>Effective
- C++</em></span></a>, Scott Meyers points out that the best way
- to solve this problem is to not overload on pointer-vs-integer
- types to begin with. He also offers a way to make your own magic
- <code class="constant">NULL</code> that will match pointers before it
- matches integers.
- </p><p>See
- <a class="ulink" href="http://www.awprofessional.com/titles/0-201-31015-5/" target="_top">the
- Effective C++ CD example</a>
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch04s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="fundamental_types.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Numeric Properties </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. Dynamic Memory</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch08.html b/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
index b66b555a2da..3487b705f00 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch08.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Concept Checking</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Part III.  Diagnostics" /><link rel="prev" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /><link rel="next" href="utilities.html" title="Part IV.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
Diagnostics
-</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8. Concept Checking"><div class="titlepage"><div><div><h2 class="title"><a id="manual.diagnostics.concept_checking"></a>Chapter 8. Concept Checking</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Concept Checking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>â€</span> to their
implementation of the STL: code which checked the template
parameters of instantiated pieces of the STL, in order to insure
@@ -39,7 +39,10 @@
support for template parameter constraints based on concepts in the core
language. This will obviate the need for the library-simulated concept
checking described above.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding Data to Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. 
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. 
+ Diagnostics
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. 
Utilities
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt02pr01.html b/libstdc++-v3/doc/html/manual/bk01pt02pr01.html
deleted file mode 100644
index d88bbccff21..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt02pr01.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II.  Support" /><link rel="prev" href="support.html" title="Part II.  Support" /><link rel="next" href="fundamental_types.html" title="Chapter 4. Types" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Part II. 
- Support
-
-</th><td width="20%" align="right"> <a accesskey="n" href="fundamental_types.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a id="id616146"></a></h2></div></div></div><p>
- This part deals with the functions called and objects created
- automatically during the course of a program's existence.
- </p><p>
- While we can't reproduce the contents of the Standard here (you
- need to get your own copy from your nation's member body; see our
- homepage for help), we can mention a couple of changes in what
- kind of support a C++ program gets from the Standard Library.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fundamental_types.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. 
- Support
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. Types</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html
deleted file mode 100644
index 54df29a6553..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Adding Data to Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="prev" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="next" href="bk01pt03ch08.html" title="Chapter 8. Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Adding Data to Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Exceptions</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Adding Data to Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.data"></a>Adding Data to Exceptions</h2></div></div></div><p>
- The standard exception classes carry with them a single string as
- data (usually describing what went wrong or where the 'throw' took
- place). It's good to remember that you can add your own data to
- these exceptions when extending the hierarchy:
- </p><pre class="programlisting">
- struct My_Exception : public std::runtime_error
- {
- public:
- My_Exception (const string&amp; whatarg)
- : std::runtime_error(whatarg), e(errno), id(GetDataBaseID()) { }
- int errno_at_time_of_throw() const { return e; }
- DBID id_of_thing_that_threw() const { return id; }
- protected:
- int e;
- DBID id; // some user-defined type
- };
- </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="exceptions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. Concept Checking</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch07s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch07s03.html
deleted file mode 100644
index b6bbc40ea0b..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt03ch07s03.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Cancellation</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="prev" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /><link rel="next" href="bk01pt03ch08.html" title="Chapter 8. Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Cancellation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Exceptions</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.cancellation"></a>Cancellation</h2></div></div></div><p>
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="exceptions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding Data to Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. Concept Checking</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch30s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
index 2605ad3b453..f2f1f483c00 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch30s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 30. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 30. Debug Mode" /><link rel="next" href="bk01pt12ch30s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch30s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="bk01pt03ch17s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
</p><p>A program that uses the C++ standard library correctly
will maintain the same semantics under debug mode as it had with
the normal (release) library. All functional and exception-handling
@@ -10,7 +10,7 @@
instance, erasing an element in a <code class="code">std::list</code> is a
constant-time operation in normal library, but in debug mode it is
linear in the number of iterators that reference that particular
- list. So while your (correct) program won't change its results, it
+ list. So while your (correct) program won't change its results, it
is likely to execute more slowly.</p><p>libstdc++ includes many extensions to the C++ standard library. In
some cases the extensions are obvious, such as the hashed
associative containers, whereas other extensions give predictable
@@ -52,4 +52,4 @@ with the debug-mode checks included, but this is unsupported and not
guaranteed to work. For full debug-mode support you can use the
<code class="code">__gnu_debug::basic_string</code> debugging container directly,
which always works correctly.
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
new file mode 100644
index 00000000000..4a5cd00f07c
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
+ </p><div class="sect2" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
+ compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
+ changes the sizes and behavior of standard class templates such
+ as <code class="code">std::vector</code>, and therefore you can only link code
+ compiled with debug mode and code compiled without debug mode if no
+ instantiation of a container is passed between the two translation
+ units.</p><p>By default, error messages are formatted to fit on lines of about
+ 78 characters. The environment variable
+ <code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
+ different length.</p></div><div class="sect2" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ only specific containers need checking, debugging containers are
+ available as GNU extensions. These debugging containers are
+ functionally equivalent to the standard drop-in containers used in
+ debug mode, but they are available in a separate namespace as GNU
+ extensions and may be used in programs compiled with either release
+ mode or with debug mode. The
+ following table provides the names and headers of the debugging
+ containers:
+</p><div class="table"><a id="id419645"></a><p class="title"><b>Table 17.1. Debugging Containers</b></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++0x mode, these additional
+containers have additional debug capability.
+</p><div class="table"><a id="id391116"></a><p class="title"><b>Table 17.2. Debugging Containers C++0x</b></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch30s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
index 862789635a7..758af487ad7 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch30s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 30. Debug Mode" /><link rel="prev" href="bk01pt12ch30s03.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch30s03.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="bk01pt03ch17s03.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
</p><div class="sect2" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
containers and iterators with semantically equivalent safe standard
@@ -38,7 +38,7 @@
own usability and implementation characteristics. In general, the
higher-numbered conformance levels are more usable (i.e., require
less recompilation) but are more complicated to implement than
- the lower-numbered conformance levels.
+ the lower-numbered conformance levels.
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><span class="emphasis"><em>Full recompilation</em></span>: The user must recompile his or
her entire application and all C++ libraries it depends on,
including the C++ standard library that ships with the
@@ -101,7 +101,7 @@
container that will perform the actual work. This design decision
ensures that we cannot regress release-mode performance (because the
release-mode containers are left untouched) and partially
- enables <a class="link" href="bk01pt12ch30s04.html#methods.coexistence.link" title="Link- and run-time coexistence of release- and debug-mode components">mixing debug and
+ enables <a class="link" href="bk01pt03ch17s04.html#methods.coexistence.link" title="Link- and run-time coexistence of release- and debug-mode components">mixing debug and
release code</a> at link time, although that will not be
discussed at this time.</p><p>Two types of wrappers are used in the implementation of the debug
mode: container wrappers and iterator wrappers. The two types of
@@ -133,8 +133,8 @@
version) as appropriate. However, all safe containers inherit from
the class template <code class="code">__gnu_debug::_Safe_sequence</code>,
instantiated with the type of the safe container itself (an instance
- of the curiously recurring template pattern).</p><p>The iterators of a container wrapper will be
- <a class="link" href="bk01pt12ch30s04.html#debug_mode.design.methods.safe_iter" title="Safe Iterators">safe
+ of the curiously recurring template pattern).</p><p>The iterators of a container wrapper will be
+ <a class="link" href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter" title="Safe Iterators">safe
iterators</a> that reference sequences of this type and wrap the
iterators provided by the release-mode base class. The debugging
container will use only the safe iterators within its own interface
@@ -221,7 +221,7 @@ namespace std
};
} // namespace std
</pre><p>In debug mode we include the release-mode container (which is now
-defined in in the namespace <code class="code">__norm</code>) and also the
+defined in the namespace <code class="code">__norm</code>) and also the
debug-mode container. The debug-mode container is defined within the
namespace <code class="code">__debug</code>, which is associated with namespace
<code class="code">std</code> via the C++0x namespace association language feature. This
@@ -236,7 +236,7 @@ namespace std
template&lt;typename _Tp, typename _Alloc = allocator&lt;_Tp&gt; &gt;
class list
{
- // ...
+ // ...
};
} // namespace __gnu_norm
@@ -245,9 +245,9 @@ namespace std
template&lt;typename _Tp, typename _Alloc = allocator&lt;_Tp&gt; &gt;
class list
: public __norm::list&lt;_Tp, _Alloc&gt;,
- public __gnu_debug::_Safe_sequence&lt;list&lt;_Tp, _Alloc&gt; &gt;
+ public __gnu_debug::_Safe_sequence&lt;list&lt;_Tp, _Alloc&gt; &gt;
{
- // ...
+ // ...
};
} // namespace __norm
@@ -256,7 +256,7 @@ namespace std
}
</pre></div><div class="sect4" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
-debug implementation, there are are no issues with link-time
+debug implementation, there is no issue with link-time
coexistence: the separate namespaces result in different mangled
names, and thus unique linkage.</p><p>However, components that are defined and used within the C++
standard library itself face additional constraints. For instance,
@@ -273,12 +273,12 @@ runtime errors. A simplified example of this problem is as follows.
#include &lt;string&gt;
std::string test02();
-
+
std::string test01()
{
return test02();
}
-
+
int main()
{
test01();
@@ -286,7 +286,7 @@ int main()
}
</pre><p> ... and linked to this translation unit, compiled in release mode:</p><pre class="programlisting">
#include &lt;string&gt;
-
+
std::string
test02()
{
@@ -349,7 +349,7 @@ test02()
enticing option, because it would eliminate the need for
the <code class="code">link_name</code> extension by aliasing the
templates. However, there is no true template aliasing mechanism
- is C++, because both <code class="code">using</code> directives and using
+ in C++, because both <code class="code">using</code> directives and using
declarations disallow specialization. This method fails
the <span class="emphasis"><em>correctness</em></span> criteria.</p></li><li class="listitem"><p><span class="emphasis"><em> Use implementation-specific properties of anonymous
namespaces. </em></span>
@@ -375,7 +375,7 @@ test02()
include ordering. Two, ODR issues remained with container member
functions taking no arguments in mixed-mode settings resulting in
equivalent link names, <code class="code"> vector::push_back() </code> being
- one example.
+ one example.
See <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html" target="_top">link
name</a> </p></li></ul></div><p>Other options may exist for implementing the debug mode, many of
which have probably been considered and others that may still be
@@ -409,4 +409,4 @@ test02()
a full debug-mode implementation (including debugging for
CodeWarrior extensions) and is easy to use, although it meets only
the "Full recompilation" (1) recompilation
- guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch30s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 31. Parallel Mode</td></tr></table></div></body></html>
+ guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
index 64acc0aa5c3..29f7dad3cca 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /><link rel="next" href="bk01pt12ch31s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 31. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch31s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="bk01pt03ch18s03.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Semantics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
i.e. user-defined functors must not throw exceptions.
Also, the order of execution is not guaranteed for some functions, of course.
Therefore, user-defined functors should not have any concurrent side effects.
@@ -8,4 +8,4 @@ Therefore, user-defined functors should not have any concurrent side effects.
OpenMP parallel regions in concurrent threads,
it is not possible to call parallel STL algorithm in
concurrent threads, either.
-It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 31. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
index 45d01b93b99..39c176c46ea 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /><link rel="prev" href="bk01pt12ch31s02.html" title="Semantics" /><link rel="next" href="bk01pt12ch31s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch31s02.html">Prev</a> </td><th width="60%" align="center">Chapter 31. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch31s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="sect2" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="sect2" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
Any use of parallel functionality requires additional compiler
and runtime support, in particular support for OpenMP. Adding this support is
not difficult: just compile your application with the compiler
flag <code class="literal">-fopenmp</code>. This will link
in <code class="code">libgomp</code>, the GNU
OpenMP <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libgomp" target="_top">implementation</a>,
- whose presence is mandatory.
+ whose presence is mandatory.
</p><p>
In addition, hardware that supports atomic operations and a compiler
capable of producing atomic operations is mandatory: GCC defaults to no
@@ -63,4 +63,4 @@ Then compile this code with the prerequisite compiler flags
flags for atomic operations.)
</p><p> The following table provides the names and headers of all the
parallel algorithms that can be used in a similar manner:
-</p><div class="table"><a id="id713517"></a><p class="title"><b>Table 31.1. Parallel Algorithms</b></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
+</p><div class="table"><a id="id416292"></a><p class="title"><b>Table 18.1. Parallel Algorithms</b></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
index 0e5f92549a5..2b2fd27996e 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /><link rel="prev" href="bk01pt12ch31s03.html" title="Using" /><link rel="next" href="bk01pt12ch31s05.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch31s03.html">Prev</a> </td><th width="60%" align="center">Chapter 31. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch31s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
</p><div class="sect2" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
All parallel algorithms are intended to have signatures that are
equivalent to the ISO C++ algorithms replaced. For instance, the
@@ -105,7 +105,7 @@ For the following algorithms in general, we have
<code class="code">__gnu_parallel::parallel_tag</code> and
<code class="code">__gnu_parallel::default_parallel_tag</code>, in addition to
<code class="code">__gnu_parallel::sequential_tag</code>.
-<code class="code">__gnu_parallel::default_parallel_tag</code> chooses the default
+<code class="code">__gnu_parallel::default_parallel_tag</code> chooses the default
algorithm at compiletime, as does omitting the tag.
<code class="code">__gnu_parallel::parallel_tag</code> postpones the decision to runtime
(see next section).
@@ -120,7 +120,7 @@ Exact and sampling are the two available splitting strategies.
For the <code class="code">sort</code> and <code class="code">stable_sort</code> algorithms, there are
several additional choices, namely
<code class="code">__gnu_parallel::multiway_mergesort_tag</code>,
-<code class="code">__gnu_parallel::multiway_mergesort_exact_tag</code>,
+<code class="code">__gnu_parallel::multiway_mergesort_exact_tag</code>,
<code class="code">__gnu_parallel::multiway_mergesort_sampling_tag</code>,
<code class="code">__gnu_parallel::quicksort_tag</code>, and
<code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
@@ -198,7 +198,7 @@ int main()
explicitly sequential:
<code class="code">__gnu_serial</code>.
</p><p> Two namespaces contain the parallel mode:
-<code class="code">std::__parallel</code> and <code class="code">__gnu_parallel</code>.
+<code class="code">std::__parallel</code> and <code class="code">__gnu_parallel</code>.
</p><p> Parallel implementations of standard components, including
template helpers to select parallelism, are defined in <code class="code">namespace
std::__parallel</code>. For instance, <code class="function">std::transform</code> from <code class="filename">algorithm</code> has a parallel counterpart in
@@ -210,4 +210,4 @@ __gnu_parallel</code>.
</p><p> More information, and an organized index of types and functions
related to the parallel mode on a per-namespace basis, can be found in
the generated source documentation.
-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s05.html b/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
index 6a10f32eea9..7a92bbaba9c 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s05.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 31. Parallel Mode" /><link rel="prev" href="bk01pt12ch31s04.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 32. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch31s04.html">Prev</a> </td><th width="60%" align="center">Chapter 31. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="bk01pt03ch18s04.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
Both the normal conformance and regression tests and the
supplemental performance tests work.
- </p><p>
+ </p><p>
To run the conformance and regression tests with the parallel mode
active,
</p><pre class="screen">
@@ -11,7 +11,7 @@
</pre><p>
The log and summary files for conformance testing are in the
<code class="filename">testsuite/parallel</code> directory.
- </p><p>
+ </p><p>
To run the performance tests with the parallel mode active,
</p><pre class="screen">
<strong class="userinput"><code>make check-performance-parallel</code></strong>
@@ -23,4 +23,4 @@
additional software dependencies than the usual bare-boned text
file, and can be generated by using the <code class="code">make
doc-performance</code> rule in the testsuite's Makefile.
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 32. Profile Mode</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
index 3d3439b1fa3..f025729c10c 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="next" href="bk01pt12ch32s03.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
-</p><div class="table"><a id="id594983"></a><p class="title"><b>Table 32.1. Code Location</b></p><div class="table-contents"><table summary="Code Location" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
+</p><div class="table"><a id="id442414"></a><p class="title"><b>Table 19.1. Profile Code Location</b></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
only included from <code class="code">impl/profiler.h</code>, which is the only
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
</p><div class="sect2" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
@@ -10,12 +10,12 @@
we use the same wrapper model as the debug mode.
We subclass entities from the release version. Wherever
<code class="code">_GLIBCXX_PROFILE</code> is defined, the release namespace is
- <code class="code">std::__norm</code>, whereas the profile namespace is
+ <code class="code">std::__norm</code>, whereas the profile namespace is
<code class="code">std::__profile</code>. Using plain <code class="code">std</code> translates
into <code class="code">std::__profile</code>.
</p><p>
Whenever possible, we try to wrap at the public interface level, e.g.,
- in <code class="code">unordered_set</code> rather than in <code class="code">hashtable</code>,
+ in <code class="code">unordered_set</code> rather than in <code class="code">hashtable</code>,
in order not to depend on implementation.
</p><p>
Mixing object files built with and without the profile mode must
@@ -29,12 +29,12 @@
Instead of instrumenting every public entry and exit point,
we chose to add instrumentation on demand, as needed
by individual diagnostics.
- The main reason is that some diagnostics require us to extract bits of
+ The main reason is that some diagnostics require us to extract bits of
internal state that are particular only to that diagnostic.
We plan to formalize this later, after we learn more about the requirements
of several diagnostics.
</p><p>
- All the instrumentation points can be switched on and off using
+ All the instrumentation points can be switched on and off using
<code class="code">-D[_NO]_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code> options.
With all the instrumentation calls off, there should be negligible
overhead over the release version. This property is needed to support
@@ -42,7 +42,7 @@
we anticipate turning most of the instrumentation off in order to prevent
profiling overhead from polluting time measurements, and thus diagnostics.
</p><p>
- All the instrumentation on/off compile time switches live in
+ All the instrumentation on/off compile time switches live in
<code class="code">include/profile/profiler.h</code>.
</p></div><div class="sect2" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
For practical reasons, the instrumentation library processes the trace
@@ -60,7 +60,7 @@
is destroyed, we accumulate its effect to the corresponding entry for the
call stack of its constructor location.
</p><p>
- For details, see
+ For details, see
<a class="ulink" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
CGO 2009</a>.
</p></div><div class="sect2" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
@@ -71,7 +71,7 @@
The input to the analysis is a table indexed by profile type and call stack.
The data type for each entry depends on the profile type.
</p></div><div class="sect2" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
- While it is likely that cost models become complex as we get into
+ While it is likely that cost models become complex as we get into
more sophisticated analysis, we will try to follow a simple set of rules
at the beginning.
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
@@ -95,7 +95,7 @@
and report the one that performs best for each call context.
</p></li><li class="listitem"><p><span class="emphasis"><em>Show stoppers:</em></span>
We may decide that the presence of an operation nullifies the advice.
- For instance, when considering switching from <code class="code">set</code> to
+ For instance, when considering switching from <code class="code">set</code> to
<code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
we will simply not issue the advice, since this could signal that the use
care require a sorted container.</p></li></ul></div></div><div class="sect2" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
@@ -119,4 +119,4 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
We created a <code class="code">profile</code> directory in the test suite.
Each diagnostic must come with at least two tests, one for false positives
and one for false negatives.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 32. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
index f943e20f0e7..89c14c0a821 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="bk01pt12ch32s02.html" title="Design" /><link rel="next" href="bk01pt12ch32s04.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s02.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Extensions for Custom Containers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
Many large projects use their own data structures instead of the ones in the
standard library. If these data structures are similar in functionality
to the standard library, they can be instrumented with the same hooks
that are used to instrument the standard library.
The instrumentation API is exposed in file
<code class="code">profiler.h</code> (look for "Instrumentation hooks").
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s04.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
index 70a142871d2..64a3a19822a 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s04.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="bk01pt12ch32s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt12ch32s05.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s03.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Empirical Cost Model"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
Currently, the cost model uses formulas with predefined relative weights
for alternative containers or container implementations. For instance,
iterating through a vector is X times faster than iterating through a list.
@@ -15,4 +15,4 @@
filled in either by hand or by an automated training mechanism.
The analysis module will then use this database instead of the built in.
generic parameters.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s05.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
index d64fd47518f..025dbb12679 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s05.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="bk01pt12ch32s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt12ch32s06.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s04.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s06.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="sect2" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation Issues"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="sect2" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
Accurate stack traces are needed during profiling since we group events by
call context and dynamic instance. Without accurate traces, diagnostics
may be hard to interpret. For instance, when giving advice to the user
@@ -24,15 +24,15 @@
During profiling, we keep a single information table per diagnostic.
There is a single lock per information table.
</p></div><div class="sect2" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
- As much as we would like to avoid uses of stdlibc++ within our
- instrumentation library, containers such as unordered_map are very
- appealing. We plan to use them as long as they are named properly
+ As much as we would like to avoid uses of libstdc++ within our
+ instrumentation library, containers such as unordered_map are very
+ appealing. We plan to use them as long as they are named properly
to avoid ambiguity.
</p></div><div class="sect2" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
User applications/libraries can provide malloc hooks.
When the implementation of the malloc hooks uses stdlibc++, there can
be an infinite cycle between the profile mode instrumentation and the
- the malloc hook code.
+ malloc hook code.
</p><p>
We protect against reentrance to the profile mode instrumentation code,
which should avoid this problem in most cases.
@@ -46,6 +46,6 @@
The profiling library state is initialized at the first call to a profiling
method. This allows us to record the construction of all global objects.
However, we cannot do the same at destruction time. The trace is written
- by a function registered by <code class="code">atexit</code>, thus invoked by
+ by a function registered by <code class="code">atexit</code>, thus invoked by
<code class="code">exit</code>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s06.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
index ec752d398de..a4eb97333e8 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s06.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="bk01pt12ch32s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt12ch32s07.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s05.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s07.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Developer Information"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="sect2" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
- <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Developer Information"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="sect2" title="Big Picture"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
+ <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
<code class="code">include/std/*</code>.
- </p><p>Instrumented implementations are provided in
+ </p><p>Instrumented implementations are provided in
<code class="code">include/profile/*</code>. All instrumentation hooks are macros
defined in <code class="code">include/profile/profiler.h</code>.
- </p><p>All the implementation of the instrumentation hooks is in
+ </p><p>All the implementation of the instrumentation hooks is in
<code class="code">include/profile/impl/*</code>. Although all the code gets included,
thus is publicly visible, only a small number of functions are called from
outside this directory. All calls to hook implementations must be
done through macros defined in <code class="code">profiler.h</code>. The macro
- must ensure (1) that the call is guarded against reentrance and
+ must ensure (1) that the call is guarded against reentrance and
(2) that the call can be turned off at compile time using a
<code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
</p></div><div class="sect2" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
- </p><p>If you need to instrument a header not already under
+ </p><p>If you need to instrument a header not already under
<code class="code">include/profile/*</code>, first edit the corresponding header
under <code class="code">include/std/</code> and add a preprocessor directive such
as the one in <code class="code">include/std/vector</code>:
@@ -57,7 +57,7 @@
Define class <code class="code">__magic_stack_info: public __magic_info</code>.
This defines the content of a line in the stack table.
</p></li><li class="listitem"><p>
- Define class <code class="code">__trace_magic: public __trace_base&lt;__magic_info,
+ Define class <code class="code">__trace_magic: public __trace_base&lt;__magic_info,
__magic_stack_info&gt;</code>.
It defines the content of the trace associated with this diagnostic.
</p></li></ul></div><p>
@@ -65,4 +65,4 @@
<code class="code">include/profile/impl/profiler_trace.h</code>. Use
<code class="code">__trace_vector_to_list</code> as an example.
</p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html b/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
index 390d5665ebc..2f2ff5dff57 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="bk01pt12ch32s06.html" title="Developer Information" /><link rel="next" href="ext_allocators.html" title="Chapter 33. Allocators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s06.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="bk01pt03ch19s06.html" title="Developer Information" /><link rel="next" href="ext_allocators.html" title="Chapter 20. Allocators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Diagnostics"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
The table below presents all the diagnostics we intend to implement.
Each diagnostic has a corresponding compile time switch
<code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
Groups of related diagnostics can be turned on with a single switch.
For instance, <code class="code">-D_GLIBCXX_PROFILE_LOCALITY</code> is equivalent to
- <code class="code">-D_GLIBCXX_PROFILE_SOFTWARE_PREFETCH
+ <code class="code">-D_GLIBCXX_PROFILE_SOFTWARE_PREFETCH
-D_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
</p><p>
The benefit, cost, expected frequency and accuracy of each diagnostic
@@ -18,7 +18,7 @@
A high accuracy means that the diagnostic is unlikely to be wrong.
These grades are not perfect. They are just meant to guide users with
specific needs or time budgets.
- </p><div class="table"><a id="id626153"></a><p class="title"><b>Table 32.2. Diagnostics</b></p><div class="table-contents"><table summary="Diagnostics" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th></tr></thead><tbody><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.containers" target="_top">
+ </p><div class="table"><a id="id470044"></a><p class="title"><b>Table 19.2. Profile Diagnostics</b></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.containers" target="_top">
CONTAINERS</a></td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_small" target="_top">
HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_large" target="_top">
HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.inefficient_hash" target="_top">
@@ -57,22 +57,22 @@ advice sample
<code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
</p><div class="sect3" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
rehash operations, small construction size and large destruction size.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span> Rehash is very expensive.
Read content, follow chains within bucket, evaluate hash function, place at
new location in different order.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span> 36%.
Code similar to example below.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
Set initial size to N at construction site S.
- </p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span>
<code class="code">unordered_set, unordered_map</code> constructor, destructor, rehash.
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
For each dynamic instance of <code class="code">unordered_[multi]set|map</code>,
record initial size and call context of the constructor.
Record size increase, if any, after each relevant operation such as insert.
Record the estimated rehash cost.</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Number of individual rehash operations * cost per rehash.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Number of individual rehash operations * cost per rehash.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 unordered_set&lt;int&gt; us;
2 for (int k = 0; k &lt; 1000000; ++k) {
@@ -89,16 +89,16 @@ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span> Save memory, which
is good in itself and may also improve memory reference performance through
fewer cache and TLB misses.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span> unknown.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
Set initial size to N at construction site S.
- </p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span>
<code class="code">unordered_set, unordered_map</code> constructor, destructor, rehash.
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
For each dynamic instance of <code class="code">unordered_[multi]set|map</code>,
record initial size and call context of the constructor, and correlate it
with its size at destruction time.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Number of iteration operations + memory saved.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Number of iteration operations + memory saved.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 vector&lt;unordered_set&lt;int&gt;&gt; v(100000, unordered_set&lt;int&gt;(100)) ;
2 for (int k = 0; k &lt; 100000; ++k) {
@@ -114,7 +114,7 @@ bytes of memory and M iteration steps.
<code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
distribution.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span> A non-uniform
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span> A non-uniform
distribution may lead to long chains, thus possibly increasing complexity
by a factor up to the number of elements.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span> factor up
@@ -128,7 +128,7 @@ bytes of memory and M iteration steps.
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
Count the exact number of link traversals.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Total number of links traversed.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Total number of links traversed.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
class dumb_hash {
public:
@@ -143,7 +143,7 @@ class dumb_hash {
</pre><p>
</p></li></ul></div></div><div class="sect3" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
resize operations, small construction size and large destruction size..
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>Resizing can be expensive.
Copying large amounts of data takes time. Resizing many small vectors may
@@ -153,17 +153,17 @@ class dumb_hash {
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
For each dynamic instance of <code class="code">vector</code>,
record initial size and call context of the constructor.
- Record size increase, if any, after each relevant operation such as
+ Record size increase, if any, after each relevant operation such as
<code class="code">push_back</code>. Record the estimated resize cost.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Total number of words copied * time to copy a word.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Total number of words copied * time to copy a word.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 vector&lt;int&gt; v;
2 for (int k = 0; k &lt; 1000000; ++k) {
3 v.push_back(k);
4 }
-foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
+foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
copying 4000000 bytes and 20 memory allocations and deallocations.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
@@ -180,7 +180,7 @@ copying 4000000 bytes and 20 memory allocations and deallocations.
For each dynamic instance of <code class="code">vector</code>,
record initial size and call context of the constructor, and correlate it
with its size at destruction time.</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Total amount of memory saved.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Total amount of memory saved.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 vector&lt;vector&lt;int&gt;&gt; v(100000, vector&lt;int&gt;(100)) ;
2 for (int k = 0; k &lt; 100000; ++k) {
@@ -194,20 +194,20 @@ bytes of memory and may reduce the number of cache and TLB misses.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
<code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
to reduce execution time.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
Linear search in a vector is very expensive, whereas searching in a hashtable
is very quick.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>factor up
to container size.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>Replace
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>Replace
<code class="code">vector</code> with <code class="code">unordered_set</code> at site S.
</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span><code class="code">vector</code>
operations and access methods.</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
For each dynamic instance of <code class="code">vector</code>,
record call context of the constructor. Issue the advice only if the
- only methods called on this <code class="code">vector</code> are <code class="code">push_back</code>,
+ only methods called on this <code class="code">vector</code> are <code class="code">push_back</code>,
<code class="code">insert</code> and <code class="code">find</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
Cost(vector::push_back) + cost(vector::insert) + cost(find, vector) -
@@ -225,18 +225,18 @@ comparisons.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
<code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
to reduce execution time.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
Hashtable iterator is slower than vector iterator.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>95%.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>Replace
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>Replace
<code class="code">unordered_set</code> with <code class="code">vector</code> at site S.
</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span><code class="code">unordered_set</code>
operations and access methods.</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
For each dynamic instance of <code class="code">unordered_set</code>,
record call context of the constructor. Issue the advice only if the
- number of <code class="code">find</code>, <code class="code">insert</code> and <code class="code">[]</code>
+ number of <code class="code">find</code>, <code class="code">insert</code> and <code class="code">[]</code>
operations on this <code class="code">unordered_set</code> are small relative to the
number of elements, and methods <code class="code">begin</code> or <code class="code">end</code>
are invoked (suggesting iteration).</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
@@ -254,11 +254,11 @@ indirections and may achieve better data locality.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">vector</code> could be substituted with <code class="code">list</code> for
better performance.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
- Inserting in the middle of a vector is expensive compared to inserting in a
+ Inserting in the middle of a vector is expensive compared to inserting in a
list.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>factor up to
container size.
@@ -272,19 +272,19 @@ indirections and may achieve better data locality.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
(Sum(cost(vector::method)) - Sum(cost(list::method)), for
method in [push_back, insert, erase])
- + (Cost(iterate vector) - Cost(iterate list))</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ + (Cost(iterate vector) - Cost(iterate list))</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 vector&lt;int&gt; v;
2 for (int i = 0; i &lt; 10000; ++i) {
3 v.insert(v.begin(), i);
4 }
-foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
+foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
operations.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">list</code> could be substituted with <code class="code">vector</code> for
better performance.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
@@ -297,7 +297,7 @@ operations.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
(Sum(cost(vector::method)) - Sum(cost(list::method)), for
method in [push_back, insert, erase])
- + (Cost(iterate vector) - Cost(iterate list))</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ + (Cost(iterate vector) - Cost(iterate list))</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 list&lt;int&gt; l;
...
@@ -311,7 +311,7 @@ memory references.
</pre><p>
</p></li></ul></div></div><div class="sect3" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
<code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
better performance.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
@@ -328,7 +328,7 @@ memory references.
Issue the advice if there are no <code class="code">backwards</code> traversals
or insertion before a given node.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
- Always true.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ Always true.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 list&lt;int&gt; l;
...
@@ -344,7 +344,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
associative containers can be replaced with unordered ones.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
- Insert and search are quicker in a hashtable than in
+ Insert and search are quicker in a hashtable than in
a red-black tree.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>52%.
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
Replace set with unordered_set at site S.</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span>
@@ -374,9 +374,9 @@ foo.cc:1: advice: Change "list" to "forward_list".
performance based on actual input. For instance, advise Radix Sort over
Quick Sort for a particular call context.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
- See papers:
+ See papers:
<a class="ulink" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
- A framework for adaptive algorithm selection in STAPL</a> and
+ A framework for adaptive algorithm selection in STAPL</a> and
<a class="ulink" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
Optimizing Sorting with Machine Learning Algorithms</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>60%.
@@ -384,7 +384,7 @@ foo.cc:1: advice: Change "list" to "forward_list".
at site S from X Sort to Y Sort.</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span> <code class="code">sort</code>
algorithm.</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
Issue the advice if the cost model tells us that another sort algorithm
- would do better on this input. Requires us to know what algorithm we
+ would do better on this input. Requires us to know what algorithm we
are using in our sort implementation in release mode.</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
@@ -399,13 +399,13 @@ foo.cc:1: advice: Change "list" to "forward_list".
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
Indirect references are hard to predict and are very expensive when they
miss in caches.</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>25%.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span> Insert prefetch
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span> Insert prefetch
instruction.</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span> Vector iterator and
access operator [].
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
First, get cache line size and page size from system.
Then record iterator dereference sequences for which the value is a pointer.
- For each sequence within a container, issue a warning if successive pointer
+ For each sequence within a container, issue a warning if successive pointer
addresses are not within cache lines and do not form a linear pattern
(otherwise they may be prefetched by hardware).
If they also step across page boundaries, make the warning stronger.
@@ -417,11 +417,11 @@ foo.cc:1: advice: Change "list" to "forward_list".
</p><p>
This analysis is a little oversimplified. A better cost model could be
created by understanding the capability of the hardware prefetcher.
- This model could be trained automatically by running a set of synthetic
+ This model could be trained automatically by running a set of synthetic
cases.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
Total distance between pointer values of successive elements in vectors
- of pointers.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ of pointers.</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 int zero = 0;
2 vector&lt;int*&gt; v(10000000, &amp;zero);
@@ -441,14 +441,14 @@ foo.cc:7: advice: Insert prefetch instruction.
with respect to their actual traversal patterns.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>Allocation can be tuned
to a specific traversal pattern, to result in better data locality.
- See paper:
+ See paper:
<a class="ulink" href="http://www.springerlink.com/content/8085744l00x72662/" target="_top">
Custom Memory Allocation for Free</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Sample runtime reduction:</em></span>30%.
</p></li><li class="listitem"><p><span class="emphasis"><em>Recommendation:</em></span>
High scatter score N for container built at site S.
Consider changing allocation sequence or choosing a structure conscious
- allocator.</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span> Methods of all
+ allocator.</p></li><li class="listitem"><p><span class="emphasis"><em>To instrument:</em></span> Methods of all
containers using linked structures.</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
First, get cache line size and page size from system.
Then record the number of successive elements that are on different line
@@ -502,7 +502,7 @@ the allocation sequence or switching to a structure conscious allocator.
container member accesses. Issue advice for elements referenced by
multiple threads.
See paper: <a class="ulink" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
- The LRPD test: speculative run-time parallelization of loops with
+ The LRPD test: speculative run-time parallelization of loops with
privatization and reduction parallelization</a>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
Number of accesses to elements referenced from multiple threads
@@ -512,7 +512,7 @@ the allocation sequence or switching to a structure conscious allocator.
</p></li></ul></div></div><div class="sect3" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
<code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
</p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
- same container which share a cache line, are written by at least one
+ same container which share a cache line, are written by at least one
thread, and accessed by different threads.
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span> Under these assumptions,
cache protocols require
@@ -523,14 +523,14 @@ the allocation sequence or switching to a structure conscious allocator.
and iterators.
</p></li><li class="listitem"><p><span class="emphasis"><em>Analysis:</em></span>
First, get the cache line size.
- For each shared container, record all the associated iterator dereferences
+ For each shared container, record all the associated iterator dereferences
and member access methods with the thread id. Compare the address lists
- across threads to detect references in two different threads to the same
- cache line. Issue a warning only if the ratio to total references is
- significant. Do the same for iterator dereference values if they are
+ across threads to detect references in two different threads to the same
+ cache line. Issue a warning only if the ratio to total references is
+ significant. Do the same for iterator dereference values if they are
pointers.</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
Number of accesses to same cache line from different threads.
- </p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
</p><pre class="programlisting">
1 vector&lt;int&gt; v(2, 0);
2 #pragma omp parallel for shared(v, SIZE) schedule(static, 1)
@@ -539,7 +539,7 @@ the allocation sequence or switching to a structure conscious allocator.
5 }
OMP_NUM_THREADS=2 ./a.out
-foo.cc:1: advice: Change container structure or padding to avoid false
+foo.cc:1: advice: Change container structure or padding to avoid false
sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
</pre><p>
</p></li></ul></div></div></div><div class="sect2" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
@@ -555,4 +555,4 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
This diagnostic will not issue any advice, but it will print statistics for
each container construction site. The statistics will contain the cost
of each operation actually performed on the container.
-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 33. Allocators</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_allocators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. Allocators</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch34s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
index 70e4d924cec..185d3ad8df4 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch34s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 34. Containers" /><link rel="prev" href="ext_containers.html" title="Chapter 34. Containers" /><link rel="next" href="bk01pt12ch34s03.html" title="Deprecated HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 34. Containers</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch34s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>HP/SGI</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="prev" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="next" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>HP/SGI</h2></div></div></div><p>
</p><p>A few extensions and nods to backwards-compatibility have been made with
containers. Those dealing with older SGI-style allocators are dealt with
elsewhere. The remaining ones all deal with bits:
@@ -26,7 +26,7 @@
</pre><p>Note that these may in fact be removed in the future, although we have
no present plans to do so (and there doesn't seem to be any immediate
reason to).
-</p><p>The semantics of member function <code class="code">operator[]</code> are not specified
+</p><p>The semantics of member function <code class="code">operator[]</code> are not specified
in the C++ standard. A long-standing defect report calls for sensible
obvious semantics, which are already implemented here: <code class="code">op[]</code>
on a const bitset returns a bool, and for a non-const bitset returns a
@@ -40,4 +40,4 @@
</p><pre class="programlisting">
size_t _Find_first() const;
size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch34s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 34. Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated HP/SGI</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Containers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated HP/SGI</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch34s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html
index b9f0849bf5a..7486167b089 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch34s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch21s03.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 34. Containers" /><link rel="prev" href="bk01pt12ch34s02.html" title="HP/SGI" /><link rel="next" href="ext_utilities.html" title="Chapter 35. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch34s02.html">Prev</a> </td><th width="60%" align="center">Chapter 34. Containers</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Deprecated HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated HP/SGI</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated HP/SGI</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_containers.html" title="Chapter 21. Containers" /><link rel="prev" href="bk01pt03ch21s02.html" title="HP/SGI" /><link rel="next" href="ext_utilities.html" title="Chapter 22. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated HP/SGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Chapter 21. Containers</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Deprecated HP/SGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated HP/SGI</h2></div></div></div><p>
The SGI hashing classes <code class="classname">hash_set</code> and
<code class="classname">hash_set</code> have been deprecated by the
unordered_set, unordered_multiset, unordered_map,
@@ -47,4 +47,4 @@
possibility of pathological cases, you'll probably get better
performance from hash_map.
</em></span>
- </p></blockquote></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch34s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 35. Utilities</td></tr></table></div></body></html>
+ </p></blockquote></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Utilities</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch41s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html
index 6dee3ae2abb..ec4a92763c4 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch41s02.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch28s02.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 41. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 41. Concurrency" /><link rel="next" href="bk01pt12ch41s03.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 41. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch41s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="sect2" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="next" href="bk01pt03ch28s03.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="sect2" title="Using Builtin Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
implemented via compiler intrinsics (if the underlying host is
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
the compiler builtins for atomics are not universally implemented,
@@ -12,7 +12,7 @@ missing reference to <code class="code">__sync_fetch_and_add_4</code>.)
conditionally, via the <code class="code">-march</code> command line flag. This makes
usage vary depending on the target hardware and the flags used during
compile.
-</p><p>
+</p><p>
If builtins are possible for bool-sized integral types,
<code class="code">_GLIBCXX_ATOMIC_BUILTINS_1</code> will be defined.
If builtins are possible for int-sized integral types,
@@ -38,4 +38,4 @@ use this layer. More detail as to the specific interface can be found in the sou
functions, and usage found in the usual &lt;pthread.h&gt; file,
including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
etc.
-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch41s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 41. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch28s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch41s03.html b/libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html
index deb28ca2ca4..e5835a70b76 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch41s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03ch28s03.html
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 41. Concurrency" /><link rel="prev" href="bk01pt12ch41s02.html" title="Implementation" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch41s02.html">Prev</a> </td><th width="60%" align="center">Chapter 41. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Use"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="ext_concurrency.html" title="Chapter 28. Concurrency" /><link rel="prev" href="bk01pt03ch28s02.html" title="Implementation" /><link rel="next" href="bk01pt04.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Use"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
</p><pre class="programlisting">
#include &lt;ext/concurrence.h&gt;
@@ -31,7 +31,6 @@ the mutex as control moves out of this block.
concurrence-related errors. These classes
are: <code class="code">__concurrence_lock_error</code>, <code class="code">__concurrence_unlock_error</code>, <code class="code">__concurrence_wait_error</code>,
and <code class="code">__concurrence_broadcast_error</code>.
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch41s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
- Contributing
-
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch28s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. 
+ Appendices
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12pr03.html b/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
index a3af7c689c3..e3ac3f7bfbd 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12pr03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="extensions.html" title="Part XII.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a id="id684983"></a></h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a id="id410049"></a></h2></div></div></div><p>
Here we will make an attempt at describing the non-Standard extensions to
the library. Some of these are from SGI's STL, some of these are GNU's,
and some just seemed to appear on the doorstep.
</p><p><span class="emphasis"><em>Before</em></span> you leap in and use any of these
extensions, be aware of two things:
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
- Non-Standard means exactly that.
+ Non-Standard means exactly that.
</p><p>
The behavior, and the very
existence, of these extensions may change with little or no
warning. (Ideally, the really good ones will appear in the next
revision of C++.) Also, other platforms, other compilers, other
versions of g++ or libstdc++ may not recognize these names, or
- treat them differently, or...
+ treat them differently, or...
</p></li><li class="listitem"><p>
- You should know how to access these headers properly.
- </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part XII. 
+ You should know how to access these headers properly.
+ </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. 
Extensions
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Compile Time Checks</td></tr></table></div></body></html>
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt04.html b/libstdc++-v3/doc/html/manual/bk01pt04.html
new file mode 100644
index 00000000000..66713b1213d
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/bk01pt04.html
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt03ch28s03.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
+ Appendices
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch28s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part IV.  Appendices"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
+ Appendices
+</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
+ Contributing
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.combines">Combines</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
+ Porting and Maintenance
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="sect2"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
+ Free Software Needs Free Documentation
+
+</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch28s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Use </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
+ Contributing
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13.html
deleted file mode 100644
index e86d7fe1779..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13. String Classes</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="strings.html" title="Part V.  Strings" /><link rel="prev" href="strings.html" title="Part V.  Strings" /><link rel="next" href="bk01pt05ch13s02.html" title="Case Sensitivity" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. String Classes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part V. 
- Strings
-
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13. String Classes"><div class="titlepage"><div><div><h2 class="title"><a id="manual.strings.string"></a>Chapter 13. String Classes</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="bk01pt05ch13.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s02.html">Case Sensitivity</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s03.html">Arbitrary Character Types</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s04.html">Tokenizing</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s05.html">Shrink to Fit</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s06.html">CString (MFC)</a></span></dt></dl></div><div class="sect1" title="Simple Transformations"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.simple"></a>Simple Transformations</h2></div></div></div><p>
- Here are Standard, simple, and portable ways to perform common
- transformations on a <code class="code">string</code> instance, such as
- "convert to all upper case." The word transformations
- is especially apt, because the standard template function
- <code class="code">transform&lt;&gt;</code> is used.
- </p><p>
- This code will go through some iterations. Here's a simple
- version:
- </p><pre class="programlisting">
- #include &lt;string&gt;
- #include &lt;algorithm&gt;
- #include &lt;cctype&gt; // old &lt;ctype.h&gt;
-
- struct ToLower
- {
- char operator() (char c) const { return std::tolower(c); }
- };
-
- struct ToUpper
- {
- char operator() (char c) const { return std::toupper(c); }
- };
-
- int main()
- {
- std::string s ("Some Kind Of Initial Input Goes Here");
-
- // Change everything into upper case
- std::transform (s.begin(), s.end(), s.begin(), ToUpper());
-
- // Change everything into lower case
- std::transform (s.begin(), s.end(), s.begin(), ToLower());
-
- // Change everything back into upper case, but store the
- // result in a different string
- std::string capital_s;
- capital_s.resize(s.size());
- std::transform (s.begin(), s.end(), capital_s.begin(), ToUpper());
- }
- </pre><p>
- <span class="emphasis"><em>Note</em></span> that these calls all
- involve the global C locale through the use of the C functions
- <code class="code">toupper/tolower</code>. This is absolutely guaranteed to work --
- but <span class="emphasis"><em>only</em></span> if the string contains <span class="emphasis"><em>only</em></span> characters
- from the basic source character set, and there are <span class="emphasis"><em>only</em></span>
- 96 of those. Which means that not even all English text can be
- represented (certain British spellings, proper names, and so forth).
- So, if all your input forevermore consists of only those 96
- characters (hahahahahaha), then you're done.
- </p><p><span class="emphasis"><em>Note</em></span> that the
- <code class="code">ToUpper</code> and <code class="code">ToLower</code> function objects
- are needed because <code class="code">toupper</code> and <code class="code">tolower</code>
- are overloaded names (declared in <code class="code">&lt;cctype&gt;</code> and
- <code class="code">&lt;locale&gt;</code>) so the template-arguments for
- <code class="code">transform&lt;&gt;</code> cannot be deduced, as explained in
- <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html" target="_top">this
- message</a>.
-
- At minimum, you can write short wrappers like
- </p><pre class="programlisting">
- char toLower (char c)
- {
- return std::tolower(c);
- } </pre><p>(Thanks to James Kanze for assistance and suggestions on all of this.)
- </p><p>Another common operation is trimming off excess whitespace. Much
- like transformations, this task is trivial with the use of string's
- <code class="code">find</code> family. These examples are broken into multiple
- statements for readability:
- </p><pre class="programlisting">
- std::string str (" \t blah blah blah \n ");
-
- // trim leading whitespace
- string::size_type notwhite = str.find_first_not_of(" \t\n");
- str.erase(0,notwhite);
-
- // trim trailing whitespace
- notwhite = str.find_last_not_of(" \t\n");
- str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
- into the calls to <code class="code">erase</code>, in case your compiler does not
- optimize named temporaries out of existence.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="strings.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part V. 
- Strings
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Case Sensitivity</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13s02.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13s02.html
deleted file mode 100644
index 2cd970a12bf..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13s02.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Case Sensitivity</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="next" href="bk01pt05ch13s03.html" title="Arbitrary Character Types" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Case Sensitivity</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Case Sensitivity"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.case"></a>Case Sensitivity</h2></div></div></div><p>
- </p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
- <a class="ulink" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
- discussions held on Usenet covered this topic in January of 1998.
- Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
- is identical to the standard 'string' class, but is
- case-insensitive in the same way as the (common but nonstandard)
- C function stricmp()</span>â€</span>.
- </p><pre class="programlisting">
- ci_string s( "AbCdE" );
-
- // case insensitive
- assert( s == "abcde" );
- assert( s == "ABCDE" );
-
- // still case-preserving, of course
- assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
- assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy. The original answer was
- posted on Usenet, and a revised version appears in Herb Sutter's
- book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="ulink" href="http://www.gotw.ca/gotw/029.htm" target="_top">GotW 29</a>.
- </p><p>See? Told you it was easy!</p><p>
- <span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
- Report contains a fascinating <a class="ulink" href="http://lafstern.org/matt/col2_new.pdf" target="_top"> article</a> by
- Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
- case-insensitive comparisons are not as easy as they seem, and
- why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
- about it in production code. (The GotW answer mentions one of
- the principle difficulties; his article mentions more.)
- </p><p>Basically, this is "easy" only if you ignore some things,
- things which may be too important to your program to ignore. (I chose
- to ignore them when originally writing this entry, and am surprised
- that nobody ever called me on it...) The GotW question and answer
- remain useful instructional tools, however.
- </p><p><span class="emphasis"><em>Added September 2000:</em></span> James Kanze provided a link to a
- <a class="ulink" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
- Technical Report discussing case handling</a>, which provides some
- very good information.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. String Classes </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Arbitrary Character Types</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13s03.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13s03.html
deleted file mode 100644
index aa2afea53a6..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13s03.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Arbitrary Character Types</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13s02.html" title="Case Sensitivity" /><link rel="next" href="bk01pt05ch13s04.html" title="Tokenizing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Arbitrary Character Types</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s02.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Arbitrary Character Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.character_types"></a>Arbitrary Character Types</h2></div></div></div><p>
- </p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
- it is parameterized on the type of the characters which it holds.
- In theory, you could whip up a Unicode character class and instantiate
- <code class="code">std::basic_string&lt;my_unicode_char&gt;</code>, or assuming
- that integers are wider than characters on your platform, maybe just
- declare variables of type <code class="code">std::basic_string&lt;int&gt;</code>.
- </p><p>That's the theory. Remember however that basic_string has additional
- type parameters, which take default arguments based on the character
- type (called <code class="code">CharT</code> here):
- </p><pre class="programlisting">
- template &lt;typename CharT,
- typename Traits = char_traits&lt;CharT&gt;,
- typename Alloc = allocator&lt;CharT&gt; &gt;
- class basic_string { .... };</pre><p>Now, <code class="code">allocator&lt;CharT&gt;</code> will probably Do The Right
- Thing by default, unless you need to implement your own allocator
- for your characters.
- </p><p>But <code class="code">char_traits</code> takes more work. The char_traits
- template is <span class="emphasis"><em>declared</em></span> but not <span class="emphasis"><em>defined</em></span>.
- That means there is only
- </p><pre class="programlisting">
- template &lt;typename CharT&gt;
- struct char_traits
- {
- static void foo (type1 x, type2 y);
- ...
- };</pre><p>and functions such as char_traits&lt;CharT&gt;::foo() are not
- actually defined anywhere for the general case. The C++ standard
- permits this, because writing such a definition to fit all possible
- CharT's cannot be done.
- </p><p>The C++ standard also requires that char_traits be specialized for
- instantiations of <code class="code">char</code> and <code class="code">wchar_t</code>, and it
- is these template specializations that permit entities like
- <code class="code">basic_string&lt;char,char_traits&lt;char&gt;&gt;</code> to work.
- </p><p>If you want to use character types other than char and wchar_t,
- such as <code class="code">unsigned char</code> and <code class="code">int</code>, you will
- need suitable specializations for them. For a time, in earlier
- versions of GCC, there was a mostly-correct implementation that
- let programmers be lazy but it broke under many situations, so it
- was removed. GCC 3.4 introduced a new implementation that mostly
- works and can be specialized even for <code class="code">int</code> and other
- built-in types.
- </p><p>If you want to use your own special character class, then you have
- <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html" target="_top">a lot
- of work to do</a>, especially if you with to use i18n features
- (facets require traits information but don't have a traits argument).
- </p><p>Another example of how to specialize char_traits was given <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html" target="_top">on the
- mailing list</a> and at a later date was put into the file <code class="code">
- include/ext/pod_char_traits.h</code>. We agree
- that the way it's used with basic_string (scroll down to main())
- doesn't look nice, but that's because <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html" target="_top">the
- nice-looking first attempt</a> turned out to <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
- be conforming C++</a>, due to the rule that CharT must be a POD.
- (See how tricky this is?)
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Case Sensitivity </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Tokenizing</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13s04.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13s04.html
deleted file mode 100644
index 12d1ee7fb5c..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13s04.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Tokenizing</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13s03.html" title="Arbitrary Character Types" /><link rel="next" href="bk01pt05ch13s05.html" title="Shrink to Fit" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Tokenizing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s03.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s05.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Tokenizing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.token"></a>Tokenizing</h2></div></div></div><p>
- </p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
- be desired in terms of user-friendliness. It's unintuitive, it
- destroys the character string on which it operates, and it requires
- you to handle all the memory problems. But it does let the client
- code decide what to use to break the string into pieces; it allows
- you to choose the "whitespace," so to speak.
- </p><p>A C++ implementation lets us keep the good things and fix those
- annoyances. The implementation here is more intuitive (you only
- call it once, not in a loop with varying argument), it does not
- affect the original string at all, and all the memory allocation
- is handled for you.
- </p><p>It's called stringtok, and it's a template function. Sources are
- as below, in a less-portable form than it could be, to keep this
- example simple (for example, see the comments on what kind of
- string it will accept).
- </p><pre class="programlisting">
-#include &lt;string&gt;
-template &lt;typename Container&gt;
-void
-stringtok(Container &amp;container, string const &amp;in,
- const char * const delimiters = " \t\n")
-{
- const string::size_type len = in.length();
- string::size_type i = 0;
-
- while (i &lt; len)
- {
- // Eat leading whitespace
- i = in.find_first_not_of(delimiters, i);
- if (i == string::npos)
- return; // Nothing left but white space
-
- // Find the end of the token
- string::size_type j = in.find_first_of(delimiters, i);
-
- // Push token
- if (j == string::npos)
- {
- container.push_back(in.substr(i));
- return;
- }
- else
- container.push_back(in.substr(i, j-i));
-
- // Set up for next loop
- i = j + 1;
- }
-}
-</pre><p>
- The author uses a more general (but less readable) form of it for
- parsing command strings and the like. If you compiled and ran this
- code using it:
- </p><pre class="programlisting">
- std::list&lt;string&gt; ls;
- stringtok (ls, " this \t is\t\n a test ");
- for (std::list&lt;string&gt;const_iterator i = ls.begin();
- i != ls.end(); ++i)
- {
- std::cerr &lt;&lt; ':' &lt;&lt; (*i) &lt;&lt; ":\n";
- } </pre><p>You would see this as output:
- </p><pre class="programlisting">
- :this:
- :is:
- :a:
- :test: </pre><p>with all the whitespace removed. The original <code class="code">s</code> is still
- available for use, <code class="code">ls</code> will clean up after itself, and
- <code class="code">ls.size()</code> will return how many tokens there were.
- </p><p>As always, there is a price paid here, in that stringtok is not
- as fast as strtok. The other benefits usually outweigh that, however.
- </p><p><span class="emphasis"><em>Added February 2001:</em></span> Mark Wilden pointed out that the
- standard <code class="code">std::getline()</code> function can be used with standard
- <code class="code">istringstreams</code> to perform
- tokenizing as well. Build an istringstream from the input text,
- and then use std::getline with varying delimiters (the three-argument
- signature) to extract tokens into a string.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Arbitrary Character Types </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Shrink to Fit</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13s05.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13s05.html
deleted file mode 100644
index b6a5da10d20..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13s05.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Shrink to Fit</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13s04.html" title="Tokenizing" /><link rel="next" href="bk01pt05ch13s06.html" title="CString (MFC)" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Shrink to Fit</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s04.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s06.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Shrink to Fit"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.shrink"></a>Shrink to Fit</h2></div></div></div><p>
- </p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
- <code class="code">string s</code> with <code class="code">res &lt; s.capacity()</code> will
- reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
- </p><p>This behaviour is suggested, but not required by the standard. Prior
- to GCC 3.4 the following alternative can be used instead
- </p><pre class="programlisting">
- std::string(str.data(), str.size()).swap(str);
- </pre><p>This is similar to the idiom for reducing
- a <code class="code">vector</code>'s memory usage
- (see <a class="link" href="../faq.html#faq.size_equals_capacity" title="7.8.">this FAQ
- entry</a>) but the regular copy constructor cannot be used
- because libstdc++'s <code class="code">string</code> is Copy-On-Write.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Tokenizing </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> CString (MFC)</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt05ch13s06.html b/libstdc++-v3/doc/html/manual/bk01pt05ch13s06.html
deleted file mode 100644
index 29ad197e1dd..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt05ch13s06.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CString (MFC)</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13s05.html" title="Shrink to Fit" /><link rel="next" href="localization.html" title="Part VI.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">CString (MFC)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s05.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="CString (MFC)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.Cstring"></a>CString (MFC)</h2></div></div></div><p>
- </p><p>A common lament seen in various newsgroups deals with the Standard
- string class as opposed to the Microsoft Foundation Class called
- CString. Often programmers realize that a standard portable
- answer is better than a proprietary nonportable one, but in porting
- their application from a Win32 platform, they discover that they
- are relying on special functions offered by the CString class.
- </p><p>Things are not as bad as they seem. In
- <a class="ulink" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
- message</a>, Joe Buck points out a few very important things:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
- that CString does, with three exceptions.
- </p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
- conversion) are trivial to implement. In fact, we do so
- on this page.
- </p></li><li class="listitem"><p>The third is <code class="code">CString::Format</code>, which allows formatting
- in the style of <code class="code">sprintf</code>. This deserves some mention:
- </p></li></ul></div><p>
- The old libg++ library had a function called form(), which did much
- the same thing. But for a Standard solution, you should use the
- stringstream classes. These are the bridge between the iostream
- hierarchy and the string class, and they operate with regular
- streams seamlessly because they inherit from the iostream
- hierarchy. An quick example:
- </p><pre class="programlisting">
- #include &lt;iostream&gt;
- #include &lt;string&gt;
- #include &lt;sstream&gt;
-
- string f (string&amp; incoming) // incoming is "foo N"
- {
- istringstream incoming_stream(incoming);
- string the_word;
- int the_number;
-
- incoming_stream &gt;&gt; the_word // extract "foo"
- &gt;&gt; the_number; // extract N
-
- ostringstream output_stream;
- output_stream &lt;&lt; "The word was " &lt;&lt; the_word
- &lt;&lt; " and 3*N was " &lt;&lt; (3*the_number);
-
- return output_stream.str();
- } </pre><p>A serious problem with CString is a design bug in its memory
- allocation. Specifically, quoting from that same message:
- </p><pre class="programlisting">
- CString suffers from a common programming error that results in
- poor performance. Consider the following code:
-
- CString n_copies_of (const CString&amp; foo, unsigned n)
- {
- CString tmp;
- for (unsigned i = 0; i &lt; n; i++)
- tmp += foo;
- return tmp;
- }
-
- This function is O(n^2), not O(n). The reason is that each +=
- causes a reallocation and copy of the existing string. Microsoft
- applications are full of this kind of thing (quadratic performance
- on tasks that can be done in linear time) -- on the other hand,
- we should be thankful, as it's created such a big market for high-end
- ix86 hardware. :-)
-
- If you replace CString with string in the above function, the
- performance is O(n).
- </pre><p>Joe Buck also pointed out some other things to keep in mind when
- comparing CString and the Standard string class:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
- who exploited that may have problems moving to <code class="code">string</code>.
- </p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
- MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
- bug and rebuild your MFC libraries.
- <span class="emphasis"><em><span class="emphasis"><em>Note:</em></span> It looks like the CString shipped
- with VC++6.0 has fixed this, although it may in fact have been
- one of the VC++ SPs that did it.</em></span>
- </p></li><li class="listitem"><p><code class="code">string</code> operations like this have O(n) complexity
- <span class="emphasis"><em>if the implementors do it correctly</em></span>. The libstdc++
- implementors did it correctly. Other vendors might not.
- </p></li><li class="listitem"><p>While parts of the SGI STL are used in libstdc++, their
- string class is not. The SGI <code class="code">string</code> is essentially
- <code class="code">vector&lt;char&gt;</code> and does not do any reference
- counting like libstdc++'s does. (It is O(n), though.)
- So if you're thinking about SGI's string or rope classes,
- you're now looking at four possibilities: CString, the
- libstdc++ string, the SGI string, and the SGI rope, and this
- is all before any allocator or traits customizations! (More
- choices than you can shake a stick at -- want fries with that?)
- </p></li></ul></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Shrink to Fit </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part VI. 
- Localization
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt08ch19.html b/libstdc++-v3/doc/html/manual/bk01pt08ch19.html
deleted file mode 100644
index 6b6bb02dbde..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt08ch19.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Predefined</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="iterators.html" title="Part VIII.  Iterators" /><link rel="prev" href="iterators.html" title="Part VIII.  Iterators" /><link rel="next" href="bk01pt08ch19s02.html" title="One Past the End" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Predefined</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part VIII. 
- Iterators
-
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt08ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Predefined"><div class="titlepage"><div><div><h2 class="title"><a id="manual.iterators.predefined"></a>Chapter 19. Predefined</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="bk01pt08ch19.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect1"><a href="bk01pt08ch19s02.html">One Past the End</a></span></dt></dl></div><div class="sect1" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h2></div></div></div><p>
- The following
-FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
-iterators are not implemented as pointers. They are a generalization
-of pointers, but they are implemented in libstdc++ as separate
-classes.
- </p><p>Keeping that simple fact in mind as you design your code will
- prevent a whole lot of difficult-to-understand bugs.
- </p><p>You can think of it the other way 'round, even. Since iterators
- are a generalization, that means that <span class="emphasis"><em>pointers</em></span> are
- <span class="emphasis"><em>iterators</em></span>, and that pointers can be used whenever an
- iterator would be. All those functions in the Algorithms chapter
- of the Standard will work just as well on plain arrays and their
- pointers.
- </p><p>That doesn't mean that when you pass in a pointer, it gets wrapped
- into some special delegating iterator-to-pointer class with a layer
- of overhead. (If you think that's the case anywhere, you don't
- understand templates to begin with...) Oh, no; if you pass
- in a pointer, then the compiler will instantiate that template
- using T* as a type, and good old high-speed pointer arithmetic as
- its operations, so the resulting code will be doing exactly the same
- things as it would be doing if you had hand-coded it yourself (for
- the 273rd time).
- </p><p>How much overhead <span class="emphasis"><em>is</em></span> there when using an iterator class?
- Very little. Most of the layering classes contain nothing but
- typedefs, and typedefs are "meta-information" that simply
- tell the compiler some nicknames; they don't create code. That
- information gets passed down through inheritance, so while the
- compiler has to do work looking up all the names, your runtime code
- does not. (This has been a prime concern from the beginning.)
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="iterators.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt08ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part VIII. 
- Iterators
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> One Past the End</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt08ch19s02.html b/libstdc++-v3/doc/html/manual/bk01pt08ch19s02.html
deleted file mode 100644
index 2a0e28d40da..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt08ch19s02.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>One Past the End</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt08ch19.html" title="Chapter 19. Predefined" /><link rel="prev" href="bk01pt08ch19.html" title="Chapter 19. Predefined" /><link rel="next" href="algorithms.html" title="Part IX.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">One Past the End</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt08ch19.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Predefined</th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="One Past the End"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="iterators.predefined.end"></a>One Past the End</h2></div></div></div><p>This starts off sounding complicated, but is actually very easy,
- especially towards the end. Trust me.
- </p><p>Beginners usually have a little trouble understand the whole
- 'past-the-end' thing, until they remember their early algebra classes
- (see, they <span class="emphasis"><em>told</em></span> you that stuff would come in handy!) and
- the concept of half-open ranges.
- </p><p>First, some history, and a reminder of some of the funkier rules in
- C and C++ for builtin arrays. The following rules have always been
- true for both languages:
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
- past the end of the array</em></span>. A pointer that points to one
- past the end of the array is guaranteed to be as unique as a
- pointer to somewhere inside the array, so that you can compare
- such pointers safely.
- </p></li><li class="listitem"><p>You can only dereference a pointer that points into an array.
- If your array pointer points outside the array -- even to just
- one past the end -- and you dereference it, Bad Things happen.
- </p></li><li class="listitem"><p>Strictly speaking, simply pointing anywhere else invokes
- undefined behavior. Most programs won't puke until such a
- pointer is actually dereferenced, but the standards leave that
- up to the platform.
- </p></li></ol></div><p>The reason this past-the-end addressing was allowed is to make it
- easy to write a loop to go over an entire array, e.g.,
- while (*d++ = *s++);.
- </p><p>So, when you think of two pointers delimiting an array, don't think
- of them as indexing 0 through n-1. Think of them as <span class="emphasis"><em>boundary
- markers</em></span>:
- </p><pre class="programlisting">
-
- beginning end
- | |
- | | This is bad. Always having to
- | | remember to add or subtract one.
- | | Off-by-one bugs very common here.
- V V
- array of N elements
- |---|---|--...--|---|---|
- | 0 | 1 | ... |N-2|N-1|
- |---|---|--...--|---|---|
-
- ^ ^
- | |
- | | This is good. This is safe. This
- | | is guaranteed to work. Just don't
- | | dereference 'end'.
- beginning end
-
- </pre><p>See? Everything between the boundary markers is part of the array.
- Simple.
- </p><p>Now think back to your junior-high school algebra course, when you
- were learning how to draw graphs. Remember that a graph terminating
- with a solid dot meant, "Everything up through this point,"
- and a graph terminating with an open dot meant, "Everything up
- to, but not including, this point," respectively called closed
- and open ranges? Remember how closed ranges were written with
- brackets, <span class="emphasis"><em>[a,b]</em></span>, and open ranges were written with parentheses,
- <span class="emphasis"><em>(a,b)</em></span>?
- </p><p>The boundary markers for arrays describe a <span class="emphasis"><em>half-open range</em></span>,
- starting with (and including) the first element, and ending with (but
- not including) the last element: <span class="emphasis"><em>[beginning,end)</em></span>. See, I
- told you it would be simple in the end.
- </p><p>Iterators, and everything working with iterators, follows this same
- time-honored tradition. A container's <code class="code">begin()</code> method returns
- an iterator referring to the first element, and its <code class="code">end()</code>
- method returns a past-the-end iterator, which is guaranteed to be
- unique and comparable against any other iterator pointing into the
- middle of the container.
- </p><p>Container constructors, container methods, and algorithms, all take
- pairs of iterators describing a range of values on which to operate.
- All of these ranges are half-open ranges, so you pass the beginning
- iterator as the starting parameter, and the one-past-the-end iterator
- as the finishing parameter.
- </p><p>This generalizes very well. You can operate on sub-ranges quite
- easily this way; functions accepting a <span class="emphasis"><em>[first,last)</em></span> range
- don't know or care whether they are the boundaries of an entire {array,
- sequence, container, whatever}, or whether they only enclose a few
- elements from the center. This approach also makes zero-length
- sequences very simple to recognize: if the two endpoints compare
- equal, then the {array, sequence, container, whatever} is empty.
- </p><p>Just don't dereference <code class="code">end()</code>.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt08ch19.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt08ch19.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Predefined </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IX. 
- Algorithms
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt09ch20.html b/libstdc++-v3/doc/html/manual/bk01pt09ch20.html
deleted file mode 100644
index a343f9c50f4..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt09ch20.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. Mutating</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="algorithms.html" title="Part IX.  Algorithms" /><link rel="prev" href="bk01pt09pr02.html" title="" /><link rel="next" href="numerics.html" title="Part X.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Mutating</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt09pr02.html">Prev</a> </td><th width="60%" align="center">Part IX. 
- Algorithms
-
-</th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. Mutating"><div class="titlepage"><div><div><h2 class="title"><a id="manual.algorithms.mutating"></a>Chapter 20. Mutating</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="bk01pt09ch20.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt09ch20.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></div><div class="sect1" title="swap"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h2></div></div></div><div class="sect2" title="Specializations"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h3></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
- containers, then the call will automatically be replaced by a call to
- <code class="code"> x.swap(y); </code> instead.
- </p><p>This allows member functions of each container class to take over, and
- containers' swap functions should have O(1) complexity according to
- the standard. (And while "should" allows implementations to
- behave otherwise and remain compliant, this implementation does in
- fact use constant-time swaps.) This should not be surprising, since
- for two containers of the same type to swap contents, only some
- internal pointers to storage need to be exchanged.
- </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt09pr02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="algorithms.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part X. 
- Numerics
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt09pr02.html b/libstdc++-v3/doc/html/manual/bk01pt09pr02.html
deleted file mode 100644
index c81bbee976e..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt09pr02.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="algorithms.html" title="Part IX.  Algorithms" /><link rel="prev" href="algorithms.html" title="Part IX.  Algorithms" /><link rel="next" href="bk01pt09ch20.html" title="Chapter 20. Mutating" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part IX. 
- Algorithms
-
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt09ch20.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a id="id638172"></a></h2></div></div></div><p>
- The neatest accomplishment of the algorithms chapter is that all the
- work is done via iterators, not containers directly. This means two
- important things:
-</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
- Anything that behaves like an iterator can be used in one of
- these algorithms. Raw pointers make great candidates, thus
- built-in arrays are fine containers, as well as your own iterators.
- </p></li><li class="listitem"><p>
- The algorithms do not (and cannot) affect the container as a
- whole; only the things between the two iterator endpoints. If
- you pass a range of iterators only enclosing the middle third of
- a container, then anything outside that range is inviolate.
- </p></li></ol></div><p>
- Even strings can be fed through the algorithms here, although the
- string class has specialized versions of many of these functions
- (for example, <code class="code">string::find()</code>). Most of the examples
- on this page will use simple arrays of integers as a playground
- for algorithms, just to keep things simple. The use of
- <span class="emphasis"><em>N</em></span> as a size in the examples is to keep
- things easy to read but probably won't be valid code. You can
- use wrappers such as those described in the <a class="link" href="containers.html" title="Part VII.  Containers">containers chapter</a> to
- keep real code readable.
- </p><p>
- The single thing that trips people up the most is the definition
- of <span class="emphasis"><em>range</em></span> used with iterators; the famous
- "past-the-end" rule that everybody loves to hate. The
- <a class="link" href="iterators.html" title="Part VIII.  Iterators">iterators
- chapter</a> of this document has a complete explanation of
- this simple rule that seems to cause so much confusion. Once you
- get <span class="emphasis"><em>range</em></span> into your head (it's not that
- hard, honest!), then the algorithms are a cakewalk.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="algorithms.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt09ch20.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IX. 
- Algorithms
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. Mutating</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt10ch23s02.html b/libstdc++-v3/doc/html/manual/bk01pt10ch23s02.html
deleted file mode 100644
index 31c37c741cf..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt10ch23s02.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>C99</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics_and_c.html" title="Chapter 23. Interacting with C" /><link rel="prev" href="numerics_and_c.html" title="Chapter 23. Interacting with C" /><link rel="next" href="io.html" title="Part XI.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">C99</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Chapter 23. Interacting with C</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="C99"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="numerics.c.c99"></a>C99</h2></div></div></div><p>In addition to the other topics on this page, we'll note here some
- of the C99 features that appear in libstdc++.
- </p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
- This flag is already on by default, but it can be disabled by the
- user. Also, the configuration machinery will disable it if the
- necessary support for C99 (e.g., header files) cannot be found.
- </p><p>As of GCC 3.0, C99 support includes classification functions
- such as <code class="code">isnormal</code>, <code class="code">isgreater</code>,
- <code class="code">isnan</code>, etc.
- The functions used for 'long long' support such as <code class="code">strtoll</code>
- are supported, as is the <code class="code">lldiv_t</code> typedef. Also supported
- are the wide character functions using 'long long', like
- <code class="code">wcstoll</code>.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics_and_c.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part XI. 
- Input and Output
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt11ch25s02.html b/libstdc++-v3/doc/html/manual/bk01pt11ch25s02.html
deleted file mode 100644
index b713ad2ef02..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt11ch25s02.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Buffering</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="streambufs.html" title="Chapter 25. Stream Buffers" /><link rel="prev" href="streambufs.html" title="Chapter 25. Stream Buffers" /><link rel="next" href="stringstreams.html" title="Chapter 26. Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Buffering</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 25. Stream Buffers</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Buffering"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="io.streambuf.buffering"></a>Buffering</h2></div></div></div><p>First, are you sure that you understand buffering? Particularly
- the fact that C++ may not, in fact, have anything to do with it?
- </p><p>The rules for buffering can be a little odd, but they aren't any
- different from those of C. (Maybe that's why they can be a bit
- odd.) Many people think that writing a newline to an output
- stream automatically flushes the output buffer. This is true only
- when the output stream is, in fact, a terminal and not a file
- or some other device -- and <span class="emphasis"><em>that</em></span> may not even be true
- since C++ says nothing about files nor terminals. All of that is
- system-dependent. (The "newline-buffer-flushing only occurring
- on terminals" thing is mostly true on Unix systems, though.)
- </p><p>Some people also believe that sending <code class="code">endl</code> down an
- output stream only writes a newline. This is incorrect; after a
- newline is written, the buffer is also flushed. Perhaps this
- is the effect you want when writing to a screen -- get the text
- out as soon as possible, etc -- but the buffering is largely
- wasted when doing this to a file:
- </p><pre class="programlisting">
- output &lt;&lt; "a line of text" &lt;&lt; endl;
- output &lt;&lt; some_data_variable &lt;&lt; endl;
- output &lt;&lt; "another line of text" &lt;&lt; endl; </pre><p>The proper thing to do in this case to just write the data out
- and let the libraries and the system worry about the buffering.
- If you need a newline, just write a newline:
- </p><pre class="programlisting">
- output &lt;&lt; "a line of text\n"
- &lt;&lt; some_data_variable &lt;&lt; '\n'
- &lt;&lt; "another line of text\n"; </pre><p>I have also joined the output statements into a single statement.
- You could make the code prettier by moving the single newline to
- the start of the quoted text on the last line, for example.
- </p><p>If you do need to flush the buffer above, you can send an
- <code class="code">endl</code> if you also need a newline, or just flush the buffer
- yourself:
- </p><pre class="programlisting">
- output &lt;&lt; ...... &lt;&lt; flush; // can use std::flush manipulator
- output.flush(); // or call a member fn </pre><p>On the other hand, there are times when writing to a file should
- be like writing to standard error; no buffering should be done
- because the data needs to appear quickly (a prime example is a
- log file for security-related information). The way to do this is
- just to turn off the buffering <span class="emphasis"><em>before any I/O operations at
- all</em></span> have been done (note that opening counts as an I/O operation):
- </p><pre class="programlisting">
- std::ofstream os;
- std::ifstream is;
- int i;
-
- os.rdbuf()-&gt;pubsetbuf(0,0);
- is.rdbuf()-&gt;pubsetbuf(0,0);
-
- os.open("/foo/bar/baz");
- is.open("/qux/quux/quuux");
- ...
- os &lt;&lt; "this data is written immediately\n";
- is &gt;&gt; i; // and this will probably cause a disk read </pre><p>Since all aspects of buffering are handled by a streambuf-derived
- member, it is necessary to get at that member with <code class="code">rdbuf()</code>.
- Then the public version of <code class="code">setbuf</code> can be called. The
- arguments are the same as those for the Standard C I/O Library
- function (a buffer area followed by its size).
- </p><p>A great deal of this is implementation-dependent. For example,
- <code class="code">streambuf</code> does not specify any actions for its own
- <code class="code">setbuf()</code>-ish functions; the classes derived from
- <code class="code">streambuf</code> each define behavior that "makes
- sense" for that class: an argument of (0,0) turns off buffering
- for <code class="code">filebuf</code> but does nothing at all for its siblings
- <code class="code">stringbuf</code> and <code class="code">strstreambuf</code>, and specifying
- anything other than (0,0) has varying effects.
- User-defined classes derived from <code class="code">streambuf</code> can
- do whatever they want. (For <code class="code">filebuf</code> and arguments for
- <code class="code">(p,s)</code> other than zeros, libstdc++ does what you'd expect:
- the first <code class="code">s</code> bytes of <code class="code">p</code> are used as a buffer,
- which you must allocate and deallocate.)
- </p><p>A last reminder: there are usually more buffers involved than
- just those at the language/library level. Kernel buffers, disk
- buffers, and the like will also have an effect. Inspecting and
- changing those are system-dependent.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="streambufs.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Memory Based Streams</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt11ch27s02.html b/libstdc++-v3/doc/html/manual/bk01pt11ch27s02.html
deleted file mode 100644
index 4366e8fd8c0..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt11ch27s02.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Binary Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="fstreams.html" title="Chapter 27. File Based Streams" /><link rel="prev" href="fstreams.html" title="Chapter 27. File Based Streams" /><link rel="next" href="io_and_c.html" title="Chapter 28. Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Binary Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 27. File Based Streams</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Binary Input and Output"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.io.filestreams.binary"></a>Binary Input and Output</h2></div></div></div><p>
- </p><p>The first and most important thing to remember about binary I/O is
- that opening a file with <code class="code">ios::binary</code> is not, repeat
- <span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
- bullet, and will not allow you to use the <code class="code">&lt;&lt;/&gt;&gt;</code>
- operators of the normal fstreams to do binary I/O.
- </p><p>Sorry. Them's the breaks.
- </p><p>This isn't going to try and be a complete tutorial on reading and
- writing binary files (because "binary"
- covers a lot of ground), but we will try and clear
- up a couple of misconceptions and common errors.
- </p><p>First, <code class="code">ios::binary</code> has exactly one defined effect, no more
- and no less. Normal text mode has to be concerned with the newline
- characters, and the runtime system will translate between (for
- example) '\n' and the appropriate end-of-line sequence (LF on Unix,
- CRLF on DOS, CR on Macintosh, etc). (There are other things that
- normal mode does, but that's the most obvious.) Opening a file in
- binary mode disables this conversion, so reading a CRLF sequence
- under Windows won't accidentally get mapped to a '\n' character, etc.
- Binary mode is not supposed to suddenly give you a bitstream, and
- if it is doing so in your program then you've discovered a bug in
- your vendor's compiler (or some other part of the C++ implementation,
- possibly the runtime system).
- </p><p>Second, using <code class="code">&lt;&lt;</code> to write and <code class="code">&gt;&gt;</code> to
- read isn't going to work with the standard file stream classes, even
- if you use <code class="code">skipws</code> during reading. Why not? Because
- ifstream and ofstream exist for the purpose of <span class="emphasis"><em>formatting</em></span>,
- not reading and writing. Their job is to interpret the data into
- text characters, and that's exactly what you don't want to happen
- during binary I/O.
- </p><p>Third, using the <code class="code">get()</code> and <code class="code">put()/write()</code> member
- functions still aren't guaranteed to help you. These are
- "unformatted" I/O functions, but still character-based.
- (This may or may not be what you want, see below.)
- </p><p>Notice how all the problems here are due to the inappropriate use
- of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
- which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
- seemingly infinite number of solutions, and a few are listed here:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
- &lt;&lt;/&gt;&gt; operators to do binary I/O on whatever data
- types you're using.</span>â€</span>
- </p><p>
- This is a Bad Thing, because while
- the compiler would probably be just fine with it, other humans
- are going to be confused. The overloaded bitshift operators
- have a well-defined meaning (formatting), and this breaks it.
- </p></li><li class="listitem"><p>
- <span class="quote">“<span class="quote">Build the file structure in memory, then
- <code class="code">mmap()</code> the file and copy the
- structure.
- </span>â€</span>
- </p><p>
- Well, this is easy to make work, and easy to break, and is
- pretty equivalent to using <code class="code">::read()</code> and
- <code class="code">::write()</code> directly, and makes no use of the
- iostream library at all...
- </p></li><li class="listitem"><p>
- <span class="quote">“<span class="quote">Use streambufs, that's what they're there for.</span>â€</span>
- </p><p>
- While not trivial for the beginner, this is the best of all
- solutions. The streambuf/filebuf layer is the layer that is
- responsible for actual I/O. If you want to use the C++
- library for binary I/O, this is where you start.
- </p></li></ul></div><p>How to go about using streambufs is a bit beyond the scope of this
- document (at least for now), but while streambufs go a long way,
- they still leave a couple of things up to you, the programmer.
- As an example, byte ordering is completely between you and the
- operating system, and you have to handle it yourself.
- </p><p>Deriving a streambuf or filebuf
- class from the standard ones, one that is specific to your data
- types (or an abstraction thereof) is probably a good idea, and
- lots of examples exist in journals and on Usenet. Using the
- standard filebufs directly (either by declaring your own or by
- using the pointer returned from an fstream's <code class="code">rdbuf()</code>)
- is certainly feasible as well.
- </p><p>One area that causes problems is trying to do bit-by-bit operations
- with filebufs. C++ is no different from C in this respect: I/O
- must be done at the byte level. If you're trying to read or write
- a few bits at a time, you're going about it the wrong way. You
- must read/write an integral number of bytes and then process the
- bytes. (For example, the streambuf functions take and return
- variables of type <code class="code">int_type</code>.)
- </p><p>Another area of problems is opening text files in binary mode.
- Generally, binary mode is intended for binary files, and opening
- text files in binary mode means that you now have to deal with all of
- those end-of-line and end-of-file problems that we mentioned before.
- </p><p>
- An instructive thread from comp.lang.c++.moderated delved off into
- this topic starting more or less at
- <a class="ulink" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d" target="_top">this</a>
- post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
- and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
- </p><p>Briefly, the problems of byte ordering and type sizes mean that
- the unformatted functions like <code class="code">ostream::put()</code> and
- <code class="code">istream::get()</code> cannot safely be used to communicate
- between arbitrary programs, or across a network, or from one
- invocation of a program to another invocation of the same program
- on a different platform, etc.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="fstreams.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt11ch28s02.html b/libstdc++-v3/doc/html/manual/bk01pt11ch28s02.html
deleted file mode 100644
index 69fa0f12ec1..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt11ch28s02.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Performance</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io_and_c.html" title="Chapter 28. Interacting with C" /><link rel="prev" href="io_and_c.html" title="Chapter 28. Interacting with C" /><link rel="next" href="extensions.html" title="Part XII.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Performance</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Chapter 28. Interacting with C</th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Performance"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.io.c.sync"></a>Performance</h2></div></div></div><p>
- Pathetic Performance? Ditch C.
- </p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
- I'm just saying it to get your attention.
- </p><p>Because the C++ library includes the C library, both C-style and
- C++-style I/O have to work at the same time. For example:
- </p><pre class="programlisting">
- #include &lt;iostream&gt;
- #include &lt;cstdio&gt;
-
- std::cout &lt;&lt; "Hel";
- std::printf ("lo, worl");
- std::cout &lt;&lt; "d!\n";
- </pre><p>This must do what you think it does.
- </p><p>Alert members of the audience will immediately notice that buffering
- is going to make a hash of the output unless special steps are taken.
- </p><p>The special steps taken by libstdc++, at least for version 3.0,
- involve doing very little buffering for the standard streams, leaving
- most of the buffering to the underlying C library. (This kind of
- thing is tricky to get right.)
- The upside is that correctness is ensured. The downside is that
- writing through <code class="code">cout</code> can quite easily lead to awful
- performance when the C++ I/O library is layered on top of the C I/O
- library (as it is for 3.0 by default). Some patches have been applied
- which improve the situation for 3.1.
- </p><p>However, the C and C++ standard streams only need to be kept in sync
- when both libraries' facilities are in use. If your program only uses
- C++ I/O, then there's no need to sync with the C streams. The right
- thing to do in this case is to call
- </p><pre class="programlisting">
- #include <span class="emphasis"><em>any of the I/O headers such as ios, iostream, etc</em></span>
-
- std::ios::sync_with_stdio(false);
- </pre><p>You must do this before performing any I/O via the C++ stream objects.
- Once you call this, the C++ streams will operate independently of the
- (unused) C streams. For GCC 3.x, this means that <code class="code">cout</code> and
- company will become fully buffered on their own.
- </p><p>Note, by the way, that the synchronization requirement only applies to
- the standard streams (<code class="code">cin</code>, <code class="code">cout</code>,
- <code class="code">cerr</code>,
- <code class="code">clog</code>, and their wide-character counterparts). File stream
- objects that you declare yourself have no such requirement and are fully
- buffered.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io_and_c.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part XII. 
- Extensions
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html b/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html
deleted file mode 100644
index 2d56fc66378..00000000000
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="debug_mode.html" title="Chapter 30. Debug Mode" /><link rel="prev" href="bk01pt12ch30s02.html" title="Semantics" /><link rel="next" href="bk01pt12ch30s04.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch30s04.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Using"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
- </p><div class="sect2" title="Using the Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
- compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
- changes the sizes and behavior of standard class templates such
- as <code class="code">std::vector</code>, and therefore you can only link code
- compiled with debug mode and code compiled without debug mode if no
- instantiation of a container is passed between the two translation
- units.</p><p>By default, error messages are formatted to fit on lines of about
- 78 characters. The environment variable
- <code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
- different length.</p></div><div class="sect2" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
- only specific containers need checking, debugging containers are
- available as GNU extensions. These debugging containers are
- functionally equivalent to the standard drop-in containers used in
- debug mode, but they are available in a separate namespace as GNU
- extensions and may be used in programs compiled with either release
- mode or with debug mode. The
- following table provides the names and headers of the debugging
- containers:
-</p><div class="table"><a id="id705570"></a><p class="title"><b>Table 30.1. Debugging Containers</b></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">bitset</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">deque</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++0x mode, these additional
-containers have additional debug capability.
-</p><div class="table"><a id="id607020"></a><p class="title"><b>Table 30.2. Debugging Containers C++0x</b></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch30s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html
index 20da4a8fbf4..88ec80cabb2 100644
--- a/libstdc++-v3/doc/html/manual/bugs.html
+++ b/libstdc++-v3/doc/html/manual/bugs.html
@@ -36,317 +36,317 @@
of style. Note that we usually do not make changes to the
code until an issue has reached <a class="ulink" href="../ext/lwg-active.html#DR" target="_top">DR</a> status.
</p><div class="variablelist"><dl><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#5" target="_top">5</a>:
- <span class="emphasis"><em>string::compare specification questionable</em></span>
+ <span class="emphasis"><em>string::compare specification questionable</em></span>
</span></dt><dd><p>This should be two overloaded functions rather than a single function.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#17" target="_top">17</a>:
- <span class="emphasis"><em>Bad bool parsing</em></span>
+ <span class="emphasis"><em>Bad bool parsing</em></span>
</span></dt><dd><p>Apparently extracting Boolean values was messed up...
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#19" target="_top">19</a>:
- <span class="emphasis"><em>"Noconv" definition too vague</em></span>
+ <span class="emphasis"><em>"Noconv" definition too vague</em></span>
</span></dt><dd><p>If <code class="code">codecvt::do_in</code> returns <code class="code">noconv</code> there are
- no changes to the values in <code class="code">[to, to_limit)</code>.
+ no changes to the values in <code class="code">[to, to_limit)</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#22" target="_top">22</a>:
- <span class="emphasis"><em>Member open vs flags</em></span>
+ <span class="emphasis"><em>Member open vs flags</em></span>
</span></dt><dd><p>Re-opening a file stream does <span class="emphasis"><em>not</em></span> clear the state flags.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#23" target="_top">23</a>:
- <span class="emphasis"><em>Num_get overflow result</em></span>
+ <span class="emphasis"><em>Num_get overflow result</em></span>
</span></dt><dd><p>Implement the proposed resolution.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#25" target="_top">25</a>:
- <span class="emphasis"><em>String operator&lt;&lt; uses width() value wrong</em></span>
+ <span class="emphasis"><em>String operator&lt;&lt; uses width() value wrong</em></span>
</span></dt><dd><p>Padding issues.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#48" target="_top">48</a>:
- <span class="emphasis"><em>Use of non-existent exception constructor</em></span>
+ <span class="emphasis"><em>Use of non-existent exception constructor</em></span>
</span></dt><dd><p>An instance of <code class="code">ios_base::failure</code> is constructed instead.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#49" target="_top">49</a>:
- <span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
+ <span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
</span></dt><dd><p>The return type is the <span class="emphasis"><em>previous</em></span> state of synchronization.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#50" target="_top">50</a>:
- <span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
+ <span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
</span></dt><dd><p>These members functions are declared <code class="code">private</code> and are
- thus inaccessible. Specifying the correct semantics of
- "copying stream state" was deemed too complicated.
+ thus inaccessible. Specifying the correct semantics of
+ "copying stream state" was deemed too complicated.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#60" target="_top">60</a>:
- <span class="emphasis"><em>What is a formatted input function?</em></span>
+ <span class="emphasis"><em>What is a formatted input function?</em></span>
</span></dt><dd><p>This DR made many widespread changes to <code class="code">basic_istream</code>
- and <code class="code">basic_ostream</code> all of which have been implemented.
+ and <code class="code">basic_ostream</code> all of which have been implemented.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#63" target="_top">63</a>:
- <span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
+ <span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
</span></dt><dd><p>Make the policy consistent with that of formatted input, unformatted
- input, and formatted output.
+ input, and formatted output.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#68" target="_top">68</a>:
- <span class="emphasis"><em>Extractors for char* should store null at end</em></span>
+ <span class="emphasis"><em>Extractors for char* should store null at end</em></span>
</span></dt><dd><p>And they do now. An editing glitch in the last item in the list of
- [27.6.1.2.3]/7.
+ [27.6.1.2.3]/7.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#74" target="_top">74</a>:
- <span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
+ <span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
</span></dt><dd><p>The text of the standard was gibberish. Typos gone rampant.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#75" target="_top">75</a>:
- <span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
+ <span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
</span></dt><dd><p>Change the first parameter to <code class="code">stateT&amp;</code> and implement
- the new effects paragraph.
+ the new effects paragraph.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#83" target="_top">83</a>:
- <span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
+ <span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
</span></dt><dd><p>Safety checks on the size of the string should test against
- <code class="code">max_size()</code> rather than <code class="code">npos</code>.
+ <code class="code">max_size()</code> rather than <code class="code">npos</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#90" target="_top">90</a>:
- <span class="emphasis"><em>Incorrect description of operator&gt;&gt; for strings</em></span>
+ <span class="emphasis"><em>Incorrect description of operator&gt;&gt; for strings</em></span>
</span></dt><dd><p>The effect contain <code class="code">isspace(c,getloc())</code> which must be
- replaced by <code class="code">isspace(c,is.getloc())</code>.
+ replaced by <code class="code">isspace(c,is.getloc())</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#91" target="_top">91</a>:
- <span class="emphasis"><em>Description of operator&gt;&gt; and getline() for string&lt;&gt;
+ <span class="emphasis"><em>Description of operator&gt;&gt; and getline() for string&lt;&gt;
might cause endless loop</em></span>
</span></dt><dd><p>They behave as a formatted input function and as an unformatted
- input function, respectively (except that <code class="code">getline</code> is
+ input function, respectively (except that <code class="code">getline</code> is
not required to set <code class="code">gcount</code>).
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#103" target="_top">103</a>:
- <span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
+ <span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
modification of keys.</em></span>
</span></dt><dd><p>For associative containers where the value type is the same as
- the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
+ the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
</code> are constant iterators.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#109" target="_top">109</a>:
- <span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
+ <span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
</span></dt><dd><p>The <code class="code">binder1st</code> and <code class="code">binder2nd</code> didn't have an
- <code class="code">operator()</code> taking a non-const parameter.
+ <code class="code">operator()</code> taking a non-const parameter.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#110" target="_top">110</a>:
- <span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
+ <span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
</span></dt><dd><p>This was not a const member function. Note that the DR says to
- replace the function with a const one; we have instead provided an
- overloaded version with identical contents.
+ replace the function with a const one; we have instead provided an
+ overloaded version with identical contents.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#117" target="_top">117</a>:
- <span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
+ <span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
</span></dt><dd><p><code class="code">num_put::put()</code> was overloaded on the wrong types.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#118" target="_top">118</a>:
- <span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
+ <span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
</span></dt><dd><p>Same as 117, but for <code class="code">num_get::get()</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#129" target="_top">129</a>:
- <span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
+ <span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
</span></dt><dd><p>These functions set <code class="code">failbit</code> on error now.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#130" target="_top">130</a>:
- <span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
- </span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
+ <span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
+ </span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#136" target="_top">136</a>:
- <span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
+ <span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
</span></dt><dd><p><code class="code">seekp</code> should only set the output stream, and
- <code class="code">seekg</code> should only set the input stream.
+ <code class="code">seekg</code> should only set the input stream.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#167" target="_top">167</a>:
- <span class="emphasis"><em>Improper use of traits_type::length()</em></span>
+ <span class="emphasis"><em>Improper use of traits_type::length()</em></span>
</span></dt><dd><p><code class="code">op&lt;&lt;</code> with a <code class="code">const char*</code> was
- calculating an incorrect number of characters to write.
+ calculating an incorrect number of characters to write.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#169" target="_top">169</a>:
- <span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
+ <span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
</span></dt><dd><p>Grow efficiently the internal array object.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#171" target="_top">171</a>:
- <span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
+ <span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
</span></dt><dd><p>Quite complex to summarize...
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#181" target="_top">181</a>:
- <span class="emphasis"><em>make_pair() unintended behavior</em></span>
+ <span class="emphasis"><em>make_pair() unintended behavior</em></span>
</span></dt><dd><p>This function used to take its arguments as reference-to-const, now
- it copies them (pass by value).
+ it copies them (pass by value).
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#195" target="_top">195</a>:
- <span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
+ <span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
</span></dt><dd><p>Yes, it can, specifically if EOF is reached while skipping whitespace.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#211" target="_top">211</a>:
- <span class="emphasis"><em>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</em></span>
+ <span class="emphasis"><em>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</em></span>
</span></dt><dd><p>If nothing is extracted into the string, <code class="code">op&gt;&gt;</code> now
- sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
+ sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#214" target="_top">214</a>:
- <span class="emphasis"><em>set::find() missing const overload</em></span>
+ <span class="emphasis"><em>set::find() missing const overload</em></span>
</span></dt><dd><p>Both <code class="code">set</code> and <code class="code">multiset</code> were missing
- overloaded find, lower_bound, upper_bound, and equal_range functions
- for const instances.
+ overloaded find, lower_bound, upper_bound, and equal_range functions
+ for const instances.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#231" target="_top">231</a>:
- <span class="emphasis"><em>Precision in iostream?</em></span>
+ <span class="emphasis"><em>Precision in iostream?</em></span>
</span></dt><dd><p>For conversion from a floating-point type, <code class="code">str.precision()</code>
- is specified in the conversion specification.
+ is specified in the conversion specification.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#233" target="_top">233</a>:
- <span class="emphasis"><em>Insertion hints in associative containers</em></span>
+ <span class="emphasis"><em>Insertion hints in associative containers</em></span>
</span></dt><dd><p>Implement N1780, first check before then check after, insert as close
- to hint as possible.
+ to hint as possible.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#235" target="_top">235</a>:
- <span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
+ <span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
</span></dt><dd><p>The declaration of <code class="code">reverse_iterator</code> lists a default constructor.
- However, no specification is given what this constructor should do.
+ However, no specification is given what this constructor should do.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#241" target="_top">241</a>:
- <span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
+ <span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
</span></dt><dd><p>Add a helper for forward_iterator/output_iterator, fix the existing
- one for input_iterator/output_iterator to not rely on Assignability.
+ one for input_iterator/output_iterator to not rely on Assignability.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#243" target="_top">243</a>:
- <span class="emphasis"><em>get and getline when sentry reports failure</em></span>
+ <span class="emphasis"><em>get and getline when sentry reports failure</em></span>
</span></dt><dd><p>Store a null character only if the character array has a non-zero size.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#251" target="_top">251</a>:
- <span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
+ <span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
</span></dt><dd><p>This nested typedef was originally not specified.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#253" target="_top">253</a>:
- <span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
+ <span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
</span></dt><dd><p>Make the copy constructor and copy-assignment operator declarations
- public in gslice_array, indirect_array, mask_array, slice_array; provide
+ public in gslice_array, indirect_array, mask_array, slice_array; provide
definitions.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#265" target="_top">265</a>:
- <span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
+ <span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
</span></dt><dd><p>The default ctor would build its members from copies of temporaries;
- now it simply uses their respective default ctors.
+ now it simply uses their respective default ctors.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#266" target="_top">266</a>:
- <span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
+ <span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
</span></dt><dd><p>The <code class="code">bad_</code>* classes no longer have destructors (they
- are trivial), since no description of them was ever given.
+ are trivial), since no description of them was ever given.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#271" target="_top">271</a>:
- <span class="emphasis"><em>basic_iostream missing typedefs</em></span>
+ <span class="emphasis"><em>basic_iostream missing typedefs</em></span>
</span></dt><dd><p>The typedefs it inherits from its base classes can't be used, since
- (for example) <code class="code">basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
+ (for example) <code class="code">basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#275" target="_top">275</a>:
- <span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
+ <span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
</span></dt><dd><p>Similar to 118.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#280" target="_top">280</a>:
- <span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
+ <span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
</span></dt><dd><p>Add global functions with two template parameters.
- (NB: not added for now a templated assignment operator)
+ (NB: not added for now a templated assignment operator)
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#292" target="_top">292</a>:
- <span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
+ <span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
</span></dt><dd><p>If <code class="code">(this == &amp;rhs)</code> do nothing.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#300" target="_top">300</a>:
- <span class="emphasis"><em>List::merge() specification incomplete</em></span>
+ <span class="emphasis"><em>List::merge() specification incomplete</em></span>
</span></dt><dd><p>If <code class="code">(this == &amp;x)</code> do nothing.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#303" target="_top">303</a>:
- <span class="emphasis"><em>Bitset input operator underspecified</em></span>
- </span></dt><dd><p>Basically, compare the input character to
- <code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
+ <span class="emphasis"><em>Bitset input operator underspecified</em></span>
+ </span></dt><dd><p>Basically, compare the input character to
+ <code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#305" target="_top">305</a>:
- <span class="emphasis"><em>Default behavior of codecvt&lt;wchar_t, char,
- mbstate_t&gt;::length()</em></span>
- </span></dt><dd><p>Do not specify what <code class="code">codecvt&lt;wchar_t, char,
- mbstate_t&gt;::do_length</code> must return.
+ <span class="emphasis"><em>Default behavior of codecvt&lt;wchar_t, char,
+ mbstate_t&gt;::length()</em></span>
+ </span></dt><dd><p>Do not specify what <code class="code">codecvt&lt;wchar_t, char,
+ mbstate_t&gt;::do_length</code> must return.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#328" target="_top">328</a>:
- <span class="emphasis"><em>Bad sprintf format modifier in
- money_put&lt;&gt;::do_put()</em></span>
+ <span class="emphasis"><em>Bad sprintf format modifier in
+ money_put&lt;&gt;::do_put()</em></span>
</span></dt><dd><p>Change the format string to "%.0Lf".
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#365" target="_top">365</a>:
- <span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
+ <span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
</span></dt><dd><p>Add const overloads of <code class="code">is_open</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#387" target="_top">387</a>:
- <span class="emphasis"><em>std::complex over-encapsulated</em></span>
+ <span class="emphasis"><em>std::complex over-encapsulated</em></span>
</span></dt><dd><p>Add the <code class="code">real(T)</code> and <code class="code">imag(T)</code>
- members; in C++0x mode, also adjust the existing
- <code class="code">real()</code> and <code class="code">imag()</code> members and
- free functions.
+ members; in C++0x mode, also adjust the existing
+ <code class="code">real()</code> and <code class="code">imag()</code> members and
+ free functions.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#389" target="_top">389</a>:
- <span class="emphasis"><em>Const overload of valarray::operator[] returns
- by value</em></span>
+ <span class="emphasis"><em>Const overload of valarray::operator[] returns
+ by value</em></span>
</span></dt><dd><p>Change it to return a <code class="code">const T&amp;</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#396" target="_top">396</a>:
- <span class="emphasis"><em>what are characters zero and one</em></span>
+ <span class="emphasis"><em>what are characters zero and one</em></span>
</span></dt><dd><p>Implement the proposed resolution.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#402" target="_top">402</a>:
- <span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
+ <span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
</span></dt><dd><p>Replace "new" with "::new".
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#408" target="_top">408</a>:
- <span class="emphasis"><em>
- Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
- </em></span>
+ <span class="emphasis"><em>
+ Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
+ </em></span>
</span></dt><dd><p>Tweak the debug-mode checks in _Safe_iterator.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#409" target="_top">409</a>:
- <span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
+ <span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
</span></dt><dd><p>Have <code class="code">open</code> clear the error flags.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#431" target="_top">431</a>:
- <span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
+ <span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
</span></dt><dd><p>Implement Option 3, as per N1599.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#432" target="_top">432</a>:
- <span class="emphasis"><em>stringbuf::overflow() makes only one write position
+ <span class="emphasis"><em>stringbuf::overflow() makes only one write position
available</em></span>
</span></dt><dd><p>Implement the resolution, beyond DR 169.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#434" target="_top">434</a>:
- <span class="emphasis"><em>bitset::to_string() hard to use</em></span>
+ <span class="emphasis"><em>bitset::to_string() hard to use</em></span>
</span></dt><dd><p>Add three overloads, taking fewer template arguments.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#438" target="_top">438</a>:
- <span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
+ <span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
</span></dt><dd><p>Implement the resolution, basically cast less.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#453" target="_top">453</a>:
- <span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
+ <span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
</span></dt><dd><p>Don't fail if the next pointer is null and newoff is zero.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#455" target="_top">455</a>:
- <span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
+ <span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
</span></dt><dd><p>Initialize cerr tied to cout and wcerr tied to wcout.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#464" target="_top">464</a>:
- <span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
+ <span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
</span></dt><dd><p>Add <code class="code">data()</code> to <code class="code">std::vector</code> and
- <code class="code">at(const key_type&amp;)</code> to <code class="code">std::map</code>.
+ <code class="code">at(const key_type&amp;)</code> to <code class="code">std::map</code>.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#508" target="_top">508</a>:
- <span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
+ <span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
</span></dt><dd><p>Fix the parameters.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#512" target="_top">512</a>:
- <span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
+ <span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
</span></dt><dd><p>Construct a <code class="code">linear_congruential</code> engine and seed with it.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-closed.html#526" target="_top">526</a>:
- <span class="emphasis"><em>Is it undefined if a function in the standard changes in
+ <span class="emphasis"><em>Is it undefined if a function in the standard changes in
parameters?</em></span>
</span></dt><dd><p>Use &amp;value.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#538" target="_top">538</a>:
- <span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
+ <span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
and Assignable?</em></span>
</span></dt><dd><p>In case of input_iterator/output_iterator rely on Assignability of
- input_iterator' value_type.
+ input_iterator' value_type.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#539" target="_top">539</a>:
- <span class="emphasis"><em>partial_sum and adjacent_difference should mention
- requirements</em></span>
+ <span class="emphasis"><em>partial_sum and adjacent_difference should mention
+ requirements</em></span>
</span></dt><dd><p>We were almost doing the right thing, just use std::move
- in adjacent_difference.
+ in adjacent_difference.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#541" target="_top">541</a>:
- <span class="emphasis"><em>shared_ptr template assignment and void</em></span>
+ <span class="emphasis"><em>shared_ptr template assignment and void</em></span>
</span></dt><dd><p>Add an auto_ptr&lt;void&gt; specialization.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#543" target="_top">543</a>:
- <span class="emphasis"><em>valarray slice default constructor</em></span>
+ <span class="emphasis"><em>valarray slice default constructor</em></span>
</span></dt><dd><p>Follow the straightforward proposed resolution.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#550" target="_top">550</a>:
- <span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
+ <span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
</span></dt><dd><p>In C++0x mode, remove the pow(float,int), etc., signatures.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#586" target="_top">586</a>:
- <span class="emphasis"><em>string inserter not a formatted function</em></span>
+ <span class="emphasis"><em>string inserter not a formatted function</em></span>
</span></dt><dd><p>Change it to be a formatted output function (i.e. catch exceptions).
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#596" target="_top">596</a>:
- <span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
+ <span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
</span></dt><dd><p>Add the missing modes to fopen_mode.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#630" target="_top">630</a>:
- <span class="emphasis"><em>arrays of valarray</em></span>
+ <span class="emphasis"><em>arrays of valarray</em></span>
</span></dt><dd><p>Implement the simple resolution.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#660" target="_top">660</a>:
- <span class="emphasis"><em>Missing bitwise operations</em></span>
+ <span class="emphasis"><em>Missing bitwise operations</em></span>
</span></dt><dd><p>Add the missing operations.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#691" target="_top">691</a>:
- <span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
+ <span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
</span></dt><dd><p>In C++0x mode add cbegin(size_type) and cend(size_type)
- to the unordered containers.
+ to the unordered containers.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#693" target="_top">693</a>:
- <span class="emphasis"><em>std::bitset::all() missing</em></span>
+ <span class="emphasis"><em>std::bitset::all() missing</em></span>
</span></dt><dd><p>Add it, consistently with the discussion.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#695" target="_top">695</a>:
- <span class="emphasis"><em>ctype&lt;char&gt;::classic_table() not accessible</em></span>
+ <span class="emphasis"><em>ctype&lt;char&gt;::classic_table() not accessible</em></span>
</span></dt><dd><p>Make the member functions table and classic_table public.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#696" target="_top">696</a>:
- <span class="emphasis"><em>istream::operator&gt;&gt;(int&amp;) broken</em></span>
+ <span class="emphasis"><em>istream::operator&gt;&gt;(int&amp;) broken</em></span>
</span></dt><dd><p>Implement the straightforward resolution.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#761" target="_top">761</a>:
- <span class="emphasis"><em>unordered_map needs an at() member function</em></span>
+ <span class="emphasis"><em>unordered_map needs an at() member function</em></span>
</span></dt><dd><p>In C++0x mode, add at() and at() const.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#775" target="_top">775</a>:
- <span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
+ <span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
</span></dt><dd><p>Implement the int -&gt; size_t replacements.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#776" target="_top">776</a>:
- <span class="emphasis"><em>Undescribed assign function of std::array</em></span>
+ <span class="emphasis"><em>Undescribed assign function of std::array</em></span>
</span></dt><dd><p>In C++0x mode, remove assign, add fill.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#781" target="_top">781</a>:
- <span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
+ <span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
</span></dt><dd><p>In C++0x mode, add std::proj.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#809" target="_top">809</a>:
- <span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
+ <span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
</span></dt><dd><p>Add the overload.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#844" target="_top">844</a>:
- <span class="emphasis"><em>complex pow return type is ambiguous</em></span>
+ <span class="emphasis"><em>complex pow return type is ambiguous</em></span>
</span></dt><dd><p>In C++0x mode, remove the pow(complex&lt;T&gt;, int) signature.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-defects.html#853" target="_top">853</a>:
- <span class="emphasis"><em>to_string needs updating with zero and one</em></span>
+ <span class="emphasis"><em>to_string needs updating with zero and one</em></span>
</span></dt><dd><p>Update / add the signatures.
</p></dd><dt><span class="term"><a class="ulink" href="../ext/lwg-active.html#865" target="_top">865</a>:
- <span class="emphasis"><em>More algorithms that throw away information</em></span>
+ <span class="emphasis"><em>More algorithms that throw away information</em></span>
</span></dt><dd><p>The traditional HP / SGI return type and value is blessed
- by the resolution of the DR.
+ by the resolution of the DR.
</p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/codecvt.html b/libstdc++-v3/doc/html/manual/codecvt.html
deleted file mode 100644
index 1e45a2582cb..00000000000
--- a/libstdc++-v3/doc/html/manual/codecvt.html
+++ /dev/null
@@ -1,379 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>codecvt</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; codecvt&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="facets.html" title="Chapter 15. Facets aka Categories" /><link rel="prev" href="facets.html" title="Chapter 15. Facets aka Categories" /><link rel="next" href="messages.html" title="messages" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">codecvt</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Chapter 15. Facets aka Categories</th><td width="20%" align="right"> <a accesskey="n" href="messages.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="codecvt"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.facet.codecvt"></a>codecvt</h2></div></div></div><p>
-The standard class codecvt attempts to address conversions between
-different character encoding schemes. In particular, the standard
-attempts to detail conversions between the implementation-defined wide
-characters (hereafter referred to as wchar_t) and the standard type
-char that is so beloved in classic <span class="quote">“<span class="quote">C</span>â€</span> (which can now be
-referred to as narrow characters.) This document attempts to describe
-how the GNU libstdc++ implementation deals with the conversion between
-wide and narrow characters, and also presents a framework for dealing
-with the huge number of other encodings that iconv can convert,
-including Unicode and UTF8. Design issues and requirements are
-addressed, and examples of correct usage for both the required
-specializations for wide and narrow characters and the
-implementation-provided extended functionality are given.
-</p><div class="sect2" title="Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.req"></a>Requirements</h3></div></div></div><p>
-Around page 425 of the C++ Standard, this charming heading comes into view:
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-22.2.1.5 - Template class codecvt
-</p></blockquote></div><p>
-The text around the codecvt definition gives some clues:
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--1- The class codecvt&lt;internT,externT,stateT&gt; is for use when
-converting from one codeset to another, such as from wide characters
-to multibyte characters, between wide character encodings such as
-Unicode and EUC.
-</em></span>
-</p></blockquote></div><p>
-Hmm. So, in some unspecified way, Unicode encodings and
-translations between other character sets should be handled by this
-class.
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--2- The stateT argument selects the pair of codesets being mapped between.
-</em></span>
-</p></blockquote></div><p>
-Ah ha! Another clue...
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--3- The instantiations required in the Table ??
-(lib.locale.category), namely codecvt&lt;wchar_t,char,mbstate_t&gt; and
-codecvt&lt;char,char,mbstate_t&gt;, convert the implementation-defined
-native character set. codecvt&lt;char,char,mbstate_t&gt; implements a
-degenerate conversion; it does not convert at
-all. codecvt&lt;wchar_t,char,mbstate_t&gt; converts between the native
-character sets for tiny and wide characters. Instantiations on
-mbstate_t perform conversion between encodings known to the library
-implementor. Other encodings can be converted by specializing on a
-user-defined stateT type. The stateT object can contain any state that
-is useful to communicate to or from the specialized do_convert member.
-</em></span>
-</p></blockquote></div><p>
-At this point, a couple points become clear:
-</p><p>
-One: The standard clearly implies that attempts to add non-required
-(yet useful and widely used) conversions need to do so through the
-third template parameter, stateT.</p><p>
-Two: The required conversions, by specifying mbstate_t as the third
-template parameter, imply an implementation strategy that is mostly
-(or wholly) based on the underlying C library, and the functions
-mcsrtombs and wcsrtombs in particular.</p></div><div class="sect2" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.design"></a>Design</h3></div></div></div><div class="sect3" title="wchar_t Size"><div class="titlepage"><div><div><h4 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h4></div></div></div><p>
- The simple implementation detail of wchar_t's size seems to
- repeatedly confound people. Many systems use a two byte,
- unsigned integral type to represent wide characters, and use an
- internal encoding of Unicode or UCS2. (See AIX, Microsoft NT,
- Java, others.) Other systems, use a four byte, unsigned integral
- type to represent wide characters, and use an internal encoding
- of UCS4. (GNU/Linux systems using glibc, in particular.) The C
- programming language (and thus C++) does not specify a specific
- size for the type wchar_t.
- </p><p>
- Thus, portable C++ code cannot assume a byte size (or endianness) either.
- </p></div><div class="sect3" title="Support for Unicode"><div class="titlepage"><div><div><h4 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h4></div></div></div><p>
- Probably the most frequently asked question about code conversion
- is: "So dudes, what's the deal with Unicode strings?"
- The dude part is optional, but apparently the usefulness of
- Unicode strings is pretty widely appreciated. Sadly, this specific
- encoding (And other useful encodings like UTF8, UCS4, ISO 8859-10,
- etc etc etc) are not mentioned in the C++ standard.
- </p><p>
- A couple of comments:
- </p><p>
- The thought that all one needs to convert between two arbitrary
- codesets is two types and some kind of state argument is
- unfortunate. In particular, encodings may be stateless. The naming
- of the third parameter as stateT is unfortunate, as what is really
- needed is some kind of generalized type that accounts for the
- issues that abstract encodings will need. The minimum information
- that is required includes:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Identifiers for each of the codesets involved in the
- conversion. For example, using the iconv family of functions
- from the Single Unix Specification (what used to be called
- X/Open) hosted on the GNU/Linux operating system allows
- bi-directional mapping between far more than the following
- tantalizing possibilities:
- </p><p>
- (An edited list taken from <code class="code">`iconv --list`</code> on a
- Red Hat 6.2/Intel system:
- </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
-8859_1, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ARABIC, ARABIC7,
-ASCII, EUC-CN, EUC-JP, EUC-KR, EUC-TW, GREEK-CCIcode, GREEK, GREEK7-OLD,
-GREEK7, GREEK8, HEBREW, ISO-8859-1, ISO-8859-2, ISO-8859-3,
-ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8,
-ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14,
-ISO-8859-15, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4,
-ISO-10646/UTF-8, ISO-10646/UTF8, SHIFT-JIS, SHIFT_JIS, UCS-2, UCS-4,
-UCS2, UCS4, UNICODE, UNICODEBIG, UNICODELIcodeLE, US-ASCII, US, UTF-8,
-UTF-16, UTF8, UTF16).
-</pre></blockquote></div><p>
-For iconv-based implementations, string literals for each of the
-encodings (i.e. "UCS-2" and "UTF-8") are necessary,
-although for other,
-non-iconv implementations a table of enumerated values or some other
-mechanism may be required.
-</p></li><li class="listitem"><p>
- Maximum length of the identifying string literal.
-</p></li><li class="listitem"><p>
- Some encodings require explicit endian-ness. As such, some kind
- of endian marker or other byte-order marker will be necessary. See
- "Footnotes for C/C++ developers" in Haible for more information on
- UCS-2/Unicode endian issues. (Summary: big endian seems most likely,
- however implementations, most notably Microsoft, vary.)
-</p></li><li class="listitem"><p>
- Types representing the conversion state, for conversions involving
- the machinery in the "C" library, or the conversion descriptor, for
- conversions using iconv (such as the type iconv_t.) Note that the
- conversion descriptor encodes more information than a simple encoding
- state type.
-</p></li><li class="listitem"><p>
- Conversion descriptors for both directions of encoding. (i.e., both
- UCS-2 to UTF-8 and UTF-8 to UCS-2.)
-</p></li><li class="listitem"><p>
- Something to indicate if the conversion requested if valid.
-</p></li><li class="listitem"><p>
- Something to represent if the conversion descriptors are valid.
-</p></li><li class="listitem"><p>
- Some way to enforce strict type checking on the internal and
- external types. As part of this, the size of the internal and
- external types will need to be known.
-</p></li></ul></div></div><div class="sect3" title="Other Issues"><div class="titlepage"><div><div><h4 class="title"><a id="codecvt.design.issues"></a>Other Issues</h4></div></div></div><p>
-In addition, multi-threaded and multi-locale environments also impact
-the design and requirements for code conversions. In particular, they
-affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
-when implemented using standard "C" functions.
-</p><p>
-Three problems arise, one big, one of medium importance, and one small.
-</p><p>
-First, the small: mcsrtombs and wcsrtombs may not be multithread-safe
-on all systems required by the GNU tools. For GNU/Linux and glibc,
-this is not an issue.
-</p><p>
-Of medium concern, in the grand scope of things, is that the functions
-used to implement this specialization work on null-terminated
-strings. Buffers, especially file buffers, may not be null-terminated,
-thus giving conversions that end prematurely or are otherwise
-incorrect. Yikes!
-</p><p>
-The last, and fundamental problem, is the assumption of a global
-locale for all the "C" functions referenced above. For something like
-C++ iostreams (where codecvt is explicitly used) the notion of
-multiple locales is fundamental. In practice, most users may not run
-into this limitation. However, as a quality of implementation issue,
-the GNU C++ library would like to offer a solution that allows
-multiple locales and or simultaneous usage with computationally
-correct results. In short, libstdc++ is trying to offer, as an
-option, a high-quality implementation, damn the additional complexity!
-</p><p>
-For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
-conversions are made between the internal character set (always UCS4
-on GNU/Linux) and whatever the currently selected locale for the
-LC_CTYPE category implements.
-</p></div></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.impl"></a>Implementation</h3></div></div></div><p>
-The two required specializations are implemented as follows:
-</p><p>
-<code class="code">
-codecvt&lt;char, char, mbstate_t&gt;
-</code>
-</p><p>
-This is a degenerate (i.e., does nothing) specialization. Implementing
-this was a piece of cake.
-</p><p>
-<code class="code">
-codecvt&lt;char, wchar_t, mbstate_t&gt;
-</code>
-</p><p>
-This specialization, by specifying all the template parameters, pretty
-much ties the hands of implementors. As such, the implementation is
-straightforward, involving mcsrtombs for the conversions between char
-to wchar_t and wcsrtombs for conversions between wchar_t and char.
-</p><p>
-Neither of these two required specializations deals with Unicode
-characters. As such, libstdc++ implements a partial specialization
-of the codecvt class with and iconv wrapper class, encoding_state as the
-third template parameter.
-</p><p>
-This implementation should be standards conformant. First of all, the
-standard explicitly points out that instantiations on the third
-template parameter, stateT, are the proper way to implement
-non-required conversions. Second of all, the standard says (in Chapter
-17) that partial specializations of required classes are a-ok. Third
-of all, the requirements for the stateT type elsewhere in the standard
-(see 21.1.2 traits typedefs) only indicate that this type be copy
-constructible.
-</p><p>
-As such, the type encoding_state is defined as a non-templatized, POD
-type to be used as the third type of a codecvt instantiation. This
-type is just a wrapper class for iconv, and provides an easy interface
-to iconv functionality.
-</p><p>
-There are two constructors for encoding_state:
-</p><p>
-<code class="code">
-encoding_state() : __in_desc(0), __out_desc(0)
-</code>
-</p><p>
-This default constructor sets the internal encoding to some default
-(currently UCS4) and the external encoding to whatever is returned by
-nl_langinfo(CODESET).
-</p><p>
-<code class="code">
-encoding_state(const char* __int, const char* __ext)
-</code>
-</p><p>
-This constructor takes as parameters string literals that indicate the
-desired internal and external encoding. There are no defaults for
-either argument.
-</p><p>
-One of the issues with iconv is that the string literals identifying
-conversions are not standardized. Because of this, the thought of
-mandating and or enforcing some set of pre-determined valid
-identifiers seems iffy: thus, a more practical (and non-migraine
-inducing) strategy was implemented: end-users can specify any string
-(subject to a pre-determined length qualifier, currently 32 bytes) for
-encodings. It is up to the user to make sure that these strings are
-valid on the target system.
-</p><p>
-<code class="code">
-void
-_M_init()
-</code>
-</p><p>
-Strangely enough, this member function attempts to open conversion
-descriptors for a given encoding_state object. If the conversion
-descriptors are not valid, the conversion descriptors returned will
-not be valid and the resulting calls to the codecvt conversion
-functions will return error.
-</p><p>
-<code class="code">
-bool
-_M_good()
-</code>
-</p><p>
-Provides a way to see if the given encoding_state object has been
-properly initialized. If the string literals describing the desired
-internal and external encoding are not valid, initialization will
-fail, and this will return false. If the internal and external
-encodings are valid, but iconv_open could not allocate conversion
-descriptors, this will also return false. Otherwise, the object is
-ready to convert and will return true.
-</p><p>
-<code class="code">
-encoding_state(const encoding_state&amp;)
-</code>
-</p><p>
-As iconv allocates memory and sets up conversion descriptors, the copy
-constructor can only copy the member data pertaining to the internal
-and external code conversions, and not the conversion descriptors
-themselves.
-</p><p>
-Definitions for all the required codecvt member functions are provided
-for this specialization, and usage of codecvt&lt;internal character type,
-external character type, encoding_state&gt; is consistent with other
-codecvt usage.
-</p></div><div class="sect2" title="Use"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.use"></a>Use</h3></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
- typedef codecvt_base::result result;
- typedef unsigned short unicode_t;
- typedef unicode_t int_type;
- typedef char ext_type;
- typedef encoding_state state_type;
- typedef codecvt&lt;int_type, ext_type, state_type&gt; unicode_codecvt;
-
- const ext_type* e_lit = "black pearl jasmine tea";
- int size = strlen(e_lit);
- int_type i_lit_base[24] =
- { 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184,
- 27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696,
- 25856, 24832, 2560
- };
- const int_type* i_lit = i_lit_base;
- const ext_type* efrom_next;
- const int_type* ifrom_next;
- ext_type* e_arr = new ext_type[size + 1];
- ext_type* eto_next;
- int_type* i_arr = new int_type[size + 1];
- int_type* ito_next;
-
- // construct a locale object with the specialized facet.
- locale loc(locale::classic(), new unicode_codecvt);
- // sanity check the constructed locale has the specialized facet.
- VERIFY( has_facet&lt;unicode_codecvt&gt;(loc) );
- const unicode_codecvt&amp; cvt = use_facet&lt;unicode_codecvt&gt;(loc);
- // convert between const char* and unicode strings
- unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1");
- initialize_state(state01);
- result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
- i_arr, i_arr + size, ito_next);
- VERIFY( r1 == codecvt_base::ok );
- VERIFY( !int_traits::compare(i_arr, i_lit, size) );
- VERIFY( efrom_next == e_lit + size );
- VERIFY( ito_next == i_arr + size );
-</pre></div><div class="sect2" title="Future"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.future"></a>Future</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- a. things that are sketchy, or remain unimplemented:
- do_encoding, max_length and length member functions
- are only weakly implemented. I have no idea how to do
- this correctly, and in a generic manner. Nathan?
-</p></li><li class="listitem"><p>
- b. conversions involving std::string
- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
- how should operators != and == work for string of
- different/same encoding?
- </p></li><li class="listitem"><p>
- what is equal? A byte by byte comparison or an
- encoding then byte comparison?
- </p></li><li class="listitem"><p>
- conversions between narrow, wide, and unicode strings
- </p></li></ul></div></li><li class="listitem"><p>
- c. conversions involving std::filebuf and std::ostream
-</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
- how to initialize the state object in a
- standards-conformant manner?
- </p></li><li class="listitem"><p>
- how to synchronize the "C" and "C++"
- conversion information?
- </p></li><li class="listitem"><p>
- wchar_t/char internal buffers and conversions between
- internal/external buffers?
- </p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id686680"></a><p><span class="title"><i>
- The GNU C Library
- </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id693504"></a><p><span class="title"><i>
- Correspondence
- </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id612636"></a><p><span class="title"><i>
- ISO/IEC 14882:1998 Programming languages - C++
- </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id612655"></a><p><span class="title"><i>
- ISO/IEC 9899:1999 Programming languages - C
- </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="id699030"></a><p><span class="title"><i>
- The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
- </i>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid">
- <a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id699056"></a><p><span class="title"><i>
- The C++ Programming Language, Special Edition
- </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
- Addison Wesley
- . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id698403"></a><p><span class="title"><i>
- Standard C++ IOStreams and Locales
- </i>. </span><span class="subtitle">
- Advanced Programmer's Guide and Reference
- . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
- Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry" title="A brief description of Normative Addendum 1"><a id="id661653"></a><p><span class="title"><i>
- A brief description of Normative Addendum 1
- </i>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span><span class="biblioid">
- <a class="ulink" href="http://www.lysator.liu.se/c/na1.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="The Unicode HOWTO"><a id="id661684"></a><p><span class="title"><i>
- The Unicode HOWTO
- </i>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span><span class="biblioid">
- <a class="ulink" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="UTF-8 and Unicode FAQ for Unix/Linux"><a id="id662453"></a><p><span class="title"><i>
- UTF-8 and Unicode FAQ for Unix/Linux
- </i>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span><span class="biblioid">
- <a class="ulink" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
- </a>
- . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="facets.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="messages.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 15. Facets aka Categories </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> messages</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/complex.html b/libstdc++-v3/doc/html/manual/complex.html
deleted file mode 100644
index cb82e609eab..00000000000
--- a/libstdc++-v3/doc/html/manual/complex.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. Complex</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Part X.  Numerics" /><link rel="prev" href="numerics.html" title="Part X.  Numerics" /><link rel="next" href="generalized_numeric_operations.html" title="Chapter 22. Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Complex</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Part X. 
- Numerics
-
-</th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. Complex"><div class="titlepage"><div><div><h2 class="title"><a id="manual.numerics.complex"></a>Chapter 21. Complex</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="complex.html#numerics.complex.processing">complex Processing</a></span></dt></dl></div><p>
- </p><div class="sect1" title="complex Processing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="numerics.complex.processing"></a>complex Processing</h2></div></div></div><p>
- </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
- <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
- addition of complex types to the C language. David Tribble has
- compiled a list of C++98 and C99 conflict points; his description of
- C's new type versus those of C++ and how to get them playing together
- nicely is
-<a class="ulink" href="http://david.tribble.com/text/cdiffs.htm#C99-complex" target="_top">here</a>.
- </p><p><code class="code">complex&lt;&gt;</code> is intended to be instantiated with a
- floating-point type. As long as you meet that and some other basic
- requirements, then the resulting instantiation has all of the usual
- math operators defined, as well as definitions of <code class="code">op&lt;&lt;</code>
- and <code class="code">op&gt;&gt;</code> that work with iostreams: <code class="code">op&lt;&lt;</code>
- prints <code class="code">(u,v)</code> and <code class="code">op&gt;&gt;</code> can read <code class="code">u</code>,
- <code class="code">(u)</code>, and <code class="code">(u,v)</code>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part X. 
- Numerics
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Generalized Operations</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/concurrency.html b/libstdc++-v3/doc/html/manual/concurrency.html
new file mode 100644
index 00000000000..8a51c7c5c17
--- /dev/null
+++ b/libstdc++-v3/doc/html/manual/concurrency.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
+ Concurrency
+
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15.  Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
+ Concurrency
+ <a id="id387949" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
+ Facilities for concurrent operation, and control thereof.
+</p><div class="sect1" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
+ All items are declared in one of four standard header files.
+ </p><p>
+ In header <code class="filename">mutex</code>, class
+ template <code class="classname">mutex</code> and variants,
+ class <code class="classname">once_flag</code>, and class
+ template <code class="classname">unique_lock</code>.
+ </p><p>
+ In header <code class="filename">condition_variable</code>,
+ classes <code class="classname">condition_variable</code>
+ and <code class="classname">condition_variable_any</code>.
+ </p><p>
+ In header <code class="filename">thread</code>,
+ class <code class="classname">thread</code> and
+ namespace <code class="code">this_thread</code>.
+ </p><p>
+ In header <code class="filename">future</code>, class
+ template <code class="classname">future</code> and class
+ template <code class="classname">shared_future</code>, class
+ template <code class="classname">promise</code>,
+ and <code class="classname">packaged_task</code>.
+ </p><p>
+ Full API details.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14. 
+ Atomics
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. 
+ Extensions
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/configure.html b/libstdc++-v3/doc/html/manual/configure.html
index c5ee8c3b546..806cc973819 100644
--- a/libstdc++-v3/doc/html/manual/configure.html
+++ b/libstdc++-v3/doc/html/manual/configure.html
@@ -19,168 +19,167 @@
available for a given set of libstdc++ sources is to go to the
source directory and then type:<span class="command"><strong>./configure --help</strong></span>.
</p><div class="variablelist"><dl><dt><span class="term"><code class="code">--enable-multilib</code>[default]</span></dt><dd><p>This is part of the generic multilib support for building cross
- compilers. As such, targets like "powerpc-elf" will have
- libstdc++ built many different ways: "-msoft-float"
- and not, etc. A different libstdc++ will be built for each of
- the different multilib versions. This option is on by default.
+ compilers. As such, targets like "powerpc-elf" will have
+ libstdc++ built many different ways: "-msoft-float"
+ and not, etc. A different libstdc++ will be built for each of
+ the different multilib versions. This option is on by default.
</p></dd><dt><span class="term"><code class="code">--enable-sjlj-exceptions</code></span></dt><dd><p>Forces old, set-jump/long-jump exception handling model. If
- at all possible, the new, frame unwinding exception handling routines
- should be used instead, as they significantly reduce both
- runtime memory usage and executable size. This option can
- change the library ABI.
+ at all possible, the new, frame unwinding exception handling routines
+ should be used instead, as they significantly reduce both
+ runtime memory usage and executable size. This option can
+ change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-version-specific-runtime-libs</code></span></dt><dd><p>Specify that run-time libraries should be installed in the
- compiler-specific subdirectory (i.e.,
- <code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}</code>)
- instead of <code class="code">${libdir}</code>. This option is useful if you
- intend to use several versions of gcc in parallel. In addition,
- libstdc++'s include files will be installed in
- <code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
- unless you also specify
+ compiler-specific subdirectory (i.e.,
+ <code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}</code>)
+ instead of <code class="code">${libdir}</code>. This option is useful if you
+ intend to use several versions of gcc in parallel. In addition,
+ libstdc++'s include files will be installed in
+ <code class="code">${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
+ unless you also specify
<code class="literal">--with-gxx-include-dir=<code class="filename">dirname</code></code> during configuration.
</p></dd><dt><span class="term"><code class="code">--with-gxx-include-dir=&lt;include-files dir&gt;</code></span></dt><dd><p>Adds support for named libstdc++ include directory. For instance,
- the following puts all the libstdc++ headers into a directory
- called "4.4-20090404" instead of the usual
- "c++/(version)".
+ the following puts all the libstdc++ headers into a directory
+ called "4.4-20090404" instead of the usual
+ "c++/(version)".
</p><pre class="programlisting">
--with-gxx-include-dir=/foo/H-x86-gcc-3-c-gxx-inc/include/4.4-20090404</pre></dd><dt><span class="term"><code class="code">--enable-cstdio</code></span></dt><dd><p>This is an abbreviated form of <code class="code">'--enable-cstdio=stdio'</code>
- (described next).
+ (described next).
</p></dd><dt><span class="term"><code class="code">--enable-cstdio=OPTION</code></span></dt><dd><p>Select a target-specific I/O package. At the moment, the only
- choice is to use 'stdio', a generic "C" abstraction.
- The default is 'stdio'. This option can change the library ABI.
+ choice is to use 'stdio', a generic "C" abstraction.
+ The default is 'stdio'. This option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-clocale</code></span></dt><dd><p>This is an abbreviated form of <code class="code">'--enable-clocale=generic'</code>
- (described next).
+ (described next).
</p></dd><dt><span class="term"><code class="code">--enable-clocale=OPTION</code></span></dt><dd><p>Select a target-specific underlying locale package. The
- choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
- (IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
- 'gnu' to specify a model based on functionality from the GNU C
- library (langinfo/iconv/gettext) (from <a class="ulink" href="http://sources.redhat.com/glibc/" target="_top">glibc</a>, the GNU C
- library), or 'generic' to use a generic "C"
- abstraction which consists of "C" locale info.
+ choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
+ (IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
+ 'gnu' to specify a model based on functionality from the GNU C
+ library (langinfo/iconv/gettext) (from <a class="ulink" href="http://sources.redhat.com/glibc/" target="_top">glibc</a>, the GNU C
+ library), or 'generic' to use a generic "C"
+ abstraction which consists of "C" locale info.
</p><p>If not explicitly specified, the configure proccess tries
to guess the most suitable package from the choices above. The
default is 'generic'. On glibc-based systems of sufficient
- vintage (2.2.5 and newer) and capability (with installed DE and
- FR locale data), 'gnu' is automatically selected. This option
+ vintage (2.3 and newer), 'gnu' is automatically selected. This option
can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-allocator</code></span></dt><dd><p>This is an abbreviated form of
- <code class="code">'--enable-libstdcxx-allocator=auto'</code> (described
- next).
+ <code class="code">'--enable-libstdcxx-allocator=auto'</code> (described
+ next).
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-allocator=OPTION </code></span></dt><dd><p>Select a target-specific underlying std::allocator. The
- choices are 'new' to specify a wrapper for new, 'malloc' to
- specify a wrapper for malloc, 'mt' for a fixed power of two allocator,
+ choices are 'new' to specify a wrapper for new, 'malloc' to
+ specify a wrapper for malloc, 'mt' for a fixed power of two allocator,
'pool' for the SGI pooled allocator or 'bitmap' for a bitmap allocator.
- See this page for more information on allocator
- <a class="link" href="memory.html#allocator.ext" title="Extension Allocators">extensions</a>. This option
- can change the library ABI.
+ See this page for more information on allocator
+ <a class="link" href="memory.html#allocator.ext" title="Extension Allocators">extensions</a>. This option
+ can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-cheaders=OPTION</code></span></dt><dd><p>This allows the user to define the approach taken for C header
- compatibility with C++. Options are c, c_std, and c_global.
- These correspond to the source directory's include/c,
- include/c_std, and include/c_global, and may also include
- include/c_compatibility. The default is 'c_global'.
+ compatibility with C++. Options are c, c_std, and c_global.
+ These correspond to the source directory's include/c,
+ include/c_std, and include/c_global, and may also include
+ include/c_compatibility. The default is 'c_global'.
</p></dd><dt><span class="term"><code class="code">--enable-threads</code></span></dt><dd><p>This is an abbreviated form of <code class="code">'--enable-threads=yes'</code>
- (described next).
+ (described next).
</p></dd><dt><span class="term"><code class="code">--enable-threads=OPTION</code></span></dt><dd><p>Select a threading library. A full description is
- given in the
- general <a class="ulink" href="http://gcc.gnu.org/install/configure.html" target="_top">compiler
- configuration instructions</a>. This option can change the
- library ABI.
+ given in the
+ general <a class="ulink" href="http://gcc.gnu.org/install/configure.html" target="_top">compiler
+ configuration instructions</a>. This option can change the
+ library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-debug</code></span></dt><dd><p>Build separate debug libraries in addition to what is normally built.
- By default, the debug libraries are compiled with
- <code class="code"> CXXFLAGS='-g3 -O0 -fno-inline'</code>
- , are installed in <code class="code">${libdir}/debug</code>, and have the
- same names and versioning information as the non-debug
- libraries. This option is off by default.
+ By default, the debug libraries are compiled with
+ <code class="code"> CXXFLAGS='-g3 -O0 -fno-inline'</code>
+ , are installed in <code class="code">${libdir}/debug</code>, and have the
+ same names and versioning information as the non-debug
+ libraries. This option is off by default.
</p><p>Note this make command, executed in
- the build directory, will do much the same thing, without the
- configuration difference and without building everything twice:
- <code class="code">make CXXFLAGS='-g3 -O0 -fno-inline' all</code>
+ the build directory, will do much the same thing, without the
+ configuration difference and without building everything twice:
+ <code class="code">make CXXFLAGS='-g3 -O0 -fno-inline' all</code>
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-debug-flags=FLAGS</code></span></dt><dd><p>This option is only valid when <code class="code"> --enable-debug </code>
- is also specified, and applies to the debug builds only. With
- this option, you can pass a specific string of flags to the
- compiler to use when building the debug versions of libstdc++.
- FLAGS is a quoted string of options, like
+ is also specified, and applies to the debug builds only. With
+ this option, you can pass a specific string of flags to the
+ compiler to use when building the debug versions of libstdc++.
+ FLAGS is a quoted string of options, like
</p><pre class="programlisting">
--enable-libstdcxx-debug-flags='-g3 -O1 -fno-inline'</pre></dd><dt><span class="term"><code class="code">--enable-cxx-flags=FLAGS</code></span></dt><dd><p>With this option, you can pass a string of -f (functionality)
- flags to the compiler to use when building libstdc++. This
- option can change the library ABI. FLAGS is a quoted string of
- options, like
+ flags to the compiler to use when building libstdc++. This
+ option can change the library ABI. FLAGS is a quoted string of
+ options, like
</p><pre class="programlisting">
--enable-cxx-flags='-fvtable-gc -fomit-frame-pointer -ansi'</pre><p>
- Note that the flags don't necessarily have to all be -f flags,
- as shown, but usually those are the ones that will make sense
- for experimentation and configure-time overriding.
+ Note that the flags don't necessarily have to all be -f flags,
+ as shown, but usually those are the ones that will make sense
+ for experimentation and configure-time overriding.
</p><p>The advantage of --enable-cxx-flags over setting CXXFLAGS in
- the 'make' environment is that, if files are automatically
- rebuilt, the same flags will be used when compiling those files
- as well, so that everything matches.
+ the 'make' environment is that, if files are automatically
+ rebuilt, the same flags will be used when compiling those files
+ as well, so that everything matches.
</p><p>Fun flags to try might include combinations of
</p><pre class="programlisting">
-fstrict-aliasing
-fno-exceptions
-ffunction-sections
-fvtable-gc</pre><p>and opposite forms (-fno-) of the same. Tell us (the libstdc++
- mailing list) if you discover more!
+ mailing list) if you discover more!
</p></dd><dt><span class="term"><code class="code">--enable-c99</code></span></dt><dd><p>The "long long" type was introduced in C99, along
- with many other functions for wide characters, and math
- classification macros, etc. If enabled, all C99 functions not
- specified by the C++ standard will be put into <code class="code">namespace
- __gnu_cxx</code>, and then all these names will
- be injected into namespace std, so that C99 functions can be
- used "as if" they were in the C++ standard (as they
- will eventually be in some future revision of the standard,
- without a doubt). By default, C99 support is on, assuming the
- configure probes find all the necessary functions and bits
- necessary. This option can change the library ABI.
+ with many other functions for wide characters, and math
+ classification macros, etc. If enabled, all C99 functions not
+ specified by the C++ standard will be put into <code class="code">namespace
+ __gnu_cxx</code>, and then all these names will
+ be injected into namespace std, so that C99 functions can be
+ used "as if" they were in the C++ standard (as they
+ will eventually be in some future revision of the standard,
+ without a doubt). By default, C99 support is on, assuming the
+ configure probes find all the necessary functions and bits
+ necessary. This option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-wchar_t</code>[default]</span></dt><dd><p>Template specializations for the "wchar_t" type are
- required for wide character conversion support. Disabling
- wide character specializations may be expedient for initial
- porting efforts, but builds only a subset of what is required by
- ISO, and is not recommended. By default, this option is on.
- This option can change the library ABI.
+ required for wide character conversion support. Disabling
+ wide character specializations may be expedient for initial
+ porting efforts, but builds only a subset of what is required by
+ ISO, and is not recommended. By default, this option is on.
+ This option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-long-long </code></span></dt><dd><p>The "long long" type was introduced in C99. It is
- provided as a GNU extension to C++98 in g++. This flag builds
- support for "long long" into the library (specialized
- templates and the like for iostreams). This option is on by default:
- if enabled, users will have to either use the new-style "C"
- headers by default (i.e., &lt;cmath&gt; not &lt;math.h&gt;)
- or add appropriate compile-time flags to all compile lines to
- allow "C" visibility of this feature (on GNU/Linux,
- the flag is -D_ISOC99_SOURCE, which is added automatically via
- CPLUSPLUS_CPP_SPEC's addition of _GNU_SOURCE).
- This option can change the library ABI.
+ provided as a GNU extension to C++98 in g++. This flag builds
+ support for "long long" into the library (specialized
+ templates and the like for iostreams). This option is on by default:
+ if enabled, users will have to either use the new-style "C"
+ headers by default (i.e., &lt;cmath&gt; not &lt;math.h&gt;)
+ or add appropriate compile-time flags to all compile lines to
+ allow "C" visibility of this feature (on GNU/Linux,
+ the flag is -D_ISOC99_SOURCE, which is added automatically via
+ CPLUSPLUS_CPP_SPEC's addition of _GNU_SOURCE).
+ This option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-fully-dynamic-string</code></span></dt><dd><p>This option enables a special version of basic_string avoiding
- the optimization that allocates empty objects in static memory.
+ the optimization that allocates empty objects in static memory.
Mostly useful together with shared memory allocators, see PR
libstdc++/16612 for details.
</p></dd><dt><span class="term"><code class="code">--enable-concept-checks</code></span></dt><dd><p>This turns on additional compile-time checks for instantiated
- library templates, in the form of specialized templates,
- <a class="link" href="bk01pt03ch08.html" title="Chapter 8. Concept Checking">described here</a>. They
- can help users discover when they break the rules of the STL, before
- their programs run.
+ library templates, in the form of specialized templates,
+ <a class="link" href="bk01pt02ch05s02.html" title="Concept Checking">described here</a>. They
+ can help users discover when they break the rules of the STL, before
+ their programs run.
</p></dd><dt><span class="term"><code class="code">--enable-symvers[=style]</code></span></dt><dd><p>In 3.1 and later, tries to turn on symbol versioning in the
- shared library (if a shared library has been
- requested). Values for 'style' that are currently supported
- are 'gnu', 'gnu-versioned-namespace', 'darwin', and
- 'darwin-export'. Both gnu- options require that a recent
- version of the GNU linker be in use. Both darwin options are
- equivalent. With no style given, the configure script will try
- to guess correct defaults for the host system, probe to see if
- additional requirements are necessary and present for
- activation, and if so, will turn symbol versioning on. This
- option can change the library ABI.
+ shared library (if a shared library has been
+ requested). Values for 'style' that are currently supported
+ are 'gnu', 'gnu-versioned-namespace', 'darwin',
+ 'darwin-export', and 'sun'. Both gnu- options require that a recent
+ version of the GNU linker be in use. Both darwin options are
+ equivalent. With no style given, the configure script will try
+ to guess correct defaults for the host system, probe to see if
+ additional requirements are necessary and present for
+ activation, and if so, will turn symbol versioning on. This
+ option can change the library ABI.
</p></dd><dt><span class="term"><code class="code">--enable-visibility</code></span></dt><dd><p> In 4.2 and later, enables or disables visibility attributes.
- If enabled (as by default), and the compiler seems capable of
- passing the simple sanity checks thrown at it, adjusts items
- in namespace std, namespace std::tr1, and namespace __gnu_cxx
- so that -fvisibility options work.
+ If enabled (as by default), and the compiler seems capable of
+ passing the simple sanity checks thrown at it, adjusts items
+ in namespace std, namespace std::tr1, and namespace __gnu_cxx
+ so that -fvisibility options work.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-pch</code></span></dt><dd><p>In 3.4 and later, tries to turn on the generation of
- stdc++.h.gch, a pre-compiled file including all the standard
- C++ includes. If enabled (as by default), and the compiler
- seems capable of passing the simple sanity checks thrown at
- it, try to build stdc++.h.gch as part of the make process.
- In addition, this generated file is used later on (by appending <code class="code">
- --include bits/stdc++.h </code> to CXXFLAGS) when running the
- testsuite.
+ stdc++.h.gch, a pre-compiled file including all the standard
+ C++ includes. If enabled (as by default), and the compiler
+ seems capable of passing the simple sanity checks thrown at
+ it, try to build stdc++.h.gch as part of the make process.
+ In addition, this generated file is used later on (by appending <code class="code">
+ --include bits/stdc++.h </code> to CXXFLAGS) when running the
+ testsuite.
</p></dd><dt><span class="term"><code class="code">--disable-hosted-libstdcxx</code></span></dt><dd><p>
By default, a complete <span class="emphasis"><em>hosted</em></span> C++ library is
built. The C++ Standard also describes a
@@ -188,17 +187,17 @@
minimal set of headers are provided. This option builds such an
environment.
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-time</code></span></dt><dd><p>This is an abbreviated form of
- <code class="code">'--enable-libstdcxx-time=yes'</code>(described next).
+ <code class="code">'--enable-libstdcxx-time=yes'</code>(described next).
</p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-time=OPTION</code></span></dt><dd><p>Enables link-type checks for the availability of the
- clock_gettime clocks, used in the implementation of [time.clock],
- and of the nanosleep and sched_yield functions, used in the
- implementation of [thread.thread.this] of the current C++0x draft.
- The choice OPTION=yes checks for the availability of the facilities
- in libc and libposix4. In case of need the latter is also linked
- to libstdc++ as part of the build process. OPTION=rt also searches
- (and, in case, links) librt. Note that the latter is not always
- desirable because, in glibc, for example, in turn it triggers the
- linking of libpthread too, which activates locking, a large overhead
- for single-thread programs. OPTION=no skips the tests completely.
- The default is OPTION=no.
+ clock_gettime clocks, used in the implementation of [time.clock],
+ and of the nanosleep and sched_yield functions, used in the
+ implementation of [thread.thread.this] of the current C++0x draft.
+ The choice OPTION=yes checks for the availability of the facilities
+ in libc and libposix4. In case of need the latter is also linked
+ to libstdc++ as part of the build process. OPTION=rt also searches
+ (and, in case, links) librt. Note that the latter is not always
+ desirable because, in glibc, for example, in turn it triggers the
+ linking of libpthread too, which activates locking, a large overhead
+ for single-thread programs. OPTION=no skips the tests completely.
+ The default is OPTION=no.
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/containers.html b/libstdc++-v3/doc/html/manual/containers.html
index ff94f4751e5..bdf518c024f 100644
--- a/libstdc++-v3/doc/html/manual/containers.html
+++ b/libstdc++-v3/doc/html/manual/containers.html
@@ -1,9 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part VII.  Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="messages.html" title="messages" /><link rel="next" href="sequences.html" title="Chapter 16. Sequences" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part VII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
Containers
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="messages.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="sequences.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part VII.  Containers"><div class="titlepage"><div><div><h1 class="title"><a id="manual.containers"></a>Part VII. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9.  Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
Containers
- <a id="id611655" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="sequences.html">16. Sequences</a></span></dt><dd><dl><dt><span class="sect1"><a href="sequences.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="sect2"><a href="sequences.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="sect1"><a href="vector.html">vector</a></span></dt><dd><dl><dt><span class="sect2"><a href="vector.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="associative.html">17. Associative</a></span></dt><dd><dl><dt><span class="sect1"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect1"><a href="bitset.html">bitset</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitset.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="sect2"><a href="bitset.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers_and_c.html">18. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="messages.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sequences.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">messages </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Sequences</td></tr></table></div></body></html>
+ <a id="id479957" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="sect1" title="Sequences"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="sect2" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="sect3" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
+ Yes it is, and that's okay. This is a decision that we preserved
+ when we imported SGI's STL implementation. The following is
+ quoted from <a class="ulink" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ The size() member function, for list and slist, takes time
+ proportional to the number of elements in the list. This was a
+ deliberate tradeoff. The only way to get a constant-time
+ size() for linked lists would be to maintain an extra member
+ variable containing the list's size. This would require taking
+ extra time to update that variable (it would make splice() a
+ linear time operation, for example), and it would also make the
+ list larger. Many list algorithms don't require that extra
+ word (algorithms that do require it might do better with
+ vectors than with lists), and, when it is necessary to maintain
+ an explicit size count, it's something that users can do
+ themselves.
+ </p><p>
+ This choice is permitted by the C++ standard. The standard says
+ that size() <span class="quote">“<span class="quote">should</span>â€</span> be constant time, and
+ <span class="quote">“<span class="quote">should</span>â€</span> does not mean the same thing as
+ <span class="quote">“<span class="quote">shall</span>â€</span>. This is the officially recommended ISO
+ wording for saying that an implementation is supposed to do
+ something unless there is a good reason not to.
+ </p><p>
+ One implication of linear time size(): you should never write
+ </p><pre class="programlisting">
+ if (L.size() == 0)
+ ...
+ </pre><p>
+ Instead, you should write
+ </p><pre class="programlisting">
+ if (L.empty())
+ ...
+ </pre></blockquote></div></div></div><div class="sect2" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
+ </p><div class="sect3" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
+ In <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
+ message to the list</a>, Daniel Kostecky announced work on an
+ alternate form of <code class="code">std::vector</code> that would support
+ hints on the number of elements to be over-allocated. The design
+ was also described, along with possible implementation choices.
+ </p><p>
+ The first two alpha releases were announced <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
+ and <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
+ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/containers_and_c.html b/libstdc++-v3/doc/html/manual/containers_and_c.html
index 3f658590f44..4967255c4ce 100644
--- a/libstdc++-v3/doc/html/manual/containers_and_c.html
+++ b/libstdc++-v3/doc/html/manual/containers_and_c.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Part VII.  Containers" /><link rel="prev" href="bitset.html" title="bitset" /><link rel="next" href="iterators.html" title="Part VIII.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><th width="60%" align="center">Part VII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
Containers
-</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="manual.containers.c"></a>Chapter 18. Interacting with C</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></div><div class="sect1" title="Containers vs. Arrays"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
You're writing some code and can't decide whether to use builtin
arrays or some kind of container. There are compelling reasons
to use one of the container classes, but you're afraid that
@@ -18,7 +18,7 @@
container classes, these are iterators (usually
<code class="code">begin()</code> and <code class="code">end()</code>, but not always).
For builtin arrays, these are the address of the first element
- and the <a class="link" href="bk01pt08ch19s02.html" title="One Past the End">past-the-end</a> element.
+ and the <a class="link" href="iterators.html#iterators.predefined.end" title="One Past the End">past-the-end</a> element.
</p><p>
Some very simple wrapper functions can hide all of that from the
rest of the code. For example, a pair of functions called
@@ -48,27 +48,27 @@ template&lt;typename T&gt;
{ return v.begin(); }
template&lt;typename T, unsigned int sz&gt;
- inline T*
+ inline T*
beginof(T (&amp;array)[sz]) { return array; }
// endof
template&lt;typename T&gt;
- inline typename vector&lt;T&gt;::iterator
+ inline typename vector&lt;T&gt;::iterator
endof(vector&lt;T&gt; &amp;v)
{ return v.end(); }
template&lt;typename T, unsigned int sz&gt;
- inline T*
+ inline T*
endof(T (&amp;array)[sz]) { return array + sz; }
// lengthof
template&lt;typename T&gt;
- inline typename vector&lt;T&gt;::size_type
+ inline typename vector&lt;T&gt;::size_type
lengthof(vector&lt;T&gt; &amp;v)
{ return v.size(); }
template&lt;typename T, unsigned int sz&gt;
- inline unsigned int
+ inline unsigned int
lengthof(T (&amp;)[sz]) { return sz; }
</pre><p>
Astute readers will notice two things at once: first, that the
@@ -81,10 +81,10 @@ template&lt;typename T, unsigned int sz&gt;
</p><p>
Second, the line
</p><pre class="programlisting">
- inline unsigned int lengthof (T (&amp;)[sz]) { return sz; }
+ inline unsigned int lengthof (T (&amp;)[sz]) { return sz; }
</pre><p>
looks just weird! Hint: unused parameters can be left nameless.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitset </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part VIII. 
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Associative </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. 
Iterators
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html
index e05fb66b802..9a16afd14d2 100644
--- a/libstdc++-v3/doc/html/manual/debug.html
+++ b/libstdc++-v3/doc/html/manual/debug.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="support.html" title="Part II.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="bk01pt02.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Debugging Support"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
There are numerous things that can be done to improve the ease with
which C++ binaries are debugged when using the GNU tool chain. Here
are some of them.
-</p><div class="sect2" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
+</p><div class="sect2" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
Compiler flags determine how debug information is transmitted
between compilation and debug or analysis tools.
</p><p>
@@ -46,13 +46,13 @@
separate directory tree, in <code class="code">(prefix)/lib/debug</code>. For
more information, look at the <a class="link" href="configure.html" title="Configure">configuration</a> section.
</p><p>
- A second approach is to use the configuration flags
+ A second approach is to use the configuration flags
</p><pre class="programlisting">
make CXXFLAGS='-g3 -fno-inline -O0' all
</pre><p>
This quick and dirty approach is often sufficient for quick
debugging tasks, when you cannot or don't want to recompile your
- application to use the <a class="link" href="debug_mode.html" title="Chapter 30. Debug Mode">debug mode</a>.</p></div><div class="sect2" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
+ application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="sect2" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
There are various third party memory tracing and debug utilities
that can be used to provide detailed memory allocation information
about C++ code. An exhaustive list of tools is not going to be
@@ -111,17 +111,17 @@
int main()
{
extern void* __dso_handle __attribute__ ((__weak__));
- __cxa_atexit((void (*) (void *)) __libc_freeres, NULL,
- &amp;__dso_handle ? __dso_handle : NULL);
+ __cxa_atexit((void (*) (void *)) __libc_freeres, NULL,
+ &amp;__dso_handle ? __dso_handle : NULL);
do_test();
return 0;
}
</pre><p>
Suggested valgrind flags, given the suggestions above about setting
up the runtime environment, library, and test file, might be:
-</p><pre class="programlisting">
+</p><pre class="programlisting">
valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
-</pre></div><div class="sect2" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
+</pre></div><div class="sect2" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
</p><p>
Many options are available for gdb itself: please see <a class="ulink" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC125" target="_top">
"GDB features for C++" </a> in the gdb documentation. Also
@@ -145,7 +145,7 @@
To enable these printers, check-out the latest printers to a local
directory:
</p><pre class="programlisting">
- svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
+ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
</pre><p>
Next, add the following section to your ~/.gdbinit The path must
match the location where the Python module above was checked-out.
@@ -175,18 +175,17 @@
<a class="ulink" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project
Debugger" </a>.
</p></div><div class="sect2" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
- The <a class="link" href="verbose_termination.html" title="Verbose Terminate Handler">verbose
+ The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
termination handler</a> gives information about uncaught
exceptions which are killing the program. It is described in the
linked-to page.
-</p></div><div class="sect2" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 30. Debug Mode">Debug Mode</a>
+</p></div><div class="sect2" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
has compile and run-time checks for many containers.
- </p></div><div class="sect2" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks">Compile-Time
+ </p></div><div class="sect2" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
Checks</a> Extension has compile-time checks for many algorithms.
- </p></div><div class="sect2" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 32. Profile Mode">Profile-based
- Performance Analysis</a> Extension has performance checks for many
+ </p></div><div class="sect2" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
+ Performance Analysis</a> Extension has performance checks for many
algorithms.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. 
- Support
-
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. 
+ Standard Contents
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/debug_mode.html b/libstdc++-v3/doc/html/manual/debug_mode.html
index 9231ca944b7..fcaeb9c5209 100644
--- a/libstdc++-v3/doc/html/manual/debug_mode.html
+++ b/libstdc++-v3/doc/html/manual/debug_mode.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Debug Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks" /><link rel="next" href="bk01pt12ch30s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="bk01pt03ch17s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch30s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 30. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 30. Debug Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch30s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Debug Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
By default, libstdc++ is built with efficiency in mind, and
therefore performs little or no error checking that is not
required by the C++ standard. This means that programs that
@@ -15,7 +15,7 @@
library facilities, and will report errors in the use of libstdc++
as soon as they can be detected by emitting a description of the
problem to standard error and aborting the program. This debug
- mode is available with GCC 3.4.0 and later versions.
+ mode is available with GCC 3.4.0 and later versions.
</p><p>
The libstdc++ debug mode performs checking for many areas of the
C++ standard, but the focus is on checking interactions among
@@ -34,4 +34,4 @@
the same predicate that was passed
to <code class="code">set_intersection</code>; the libstdc++ debug mode will
detect an error if the sequence is not sorted or was sorted by a
- different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+ different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/diagnostics.html b/libstdc++-v3/doc/html/manual/diagnostics.html
index 746a9f4185a..eac71964898 100644
--- a/libstdc++-v3/doc/html/manual/diagnostics.html
+++ b/libstdc++-v3/doc/html/manual/diagnostics.html
@@ -1,9 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="verbose_termination.html" title="Verbose Terminate Handler" /><link rel="next" href="exceptions.html" title="Chapter 7. Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
Diagnostics
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="verbose_termination.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="exceptions.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part III.  Diagnostics"><div class="titlepage"><div><div><h1 class="title"><a id="manual.diagnostics"></a>Part III. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5.  Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
Diagnostics
- <a id="id622040" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="verbose_termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Verbose Terminate Handler </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Exceptions</td></tr></table></div></body></html>
+ <a id="id392593" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="sect1" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="sect2" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
+ All exception objects are defined in one of the standard header
+ files: <code class="filename">exception</code>,
+ <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
+ <code class="filename">typeinfo</code>.
+ </p><p>
+ The base exception object is <code class="classname">exception</code>,
+ located in <code class="filename">exception</code>. This object has no
+ <code class="classname">string</code> member.
+ </p><p>
+ Derived from this are several classes that may have a
+ <code class="classname">string</code> member: a full hierarchy can be
+ found in the source documentation.
+ </p><p>
+ Full API details.
+ </p></div><div class="sect2" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
+ The standard exception classes carry with them a single string as
+ data (usually describing what went wrong or where the 'throw' took
+ place). It's good to remember that you can add your own data to
+ these exceptions when extending the hierarchy:
+ </p><pre class="programlisting">
+ struct My_Exception : public std::runtime_error
+ {
+ public:
+ My_Exception (const string&amp; whatarg)
+ : std::runtime_error(whatarg), e(errno), id(GetDataBaseID()) { }
+ int errno_at_time_of_throw() const { return e; }
+ DBID id_of_thing_that_threw() const { return id; }
+ protected:
+ int e;
+ DBID id; // some user-defined type
+ };
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/documentation_style.html b/libstdc++-v3/doc/html/manual/documentation_style.html
index 39c0b446a97..cc233580612 100644
--- a/libstdc++-v3/doc/html/manual/documentation_style.html
+++ b/libstdc++-v3/doc/html/manual/documentation_style.html
@@ -4,25 +4,29 @@
Contributing
</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Documentation Style"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.doc_style"></a>Documentation Style</h2></div></div></div><div class="sect2" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.doxygen"></a>Doxygen</h3></div></div></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><p>
- Prerequisite tools are Bash 2.x,
+ Prerequisite tools are Bash 2.0 or later,
<a class="ulink" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
the <a class="ulink" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
coreutils</a>. (GNU versions of find, xargs, and possibly
sed and grep are used, just because the GNU versions make
- things very easy.)
+ things very easy.)
</p><p>
To generate the pretty pictures and hierarchy
graphs, the
- <a class="ulink" href="http://www.graphviz.org" target="_top">Graphviz</a>
- package will need to be installed.
+ <a class="ulink" href="http://www.graphviz.org" target="_top">Graphviz</a> package
+ will need to be installed. For PDF
+ output, <a class="ulink" href="http://www.tug.org/applications/pdftex/" target="_top">
+ pdflatex</a> is required.
</p></div><div class="sect3" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
The following Makefile rules run Doxygen to generate HTML
- docs, XML docs, and the man pages.
+ docs, XML docs, PDF docs, and the man pages.
</p><p>
</p><pre class="screen"><strong class="userinput"><code>make doc-html-doxygen</code></strong></pre><p>
</p><p>
</p><pre class="screen"><strong class="userinput"><code>make doc-xml-doxygen</code></strong></pre><p>
</p><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-pdf-doxygen</code></strong></pre><p>
+ </p><p>
</p><pre class="screen"><strong class="userinput"><code>make doc-man-doxygen</code></strong></pre><p>
</p><p>
Careful observers will see that the Makefile rules simply call
@@ -64,7 +68,7 @@
...not the Qt style. The intermediate *'s are preferred.
</p></li><li class="listitem"><p>
Use the triple-slash style only for one-line comments (the
- <span class="quote">“<span class="quote">brief</span>â€</span> mode).
+ <span class="quote">“<span class="quote">brief</span>â€</span> mode).
</p></li><li class="listitem"><p>
This is disgusting. Don't do this.
</p></li></ol></div><p>
@@ -95,7 +99,7 @@
   * @brief A model of a linear congruential random number generator.<br />
   *<br />
   * @f[<br />
-   *     x_{i+1}\leftarrow(ax_{i} + c) \bmod m <br />
+   *     x_{i+1}\leftarrow(ax_{i} + c) \bmod m<br />
   * @f]<br />
   */<br />
</p></div><p>
@@ -104,7 +108,7 @@
writing Doxygen comments. Single and double quotes, and
separators in filenames are two common trouble spots. When in
doubt, consult the following table.
- </p><div class="table"><a id="id645775"></a><p class="title"><b>Table A.1. HTML to Doxygen markup comparison</b></p><div class="table-contents"><table summary="HTML to Doxygen markup comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="sect2" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.docbook"></a>Docbook</h3></div></div></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><p>
+ </p><div class="table"><a id="id419590"></a><p class="title"><b>Table A.1. HTML to Doxygen Markup Comparison</b></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="sect2" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.docbook"></a>Docbook</h3></div></div></div><div class="sect3" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><p>
Editing the DocBook sources requires an XML editor. Many
exist: some notable options
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
@@ -139,33 +143,35 @@
by a vendor package like <code class="filename">libxml2</code>.
</p><p>
For PDF output, something that transforms valid XML to PDF is
- required. Possible solutions include <span class="command"><strong>xmlto</strong></span>,
- <a class="ulink" href="http://xmlgraphics.apache.org/fop/" target="_top">Apache
- FOP</a>, or <span class="command"><strong>prince</strong></span>. Other options are
- listed on the DocBook web <a class="ulink" href="http://wiki.docbook.org/topic/DocBookPublishingTools" target="_top">pages</a>. Please
+ required. Possible solutions include
+ <a class="ulink" href="http://dblatex.sourceforge.net" target="_top">dblatex</a>,
+ <span class="command"><strong>xmlto</strong></span>, or <span class="command"><strong>prince</strong></span>. Other
+ options are listed on the DocBook
+ web <a class="ulink" href="http://wiki.docbook.org/topic/DocBookPublishingTools" target="_top">pages</a>. Please
consult the <code class="email">&lt;<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>&gt;</code> list when
- preparing printed manuals for current best practice and suggestions.
+ preparing printed manuals for current best practice and
+ suggestions.
</p><p>
Make sure that the XML documentation and markup is valid for
any change. This can be done easily, with the validation rules
- in the <code class="filename">Makefile</code>, which is equivalent to doing:
+ in the <code class="filename">Makefile</code>, which is equivalent to doing:
</p><pre class="screen">
<strong class="userinput"><code>
xmllint --noout --valid <code class="filename">xml/index.xml</code>
</code></strong>
</pre></div><div class="sect3" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
The following Makefile rules generate (in order): an HTML
- version of all the documentation, a PDF version of the same, a
+ version of all the DocBook documentation, a PDF version of the same, a
single XML document, and the result of validating the entire XML
document.
</p><p>
- </p><pre class="screen"><strong class="userinput"><code>make doc-html</code></strong></pre><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-html-docbook</code></strong></pre><p>
</p><p>
- </p><pre class="screen"><strong class="userinput"><code>make doc-pdf</code></strong></pre><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-pdf-docbook</code></strong></pre><p>
</p><p>
- </p><pre class="screen"><strong class="userinput"><code>make doc-xml-single</code></strong></pre><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-xml-single-docbook</code></strong></pre><p>
</p><p>
- </p><pre class="screen"><strong class="userinput"><code>make doc-xml-validate</code></strong></pre><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-xml-validate-docbook</code></strong></pre><p>
</p></div><div class="sect3" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
      <span class="emphasis"><em>Which files are important</em></span><br />
<br />
@@ -173,11 +179,11 @@ xmllint --noout --valid <code class="filename">xml/index.xml</code>
      libstdc++-v3/doc/xml<br />
<br />
      Inside this directory, the files of importance:<br />
-      spine.xml   - index to documentation set<br />
+      spine.xml   - index to documentation set<br />
      manual/spine.xml  - index to manual<br />
      manual/*.xml   - individual chapters and sections of the manual<br />
      faq.xml   - index to FAQ<br />
-      api.xml   - index to source level / API <br />
+      api.xml   - index to source level / API<br />
<br />
      All *.txml files are template xml files, i.e., otherwise empty files with<br />
      the correct structure, suitable for filling in with new information.<br />
@@ -205,7 +211,7 @@ xmllint --noout --valid <code class="filename">xml/index.xml</code>
      &lt;/chapter&gt;<br />
      &lt;/book&gt;<br />
<br />
-      &lt;book&gt; <br />
+      &lt;book&gt;<br />
      &lt;part&gt;<br />
      &lt;chapter&gt;<br />
      &lt;section&gt;<br />
@@ -222,20 +228,21 @@ xmllint --noout --valid <code class="filename">xml/index.xml</code>
<br />
      &lt;chapter&gt;<br />
      &lt;/chapter&gt;<br />
-      &lt;/part&gt;  <br />
+      &lt;/part&gt;<br />
      &lt;/book&gt;<br />
<br />
      &lt;/set&gt;<br />
    </p></div></div><div class="sect3" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
-Complete details on Docbook markup can be found in the DocBook Element
-Reference, <a class="ulink" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>. An
-incomplete reference for HTML to Docbook conversion is detailed in the
-table below.
-</p><div class="table"><a id="id724766"></a><p class="title"><b>Table A.2. HTML to Docbook XML markup comparison</b></p><div class="table-contents"><table summary="HTML to Docbook XML markup comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ Complete details on Docbook markup can be found in the DocBook
+ Element Reference,
+ <a class="ulink" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
+ An incomplete reference for HTML to Docbook conversion is
+ detailed in the table below.
+ </p><div class="table"><a id="id502132"></a><p class="title"><b>Table A.2. HTML to Docbook XML Markup Comparison</b></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
&lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
And examples of detailed markup for which there are no real HTML
equivalents are listed in the table below.
-</p><div class="table"><a id="id631420"></a><p class="title"><b>Table A.3. Docbook XML Element Use</b></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+</p><div class="table"><a id="id502333"></a><p class="title"><b>Table A.3. Docbook XML Element Use</b></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
<p>&lt;function&gt;clear()&lt;/function&gt;</p>
<p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
</td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
@@ -248,4 +255,13 @@ table below.
<p>&lt;filename class="headerfile"&gt;ctype.h&lt;/filename&gt;</p>
<p>&lt;filename class="directory"&gt;/home/gcc/build&lt;/filename&gt;</p>
<p>&lt;filename class="libraryfile"&gt;libstdc++.so&lt;/filename&gt;</p>
- </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="sect2" title="Combines"><div class="titlepage"><div><div><h3 class="title"><a id="doc_style.combines"></a>Combines</h3></div></div></div><div class="sect3" title="Generating Combines and Assemblages"><div class="titlepage"><div><div><h4 class="title"><a id="combines.rules"></a>Generating Combines and Assemblages</h4></div></div></div><p>
+ The following Makefile rules are defaults, and are usually
+ aliased to variable rules.
+ </p><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-html</code></strong></pre><p>
+ </p><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-man</code></strong></pre><p>
+ </p><p>
+ </p><pre class="screen"><strong class="userinput"><code>make doc-pdf</code></strong></pre><p>
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/dynamic_memory.html b/libstdc++-v3/doc/html/manual/dynamic_memory.html
index e23fdf5c272..4403ae80a5a 100644
--- a/libstdc++-v3/doc/html/manual/dynamic_memory.html
+++ b/libstdc++-v3/doc/html/manual/dynamic_memory.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Dynamic Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II.  Support" /><link rel="prev" href="bk01pt02ch04s03.html" title="NULL" /><link rel="next" href="termination.html" title="Chapter 6. Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch04s03.html">Prev</a> </td><th width="60%" align="center">Part II. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
-</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5. Dynamic Memory"><div class="titlepage"><div><div><h2 class="title"><a id="manual.support.memory"></a>Chapter 5. Dynamic Memory</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
There are six flavors each of <code class="function">new</code> and
<code class="function">delete</code>, so make certain that you're using the right
ones. Here are quickie descriptions of <code class="function">new</code>:
@@ -51,8 +51,8 @@
{
delete[] safety;
popup_window ("Dude, you are running low on heap memory. You
- should, like, close some windows, or something.
- The next time you run out, we're gonna burn!");
+ should, like, close some windows, or something.
+ The next time you run out, we're gonna burn!");
set_new_handler (old_handler);
return;
}
@@ -65,5 +65,8 @@
}
</pre><p>
<code class="classname">bad_alloc</code> is derived from the base <code class="classname">exception</code>
- class defined in Chapter 19.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch04s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">NULL </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. Termination</td></tr></table></div></body></html>
+ class defined in Sect1 19.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. 
+ Support
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/exceptions.html b/libstdc++-v3/doc/html/manual/exceptions.html
deleted file mode 100644
index 3e6b12b93e4..00000000000
--- a/libstdc++-v3/doc/html/manual/exceptions.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Part III.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Part III.  Diagnostics" /><link rel="next" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. 
- Diagnostics
-
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch07s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7. Exceptions"><div class="titlepage"><div><div><h2 class="title"><a id="manual.diagnostics.exceptions"></a>Chapter 7. Exceptions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></div><div class="sect1" title="Exception Classes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.hierarchy"></a>Exception Classes</h2></div></div></div><p>
- All exception objects are defined in one of the standard header
- files: <code class="filename">exception</code>,
- <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
- <code class="filename">typeinfo</code>.
- </p><p>
- The base exception object is <code class="classname">exception</code>,
- located in <code class="filename">exception</code>. This object has no
- <code class="classname">string</code> member.
- </p><p>
- Derived from this are several classes that may have a
- <code class="classname">string</code> member: a full hierarchy can be
- found in the <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00460.html" target="_top">source documentation</a>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch07s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. 
- Diagnostics
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Adding Data to Exceptions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_algorithms.html b/libstdc++-v3/doc/html/manual/ext_algorithms.html
index 02231d43e4d..1b42f7da28e 100644
--- a/libstdc++-v3/doc/html/manual/ext_algorithms.html
+++ b/libstdc++-v3/doc/html/manual/ext_algorithms.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 36. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 35. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 37. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 36. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. Algorithms</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 22. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 24. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 36. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 36. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 23. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
and count_if. The standard versions return their results. The
additional signatures return void, but take a final parameter by
reference to which they assign their results, e.g.,
@@ -16,8 +16,8 @@
</p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
predicates. Look in the doxygen-generated pages for notes on these.
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
- nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
+ nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
</p><pre class="programlisting">
lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
- _InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 35. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 37. Numerics</td></tr></table></div></body></html>
+ _InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Numerics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_allocators.html b/libstdc++-v3/doc/html/manual/ext_allocators.html
index bbb5300fb2b..37bed0b14f7 100644
--- a/libstdc++-v3/doc/html/manual/ext_allocators.html
+++ b/libstdc++-v3/doc/html/manual/ext_allocators.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 33. Allocators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bk01pt12ch32s07.html" title="Diagnostics" /><link rel="next" href="bitmap_allocator.html" title="bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 33. Allocators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch32s07.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. Allocators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bitmap_allocator.html" title="bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Allocators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 33. Allocators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator"></a>Chapter 33. Allocators</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></div><div class="sect1" title="mt_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.mt"></a>mt_allocator</h2></div></div></div><p>
-</p><div class="sect2" title="Intro"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.intro"></a>Intro</h3></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. Allocators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator"></a>Chapter 20. Allocators</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></div><div class="sect1" title="mt_allocator"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.allocator.mt"></a>mt_allocator</h2></div></div></div><p>
+</p><div class="sect2" title="Intro"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.intro"></a>Intro</h3></div></div></div><p>
The mt allocator [hereinafter referred to simply as "the allocator"]
is a fixed size (power of two) allocator that was initially
developed specifically to suit the needs of multi threaded
@@ -25,7 +25,7 @@ describing the characteristics of the memory pool, a policy class
containing this pool that links instantiation types to common or
individual pools, and a class inheriting from the policy class that is
the actual allocator.
-</p><p>The datum describing pools characteristics is
+</p><p>The datum describing pools characteristics is
</p><pre class="programlisting">
template&lt;bool _Thread&gt;
class __pool
@@ -82,9 +82,9 @@ int main()
tune_type t_single(16, 5120, 32, 5120, 1, 10, false);
tune_type t;
- t = allocator_type::_M_get_options();
+ t = allocator_type::_M_get_options();
allocator_type::_M_set_options(t_opt);
- t = allocator_type::_M_get_options();
+ t = allocator_type::_M_get_options();
allocator_type a;
allocator_type::pointer p1 = a.allocate(128);
@@ -111,18 +111,18 @@ The _S_initialize() function:
allocate() to return memory directly from a new() call, and deallocate will
only do a delete() call.
</p><p>
-- If the GLIBCXX_FORCE_NEW environment variable is not set, both ST and MT
+- If the GLIBCXX_FORCE_NEW environment variable is not set, both ST and MT
applications will:
- Calculate the number of bins needed. A bin is a specific power of two size
- of bytes. I.e., by default the allocator will deal with requests of up to
- 128 bytes (or whatever the value of _S_max_bytes is when _S_init() is
- called). This means that there will be bins of the following sizes
- (in bytes): 1, 2, 4, 8, 16, 32, 64, 128.
+ of bytes. I.e., by default the allocator will deal with requests of up to
+ 128 bytes (or whatever the value of _S_max_bytes is when _S_init() is
+ called). This means that there will be bins of the following sizes
+ (in bytes): 1, 2, 4, 8, 16, 32, 64, 128.
- - Create the _S_binmap array. All requests are rounded up to the next
- "large enough" bin. I.e., a request for 29 bytes will cause a block from
- the "32 byte bin" to be returned to the application. The purpose of
- _S_binmap is to speed up the process of finding out which bin to use.
+ - Create the _S_binmap array. All requests are rounded up to the next
+ "large enough" bin. I.e., a request for 29 bytes will cause a block from
+ the "32 byte bin" to be returned to the application. The purpose of
+ _S_binmap is to speed up the process of finding out which bin to use.
I.e., the value of _S_binmap[ 29 ] is initialized to 5 (bin 5 = 32 bytes).
</p><p>
- Create the _S_bin array. This array consists of bin_records. There will be
@@ -130,35 +130,35 @@ The _S_initialize() function:
earlier. I.e., if _S_max_bytes = 128 there will be 8 entries.
Each bin_record is then initialized:
- bin_record-&gt;first = An array of pointers to block_records. There will be
- as many block_records pointers as there are maximum number of threads
- (in a ST application there is only 1 thread, in a MT application there
+ as many block_records pointers as there are maximum number of threads
+ (in a ST application there is only 1 thread, in a MT application there
are _S_max_threads).
This holds the pointer to the first free block for each thread in this
bin. I.e., if we would like to know where the first free block of size 32
for thread number 3 is we would look this up by: _S_bin[ 5 ].first[ 3 ]
- The above created block_record pointers members are now initialized to
+ The above created block_record pointers members are now initialized to
their initial values. I.e. _S_bin[ n ].first[ n ] = NULL;
</p><p>
- Additionally a MT application will:
- Create a list of free thread id's. The pointer to the first entry
- is stored in _S_thread_freelist_first. The reason for this approach is
- that the __gthread_self() call will not return a value that corresponds to
+ is stored in _S_thread_freelist_first. The reason for this approach is
+ that the __gthread_self() call will not return a value that corresponds to
the maximum number of threads allowed but rather a process id number or
something else. So what we do is that we create a list of thread_records.
This list is _S_max_threads long and each entry holds a size_t thread_id
which is initialized to 1, 2, 3, 4, 5 and so on up to _S_max_threads.
- Each time a thread calls allocate() or deallocate() we call
+ Each time a thread calls allocate() or deallocate() we call
_S_get_thread_id() which looks at the value of _S_thread_key which is a
thread local storage pointer. If this is NULL we know that this is a newly
created thread and we pop the first entry from this list and saves the
- pointer to this record in the _S_thread_key variable. The next time
- we will get the pointer to the thread_record back and we use the
- thread_record-&gt;thread_id as identification. I.e., the first thread that
+ pointer to this record in the _S_thread_key variable. The next time
+ we will get the pointer to the thread_record back and we use the
+ thread_record-&gt;thread_id as identification. I.e., the first thread that
calls allocate will get the first record in this list and thus be thread
number 1 and will then find the pointer to its first free 32 byte block
in _S_bin[ 5 ].first[ 1 ]
- When we create the _S_thread_key we also define a destructor
+ When we create the _S_thread_key we also define a destructor
(_S_thread_key_destr) which means that when the thread dies, this
thread_record is returned to the front of this list and the thread id
can then be reused if a new thread is created.
@@ -176,7 +176,7 @@ The _S_initialize() function:
has made 678 requests (and no deallocations...) of 32-byte blocks this
counter will read 678.
- The above created arrays are now initialized with their initial values.
+ The above created arrays are now initialized with their initial values.
I.e. _S_bin[ n ].free[ n ] = 0;
</p><p>
- Initialize the mutex of each bin_record: The bin_record-&gt;mutex
@@ -260,39 +260,39 @@ This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
+----------------+
</pre><p>
With this in mind we simplify things a bit for a while and say that there is
-only one thread (a ST application). In this case all operations are made to
+only one thread (a ST application). In this case all operations are made to
what is referred to as the global pool - thread id 0 (No thread may be
assigned this id since they span from 1 to _S_max_threads in a MT application).
</p><p>
When the application requests memory (calling allocate()) we first look at the
requested size and if this is &gt; _S_max_bytes we call new() directly and return.
</p><p>
-If the requested size is within limits we start by finding out from which
+If the requested size is within limits we start by finding out from which
bin we should serve this request by looking in _S_binmap.
</p><p>
A quick look at _S_bin[ bin ].first[ 0 ] tells us if there are any blocks of
this size on the freelist (0). If this is not NULL - fine, just remove the
-block that _S_bin[ bin ].first[ 0 ] points to from the list,
+block that _S_bin[ bin ].first[ 0 ] points to from the list,
update _S_bin[ bin ].first[ 0 ] and return a pointer to that blocks data.
</p><p>
-If the freelist is empty (the pointer is NULL) we must get memory from the
+If the freelist is empty (the pointer is NULL) we must get memory from the
system and build us a freelist within this memory. All requests for new memory
-is made in chunks of _S_chunk_size. Knowing the size of a block_record and
-the bytes that this bin stores we then calculate how many blocks we can create
+is made in chunks of _S_chunk_size. Knowing the size of a block_record and
+the bytes that this bin stores we then calculate how many blocks we can create
within this chunk, build the list, remove the first block, update the pointer
-(_S_bin[ bin ].first[ 0 ]) and return a pointer to that blocks data.
+(_S_bin[ bin ].first[ 0 ]) and return a pointer to that blocks data.
</p><p>
Deallocation is equally simple; the pointer is casted back to a block_record
-pointer, lookup which bin to use based on the size, add the block to the front
-of the global freelist and update the pointer as needed
+pointer, lookup which bin to use based on the size, add the block to the front
+of the global freelist and update the pointer as needed
(_S_bin[ bin ].first[ 0 ]).
</p><p>
The decision to add deallocated blocks to the front of the freelist was made
after a set of performance measurements that showed that this is roughly 10%
faster than maintaining a set of "last pointers" as well.
</p></div><div class="sect2" title="Multiple Thread Example"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h3></div></div></div><p>
-In the ST example we never used the thread_id variable present in each block.
-Let's start by explaining the purpose of this in a MT application.
+In the ST example we never used the thread_id variable present in each block.
+Let's start by explaining the purpose of this in a MT application.
</p><p>
The concept of "ownership" was introduced since many MT applications
allocate and deallocate memory to shared containers from different
@@ -321,10 +321,10 @@ When the application requests memory (calling allocate()) we first
look at the requested size and if this is &gt;_S_max_bytes we call new()
directly and return.
</p><p>
-If the requested size is within limits we start by finding out from which
+If the requested size is within limits we start by finding out from which
bin we should serve this request by looking in _S_binmap.
</p><p>
-A call to _S_get_thread_id() returns the thread id for the calling thread
+A call to _S_get_thread_id() returns the thread id for the calling thread
(and if no value has been set in _S_thread_key, a new id is assigned and
returned).
</p><p>
@@ -394,4 +394,4 @@ mutex to be locked) this operation is also made in chunks of blocks
a threads freelist mentioned above). The "formula" used can probably
be improved to further reduce the risk of blocks being "bounced back
and forth" between freelists.
-</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch32s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> bitmap_allocator</td></tr></table></div></body></html>
+</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> bitmap_allocator</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_compile_checks.html b/libstdc++-v3/doc/html/manual/ext_compile_checks.html
index 104d81a9908..e99452bdb59 100644
--- a/libstdc++-v3/doc/html/manual/ext_compile_checks.html
+++ b/libstdc++-v3/doc/html/manual/ext_compile_checks.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Compile Time Checks</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bk01pt12pr03.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 30. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12pr03.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03pr01.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 29. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 29. Compile Time Checks</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
Also known as concept checking.
</p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
of the STL: code which checked the template parameters of
@@ -37,4 +37,4 @@
support for template parameter constraints based on concepts in the core
language. This will obviate the need for the library-simulated concept
checking described above.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12pr03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Debug Mode</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_concurrency.html b/libstdc++-v3/doc/html/manual/ext_concurrency.html
index 0d660c7402c..c9922a9b6bc 100644
--- a/libstdc++-v3/doc/html/manual/ext_concurrency.html
+++ b/libstdc++-v3/doc/html/manual/ext_concurrency.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 41. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 40. Demangling" /><link rel="next" href="bk01pt12ch41s02.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 41. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Concurrency</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 27. Demangling" /><link rel="next" href="bk01pt03ch28s02.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch41s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 41. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 41. Concurrency</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s03.html">Use</a></span></dt></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="sect2" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file &lt;ext/concurrence.h&gt; contains all the higher-level
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 28. Concurrency</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="sect2" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file &lt;ext/concurrence.h&gt; contains all the higher-level
constructs for playing with threads. In contrast to the atomics layer,
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
</p><p>
@@ -31,7 +31,7 @@ locks it during construction of <code class="code">__scoped_locke</code> and
unlocks it during destruction. This is an efficient way of locking
critical sections, while retaining exception-safety.
</p></div><div class="sect2" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
-Two functions and one type form the base of atomic support.
+Two functions and one type form the base of atomic support.
</p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
supporting atomic operations.
</p><p>
@@ -56,7 +56,7 @@ __atomic_add_dispatch
</p><p>Adds the second argument's value to the first argument. Has no return value.
</p></li></ul></div><p>
These functions forward to one of several specialized helper
-functions, depending on the circumstances. For instance,
+functions, depending on the circumstances. For instance,
</p><p>
<code class="code">
__exchange_and_add_dispatch
@@ -67,7 +67,7 @@ Calls through to either of:
</p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
can be used, otherwise resolved at link time to a non-builtin code
sequence.
-</p></li><li class="listitem"><p><code class="code">__exchange_and_add_single</code>
+</p></li><li class="listitem"><p><code class="code">__exchange_and_add_single</code>
</p><p>Single threaded version. Inlined.</p></li></ul></div><p>However, only <code class="code">__exchange_and_add_dispatch</code>
and <code class="code">__atomic_add_dispatch</code> should be used. These functions
can be used in a portable manner, regardless of the specific
@@ -79,13 +79,13 @@ operations.)
In addition, there are two macros
</p><p>
<code class="code">
-_GLIBCXX_READ_MEM_BARRIER
+_GLIBCXX_READ_MEM_BARRIER
</code>
</p><p>
<code class="code">
-_GLIBCXX_WRITE_MEM_BARRIER
+_GLIBCXX_WRITE_MEM_BARRIER
</code>
</p><p>
Which expand to the appropriate write and read barrier required by the
host hardware and operating system.
-</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch41s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 40. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch28s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_containers.html b/libstdc++-v3/doc/html/manual/ext_containers.html
index 5b767d27922..79fe759fcd9 100644
--- a/libstdc++-v3/doc/html/manual/ext_containers.html
+++ b/libstdc++-v3/doc/html/manual/ext_containers.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 34. Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bitmap_allocator.html" title="bitmap_allocator" /><link rel="next" href="bk01pt12ch34s02.html" title="HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 34. Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. Containers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bitmap_allocator.html" title="bitmap_allocator" /><link rel="next" href="bk01pt03ch21s02.html" title="HP/SGI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch34s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 34. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 34. Containers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s03.html">Deprecated HP/SGI</a></span></dt></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. Containers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 21. Containers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></div><p>
</p><div class="sect1" title="Policy Based Data Structures"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.pbds"></a>Policy Based Data Structures</h2></div></div></div><p>
<a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html" target="_top">More details here</a>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch34s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> HP/SGI</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> HP/SGI</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_demangling.html b/libstdc++-v3/doc/html/manual/ext_demangling.html
index 9214423d3b5..4a991d0313d 100644
--- a/libstdc++-v3/doc/html/manual/ext_demangling.html
+++ b/libstdc++-v3/doc/html/manual/ext_demangling.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 40. Demangling</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 39. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 41. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 40. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Demangling</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 26. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 28. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 40. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 40. Demangling</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 27. Demangling</h2></div></div></div><p>
Transforming C++ ABI identifiers (like RTTI symbols) into the
original C++ source identifiers is called
<span class="quote">“<span class="quote">demangling.</span>â€</span>
@@ -63,7 +63,7 @@ int main()
</p><pre class="screen">
<code class="computeroutput">
St13bad_exception =&gt; std::bad_exception : 0
- 3barI5emptyLi17EE =&gt; bar&lt;empty, 17&gt; : 0
+ 3barI5emptyLi17EE =&gt; bar&lt;empty, 17&gt; : 0
</code>
</pre><p>
The demangler interface is described in the source documentation
@@ -71,4 +71,4 @@ int main()
be writing C++ in order to demangle C++. (That also means we have to
use crummy memory management facilities, so don't forget to free()
the returned char array.)
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 39. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 41. Concurrency</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Concurrency</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_io.html b/libstdc++-v3/doc/html/manual/ext_io.html
index 0afa23ddf96..0c67bf6a2e5 100644
--- a/libstdc++-v3/doc/html/manual/ext_io.html
+++ b/libstdc++-v3/doc/html/manual/ext_io.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 39. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 38. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 40. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 39. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 25. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 27. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 39. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 39. Input and Output</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 26. Input and Output</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
Extensions allowing <code class="code">filebuf</code>s to be constructed from
"C" types like FILE*s and file descriptors.
</p><div class="sect1" title="Derived filebufs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
@@ -13,38 +13,38 @@
IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
but earlier releases provided slightly different mechanisms.
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
- <code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
+ <code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
</code>
- This comes in very handy in a number of places, such as
- attaching Unix sockets, pipes, and anything else which uses file
- descriptors, into the IOStream buffering classes. The three
- arguments are as follows:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
- // the __c_file_type typedef usually boils down to stdio's FILE
- </p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
- // same as all the other uses of openmode
- </p></li><li class="listitem"><p><code class="code">int_type B </code>
- // buffer size, defaults to BUFSIZ if not specified
- </p></li></ul></div><p>
- For those wanting to use file descriptors instead of FILE*'s, I
- invite you to contemplate the mysteries of C's <code class="code">fdopen()</code>.
+ This comes in very handy in a number of places, such as
+ attaching Unix sockets, pipes, and anything else which uses file
+ descriptors, into the IOStream buffering classes. The three
+ arguments are as follows:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
+ // the __c_file_type typedef usually boils down to stdio's FILE
+ </p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
+ // same as all the other uses of openmode
+ </p></li><li class="listitem"><p><code class="code">int_type B </code>
+ // buffer size, defaults to BUFSIZ if not specified
+ </p></li></ul></div><p>
+ For those wanting to use file descriptors instead of FILE*'s, I
+ invite you to contemplate the mysteries of C's <code class="code">fdopen()</code>.
</p></li><li class="listitem"><p>In library snapshot 3.0.95 and later, <code class="code">filebuf</code>s bring
- back an old extension: the <code class="code">fd()</code> member function. The
- integer returned from this function can be used for whatever file
- descriptors can be used for on your platform. Naturally, the
- library cannot track what you do on your own with a file descriptor,
- so if you perform any I/O directly, don't expect the library to be
- aware of it.
+ back an old extension: the <code class="code">fd()</code> member function. The
+ integer returned from this function can be used for whatever file
+ descriptors can be used for on your platform. Naturally, the
+ library cannot track what you do on your own with a file descriptor,
+ so if you perform any I/O directly, don't expect the library to be
+ aware of it.
</p></li><li class="listitem"><p>Beginning with 3.1, the extra <code class="code">filebuf</code> constructor and
- the <code class="code">fd()</code> function were removed from the standard
- filebuf. Instead, <code class="code">&lt;ext/stdio_filebuf.h&gt;</code> contains
- a derived class called
- <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
- This class can be constructed from a C <code class="code">FILE*</code> or a file
- descriptor, and provides the <code class="code">fd()</code> function.
+ the <code class="code">fd()</code> function were removed from the standard
+ filebuf. Instead, <code class="code">&lt;ext/stdio_filebuf.h&gt;</code> contains
+ a derived class called
+ <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
+ This class can be constructed from a C <code class="code">FILE*</code> or a file
+ descriptor, and provides the <code class="code">fd()</code> function.
</p></li></ul></div><p>If you want to access a <code class="code">filebuf</code>'s file descriptor to
implement file locking (e.g. using the <code class="code">fcntl()</code> system
call) then you might be interested in Henry Suter's RWLock class.
</p><p>
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 38. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 40. Demangling</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Demangling</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_iterators.html b/libstdc++-v3/doc/html/manual/ext_iterators.html
index 88259a8ace9..5f5a5348547 100644
--- a/libstdc++-v3/doc/html/manual/ext_iterators.html
+++ b/libstdc++-v3/doc/html/manual/ext_iterators.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 38. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 37. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 39. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 38. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 24. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 26. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 38. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 38. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 25. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
original HP STL implementation (the language wasn't rich enough at the
time). For backwards compatibility, base classes are provided which
declare the same nested typedefs:
@@ -11,4 +11,4 @@
two iterators and returns a result. It is extended by another signature
which takes two iterators and a reference to a result. The result is
modified, and the function returns nothing.
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 37. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 39. Input and Output</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Input and Output</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_numerics.html b/libstdc++-v3/doc/html/manual/ext_numerics.html
index e8f86678a7c..3316ec1d0ea 100644
--- a/libstdc++-v3/doc/html/manual/ext_numerics.html
+++ b/libstdc++-v3/doc/html/manual/ext_numerics.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 37. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 36. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 38. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 37. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 23. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 25. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 37. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 37. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as accumulate, are extended
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 24. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as accumulate, are extended
with the following functions:
</p><pre class="programlisting">
power (x, n);
@@ -17,4 +17,4 @@
That is, it assigns value to *first, value + 1 to *(first + 1) and so
on." Quoted from SGI documentation.
</p><pre class="programlisting">
- void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 36. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 38. Iterators</td></tr></table></div></body></html>
+ void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Iterators</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/ext_utilities.html b/libstdc++-v3/doc/html/manual/ext_utilities.html
index 2685de374b9..3485222aa4b 100644
--- a/libstdc++-v3/doc/html/manual/ext_utilities.html
+++ b/libstdc++-v3/doc/html/manual/ext_utilities.html
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 35. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bk01pt12ch34s03.html" title="Deprecated HP/SGI" /><link rel="next" href="ext_algorithms.html" title="Chapter 36. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 35. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch34s03.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch21s03.html" title="Deprecated HP/SGI" /><link rel="next" href="ext_algorithms.html" title="Chapter 23. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 35. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 35. Utilities</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 22. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 22. Utilities</h2></div></div></div><p>
The &lt;functional&gt; header contains many additional functors
and helper functions, extending section 20.3. They are
implemented in the file stl_function.h:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication. *
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication. *
</p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
- returns the argument unchanged. *
+ returns the argument unchanged. *
</p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
<code class="code">binary_function</code>, and their helpers <code class="code">compose1</code>
- and <code class="code">compose2</code>. *
- </p></li><li class="listitem"><p><code class="code">select1st</code> and <code class="code">select2nd</code>, to strip pairs. *
+ and <code class="code">compose2</code>. *
+ </p></li><li class="listitem"><p><code class="code">select1st</code> and <code class="code">select2nd</code>, to strip pairs. *
</p></li><li class="listitem"><p><code class="code">project1st</code> and <code class="code">project2nd</code>. * </p></li><li class="listitem"><p>A set of functors/functions which always return the same result. They
are <code class="code">constant_void_fun</code>, <code class="code">constant_binary_fun</code>,
<code class="code">constant_unary_fun</code>, <code class="code">constant0</code>,
@@ -38,4 +38,4 @@ get_temporary_buffer(5, (int*)0);
</p><p>
The specialized algorithms of section 20.4.4 are extended with
<code class="code">uninitialized_copy_n</code>. *
-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch34s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 36. Algorithms</td></tr></table></div></body></html>
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated HP/SGI </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Algorithms</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/extensions.html b/libstdc++-v3/doc/html/manual/extensions.html
index f441d4c8ad8..33f854a19f5 100644
--- a/libstdc++-v3/doc/html/manual/extensions.html
+++ b/libstdc++-v3/doc/html/manual/extensions.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part XII.  Extensions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt11ch28s02.html" title="Performance" /><link rel="next" href="bk01pt12pr03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
Extensions
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt11ch28s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12pr03.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part XII.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part XII. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part III.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
Extensions
- <a id="id606344" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt12pr03.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">29. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">30. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch30s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">31. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">32. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">33. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">34. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">35. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">36. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">37. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">38. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">39. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">40. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">41. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s03.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt11ch28s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12pr03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Performance </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+ <a id="id468288" class="indexterm"></a>
+</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/facets.html b/libstdc++-v3/doc/html/manual/facets.html
index ba3728e93d1..ee52b350618 100644
--- a/libstdc++-v3/doc/html/manual/facets.html
+++ b/libstdc++-v3/doc/html/manual/facets.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15. Facets aka Categories</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="localization.html" title="Part VI.  Localization" /><link rel="prev" href="locales.html" title="Chapter 14. Locales" /><link rel="next" href="codecvt.html" title="codecvt" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. Facets aka Categories</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="locales.html">Prev</a> </td><th width="60%" align="center">Part VI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
Localization
-</th><td width="20%" align="right"> <a accesskey="n" href="codecvt.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15. Facets aka Categories"><div class="titlepage"><div><div><h2 class="title"><a id="manual.localization.facet"></a>Chapter 15. Facets aka Categories</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></div><div class="sect1" title="ctype"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.facet.ctype"></a>ctype</h2></div></div></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="id602134"></a>Specializations</h4></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Facets"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="id422690"></a>Specializations</h5></div></div></div><p>
For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
conversions are made between the internal character set (always UCS4
on GNU/Linux) and whatever the currently selected locale for the
@@ -28,50 +28,725 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.
</p><p>
Neither of these two required specializations deals with Unicode
characters.
-</p></div></div><div class="sect2" title="Future"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.future"></a>Future</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- How to deal with the global locale issue?
- </p></li><li class="listitem"><p>
+</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ How to deal with the global locale issue?
+ </p></li><li class="listitem"><p>
How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
- Overlap between codecvt/ctype: narrow/widen
- </p></li><li class="listitem"><p>
+ Overlap between codecvt/ctype: narrow/widen
+ </p></li><li class="listitem"><p>
Mask typedef in codecvt_base, argument types in codecvt. what
- is know about this type?
- </p></li><li class="listitem"><p>
+ is know about this type?
+ </p></li><li class="listitem"><p>
Why mask* argument in codecvt?
</p></li><li class="listitem"><p>
Can this be made (more) generic? is there a simple way to
straighten out the configure-time mess that is a by-product of
- this class?
- </p></li><li class="listitem"><p>
+ this class?
+ </p></li><li class="listitem"><p>
Get the ctype&lt;wchar_t&gt;::mask stuff under control. Need to
make some kind of static table, and not do lookup every time
somebody hits the do_is... functions. Too bad we can't just
- redefine mask for ctype&lt;wchar_t&gt;
- </p></li><li class="listitem"><p>
+ redefine mask for ctype&lt;wchar_t&gt;
+ </p></li><li class="listitem"><p>
Rename abstract base class. See if just smash-overriding is a
better approach. Clarify, add sanity to naming.
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id721212"></a><p><span class="title"><i>
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id442703"></a><p><span class="title"><i>
The GNU C Library
- </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id611041"></a><p><span class="title"><i>
+ </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id426343"></a><p><span class="title"><i>
Correspondence
- </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id612309"></a><p><span class="title"><i>
+ </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id468198"></a><p><span class="title"><i>
ISO/IEC 14882:1998 Programming languages - C++
- </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id612328"></a><p><span class="title"><i>
+ </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id468216"></a><p><span class="title"><i>
ISO/IEC 9899:1999 Programming languages - C
- </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="id626861"></a><p><span class="title"><i>
- The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
- </i>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid">
+ </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id398382"></a><p><span class="biblioid">
<a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top">
+ <em class="citetitle">
+ The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ </em>
+ </a>
+ . </span><span class="copyright">Copyright © 1999
+ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id398412"></a><p><span class="title"><i>
+ The C++ Programming Language, Special Edition
+ </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ Addison Wesley
+ . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id395406"></a><p><span class="title"><i>
+ Standard C++ IOStreams and Locales
+ </i>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
+ Addison Wesley Longman
+ . </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
+The standard class codecvt attempts to address conversions between
+different character encoding schemes. In particular, the standard
+attempts to detail conversions between the implementation-defined wide
+characters (hereafter referred to as wchar_t) and the standard type
+char that is so beloved in classic <span class="quote">“<span class="quote">C</span>â€</span> (which can now be
+referred to as narrow characters.) This document attempts to describe
+how the GNU libstdc++ implementation deals with the conversion between
+wide and narrow characters, and also presents a framework for dealing
+with the huge number of other encodings that iconv can convert,
+including Unicode and UTF8. Design issues and requirements are
+addressed, and examples of correct usage for both the required
+specializations for wide and narrow characters and the
+implementation-provided extended functionality are given.
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
+Around page 425 of the C++ Standard, this charming heading comes into view:
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+22.2.1.5 - Template class codecvt
+</p></blockquote></div><p>
+The text around the codecvt definition gives some clues:
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-1- The class codecvt&lt;internT,externT,stateT&gt; is for use when
+converting from one codeset to another, such as from wide characters
+to multibyte characters, between wide character encodings such as
+Unicode and EUC.
+</em></span>
+</p></blockquote></div><p>
+Hmm. So, in some unspecified way, Unicode encodings and
+translations between other character sets should be handled by this
+class.
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-2- The stateT argument selects the pair of codesets being mapped between.
+</em></span>
+</p></blockquote></div><p>
+Ah ha! Another clue...
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-3- The instantiations required in the Table ??
+(lib.locale.category), namely codecvt&lt;wchar_t,char,mbstate_t&gt; and
+codecvt&lt;char,char,mbstate_t&gt;, convert the implementation-defined
+native character set. codecvt&lt;char,char,mbstate_t&gt; implements a
+degenerate conversion; it does not convert at
+all. codecvt&lt;wchar_t,char,mbstate_t&gt; converts between the native
+character sets for tiny and wide characters. Instantiations on
+mbstate_t perform conversion between encodings known to the library
+implementor. Other encodings can be converted by specializing on a
+user-defined stateT type. The stateT object can contain any state that
+is useful to communicate to or from the specialized do_convert member.
+</em></span>
+</p></blockquote></div><p>
+At this point, a couple points become clear:
+</p><p>
+One: The standard clearly implies that attempts to add non-required
+(yet useful and widely used) conversions need to do so through the
+third template parameter, stateT.</p><p>
+Two: The required conversions, by specifying mbstate_t as the third
+template parameter, imply an implementation strategy that is mostly
+(or wholly) based on the underlying C library, and the functions
+mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
+ The simple implementation detail of wchar_t's size seems to
+ repeatedly confound people. Many systems use a two byte,
+ unsigned integral type to represent wide characters, and use an
+ internal encoding of Unicode or UCS2. (See AIX, Microsoft NT,
+ Java, others.) Other systems, use a four byte, unsigned integral
+ type to represent wide characters, and use an internal encoding
+ of UCS4. (GNU/Linux systems using glibc, in particular.) The C
+ programming language (and thus C++) does not specify a specific
+ size for the type wchar_t.
+ </p><p>
+ Thus, portable C++ code cannot assume a byte size (or endianness) either.
+ </p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
+ Probably the most frequently asked question about code conversion
+ is: "So dudes, what's the deal with Unicode strings?"
+ The dude part is optional, but apparently the usefulness of
+ Unicode strings is pretty widely appreciated. Sadly, this specific
+ encoding (And other useful encodings like UTF8, UCS4, ISO 8859-10,
+ etc etc etc) are not mentioned in the C++ standard.
+ </p><p>
+ A couple of comments:
+ </p><p>
+ The thought that all one needs to convert between two arbitrary
+ codesets is two types and some kind of state argument is
+ unfortunate. In particular, encodings may be stateless. The naming
+ of the third parameter as stateT is unfortunate, as what is really
+ needed is some kind of generalized type that accounts for the
+ issues that abstract encodings will need. The minimum information
+ that is required includes:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Identifiers for each of the codesets involved in the
+ conversion. For example, using the iconv family of functions
+ from the Single Unix Specification (what used to be called
+ X/Open) hosted on the GNU/Linux operating system allows
+ bi-directional mapping between far more than the following
+ tantalizing possibilities:
+ </p><p>
+ (An edited list taken from <code class="code">`iconv --list`</code> on a
+ Red Hat 6.2/Intel system:
+ </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
+8859_1, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ARABIC, ARABIC7,
+ASCII, EUC-CN, EUC-JP, EUC-KR, EUC-TW, GREEK-CCIcode, GREEK, GREEK7-OLD,
+GREEK7, GREEK8, HEBREW, ISO-8859-1, ISO-8859-2, ISO-8859-3,
+ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8,
+ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14,
+ISO-8859-15, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4,
+ISO-10646/UTF-8, ISO-10646/UTF8, SHIFT-JIS, SHIFT_JIS, UCS-2, UCS-4,
+UCS2, UCS4, UNICODE, UNICODEBIG, UNICODELIcodeLE, US-ASCII, US, UTF-8,
+UTF-16, UTF8, UTF16).
+</pre></blockquote></div><p>
+For iconv-based implementations, string literals for each of the
+encodings (i.e. "UCS-2" and "UTF-8") are necessary,
+although for other,
+non-iconv implementations a table of enumerated values or some other
+mechanism may be required.
+</p></li><li class="listitem"><p>
+ Maximum length of the identifying string literal.
+</p></li><li class="listitem"><p>
+ Some encodings require explicit endian-ness. As such, some kind
+ of endian marker or other byte-order marker will be necessary. See
+ "Footnotes for C/C++ developers" in Haible for more information on
+ UCS-2/Unicode endian issues. (Summary: big endian seems most likely,
+ however implementations, most notably Microsoft, vary.)
+</p></li><li class="listitem"><p>
+ Types representing the conversion state, for conversions involving
+ the machinery in the "C" library, or the conversion descriptor, for
+ conversions using iconv (such as the type iconv_t.) Note that the
+ conversion descriptor encodes more information than a simple encoding
+ state type.
+</p></li><li class="listitem"><p>
+ Conversion descriptors for both directions of encoding. (i.e., both
+ UCS-2 to UTF-8 and UTF-8 to UCS-2.)
+</p></li><li class="listitem"><p>
+ Something to indicate if the conversion requested if valid.
+</p></li><li class="listitem"><p>
+ Something to represent if the conversion descriptors are valid.
+</p></li><li class="listitem"><p>
+ Some way to enforce strict type checking on the internal and
+ external types. As part of this, the size of the internal and
+ external types will need to be known.
+</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
+In addition, multi-threaded and multi-locale environments also impact
+the design and requirements for code conversions. In particular, they
+affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
+when implemented using standard "C" functions.
+</p><p>
+Three problems arise, one big, one of medium importance, and one small.
+</p><p>
+First, the small: mcsrtombs and wcsrtombs may not be multithread-safe
+on all systems required by the GNU tools. For GNU/Linux and glibc,
+this is not an issue.
+</p><p>
+Of medium concern, in the grand scope of things, is that the functions
+used to implement this specialization work on null-terminated
+strings. Buffers, especially file buffers, may not be null-terminated,
+thus giving conversions that end prematurely or are otherwise
+incorrect. Yikes!
+</p><p>
+The last, and fundamental problem, is the assumption of a global
+locale for all the "C" functions referenced above. For something like
+C++ iostreams (where codecvt is explicitly used) the notion of
+multiple locales is fundamental. In practice, most users may not run
+into this limitation. However, as a quality of implementation issue,
+the GNU C++ library would like to offer a solution that allows
+multiple locales and or simultaneous usage with computationally
+correct results. In short, libstdc++ is trying to offer, as an
+option, a high-quality implementation, damn the additional complexity!
+</p><p>
+For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
+conversions are made between the internal character set (always UCS4
+on GNU/Linux) and whatever the currently selected locale for the
+LC_CTYPE category implements.
+</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
+The two required specializations are implemented as follows:
+</p><p>
+<code class="code">
+codecvt&lt;char, char, mbstate_t&gt;
+</code>
+</p><p>
+This is a degenerate (i.e., does nothing) specialization. Implementing
+this was a piece of cake.
+</p><p>
+<code class="code">
+codecvt&lt;char, wchar_t, mbstate_t&gt;
+</code>
+</p><p>
+This specialization, by specifying all the template parameters, pretty
+much ties the hands of implementors. As such, the implementation is
+straightforward, involving mcsrtombs for the conversions between char
+to wchar_t and wcsrtombs for conversions between wchar_t and char.
+</p><p>
+Neither of these two required specializations deals with Unicode
+characters. As such, libstdc++ implements a partial specialization
+of the codecvt class with and iconv wrapper class, encoding_state as the
+third template parameter.
+</p><p>
+This implementation should be standards conformant. First of all, the
+standard explicitly points out that instantiations on the third
+template parameter, stateT, are the proper way to implement
+non-required conversions. Second of all, the standard says (in Chapter
+17) that partial specializations of required classes are a-ok. Third
+of all, the requirements for the stateT type elsewhere in the standard
+(see 21.1.2 traits typedefs) only indicate that this type be copy
+constructible.
+</p><p>
+As such, the type encoding_state is defined as a non-templatized, POD
+type to be used as the third type of a codecvt instantiation. This
+type is just a wrapper class for iconv, and provides an easy interface
+to iconv functionality.
+</p><p>
+There are two constructors for encoding_state:
+</p><p>
+<code class="code">
+encoding_state() : __in_desc(0), __out_desc(0)
+</code>
+</p><p>
+This default constructor sets the internal encoding to some default
+(currently UCS4) and the external encoding to whatever is returned by
+nl_langinfo(CODESET).
+</p><p>
+<code class="code">
+encoding_state(const char* __int, const char* __ext)
+</code>
+</p><p>
+This constructor takes as parameters string literals that indicate the
+desired internal and external encoding. There are no defaults for
+either argument.
+</p><p>
+One of the issues with iconv is that the string literals identifying
+conversions are not standardized. Because of this, the thought of
+mandating and or enforcing some set of pre-determined valid
+identifiers seems iffy: thus, a more practical (and non-migraine
+inducing) strategy was implemented: end-users can specify any string
+(subject to a pre-determined length qualifier, currently 32 bytes) for
+encodings. It is up to the user to make sure that these strings are
+valid on the target system.
+</p><p>
+<code class="code">
+void
+_M_init()
+</code>
+</p><p>
+Strangely enough, this member function attempts to open conversion
+descriptors for a given encoding_state object. If the conversion
+descriptors are not valid, the conversion descriptors returned will
+not be valid and the resulting calls to the codecvt conversion
+functions will return error.
+</p><p>
+<code class="code">
+bool
+_M_good()
+</code>
+</p><p>
+Provides a way to see if the given encoding_state object has been
+properly initialized. If the string literals describing the desired
+internal and external encoding are not valid, initialization will
+fail, and this will return false. If the internal and external
+encodings are valid, but iconv_open could not allocate conversion
+descriptors, this will also return false. Otherwise, the object is
+ready to convert and will return true.
+</p><p>
+<code class="code">
+encoding_state(const encoding_state&amp;)
+</code>
+</p><p>
+As iconv allocates memory and sets up conversion descriptors, the copy
+constructor can only copy the member data pertaining to the internal
+and external code conversions, and not the conversion descriptors
+themselves.
+</p><p>
+Definitions for all the required codecvt member functions are provided
+for this specialization, and usage of codecvt&lt;internal character type,
+external character type, encoding_state&gt; is consistent with other
+codecvt usage.
+</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
+ typedef codecvt_base::result result;
+ typedef unsigned short unicode_t;
+ typedef unicode_t int_type;
+ typedef char ext_type;
+ typedef encoding_state state_type;
+ typedef codecvt&lt;int_type, ext_type, state_type&gt; unicode_codecvt;
+
+ const ext_type* e_lit = "black pearl jasmine tea";
+ int size = strlen(e_lit);
+ int_type i_lit_base[24] =
+ { 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184,
+ 27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696,
+ 25856, 24832, 2560
+ };
+ const int_type* i_lit = i_lit_base;
+ const ext_type* efrom_next;
+ const int_type* ifrom_next;
+ ext_type* e_arr = new ext_type[size + 1];
+ ext_type* eto_next;
+ int_type* i_arr = new int_type[size + 1];
+ int_type* ito_next;
+
+ // construct a locale object with the specialized facet.
+ locale loc(locale::classic(), new unicode_codecvt);
+ // sanity check the constructed locale has the specialized facet.
+ VERIFY( has_facet&lt;unicode_codecvt&gt;(loc) );
+ const unicode_codecvt&amp; cvt = use_facet&lt;unicode_codecvt&gt;(loc);
+ // convert between const char* and unicode strings
+ unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1");
+ initialize_state(state01);
+ result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
+ i_arr, i_arr + size, ito_next);
+ VERIFY( r1 == codecvt_base::ok );
+ VERIFY( !int_traits::compare(i_arr, i_lit, size) );
+ VERIFY( efrom_next == e_lit + size );
+ VERIFY( ito_next == i_arr + size );
+</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ a. things that are sketchy, or remain unimplemented:
+ do_encoding, max_length and length member functions
+ are only weakly implemented. I have no idea how to do
+ this correctly, and in a generic manner. Nathan?
+</p></li><li class="listitem"><p>
+ b. conversions involving std::string
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ how should operators != and == work for string of
+ different/same encoding?
+ </p></li><li class="listitem"><p>
+ what is equal? A byte by byte comparison or an
+ encoding then byte comparison?
+ </p></li><li class="listitem"><p>
+ conversions between narrow, wide, and unicode strings
+ </p></li></ul></div></li><li class="listitem"><p>
+ c. conversions involving std::filebuf and std::ostream
+</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ how to initialize the state object in a
+ standards-conformant manner?
+ </p></li><li class="listitem"><p>
+ how to synchronize the "C" and "C++"
+ conversion information?
+ </p></li><li class="listitem"><p>
+ wchar_t/char internal buffers and conversions between
+ internal/external buffers?
+ </p></li></ul></div></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id388454"></a><p><span class="title"><i>
+ The GNU C Library
+ </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
+ Chapters 6 Character Set Handling and 7 Locales and Internationalization
+ . </span></p></div><div class="biblioentry" title="Correspondence"><a id="id387509"></a><p><span class="title"><i>
+ Correspondence
+ </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id387538"></a><p><span class="title"><i>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id406312"></a><p><span class="title"><i>
+ ISO/IEC 9899:1999 Programming languages - C
+ </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id406331"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.opengroup.org/austin" target="_top">
+ <em class="citetitle">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </em>
+ </a>
+ . </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id408136"></a><p><span class="title"><i>
+ The C++ Programming Language, Special Edition
+ </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ Addison Wesley
+ . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id393924"></a><p><span class="title"><i>
+ Standard C++ IOStreams and Locales
+ </i>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
+ Addison Wesley Longman
+ . </span></span></p></div><div class="biblioentry"><a id="id446609"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.lysator.liu.se/c/na1.html" target="_top">
+ <em class="citetitle">
+ A brief description of Normative Addendum 1
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id626888"></a><p><span class="title"><i>
+ . </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="id331499"></a><p><span class="biblioid">
+ <a class="ulink" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
+ <em class="citetitle">
+ The Unicode HOWTO
+ </em>
+ </a>
+ . </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="id331529"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
+ <em class="citetitle">
+ UTF-8 and Unicode FAQ for Unix/Linux
+ </em>
+ </a>
+ . </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
+The std::messages facet implements message retrieval functionality
+equivalent to Java's java.text.MessageFormat .using either GNU gettext
+or IEEE 1003.1-200 functions.
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
+The std::messages facet is probably the most vaguely defined facet in
+the standard library. It's assumed that this facility was built into
+the standard library in order to convert string literals from one
+locale to the other. For instance, converting the "C" locale's
+<code class="code">const char* c = "please"</code> to a German-localized <code class="code">"bitte"</code>
+during program execution.
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+22.2.7.1 - Template class messages [lib.locale.messages]
+</p></blockquote></div><p>
+This class has three public member functions, which directly
+correspond to three protected virtual member functions.
+</p><p>
+The public member functions are:
+</p><p>
+<code class="code">catalog open(const string&amp;, const locale&amp;) const</code>
+</p><p>
+<code class="code">string_type get(catalog, int, int, const string_type&amp;) const</code>
+</p><p>
+<code class="code">void close(catalog) const</code>
+</p><p>
+While the virtual functions are:
+</p><p>
+<code class="code">catalog do_open(const string&amp;, const locale&amp;) const</code>
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-1- Returns: A value that may be passed to get() to retrieve a
+message, from the message catalog identified by the string name
+according to an implementation-defined mapping. The result can be used
+until it is passed to close(). Returns a value less than 0 if no such
+catalog can be opened.
+</em></span>
+</p></blockquote></div><p>
+<code class="code">string_type do_get(catalog, int, int, const string_type&amp;) const</code>
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-3- Requires: A catalog cat obtained from open() and not yet closed.
+-4- Returns: A message identified by arguments set, msgid, and dfault,
+according to an implementation-defined mapping. If no such message can
+be found, returns dfault.
+</em></span>
+</p></blockquote></div><p>
+<code class="code">void do_close(catalog) const</code>
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+-5- Requires: A catalog cat obtained from open() and not yet closed.
+-6- Effects: Releases unspecified resources associated with cat.
+-7- Notes: The limit on such resources, if any, is implementation-defined.
+</em></span>
+</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
+A couple of notes on the standard.
+</p><p>
+First, why is <code class="code">messages_base::catalog</code> specified as a typedef
+to int? This makes sense for implementations that use
+<code class="code">catopen</code>, but not for others. Fortunately, it's not heavily
+used and so only a minor irritant.
+</p><p>
+Second, by making the member functions <code class="code">const</code>, it is
+impossible to save state in them. Thus, storing away information used
+in the 'open' member function for use in 'get' is impossible. This is
+unfortunate.
+</p><p>
+The 'open' member function in particular seems to be oddly
+designed. The signature seems quite peculiar. Why specify a <code class="code">const
+string&amp; </code> argument, for instance, instead of just <code class="code">const
+char*</code>? Or, why specify a <code class="code">const locale&amp;</code> argument that is
+to be used in the 'get' member function? How, exactly, is this locale
+argument useful? What was the intent? It might make sense if a locale
+argument was associated with a given default message string in the
+'open' member function, for instance. Quite murky and unclear, on
+reflection.
+</p><p>
+Lastly, it seems odd that messages, which explicitly require code
+conversion, don't use the codecvt facet. Because the messages facet
+has only one template parameter, it is assumed that ctype, and not
+codecvt, is to be used to convert between character sets.
+</p><p>
+It is implicitly assumed that the locale for the default message
+string in 'get' is in the "C" locale. Thus, all source code is assumed
+to be written in English, so translations are always from "en_US" to
+other, explicitly named locales.
+</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
+ This is a relatively simple class, on the face of it. The standard
+ specifies very little in concrete terms, so generic
+ implementations that are conforming yet do very little are the
+ norm. Adding functionality that would be useful to programmers and
+ comparable to Java's java.text.MessageFormat takes a bit of work,
+ and is highly dependent on the capabilities of the underlying
+ operating system.
+ </p><p>
+ Three different mechanisms have been provided, selectable via
+ configure flags:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ generic
+ </p><p>
+ This model does very little, and is what is used by default.
+ </p></li><li class="listitem"><p>
+ gnu
+ </p><p>
+ The gnu model is complete and fully tested. It's based on the
+ GNU gettext package, which is part of glibc. It uses the
+ functions <code class="code">textdomain, bindtextdomain, gettext</code> to
+ implement full functionality. Creating message catalogs is a
+ relatively straight-forward process and is lightly documented
+ below, and fully documented in gettext's distributed
+ documentation.
+ </p></li><li class="listitem"><p>
+ ieee_1003.1-200x
+ </p><p>
+ This is a complete, though untested, implementation based on
+ the IEEE standard. The functions <code class="code">catopen, catgets,
+ catclose</code> are used to retrieve locale-specific messages
+ given the appropriate message catalogs that have been
+ constructed for their use. Note, the script <code class="code">
+ po2msg.sed</code> that is part of the gettext distribution can
+ convert gettext catalogs into catalogs that
+ <code class="code">catopen</code> can use.
+ </p></li></ul></div><p>
+A new, standards-conformant non-virtual member function signature was
+added for 'open' so that a directory could be specified with a given
+message catalog. This simplifies calling conventions for the gnu
+model.
+</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
+ The messages facet, because it is retrieving and converting
+ between characters sets, depends on the ctype and perhaps the
+ codecvt facet in a given locale. In addition, underlying "C"
+ library locale support is necessary for more than just the
+ <code class="code">LC_MESSAGES</code> mask: <code class="code">LC_CTYPE</code> is also
+ necessary. To avoid any unpleasantness, all bits of the "C" mask
+ (i.e. <code class="code">LC_ALL</code>) are set before retrieving messages.
+ </p><p>
+ Making the message catalogs can be initially tricky, but become
+ quite simple with practice. For complete info, see the gettext
+ documentation. Here's an idea of what is required:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Make a source file with the required string literals that need
+ to be translated. See <code class="code">intl/string_literals.cc</code> for
+ an example.
+ </p></li><li class="listitem"><p>
+ Make initial catalog (see "4 Making the PO Template File" from
+ the gettext docs).</p><p>
+ <code class="code"> xgettext --c++ --debug string_literals.cc -o libstdc++.pot </code>
+ </p></li><li class="listitem"><p>Make language and country-specific locale catalogs.</p><p>
+ <code class="code">cp libstdc++.pot fr_FR.po</code>
+ </p><p>
+ <code class="code">cp libstdc++.pot de_DE.po</code>
+ </p></li><li class="listitem"><p>
+ Edit localized catalogs in emacs so that strings are
+ translated.
+ </p><p>
+ <code class="code">emacs fr_FR.po</code>
+ </p></li><li class="listitem"><p>Make the binary mo files.</p><p>
+ <code class="code">msgfmt fr_FR.po -o fr_FR.mo</code>
+ </p><p>
+ <code class="code">msgfmt de_DE.po -o de_DE.mo</code>
+ </p></li><li class="listitem"><p>Copy the binary files into the correct directory structure.</p><p>
+ <code class="code">cp fr_FR.mo (dir)/fr_FR/LC_MESSAGES/libstdc++.mo</code>
+ </p><p>
+ <code class="code">cp de_DE.mo (dir)/de_DE/LC_MESSAGES/libstdc++.mo</code>
+ </p></li><li class="listitem"><p>Use the new message catalogs.</p><p>
+ <code class="code">locale loc_de("de_DE");</code>
+ </p><p>
+ <code class="code">
+ use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
+ </code>
+ </p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
+ A simple example using the GNU model of message conversion.
+ </p><pre class="programlisting">
+#include &lt;iostream&gt;
+#include &lt;locale&gt;
+using namespace std;
+
+void test01()
+{
+ typedef messages&lt;char&gt;::catalog catalog;
+ const char* dir =
+ "/mnt/egcs/build/i686-pc-linux-gnu/libstdc++/po/share/locale";
+ const locale loc_de("de_DE");
+ const messages&lt;char&gt;&amp; mssg_de = use_facet&lt;messages&lt;char&gt; &gt;(loc_de);
+
+ catalog cat_de = mssg_de.open("libstdc++", loc_de, dir);
+ string s01 = mssg_de.get(cat_de, 0, 0, "please");
+ string s02 = mssg_de.get(cat_de, 0, 0, "thank you");
+ cout &lt;&lt; "please in german:" &lt;&lt; s01 &lt;&lt; '\n';
+ cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
+ mssg_de.close(cat_de);
+}
+</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Things that are sketchy, or remain unimplemented:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
+ _M_convert_from_char, _M_convert_to_char are in flux,
+ depending on how the library ends up doing character set
+ conversions. It might not be possible to do a real character
+ set based conversion, due to the fact that the template
+ parameter for messages is not enough to instantiate the
+ codecvt facet (1 supplied, need at least 2 but would prefer
+ 3).
+ </p></li><li class="listitem"><p>
+ There are issues with gettext needing the global locale set
+ to extract a message. This dependence on the global locale
+ makes the current "gnu" model non MT-safe. Future versions
+ of glibc, i.e. glibc 2.3.x will fix this, and the C++ library
+ bits are already in place.
+ </p></li></ul></div></li><li class="listitem"><p>
+ Development versions of the GNU "C" library, glibc 2.3 will allow
+ a more efficient, MT implementation of std::messages, and will
+ allow the removal of the _M_name_messages data member. If this is
+ done, it will change the library ABI. The C++ parts to support
+ glibc 2.3 have already been coded, but are not in use: once this
+ version of the "C" library is released, the marked parts of the
+ messages implementation can be switched over to the new "C"
+ library functionality.
+ </p></li><li class="listitem"><p>
+ At some point in the near future, std::numpunct will probably use
+ std::messages facilities to implement truename/falsename
+ correctly. This is currently not done, but entries in
+ libstdc++.pot have already been made for "true" and "false" string
+ literals, so all that remains is the std::numpunct coding and the
+ configure/make hassles to make the installed library search its
+ own catalog. Currently the libstdc++.mo catalog is only searched
+ for the testsuite cases involving messages members.
+ </p></li><li class="listitem"><p> The following member functions:</p><p>
+ <code class="code">
+ catalog
+ open(const basic_string&lt;char&gt;&amp; __s, const locale&amp; __loc) const
+ </code>
+ </p><p>
+ <code class="code">
+ catalog
+ open(const basic_string&lt;char&gt;&amp;, const locale&amp;, const char*) const;
+ </code>
+ </p><p>
+ Don't actually return a "value less than 0 if no such catalog
+ can be opened" as required by the standard in the "gnu"
+ model. As of this writing, it is unknown how to query to see
+ if a specified message catalog exists using the gettext
+ package.
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id504136"></a><p><span class="title"><i>
+ The GNU C Library
+ </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
+ . </span></p></div><div class="biblioentry" title="Correspondence"><a id="id416147"></a><p><span class="title"><i>
+ Correspondence
+ </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id416175"></a><p><span class="title"><i>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id456221"></a><p><span class="title"><i>
+ ISO/IEC 9899:1999 Programming languages - C
+ </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id456239"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.opengroup.org/austin" target="_top">
+ <em class="citetitle">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </em>
+ </a>
+ . </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id445827"></a><p><span class="title"><i>
The C++ Programming Language, Special Edition
</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id655841"></a><p><span class="title"><i>
+ . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id455920"></a><p><span class="title"><i>
Standard C++ IOStreams and Locales
</i>. </span><span class="subtitle">
Advanced Programmer's Guide and Reference
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
Addison Wesley Longman
- . </span></span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="locales.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="localization.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="codecvt.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14. Locales </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> codecvt</td></tr></table></div></body></html>
+ . </span></span></p></div><div class="biblioentry"><a id="id467395"></a><p><span class="biblioid">
+ <a class="ulink" href="http://java.sun.com/reference/api/index.html" target="_top">
+ <em class="citetitle">
+ API Specifications, Java Platform
+ </em>
+ </a>
+ . </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
+java.util.Locale, java.util.ResourceBundle
+ . </span></p></div><div class="biblioentry"><a id="id467417"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.gnu.org/software/gettext/" target="_top">
+ <em class="citetitle">
+ GNU gettext tools, version 0.10.38, Native Language Support
+Library and Tools.
+ </em>
+ </a>
+ . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="localization.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. 
+ Localization
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. 
+ Containers
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/fstreams.html b/libstdc++-v3/doc/html/manual/fstreams.html
index 6b0a06bca32..0795443b26d 100644
--- a/libstdc++-v3/doc/html/manual/fstreams.html
+++ b/libstdc++-v3/doc/html/manual/fstreams.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. File Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Part XI.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Chapter 26. Memory Based Streams" /><link rel="next" href="bk01pt11ch27s02.html" title="Binary Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Part XI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt11ch27s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. File Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="manual.io.filestreams"></a>Chapter 27. File Based Streams</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="fstreams.html#manual.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch27s02.html">Binary Input and Output</a></span></dt></dl></div><div class="sect1" title="Copying a File"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.io.filestreams.copying_a_file"></a>Copying a File</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="File Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="sect2" title="Copying a File"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
</p><p>So you want to copy a file quickly and easily, and most important,
completely portably. And since this is C++, you have an open
ifstream (call it IN) and an open ofstream (call it OUT):
@@ -22,7 +22,7 @@
of "output_file" may surprise you.
</p><p>Seriously, go do it. Get surprised, then come back. It's worth it.
</p><p>The thing to remember is that the <code class="code">basic_[io]stream</code> classes
- handle formatting, nothing else. In particular, they break up on
+ handle formatting, nothing else. In chaptericular, they break up on
whitespace. The actual reading, writing, and storing of data is
handled by the <code class="code">basic_streambuf</code> family. Fortunately, the
<code class="code">operator&lt;&lt;</code> is overloaded to take an ostream and
@@ -31,13 +31,13 @@
</p><p>Why a <span class="emphasis"><em>pointer</em></span> to streambuf and not just a streambuf? Well,
the [io]streams hold pointers (or references, depending on the
implementation) to their buffers, not the actual
- buffers. This allows polymorphic behavior on the part of the buffers
+ buffers. This allows polymorphic behavior on the chapter of the buffers
as well as the streams themselves. The pointer is easily retrieved
using the <code class="code">rdbuf()</code> member function. Therefore, the easiest
way to copy the file is:
</p><pre class="programlisting">
OUT &lt;&lt; IN.rdbuf();</pre><p>So what <span class="emphasis"><em>was</em></span> happening with OUT&lt;&lt;IN? Undefined
- behavior, since that particular &lt;&lt; isn't defined by the Standard.
+ behavior, since that chaptericular &lt;&lt; isn't defined by the Standard.
I have seen instances where it is implemented, but the character
extraction process removes all the whitespace, leaving you with no
blank lines and only "Thequickbrownfox...". With
@@ -45,8 +45,106 @@
member pointers) sometimes gets converted to a void*, and the output
file then contains a perfect text representation of a hexadecimal
address (quite a big surprise). Others don't compile at all.
- </p><p>Also note that none of this is specific to o<span class="emphasis"><em>*f*</em></span>streams.
- The operators shown above are all defined in the parent
+ </p><p>Also note that none of this is specific to o<span class="emphasis"><em>*f*</em></span>streams.
+ The operators shown above are all defined in the parent
basic_ostream class and are therefore available with all possible
descendants.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt11ch27s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Binary Input and Output</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
+ </p><p>The first and most important thing to remember about binary I/O is
+ that opening a file with <code class="code">ios::binary</code> is not, repeat
+ <span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
+ bullet, and will not allow you to use the <code class="code">&lt;&lt;/&gt;&gt;</code>
+ operators of the normal fstreams to do binary I/O.
+ </p><p>Sorry. Them's the breaks.
+ </p><p>This isn't going to try and be a complete tutorial on reading and
+ writing binary files (because "binary"
+ covers a lot of ground), but we will try and clear
+ up a couple of misconceptions and common errors.
+ </p><p>First, <code class="code">ios::binary</code> has exactly one defined effect, no more
+ and no less. Normal text mode has to be concerned with the newline
+ characters, and the runtime system will translate between (for
+ example) '\n' and the appropriate end-of-line sequence (LF on Unix,
+ CRLF on DOS, CR on Macintosh, etc). (There are other things that
+ normal mode does, but that's the most obvious.) Opening a file in
+ binary mode disables this conversion, so reading a CRLF sequence
+ under Windows won't accidentally get mapped to a '\n' character, etc.
+ Binary mode is not supposed to suddenly give you a bitstream, and
+ if it is doing so in your program then you've discovered a bug in
+ your vendor's compiler (or some other chapter of the C++ implementation,
+ possibly the runtime system).
+ </p><p>Second, using <code class="code">&lt;&lt;</code> to write and <code class="code">&gt;&gt;</code> to
+ read isn't going to work with the standard file stream classes, even
+ if you use <code class="code">skipws</code> during reading. Why not? Because
+ ifstream and ofstream exist for the purpose of <span class="emphasis"><em>formatting</em></span>,
+ not reading and writing. Their job is to interpret the data into
+ text characters, and that's exactly what you don't want to happen
+ during binary I/O.
+ </p><p>Third, using the <code class="code">get()</code> and <code class="code">put()/write()</code> member
+ functions still aren't guaranteed to help you. These are
+ "unformatted" I/O functions, but still character-based.
+ (This may or may not be what you want, see below.)
+ </p><p>Notice how all the problems here are due to the inappropriate use
+ of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
+ which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
+ seemingly infinite number of solutions, and a few are listed here:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
+ &lt;&lt;/&gt;&gt; operators to do binary I/O on whatever data
+ types you're using.</span>â€</span>
+ </p><p>
+ This is a Bad Thing, because while
+ the compiler would probably be just fine with it, other humans
+ are going to be confused. The overloaded bitshift operators
+ have a well-defined meaning (formatting), and this breaks it.
+ </p></li><li class="listitem"><p>
+ <span class="quote">“<span class="quote">Build the file structure in memory, then
+ <code class="code">mmap()</code> the file and copy the
+ structure.
+ </span>â€</span>
+ </p><p>
+ Well, this is easy to make work, and easy to break, and is
+ pretty equivalent to using <code class="code">::read()</code> and
+ <code class="code">::write()</code> directly, and makes no use of the
+ iostream library at all...
+ </p></li><li class="listitem"><p>
+ <span class="quote">“<span class="quote">Use streambufs, that's what they're there for.</span>â€</span>
+ </p><p>
+ While not trivial for the beginner, this is the best of all
+ solutions. The streambuf/filebuf layer is the layer that is
+ responsible for actual I/O. If you want to use the C++
+ library for binary I/O, this is where you start.
+ </p></li></ul></div><p>How to go about using streambufs is a bit beyond the scope of this
+ document (at least for now), but while streambufs go a long way,
+ they still leave a couple of things up to you, the programmer.
+ As an example, byte ordering is completely between you and the
+ operating system, and you have to handle it yourself.
+ </p><p>Deriving a streambuf or filebuf
+ class from the standard ones, one that is specific to your data
+ types (or an abstraction thereof) is probably a good idea, and
+ lots of examples exist in journals and on Usenet. Using the
+ standard filebufs directly (either by declaring your own or by
+ using the pointer returned from an fstream's <code class="code">rdbuf()</code>)
+ is certainly feasible as well.
+ </p><p>One area that causes problems is trying to do bit-by-bit operations
+ with filebufs. C++ is no different from C in this respect: I/O
+ must be done at the byte level. If you're trying to read or write
+ a few bits at a time, you're going about it the wrong way. You
+ must read/write an integral number of bytes and then process the
+ bytes. (For example, the streambuf functions take and return
+ variables of type <code class="code">int_type</code>.)
+ </p><p>Another area of problems is opening text files in binary mode.
+ Generally, binary mode is intended for binary files, and opening
+ text files in binary mode means that you now have to deal with all of
+ those end-of-line and end-of-file problems that we mentioned before.
+ </p><p>
+ An instructive thread from comp.lang.c++.moderated delved off into
+ this topic starting more or less at
+ <a class="ulink" href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d" target="_top">this</a>
+ post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
+ and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
+ </p><p>Briefly, the problems of byte ordering and type sizes mean that
+ the unformatted functions like <code class="code">ostream::put()</code> and
+ <code class="code">istream::get()</code> cannot safely be used to communicate
+ between arbitrary programs, or across a network, or from one
+ invocation of a program to another invocation of the same program
+ on a different platform, etc.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/functors.html b/libstdc++-v3/doc/html/manual/functors.html
deleted file mode 100644
index eca77856530..00000000000
--- a/libstdc++-v3/doc/html/manual/functors.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9. Functors</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Part IV.  Utilities" /><link rel="prev" href="utilities.html" title="Part IV.  Utilities" /><link rel="next" href="pairs.html" title="Chapter 10. Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Functors</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Part IV. 
- Utilities
-
-</th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9. Functors"><div class="titlepage"><div><div><h2 class="title"><a id="manual.util.functors"></a>Chapter 9. Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
- get slightly the wrong idea. In the interest of not reinventing
- the wheel, we will refer you to the introduction to the functor
- concept written by SGI as part of their STL, in
- <a class="ulink" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
- http://www.sgi.com/tech/stl/functors.html</a>.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. 
- Utilities
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. Pairs</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/fundamental_types.html b/libstdc++-v3/doc/html/manual/fundamental_types.html
deleted file mode 100644
index 0196e5a8dec..00000000000
--- a/libstdc++-v3/doc/html/manual/fundamental_types.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4. Types</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II.  Support" /><link rel="prev" href="bk01pt02pr01.html" title="" /><link rel="next" href="bk01pt02ch04s02.html" title="Numeric Properties" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Types</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02pr01.html">Prev</a> </td><th width="60%" align="center">Part II. 
- Support
-
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch04s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4. Types"><div class="titlepage"><div><div><h2 class="title"><a id="manual.support.types"></a>Chapter 4. Types</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s03.html">NULL</a></span></dt></dl></div><div class="sect1" title="Fundamental Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.support.types.fundamental"></a>Fundamental Types</h2></div></div></div><p>
- C++ has the following builtin types:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- char
- </p></li><li class="listitem"><p>
- signed char
- </p></li><li class="listitem"><p>
- unsigned char
- </p></li><li class="listitem"><p>
- signed short
- </p></li><li class="listitem"><p>
- signed int
- </p></li><li class="listitem"><p>
- signed long
- </p></li><li class="listitem"><p>
- unsigned short
- </p></li><li class="listitem"><p>
- unsigned int
- </p></li><li class="listitem"><p>
- unsigned long
- </p></li><li class="listitem"><p>
- bool
- </p></li><li class="listitem"><p>
- wchar_t
- </p></li><li class="listitem"><p>
- float
- </p></li><li class="listitem"><p>
- double
- </p></li><li class="listitem"><p>
- long double
- </p></li></ul></div><p>
- These fundamental types are always available, without having to
- include a header file. These types are exactly the same in
- either C++ or in C.
- </p><p>
- Specializing parts of the library on these types is prohibited:
- instead, use a POD.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch04s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Numeric Properties</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
index 74e54b47d44..7047824afa3 100644
--- a/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+++ b/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Generalized Operations</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Part X.  Numerics" /><link rel="prev" href="complex.html" title="Chapter 21. Complex" /><link rel="next" href="numerics_and_c.html" title="Chapter 23. Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="complex.html">Prev</a> </td><th width="60%" align="center">Part X. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
-</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 22. Generalized Operations"><div class="titlepage"><div><div><h2 class="title"><a id="manual.numerics.generalized_ops"></a>Chapter 22. Generalized Operations</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Generalized Operations"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
</p><p>There are four generalized functions in the &lt;numeric&gt; header
that follow the same conventions as those in &lt;algorithm&gt;. Each
of them is overloaded: one signature for common default operations,
and a second for fully general operations. Their names are
self-explanatory to anyone who works with numerics on a regular basis:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">partial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
</p><pre class="programlisting">
int ar[50];
int someval = somefunction();
@@ -26,4 +26,7 @@
and multiplies all the members of the array; here we must obviously
use 1 as a starting value instead of 0.
</p><p>The other three functions have similar dual-signature forms.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="complex.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Complex </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Interacting with C</td></tr></table></div></body></html>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. 
+ Numerics
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/internals.html b/libstdc++-v3/doc/html/manual/internals.html
index cc6df8ba72c..1512752fa74 100644
--- a/libstdc++-v3/doc/html/manual/internals.html
+++ b/libstdc++-v3/doc/html/manual/internals.html
@@ -41,7 +41,7 @@ in <code class="code">sparc-sun-solaris2.8</code>. If the new directory is name
OS portion of the triplet (the default), then nothing needs to be changed.
</p><p>The first file to create in this directory, should be called
<code class="code">os_defines.h</code>. This file contains basic macro definitions
-that are required to allow the C++ library to work with your C library.
+that are required to allow the C++ library to work with your C library.
</p><p>Several libstdc++ source files unconditionally define the macro
<code class="code">_POSIX_SOURCE</code>. On many systems, defining this macro causes
large portions of the C library header files to be eliminated
@@ -91,7 +91,7 @@ are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
</p><p>Finally, you should bracket the entire file in an include-guard, like
this:
- </p><pre class="programlisting">
+ </p><pre class="programlisting">
#ifndef _GLIBCXX_OS_DEFINES
#define _GLIBCXX_OS_DEFINES
@@ -131,7 +131,7 @@ upper-case, lower-case, alphabetic, etc. The <code class="code">ctype_base.h</c
file gives the type of the integer, and the values of the various bit
masks. You will have to peer at your own <code class="code">&lt;ctype.h&gt;</code> to figure out
how to define the values required by this file.
- </p><p>The <code class="code">ctype_base.h</code> header file does not need include guards.
+ </p><p>The <code class="code">ctype_base.h</code> header file does not need include guards.
It should contain a single <code class="code">struct</code> definition called
<code class="code">ctype_base</code>. This <code class="code">struct</code> should contain two type
declarations, and one enumeration declaration, like this example, taken
@@ -141,20 +141,20 @@ from the IRIX configuration:
{
typedef unsigned int mask;
typedef int* __to_type;
-
+
enum
{
- space = _ISspace,
- print = _ISprint,
- cntrl = _IScntrl,
- upper = _ISupper,
- lower = _ISlower,
- alpha = _ISalpha,
- digit = _ISdigit,
- punct = _ISpunct,
- xdigit = _ISxdigit,
- alnum = _ISalnum,
- graph = _ISgraph
+ space = _ISspace,
+ print = _ISprint,
+ cntrl = _IScntrl,
+ upper = _ISupper,
+ lower = _ISlower,
+ alpha = _ISalpha,
+ digit = _ISdigit,
+ punct = _ISpunct,
+ xdigit = _ISxdigit,
+ alnum = _ISalnum,
+ graph = _ISgraph
};
};
</pre><p>The <code class="code">mask</code> type is the type of the elements in the table. If your
@@ -176,14 +176,14 @@ function that must be written is the <code class="code">ctype&lt;char&gt;::ctype
constructor. Here is the IRIX example:
</p><pre class="programlisting">
ctype&lt;char&gt;::ctype(const mask* __table = 0, bool __del = false,
- size_t __refs = 0)
+ size_t __refs = 0)
: _Ctype_nois&lt;char&gt;(__refs), _M_del(__table != 0 &amp;&amp; __del),
- _M_toupper(NULL),
- _M_tolower(NULL),
- _M_ctable(NULL),
- _M_table(!__table
- ? (const mask*) (__libc_attr._ctype_tbl-&gt;_class + 1)
- : __table)
+ _M_toupper(NULL),
+ _M_tolower(NULL),
+ _M_ctable(NULL),
+ _M_table(!__table
+ ? (const mask*) (__libc_attr._ctype_tbl-&gt;_class + 1)
+ : __table)
{ }
</pre><p>There are two parts of this that you might choose to alter. The first,
and most important, is the line involving <code class="code">__libc_attr</code>. That is
@@ -199,7 +199,7 @@ lower-case, and vice versa. Here are the IRIX versions:
char
ctype&lt;char&gt;::do_toupper(char __c) const
{ return _toupper(__c); }
-
+
char
ctype&lt;char&gt;::do_tolower(char __c) const
{ return _tolower(__c); }
@@ -215,21 +215,21 @@ machinery to do that on your system:
ctype&lt;char&gt;::do_toupper(char* __low, const char* __high) const
{
while (__low &lt; __high)
- {
- *__low = do_toupper(*__low);
- ++__low;
- }
+ {
+ *__low = do_toupper(*__low);
+ ++__low;
+ }
return __high;
}
-
+
const char*
ctype&lt;char&gt;::do_tolower(char* __low, const char* __high) const
{
while (__low &lt; __high)
- {
- *__low = do_tolower(*__low);
- ++__low;
- }
+ {
+ *__low = do_tolower(*__low);
+ ++__low;
+ }
return __high;
}
</pre><p>You must also provide the <code class="code">ctype_inline.h</code> file, which
@@ -244,7 +244,7 @@ properties; they are analogous to the functions like <code class="code">isalpha<
ctype&lt;char&gt;::
is(mask __m, char __c) const throw()
{ return (_M_table)[(unsigned char)(__c)] &amp; __m; }
-</pre><p>The <code class="code">_M_table</code> is the table passed in above, in the constructor.
+</pre><p>The <code class="code">_M_table</code> is the table passed in above, in the constructor.
This is the table that contains the bitmasks for each character. The
implementation here should work on all systems.
</p><p>The next function is:
@@ -254,7 +254,7 @@ implementation here should work on all systems.
is(const char* __low, const char* __high, mask* __vec) const throw()
{
while (__low &lt; __high)
- *__vec++ = (_M_table)[(unsigned char)(*__low++)];
+ *__vec++ = (_M_table)[(unsigned char)(*__low++)];
return __high;
}
</pre><p>This function is similar; it copies the masks for all the characters
@@ -267,16 +267,16 @@ from <code class="code">__low</code> up until <code class="code">__high</code> i
scan_is(mask __m, const char* __low, const char* __high) const throw()
{
while (__low &lt; __high &amp;&amp; !this-&gt;is(__m, *__low))
- ++__low;
+ ++__low;
return __low;
}
-
+
const char*
ctype&lt;char&gt;::
scan_not(mask __m, const char* __low, const char* __high) const throw()
{
while (__low &lt; __high &amp;&amp; this-&gt;is(__m, *__low))
- ++__low;
+ ++__low;
return __low;
}
</pre></div><div class="sect2" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
@@ -312,7 +312,7 @@ type, and two functions.
</p><p>The type is <code class="code">_Atomic_word</code>. Here is the version used on IRIX:
</p><pre class="programlisting">
typedef long _Atomic_word;
-</pre><p>This type must be a signed integral type supporting atomic operations.
+</pre><p>This type must be a signed integral type supporting atomic operations.
If you're using the OS approach, use the same type used by your system's
primitives. Otherwise, use the type for which your CPU provides atomic
primitives.
@@ -327,7 +327,7 @@ must be equivalent to those provided here, but using atomic operations:
*__mem += __val;
return __result;
}
-
+
static inline void
__attribute__ ((__unused__))
__atomic_add (_Atomic_word* __mem, int __val)
@@ -335,18 +335,18 @@ must be equivalent to those provided here, but using atomic operations:
*__mem += __val;
}
</pre></div><div class="sect2" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
-such as the minimum and maximum representable values of each type.
+such as the minimum and maximum representable values of each type.
You can define each of these values individually, but it is usually
easiest just to indicate how many bits are used in each of the data
types and let the library do the rest. For information about the
macros to define, see the top of <code class="code">include/bits/std_limits.h</code>.
-</p><p>If you need to define any macros, you can do so in <code class="code">os_defines.h</code>.
+</p><p>If you need to define any macros, you can do so in <code class="code">os_defines.h</code>.
However, if all operating systems for your CPU are likely to use the
same values, you can provide a CPU-specific file instead so that you
-do not have to provide the same definitions for each operating system.
+do not have to provide the same definitions for each operating system.
To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
- </p></div><div class="sect2" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
+ </p></div><div class="sect2" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
Explaining the full workings of libtool is beyond the scope of this
document, but there are a few, particular bits that are necessary for
porting.
diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html
index 690722ffdf9..ecdb0653316 100644
--- a/libstdc++-v3/doc/html/manual/intro.html
+++ b/libstdc++-v3/doc/html/manual/intro.html
@@ -5,5 +5,5 @@
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="spine.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part I.  Introduction"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
Introduction
- <a id="id683991" class="indexterm"></a>
+ <a id="id460662" class="indexterm"></a>
</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="spine.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/io.html b/libstdc++-v3/doc/html/manual/io.html
index 90dbc6c5271..d089bccc4cb 100644
--- a/libstdc++-v3/doc/html/manual/io.html
+++ b/libstdc++-v3/doc/html/manual/io.html
@@ -1,9 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part XI.  Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt10ch23s02.html" title="C99" /><link rel="next" href="iostream_objects.html" title="Chapter 24. Iostream Objects" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part XI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
Input and Output
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt10ch23s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="iostream_objects.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part XI.  Input and Output"><div class="titlepage"><div><div><h1 class="title"><a id="manual.io"></a>Part XI. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13.  Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
Input and Output
- <a id="id592157" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="iostream_objects.html">24. Iostream Objects</a></span></dt><dt><span class="chapter"><a href="streambufs.html">25. Stream Buffers</a></span></dt><dd><dl><dt><span class="sect1"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch25s02.html">Buffering</a></span></dt></dl></dd><dt><span class="chapter"><a href="stringstreams.html">26. Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="stringstreams.html#manual.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="chapter"><a href="fstreams.html">27. File Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="fstreams.html#manual.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch27s02.html">Binary Input and Output</a></span></dt></dl></dd><dt><span class="chapter"><a href="io_and_c.html">28. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="io_and_c.html#manual.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch28s02.html">Performance</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt10ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iostream_objects.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">C99 </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Iostream Objects</td></tr></table></div></body></html>
+ <a id="id404072" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="sect1" title="Iostream Objects"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
+ only include the headers you really need. Many people simply include
+ &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
+ your runtime as well.</em></span> Here are some tips on which header to use
+ for which situations, starting with the simplest.
+ </p><p><span class="emphasis"><em>&lt;iosfwd&gt;</em></span> should be included whenever you simply
+ need the <span class="emphasis"><em>name</em></span> of an I/O-related class, such as
+ "ofstream" or "basic_streambuf". Like the name
+ implies, these are forward declarations. (A word to all you fellow
+ old school programmers: trying to forward declare classes like
+ "class istream;" won't work. Look in the iosfwd header if
+ you'd like to know why.) For example,
+ </p><pre class="programlisting">
+ #include &lt;iosfwd&gt;
+
+ class MyClass
+ {
+ ....
+ std::ifstream&amp; input_file;
+ };
+
+ extern std::ostream&amp; operator&lt;&lt; (std::ostream&amp;, MyClass&amp;);
+ </pre><p><span class="emphasis"><em>&lt;ios&gt;</em></span> declares the base classes for the entire
+ I/O stream hierarchy, std::ios_base and std::basic_ios&lt;charT&gt;, the
+ counting types std::streamoff and std::streamsize, the file
+ positioning type std::fpos, and the various manipulators like
+ std::hex, std::fixed, std::noshowbase, and so forth.
+ </p><p>The ios_base class is what holds the format flags, the state flags,
+ and the functions which change them (setf(), width(), precision(),
+ etc). You can also store extra data and register callback functions
+ through ios_base, but that has been historically underused. Anything
+ which doesn't depend on the type of characters stored is consolidated
+ here.
+ </p><p>The template class basic_ios is the highest template class in the
+ hierarchy; it is the first one depending on the character type, and
+ holds all general state associated with that type: the pointer to the
+ polymorphic stream buffer, the facet information, etc.
+ </p><p><span class="emphasis"><em>&lt;streambuf&gt;</em></span> declares the template class
+ basic_streambuf, and two standard instantiations, streambuf and
+ wstreambuf. If you need to work with the vastly useful and capable
+ stream buffer classes, e.g., to create a new form of storage
+ transport, this header is the one to include.
+ </p><p><span class="emphasis"><em>&lt;istream&gt;</em></span>/<span class="emphasis"><em>&lt;ostream&gt;</em></span> are
+ the headers to include when you are using the &gt;&gt;/&lt;&lt;
+ interface, or any of the other abstract stream formatting functions.
+ For example,
+ </p><pre class="programlisting">
+ #include &lt;istream&gt;
+
+ std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, MyClass&amp; c)
+ {
+ return os &lt;&lt; c.data1() &lt;&lt; c.data2();
+ }
+ </pre><p>The std::istream and std::ostream classes are the abstract parents of
+ the various concrete implementations. If you are only using the
+ interfaces, then you only need to use the appropriate interface header.
+ </p><p><span class="emphasis"><em>&lt;iomanip&gt;</em></span> provides "extractors and inserters
+ that alter information maintained by class ios_base and its derived
+ classes," such as std::setprecision and std::setw. If you need
+ to write expressions like <code class="code">os &lt;&lt; setw(3);</code> or
+ <code class="code">is &gt;&gt; setbase(8);</code>, you must include &lt;iomanip&gt;.
+ </p><p><span class="emphasis"><em>&lt;sstream&gt;</em></span>/<span class="emphasis"><em>&lt;fstream&gt;</em></span>
+ declare the six stringstream and fstream classes. As they are the
+ standard concrete descendants of istream and ostream, you will already
+ know about them.
+ </p><p>Finally, <span class="emphasis"><em>&lt;iostream&gt;</em></span> provides the eight standard
+ global objects (cin, cout, etc). To do this correctly, this header
+ also provides the contents of the &lt;istream&gt; and &lt;ostream&gt;
+ headers, but nothing else. The contents of this header look like
+ </p><pre class="programlisting">
+ #include &lt;ostream&gt;
+ #include &lt;istream&gt;
+
+ namespace std
+ {
+ extern istream cin;
+ extern ostream cout;
+ ....
+
+ // this is explained below
+ <span class="emphasis"><em>static ios_base::Init __foo;</em></span> // not its real name
+ }
+ </pre><p>Now, the runtime penalty mentioned previously: the global objects
+ must be initialized before any of your own code uses them; this is
+ guaranteed by the standard. Like any other global object, they must
+ be initialized once and only once. This is typically done with a
+ construct like the one above, and the nested class ios_base::Init is
+ specified in the standard for just this reason.
+ </p><p>How does it work? Because the header is included before any of your
+ code, the <span class="emphasis"><em>__foo</em></span> object is constructed before any of
+ your objects. (Global objects are built in the order in which they
+ are declared, and destroyed in reverse order.) The first time the
+ constructor runs, the eight stream objects are set up.
+ </p><p>The <code class="code">static</code> keyword means that each object file compiled
+ from a source file containing &lt;iostream&gt; will have its own
+ private copy of <span class="emphasis"><em>__foo</em></span>. There is no specified order
+ of construction across object files (it's one of those pesky NP
+ problems that make life so interesting), so one copy in each object
+ file means that the stream objects are guaranteed to be set up before
+ any of your code which uses them could run, thereby meeting the
+ requirements of the standard.
+ </p><p>The penalty, of course, is that after the first copy of
+ <span class="emphasis"><em>__foo</em></span> is constructed, all the others are just wasted
+ processor time. The time spent is merely for an increment-and-test
+ inside a function call, but over several dozen or hundreds of object
+ files, that time can add up. (It's not in a tight loop, either.)
+ </p><p>The lesson? Only include &lt;iostream&gt; when you need to use one of
+ the standard objects in that source file; you'll pay less startup
+ time. Only include the header files you need to in general; your
+ compile times will go down when there's less parsing work to do.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/io_and_c.html b/libstdc++-v3/doc/html/manual/io_and_c.html
index 33b5796ca27..f7a99e6ada0 100644
--- a/libstdc++-v3/doc/html/manual/io_and_c.html
+++ b/libstdc++-v3/doc/html/manual/io_and_c.html
@@ -1,11 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Part XI.  Input and Output" /><link rel="prev" href="bk01pt11ch27s02.html" title="Binary Input and Output" /><link rel="next" href="bk01pt11ch28s02.html" title="Performance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt11ch27s02.html">Prev</a> </td><th width="60%" align="center">Part XI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt11ch28s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="manual.io.c"></a>Chapter 28. Interacting with C</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="io_and_c.html#manual.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch28s02.html">Performance</a></span></dt></dl></div><div class="sect1" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.io.c.FILE"></a>Using FILE* and file descriptors</h2></div></div></div><p>
- See the <a class="link" href="ext_io.html" title="Chapter 39. Input and Output">extensions</a> for using
+</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Using FILE* and file descriptors"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
+ See the <a class="link" href="ext_io.html" title="Chapter 26. Input and Output">extensions</a> for using
<span class="type">FILE</span> and <span class="type">file descriptors</span> with
<code class="classname">ofstream</code> and
<code class="classname">ifstream</code>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt11ch27s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt11ch28s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Binary Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Performance</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
+ Pathetic Performance? Ditch C.
+ </p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
+ I'm just saying it to get your attention.
+ </p><p>Because the C++ library includes the C library, both C-style and
+ C++-style I/O have to work at the same time. For example:
+ </p><pre class="programlisting">
+ #include &lt;iostream&gt;
+ #include &lt;cstdio&gt;
+
+ std::cout &lt;&lt; "Hel";
+ std::printf ("lo, worl");
+ std::cout &lt;&lt; "d!\n";
+ </pre><p>This must do what you think it does.
+ </p><p>Alert members of the audience will immediately notice that buffering
+ is going to make a hash of the output unless special steps are taken.
+ </p><p>The special steps taken by libstdc++, at least for version 3.0,
+ involve doing very little buffering for the standard streams, leaving
+ most of the buffering to the underlying C library. (This kind of
+ thing is tricky to get right.)
+ The upside is that correctness is ensured. The downside is that
+ writing through <code class="code">cout</code> can quite easily lead to awful
+ performance when the C++ I/O library is layered on top of the C I/O
+ library (as it is for 3.0 by default). Some patches have been applied
+ which improve the situation for 3.1.
+ </p><p>However, the C and C++ standard streams only need to be kept in sync
+ when both libraries' facilities are in use. If your program only uses
+ C++ I/O, then there's no need to sync with the C streams. The right
+ thing to do in this case is to call
+ </p><pre class="programlisting">
+ #include <span class="emphasis"><em>any of the I/O headers such as ios, iostream, etc</em></span>
+
+ std::ios::sync_with_stdio(false);
+ </pre><p>You must do this before performing any I/O via the C++ stream objects.
+ Once you call this, the C++ streams will operate independently of the
+ (unused) C streams. For GCC 3.x, this means that <code class="code">cout</code> and
+ company will become fully buffered on their own.
+ </p><p>Note, by the way, that the synchronization requirement only applies to
+ the standard streams (<code class="code">cin</code>, <code class="code">cout</code>,
+ <code class="code">cerr</code>,
+ <code class="code">clog</code>, and their wide-character counterchapters). File stream
+ objects that you declare yourself have no such requirement and are fully
+ buffered.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. 
+ Atomics
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/iostream_objects.html b/libstdc++-v3/doc/html/manual/iostream_objects.html
deleted file mode 100644
index 1133edec3ab..00000000000
--- a/libstdc++-v3/doc/html/manual/iostream_objects.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Iostream Objects</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Part XI.  Input and Output" /><link rel="prev" href="io.html" title="Part XI.  Input and Output" /><link rel="next" href="streambufs.html" title="Chapter 25. Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Iostream Objects</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Part XI. 
- Input and Output
-
-</th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Iostream Objects"><div class="titlepage"><div><div><h2 class="title"><a id="manual.io.objects"></a>Chapter 24. Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
- only include the headers you really need. Many people simply include
- &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
- your runtime as well.</em></span> Here are some tips on which header to use
- for which situations, starting with the simplest.
- </p><p><span class="emphasis"><em>&lt;iosfwd&gt;</em></span> should be included whenever you simply
- need the <span class="emphasis"><em>name</em></span> of an I/O-related class, such as
- "ofstream" or "basic_streambuf". Like the name
- implies, these are forward declarations. (A word to all you fellow
- old school programmers: trying to forward declare classes like
- "class istream;" won't work. Look in the iosfwd header if
- you'd like to know why.) For example,
- </p><pre class="programlisting">
- #include &lt;iosfwd&gt;
-
- class MyClass
- {
- ....
- std::ifstream&amp; input_file;
- };
-
- extern std::ostream&amp; operator&lt;&lt; (std::ostream&amp;, MyClass&amp;);
- </pre><p><span class="emphasis"><em>&lt;ios&gt;</em></span> declares the base classes for the entire
- I/O stream hierarchy, std::ios_base and std::basic_ios&lt;charT&gt;, the
- counting types std::streamoff and std::streamsize, the file
- positioning type std::fpos, and the various manipulators like
- std::hex, std::fixed, std::noshowbase, and so forth.
- </p><p>The ios_base class is what holds the format flags, the state flags,
- and the functions which change them (setf(), width(), precision(),
- etc). You can also store extra data and register callback functions
- through ios_base, but that has been historically underused. Anything
- which doesn't depend on the type of characters stored is consolidated
- here.
- </p><p>The template class basic_ios is the highest template class in the
- hierarchy; it is the first one depending on the character type, and
- holds all general state associated with that type: the pointer to the
- polymorphic stream buffer, the facet information, etc.
- </p><p><span class="emphasis"><em>&lt;streambuf&gt;</em></span> declares the template class
- basic_streambuf, and two standard instantiations, streambuf and
- wstreambuf. If you need to work with the vastly useful and capable
- stream buffer classes, e.g., to create a new form of storage
- transport, this header is the one to include.
- </p><p><span class="emphasis"><em>&lt;istream&gt;</em></span>/<span class="emphasis"><em>&lt;ostream&gt;</em></span> are
- the headers to include when you are using the &gt;&gt;/&lt;&lt;
- interface, or any of the other abstract stream formatting functions.
- For example,
- </p><pre class="programlisting">
- #include &lt;istream&gt;
-
- std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, MyClass&amp; c)
- {
- return os &lt;&lt; c.data1() &lt;&lt; c.data2();
- }
- </pre><p>The std::istream and std::ostream classes are the abstract parents of
- the various concrete implementations. If you are only using the
- interfaces, then you only need to use the appropriate interface header.
- </p><p><span class="emphasis"><em>&lt;iomanip&gt;</em></span> provides "extractors and inserters
- that alter information maintained by class ios_base and its derived
- classes," such as std::setprecision and std::setw. If you need
- to write expressions like <code class="code">os &lt;&lt; setw(3);</code> or
- <code class="code">is &gt;&gt; setbase(8);</code>, you must include &lt;iomanip&gt;.
- </p><p><span class="emphasis"><em>&lt;sstream&gt;</em></span>/<span class="emphasis"><em>&lt;fstream&gt;</em></span>
- declare the six stringstream and fstream classes. As they are the
- standard concrete descendants of istream and ostream, you will already
- know about them.
- </p><p>Finally, <span class="emphasis"><em>&lt;iostream&gt;</em></span> provides the eight standard
- global objects (cin, cout, etc). To do this correctly, this header
- also provides the contents of the &lt;istream&gt; and &lt;ostream&gt;
- headers, but nothing else. The contents of this header look like
- </p><pre class="programlisting">
- #include &lt;ostream&gt;
- #include &lt;istream&gt;
-
- namespace std
- {
- extern istream cin;
- extern ostream cout;
- ....
-
- // this is explained below
- <span class="emphasis"><em>static ios_base::Init __foo;</em></span> // not its real name
- }
- </pre><p>Now, the runtime penalty mentioned previously: the global objects
- must be initialized before any of your own code uses them; this is
- guaranteed by the standard. Like any other global object, they must
- be initialized once and only once. This is typically done with a
- construct like the one above, and the nested class ios_base::Init is
- specified in the standard for just this reason.
- </p><p>How does it work? Because the header is included before any of your
- code, the <span class="emphasis"><em>__foo</em></span> object is constructed before any of
- your objects. (Global objects are built in the order in which they
- are declared, and destroyed in reverse order.) The first time the
- constructor runs, the eight stream objects are set up.
- </p><p>The <code class="code">static</code> keyword means that each object file compiled
- from a source file containing &lt;iostream&gt; will have its own
- private copy of <span class="emphasis"><em>__foo</em></span>. There is no specified order
- of construction across object files (it's one of those pesky NP
- problems that make life so interesting), so one copy in each object
- file means that the stream objects are guaranteed to be set up before
- any of your code which uses them could run, thereby meeting the
- requirements of the standard.
- </p><p>The penalty, of course, is that after the first copy of
- <span class="emphasis"><em>__foo</em></span> is constructed, all the others are just wasted
- processor time. The time spent is merely for an increment-and-test
- inside a function call, but over several dozen or hundreds of object
- files, that time can add up. (It's not in a tight loop, either.)
- </p><p>The lesson? Only include &lt;iostream&gt; when you need to use one of
- the standard objects in that source file; you'll pay less startup
- time. Only include the header files you need to in general; your
- compile times will go down when there's less parsing work to do.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part XI. 
- Input and Output
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Stream Buffers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/iterators.html b/libstdc++-v3/doc/html/manual/iterators.html
index d9a932be228..ee37ef7c713 100644
--- a/libstdc++-v3/doc/html/manual/iterators.html
+++ b/libstdc++-v3/doc/html/manual/iterators.html
@@ -1,9 +1,130 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part VIII.  Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bitset.html" title="bitset" /><link rel="next" href="bk01pt08ch19.html" title="Chapter 19. Predefined" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part VIII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
Iterators
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt08ch19.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part VIII.  Iterators"><div class="titlepage"><div><div><h1 class="title"><a id="manual.iterators"></a>Part VIII. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10.  Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
Iterators
- <a id="id678897" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="bk01pt08ch19.html">19. Predefined</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt08ch19.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect1"><a href="bk01pt08ch19s02.html">One Past the End</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt08ch19.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitset </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Predefined</td></tr></table></div></body></html>
+ <a id="id376166" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="sect1" title="Predefined"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="sect2" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
+ The following
+FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
+iterators are not implemented as pointers. They are a generalization
+of pointers, but they are implemented in libstdc++ as separate
+classes.
+ </p><p>
+ Keeping that simple fact in mind as you design your code will
+ prevent a whole lot of difficult-to-understand bugs.
+ </p><p>
+ You can think of it the other way 'round, even. Since iterators
+ are a generalization, that means
+ that <span class="emphasis"><em>pointers</em></span> are
+ <span class="emphasis"><em>iterators</em></span>, and that pointers can be used
+ whenever an iterator would be. All those functions in the
+ Algorithms sect1 of the Standard will work just as well on plain
+ arrays and their pointers.
+ </p><p>
+ That doesn't mean that when you pass in a pointer, it gets
+ wrapped into some special delegating iterator-to-pointer class
+ with a layer of overhead. (If you think that's the case
+ anywhere, you don't understand templates to begin with...) Oh,
+ no; if you pass in a pointer, then the compiler will instantiate
+ that template using T* as a type, and good old high-speed
+ pointer arithmetic as its operations, so the resulting code will
+ be doing exactly the same things as it would be doing if you had
+ hand-coded it yourself (for the 273rd time).
+ </p><p>
+ How much overhead <span class="emphasis"><em>is</em></span> there when using an
+ iterator class? Very little. Most of the layering classes
+ contain nothing but typedefs, and typedefs are
+ "meta-information" that simply tell the compiler some
+ nicknames; they don't create code. That information gets passed
+ down through inheritance, so while the compiler has to do work
+ looking up all the names, your runtime code does not. (This has
+ been a prime concern from the beginning.)
+ </p></div><div class="sect2" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
+ especially towards the end. Trust me.
+ </p><p>Beginners usually have a little trouble understand the whole
+ 'past-the-end' thing, until they remember their early algebra classes
+ (see, they <span class="emphasis"><em>told</em></span> you that stuff would come in handy!) and
+ the concept of half-open ranges.
+ </p><p>First, some history, and a reminder of some of the funkier rules in
+ C and C++ for builtin arrays. The following rules have always been
+ true for both languages:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>You can point anywhere in the array, <span class="emphasis"><em>or to the first element
+ past the end of the array</em></span>. A pointer that points to one
+ past the end of the array is guaranteed to be as unique as a
+ pointer to somewhere inside the array, so that you can compare
+ such pointers safely.
+ </p></li><li class="listitem"><p>You can only dereference a pointer that points into an array.
+ If your array pointer points outside the array -- even to just
+ one past the end -- and you dereference it, Bad Things happen.
+ </p></li><li class="listitem"><p>Strictly speaking, simply pointing anywhere else invokes
+ undefined behavior. Most programs won't puke until such a
+ pointer is actually dereferenced, but the standards leave that
+ up to the platform.
+ </p></li></ol></div><p>The reason this past-the-end addressing was allowed is to make it
+ easy to write a loop to go over an entire array, e.g.,
+ while (*d++ = *s++);.
+ </p><p>So, when you think of two pointers delimiting an array, don't think
+ of them as indexing 0 through n-1. Think of them as <span class="emphasis"><em>boundary
+ markers</em></span>:
+ </p><pre class="programlisting">
+
+ beginning end
+ | |
+ | | This is bad. Always having to
+ | | remember to add or subtract one.
+ | | Off-by-one bugs very common here.
+ V V
+ array of N elements
+ |---|---|--...--|---|---|
+ | 0 | 1 | ... |N-2|N-1|
+ |---|---|--...--|---|---|
+
+ ^ ^
+ | |
+ | | This is good. This is safe. This
+ | | is guaranteed to work. Just don't
+ | | dereference 'end'.
+ beginning end
+
+ </pre><p>See? Everything between the boundary markers is chapter of the array.
+ Simple.
+ </p><p>Now think back to your junior-high school algebra course, when you
+ were learning how to draw graphs. Remember that a graph terminating
+ with a solid dot meant, "Everything up through this point,"
+ and a graph terminating with an open dot meant, "Everything up
+ to, but not including, this point," respectively called closed
+ and open ranges? Remember how closed ranges were written with
+ brackets, <span class="emphasis"><em>[a,b]</em></span>, and open ranges were written with parentheses,
+ <span class="emphasis"><em>(a,b)</em></span>?
+ </p><p>The boundary markers for arrays describe a <span class="emphasis"><em>half-open range</em></span>,
+ starting with (and including) the first element, and ending with (but
+ not including) the last element: <span class="emphasis"><em>[beginning,end)</em></span>. See, I
+ told you it would be simple in the end.
+ </p><p>Iterators, and everything working with iterators, follows this same
+ time-honored tradition. A container's <code class="code">begin()</code> method returns
+ an iterator referring to the first element, and its <code class="code">end()</code>
+ method returns a past-the-end iterator, which is guaranteed to be
+ unique and comparable against any other iterator pointing into the
+ middle of the container.
+ </p><p>Container constructors, container methods, and algorithms, all take
+ pairs of iterators describing a range of values on which to operate.
+ All of these ranges are half-open ranges, so you pass the beginning
+ iterator as the starting parameter, and the one-past-the-end iterator
+ as the finishing parameter.
+ </p><p>This generalizes very well. You can operate on sub-ranges quite
+ easily this way; functions accepting a <span class="emphasis"><em>[first,last)</em></span> range
+ don't know or care whether they are the boundaries of an entire {array,
+ sequence, container, whatever}, or whether they only enclose a few
+ elements from the center. This approach also makes zero-length
+ sequences very simple to recognize: if the two endpoints compare
+ equal, then the {array, sequence, container, whatever} is empty.
+ </p><p>Just don't dereference <code class="code">end()</code>.
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. 
+ Algorithms
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/license.html b/libstdc++-v3/doc/html/manual/license.html
index f660ff378a0..9029df21735 100644
--- a/libstdc++-v3/doc/html/manual/license.html
+++ b/libstdc++-v3/doc/html/manual/license.html
@@ -2,7 +2,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="License"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
There are two licenses affecting GNU libstdc++: one for the code,
- and one for the documentation.
+ and one for the documentation.
</p><p>
There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license" title="License">questions</a>. If you have more
questions, ask the FSF or the <a class="ulink" href="http://gcc.gnu.org/lists.html" target="_top">gcc mailing list</a>.
@@ -92,9 +92,9 @@ requirements of the license of GCC.<br />
the web, excluding the pages generated from source comments, are
copyrighted by the Free Software Foundation, and placed under the
<a class="link" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License"> GNU Free Documentation
- License version 1.2</a>. There are no Front-Cover Texts, no
+ License version 1.3</a>. There are no Front-Cover Texts, no
Back-Cover Texts, and no Invariant Sections.
- </p><p>
+ </p><p>
For documentation generated by doxygen or other automated tools
via processing source code comments and markup, the original source
code license applies to the generated files. Thus, the doxygen
diff --git a/libstdc++-v3/doc/html/manual/locales.html b/libstdc++-v3/doc/html/manual/locales.html
deleted file mode 100644
index 040f79f2103..00000000000
--- a/libstdc++-v3/doc/html/manual/locales.html
+++ /dev/null
@@ -1,428 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14. Locales</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="localization.html" title="Part VI.  Localization" /><link rel="prev" href="localization.html" title="Part VI.  Localization" /><link rel="next" href="facets.html" title="Chapter 15. Facets aka Categories" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Locales</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Part VI. 
- Localization
-
-</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14. Locales"><div class="titlepage"><div><div><h2 class="title"><a id="manual.localization.locales"></a>Chapter 14. Locales</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="locales.html#manual.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="sect2"><a href="locales.html#locales.locale.req">Requirements</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.design">Design</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></div><div class="sect1" title="locale"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.locales.locale"></a>locale</h2></div></div></div><p>
-Describes the basic locale object, including nested
-classes id, facet, and the reference-counted implementation object,
-class _Impl.
-</p><div class="sect2" title="Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.req"></a>Requirements</h3></div></div></div><p>
-Class locale is non-templatized and has two distinct types nested
-inside of it:
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
-class facet
-22.1.1.1.2 Class locale::facet
-</em></span>
-</p></blockquote></div><p>
-Facets actually implement locale functionality. For instance, a facet
-called numpunct is the data object that can be used to query for the
-thousands separator in the locale.
-</p><p>
-Literally, a facet is strictly defined:
-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Containing the following public data member:
- </p><p>
- <code class="code">static locale::id id;</code>
- </p></li><li class="listitem"><p>
- Derived from another facet:
- </p><p>
- <code class="code">class gnu_codecvt: public std::ctype&lt;user-defined-type&gt;</code>
- </p></li></ul></div><p>
-Of interest in this class are the memory management options explicitly
-specified as an argument to facet's constructor. Each constructor of a
-facet class takes a std::size_t __refs argument: if __refs == 0, the
-facet is deleted when the locale containing it is destroyed. If __refs
-== 1, the facet is not destroyed, even when it is no longer
-referenced.
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
-class id
-22.1.1.1.3 - Class locale::id
-</em></span>
-</p></blockquote></div><p>
-Provides an index for looking up specific facets.
-</p></div><div class="sect2" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.design"></a>Design</h3></div></div></div><p>
-The major design challenge is fitting an object-orientated and
-non-global locale design on top of POSIX and other relevant standards,
-which include the Single Unix (nee X/Open.)
-</p><p>
-Because C and earlier versions of POSIX fall down so completely,
-portability is an issue.
-</p></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h4 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- <code class="code">`locale -a`</code> displays available locales.
- </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
-af_ZA
-ar_AE
-ar_AE.utf8
-ar_BH
-ar_BH.utf8
-ar_DZ
-ar_DZ.utf8
-ar_EG
-ar_EG.utf8
-ar_IN
-ar_IQ
-ar_IQ.utf8
-ar_JO
-ar_JO.utf8
-ar_KW
-ar_KW.utf8
-ar_LB
-ar_LB.utf8
-ar_LY
-ar_LY.utf8
-ar_MA
-ar_MA.utf8
-ar_OM
-ar_OM.utf8
-ar_QA
-ar_QA.utf8
-ar_SA
-ar_SA.utf8
-ar_SD
-ar_SD.utf8
-ar_SY
-ar_SY.utf8
-ar_TN
-ar_TN.utf8
-ar_YE
-ar_YE.utf8
-be_BY
-be_BY.utf8
-bg_BG
-bg_BG.utf8
-br_FR
-bs_BA
-C
-ca_ES
-ca_ES@euro
-ca_ES.utf8
-ca_ES.utf8@euro
-cs_CZ
-cs_CZ.utf8
-cy_GB
-da_DK
-da_DK.iso885915
-da_DK.utf8
-de_AT
-de_AT@euro
-de_AT.utf8
-de_AT.utf8@euro
-de_BE
-de_BE@euro
-de_BE.utf8
-de_BE.utf8@euro
-de_CH
-de_CH.utf8
-de_DE
-de_DE@euro
-de_DE.utf8
-de_DE.utf8@euro
-de_LU
-de_LU@euro
-de_LU.utf8
-de_LU.utf8@euro
-el_GR
-el_GR.utf8
-en_AU
-en_AU.utf8
-en_BW
-en_BW.utf8
-en_CA
-en_CA.utf8
-en_DK
-en_DK.utf8
-en_GB
-en_GB.iso885915
-en_GB.utf8
-en_HK
-en_HK.utf8
-en_IE
-en_IE@euro
-en_IE.utf8
-en_IE.utf8@euro
-en_IN
-en_NZ
-en_NZ.utf8
-en_PH
-en_PH.utf8
-en_SG
-en_SG.utf8
-en_US
-en_US.iso885915
-en_US.utf8
-en_ZA
-en_ZA.utf8
-en_ZW
-en_ZW.utf8
-es_AR
-es_AR.utf8
-es_BO
-es_BO.utf8
-es_CL
-es_CL.utf8
-es_CO
-es_CO.utf8
-es_CR
-es_CR.utf8
-es_DO
-es_DO.utf8
-es_EC
-es_EC.utf8
-es_ES
-es_ES@euro
-es_ES.utf8
-es_ES.utf8@euro
-es_GT
-es_GT.utf8
-es_HN
-es_HN.utf8
-es_MX
-es_MX.utf8
-es_NI
-es_NI.utf8
-es_PA
-es_PA.utf8
-es_PE
-es_PE.utf8
-es_PR
-es_PR.utf8
-es_PY
-es_PY.utf8
-es_SV
-es_SV.utf8
-es_US
-es_US.utf8
-es_UY
-es_UY.utf8
-es_VE
-es_VE.utf8
-et_EE
-et_EE.utf8
-eu_ES
-eu_ES@euro
-eu_ES.utf8
-eu_ES.utf8@euro
-fa_IR
-fi_FI
-fi_FI@euro
-fi_FI.utf8
-fi_FI.utf8@euro
-fo_FO
-fo_FO.utf8
-fr_BE
-fr_BE@euro
-fr_BE.utf8
-fr_BE.utf8@euro
-fr_CA
-fr_CA.utf8
-fr_CH
-fr_CH.utf8
-fr_FR
-fr_FR@euro
-fr_FR.utf8
-fr_FR.utf8@euro
-fr_LU
-fr_LU@euro
-fr_LU.utf8
-fr_LU.utf8@euro
-ga_IE
-ga_IE@euro
-ga_IE.utf8
-ga_IE.utf8@euro
-gl_ES
-gl_ES@euro
-gl_ES.utf8
-gl_ES.utf8@euro
-gv_GB
-gv_GB.utf8
-he_IL
-he_IL.utf8
-hi_IN
-hr_HR
-hr_HR.utf8
-hu_HU
-hu_HU.utf8
-id_ID
-id_ID.utf8
-is_IS
-is_IS.utf8
-it_CH
-it_CH.utf8
-it_IT
-it_IT@euro
-it_IT.utf8
-it_IT.utf8@euro
-iw_IL
-iw_IL.utf8
-ja_JP.eucjp
-ja_JP.utf8
-ka_GE
-kl_GL
-kl_GL.utf8
-ko_KR.euckr
-ko_KR.utf8
-kw_GB
-kw_GB.utf8
-lt_LT
-lt_LT.utf8
-lv_LV
-lv_LV.utf8
-mi_NZ
-mk_MK
-mk_MK.utf8
-mr_IN
-ms_MY
-ms_MY.utf8
-mt_MT
-mt_MT.utf8
-nl_BE
-nl_BE@euro
-nl_BE.utf8
-nl_BE.utf8@euro
-nl_NL
-nl_NL@euro
-nl_NL.utf8
-nl_NL.utf8@euro
-nn_NO
-nn_NO.utf8
-no_NO
-no_NO.utf8
-oc_FR
-pl_PL
-pl_PL.utf8
-POSIX
-pt_BR
-pt_BR.utf8
-pt_PT
-pt_PT@euro
-pt_PT.utf8
-pt_PT.utf8@euro
-ro_RO
-ro_RO.utf8
-ru_RU
-ru_RU.koi8r
-ru_RU.utf8
-ru_UA
-ru_UA.utf8
-se_NO
-sk_SK
-sk_SK.utf8
-sl_SI
-sl_SI.utf8
-sq_AL
-sq_AL.utf8
-sr_YU
-sr_YU@cyrillic
-sr_YU.utf8
-sr_YU.utf8@cyrillic
-sv_FI
-sv_FI@euro
-sv_FI.utf8
-sv_FI.utf8@euro
-sv_SE
-sv_SE.iso885915
-sv_SE.utf8
-ta_IN
-te_IN
-tg_TJ
-th_TH
-th_TH.utf8
-tl_PH
-tr_TR
-tr_TR.utf8
-uk_UA
-uk_UA.utf8
-ur_PK
-uz_UZ
-vi_VN
-vi_VN.tcvn
-wa_BE
-wa_BE@euro
-yi_US
-zh_CN
-zh_CN.gb18030
-zh_CN.gbk
-zh_CN.utf8
-zh_HK
-zh_HK.utf8
-zh_TW
-zh_TW.euctw
-zh_TW.utf8
-</pre></blockquote></div></li><li class="listitem"><p>
- <code class="code">`locale`</code> displays environmental variables that
- impact how locale("") will be deduced.
- </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
-LANG=en_US
-LC_CTYPE="en_US"
-LC_NUMERIC="en_US"
-LC_TIME="en_US"
-LC_COLLATE="en_US"
-LC_MONETARY="en_US"
-LC_MESSAGES="en_US"
-LC_PAPER="en_US"
-LC_NAME="en_US"
-LC_ADDRESS="en_US"
-LC_TELEPHONE="en_US"
-LC_MEASUREMENT="en_US"
-LC_IDENTIFICATION="en_US"
-LC_ALL=
-</pre></blockquote></div></li></ul></div><p>
-From Josuttis, p. 697-698, which says, that "there is only *one*
-relation (of the C++ locale mechanism) to the C locale mechanism: the
-global C locale is modified if a named C++ locale object is set as the
-global locale" (emphasis Paolo), that is:
-</p><pre class="programlisting">std::locale::global(std::locale(""));</pre><p>affects the C functions as if the following call was made:</p><pre class="programlisting">std::setlocale(LC_ALL, "");</pre><p>
- On the other hand, there is *no* vice versa, that is, calling
- setlocale has *no* whatsoever on the C++ locale mechanism, in
- particular on the working of locale(""), which constructs the locale
- object from the environment of the running program, that is, in
- practice, the set of LC_ALL, LANG, etc. variable of the shell.
-</p></div></div><div class="sect2" title="Future"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.future"></a>Future</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Locale initialization: at what point does _S_classic, _S_global
- get initialized? Can named locales assume this initialization
- has already taken place?
- </p></li><li class="listitem"><p>
- Document how named locales error check when filling data
- members. I.e., a fr_FR locale that doesn't have
- numpunct::truename(): does it use "true"? Or is it a blank
- string? What's the convention?
- </p></li><li class="listitem"><p>
- Explain how locale aliasing happens. When does "de_DE" use "de"
- information? What is the rule for locales composed of just an
- ISO language code (say, "de") and locales with both an ISO
- language code and ISO country code (say, "de_DE").
- </p></li><li class="listitem"><p>
- What should non-required facet instantiations do? If the
- generic implementation is provided, then how to end-users
- provide specializations?
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id645730"></a><p><span class="title"><i>
- The GNU C Library
- </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry" title="Correspondence"><a id="id610693"></a><p><span class="title"><i>
- Correspondence
- </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id638635"></a><p><span class="title"><i>
- ISO/IEC 14882:1998 Programming languages - C++
- </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id617195"></a><p><span class="title"><i>
- ISO/IEC 9899:1999 Programming languages - C
- </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="id617213"></a><p><span class="title"><i>
- The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
- </i>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid">
- <a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id713713"></a><p><span class="title"><i>
- The C++ Programming Language, Special Edition
- </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
- Addison Wesley
- . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id653680"></a><p><span class="title"><i>
- Standard C++ IOStreams and Locales
- </i>. </span><span class="subtitle">
- Advanced Programmer's Guide and Reference
- . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
- Addison Wesley Longman
- . </span></span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="localization.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part VI. 
- Localization
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. Facets aka Categories</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/localization.html b/libstdc++-v3/doc/html/manual/localization.html
index 76d7c37db95..fa1d5f39945 100644
--- a/libstdc++-v3/doc/html/manual/localization.html
+++ b/libstdc++-v3/doc/html/manual/localization.html
@@ -1,9 +1,439 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part VI.  Localization</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt05ch13s06.html" title="CString (MFC)" /><link rel="next" href="locales.html" title="Chapter 14. Locales" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part VI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
Localization
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s06.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="locales.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part VI.  Localization"><div class="titlepage"><div><div><h1 class="title"><a id="manual.localization"></a>Part VI. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8.  Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
Localization
- <a id="id655346" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="locales.html">14. Locales</a></span></dt><dd><dl><dt><span class="sect1"><a href="locales.html#manual.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="sect2"><a href="locales.html#locales.locale.req">Requirements</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.design">Design</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="facets.html">15. Facets aka Categories</a></span></dt><dd><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="locales.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">CString (MFC) </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. Locales</td></tr></table></div></body></html>
+ <a id="id492578" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></div><div class="section" title="Locales"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
+Describes the basic locale object, including nested
+classes id, facet, and the reference-counted implementation object,
+class _Impl.
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
+Class locale is non-templatized and has two distinct types nested
+inside of it:
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+class facet
+22.1.1.1.2 Class locale::facet
+</em></span>
+</p></blockquote></div><p>
+Facets actually implement locale functionality. For instance, a facet
+called numpunct is the data object that can be used to query for the
+thousands separator in the locale.
+</p><p>
+Literally, a facet is strictly defined:
+</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Containing the following public data member:
+ </p><p>
+ <code class="code">static locale::id id;</code>
+ </p></li><li class="listitem"><p>
+ Derived from another facet:
+ </p><p>
+ <code class="code">class gnu_codecvt: public std::ctype&lt;user-defined-type&gt;</code>
+ </p></li></ul></div><p>
+Of interest in this class are the memory management options explicitly
+specified as an argument to facet's constructor. Each constructor of a
+facet class takes a std::size_t __refs argument: if __refs == 0, the
+facet is deleted when the locale containing it is destroyed. If __refs
+== 1, the facet is not destroyed, even when it is no longer
+referenced.
+</p><div class="blockquote"><blockquote class="blockquote"><p>
+<span class="emphasis"><em>
+class id
+22.1.1.1.3 - Class locale::id
+</em></span>
+</p></blockquote></div><p>
+Provides an index for looking up specific facets.
+</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
+The major design challenge is fitting an object-orientated and
+non-global locale design on top of POSIX and other relevant standards,
+which include the Single Unix (nee X/Open.)
+</p><p>
+Because C and earlier versions of POSIX fall down so completely,
+portability is an issue.
+</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <code class="code">`locale -a`</code> displays available locales.
+ </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
+af_ZA
+ar_AE
+ar_AE.utf8
+ar_BH
+ar_BH.utf8
+ar_DZ
+ar_DZ.utf8
+ar_EG
+ar_EG.utf8
+ar_IN
+ar_IQ
+ar_IQ.utf8
+ar_JO
+ar_JO.utf8
+ar_KW
+ar_KW.utf8
+ar_LB
+ar_LB.utf8
+ar_LY
+ar_LY.utf8
+ar_MA
+ar_MA.utf8
+ar_OM
+ar_OM.utf8
+ar_QA
+ar_QA.utf8
+ar_SA
+ar_SA.utf8
+ar_SD
+ar_SD.utf8
+ar_SY
+ar_SY.utf8
+ar_TN
+ar_TN.utf8
+ar_YE
+ar_YE.utf8
+be_BY
+be_BY.utf8
+bg_BG
+bg_BG.utf8
+br_FR
+bs_BA
+C
+ca_ES
+ca_ES@euro
+ca_ES.utf8
+ca_ES.utf8@euro
+cs_CZ
+cs_CZ.utf8
+cy_GB
+da_DK
+da_DK.iso885915
+da_DK.utf8
+de_AT
+de_AT@euro
+de_AT.utf8
+de_AT.utf8@euro
+de_BE
+de_BE@euro
+de_BE.utf8
+de_BE.utf8@euro
+de_CH
+de_CH.utf8
+de_DE
+de_DE@euro
+de_DE.utf8
+de_DE.utf8@euro
+de_LU
+de_LU@euro
+de_LU.utf8
+de_LU.utf8@euro
+el_GR
+el_GR.utf8
+en_AU
+en_AU.utf8
+en_BW
+en_BW.utf8
+en_CA
+en_CA.utf8
+en_DK
+en_DK.utf8
+en_GB
+en_GB.iso885915
+en_GB.utf8
+en_HK
+en_HK.utf8
+en_IE
+en_IE@euro
+en_IE.utf8
+en_IE.utf8@euro
+en_IN
+en_NZ
+en_NZ.utf8
+en_PH
+en_PH.utf8
+en_SG
+en_SG.utf8
+en_US
+en_US.iso885915
+en_US.utf8
+en_ZA
+en_ZA.utf8
+en_ZW
+en_ZW.utf8
+es_AR
+es_AR.utf8
+es_BO
+es_BO.utf8
+es_CL
+es_CL.utf8
+es_CO
+es_CO.utf8
+es_CR
+es_CR.utf8
+es_DO
+es_DO.utf8
+es_EC
+es_EC.utf8
+es_ES
+es_ES@euro
+es_ES.utf8
+es_ES.utf8@euro
+es_GT
+es_GT.utf8
+es_HN
+es_HN.utf8
+es_MX
+es_MX.utf8
+es_NI
+es_NI.utf8
+es_PA
+es_PA.utf8
+es_PE
+es_PE.utf8
+es_PR
+es_PR.utf8
+es_PY
+es_PY.utf8
+es_SV
+es_SV.utf8
+es_US
+es_US.utf8
+es_UY
+es_UY.utf8
+es_VE
+es_VE.utf8
+et_EE
+et_EE.utf8
+eu_ES
+eu_ES@euro
+eu_ES.utf8
+eu_ES.utf8@euro
+fa_IR
+fi_FI
+fi_FI@euro
+fi_FI.utf8
+fi_FI.utf8@euro
+fo_FO
+fo_FO.utf8
+fr_BE
+fr_BE@euro
+fr_BE.utf8
+fr_BE.utf8@euro
+fr_CA
+fr_CA.utf8
+fr_CH
+fr_CH.utf8
+fr_FR
+fr_FR@euro
+fr_FR.utf8
+fr_FR.utf8@euro
+fr_LU
+fr_LU@euro
+fr_LU.utf8
+fr_LU.utf8@euro
+ga_IE
+ga_IE@euro
+ga_IE.utf8
+ga_IE.utf8@euro
+gl_ES
+gl_ES@euro
+gl_ES.utf8
+gl_ES.utf8@euro
+gv_GB
+gv_GB.utf8
+he_IL
+he_IL.utf8
+hi_IN
+hr_HR
+hr_HR.utf8
+hu_HU
+hu_HU.utf8
+id_ID
+id_ID.utf8
+is_IS
+is_IS.utf8
+it_CH
+it_CH.utf8
+it_IT
+it_IT@euro
+it_IT.utf8
+it_IT.utf8@euro
+iw_IL
+iw_IL.utf8
+ja_JP.eucjp
+ja_JP.utf8
+ka_GE
+kl_GL
+kl_GL.utf8
+ko_KR.euckr
+ko_KR.utf8
+kw_GB
+kw_GB.utf8
+lt_LT
+lt_LT.utf8
+lv_LV
+lv_LV.utf8
+mi_NZ
+mk_MK
+mk_MK.utf8
+mr_IN
+ms_MY
+ms_MY.utf8
+mt_MT
+mt_MT.utf8
+nl_BE
+nl_BE@euro
+nl_BE.utf8
+nl_BE.utf8@euro
+nl_NL
+nl_NL@euro
+nl_NL.utf8
+nl_NL.utf8@euro
+nn_NO
+nn_NO.utf8
+no_NO
+no_NO.utf8
+oc_FR
+pl_PL
+pl_PL.utf8
+POSIX
+pt_BR
+pt_BR.utf8
+pt_PT
+pt_PT@euro
+pt_PT.utf8
+pt_PT.utf8@euro
+ro_RO
+ro_RO.utf8
+ru_RU
+ru_RU.koi8r
+ru_RU.utf8
+ru_UA
+ru_UA.utf8
+se_NO
+sk_SK
+sk_SK.utf8
+sl_SI
+sl_SI.utf8
+sq_AL
+sq_AL.utf8
+sr_YU
+sr_YU@cyrillic
+sr_YU.utf8
+sr_YU.utf8@cyrillic
+sv_FI
+sv_FI@euro
+sv_FI.utf8
+sv_FI.utf8@euro
+sv_SE
+sv_SE.iso885915
+sv_SE.utf8
+ta_IN
+te_IN
+tg_TJ
+th_TH
+th_TH.utf8
+tl_PH
+tr_TR
+tr_TR.utf8
+uk_UA
+uk_UA.utf8
+ur_PK
+uz_UZ
+vi_VN
+vi_VN.tcvn
+wa_BE
+wa_BE@euro
+yi_US
+zh_CN
+zh_CN.gb18030
+zh_CN.gbk
+zh_CN.utf8
+zh_HK
+zh_HK.utf8
+zh_TW
+zh_TW.euctw
+zh_TW.utf8
+</pre></blockquote></div></li><li class="listitem"><p>
+ <code class="code">`locale`</code> displays environmental variables that
+ impact how locale("") will be deduced.
+ </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
+LANG=en_US
+LC_CTYPE="en_US"
+LC_NUMERIC="en_US"
+LC_TIME="en_US"
+LC_COLLATE="en_US"
+LC_MONETARY="en_US"
+LC_MESSAGES="en_US"
+LC_PAPER="en_US"
+LC_NAME="en_US"
+LC_ADDRESS="en_US"
+LC_TELEPHONE="en_US"
+LC_MEASUREMENT="en_US"
+LC_IDENTIFICATION="en_US"
+LC_ALL=
+</pre></blockquote></div></li></ul></div><p>
+From Josuttis, p. 697-698, which says, that "there is only *one*
+relation (of the C++ locale mechanism) to the C locale mechanism: the
+global C locale is modified if a named C++ locale object is set as the
+global locale" (emphasis Paolo), that is:
+</p><pre class="programlisting">std::locale::global(std::locale(""));</pre><p>affects the C functions as if the following call was made:</p><pre class="programlisting">std::setlocale(LC_ALL, "");</pre><p>
+ On the other hand, there is *no* vice versa, that is, calling
+ setlocale has *no* whatsoever on the C++ locale mechanism, in
+ particular on the working of locale(""), which constructs the locale
+ object from the environment of the running program, that is, in
+ practice, the set of LC_ALL, LANG, etc. variable of the shell.
+</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ Locale initialization: at what point does _S_classic, _S_global
+ get initialized? Can named locales assume this initialization
+ has already taken place?
+ </p></li><li class="listitem"><p>
+ Document how named locales error check when filling data
+ members. I.e., a fr_FR locale that doesn't have
+ numpunct::truename(): does it use "true"? Or is it a blank
+ string? What's the convention?
+ </p></li><li class="listitem"><p>
+ Explain how locale aliasing happens. When does "de_DE" use "de"
+ information? What is the rule for locales composed of just an
+ ISO language code (say, "de") and locales with both an ISO
+ language code and ISO country code (say, "de_DE").
+ </p></li><li class="listitem"><p>
+ What should non-required facet instantiations do? If the
+ generic implementation is provided, then how to end-users
+ provide specializations?
+ </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id469670"></a><p><span class="title"><i>
+ The GNU C Library
+ </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
+ Chapters 6 Character Set Handling and 7 Locales and
+ Internationalization
+ . </span></p></div><div class="biblioentry" title="Correspondence"><a id="id506284"></a><p><span class="title"><i>
+ Correspondence
+ </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id404778"></a><p><span class="title"><i>
+ ISO/IEC 14882:1998 Programming languages - C++
+ </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id404796"></a><p><span class="title"><i>
+ ISO/IEC 9899:1999 Programming languages - C
+ </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id415109"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.opengroup.org/austin" target="_top">
+ <em class="citetitle">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </em>
+ </a>
+ . </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id376691"></a><p><span class="title"><i>
+ The C++ Programming Language, Special Edition
+ </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ Addison Wesley
+ . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id349259"></a><p><span class="title"><i>
+ Standard C++ IOStreams and Locales
+ </i>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
+ Addison Wesley Longman
+ . </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. 
+ Strings
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/make.html b/libstdc++-v3/doc/html/manual/make.html
index d3066e93934..fb6d3a3f368 100644
--- a/libstdc++-v3/doc/html/manual/make.html
+++ b/libstdc++-v3/doc/html/manual/make.html
@@ -4,6 +4,6 @@
<a class="ulink" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
<span class="emphasis"><em>Twice.</em></span>
- </p><p>Then type:<span class="command"><strong>make</strong></span>, and congratulations, you're
+ </p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
started to build.
</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/memory.html b/libstdc++-v3/doc/html/manual/memory.html
index 18db2d502bf..92e8b7f471e 100644
--- a/libstdc++-v3/doc/html/manual/memory.html
+++ b/libstdc++-v3/doc/html/manual/memory.html
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11. Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Part IV.  Utilities" /><link rel="prev" href="pairs.html" title="Chapter 10. Pairs" /><link rel="next" href="auto_ptr.html" title="auto_ptr" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td width="20%" align="right"> <a accesskey="n" href="auto_ptr.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11. Memory"><div class="titlepage"><div><div><h2 class="title"><a id="manual.util.memory"></a>Chapter 11. Memory</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
Memory contains three general areas. First, function and operator
calls via <code class="function">new</code> and <code class="function">delete</code>
operator or member function calls. Second, allocation via
<code class="classname">allocator</code>. And finally, smart pointer and
intelligent pointer abstractions.
- </p><div class="sect1" title="Allocators"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.util.memory.allocator"></a>Allocators</h2></div></div></div><p>
+ </p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
Memory management for Standard Library entities is encapsulated in a
class template called <code class="classname">allocator</code>. The
<code class="classname">allocator</code> abstraction is used throughout the
@@ -17,7 +17,7 @@
algorithms, and parts of iostreams. This class, and base classes of
it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>â€</span>)
management classes.
-</p><div class="sect2" title="Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.req"></a>Requirements</h3></div></div></div><p>
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
The C++ standard only gives a few directives in this area:
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
When you add elements to a container, and the container must
@@ -32,9 +32,9 @@
container-of-T is <code class="classname">allocator&lt;T&gt;</code>.
</p></li><li class="listitem"><p>
The interface of the <code class="classname">allocator&lt;T&gt;</code> class is
- extremely simple. It has about 20 public declarations (nested
- typedefs, member functions, etc), but the two which concern us most
- are:
+ extremely simple. It has about 20 public declarations (nested
+ typedefs, member functions, etc), but the two which concern us most
+ are:
</p><pre class="programlisting">
T* allocate (size_type n, const void* hint = 0);
void deallocate (T* p, size_type n);
@@ -43,18 +43,18 @@
functions is a <span class="emphasis"><em>count</em></span> of the number of
<span class="type">T</span>'s to allocate space for, <span class="emphasis"><em>not their
total size</em></span>.
- (This is a simplification; the real signatures use nested typedefs.)
+ (This is a simplification; the real signatures use nested typedefs.)
</p></li><li class="listitem"><p>
The storage is obtained by calling <code class="function">::operator
new</code>, but it is unspecified when or how
- often this function is called. The use of the
+ often this function is called. The use of the
<code class="varname">hint</code> is unspecified, but intended as an
aid to locality if an implementation so
desires. <code class="constant">[20.4.1.1]/6</code>
- </p></li></ul></div><p>
+ </p></li></ul></div><p>
Complete details can be found in the C++ standard, look in
<code class="constant">[20.4 Memory]</code>.
- </p></div><div class="sect2" title="Design Issues"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.design_issues"></a>Design Issues</h3></div></div></div><p>
+ </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
The easiest way of fulfilling the requirements is to call
<code class="function">operator new</code> each time a container needs
memory, and to call <code class="function">operator delete</code> each time
@@ -67,7 +67,7 @@
while <code class="classname">__gnu_cxx::malloc_allocator</code>
implements much the same thing, only with the C language functions
<code class="function">std::malloc</code> and <code class="function">free</code>.
- </p><p>
+ </p><p>
Another approach is to use intelligence within the allocator
class to cache allocations. This extra machinery can take a variety
of forms: a bitmap index, an index into an exponentially increasing
@@ -93,33 +93,33 @@
or loading and unloading shared objects in memory. As such, using
caching allocators on systems that do not support
<code class="function">abi::__cxa_atexit</code> is not recommended.
- </p></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Interface Design"><div class="titlepage"><div><div><h4 class="title"><a id="id630442"></a>Interface Design</h4></div></div></div><p>
+ </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="id377805"></a>Interface Design</h5></div></div></div><p>
The only allocator interface that
is supported is the standard C++ interface. As such, all STL
containers have been adjusted, and all external allocators have
- been modified to support this change.
- </p><p>
+ been modified to support this change.
+ </p><p>
The class <code class="classname">allocator</code> just has typedef,
constructor, and rebind members. It inherits from one of the
high-speed extension allocators, covered below. Thus, all
allocation and deallocation depends on the base class.
- </p><p>
+ </p><p>
The base class that <code class="classname">allocator</code> is derived from
may not be user-configurable.
-</p></div><div class="sect3" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h4 class="title"><a id="id637894"></a>Selecting Default Allocation Policy</h4></div></div></div><p>
+</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id406368"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
It's difficult to pick an allocation strategy that will provide
maximum utility, without excessively penalizing some behavior. In
fact, it's difficult just deciding which typical actions to measure
for speed.
- </p><p>
+ </p><p>
Three synthetic benchmarks have been created that provide data
that is used to compare different C++ allocators. These tests are:
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
- Insertion.
+ Insertion.
</p><p>
Over multiple iterations, various STL container
objects have elements inserted to some maximum amount. A variety
- of allocators are tested.
+ of allocators are tested.
Test source for <a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup" target="_top">sequence</a>
and <a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup" target="_top">associative</a>
containers.
@@ -128,22 +128,22 @@
</p><p>
This test shows the ability of the allocator to reclaim memory
on a per-thread basis, as well as measuring thread contention
- for memory resources.
- Test source
+ for memory resources.
+ Test source
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup" target="_top">here</a>.
</p></li><li class="listitem"><p>
A threaded producer/consumer model.
</p><p>
Test source for
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup" target="_top">sequence</a>
- and
+ and
<a class="ulink" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup" target="_top">associative</a>
containers.
</p></li></ol></div><p>
The current default choice for
<code class="classname">allocator</code> is
<code class="classname">__gnu_cxx::new_allocator</code>.
- </p></div><div class="sect3" title="Disabling Memory Caching"><div class="titlepage"><div><div><h4 class="title"><a id="id629596"></a>Disabling Memory Caching</h4></div></div></div><p>
+ </p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="id394979"></a>Disabling Memory Caching</h5></div></div></div><p>
In use, <code class="classname">allocator</code> may allocate and
deallocate using implementation-specified strategies and
heuristics. Because of this, every call to an allocator object's
@@ -151,13 +151,13 @@
call the global operator new. This situation is also duplicated
for calls to the <code class="function">deallocate</code> member
function.
- </p><p>
- This can be confusing.
- </p><p>
+ </p><p>
+ This can be confusing.
+ </p><p>
In particular, this can make debugging memory errors more
difficult, especially when using third party tools like valgrind or
debug versions of <code class="function">new</code>.
- </p><p>
+ </p><p>
There are various ways to solve this problem. One would be to use
a custom allocator that just called operators
<code class="function">new</code> and <code class="function">delete</code>
@@ -179,7 +179,7 @@
environment, it likely means that you linked against objects
built against the older library (objects which might still using the
cached allocations...).
- </p></div></div><div class="sect2" title="Using a Specific Allocator"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h3></div></div></div><p>
+ </p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
You can specify different memory management schemes on a
per-container basis, by overriding the default
<span class="type">Allocator</span> template parameter. For example, an easy
@@ -190,16 +190,16 @@
Likewise, a debugging form of whichever allocator is currently in use:
</p><pre class="programlisting">
std::deque &lt;int, __gnu_cxx::debug_allocator&lt;std::allocator&lt;int&gt; &gt; &gt; debug_deque;
- </pre></div><div class="sect2" title="Custom Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.custom"></a>Custom Allocators</h3></div></div></div><p>
+ </pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
Writing a portable C++ allocator would dictate that the interface
would look much like the one specified for
<code class="classname">allocator</code>. Additional member functions, but
not subtractions, would be permissible.
- </p><p>
+ </p><p>
Probably the best place to start would be to copy one of the
- extension allocators: say a simple one like
+ extension allocators: say a simple one like
<code class="classname">new_allocator</code>.
- </p></div><div class="sect2" title="Extension Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.ext"></a>Extension Allocators</h3></div></div></div><p>
+ </p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
Several other allocators are provided as part of this
implementation. The location of the extension allocators and their
names have changed, but in all cases, functionality is
@@ -237,7 +237,7 @@
startup. For usage examples, please consult the testsuite.
</p></li><li class="listitem"><p>
<code class="classname">debug_allocator</code>
- </p><p>
+ </p><p>
A wrapper around an arbitrary allocator A. It passes on
slightly increased size requests to A, and uses the extra
memory to store size information. When a pointer is passed
@@ -246,13 +246,13 @@
guarantee they match.
</p></li><li class="listitem"><p>
<code class="classname">throw_allocator</code>
- </p><p>
+ </p><p>
Includes memory tracking and marking abilities as well as hooks for
throwing exceptions at configurable intervals (including random,
- all, none).
+ all, none).
</p></li><li class="listitem"><p>
<code class="classname">__pool_alloc</code>
- </p><p>
+ </p><p>
A high-performance, single pool allocator. The reusable
memory is shared among identical instantiations of this type.
It calls through <code class="function">::operator new</code> to
@@ -261,7 +261,7 @@
size, then the pool is bypassed, and the allocate/deallocate
request is passed to <code class="function">::operator new</code>
directly.
- </p><p>
+ </p><p>
Older versions of this class take a boolean template
parameter, called <code class="varname">thr</code>, and an integer template
parameter, called <code class="varname">inst</code>.
@@ -308,39 +308,416 @@
A high-performance allocator that uses a bit-map to keep track
of the used and unused memory locations. It has its own
documentation, found <a class="link" href="bitmap_allocator.html" title="bitmap_allocator">here</a>.
- </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id616986"></a><p><span class="title"><i>
- ISO/IEC 14882:1998 Programming languages - C++
+ </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id399256"></a><p><span class="title"><i>
+ ISO/IEC 14882:1998 Programming languages - C++
</i>. </span>
isoc++_1998
- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry" title="The Standard Librarian: What Are Allocators Good"><a id="id617001"></a><p><span class="title"><i>The Standard Librarian: What Are Allocators Good
- </i>. </span>
- austernm
- <span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
- C/C++ Users Journal
- . </span></span><span class="biblioid">
- <a class="ulink" href="http://www.cuj.com/documents/s=8000/cujcexp1812austern/" target="_top">
+ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id399271"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.drdobbs.com/cpp/184403759" target="_top">
+ <em class="citetitle">
+ The Standard Librarian: What Are Allocators Good For?
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="The Hoard Memory Allocator"><a id="id658988"></a><p><span class="title"><i>The Hoard Memory Allocator</i>. </span>
- emeryb
- <span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+ . </span></span></p></div><div class="biblioentry"><a id="id405510"></a><p><span class="biblioid">
<a class="ulink" href="http://www.cs.umass.edu/~emery/hoard/" target="_top">
+ <em class="citetitle">
+ The Hoard Memory Allocator
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Reconsidering Custom Memory Allocation"><a id="id620190"></a><p><span class="title"><i>Reconsidering Custom Memory Allocation</i>. </span>
- bergerzorn
- <span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="id451188"></a><p><span class="biblioid">
<a class="ulink" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
+ <em class="citetitle">
+ Reconsidering Custom Memory Allocation
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Allocator Types"><a id="id598997"></a><p><span class="title"><i>Allocator Types</i>. </span>
- kreftlanger
- <span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
- C/C++ Users Journal
- . </span></span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="id387032"></a><p><span class="biblioid">
<a class="ulink" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
+ <em class="citetitle">
+ Allocator Types
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="The C++ Programming Language"><a id="id683391"></a><p><span class="title"><i>The C++ Programming Language</i>. </span>
- tcpl
- <span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
+ . </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+ . </span></span></p></div><div class="biblioentry" title="The C++ Programming Language"><a id="id392077"></a><p><span class="title"><i>The C++ Programming Language</i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
Addison Wesley
- . </span></span></p></div><div class="biblioentry" title="Yalloc: A Recycling C++ Allocator"><a id="id704594"></a><p><span class="title"><i>Yalloc: A Recycling C++ Allocator</i>. </span>
- yenf
- <span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span><span class="copyright">Copyright © . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="auto_ptr.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10. Pairs </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> auto_ptr</td></tr></table></div></body></html>
+ . </span></span></p></div><div class="biblioentry" title="Yalloc: A Recycling C++ Allocator"><a id="id443714"></a><p><span class="title"><i>Yalloc: A Recycling C++ Allocator</i>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section" title="auto_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section" title="Limitations"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
+ happen with misuse of the <code class="classname">auto_ptr</code> class
+ template (called <acronym class="acronym">AP</acronym> here) would take some
+ time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
+ safely in the presence of copying has some subtleties.
+ </p><p>
+ The AP class is a really
+ nifty idea for a smart pointer, but it is one of the dumbest of
+ all the smart pointers -- and that's fine.
+ </p><p>
+ AP is not meant to be a supersmart solution to all resource
+ leaks everywhere. Neither is it meant to be an effective form
+ of garbage collection (although it can help, a little bit).
+ And it can <span class="emphasis"><em>not</em></span>be used for arrays!
+ </p><p>
+ <acronym class="acronym">AP</acronym> is meant to prevent nasty leaks in the
+ presence of exceptions. That's <span class="emphasis"><em>all</em></span>. This
+ code is AP-friendly:
+ </p><pre class="programlisting">
+ // Not a recommend naming scheme, but good for web-based FAQs.
+ typedef std::auto_ptr&lt;MyClass&gt; APMC;
+
+ extern function_taking_MyClass_pointer (MyClass*);
+ extern some_throwable_function ();
+
+ void func (int data)
+ {
+ APMC ap (new MyClass(data));
+
+ some_throwable_function(); // this will throw an exception
+
+ function_taking_MyClass_pointer (ap.get());
+ }
+ </pre><p>When an exception gets thrown, the instance of MyClass that's
+ been created on the heap will be <code class="function">delete</code>'d as the stack is
+ unwound past <code class="function">func()</code>.
+ </p><p>Changing that code as follows is not <acronym class="acronym">AP</acronym>-friendly:
+ </p><pre class="programlisting">
+ APMC ap (new MyClass[22]);
+ </pre><p>You will get the same problems as you would without the use
+ of <acronym class="acronym">AP</acronym>:
+ </p><pre class="programlisting">
+ char* array = new char[10]; // array new...
+ ...
+ delete array; // ...but single-object delete
+ </pre><p>
+ AP cannot tell whether the pointer you've passed at creation points
+ to one or many things. If it points to many things, you are about
+ to die. AP is trivial to write, however, so you could write your
+ own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
+ been done many times; check the mailing lists, Usenet, Boost, etc).
+ </p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
+ </p><p>All of the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers</a>
+ described in the standard library require their contained types
+ to have, among other things, a copy constructor like this:
+ </p><pre class="programlisting">
+ struct My_Type
+ {
+ My_Type (My_Type const&amp;);
+ };
+ </pre><p>
+ Note the const keyword; the object being copied shouldn't change.
+ The template class <code class="code">auto_ptr</code> (called AP here) does not
+ meet this requirement. Creating a new AP by copying an existing
+ one transfers ownership of the pointed-to object, which means that
+ the AP being copied must change, which in turn means that the
+ copy ctors of AP do not take const objects.
+ </p><p>
+ The resulting rule is simple: <span class="emphasis"><em>Never ever use a
+ container of auto_ptr objects</em></span>. The standard says that
+ <span class="quote">“<span class="quote">undefined</span>â€</span> behavior is the result, but it is
+ guaranteed to be messy.
+ </p><p>
+ To prevent you from doing this to yourself, the
+ <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">concept checks</a> built
+ in to this implementation will issue an error if you try to
+ compile code like this:
+ </p><pre class="programlisting">
+ #include &lt;vector&gt;
+ #include &lt;memory&gt;
+
+ void f()
+ {
+ std::vector&lt; std::auto_ptr&lt;int&gt; &gt; vec_ap_int;
+ }
+ </pre><p>
+Should you try this with the checks enabled, you will see an error.
+ </p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
+The shared_ptr class template stores a pointer, usually obtained via new,
+and implements shared ownership semantics.
+</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
+ </p><p>
+ The standard deliberately doesn't require a reference-counted
+ implementation, allowing other techniques such as a
+ circular-linked-list.
+ </p><p>
+ At the time of writing the C++0x working paper doesn't mention how
+ threads affect shared_ptr, but it is likely to follow the existing
+ practice set by <code class="classname">boost::shared_ptr</code>. The
+ shared_ptr in libstdc++ is derived from Boost's, so the same rules
+ apply.
+ </p><p>
+ </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
+The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
+project and the original authors of the code. The basic design and
+algorithms are from Boost, the notes below describe details specific to
+the GCC implementation. Names have been uglified in this implementation,
+but the design should be recognisable to anyone familiar with the Boost
+1.32 shared_ptr.
+ </p><p>
+The basic design is an abstract base class, <code class="code">_Sp_counted_base</code> that
+does the reference-counting and calls virtual functions when the count
+drops to zero.
+Derived classes override those functions to destroy resources in a context
+where the correct dynamic type is known. This is an application of the
+technique known as type erasure.
+ </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="id389991"></a>Class Hierarchy</h5></div></div></div><p>
+A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
+type <span class="type">T*</span> and an object of type
+<code class="classname">__shared_count</code>. The shared_count contains a
+pointer of type <span class="type">_Sp_counted_base*</span> which points to the
+object that maintains the reference-counts and destroys the managed
+resource.
+ </p><div class="variablelist"><dl><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
+The base of the hierarchy is parameterized on the lock policy (see below.)
+_Sp_counted_base doesn't depend on the type of pointer being managed,
+it only maintains the reference counts and calls virtual functions when
+the counts drop to zero. The managed object is destroyed when the last
+strong reference is dropped, but the _Sp_counted_base itself must exist
+until the last weak reference is dropped.
+ </p></dd><dt><span class="term"><code class="classname">_Sp_counted_base_impl&lt;Ptr, Deleter, Lp&gt;</code></span></dt><dd><p>
+Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>
+and a deleter of type <code class="code">Deleter</code>. <code class="code">_Sp_deleter</code> is
+used when the user doesn't supply a custom deleter. Unlike Boost's, this
+default deleter is not "checked" because GCC already issues a warning if
+<code class="function">delete</code> is used with an incomplete type.
+This is the only derived type used by <code class="classname">shared_ptr&lt;Ptr&gt;</code>
+and it is never used by <code class="classname">shared_ptr</code>, which uses one of
+the following types, depending on how the shared_ptr is constructed.
+ </p></dd><dt><span class="term"><code class="classname">_Sp_counted_ptr&lt;Ptr, Lp&gt;</code></span></dt><dd><p>
+Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>,
+which is passed to <code class="function">delete</code> when the last reference is dropped.
+This is the simplest form and is used when there is no custom deleter or
+allocator.
+ </p></dd><dt><span class="term"><code class="classname">_Sp_counted_deleter&lt;Ptr, Deleter, Alloc&gt;</code></span></dt><dd><p>
+Inherits from _Sp_counted_ptr and adds support for custom deleter and
+allocator. Empty Base Optimization is used for the allocator. This class
+is used even when the user only provides a custom deleter, in which case
+<code class="classname">allocator</code> is used as the allocator.
+ </p></dd><dt><span class="term"><code class="classname">_Sp_counted_ptr_inplace&lt;Tp, Alloc, Lp&gt;</code></span></dt><dd><p>
+Used by <code class="code">allocate_shared</code> and <code class="code">make_shared</code>.
+Contains aligned storage to hold an object of type <span class="type">Tp</span>,
+which is constructed in-place with placement <code class="function">new</code>.
+Has a variadic template constructor allowing any number of arguments to
+be forwarded to <span class="type">Tp</span>'s constructor.
+Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the
+type of object, not the type of pointer; this is purely a convenience
+that simplifies the implementation slightly.
+ </p></dd></dl></div></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="id388735"></a>Thread Safety</h5></div></div></div><p>
+C++0x-only features are: rvalue-ref/move support, allocator support,
+aliasing constructor, make_shared &amp; allocate_shared. Additionally,
+the constructors taking <code class="classname">auto_ptr</code> parameters are
+deprecated in C++0x mode.
+ </p><p>
+The
+<a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
+Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
+objects offer the same level of thread safety as built-in types."
+The implementation must ensure that concurrent updates to separate shared_ptr
+instances are correct even when those instances share a reference count e.g.
+</p><pre class="programlisting">
+shared_ptr&lt;A&gt; a(new A);
+shared_ptr&lt;A&gt; b(a);
+
+// Thread 1 // Thread 2
+ a.reset(); b.reset();
+</pre><p>
+The dynamically-allocated object must be destroyed by exactly one of the
+threads. Weak references make things even more interesting.
+The shared state used to implement shared_ptr must be transparent to the
+user and invariants must be preserved at all times.
+The key pieces of shared state are the strong and weak reference counts.
+Updates to these need to be atomic and visible to all threads to ensure
+correct cleanup of the managed resource (which is, after all, shared_ptr's
+job!)
+On multi-processor systems memory synchronisation may be needed so that
+reference-count updates and the destruction of the managed resource are
+race-free.
+</p><p>
+The function <code class="function">_Sp_counted_base::_M_add_ref_lock()</code>, called when
+obtaining a shared_ptr from a weak_ptr, has to test if the managed
+resource still exists and either increment the reference count or throw
+<code class="classname">bad_weak_ptr</code>.
+In a multi-threaded program there is a potential race condition if the last
+reference is dropped (and the managed resource destroyed) between testing
+the reference count and incrementing it, which could result in a shared_ptr
+pointing to invalid memory.
+</p><p>
+The Boost shared_ptr (as used in GCC) features a clever lock-free
+algorithm to avoid the race condition, but this relies on the
+processor supporting an atomic <span class="emphasis"><em>Compare-And-Swap</em></span>
+instruction. For other platforms there are fall-backs using mutex
+locks. Boost (as of version 1.35) includes several different
+implementations and the preprocessor selects one based on the
+compiler, standard library, platform etc. For the version of
+shared_ptr in libstdc++ the compiler and library are fixed, which
+makes things much simpler: we have an atomic CAS or we don't, see Lock
+Policy below for details.
+</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="id480578"></a>Selecting Lock Policy</h5></div></div></div><p>
+ </p><p>
+There is a single <code class="classname">_Sp_counted_base</code> class,
+which is a template parameterized on the enum
+<span class="type">__gnu_cxx::_Lock_policy</span>. The entire family of classes is
+parameterized on the lock policy, right up to
+<code class="classname">__shared_ptr</code>, <code class="classname">__weak_ptr</code> and
+<code class="classname">__enable_shared_from_this</code>. The actual
+<code class="classname">std::shared_ptr</code> class inherits from
+<code class="classname">__shared_ptr</code> with the lock policy parameter
+selected automatically based on the thread model and platform that
+libstdc++ is configured for, so that the best available template
+specialization will be used. This design is necessary because it would
+not be conforming for <code class="classname">shared_ptr</code> to have an
+extra template parameter, even if it had a default value. The
+available policies are:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <span class="type">_S_Atomic</span>
+ </p><p>
+Selected when GCC supports a builtin atomic compare-and-swap operation
+on the target processor (see <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top">Atomic
+Builtins</a>.) The reference counts are maintained using a lock-free
+algorithm and GCC's atomic builtins, which provide the required memory
+synchronisation.
+ </p></li><li class="listitem"><p>
+ <span class="type">_S_Mutex</span>
+ </p><p>
+The _Sp_counted_base specialization for this policy contains a mutex,
+which is locked in add_ref_lock(). This policy is used when GCC's atomic
+builtins aren't available so explicit memory barriers are needed in places.
+ </p></li><li class="listitem"><p>
+ <span class="type">_S_Single</span>
+ </p><p>
+This policy uses a non-reentrant add_ref_lock() with no locking. It is
+used when libstdc++ is built without <code class="literal">--enable-threads</code>.
+ </p></li></ol></div><p>
+ For all three policies, reference count increments and
+ decrements are done via the functions in
+ <code class="filename">ext/atomicity.h</code>, which detect if the program
+ is multi-threaded. If only one thread of execution exists in
+ the program then less expensive non-atomic operations are used.
+ </p></div><div class="section" title="Dual C++0x and TR1 Implementation"><div class="titlepage"><div><div><h5 class="title"><a id="id399352"></a>Dual C++0x and TR1 Implementation</h5></div></div></div><p>
+The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x
+with support for rvalue-references and the other features from N2351.
+The <code class="classname">_Sp_counted_base</code> base class is implemented in
+<code class="filename">tr1/boost_sp_shared_count.h</code> and is common to the TR1
+and C++0x versions of <code class="classname">shared_ptr</code>.
+</p><p>
+The classes derived from <code class="classname">_Sp_counted_base</code> (see Class Hierarchy
+above) and <code class="classname">__shared_count</code> are implemented separately for C++0x
+and TR1, in <code class="filename">bits/shared_ptr.h</code> and
+<code class="filename">tr1/shared_ptr.h</code> respectively.
+</p><p>
+The TR1 implementation is considered relatively stable, so is unlikely to
+change unless bug fixes require it. If the code that is common to both
+C++0x and TR1 modes needs to diverge further then it might be necessary to
+duplicate <code class="classname">_Sp_counted_base</code> and only make changes to
+the C++0x version.
+</p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="id404250"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
+<code class="code">const_pointer_cast</code></span></dt><dd><p>
+As noted in N2351, these functions can be implemented non-intrusively using
+the alias constructor. However the aliasing constructor is only available
+in C++0x mode, so in TR1 mode these casts rely on three non-standard
+constructors in shared_ptr and __shared_ptr.
+In C++0x mode these constructors and the related tag types are not needed.
+ </p></dd><dt><span class="term"><code class="code">enable_shared_from_this</code></span></dt><dd><p>
+The clever overload to detect a base class of type
+<code class="code">enable_shared_from_this</code> comes straight from Boost.
+There is an extra overload for <code class="code">__enable_shared_from_this</code> to
+work smoothly with <code class="code">__shared_ptr&lt;Tp, Lp&gt;</code> using any lock
+policy.
+ </p></dd><dt><span class="term"><code class="code">make_shared</code>, <code class="code">allocate_shared</code></span></dt><dd><p>
+<code class="code">make_shared</code> simply forwards to <code class="code">allocate_shared</code>
+with <code class="code">std::allocator</code> as the allocator.
+Although these functions can be implemented non-intrusively using the
+alias constructor, if they have access to the implementation then it is
+possible to save storage and reduce the number of heap allocations. The
+newly constructed object and the _Sp_counted_* can be allocated in a single
+block and the standard says implementations are "encouraged, but not required,"
+to do so. This implementation provides additional non-standard constructors
+(selected with the type <code class="code">_Sp_make_shared_tag</code>) which create an
+object of type <code class="code">_Sp_counted_ptr_inplace</code> to hold the new object.
+The returned <code class="code">shared_ptr&lt;A&gt;</code> needs to know the address of the
+new <code class="code">A</code> object embedded in the <code class="code">_Sp_counted_ptr_inplace</code>,
+but it has no way to access it.
+This implementation uses a "covert channel" to return the address of the
+embedded object when <code class="code">get_deleter&lt;_Sp_make_shared_tag&gt;()</code>
+is called. Users should not try to use this.
+As well as the extra constructors, this implementation also needs some
+members of _Sp_counted_deleter to be protected where they could otherwise
+be private.
+ </p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="id478086"></a>Examples</h5></div></div></div><p>
+ Examples of use can be found in the testsuite, under
+ <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
+ <code class="filename">testsuite/20_util/shared_ptr</code>
+ and
+ <code class="filename">testsuite/20_util/weak_ptr</code>.
+ </p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="id397929"></a>Unresolved Issues</h5></div></div></div><p>
+ The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
+ clause in the C++0x working draft is not implemented in GCC.
+ </p><p>
+ The <span class="type">_S_single</span> policy uses atomics when used in MT
+ code, because it uses the same dispatcher functions that check
+ <code class="function">__gthread_active_p()</code>. This could be
+ addressed by providing template specialisations for some members
+ of <code class="classname">_Sp_counted_base&lt;_S_single&gt;</code>.
+ </p><p>
+ Unlike Boost, this implementation does not use separate classes
+ for the pointer+deleter and pointer+deleter+allocator cases in
+ C++0x mode, combining both into _Sp_counted_deleter and using
+ <code class="classname">allocator</code> when the user doesn't specify
+ an allocator. If it was found to be beneficial an additional
+ class could easily be added. With the current implementation,
+ the _Sp_counted_deleter and __shared_count constructors taking a
+ custom deleter but no allocator are technically redundant and
+ could be removed, changing callers to always specify an
+ allocator. If a separate pointer+deleter class was added the
+ __shared_count constructor would be needed, so it has been kept
+ for now.
+ </p><p>
+ The hack used to get the address of the managed object from
+ <code class="function">_Sp_counted_ptr_inplace::_M_get_deleter()</code>
+ is accessible to users. This could be prevented if
+ <code class="function">get_deleter&lt;_Sp_make_shared_tag&gt;()</code>
+ always returned NULL, since the hack only needs to work at a
+ lower level, not in the public API. This wouldn't be difficult,
+ but hasn't been done since there is no danger of accidental
+ misuse: users already know they are relying on unsupported
+ features if they refer to implementation details such as
+ _Sp_make_shared_tag.
+ </p><p>
+ tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
+ would alter the ABI.
+ </p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
+ The original authors of the Boost shared_ptr, which is really nice
+ code to work with, Peter Dimov in particular for his help and
+ invaluable advice on thread safety. Phillip Jordan and Paolo
+ Carlini for the lock policy implementation.
+ </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="id444231"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
+ <em class="citetitle">
+ Improving shared_ptr for C++0x, Revision 2
+ </em>
+ </a>
+ . </span><span class="subtitle">
+ N2351
+ . </span></p></div><div class="biblioentry"><a id="id444254"></a><p><span class="biblioid">
+ <a class="ulink" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
+ <em class="citetitle">
+ C++ Standard Library Active Issues List
+ </em>
+ </a>
+ . </span><span class="subtitle">
+ N2456
+ . </span></p></div><div class="biblioentry"><a id="id400755"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
+ <em class="citetitle">
+ Working Draft, Standard for Programming Language C++
+ </em>
+ </a>
+ . </span><span class="subtitle">
+ N2461
+ . </span></p></div><div class="biblioentry"><a id="id424141"></a><p><span class="biblioid">
+ <a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">shared_ptr
+ <em class="citetitle">
+ Boost C++ Libraries documentation, shared_ptr
+ </em>
+ </a>
+ . </span><span class="subtitle">
+ N2461
+ . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/messages.html b/libstdc++-v3/doc/html/manual/messages.html
deleted file mode 100644
index bd663dbf742..00000000000
--- a/libstdc++-v3/doc/html/manual/messages.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>messages</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; messages&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="facets.html" title="Chapter 15. Facets aka Categories" /><link rel="prev" href="codecvt.html" title="codecvt" /><link rel="next" href="containers.html" title="Part VII.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">messages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="codecvt.html">Prev</a> </td><th width="60%" align="center">Chapter 15. Facets aka Categories</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="messages"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.facet.messages"></a>messages</h2></div></div></div><p>
-The std::messages facet implements message retrieval functionality
-equivalent to Java's java.text.MessageFormat .using either GNU gettext
-or IEEE 1003.1-200 functions.
-</p><div class="sect2" title="Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.req"></a>Requirements</h3></div></div></div><p>
-The std::messages facet is probably the most vaguely defined facet in
-the standard library. It's assumed that this facility was built into
-the standard library in order to convert string literals from one
-locale to the other. For instance, converting the "C" locale's
-<code class="code">const char* c = "please"</code> to a German-localized <code class="code">"bitte"</code>
-during program execution.
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-22.2.7.1 - Template class messages [lib.locale.messages]
-</p></blockquote></div><p>
-This class has three public member functions, which directly
-correspond to three protected virtual member functions.
-</p><p>
-The public member functions are:
-</p><p>
-<code class="code">catalog open(const string&amp;, const locale&amp;) const</code>
-</p><p>
-<code class="code">string_type get(catalog, int, int, const string_type&amp;) const</code>
-</p><p>
-<code class="code">void close(catalog) const</code>
-</p><p>
-While the virtual functions are:
-</p><p>
-<code class="code">catalog do_open(const string&amp;, const locale&amp;) const</code>
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--1- Returns: A value that may be passed to get() to retrieve a
-message, from the message catalog identified by the string name
-according to an implementation-defined mapping. The result can be used
-until it is passed to close(). Returns a value less than 0 if no such
-catalog can be opened.
-</em></span>
-</p></blockquote></div><p>
-<code class="code">string_type do_get(catalog, int, int, const string_type&amp;) const</code>
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--3- Requires: A catalog cat obtained from open() and not yet closed.
--4- Returns: A message identified by arguments set, msgid, and dfault,
-according to an implementation-defined mapping. If no such message can
-be found, returns dfault.
-</em></span>
-</p></blockquote></div><p>
-<code class="code">void do_close(catalog) const</code>
-</p><div class="blockquote"><blockquote class="blockquote"><p>
-<span class="emphasis"><em>
--5- Requires: A catalog cat obtained from open() and not yet closed.
--6- Effects: Releases unspecified resources associated with cat.
--7- Notes: The limit on such resources, if any, is implementation-defined.
-</em></span>
-</p></blockquote></div></div><div class="sect2" title="Design"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.design"></a>Design</h3></div></div></div><p>
-A couple of notes on the standard.
-</p><p>
-First, why is <code class="code">messages_base::catalog</code> specified as a typedef
-to int? This makes sense for implementations that use
-<code class="code">catopen</code>, but not for others. Fortunately, it's not heavily
-used and so only a minor irritant.
-</p><p>
-Second, by making the member functions <code class="code">const</code>, it is
-impossible to save state in them. Thus, storing away information used
-in the 'open' member function for use in 'get' is impossible. This is
-unfortunate.
-</p><p>
-The 'open' member function in particular seems to be oddly
-designed. The signature seems quite peculiar. Why specify a <code class="code">const
-string&amp; </code> argument, for instance, instead of just <code class="code">const
-char*</code>? Or, why specify a <code class="code">const locale&amp;</code> argument that is
-to be used in the 'get' member function? How, exactly, is this locale
-argument useful? What was the intent? It might make sense if a locale
-argument was associated with a given default message string in the
-'open' member function, for instance. Quite murky and unclear, on
-reflection.
-</p><p>
-Lastly, it seems odd that messages, which explicitly require code
-conversion, don't use the codecvt facet. Because the messages facet
-has only one template parameter, it is assumed that ctype, and not
-codecvt, is to be used to convert between character sets.
-</p><p>
-It is implicitly assumed that the locale for the default message
-string in 'get' is in the "C" locale. Thus, all source code is assumed
-to be written in English, so translations are always from "en_US" to
-other, explicitly named locales.
-</p></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Models"><div class="titlepage"><div><div><h4 class="title"><a id="messages.impl.models"></a>Models</h4></div></div></div><p>
- This is a relatively simple class, on the face of it. The standard
- specifies very little in concrete terms, so generic
- implementations that are conforming yet do very little are the
- norm. Adding functionality that would be useful to programmers and
- comparable to Java's java.text.MessageFormat takes a bit of work,
- and is highly dependent on the capabilities of the underlying
- operating system.
- </p><p>
- Three different mechanisms have been provided, selectable via
- configure flags:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- generic
- </p><p>
- This model does very little, and is what is used by default.
- </p></li><li class="listitem"><p>
- gnu
- </p><p>
- The gnu model is complete and fully tested. It's based on the
- GNU gettext package, which is part of glibc. It uses the
- functions <code class="code">textdomain, bindtextdomain, gettext</code> to
- implement full functionality. Creating message catalogs is a
- relatively straight-forward process and is lightly documented
- below, and fully documented in gettext's distributed
- documentation.
- </p></li><li class="listitem"><p>
- ieee_1003.1-200x
- </p><p>
- This is a complete, though untested, implementation based on
- the IEEE standard. The functions <code class="code">catopen, catgets,
- catclose</code> are used to retrieve locale-specific messages
- given the appropriate message catalogs that have been
- constructed for their use. Note, the script <code class="code">
- po2msg.sed</code> that is part of the gettext distribution can
- convert gettext catalogs into catalogs that
- <code class="code">catopen</code> can use.
- </p></li></ul></div><p>
-A new, standards-conformant non-virtual member function signature was
-added for 'open' so that a directory could be specified with a given
-message catalog. This simplifies calling conventions for the gnu
-model.
-</p></div><div class="sect3" title="The GNU Model"><div class="titlepage"><div><div><h4 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h4></div></div></div><p>
- The messages facet, because it is retrieving and converting
- between characters sets, depends on the ctype and perhaps the
- codecvt facet in a given locale. In addition, underlying "C"
- library locale support is necessary for more than just the
- <code class="code">LC_MESSAGES</code> mask: <code class="code">LC_CTYPE</code> is also
- necessary. To avoid any unpleasantness, all bits of the "C" mask
- (i.e. <code class="code">LC_ALL</code>) are set before retrieving messages.
- </p><p>
- Making the message catalogs can be initially tricky, but become
- quite simple with practice. For complete info, see the gettext
- documentation. Here's an idea of what is required:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Make a source file with the required string literals that need
- to be translated. See <code class="code">intl/string_literals.cc</code> for
- an example.
- </p></li><li class="listitem"><p>
- Make initial catalog (see "4 Making the PO Template File" from
- the gettext docs).</p><p>
- <code class="code"> xgettext --c++ --debug string_literals.cc -o libstdc++.pot </code>
- </p></li><li class="listitem"><p>Make language and country-specific locale catalogs.</p><p>
- <code class="code">cp libstdc++.pot fr_FR.po</code>
- </p><p>
- <code class="code">cp libstdc++.pot de_DE.po</code>
- </p></li><li class="listitem"><p>
- Edit localized catalogs in emacs so that strings are
- translated.
- </p><p>
- <code class="code">emacs fr_FR.po</code>
- </p></li><li class="listitem"><p>Make the binary mo files.</p><p>
- <code class="code">msgfmt fr_FR.po -o fr_FR.mo</code>
- </p><p>
- <code class="code">msgfmt de_DE.po -o de_DE.mo</code>
- </p></li><li class="listitem"><p>Copy the binary files into the correct directory structure.</p><p>
- <code class="code">cp fr_FR.mo (dir)/fr_FR/LC_MESSAGES/libstdc++.mo</code>
- </p><p>
- <code class="code">cp de_DE.mo (dir)/de_DE/LC_MESSAGES/libstdc++.mo</code>
- </p></li><li class="listitem"><p>Use the new message catalogs.</p><p>
- <code class="code">locale loc_de("de_DE");</code>
- </p><p>
- <code class="code">
- use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
- </code>
- </p></li></ul></div></div></div><div class="sect2" title="Use"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.use"></a>Use</h3></div></div></div><p>
- A simple example using the GNU model of message conversion.
- </p><pre class="programlisting">
-#include &lt;iostream&gt;
-#include &lt;locale&gt;
-using namespace std;
-
-void test01()
-{
- typedef messages&lt;char&gt;::catalog catalog;
- const char* dir =
- "/mnt/egcs/build/i686-pc-linux-gnu/libstdc++/po/share/locale";
- const locale loc_de("de_DE");
- const messages&lt;char&gt;&amp; mssg_de = use_facet&lt;messages&lt;char&gt; &gt;(loc_de);
-
- catalog cat_de = mssg_de.open("libstdc++", loc_de, dir);
- string s01 = mssg_de.get(cat_de, 0, 0, "please");
- string s02 = mssg_de.get(cat_de, 0, 0, "thank you");
- cout &lt;&lt; "please in german:" &lt;&lt; s01 &lt;&lt; '\n';
- cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
- mssg_de.close(cat_de);
-}
-</pre></div><div class="sect2" title="Future"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.future"></a>Future</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Things that are sketchy, or remain unimplemented:
- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
- _M_convert_from_char, _M_convert_to_char are in flux,
- depending on how the library ends up doing character set
- conversions. It might not be possible to do a real character
- set based conversion, due to the fact that the template
- parameter for messages is not enough to instantiate the
- codecvt facet (1 supplied, need at least 2 but would prefer
- 3).
- </p></li><li class="listitem"><p>
- There are issues with gettext needing the global locale set
- to extract a message. This dependence on the global locale
- makes the current "gnu" model non MT-safe. Future versions
- of glibc, i.e. glibc 2.3.x will fix this, and the C++ library
- bits are already in place.
- </p></li></ul></div></li><li class="listitem"><p>
- Development versions of the GNU "C" library, glibc 2.3 will allow
- a more efficient, MT implementation of std::messages, and will
- allow the removal of the _M_name_messages data member. If this is
- done, it will change the library ABI. The C++ parts to support
- glibc 2.3 have already been coded, but are not in use: once this
- version of the "C" library is released, the marked parts of the
- messages implementation can be switched over to the new "C"
- library functionality.
- </p></li><li class="listitem"><p>
- At some point in the near future, std::numpunct will probably use
- std::messages facilities to implement truename/falsename
- correctly. This is currently not done, but entries in
- libstdc++.pot have already been made for "true" and "false" string
- literals, so all that remains is the std::numpunct coding and the
- configure/make hassles to make the installed library search its
- own catalog. Currently the libstdc++.mo catalog is only searched
- for the testsuite cases involving messages members.
- </p></li><li class="listitem"><p> The following member functions:</p><p>
- <code class="code">
- catalog
- open(const basic_string&lt;char&gt;&amp; __s, const locale&amp; __loc) const
- </code>
- </p><p>
- <code class="code">
- catalog
- open(const basic_string&lt;char&gt;&amp;, const locale&amp;, const char*) const;
- </code>
- </p><p>
- Don't actually return a "value less than 0 if no such catalog
- can be opened" as required by the standard in the "gnu"
- model. As of this writing, it is unknown how to query to see
- if a specified message catalog exists using the gettext
- package.
- </p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="The GNU C Library"><a id="id612063"></a><p><span class="title"><i>
- The GNU C Library
- </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
- . </span></p></div><div class="biblioentry" title="Correspondence"><a id="id633252"></a><p><span class="title"><i>
- Correspondence
- </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry" title="ISO/IEC 14882:1998 Programming languages - C++"><a id="id720940"></a><p><span class="title"><i>
- ISO/IEC 14882:1998 Programming languages - C++
- </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry" title="ISO/IEC 9899:1999 Programming languages - C"><a id="id720958"></a><p><span class="title"><i>
- ISO/IEC 9899:1999 Programming languages - C
- </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x)"><a id="id626200"></a><p><span class="title"><i>
- System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x)
- </i>. </span><span class="copyright">Copyright © 1999
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid">
- <a class="ulink" href="http://www.opengroup.org/austin/" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="The C++ Programming Language, Special Edition"><a id="id626228"></a><p><span class="title"><i>
- The C++ Programming Language, Special Edition
- </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
- Addison Wesley
- . </span></span></p></div><div class="biblioentry" title="Standard C++ IOStreams and Locales"><a id="id706351"></a><p><span class="title"><i>
- Standard C++ IOStreams and Locales
- </i>. </span><span class="subtitle">
- Advanced Programmer's Guide and Reference
- . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
- Addison Wesley Longman
- . </span></span></p></div><div class="biblioentry" title="Java 2 Platform, Standard Edition, v 1.3.1 API Specification"><a id="id655088"></a><p><span class="title"><i>
- Java 2 Platform, Standard Edition, v 1.3.1 API Specification
- </i>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
-java.util.Locale, java.util.ResourceBundle. </span><span class="biblioid">
- <a class="ulink" href="http://java.sun.com/reference/api/index.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="GNU gettext tools, version 0.10.38, Native Language Support Library and Tools."><a id="id680363"></a><p><span class="title"><i>
- GNU gettext tools, version 0.10.38, Native Language Support
-Library and Tools.
- </i>. </span><span class="biblioid">
- <a class="ulink" href="http://www.gnu.org/software/gettext/" target="_top">
- </a>
- . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="codecvt.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="facets.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">codecvt </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part VII. 
- Containers
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/numerics.html b/libstdc++-v3/doc/html/manual/numerics.html
index 57089cf47e8..faeaf995ab0 100644
--- a/libstdc++-v3/doc/html/manual/numerics.html
+++ b/libstdc++-v3/doc/html/manual/numerics.html
@@ -1,9 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part X.  Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt09ch20.html" title="Chapter 20. Mutating" /><link rel="next" href="complex.html" title="Chapter 21. Complex" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part X. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
Numerics
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt09ch20.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="complex.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part X.  Numerics"><div class="titlepage"><div><div><h1 class="title"><a id="manual.numerics"></a>Part X. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12.  Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
Numerics
- <a id="id622280" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="complex.html">21. Complex</a></span></dt><dd><dl><dt><span class="sect1"><a href="complex.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="chapter"><a href="generalized_numeric_operations.html">22. Generalized Operations</a></span></dt><dt><span class="chapter"><a href="numerics_and_c.html">23. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect1"><a href="bk01pt10ch23s02.html">C99</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt09ch20.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="complex.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. Mutating </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. Complex</td></tr></table></div></body></html>
+ <a id="id415325" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="sect1" title="Complex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+ </p><div class="sect2" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
+ </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
+ <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
+ addition of complex types to the C language. David Tribble has
+ compiled a list of C++98 and C99 conflict points; his description of
+ C's new type versus those of C++ and how to get them playing together
+ nicely is
+<a class="ulink" href="http://david.tribble.com/text/cdiffs.htm#C99-complex" target="_top">here</a>.
+ </p><p><code class="code">complex&lt;&gt;</code> is intended to be instantiated with a
+ floating-point type. As long as you meet that and some other basic
+ requirements, then the resulting instantiation has all of the usual
+ math operators defined, as well as definitions of <code class="code">op&lt;&lt;</code>
+ and <code class="code">op&gt;&gt;</code> that work with iostreams: <code class="code">op&lt;&lt;</code>
+ prints <code class="code">(u,v)</code> and <code class="code">op&gt;&gt;</code> can read <code class="code">u</code>,
+ <code class="code">(u)</code>, and <code class="code">(u,v)</code>.
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11. 
+ Algorithms
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/numerics_and_c.html b/libstdc++-v3/doc/html/manual/numerics_and_c.html
index 0bd1b809371..5102af670f3 100644
--- a/libstdc++-v3/doc/html/manual/numerics_and_c.html
+++ b/libstdc++-v3/doc/html/manual/numerics_and_c.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Part X.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Chapter 22. Generalized Operations" /><link rel="next" href="bk01pt10ch23s02.html" title="C99" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Part X. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
Numerics
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt10ch23s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. Interacting with C"><div class="titlepage"><div><div><h2 class="title"><a id="manual.numerics.c"></a>Chapter 23. Interacting with C</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect1"><a href="bk01pt10ch23s02.html">C99</a></span></dt></dl></div><div class="sect1" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="numerics.c.array"></a>Numerics vs. Arrays</h2></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
+</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Interacting with C"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="sect2" title="Numerics vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
is that it is defined to be free of pointer aliasing, an assumption
that C89 is not allowed to make, and neither is C++98. C99 adds a new
keyword, <code class="code">restrict</code>, to apply to individual pointers. The
@@ -18,4 +18,20 @@
speaking this is only one of the five template classes, and they are
designed to be familiar to people who have worked with the BLAS
libraries before.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt10ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> C99</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
+ of the C99 features that appear in libstdc++.
+ </p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
+ This flag is already on by default, but it can be disabled by the
+ user. Also, the configuration machinery will disable it if the
+ necessary support for C99 (e.g., header files) cannot be found.
+ </p><p>As of GCC 3.0, C99 support includes classification functions
+ such as <code class="code">isnormal</code>, <code class="code">isgreater</code>,
+ <code class="code">isnan</code>, etc.
+ The functions used for 'long long' support such as <code class="code">strtoll</code>
+ are supported, as is the <code class="code">lldiv_t</code> typedef. Also supported
+ are the wide character functions using 'long long', like
+ <code class="code">wcstoll</code>.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. 
+ Input and Output
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/pairs.html b/libstdc++-v3/doc/html/manual/pairs.html
index 3b4981bbaa8..719c987df20 100644
--- a/libstdc++-v3/doc/html/manual/pairs.html
+++ b/libstdc++-v3/doc/html/manual/pairs.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10. Pairs</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Part IV.  Utilities" /><link rel="prev" href="functors.html" title="Chapter 9. Functors" /><link rel="next" href="memory.html" title="Chapter 11. Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="functors.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10. Pairs"><div class="titlepage"><div><div><h2 class="title"><a id="manual.util.pairs"></a>Chapter 10. Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
+</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
carry around a pair of objects. One is of type T1, and another of
type T2; they may be the same type, but you don't get anything
extra if they are. The two members can be accessed directly, as
@@ -31,7 +31,7 @@
is defined as evaluating to:
</p><pre class="programlisting">
x.first &lt; y.first ||
- ( !(y.first &lt; x.first) &amp;&amp; x.second &lt; y.second )
+ ( !(y.first &lt; x.first) &amp;&amp; x.second &lt; y.second )
</pre><p>The other operators are not defined using the <code class="code">rel_ops</code>
functions above, but their semantics are the same.
</p><p>Finally, there is a template function called <code class="function">make_pair</code>
@@ -39,4 +39,7 @@
instance of a pair instantiated on their respective types:
</p><pre class="programlisting">
pair&lt;int,MyClass&gt; p = make_pair(4,myobject);
- </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="functors.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. Functors </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. Memory</td></tr></table></div></body></html>
+ </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. 
+ Utilities
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/parallel_mode.html b/libstdc++-v3/doc/html/manual/parallel_mode.html
index a21c3a65b2d..bcfd91c19a2 100644
--- a/libstdc++-v3/doc/html/manual/parallel_mode.html
+++ b/libstdc++-v3/doc/html/manual/parallel_mode.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 31. Parallel Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bk01pt12ch30s04.html" title="Design" /><link rel="next" href="bk01pt12ch31s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 31. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch30s04.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch31s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 31. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 31. Parallel Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Parallel Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
implementation of many algorithms the C++ Standard Library.
</p><p>
Several of the standard algorithms, for instance
@@ -13,12 +13,12 @@ explicit source declaration or by compiling existing sources with a
specific compiler flag.
</p><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Parallelization of Bulk Operations for STL Dictionaries"><a id="id654235"></a><p><span class="title"><i>
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Parallelization of Bulk Operations for STL Dictionaries"><a id="id503217"></a><p><span class="title"><i>
Parallelization of Bulk Operations for STL Dictionaries
</i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
- . </span></span></p></div><div class="biblioentry" title="The Multi-Core Standard Template Library"><a id="id673060"></a><p><span class="title"><i>
+ . </span></span></p></div><div class="biblioentry" title="The Multi-Core Standard Template Library"><a id="id503264"></a><p><span class="title"><i>
The Multi-Core Standard Template Library
</i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
Euro-Par 2007: Parallel Processing. (LNCS 4641)
- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch30s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/profile_mode.html b/libstdc++-v3/doc/html/manual/profile_mode.html
index 408dba26f79..6c6bea00103 100644
--- a/libstdc++-v3/doc/html/manual/profile_mode.html
+++ b/libstdc++-v3/doc/html/manual/profile_mode.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 32. Profile Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII.  Extensions" /><link rel="prev" href="bk01pt12ch31s05.html" title="Testing" /><link rel="next" href="bk01pt12ch32s02.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 32. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch31s05.html">Prev</a> </td><th width="60%" align="center">Part XII. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
Extensions
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 32. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 32. Profile Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Profile Mode"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="sect1" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
recognition of suboptimal usage patterns of the standard library.
</p><p>
@@ -11,13 +11,13 @@
calls to an instrumentation library to record the internal state of
various components at interesting entry/exit points to/from the standard
library. Process trace, recognize suboptimal patterns, give advice.
- For details, see
+ For details, see
<a class="ulink" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
CGO 2009</a>.
</p><p>
<span class="emphasis"><em>Strengths: </em></span>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
- Unintrusive solution. The application code does not require any
+ Unintrusive solution. The application code does not require any
modification.
</p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
identifying precisely interesting dynamic performance behavior.
@@ -75,7 +75,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
The warning message. For some warnings, this is static text, e.g.,
"change vector to list". For other warnings, such as the one above,
the message contains numeric advice, e.g., the suggested initial size
- of the hashtable.
+ of the vector.
</p></li></ul></div><p>
</p><p>Three files are generated. <code class="code">libstdcxx-profile.txt</code>
contains human readable advice. <code class="code">libstdcxx-profile.raw</code>
@@ -108,7 +108,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
path for the output files.
</p></li><li class="listitem"><p>_GLIBCXX_PROFILE_MAX_WARN_COUNT: set it to the maximum
number of warnings desired. The default value is 10.</p></li><li class="listitem"><p>
- <code class="code">_GLIBCXX_PROFILE_MAX_STACK_DEPTH</code>: if set to 0,
+ <code class="code">_GLIBCXX_PROFILE_MAX_STACK_DEPTH</code>: if set to 0,
the advice will
be collected and reported for the program as a whole, and not for each
call context.
@@ -124,10 +124,10 @@ vector-size: improvement = 3: call stack = 0x804842c ...
live containers are deleted. The default is 128 MB.
</p></li><li class="listitem"><p>
<code class="code">_GLIBCXX_PROFILE_NO_THREADS</code>:
- Make the library not use threads. If thread local storage (TLS) is not
+ Make the library not use threads. If thread local storage (TLS) is not
available, you will get a preprocessor error asking you to set
-D_GLIBCXX_PROFILE_NO_THREADS if your program is single-threaded.
- Multithreded execution without TLS is not supported.
+ Multithreaded execution without TLS is not supported.
(Environment variable not supported.)
</p></li><li class="listitem"><p>
<code class="code">_GLIBCXX_HAVE_EXECINFO_H</code>:
@@ -138,9 +138,9 @@ vector-size: improvement = 3: call stack = 0x804842c ...
call context.
(Environment variable not supported.)
</p></li></ul></div><p>
- </p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Perflint: A Context Sensitive Performance Advisor for C++ Programs"><a id="id631630"></a><p><span class="title"><i>
+ </p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="Perflint: A Context Sensitive Performance Advisor for C++ Programs"><a id="id486510"></a><p><span class="title"><i>
Perflint: A Context Sensitive Performance Advisor for C++ Programs
</i>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
Proceedings of the 2009 International Symposium on Code Generation
- and Optimization
- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch32s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
+ and Optimization
+ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/sequences.html b/libstdc++-v3/doc/html/manual/sequences.html
deleted file mode 100644
index fd3ff148e54..00000000000
--- a/libstdc++-v3/doc/html/manual/sequences.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Sequences</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="containers.html" title="Part VII.  Containers" /><link rel="prev" href="containers.html" title="Part VII.  Containers" /><link rel="next" href="vector.html" title="vector" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Sequences</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Part VII. 
- Containers
-
-</th><td width="20%" align="right"> <a accesskey="n" href="vector.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Sequences"><div class="titlepage"><div><div><h2 class="title"><a id="manual.containers.sequences"></a>Chapter 16. Sequences</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="sequences.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="sect2"><a href="sequences.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="sect1"><a href="vector.html">vector</a></span></dt><dd><dl><dt><span class="sect2"><a href="vector.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></div><div class="sect1" title="list"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.sequences.list"></a>list</h2></div></div></div><div class="sect2" title="list::size() is O(n)"><div class="titlepage"><div><div><h3 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h3></div></div></div><p>
- Yes it is, and that's okay. This is a decision that we preserved
- when we imported SGI's STL implementation. The following is
- quoted from <a class="ulink" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
- </p><div class="blockquote"><blockquote class="blockquote"><p>
- The size() member function, for list and slist, takes time
- proportional to the number of elements in the list. This was a
- deliberate tradeoff. The only way to get a constant-time
- size() for linked lists would be to maintain an extra member
- variable containing the list's size. This would require taking
- extra time to update that variable (it would make splice() a
- linear time operation, for example), and it would also make the
- list larger. Many list algorithms don't require that extra
- word (algorithms that do require it might do better with
- vectors than with lists), and, when it is necessary to maintain
- an explicit size count, it's something that users can do
- themselves.
- </p><p>
- This choice is permitted by the C++ standard. The standard says
- that size() <span class="quote">“<span class="quote">should</span>â€</span> be constant time, and
- <span class="quote">“<span class="quote">should</span>â€</span> does not mean the same thing as
- <span class="quote">“<span class="quote">shall</span>â€</span>. This is the officially recommended ISO
- wording for saying that an implementation is supposed to do
- something unless there is a good reason not to.
- </p><p>
- One implication of linear time size(): you should never write
- </p><pre class="programlisting">
- if (L.size() == 0)
- ...
- </pre><p>
- Instead, you should write
- </p><pre class="programlisting">
- if (L.empty())
- ...
- </pre></blockquote></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="vector.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part VII. 
- Containers
-
- </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> vector</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/setup.html b/libstdc++-v3/doc/html/manual/setup.html
index b0c491e544a..749662d555b 100644
--- a/libstdc++-v3/doc/html/manual/setup.html
+++ b/libstdc++-v3/doc/html/manual/setup.html
@@ -23,7 +23,7 @@
Because libstdc++ is part of GCC, the primary source for
installation instructions is
<a class="ulink" href="http://gcc.gnu.org/install/" target="_top">the GCC install page</a>.
- In particular, list of prerequisite software needed to build the library
+ In particular, list of prerequisite software needed to build the library
<a class="ulink" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">
starts with those requirements.</a> The same pages also list
the tools you will need if you wish to modify the source.
@@ -40,18 +40,16 @@
The configure process will automatically detect and use these
features if the underlying support is present.
</p><p>
- Finally, a few system-specific requirements:
+ To generate the API documentation from the sources you will need
+ Doxygen, see <a class="link" href="documentation_style.html" title="Documentation Style">Documentation
+ Style</a> in the appendix for full details.
+ </p><p>
+ Finally, a few system-specific requirements:
</p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
If gcc 3.1.0 or later on is being used on linux, an attempt
will be made to use "C" library functionality necessary for
- C++ named locale support. For gcc 3.2.1 and later, this
- means that glibc 2.2.5 or later is required and the "C"
- library de_DE locale information must be installed.
- </p><p>
- Note however that the sanity checks involving the de_DE
- locale are skipped when an explicit --enable-clocale=gnu
- configure option is used: only the basic checks are carried
- out, defending against misconfigurations.
+ C++ named locale support. For gcc 4.6.0 and later, this
+ means that glibc 2.3 or later is required.
</p><p>
If the 'gnu' locale model is being used, the following
locales are used and tested in the libstdc++ testsuites.
@@ -90,12 +88,12 @@ zh_TW BIG5
</p><p>
To install support for locales, do only one of the following:
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>install all locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with RedHat Linux:
- </p><p> <code class="code"> export LC_ALL=C </code>
- </p><p> <code class="code"> rpm -e glibc-common --nodeps </code>
- </p><p>
+ </p><p> <code class="code"> export LC_ALL=C </code>
+ </p><p> <code class="code"> rpm -e glibc-common --nodeps </code>
+ </p><p>
<code class="code"> rpm -i --define "_install_langs all"
- glibc-common-2.2.5-34.i386.rpm
- </code>
+ glibc-common-2.2.5-34.i386.rpm
+ </code>
</p></li><li class="listitem"><p>
Instructions for other operating systems solicited.
</p></li></ul></div></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with Debian Linux:</p><p> Add the above list, as shown, to the file
diff --git a/libstdc++-v3/doc/html/manual/shared_ptr.html b/libstdc++-v3/doc/html/manual/shared_ptr.html
deleted file mode 100644
index 59666b93b16..00000000000
--- a/libstdc++-v3/doc/html/manual/shared_ptr.html
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>shared_ptr</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; shared_ptr&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="memory.html" title="Chapter 11. Memory" /><link rel="prev" href="auto_ptr.html" title="auto_ptr" /><link rel="next" href="traits.html" title="Chapter 12. Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">shared_ptr</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="auto_ptr.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Memory</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="shared_ptr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.util.memory.shared_ptr"></a>shared_ptr</h2></div></div></div><p>
-The shared_ptr class template stores a pointer, usually obtained via new,
-and implements shared ownership semantics.
-</p><div class="sect2" title="Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.req"></a>Requirements</h3></div></div></div><p>
- </p><p>
- The standard deliberately doesn't require a reference-counted
- implementation, allowing other techniques such as a
- circular-linked-list.
- </p><p>
- At the time of writing the C++0x working paper doesn't mention how
- threads affect shared_ptr, but it is likely to follow the existing
- practice set by <code class="classname">boost::shared_ptr</code>. The
- shared_ptr in libstdc++ is derived from Boost's, so the same rules
- apply.
- </p><p>
- </p></div><div class="sect2" title="Design Issues"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h3></div></div></div><p>
-The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
-project and the original authors of the code. The basic design and
-algorithms are from Boost, the notes below describe details specific to
-the GCC implementation. Names have been uglified in this implementation,
-but the design should be recognisable to anyone familiar with the Boost
-1.32 shared_ptr.
- </p><p>
-The basic design is an abstract base class, <code class="code">_Sp_counted_base</code> that
-does the reference-counting and calls virtual functions when the count
-drops to zero.
-Derived classes override those functions to destroy resources in a context
-where the correct dynamic type is known. This is an application of the
-technique known as type erasure.
- </p></div><div class="sect2" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.impl"></a>Implementation</h3></div></div></div><div class="sect3" title="Class Hierarchy"><div class="titlepage"><div><div><h4 class="title"><a id="id628890"></a>Class Hierarchy</h4></div></div></div><p>
-A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
-type <span class="type">T*</span> and an object of type
-<code class="classname">__shared_count</code>. The shared_count contains a
-pointer of type <span class="type">_Sp_counted_base*</span> which points to the
-object that maintains the reference-counts and destroys the managed
-resource.
- </p><div class="variablelist"><dl><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
-The base of the hierarchy is parameterized on the lock policy alone.
-_Sp_counted_base doesn't depend on the type of pointer being managed,
-it only maintains the reference counts and calls virtual functions when
-the counts drop to zero. The managed object is destroyed when the last
-strong reference is dropped, but the _Sp_counted_base itself must exist
-until the last weak reference is dropped.
- </p></dd><dt><span class="term"><code class="classname">_Sp_counted_base_impl&lt;Ptr, Deleter, Lp&gt;</code></span></dt><dd><p>
-Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>
-and a deleter of type <code class="code">Deleter</code>. <code class="code">_Sp_deleter</code> is
-used when the user doesn't supply a custom deleter. Unlike Boost's, this
-default deleter is not "checked" because GCC already issues a warning if
-<code class="function">delete</code> is used with an incomplete type.
-This is the only derived type used by <code class="classname">shared_ptr&lt;Ptr&gt;</code>
-and it is never used by <code class="classname">shared_ptr</code>, which uses one of
-the following types, depending on how the shared_ptr is constructed.
- </p></dd><dt><span class="term"><code class="classname">_Sp_counted_ptr&lt;Ptr, Lp&gt;</code></span></dt><dd><p>
-Inherits from _Sp_counted_base and stores a pointer of type <span class="type">Ptr</span>,
-which is passed to <code class="function">delete</code> when the last reference is dropped.
-This is the simplest form and is used when there is no custom deleter or
-allocator.
- </p></dd><dt><span class="term"><code class="classname">_Sp_counted_deleter&lt;Ptr, Deleter, Alloc&gt;</code></span></dt><dd><p>
-Inherits from _Sp_counted_ptr and adds support for custom deleter and
-allocator. Empty Base Optimization is used for the allocator. This class
-is used even when the user only provides a custom deleter, in which case
-<code class="classname">allocator</code> is used as the allocator.
- </p></dd><dt><span class="term"><code class="classname">_Sp_counted_ptr_inplace&lt;Tp, Alloc, Lp&gt;</code></span></dt><dd><p>
-Used by <code class="code">allocate_shared</code> and <code class="code">make_shared</code>.
-Contains aligned storage to hold an object of type <span class="type">Tp</span>,
-which is constructed in-place with placement <code class="function">new</code>.
-Has a variadic template constructor allowing any number of arguments to
-be forwarded to <span class="type">Tp</span>'s constructor.
-Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the
-type of object, not the type of pointer; this is purely a convenience
-that simplifies the implementation slightly.
- </p></dd></dl></div></div><div class="sect3" title="Thread Safety"><div class="titlepage"><div><div><h4 class="title"><a id="id612958"></a>Thread Safety</h4></div></div></div><p>
-The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x
-with support for rvalue-references and the other features from
-N2351. As with other libstdc++ headers shared by TR1 and C++0x,
-boost_shared_ptr.h uses conditional compilation, based on the macros
-<code class="constant">_GLIBCXX_INCLUDE_AS_CXX0X</code> and
-<code class="constant">_GLIBCXX_INCLUDE_AS_TR1</code>, to enable and disable
-features.
- </p><p>
-C++0x-only features are: rvalue-ref/move support, allocator support,
-aliasing constructor, make_shared &amp; allocate_shared. Additionally,
-the constructors taking <code class="classname">auto_ptr</code> parameters are
-deprecated in C++0x mode.
- </p><p>
-The
-<a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
-Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
-objects offer the same level of thread safety as built-in types."
-The implementation must ensure that concurrent updates to separate shared_ptr
-instances are correct even when those instances share a reference count e.g.
-</p><pre class="programlisting">
-shared_ptr&lt;A&gt; a(new A);
-shared_ptr&lt;A&gt; b(a);
-
-// Thread 1 // Thread 2
- a.reset(); b.reset();
-</pre><p>
-The dynamically-allocated object must be destroyed by exactly one of the
-threads. Weak references make things even more interesting.
-The shared state used to implement shared_ptr must be transparent to the
-user and invariants must be preserved at all times.
-The key pieces of shared state are the strong and weak reference counts.
-Updates to these need to be atomic and visible to all threads to ensure
-correct cleanup of the managed resource (which is, after all, shared_ptr's
-job!)
-On multi-processor systems memory synchronisation may be needed so that
-reference-count updates and the destruction of the managed resource are
-race-free.
-</p><p>
-The function <code class="function">_Sp_counted_base::_M_add_ref_lock()</code>, called when
-obtaining a shared_ptr from a weak_ptr, has to test if the managed
-resource still exists and either increment the reference count or throw
-<code class="classname">bad_weak_ptr</code>.
-In a multi-threaded program there is a potential race condition if the last
-reference is dropped (and the managed resource destroyed) between testing
-the reference count and incrementing it, which could result in a shared_ptr
-pointing to invalid memory.
-</p><p>
-The Boost shared_ptr (as used in GCC) features a clever lock-free
-algorithm to avoid the race condition, but this relies on the
-processor supporting an atomic <span class="emphasis"><em>Compare-And-Swap</em></span>
-instruction. For other platforms there are fall-backs using mutex
-locks. Boost (as of version 1.35) includes several different
-implementations and the preprocessor selects one based on the
-compiler, standard library, platform etc. For the version of
-shared_ptr in libstdc++ the compiler and library are fixed, which
-makes things much simpler: we have an atomic CAS or we don't, see Lock
-Policy below for details.
-</p></div><div class="sect3" title="Selecting Lock Policy"><div class="titlepage"><div><div><h4 class="title"><a id="id637767"></a>Selecting Lock Policy</h4></div></div></div><p>
- </p><p>
-There is a single <code class="classname">_Sp_counted_base</code> class,
-which is a template parameterized on the enum
-<span class="type">__gnu_cxx::_Lock_policy</span>. The entire family of classes is
-parameterized on the lock policy, right up to
-<code class="classname">__shared_ptr</code>, <code class="classname">__weak_ptr</code> and
-<code class="classname">__enable_shared_from_this</code>. The actual
-<code class="classname">std::shared_ptr</code> class inherits from
-<code class="classname">__shared_ptr</code> with the lock policy parameter
-selected automatically based on the thread model and platform that
-libstdc++ is configured for, so that the best available template
-specialization will be used. This design is necessary because it would
-not be conforming for <code class="classname">shared_ptr</code> to have an
-extra template parameter, even if it had a default value. The
-available policies are:
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
- <span class="type">_S_Atomic</span>
- </p><p>
-Selected when GCC supports a builtin atomic compare-and-swap operation
-on the target processor (see <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top">Atomic
-Builtins</a>.) The reference counts are maintained using a lock-free
-algorithm and GCC's atomic builtins, which provide the required memory
-synchronisation.
- </p></li><li class="listitem"><p>
- <span class="type">_S_Mutex</span>
- </p><p>
-The _Sp_counted_base specialization for this policy contains a mutex,
-which is locked in add_ref_lock(). This policy is used when GCC's atomic
-builtins aren't available so explicit memory barriers are needed in places.
- </p></li><li class="listitem"><p>
- <span class="type">_S_Single</span>
- </p><p>
-This policy uses a non-reentrant add_ref_lock() with no locking. It is
-used when libstdc++ is built without <code class="literal">--enable-threads</code>.
- </p></li></ol></div><p>
- For all three policies, reference count increments and
- decrements are done via the functions in
- <code class="filename">ext/atomicity.h</code>, which detect if the program
- is multi-threaded. If only one thread of execution exists in
- the program then less expensive non-atomic operations are used.
- </p></div><div class="sect3" title="Dual C++0x and TR1 Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="id618991"></a>Dual C++0x and TR1 Implementation</h4></div></div></div><p>
-The classes derived from <code class="classname">_Sp_counted_base</code> (see Class Hierarchy
-below) and <code class="classname">__shared_count</code> are implemented separately for C++0x
-and TR1, in <code class="filename">bits/boost_sp_shared_count.h</code> and
-<code class="filename">tr1/boost_sp_shared_count.h</code> respectively. All other classes
-including <code class="classname">_Sp_counted_base</code> are shared by both implementations.
-</p><p>
-The TR1 implementation is considered relatively stable, so is unlikely to
-change unless bug fixes require it. If the code that is common to both
-C++0x and TR1 modes needs to diverge further then it might be necessary to
-duplicate additional classes and only make changes to the C++0x versions.
-</p></div><div class="sect3" title="Related functions and classes"><div class="titlepage"><div><div><h4 class="title"><a id="id589355"></a>Related functions and classes</h4></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
-<code class="code">const_pointer_cast</code></span></dt><dd><p>
-As noted in N2351, these functions can be implemented non-intrusively using
-the alias constructor. However the aliasing constructor is only available
-in C++0x mode, so in TR1 mode these casts rely on three non-standard
-constructors in shared_ptr and __shared_ptr.
-In C++0x mode these constructors and the related tag types are not needed.
- </p></dd><dt><span class="term"><code class="code">enable_shared_from_this</code></span></dt><dd><p>
-The clever overload to detect a base class of type
-<code class="code">enable_shared_from_this</code> comes straight from Boost.
-There is an extra overload for <code class="code">__enable_shared_from_this</code> to
-work smoothly with <code class="code">__shared_ptr&lt;Tp, Lp&gt;</code> using any lock
-policy.
- </p></dd><dt><span class="term"><code class="code">make_shared</code>, <code class="code">allocate_shared</code></span></dt><dd><p>
-<code class="code">make_shared</code> simply forwards to <code class="code">allocate_shared</code>
-with <code class="code">std::allocator</code> as the allocator.
-Although these functions can be implemented non-intrusively using the
-alias constructor, if they have access to the implementation then it is
-possible to save storage and reduce the number of heap allocations. The
-newly constructed object and the _Sp_counted_* can be allocated in a single
-block and the standard says implementations are "encouraged, but not required,"
-to do so. This implementation provides additional non-standard constructors
-(selected with the type <code class="code">_Sp_make_shared_tag</code>) which create an
-object of type <code class="code">_Sp_counted_ptr_inplace</code> to hold the new object.
-The returned <code class="code">shared_ptr&lt;A&gt;</code> needs to know the address of the
-new <code class="code">A</code> object embedded in the <code class="code">_Sp_counted_ptr_inplace</code>,
-but it has no way to access it.
-This implementation uses a "covert channel" to return the address of the
-embedded object when <code class="code">get_deleter&lt;_Sp_make_shared_tag&gt;()</code>
-is called. Users should not try to use this.
-As well as the extra constructors, this implementation also needs some
-members of _Sp_counted_deleter to be protected where they could otherwise
-be private.
- </p></dd></dl></div></div></div><div class="sect2" title="Use"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.using"></a>Use</h3></div></div></div><div class="sect3" title="Examples"><div class="titlepage"><div><div><h4 class="title"><a id="id619880"></a>Examples</h4></div></div></div><p>
- Examples of use can be found in the testsuite, under
- <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>.
- </p></div><div class="sect3" title="Unresolved Issues"><div class="titlepage"><div><div><h4 class="title"><a id="id653780"></a>Unresolved Issues</h4></div></div></div><p>
- The resolution to C++ Standard Library issue <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#674" target="_top">674</a>,
- "shared_ptr interface changes for consistency with N1856" will
- need to be implemented after it is accepted into the working
- paper. Issue <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#743" target="_top">743</a>
- might also require changes.
- </p><p>
- The <span class="type">_S_single</span> policy uses atomics when used in MT
- code, because it uses the same dispatcher functions that check
- <code class="function">__gthread_active_p()</code>. This could be
- addressed by providing template specialisations for some members
- of <code class="classname">_Sp_counted_base&lt;_S_single&gt;</code>.
- </p><p>
- Unlike Boost, this implementation does not use separate classes
- for the pointer+deleter and pointer+deleter+allocator cases in
- C++0x mode, combining both into _Sp_counted_deleter and using
- <code class="classname">allocator</code> when the user doesn't specify
- an allocator. If it was found to be beneficial an additional
- class could easily be added. With the current implementation,
- the _Sp_counted_deleter and __shared_count constructors taking a
- custom deleter but no allocator are technically redundant and
- could be removed, changing callers to always specify an
- allocator. If a separate pointer+deleter class was added the
- __shared_count constructor would be needed, so it has been kept
- for now.
- </p><p>
- The hack used to get the address of the managed object from
- <code class="function">_Sp_counted_ptr_inplace::_M_get_deleter()</code>
- is accessible to users. This could be prevented if
- <code class="function">get_deleter&lt;_Sp_make_shared_tag&gt;()</code>
- always returned NULL, since the hack only needs to work at a
- lower level, not in the public API. This wouldn't be difficult,
- but hasn't been done since there is no danger of accidental
- misuse: users already know they are relying on unsupported
- features if they refer to implementation details such as
- _Sp_make_shared_tag.
- </p><p>
- tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
- would alter the ABI.
- </p><p>
- Exposing the alias constructor in TR1 mode could simplify the
- *_pointer_cast functions. Constructor could be private in TR1
- mode, with the cast functions as friends.
- </p></div></div><div class="sect2" title="Acknowledgments"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h3></div></div></div><p>
- The original authors of the Boost shared_ptr, which is really nice
- code to work with, Peter Dimov in particular for his help and
- invaluable advice on thread safety. Phillip Jordan and Paolo
- Carlini for the lock policy implementation.
- </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="Improving shared_ptr for C++0x, Revision 2"><a id="id678655"></a><p>[<abbr class="abbrev">
- n2351
- </abbr>] <span class="title"><i>
- Improving shared_ptr for C++0x, Revision 2
- </i>. </span><span class="subtitle">
- N2351
- . </span><span class="biblioid">
- <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="C++ Standard Library Active Issues List (Revision R52)"><a id="id678679"></a><p>[<abbr class="abbrev">
- n2456
- </abbr>] <span class="title"><i>
- C++ Standard Library Active Issues List (Revision R52)
- </i>. </span><span class="subtitle">
- N2456
- . </span><span class="biblioid">
- <a class="ulink" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="Working Draft, Standard for Programming Language C++"><a id="id661793"></a><p>[<abbr class="abbrev">
- n2461
- </abbr>] <span class="title"><i>
- Working Draft, Standard for Programming Language C++
- </i>. </span><span class="subtitle">
- N2461
- . </span><span class="biblioid">
- <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="Boost C++ Libraries documentation - shared_ptr class template"><a id="id612415"></a><p>[<abbr class="abbrev">
- boostshared_ptr
- </abbr>] <span class="title"><i>
- Boost C++ Libraries documentation - shared_ptr class template
- </i>. </span><span class="subtitle">
- N2461
- . </span><span class="biblioid">
- <a class="ulink" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">shared_ptr
- </a>
- . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="auto_ptr.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="memory.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">auto_ptr </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. Traits</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/source_code_style.html b/libstdc++-v3/doc/html/manual/source_code_style.html
index 8b9932cd032..8a45fe7dfd9 100644
--- a/libstdc++-v3/doc/html/manual/source_code_style.html
+++ b/libstdc++-v3/doc/html/manual/source_code_style.html
@@ -60,7 +60,7 @@
      these names as operators have been fixed.]<br />
<br />
      The full set of __* identifiers (combined from gcc/cp/lex.c and<br />
-      gcc/cplus-dem.c) that are either old or new, but are definitely <br />
+      gcc/cplus-dem.c) that are either old or new, but are definitely<br />
      recognized by the demangler, is:<br />
<br />
      __aa<br />
@@ -191,145 +191,165 @@
      __embedded_cplusplus<br />
      // long double conversion members mangled as __opr<br />
      // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html<br />
-      _opr<br />
+      __opr<br />
    </p></div></div><div class="sect2" title="By Example"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
      This library is written to appropriate C++ coding standards. As such,<br />
      it is intended to precede the recommendations of the GNU Coding<br />
      Standard, which can be referenced in full here:<br />
<br />
-      http://www.gnu.org/prep/standards/standards.html#Formatting<br />
+      <a class="ulink" href="http://www.gnu.org/prep/standards/standards.html#Formatting" target="_top">http://www.gnu.org/prep/standards/standards.html#Formatting</a><br />
<br />
      The rest of this is also interesting reading, but skip the "Design<br />
      Advice" part.<br />
<br />
      The GCC coding conventions are here, and are also useful:<br />
-      http://gcc.gnu.org/codingconventions.html<br />
+      <a class="ulink" href="http://gcc.gnu.org/codingconventions.html" target="_top">http://gcc.gnu.org/codingconventions.html</a><br />
<br />
      In addition, because it doesn't seem to be stated explicitly anywhere<br />
      else, there is an 80 column source limit.<br />
<br />
-      ChangeLog entries for member functions should use the<br />
+      <code class="filename">ChangeLog</code> entries for member functions should use the<br />
      classname::member function name syntax as follows:<br />
<br />
-      1999-04-15  Dennis Ritchie  &lt;dr@att.com&gt;<br />
+<code class="code"><br />
+1999-04-15  Dennis Ritchie  &lt;dr@att.com&gt;<br />
<br />
      * src/basic_file.cc (__basic_file::open): Fix thinko in<br />
      _G_HAVE_IO_FILE_OPEN bits.<br />
+</code><br />
<br />
      Notable areas of divergence from what may be previous local practice<br />
      (particularly for GNU C) include:<br />
<br />
      01. Pointers and references<br />
-      char* p = "flop";<br />
-      char&amp; c = *p;<br />
-      -NOT-<br />
-      char *p = "flop";  // wrong<br />
-      char &amp;c = *p;      // wrong<br />
-      <br />
-      Reason: In C++, definitions are mixed with executable code. Here,       <br />
-      p is being initialized, not *p. This is near-universal<br />
+      <code class="code"><br />
+        char* p = "flop";<br />
+        char&amp; c = *p;<br />
+          -NOT-<br />
+        char *p = "flop";  // wrong<br />
+        char &amp;c = *p;      // wrong<br />
+      </code><br />
+<br />
+      Reason: In C++, definitions are mixed with executable code. Here,<br />
+      <code class="code">p</code> is being initialized, not <code class="code">*p</code>.  This is near-universal<br />
      practice among C++ programmers; it is normal for C hackers<br />
      to switch spontaneously as they gain experience.<br />
<br />
      02. Operator names and parentheses<br />
-      operator==(type)<br />
-      -NOT-<br />
-      operator == (type)  // wrong<br />
-      <br />
-      Reason: The == is part of the function name. Separating<br />
-      it makes the declaration look like an expression. <br />
+      <code class="code"><br />
+        operator==(type)<br />
+          -NOT-<br />
+        operator == (type)  // wrong<br />
+      </code><br />
+<br />
+      Reason: The <code class="code">==</code> is part of the function name. Separating<br />
+      it makes the declaration look like an expression.<br />
<br />
      03. Function names and parentheses<br />
-      void mangle()<br />
-      -NOT-<br />
-      void mangle ()  // wrong<br />
+      <code class="code"><br />
+        void mangle()<br />
+          -NOT-<br />
+        void mangle ()  // wrong<br />
+      </code><br />
<br />
      Reason: no space before parentheses (except after a control-flow<br />
      keyword) is near-universal practice for C++. It identifies the<br />
-      parentheses as the function-call operator or declarator, as <br />
+      parentheses as the function-call operator or declarator, as<br />
      opposed to an expression or other overloaded use of parentheses.<br />
<br />
      04. Template function indentation<br />
-      template&lt;typename T&gt;<br />
-      void <br />
-      template_function(args)<br />
-      { }<br />
-      -NOT-<br />
-      template&lt;class T&gt;<br />
-      void template_function(args) {};<br />
-      <br />
+      <code class="code"><br />
+        template&lt;typename T&gt;<br />
+          void<br />
+          template_function(args)<br />
+          { }<br />
+          -NOT-<br />
+        template&lt;class T&gt;<br />
+        void template_function(args) {};<br />
+      </code><br />
+<br />
      Reason: In class definitions, without indentation whitespace is<br />
      needed both above and below the declaration to distinguish<br />
      it visually from other members. (Also, re: "typename"<br />
-      rather than "class".)  T often could be int, which is <br />
+      rather than "class".)  <code class="code">T</code> often could be <code class="code">int</code>, which is<br />
      not a class. ("class", here, is an anachronism.)<br />
<br />
      05. Template class indentation<br />
-      template&lt;typename _CharT, typename _Traits&gt;<br />
-      class basic_ios : public ios_base<br />
-      {<br />
-      public:<br />
-      // Types:<br />
-      };<br />
-      -NOT-<br />
-      template&lt;class _CharT, class _Traits&gt;<br />
-      class basic_ios : public ios_base<br />
-      {<br />
-      public:<br />
-      // Types:<br />
-      };<br />
-      -NOT-<br />
-      template&lt;class _CharT, class _Traits&gt;<br />
-      class basic_ios : public ios_base<br />
-      {<br />
-      public:<br />
-      // Types:<br />
-      };<br />
+      <code class="code"><br />
+        template&lt;typename _CharT, typename _Traits&gt;<br />
+          class basic_ios : public ios_base<br />
+          {<br />
+          public:<br />
+            // Types:<br />
+          };<br />
+          -NOT-<br />
+        template&lt;class _CharT, class _Traits&gt;<br />
+        class basic_ios : public ios_base<br />
+          {<br />
+          public:<br />
+            // Types:<br />
+          };<br />
+          -NOT-<br />
+        template&lt;class _CharT, class _Traits&gt;<br />
+          class basic_ios : public ios_base<br />
+        {<br />
+          public:<br />
+            // Types:<br />
+        };<br />
+      </code><br />
<br />
      06. Enumerators<br />
-      enum<br />
-      {<br />
-      space = _ISspace,<br />
-      print = _ISprint,<br />
-      cntrl = _IScntrl<br />
-      };<br />
-      -NOT-<br />
-      enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };<br />
+      <code class="code"><br />
+        enum<br />
+        {<br />
+          space = _ISspace,<br />
+          print = _ISprint,<br />
+          cntrl = _IScntrl<br />
+        };<br />
+          -NOT-<br />
+        enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };<br />
+      </code><br />
<br />
      07. Member initialization lists<br />
      All one line, separate from class name.<br />
<br />
-      gribble::gribble() <br />
-      : _M_private_data(0), _M_more_stuff(0), _M_helper(0);<br />
-      { }<br />
-      -NOT-<br />
-      gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0);<br />
-      { }<br />
+      <code class="code"><br />
+        gribble::gribble()<br />
+        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+          -NOT-<br />
+        gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+      </code><br />
<br />
      08. Try/Catch blocks<br />
-      try <br />
-      {<br />
-      //<br />
-      }   <br />
-      catch (...)<br />
-      {<br />
-      //<br />
-      }   <br />
-      -NOT-<br />
-      try {<br />
-      // <br />
-      } catch(...) { <br />
-      //<br />
-      }<br />
+      <code class="code"><br />
+        try<br />
+          {<br />
+            //<br />
+          }<br />
+        catch (...)<br />
+          {<br />
+            //<br />
+          }<br />
+          -NOT-<br />
+        try {<br />
+          //<br />
+        } catch(...) {<br />
+          //<br />
+        }<br />
+      </code><br />
<br />
      09. Member functions declarations and definitions<br />
      Keywords such as extern, static, export, explicit, inline, etc<br />
      go on the line above the function name. Thus<br />
<br />
-      virtual int   <br />
+      <code class="code"><br />
+      virtual int<br />
      foo()<br />
      -NOT-<br />
      virtual int foo()<br />
+      </code><br />
<br />
      Reason: GNU coding conventions dictate return types for functions<br />
      are on a separate line than the function name and parameter list<br />
@@ -340,42 +360,49 @@
<br />
<br />
      10. Invocation of member functions with "this-&gt;"<br />
-      For non-uglified names, use this-&gt;name to call the function.<br />
+      For non-uglified names, use <code class="code">this-&gt;name</code> to call the function.<br />
<br />
+      <code class="code"><br />
      this-&gt;sync()<br />
      -NOT-<br />
      sync()<br />
+      </code><br />
<br />
      Reason: Koenig lookup.<br />
<br />
      11. Namespaces<br />
+      <code class="code"><br />
      namespace std<br />
      {<br />
-      blah blah blah;<br />
+        blah blah blah;<br />
      } // namespace std<br />
<br />
      -NOT-<br />
<br />
      namespace std {<br />
-      blah blah blah;<br />
+        blah blah blah;<br />
      } // namespace std<br />
+      </code><br />
<br />
      12. Spacing under protected and private in class declarations:<br />
      space above, none below<br />
      i.e.<br />
<br />
+      <code class="code"><br />
      public:<br />
-      int foo;<br />
+        int foo;<br />
<br />
      -NOT-<br />
      public:<br />
-      <br />
-      int foo;<br />
+<br />
+        int foo;<br />
+      </code><br />
<br />
      13. Spacing WRT return statements.<br />
      no extra spacing before returns, no parenthesis<br />
      i.e.<br />
<br />
+      <code class="code"><br />
      }<br />
      return __ret;<br />
<br />
@@ -388,21 +415,22 @@
<br />
      }<br />
      return (__ret);<br />
+      </code><br />
<br />
<br />
      14. Location of global variables.<br />
      All global variables of class type, whether in the "user visible"<br />
-      space (e.g., cin) or the implementation namespace, must be defined<br />
+      space (e.g., <code class="code">cin</code>) or the implementation namespace, must be defined<br />
      as a character array with the appropriate alignment and then later<br />
      re-initialized to the correct value.<br />
<br />
      This is due to startup issues on certain platforms, such as AIX.<br />
-      For more explanation and examples, see src/globals.cc. All such<br />
+      For more explanation and examples, see <code class="filename">src/globals.cc</code>. All such<br />
      variables should be contained in that file, for simplicity.<br />
<br />
      15. Exception abstractions<br />
-      Use the exception abstractions found in functexcept.h, which allow<br />
-      C++ programmers to use this library with -fno-exceptions. (Even if<br />
+      Use the exception abstractions found in <code class="filename">functexcept.h</code>, which allow<br />
+      C++ programmers to use this library with <code class="literal">-fno-exceptions</code>.  (Even if<br />
      that is rarely advisable, it's a necessary evil for backwards<br />
      compatibility.)<br />
<br />
@@ -410,9 +438,11 @@
      All start with the name of the function where the exception is<br />
      thrown, and then (optional) descriptive text is added. Example:<br />
<br />
+      <code class="code"><br />
      __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));<br />
+      </code><br />
<br />
-      Reason: The verbose terminate handler prints out exception::what(),<br />
+      Reason: The verbose terminate handler prints out <code class="code">exception::what()</code>,<br />
      as well as the typeinfo for the thrown exception. As this is the<br />
      default terminate handler, by putting location info into the<br />
      exception string, a very useful error message is printed out for<br />
@@ -428,27 +458,27 @@
<br />
      Name patterns:<br />
<br />
-      For nonstandard names appearing in Standard headers, we are constrained <br />
+      For nonstandard names appearing in Standard headers, we are constrained<br />
      to use names that begin with underscores. This is called "uglification".<br />
      The convention is:<br />
<br />
-      Local and argument names:  __[a-z].*<br />
+      Local and argument names:  <code class="literal">__[a-z].*</code><br />
<br />
-      Examples:  __count  __ix  __s1  <br />
+      Examples:  <code class="code">__count  __ix  __s1</code><br />
<br />
-      Type names and template formal-argument names: _[A-Z][^_].*<br />
+      Type names and template formal-argument names: <code class="literal">_[A-Z][^_].*</code><br />
<br />
-      Examples:  _Helper  _CharT  _N <br />
+      Examples:  <code class="code">_Helper  _CharT  _N</code><br />
<br />
-      Member data and function names: _M_.*<br />
+      Member data and function names: <code class="literal">_M_.*</code><br />
<br />
-      Examples:  _M_num_elements  _M_initialize ()<br />
+      Examples:  <code class="code">_M_num_elements  _M_initialize ()</code><br />
<br />
-      Static data members, constants, and enumerations: _S_.*<br />
+      Static data members, constants, and enumerations: <code class="literal">_S_.*</code><br />
<br />
-      Examples: _S_max_elements  _S_default_value<br />
+      Examples: <code class="code">_S_max_elements  _S_default_value</code><br />
<br />
-      Don't use names in the same scope that differ only in the prefix, <br />
+      Don't use names in the same scope that differ only in the prefix,<br />
      e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.<br />
      (The most tempting of these seem to be and "_T" and "__sz".)<br />
<br />
@@ -458,87 +488,88 @@
      --------------------------<br />
<br />
      [BY EXAMPLE]<br />
-      <br />
+      <code class="code"><br />
+<br />
      #ifndef  _HEADER_<br />
      #define  _HEADER_ 1<br />
<br />
      namespace std<br />
      {<br />
-      class gribble<br />
-      {<br />
-      public:<br />
-      gribble() throw();<br />
+        class gribble<br />
+        {<br />
+        public:<br />
+          gribble() throw();<br />
<br />
-      gribble(const gribble&amp;);<br />
+          gribble(const gribble&amp;);<br />
<br />
-      explicit <br />
-      gribble(int __howmany);<br />
+          explicit<br />
+          gribble(int __howmany);<br />
<br />
-      gribble&amp; <br />
-      operator=(const gribble&amp;);<br />
+          gribble&amp;<br />
+          operator=(const gribble&amp;);<br />
<br />
-      virtual <br />
-      ~gribble() throw ();<br />
+          virtual<br />
+          ~gribble() throw ();<br />
<br />
-      // Start with a capital letter, end with a period.<br />
-      inline void  <br />
-      public_member(const char* __arg) const;<br />
+          // Start with a capital letter, end with a period.<br />
+          inline void<br />
+          public_member(const char* __arg) const;<br />
<br />
-      // In-class function definitions should be restricted to one-liners.<br />
-      int <br />
-      one_line() { return 0 }<br />
+          // In-class function definitions should be restricted to one-liners.<br />
+          int<br />
+          one_line() { return 0 }<br />
<br />
-      int <br />
-      two_lines(const char* arg) <br />
-      { return strchr(arg, 'a'); }<br />
+          int<br />
+          two_lines(const char* arg)<br />
+          { return strchr(arg, 'a'); }<br />
<br />
-      inline int <br />
-      three_lines();  // inline, but defined below.<br />
+          inline int<br />
+          three_lines();  // inline, but defined below.<br />
<br />
-      // Note indentation.<br />
-      template&lt;typename _Formal_argument&gt;<br />
-      void <br />
-      public_template() const throw();<br />
+          // Note indentation.<br />
+          template&lt;typename _Formal_argument&gt;<br />
+            void<br />
+            public_template() const throw();<br />
<br />
-      template&lt;typename _Iterator&gt;<br />
-      void <br />
-      other_template();<br />
+          template&lt;typename _Iterator&gt;<br />
+            void<br />
+            other_template();<br />
<br />
-      private:<br />
-      class _Helper;<br />
+        private:<br />
+          class _Helper;<br />
<br />
-      int _M_private_data;<br />
-      int _M_more_stuff;<br />
-      _Helper* _M_helper;<br />
-      int _M_private_function();<br />
+          int _M_private_data;<br />
+          int _M_more_stuff;<br />
+          _Helper* _M_helper;<br />
+          int _M_private_function();<br />
<br />
-      enum _Enum <br />
-      { <br />
-      _S_one, <br />
-      _S_two <br />
-      };<br />
+          enum _Enum<br />
+            {<br />
+              _S_one,<br />
+              _S_two<br />
+            };<br />
<br />
-      static void <br />
-      _S_initialize_library();<br />
-      };<br />
+          static void<br />
+          _S_initialize_library();<br />
+        };<br />
<br />
-      // More-or-less-standard language features described by lack, not presence.<br />
+        // More-or-less-standard language features described by lack, not presence.<br />
      # ifndef _G_NO_LONGLONG<br />
-      extern long long _G_global_with_a_good_long_name;  // avoid globals!<br />
+        extern long long _G_global_with_a_good_long_name;  // avoid globals!<br />
      # endif<br />
<br />
-      // Avoid in-class inline definitions, define separately;<br />
-      // likewise for member class definitions:<br />
-      inline int<br />
-      gribble::public_member() const<br />
-      { int __local = 0; return __local; }<br />
+        // Avoid in-class inline definitions, define separately;<br />
+        // likewise for member class definitions:<br />
+        inline int<br />
+        gribble::public_member() const<br />
+        { int __local = 0; return __local; }<br />
<br />
-      class gribble::_Helper<br />
-      {<br />
-      int _M_stuff;<br />
+        class gribble::_Helper<br />
+        {<br />
+          int _M_stuff;<br />
<br />
-      friend class gribble;<br />
-      };<br />
+          friend class gribble;<br />
+        };<br />
      }<br />
<br />
      // Names beginning with "__": only for arguments and<br />
@@ -548,41 +579,42 @@
      #endif /* _HEADER_ */<br />
<br />
<br />
-      namespace std <br />
-      {<br />
-      template&lt;typename T&gt;  // notice: "typename", not "class", no space<br />
-      long_return_value_type&lt;with_many, args&gt;  <br />
-      function_name(char* pointer,               // "char *pointer" is wrong.<br />
-      char* argument, <br />
-      const Reference&amp; ref)<br />
-      {<br />
-      // int a_local;  /* wrong; see below. */<br />
-      if (test) <br />
-      { <br />
-      nested code <br />
-      }<br />
-      <br />
-      int a_local = 0;  // declare variable at first use.<br />
-<br />
-      //  char a, b, *p;   /* wrong */<br />
-      char a = 'a';<br />
-      char b = a + 1;<br />
-      char* c = "abc";  // each variable goes on its own line, always.<br />
-<br />
-      // except maybe here...<br />
-      for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {<br />
-      // ...<br />
-      }<br />
-      }<br />
-      <br />
-      gribble::gribble()<br />
-      : _M_private_data(0), _M_more_stuff(0), _M_helper(0);<br />
-      { }<br />
-<br />
-      inline int <br />
-      gribble::three_lines()<br />
+      namespace std<br />
      {<br />
-      // doesn't fit in one line.<br />
-      }<br />
+        template&lt;typename T&gt;  // notice: "typename", not "class", no space<br />
+          long_return_value_type&lt;with_many, args&gt;<br />
+          function_name(char* pointer,               // "char *pointer" is wrong.<br />
+                        char* argument,<br />
+                        const Reference&amp; ref)<br />
+          {<br />
+            // int a_local;  /* wrong; see below. */<br />
+            if (test)<br />
+            {<br />
+              nested code<br />
+            }<br />
+<br />
+            int a_local = 0;  // declare variable at first use.<br />
+<br />
+            //  char a, b, *p;   /* wrong */<br />
+            char a = 'a';<br />
+            char b = a + 1;<br />
+            char* c = "abc";  // each variable goes on its own line, always.<br />
+<br />
+            // except maybe here...<br />
+            for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {<br />
+              // ...<br />
+            }<br />
+          }<br />
+<br />
+        gribble::gribble()<br />
+        : _M_private_data(0), _M_more_stuff(0), _M_helper(0)<br />
+        { }<br />
+<br />
+        int<br />
+        gribble::three_lines()<br />
+        {<br />
+          // doesn't fit in one line.<br />
+        }<br />
      } // namespace std<br />
+      </code><br />
    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Documentation Style</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/source_organization.html b/libstdc++-v3/doc/html/manual/source_organization.html
index 2ac9f9041a3..4cb92481af7 100644
--- a/libstdc++-v3/doc/html/manual/source_organization.html
+++ b/libstdc++-v3/doc/html/manual/source_organization.html
@@ -20,26 +20,26 @@ It has subdirectories:<br />
<br />
    include/std<br />
      Files meant to be found by #include &lt;name&gt; directives in<br />
-      standard-conforming user programs.  <br />
+      standard-conforming user programs.<br />
<br />
    include/c<br />
-      Headers intended to directly include standard C headers. <br />
+      Headers intended to directly include standard C headers.<br />
      [NB: this can be enabled via --enable-cheaders=c]<br />
<br />
-    include/c_global <br />
+    include/c_global<br />
      Headers intended to include standard C headers in<br />
      the global namespace, and put select names into the std::<br />
      namespace.  [NB: this is the default, and is the same as<br />
      --enable-cheaders=c_global]<br />
<br />
-    include/c_std <br />
+    include/c_std<br />
      Headers intended to include standard C headers<br />
      already in namespace std, and put select names into the std::<br />
      namespace.  [NB: this is the same as --enable-cheaders=c_std]<br />
<br />
    include/bits<br />
      Files included by standard headers and by other files in<br />
-      the bits directory. <br />
+      the bits directory.<br />
<br />
    include/backward<br />
      Headers provided for backward compatibility, such as &lt;iostream.h&gt;.<br />
@@ -58,7 +58,7 @@ It has subdirectories:<br />
    installed.<br />
<br />
  testsuites/[backward, demangle, ext, performance, thread, 17_* to 27_*]<br />
-    Test programs are here, and may be used to begin to exercise the <br />
+    Test programs are here, and may be used to begin to exercise the<br />
    library.  Support for "make check" and "make check-install" is<br />
    complete, and runs through all the subdirectories here when this<br />
    command is issued from the build directory.  Please note that<br />
diff --git a/libstdc++-v3/doc/html/manual/spine.html b/libstdc++-v3/doc/html/manual/spine.html
index f5e3d1ebd3a..f34706d805a 100644
--- a/libstdc++-v3/doc/html/manual/spine.html
+++ b/libstdc++-v3/doc/html/manual/spine.html
@@ -2,48 +2,58 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book" title="The GNU C++ Library"><div class="titlepage"><div><div><h1 class="title"><a id="manual-index"></a>The GNU C++ Library</h1></div><div><p class="copyright">Copyright © 2009, 2010
<a class="ulink" href="http://www.fsf.org" target="_top">FSF</a>
- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id687837"></a><p>
+ </p></div><div><div class="legalnotice" title="Legal Notice"><a id="id451847"></a><p>
<a class="link" href="license.html" title="License">License</a>
</p></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="part"><a href="intro.html">I.
Introduction
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="support.html">II.
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt02.html">II.
+ Standard Contents
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="support.html">4.
Support
-</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="diagnostics.html">III.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
Diagnostics
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="utilities.html">IV.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="traits.html">12. Traits</a></span></dt></dl></dd><dt><span class="part"><a href="strings.html">V.
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
Strings
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="bk01pt05ch13.html">13. String Classes</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt05ch13.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s02.html">Case Sensitivity</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s03.html">Arbitrary Character Types</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s04.html">Tokenizing</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s05.html">Shrink to Fit</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s06.html">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="localization.html">VI.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="locales.html">14. Locales</a></span></dt><dd><dl><dt><span class="sect1"><a href="locales.html#manual.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="sect2"><a href="locales.html#locales.locale.req">Requirements</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.design">Design</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="facets.html">15. Facets aka Categories</a></span></dt><dd><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="containers.html">VII.
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
Containers
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="sequences.html">16. Sequences</a></span></dt><dd><dl><dt><span class="sect1"><a href="sequences.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="sect2"><a href="sequences.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="sect1"><a href="vector.html">vector</a></span></dt><dd><dl><dt><span class="sect2"><a href="vector.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="associative.html">17. Associative</a></span></dt><dd><dl><dt><span class="sect1"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect1"><a href="bitset.html">bitset</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitset.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="sect2"><a href="bitset.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers_and_c.html">18. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="iterators.html">VIII.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
Iterators
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="bk01pt08ch19.html">19. Predefined</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt08ch19.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect1"><a href="bk01pt08ch19s02.html">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="algorithms.html">IX.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="algorithms.html">11.
Algorithms
-</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt09pr02.html"></a></span></dt><dt><span class="chapter"><a href="bk01pt09ch20.html">20. Mutating</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt09ch20.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt09ch20.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="numerics.html">X.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="numerics.html">12.
Numerics
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="complex.html">21. Complex</a></span></dt><dd><dl><dt><span class="sect1"><a href="complex.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="chapter"><a href="generalized_numeric_operations.html">22. Generalized Operations</a></span></dt><dt><span class="chapter"><a href="numerics_and_c.html">23. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect1"><a href="bk01pt10ch23s02.html">C99</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="io.html">XI.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="io.html">13.
Input and Output
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="iostream_objects.html">24. Iostream Objects</a></span></dt><dt><span class="chapter"><a href="streambufs.html">25. Stream Buffers</a></span></dt><dd><dl><dt><span class="sect1"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch25s02.html">Buffering</a></span></dt></dl></dd><dt><span class="chapter"><a href="stringstreams.html">26. Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="stringstreams.html#manual.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="chapter"><a href="fstreams.html">27. File Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="fstreams.html#manual.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch27s02.html">Binary Input and Output</a></span></dt></dl></dd><dt><span class="chapter"><a href="io_and_c.html">28. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="io_and_c.html#manual.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch28s02.html">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="extensions.html">XII.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="atomics.html">14.
+ Atomics
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="concurrency.html">15.
+ Concurrency
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="extensions.html">III.
Extensions
-</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt12pr03.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">29. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">30. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch30s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">31. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">32. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">33. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">34. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">35. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">36. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">37. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">38. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">39. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">40. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">41. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_contributing.html">A.
+</a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="bk01pt04.html">IV.
+ Appendices
+</a></span></dt><dd><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
Contributing
-</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.combines">Combines</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
Porting and Maintenance
</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="sect2"><a href="test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C.
@@ -51,7 +61,7 @@
</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
<acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt><dt><span class="index"><a href="bk01ix01.html">Index</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1.1. <a href="status.html#id631851">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#id616054">C++ 200x Implementation Status</a></dt><dt>1.3. <a href="status.html#id623542">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#id602015">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#id619494">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#id616284">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#id667695">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#id605616">C++ 200x Library Headers</a></dt><dt>3.5. <a href="using_headers.html#id606881">C++ 200x Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#id593853">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#id680678">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#id563959">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#id661850">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#id614025">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#id662204">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#id611004">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#id592292">Extension Parallel Headers</a></dt><dt>30.1. <a href="bk01pt12ch30s03.html#id705570">Debugging Containers</a></dt><dt>30.2. <a href="bk01pt12ch30s03.html#id607020">Debugging Containers C++0x</a></dt><dt>31.1. <a href="bk01pt12ch31s03.html#id713517">Parallel Algorithms</a></dt><dt>32.1. <a href="bk01pt12ch32s02.html#id594983">Code Location</a></dt><dt>32.2. <a href="bk01pt12ch32s07.html#id626153">Diagnostics</a></dt><dt>33.1. <a href="bitmap_allocator.html#id620814">Bitmap Allocator Memory Map</a></dt><dt>A.1. <a href="documentation_style.html#id645775">HTML to Doxygen markup comparison</a></dt><dt>A.2. <a href="documentation_style.html#id724766">HTML to Docbook XML markup comparison</a></dt><dt>A.3. <a href="documentation_style.html#id631420">Docbook XML Element Use</a></dt><dt>B.1. <a href="api.html#id653273">Extension Allocators</a></dt><dt>B.2. <a href="api.html#id594438">Extension Allocators Continued</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Documentation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1.1. <a href="status.html#id475774">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#id399969">C++ 200x Implementation Status</a></dt><dt>1.3. <a href="status.html#id449588">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#id471043">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#id444212">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#id470920">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#id349475">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#id477183">C++ 200x Library Headers</a></dt><dt>3.5. <a href="using_headers.html#id463447">C++ 200x Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#id387306">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#id479735">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#id400127">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#id401869">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#id467180">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#id403996">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#id403404">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#id477245">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#id419645">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#id391116">Debugging Containers C++0x</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#id416292">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#id442414">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#id470044">Profile Diagnostics</a></dt><dt>20.1. <a href="bitmap_allocator.html#id376664">Bitmap Allocator Memory Map</a></dt><dt>A.1. <a href="documentation_style.html#id419590">HTML to Doxygen Markup Comparison</a></dt><dt>A.2. <a href="documentation_style.html#id502132">HTML to Docbook XML Markup Comparison</a></dt><dt>A.3. <a href="documentation_style.html#id502333">Docbook XML Element Use</a></dt><dt>B.1. <a href="api.html#id510444">Extension Allocators</a></dt><dt>B.2. <a href="api.html#id396448">Extension Allocators Continued</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Documentation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
Introduction
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html
index be894aa296d..fa780af4e20 100644
--- a/libstdc++-v3/doc/html/manual/status.html
+++ b/libstdc++-v3/doc/html/manual/status.html
@@ -8,7 +8,7 @@ This status table is based on the table of contents of ISO/IEC 14882:2003.
</p><p>
This page describes the C++ support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="id631851"></a><p class="title"><b>Table 1.1. C++ 1998/2003 Implementation Status</b></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="id475774"></a><p class="title"><b>Table 1.1. C++ 1998/2003 Implementation Status</b></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
@@ -58,8 +58,8 @@ particular release.
<code class="code">[1.3.5] implementation-defined behavior</code>
</span></dt><dd><p>
Behavior, for a well-formed program construct and correct data, that
- depends on the implementation <span class="emphasis"><em>and that each implementation
- shall document</em></span>.
+ depends on the implementation <span class="emphasis"><em>and that each implementation
+ shall document</em></span>.
</p></dd></dl></div></blockquote></div><p>
We do so here, for the C++ library only. Behavior of the
compiler, linker, runtime loader, and other elements of "the
@@ -76,7 +76,7 @@ particular release.
<span class="emphasis"><em>[17.4.4.5]</em></span> Non-reentrant functions are probably best
discussed in the various sections on multithreading (see above).
</p><p><span class="emphasis"><em>[18.1]/4</em></span> The type of <code class="code">NULL</code> is described
- <a class="link" href="bk01pt02ch04s03.html" title="NULL">here</a>.
+ <a class="link" href="support.html#std.support.types.null" title="NULL">here</a>.
</p><p><span class="emphasis"><em>[18.3]/8</em></span> Even though it's listed in the library
sections, libstdc++ has zero control over what the cleanup code hands
back to the runtime loader. Talk to the compiler people. :-)
@@ -90,7 +90,7 @@ particular release.
class. But they are the <span class="emphasis"><em>mangled</em></span> names; you will need to call
<code class="code">c++filt</code> and pass the names as command-line parameters to
demangle them, or call a
- <a class="link" href="ext_demangling.html" title="Chapter 40. Demangling">runtime demangler function</a>.
+ <a class="link" href="ext_demangling.html" title="Chapter 27. Demangling">runtime demangler function</a>.
(The classes in <code class="code">&lt;stdexcept&gt;</code> have constructors which
require an argument to use later for <code class="code">what()</code> calls, so the
problem of <code class="code">what()</code>'s value does not arise in most
@@ -117,11 +117,11 @@ particular release.
here would defeat the purpose. :-)
</p><p><span class="emphasis"><em>[21.1.3.1]/5</em></span> I don't really know about
the mbstate_t stuff... see
- the <a class="link" href="codecvt.html" title="codecvt">chapter 22
+ the <a class="link" href="facets.html#std.localization.facet.codecvt" title="codecvt">chapter 22
notes</a> for what does exist.
</p><p><span class="emphasis"><em>[22.*]</em></span> Anything and everything we have on locale
implementation will be described
- <a class="link" href="locales.html#manual.localization.locales.locale" title="locale">over here</a>.
+ <a class="link" href="localization.html#std.localization.locales.locale" title="locale">over here</a>.
</p><p><span class="emphasis"><em>[26.2.8]/9</em></span> I have no idea what
<code class="code">complex&lt;T&gt;</code>'s pow(0,0) returns.
</p><p><span class="emphasis"><em>[27.4.2.4]/2</em></span> Calling
@@ -139,13 +139,13 @@ particular release.
</p><p><span class="emphasis"><em>[27.7.1.3]/16</em></span>,
<span class="emphasis"><em>[27.8.1.4]/10</em></span>
The effects of <code class="code">pubsetbuf/setbuf</code> are described
- <a class="link" href="io.html" title="Part XI.  Input and Output">in this chapter</a>.
+ <a class="link" href="io.html" title="Chapter 13.  Input and Output">in this chapter</a>.
</p><p><span class="emphasis"><em>[27.8.1.4]/16</em></span> Calling <code class="code">fstream::sync</code> when
a get area exists will... whatever <code class="code">fflush()</code> does, I think.
</p></div></div><div class="sect2" title="C++ 200x"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.200x"></a>C++ 200x</h3></div></div></div><p>
-This table is based on the table of contents of ISO/IEC
-Doc No: N3000=09-0190 Date: 2009-11-09
-Working Draft, Standard for Programming Language C++
+This table is based on the table of contents of ISO/IEC
+JTC1 SC22 WG21 Doc No: N3092 Date: 2010-03-26
+Final Committee Draft, Standard for Programming Language C++
</p><p>
In this implementation <code class="literal">-std=gnu++0x</code> or
<code class="literal">-std=c++0x</code> flags must be used to enable language
@@ -157,56 +157,56 @@ presence of the required flag.
</p><p>
This page describes the C++0x support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="id616054"></a><p class="title"><b>Table 1.2. C++ 200x Implementation Status</b></p><div class="table-contents"><table summary="C++ 200x Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="id399969"></a><p class="title"><b>Table 1.2. C++ 200x Implementation Status</b></p><div class="table-contents"><table summary="C++ 200x Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>18</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Language support</em></span>
- </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t, nullptr_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.1</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.1.1</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.3.1.2</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.1.3</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.1.4</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.1.5</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.4.2</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Partial</td><td align="left">May use configure-generated stdint.h via GCC_HEADER_STDINT</td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">Missing quick_exit, at_quick_exit</td></tr><tr><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.7.2</td><td align="left">Class type_index</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.4</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Violation exception-specifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left">Class <code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.9.3</td><td align="left">Initializer list concept maps</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.1</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.1.1</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.3.1.2</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.1.3</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.1.4</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.1.5</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Violating exception-specifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>19</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Diagnostics</em></span>
- </td></tr><tr><td align="left">19.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.2</td><td align="left">Exception classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.3</td><td align="left">Assertions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.4</td><td align="left">Error numbers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5</td><td align="left">System error support</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">19.5.1</td><td align="left">Class <code class="code">error_category</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">19.5.2</td><td align="left">Class <code class="code">error_code</code></td><td align="left">Partial</td><td align="left">Missing concept ErrorCodeEnum</td></tr><tr bgcolor="#B0B0B0"><td align="left">19.5.3</td><td align="left">Class <code class="code">error_condition</code></td><td align="left">Partial</td><td align="left">Missing concept ErrorConditionEnum</td></tr><tr><td align="left">19.5.4</td><td align="left">Comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.5</td><td align="left">Class <code class="code">system_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">19.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.2</td><td align="left">Exception classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.3</td><td align="left">Assertions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.4</td><td align="left">Error numbers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5</td><td align="left">System error support</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">19.5.1</td><td align="left">Class <code class="code">error_category</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.2</td><td align="left">Class <code class="code">error_code</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.3</td><td align="left">Class <code class="code">error_condition</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.4</td><td align="left">Comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">19.5.5</td><td align="left">Class <code class="code">system_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>20</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>General utilities</em></span>
- </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.1</td><td align="left">General</td><td align="left">Partial</td><td align="left">Missing all concepts</td></tr><tr bgcolor="#C8B0B0"><td align="left">20.2</td><td align="left">Concepts</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.3</td><td align="left">Utility components</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.1</td><td align="left">Operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.2</td><td align="left"><code class="code">forward</code> and <code class="code">move</code> helpers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.3</td><td align="left"><code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.4</td><td align="left">tuple-like access to <code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.3.5</td><td align="left">Range concept maps for <code class="code">pair</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.3.6</td><td align="left">Class template <code class="code">bitset</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.4</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.1</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.2</td><td align="left">Arithmetic on <code class="code">ratio</code> types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.3</td><td align="left">Comparison of <code class="code">ratio</code> types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.4.4</td><td align="left">SI types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.5</td><td align="left">Tuples</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.5.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.5.2</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Partial</td><td align="left">Missing range concept maps</td></tr><tr><td align="left">20.6</td><td align="left">Metaprogramming and type traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.6.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.4</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.4.1</td><td align="left">Primary type categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.4.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.6.4.3</td><td align="left">Type properties</td><td align="left">Partial</td><td align="left">Missing is_system_layout</td></tr><tr><td align="left">20.6.5</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.6</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.6.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.6.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.6.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.6.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.6.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.6.7</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing decay</td></tr><tr><td align="left">20.7</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.7.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.3</td><td align="left">Base</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.4</td><td align="left">Function object return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.5</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.7.6</td><td align="left">Identity operation</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.7.7</td><td align="left">Arithmetic operation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.8</td><td align="left">Comparisons</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.9</td><td align="left">Logical operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.10</td><td align="left">Bitwise operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.11</td><td align="left">Negators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.12</td><td align="left">Template <code class="code">function</code> and function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.13</td><td align="left">Adaptors for pointers to functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.14</td><td align="left">Adaptors for pointers to members</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.15</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.16</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.7.16.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.16.2</td><td align="left">Class template <code class="code">function</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.17</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.7.18</td><td align="left">Class template <code class="code">reference_closure</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8</td><td align="left">Memory</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.01</td><td align="left">Allocator argument tag</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.02</td><td align="left">Allocators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.02.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.02.2</td><td align="left">Allocator concept</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.02.3</td><td align="left">Support for legacy allocators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.02.4</td><td align="left">Allocator and Legacy Allocator members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.03</td><td align="left">Allocator-related element concepts</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.04</td><td align="left">Allocator propagation traits</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.05</td><td align="left">Allocator propagation map</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.06</td><td align="left">The default allocator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.07</td><td align="left">Scoped allocator adaptor</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.07.1</td><td align="left"><code class="code">scoped_allocator_adaptor_base</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.07.2</td><td align="left"><code class="code">scoped_allocator_adaptor constructors</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.07.3</td><td align="left"><code class="code">scoped_allocator_adaptor2</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.07.3</td><td align="left">scoped_allocator_adaptor members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.07.4</td><td align="left"><code class="code">scoped_allocator_adaptor globals</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.08</td><td align="left">Raw storage iterator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.09</td><td align="left">Temporary buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.10</td><td align="left"><code class="code">construct_element</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.11</td><td align="left">Specialized algorithms</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.11.1</td><td align="left"><code class="code">addressof</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.11.2</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.11.3</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.11.4</td><td align="left"><code class="code">uninitialized_fill_n</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.12</td><td align="left">Class template <code class="code">unique_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.13</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.13.1</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.13.2</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left">Y</td><td align="left">
+ </td></tr><tr><td align="left">20.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.2</td><td align="left">Requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3</td><td align="left">Utility components</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.1</td><td align="left">Operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.2</td><td align="left">Swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.3</td><td align="left"><code class="code">forward</code> and <code class="code">move</code> helpers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.4</td><td align="left">Function template <code class="code">declval</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.3.5</td><td align="left">Pairs</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.3.5.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.3.5.2</td><td align="left">Class template <code class="code">pair</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.3.5.3</td><td align="left">Tuple-like access to <code class="code">pair</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.3.5.4</td><td align="left"><code class="code">pair</code> range access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.3.5.5</td><td align="left">Piecewise construction</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.4</td><td align="left">Tuples</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.4.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.4.2</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Partial</td><td align="left">Missing constexpr and range access</td></tr><tr><td align="left">20.5</td><td align="left">Class template <code class="code">bitset</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.6</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.6.1</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.2</td><td align="left">Arithmetic on <code class="code">ratio</code> types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.3</td><td align="left">Comparison of <code class="code">ratio</code> types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.6.4</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7</td><td align="left">Metaprogramming and type traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.7.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.7.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.4</td><td align="left">Unary Type Traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.4.1</td><td align="left">Primary type categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.4.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.7.4.3</td><td align="left">Type properties</td><td align="left">Partial</td><td align="left">Missing is_trivially_copyable, is_literal_type, is_nothrow_constructible</td></tr><tr><td align="left">20.7.5</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.7.6</td><td align="left">Transformations between types</td><td align="left">Partial</td><td align="left">Missing underlying_type</td></tr><tr><td align="left">20.7.6.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.6.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.6.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.6.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.6.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.7.6.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.3</td><td align="left">Base</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.4</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.5</td><td align="left">Arithmetic operation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.6</td><td align="left">Comparisons</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.7</td><td align="left">Logical operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.8</td><td align="left">Bitwise operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.9</td><td align="left">Negators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.10</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.11</td><td align="left">Adaptors for pointers to functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.12</td><td align="left">Adaptors for pointers to members</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.13</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.14</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.8.14.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.14.2</td><td align="left">Class template <code class="code">function</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.15</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9</td><td align="left">Memory</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.1</td><td align="left">Allocator argument tag</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.2</td><td align="left"><code class="code">uses_allocator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.3</td><td align="left">Pointer traits</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.4</td><td align="left">Allocator traits</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.9.5</td><td align="left">The default allocator</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.6</td><td align="left">Scoped allocator adaptor</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.6.1</td><td align="left">Scoped allocator adaptor member types</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.6.2</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.6.3</td><td align="left">Scoped allocator adaptor members</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Raw storage iterator</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.8</td><td align="left">Temporary buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.9</td><td align="left">Specialized algorithms</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.9.1</td><td align="left"><code class="code">addressof</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.9.9.2</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.9.3</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.9.4</td><td align="left"><code class="code">uninitialized_fill_n</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.10</td><td align="left">Class template <code class="code">unique_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.11</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.11.1</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.11.2</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left">Y</td><td align="left">
<p>
Uses code from
<a class="ulink" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
- </p>
- </td></tr><tr><td align="left">20.8.13.3</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.13.4</td><td align="left">Class template <code class="code">owner_less</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.8.13.5</td><td align="left">Class template <code class="code">emable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.8.13.6</td><td align="left"><code class="code">shared_ptr</code> atomic access</td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.8.13.7</td><td align="left">Pointer safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.8.14</td><td align="left">Align</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.8.15</td><td align="left">C library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.1</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.2</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.2.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.2.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.9.2.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.3</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.9.4</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.9.5</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.5.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.5.2</td><td align="left">Class <code class="code">monotonic_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.5.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </p>
+ </td></tr><tr><td align="left">20.9.11.3</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.11.4</td><td align="left">Class template <code class="code">emable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.11.5</td><td align="left"><code class="code">shared_ptr</code> atomic access</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.9.11.6</td><td align="left">Hash support</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.12</td><td align="left">Pointer safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.9.13</td><td align="left">Align</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">20.9.16</td><td align="left">C library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.2.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.10.2.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.10.4</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">20.10.5</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.5.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5.2</td><td align="left">Class <code class="code">monotonic_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">20.12</td><td align="left">Class <code class="code">type_index</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>21</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Strings</em></span>
- </td></tr><tr><td align="left">21.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2</td><td align="left">Character traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.2.1</td><td align="left">Character traits requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.2</td><td align="left">traits typedef</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.3</td><td align="left"><code class="code">char_traits</code> specializations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.2.3.1</td><td align="left">struct <code class="code">char_traits&lt;char&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.2</td><td align="left">struct <code class="code">char_traits&lt;char16_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.3</td><td align="left">struct <code class="code">char_traits&lt;char32_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.4</td><td align="left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.3</td><td align="left">String classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.4</td><td align="left">Class template <code class="code">basic_string</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.5</td><td align="left">Numeric Conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.6</td><td align="left">Null-terminated sequence utilities</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">21.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2</td><td align="left">Character traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.2.1</td><td align="left">Character traits requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.2</td><td align="left">traits typedefs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.2.3</td><td align="left"><code class="code">char_traits</code> specializations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">21.2.3.1</td><td align="left">struct <code class="code">char_traits&lt;char&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.2</td><td align="left">struct <code class="code">char_traits&lt;char16_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.3</td><td align="left">struct <code class="code">char_traits&lt;char32_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.2.3.4</td><td align="left">struct <code class="code">char_traits&lt;wchar_t&gt;</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">21.3</td><td align="left">String classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.4</td><td align="left">Class template <code class="code">basic_string</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.5</td><td align="left">Numeric Conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.6</td><td align="left">Hash support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">21.7</td><td align="left">Null-terminated sequence utilities</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">
<span class="emphasis"><em>22</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Localization</em></span>
- </td></tr><tr><td align="left">22.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2</td><td align="left">Header <code class="code">&lt;locale&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3</td><td align="left">Locales</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.1</td><td align="left">Class <code class="code">locale</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.2</td><td align="left"><code class="code">locale</code> globals</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3</td><td align="left">Convenience interfaces</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.1</td><td align="left">Character classification</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3.2</td><td align="left">Conversions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.2.1</td><td align="left">Character</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.2</td><td align="left">String</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.3</td><td align="left">Buffer</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.4</td><td align="left">Standard locale categories</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.1</td><td align="left"><code class="code">ctype</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2</td><td align="left">Numeric</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.2.1</td><td align="left"><code class="code">num_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2.2</td><td align="left"><code class="code">num_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.3</td><td align="left"><code class="code">num_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.4</td><td align="left"><code class="code">collate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5</td><td align="left">Time</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.5.1</td><td align="left"><code class="code">time_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.2</td><td align="left"><code class="code">time_get_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left"><code class="code">time_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left"><code class="code">time_put_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6</td><td align="left">Monetary</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.6.1</td><td align="left"><code class="code">money_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.2</td><td align="left"><code class="code">money_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.3</td><td align="left"><code class="code">money_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.4</td><td align="left"><code class="code">money_punct_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.7</td><td align="left"><code class="code">messages</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.8</td><td align="left">Program-defined facets</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.5</td><td align="left">Standard code conversion facets</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.6</td><td align="left">C Library Locales</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">22.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.2</td><td align="left">Header <code class="code">&lt;locale&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3</td><td align="left">Locales</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.1</td><td align="left">Class <code class="code">locale</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.2</td><td align="left"><code class="code">locale</code> globals</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3</td><td align="left">Convenience interfaces</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.1</td><td align="left">Character classification</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.3.3.2</td><td align="left">Conversions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.3.3.2.1</td><td align="left">Character conversions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.2</td><td align="left"><code class="code">string</code> conversions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.3.3.2.3</td><td align="left">Buffer conversions</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.4</td><td align="left">Standard <code class="code">locale</code> categories</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.1</td><td align="left">The <code class="code">ctype</code> category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2</td><td align="left">The numeric category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.2.1</td><td align="left"><code class="code">num_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.2.2</td><td align="left"><code class="code">num_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.3</td><td align="left">The numeric punctuation facet</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.4</td><td align="left">The collate category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5</td><td align="left">The time category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.5.1</td><td align="left">Class template <code class="code">time_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.2</td><td align="left">Class template <code class="code">time_get_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left">Class template <code class="code">time_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.5.3</td><td align="left">Class template <code class="code">time_put_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6</td><td align="left">The monetary category</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">22.4.6.1</td><td align="left">Class template <code class="code">money_get</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.2</td><td align="left">Class template <code class="code">money_put</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.3</td><td align="left">Class template <code class="code">money_punct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.6.4</td><td align="left">Class template <code class="code">money_punct_byname</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.7</td><td align="left">The message retrieval category</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">22.4.8</td><td align="left">Program-defined facets</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">22.5</td><td align="left">Standard code conversion facets</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">22.6</td><td align="left">C Library Locales</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>23</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Containers</em></span>
- </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.1</td><td align="left">General</td><td align="left">Partial</td><td align="left">Missing concepts</td></tr><tr><td align="left">23.2</td><td align="left">Container requirements</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.2.1</td><td align="left">General requirements</td><td align="left">Partial</td><td align="left">Missing construct_element</td></tr><tr><td align="left">23.2.2</td><td align="left">Data races</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.1</td><td align="left">Class template <code class="code">array</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">forward_list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5</td><td align="left">Adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.5.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.6</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.7</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.4.1</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.2</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.3</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.4</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5</td><td align="left">Unordered associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.5.1</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.2</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.4</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">23.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2</td><td align="left">Container requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2.1</td><td align="left">General container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.2</td><td align="left">Data races</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3</td><td align="left">Sequence containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.4</td><td align="left">Associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.5</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.1</td><td align="left">Class template <code class="code">array</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">forward_list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5</td><td align="left">Container adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.5.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.6</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.7</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.4.1</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.2</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.3</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.4</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5</td><td align="left">Unordered associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.5.1</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.2</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.4</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>24</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Iterators</em></span>
- </td></tr><tr bgcolor="#B0B0B0"><td align="left">24.1</td><td align="left">General</td><td align="left">Partial</td><td align="left">Missing concepts</td></tr><tr bgcolor="#C8B0B0"><td align="left">24.2</td><td align="left">Iterator concepts</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">24.3</td><td align="left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td align="left">Partial</td><td align="left">Missing concepts</td></tr><tr><td align="left">24.4</td><td align="left">Iterator operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5</td><td align="left">Predefined iterators and Iterator adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.5.1</td><td align="left">Reverse iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.2</td><td align="left">Insert iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.3</td><td align="left">Move iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6</td><td align="left">Stream iterators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.6.1</td><td align="left">Class template <code class="code">istream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.2</td><td align="left">Class template <code class="code">ostream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.3</td><td align="left">Class template <code class="code">istreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.4</td><td align="left">Class template <code class="code">ostreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.7</td><td align="left">Insert iterators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.7.1</td><td align="left">Class template <code class="code">back_insert_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.7.3</td><td align="left">Class template <code class="code">front_insert_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.7.5</td><td align="left">Class template <code class="code">insert_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">24.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.2</td><td align="left">Iterator requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.3</td><td align="left">Header <code class="code">&lt;iterator&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.4</td><td align="left">Iterator primitives</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5</td><td align="left">Iterator adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.5.1</td><td align="left">Reverse iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.2</td><td align="left">Insert iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.5.3</td><td align="left">Move iterators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6</td><td align="left">Stream iterators</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">24.6.1</td><td align="left">Class template <code class="code">istream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.2</td><td align="left">Class template <code class="code">ostream_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.3</td><td align="left">Class template <code class="code">istreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">24.6.4</td><td align="left">Class template <code class="code">ostreambuf_iterator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">24.6.5</td><td align="left">range access</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>25</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Algorithms</em></span>
- </td></tr><tr bgcolor="#B0B0B0"><td align="left">25.1</td><td align="left">General</td><td align="left">Partial</td><td align="left">Missing concepts</td></tr><tr><td align="left">25.2</td><td align="left">Header <code class="code">&lt;algorithm&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.4</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.5</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">25.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.2</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.4</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.5</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>26</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Numerics</em></span>
- </td></tr><tr><td align="left">26.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.2</td><td align="left">Numeric type requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3</td><td align="left">The floating-point environment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4</td><td align="left">Complex numbers</td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">26.5.1</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Partial</td><td align="left">Missing concepts</td></tr><tr bgcolor="#C8B0B0"><td align="left">26.5.2</td><td align="left">Concepts and related requirements</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">26.5.3</td><td align="left">Random number engines</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.3.1</td><td align="left">Class template <code class="code">linear_congruential_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.2</td><td align="left">Class template <code class="code">mersenne_twister_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.3</td><td align="left">Class template <code class="code">subtract_with_carry_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4</td><td align="left">Random number engine adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.4.1</td><td align="left">Class template <code class="code">discard_block_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.2</td><td align="left">Class template <code class="code">independent_bits_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.3</td><td align="left">Class template <code class="code">shuffle_order_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.5</td><td align="left">Engines and engine adaptors with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.7</td><td align="left">Utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.7.1</td><td align="left">Class <code class="code">seed_seq</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.7.2</td><td align="left">Function template generate_canonical</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8</td><td align="left">Random number distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.1</td><td align="left">Uniform distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.1.1</td><td align="left">Class template <code class="code">uniform_int_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.1.2</td><td align="left">Class template <code class="code">uniform_real_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2</td><td align="left">Bernoulli distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.1</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.2</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.4</td><td align="left">Class template <code class="code">negative_binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3</td><td align="left">Poisson distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.1</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.2</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.3</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.4</td><td align="left">Class template <code class="code">weibull_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.5</td><td align="left">Class template <code class="code">extreme_value_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4</td><td align="left">Normal distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.1</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.2</td><td align="left">Class template <code class="code">lognormal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.3</td><td align="left">Class template <code class="code">chi_squared_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.4</td><td align="left">Class template <code class="code">cauchy_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.5</td><td align="left">Class template <code class="code">fisher_f_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.6</td><td align="left">Class template <code class="code">student_t_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5</td><td align="left">Sampling distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.1</td><td align="left">Class template <code class="code">discrete_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.2</td><td align="left">Class template <code class="code">piecewise_constant_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.3</td><td align="left">Class template <code class="code">piecewise_linear_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6</td><td align="left">Numeric arrays</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.6.1</td><td align="left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.2</td><td align="left">Class template <code class="code">valarray</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.3</td><td align="left"><code class="code">valarray</code> non-member operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.4</td><td align="left">Class <code class="code">slice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.5</td><td align="left">Class template <code class="code">slice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.6</td><td align="left">Class <code class="code">gslice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.7</td><td align="left">Class template <code class="code">gslice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.8</td><td align="left">Class template <code class="code">mask_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.9</td><td align="left">Class template <code class="code">indirect_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.7.1</td><td align="left"><code class="code">accumulate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.2</td><td align="left"><code class="code">inner_product</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.3</td><td align="left"><code class="code">partial_sum</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.4</td><td align="left"><code class="code">adjacent_difference</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.5</td><td align="left">iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.8</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">26.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.2</td><td align="left">Numeric type requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.3</td><td align="left">The floating-point environment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.4</td><td align="left">Complex numbers</td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.1</td><td align="left">Requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.3</td><td align="left">Random number engine class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.3.1</td><td align="left">Class template <code class="code">linear_congruential_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.2</td><td align="left">Class template <code class="code">mersenne_twister_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.3.3</td><td align="left">Class template <code class="code">subtract_with_carry_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4</td><td align="left">Random number engine adaptor class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.4.1</td><td align="left">Class template <code class="code">discard_block_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.2</td><td align="left">Class template <code class="code">independent_bits_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.4.3</td><td align="left">Class template <code class="code">shuffle_order_engine</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.5</td><td align="left">Engines and engine adaptors with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">26.5.7</td><td align="left">Utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.7.1</td><td align="left">Class <code class="code">seed_seq</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.7.2</td><td align="left">Function template <code class="code">generate_canonical</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8</td><td align="left">Random number distribution class templates</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.1</td><td align="left">Uniform distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.1.1</td><td align="left">Class template <code class="code">uniform_int_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.1.2</td><td align="left">Class template <code class="code">uniform_real_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2</td><td align="left">Bernoulli distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.1</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.2</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.2.4</td><td align="left">Class template <code class="code">negative_binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3</td><td align="left">Poisson distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.1</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.2</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.3</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.4</td><td align="left">Class template <code class="code">weibull_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.3.5</td><td align="left">Class template <code class="code">extreme_value_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4</td><td align="left">Normal distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.1</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.2</td><td align="left">Class template <code class="code">lognormal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.3</td><td align="left">Class template <code class="code">chi_squared_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.4</td><td align="left">Class template <code class="code">cauchy_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.5</td><td align="left">Class template <code class="code">fisher_f_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.4.6</td><td align="left">Class template <code class="code">student_t_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5</td><td align="left">Sampling distributions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.1</td><td align="left">Class template <code class="code">discrete_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.2</td><td align="left">Class template <code class="code">piecewise_constant_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.5.8.5.3</td><td align="left">Class template <code class="code">piecewise_linear_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6</td><td align="left">Numeric arrays</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.6.1</td><td align="left">Header <code class="code">&lt;valarray&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.2</td><td align="left">Class template <code class="code">valarray</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.3</td><td align="left"><code class="code">valarray</code> non-member operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.4</td><td align="left">Class <code class="code">slice</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.5</td><td align="left">Class template <code class="code">slice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.6</td><td align="left">The <code class="code">gslice</code> class</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.7</td><td align="left">Class template <code class="code">gslice_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.8</td><td align="left">Class template <code class="code">mask_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.6.9</td><td align="left">Class template <code class="code">indirect_array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">26.6.10</td><td align="left"><code class="code">valarray</code> range access</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">26.7</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">26.7.1</td><td align="left"><code class="code">accumulate</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.2</td><td align="left"><code class="code">inner_product</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.3</td><td align="left"><code class="code">partial_sum</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.4</td><td align="left"><code class="code">adjacent_difference</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.7.5</td><td align="left">iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">26.8</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>27</em></span>
</td><td colspan="3" align="left">
- <span class="emphasis"><em>Input/output</em></span>
- </td></tr><tr><td align="left">27.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.1</td><td align="left">Imbue limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.2</td><td align="left">Positioning type limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.2.3</td><td align="left">Thread safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">27.3</td><td align="left">Forward declarations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4</td><td align="left">Standard iostream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.1</td><td align="left">Narrow stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.2</td><td align="left">Wide stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.5</td><td align="left">Iostreams base classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.6</td><td align="left">Stream buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.7</td><td align="left">Formatting and manipulators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.8</td><td align="left">String-based streams</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.9</td><td align="left">File-based streams</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ <span class="emphasis"><em>Input/output library</em></span>
+ </td></tr><tr><td align="left">27.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2</td><td align="left">Iostreams requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.1</td><td align="left">Imbue Limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.2.2</td><td align="left">Positioning Type Limitations</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.2.3</td><td align="left">Thread safety</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">27.3</td><td align="left">Forward declarations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4</td><td align="left">Standard iostream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.1</td><td align="left">Narrow stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">27.4.2</td><td align="left">Wide stream objects</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.5</td><td align="left">Iostreams base classes</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr><td align="left">27.6</td><td align="left">Stream buffers</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">27.7</td><td align="left">Formatting and manipulators</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr bgcolor="#B0B0B0"><td align="left">27.8</td><td align="left">String-based streams</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr bgcolor="#B0B0B0"><td align="left">27.9</td><td align="left">File-based streams</td><td align="left">Partial</td><td align="left">Missing move and swap operations</td></tr><tr><td align="left">
<span class="emphasis"><em>28</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Regular expressions</em></span>
- </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.01</td><td align="left">General</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.02</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.03</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.04</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.05</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">28.06</td><td align="left">Namespace <code class="code">std::regex_constants</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.07</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.08</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.09</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.10</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.11</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.12</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.13</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.14</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.1</td><td align="left">General</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.2</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.3</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">28.5</td><td align="left">Namespace <code class="code">std::regex_constants</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">28.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">28.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>29</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Atomic operations</em></span>
@@ -214,11 +214,11 @@ particular release.
<span class="emphasis"><em>30</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Thread support</em></span>
- </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left">Missing futures</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Timed mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.3.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.5</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.5.1</td><td align="left"><code class="code">once_flag</code></td><td align="left">Partial</td><td align="left">Missing constexpr</td></tr><tr><td align="left">30.4.5.2</td><td align="left"><code class="code">call_once</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5</td><td align="left">Condition variables</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.1</td><td align="left">Overview</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.4</td><td align="left">Class template <code class="code">unique_future</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.5</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.6</td><td align="left">Class template <code class="code">promise</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.7</td><td align="left">Allocator templates</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.8</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> is not trivially copyable</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">30.4.1.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Timed mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.3.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.5</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.5.1</td><td align="left"><code class="code">once_flag</code></td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">30.4.5.2</td><td align="left"><code class="code">call_once</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Partial</td><td align="left">Missing notify_all_at_thread_exit</td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left">Missing constexpr</td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Associated asynchronous state</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Partial</td><td align="left">Missing <code class="code">allocator_arg_t</code> and set_*_at_thread_exit</td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Partial</td><td align="left">Missing future_status</td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Partial</td><td align="left">Missing future_status</td></tr><tr bgcolor="#C8B0B0"><td align="left">30.6.8</td><td align="left">Class template <code class="code">atomic_future</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">30.6.9</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.6.10</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Partial</td><td align="left">Missing <code class="code">allocator_arg_t</code> and make_ready_at_thread_exit</td></tr><tr><td align="left">
<span class="emphasis"><em>Appendix D</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Compatibility features</em></span>
- </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left">Iterator primitives</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
+ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
This table is based on the table of contents of ISO/IEC DTR 19768
Doc No: N1836=05-0096 Date: 2005-06-24
Draft Technical Report on C++ Library Extensions
@@ -229,11 +229,11 @@ In this implementation the header names are prefixed by
</p><p>
This page describes the TR1 support in mainline GCC SVN, not in any particular
release.
-</p><div class="table"><a id="id623542"></a><p class="title"><b>Table 1.3. C++ TR1 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
+</p><div class="table"><a id="id449588"></a><p class="title"><b>Table 1.3. C++ TR1 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
<p>
Uses code from
<a class="ulink" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
- </p>
+ </p>
</td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call<code class="code"></code></code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset<code class="code"></code></code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" title="C++ TR 24733"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
This table is based on the table of contents of
ISO/IEC TR 24733 Date: 2009-08-28
@@ -242,7 +242,7 @@ decimal floating-point arithmetic
</p><p>
This page describes the TR 24733 support in mainline GCC SVN, not in any
particular release.
-</p><div class="table"><a id="id602015"></a><p class="title"><b>Table 1.4. C++ TR 24733 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="id471043"></a><p class="title"><b>Table 1.4. C++ TR 24733 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
<span class="emphasis"><em>0</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Introduction</em></span>
diff --git a/libstdc++-v3/doc/html/manual/streambufs.html b/libstdc++-v3/doc/html/manual/streambufs.html
index db8445f2a94..277339d6e27 100644
--- a/libstdc++-v3/doc/html/manual/streambufs.html
+++ b/libstdc++-v3/doc/html/manual/streambufs.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Stream Buffers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Part XI.  Input and Output" /><link rel="prev" href="iostream_objects.html" title="Chapter 24. Iostream Objects" /><link rel="next" href="bk01pt11ch25s02.html" title="Buffering" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iostream_objects.html">Prev</a> </td><th width="60%" align="center">Part XI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt11ch25s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Stream Buffers"><div class="titlepage"><div><div><h2 class="title"><a id="manual.io.streambufs"></a>Chapter 25. Stream Buffers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch25s02.html">Buffering</a></span></dt></dl></div><div class="sect1" title="Derived streambuf Classes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Stream Buffers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="sect2" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
</p><p>Creating your own stream buffers for I/O can be remarkably easy.
If you are interested in doing so, we highly recommend two very
excellent books:
@@ -57,4 +57,81 @@
<code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
<a class="ulink" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html" target="_top">Filtering
Streambufs</a>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="iostream_objects.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt11ch25s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Iostream Objects </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Buffering</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Chaptericularly
+ the fact that C++ may not, in fact, have anything to do with it?
+ </p><p>The rules for buffering can be a little odd, but they aren't any
+ different from those of C. (Maybe that's why they can be a bit
+ odd.) Many people think that writing a newline to an output
+ stream automatically flushes the output buffer. This is true only
+ when the output stream is, in fact, a terminal and not a file
+ or some other device -- and <span class="emphasis"><em>that</em></span> may not even be true
+ since C++ says nothing about files nor terminals. All of that is
+ system-dependent. (The "newline-buffer-flushing only occurring
+ on terminals" thing is mostly true on Unix systems, though.)
+ </p><p>Some people also believe that sending <code class="code">endl</code> down an
+ output stream only writes a newline. This is incorrect; after a
+ newline is written, the buffer is also flushed. Perhaps this
+ is the effect you want when writing to a screen -- get the text
+ out as soon as possible, etc -- but the buffering is largely
+ wasted when doing this to a file:
+ </p><pre class="programlisting">
+ output &lt;&lt; "a line of text" &lt;&lt; endl;
+ output &lt;&lt; some_data_variable &lt;&lt; endl;
+ output &lt;&lt; "another line of text" &lt;&lt; endl; </pre><p>The proper thing to do in this case to just write the data out
+ and let the libraries and the system worry about the buffering.
+ If you need a newline, just write a newline:
+ </p><pre class="programlisting">
+ output &lt;&lt; "a line of text\n"
+ &lt;&lt; some_data_variable &lt;&lt; '\n'
+ &lt;&lt; "another line of text\n"; </pre><p>I have also joined the output statements into a single statement.
+ You could make the code prettier by moving the single newline to
+ the start of the quoted text on the last line, for example.
+ </p><p>If you do need to flush the buffer above, you can send an
+ <code class="code">endl</code> if you also need a newline, or just flush the buffer
+ yourself:
+ </p><pre class="programlisting">
+ output &lt;&lt; ...... &lt;&lt; flush; // can use std::flush manipulator
+ output.flush(); // or call a member fn </pre><p>On the other hand, there are times when writing to a file should
+ be like writing to standard error; no buffering should be done
+ because the data needs to appear quickly (a prime example is a
+ log file for security-related information). The way to do this is
+ just to turn off the buffering <span class="emphasis"><em>before any I/O operations at
+ all</em></span> have been done (note that opening counts as an I/O operation):
+ </p><pre class="programlisting">
+ std::ofstream os;
+ std::ifstream is;
+ int i;
+
+ os.rdbuf()-&gt;pubsetbuf(0,0);
+ is.rdbuf()-&gt;pubsetbuf(0,0);
+
+ os.open("/foo/bar/baz");
+ is.open("/qux/quux/quuux");
+ ...
+ os &lt;&lt; "this data is written immediately\n";
+ is &gt;&gt; i; // and this will probably cause a disk read </pre><p>Since all aspects of buffering are handled by a streambuf-derived
+ member, it is necessary to get at that member with <code class="code">rdbuf()</code>.
+ Then the public version of <code class="code">setbuf</code> can be called. The
+ arguments are the same as those for the Standard C I/O Library
+ function (a buffer area followed by its size).
+ </p><p>A great deal of this is implementation-dependent. For example,
+ <code class="code">streambuf</code> does not specify any actions for its own
+ <code class="code">setbuf()</code>-ish functions; the classes derived from
+ <code class="code">streambuf</code> each define behavior that "makes
+ sense" for that class: an argument of (0,0) turns off buffering
+ for <code class="code">filebuf</code> but does nothing at all for its siblings
+ <code class="code">stringbuf</code> and <code class="code">strstreambuf</code>, and specifying
+ anything other than (0,0) has varying effects.
+ User-defined classes derived from <code class="code">streambuf</code> can
+ do whatever they want. (For <code class="code">filebuf</code> and arguments for
+ <code class="code">(p,s)</code> other than zeros, libstdc++ does what you'd expect:
+ the first <code class="code">s</code> bytes of <code class="code">p</code> are used as a buffer,
+ which you must allocate and deallocate.)
+ </p><p>A last reminder: there are usually more buffers involved than
+ just those at the language/library level. Kernel buffers, disk
+ buffers, and the like will also have an effect. Inspecting and
+ changing those are system-dependent.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. 
+ Input and Output
+
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/strings.html b/libstdc++-v3/doc/html/manual/strings.html
index 76fba6ee433..79ee89bf305 100644
--- a/libstdc++-v3/doc/html/manual/strings.html
+++ b/libstdc++-v3/doc/html/manual/strings.html
@@ -1,9 +1,366 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part V.  Strings</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="shared_ptr.html" title="shared_ptr" /><link rel="next" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part V. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
Strings
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part V.  Strings"><div class="titlepage"><div><div><h1 class="title"><a id="manual.strings"></a>Part V. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7.  Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
Strings
- <a id="id638392" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="bk01pt05ch13.html">13. String Classes</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt05ch13.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s02.html">Case Sensitivity</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s03.html">Arbitrary Character Types</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s04.html">Tokenizing</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s05.html">Shrink to Fit</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s06.html">CString (MFC)</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">shared_ptr </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. String Classes</td></tr></table></div></body></html>
+ <a id="id471606" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="sect1" title="String Classes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="sect2" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
+ Here are Standard, simple, and portable ways to perform common
+ transformations on a <code class="code">string</code> instance, such as
+ "convert to all upper case." The word transformations
+ is especially apt, because the standard template function
+ <code class="code">transform&lt;&gt;</code> is used.
+ </p><p>
+ This code will go through some iterations. Here's a simple
+ version:
+ </p><pre class="programlisting">
+ #include &lt;string&gt;
+ #include &lt;algorithm&gt;
+ #include &lt;cctype&gt; // old &lt;ctype.h&gt;
+
+ struct ToLower
+ {
+ char operator() (char c) const { return std::tolower(c); }
+ };
+
+ struct ToUpper
+ {
+ char operator() (char c) const { return std::toupper(c); }
+ };
+
+ int main()
+ {
+ std::string s ("Some Kind Of Initial Input Goes Here");
+
+ // Change everything into upper case
+ std::transform (s.begin(), s.end(), s.begin(), ToUpper());
+
+ // Change everything into lower case
+ std::transform (s.begin(), s.end(), s.begin(), ToLower());
+
+ // Change everything back into upper case, but store the
+ // result in a different string
+ std::string capital_s;
+ capital_s.resize(s.size());
+ std::transform (s.begin(), s.end(), capital_s.begin(), ToUpper());
+ }
+ </pre><p>
+ <span class="emphasis"><em>Note</em></span> that these calls all
+ involve the global C locale through the use of the C functions
+ <code class="code">toupper/tolower</code>. This is absolutely guaranteed to work --
+ but <span class="emphasis"><em>only</em></span> if the string contains <span class="emphasis"><em>only</em></span> characters
+ from the basic source character set, and there are <span class="emphasis"><em>only</em></span>
+ 96 of those. Which means that not even all English text can be
+ represented (certain British spellings, proper names, and so forth).
+ So, if all your input forevermore consists of only those 96
+ characters (hahahahahaha), then you're done.
+ </p><p><span class="emphasis"><em>Note</em></span> that the
+ <code class="code">ToUpper</code> and <code class="code">ToLower</code> function objects
+ are needed because <code class="code">toupper</code> and <code class="code">tolower</code>
+ are overloaded names (declared in <code class="code">&lt;cctype&gt;</code> and
+ <code class="code">&lt;locale&gt;</code>) so the template-arguments for
+ <code class="code">transform&lt;&gt;</code> cannot be deduced, as explained in
+ <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html" target="_top">this
+ message</a>.
+
+ At minimum, you can write short wrappers like
+ </p><pre class="programlisting">
+ char toLower (char c)
+ {
+ return std::tolower(c);
+ } </pre><p>(Thanks to James Kanze for assistance and suggestions on all of this.)
+ </p><p>Another common operation is trimming off excess whitespace. Much
+ like transformations, this task is trivial with the use of string's
+ <code class="code">find</code> family. These examples are broken into multiple
+ statements for readability:
+ </p><pre class="programlisting">
+ std::string str (" \t blah blah blah \n ");
+
+ // trim leading whitespace
+ string::size_type notwhite = str.find_first_not_of(" \t\n");
+ str.erase(0,notwhite);
+
+ // trim trailing whitespace
+ notwhite = str.find_last_not_of(" \t\n");
+ str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
+ into the calls to <code class="code">erase</code>, in case your compiler does not
+ optimize named temporaries out of existence.
+ </p></div><div class="sect2" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
+ </p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
+ <a class="ulink" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
+ discussions held on Usenet covered this topic in January of 1998.
+ Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
+ is identical to the standard 'string' class, but is
+ case-insensitive in the same way as the (common but nonstandard)
+ C function stricmp()</span>â€</span>.
+ </p><pre class="programlisting">
+ ci_string s( "AbCdE" );
+
+ // case insensitive
+ assert( s == "abcde" );
+ assert( s == "ABCDE" );
+
+ // still case-preserving, of course
+ assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
+ assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy. The original answer was
+ posted on Usenet, and a revised version appears in Herb Sutter's
+ book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="ulink" href="http://www.gotw.ca/gotw/029.htm" target="_top">GotW 29</a>.
+ </p><p>See? Told you it was easy!</p><p>
+ <span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
+ Report contains a fascinating <a class="ulink" href="http://lafstern.org/matt/col2_new.pdf" target="_top"> article</a> by
+ Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
+ case-insensitive comparisons are not as easy as they seem, and
+ why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
+ about it in production code. (The GotW answer mentions one of
+ the principle difficulties; his article mentions more.)
+ </p><p>Basically, this is "easy" only if you ignore some things,
+ things which may be too important to your program to ignore. (I chose
+ to ignore them when originally writing this entry, and am surprised
+ that nobody ever called me on it...) The GotW question and answer
+ remain useful instructional tools, however.
+ </p><p><span class="emphasis"><em>Added September 2000:</em></span> James Kanze provided a link to a
+ <a class="ulink" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
+ Technical Report discussing case handling</a>, which provides some
+ very good information.
+ </p></div><div class="sect2" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
+ </p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
+ it is parameterized on the type of the characters which it holds.
+ In theory, you could whip up a Unicode character class and instantiate
+ <code class="code">std::basic_string&lt;my_unicode_char&gt;</code>, or assuming
+ that integers are wider than characters on your platform, maybe just
+ declare variables of type <code class="code">std::basic_string&lt;int&gt;</code>.
+ </p><p>That's the theory. Remember however that basic_string has additional
+ type parameters, which take default arguments based on the character
+ type (called <code class="code">CharT</code> here):
+ </p><pre class="programlisting">
+ template &lt;typename CharT,
+ typename Traits = char_traits&lt;CharT&gt;,
+ typename Alloc = allocator&lt;CharT&gt; &gt;
+ class basic_string { .... };</pre><p>Now, <code class="code">allocator&lt;CharT&gt;</code> will probably Do The Right
+ Thing by default, unless you need to implement your own allocator
+ for your characters.
+ </p><p>But <code class="code">char_traits</code> takes more work. The char_traits
+ template is <span class="emphasis"><em>declared</em></span> but not <span class="emphasis"><em>defined</em></span>.
+ That means there is only
+ </p><pre class="programlisting">
+ template &lt;typename CharT&gt;
+ struct char_traits
+ {
+ static void foo (type1 x, type2 y);
+ ...
+ };</pre><p>and functions such as char_traits&lt;CharT&gt;::foo() are not
+ actually defined anywhere for the general case. The C++ standard
+ permits this, because writing such a definition to fit all possible
+ CharT's cannot be done.
+ </p><p>The C++ standard also requires that char_traits be specialized for
+ instantiations of <code class="code">char</code> and <code class="code">wchar_t</code>, and it
+ is these template specializations that permit entities like
+ <code class="code">basic_string&lt;char,char_traits&lt;char&gt;&gt;</code> to work.
+ </p><p>If you want to use character types other than char and wchar_t,
+ such as <code class="code">unsigned char</code> and <code class="code">int</code>, you will
+ need suitable specializations for them. For a time, in earlier
+ versions of GCC, there was a mostly-correct implementation that
+ let programmers be lazy but it broke under many situations, so it
+ was removed. GCC 3.4 introduced a new implementation that mostly
+ works and can be specialized even for <code class="code">int</code> and other
+ built-in types.
+ </p><p>If you want to use your own special character class, then you have
+ <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html" target="_top">a lot
+ of work to do</a>, especially if you with to use i18n features
+ (facets require traits information but don't have a traits argument).
+ </p><p>Another example of how to specialize char_traits was given <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html" target="_top">on the
+ mailing list</a> and at a later date was put into the file <code class="code">
+ include/ext/pod_char_traits.h</code>. We agree
+ that the way it's used with basic_string (scroll down to main())
+ doesn't look nice, but that's because <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html" target="_top">the
+ nice-looking first attempt</a> turned out to <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
+ be conforming C++</a>, due to the rule that CharT must be a POD.
+ (See how tricky this is?)
+ </p></div><div class="sect2" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
+ </p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
+ be desired in terms of user-friendliness. It's unintuitive, it
+ destroys the character string on which it operates, and it requires
+ you to handle all the memory problems. But it does let the client
+ code decide what to use to break the string into pieces; it allows
+ you to choose the "whitespace," so to speak.
+ </p><p>A C++ implementation lets us keep the good things and fix those
+ annoyances. The implementation here is more intuitive (you only
+ call it once, not in a loop with varying argument), it does not
+ affect the original string at all, and all the memory allocation
+ is handled for you.
+ </p><p>It's called stringtok, and it's a template function. Sources are
+ as below, in a less-portable form than it could be, to keep this
+ example simple (for example, see the comments on what kind of
+ string it will accept).
+ </p><pre class="programlisting">
+#include &lt;string&gt;
+template &lt;typename Container&gt;
+void
+stringtok(Container &amp;container, string const &amp;in,
+ const char * const delimiters = " \t\n")
+{
+ const string::size_type len = in.length();
+ string::size_type i = 0;
+
+ while (i &lt; len)
+ {
+ // Eat leading whitespace
+ i = in.find_first_not_of(delimiters, i);
+ if (i == string::npos)
+ return; // Nothing left but white space
+
+ // Find the end of the token
+ string::size_type j = in.find_first_of(delimiters, i);
+
+ // Push token
+ if (j == string::npos)
+ {
+ container.push_back(in.substr(i));
+ return;
+ }
+ else
+ container.push_back(in.substr(i, j-i));
+
+ // Set up for next loop
+ i = j + 1;
+ }
+}
+</pre><p>
+ The author uses a more general (but less readable) form of it for
+ parsing command strings and the like. If you compiled and ran this
+ code using it:
+ </p><pre class="programlisting">
+ std::list&lt;string&gt; ls;
+ stringtok (ls, " this \t is\t\n a test ");
+ for (std::list&lt;string&gt;const_iterator i = ls.begin();
+ i != ls.end(); ++i)
+ {
+ std::cerr &lt;&lt; ':' &lt;&lt; (*i) &lt;&lt; ":\n";
+ } </pre><p>You would see this as output:
+ </p><pre class="programlisting">
+ :this:
+ :is:
+ :a:
+ :test: </pre><p>with all the whitespace removed. The original <code class="code">s</code> is still
+ available for use, <code class="code">ls</code> will clean up after itself, and
+ <code class="code">ls.size()</code> will return how many tokens there were.
+ </p><p>As always, there is a price paid here, in that stringtok is not
+ as fast as strtok. The other benefits usually outweigh that, however.
+ </p><p><span class="emphasis"><em>Added February 2001:</em></span> Mark Wilden pointed out that the
+ standard <code class="code">std::getline()</code> function can be used with standard
+ <code class="code">istringstreams</code> to perform
+ tokenizing as well. Build an istringstream from the input text,
+ and then use std::getline with varying delimiters (the three-argument
+ signature) to extract tokens into a string.
+ </p></div><div class="sect2" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
+ </p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
+ <code class="code">string s</code> with <code class="code">res &lt; s.capacity()</code> will
+ reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
+ </p><p>This behaviour is suggested, but not required by the standard. Prior
+ to GCC 3.4 the following alternative can be used instead
+ </p><pre class="programlisting">
+ std::string(str.data(), str.size()).swap(str);
+ </pre><p>This is similar to the idiom for reducing
+ a <code class="code">vector</code>'s memory usage
+ (see <a class="link" href="../faq.html#faq.size_equals_capacity" title="7.8.">this FAQ
+ entry</a>) but the regular copy constructor cannot be used
+ because libstdc++'s <code class="code">string</code> is Copy-On-Write.
+ </p><p>In <a class="link" href="status.html#status.iso.200x" title="C++ 200x">C++0x</a> mode you can call
+ <code class="code">s.shrink_to_fit()</code> to achieve the same effect as
+ <code class="code">s.reserve(s.size())</code>.
+ </p></div><div class="sect2" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
+ </p><p>A common lament seen in various newsgroups deals with the Standard
+ string class as opposed to the Microsoft Foundation Class called
+ CString. Often programmers realize that a standard portable
+ answer is better than a proprietary nonportable one, but in porting
+ their application from a Win32 platform, they discover that they
+ are relying on special functions offered by the CString class.
+ </p><p>Things are not as bad as they seem. In
+ <a class="ulink" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
+ message</a>, Joe Buck points out a few very important things:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
+ that CString does, with three exceptions.
+ </p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
+ conversion) are trivial to implement. In fact, we do so
+ on this page.
+ </p></li><li class="listitem"><p>The third is <code class="code">CString::Format</code>, which allows formatting
+ in the style of <code class="code">sprintf</code>. This deserves some mention:
+ </p></li></ul></div><p>
+ The old libg++ library had a function called form(), which did much
+ the same thing. But for a Standard solution, you should use the
+ stringstream classes. These are the bridge between the iostream
+ hierarchy and the string class, and they operate with regular
+ streams seamlessly because they inherit from the iostream
+ hierarchy. An quick example:
+ </p><pre class="programlisting">
+ #include &lt;iostream&gt;
+ #include &lt;string&gt;
+ #include &lt;sstream&gt;
+
+ string f (string&amp; incoming) // incoming is "foo N"
+ {
+ istringstream incoming_stream(incoming);
+ string the_word;
+ int the_number;
+
+ incoming_stream &gt;&gt; the_word // extract "foo"
+ &gt;&gt; the_number; // extract N
+
+ ostringstream output_stream;
+ output_stream &lt;&lt; "The word was " &lt;&lt; the_word
+ &lt;&lt; " and 3*N was " &lt;&lt; (3*the_number);
+
+ return output_stream.str();
+ } </pre><p>A serious problem with CString is a design bug in its memory
+ allocation. Specifically, quoting from that same message:
+ </p><pre class="programlisting">
+ CString suffers from a common programming error that results in
+ poor performance. Consider the following code:
+
+ CString n_copies_of (const CString&amp; foo, unsigned n)
+ {
+ CString tmp;
+ for (unsigned i = 0; i &lt; n; i++)
+ tmp += foo;
+ return tmp;
+ }
+
+ This function is O(n^2), not O(n). The reason is that each +=
+ causes a reallocation and copy of the existing string. Microsoft
+ applications are full of this kind of thing (quadratic performance
+ on tasks that can be done in linear time) -- on the other hand,
+ we should be thankful, as it's created such a big market for high-end
+ ix86 hardware. :-)
+
+ If you replace CString with string in the above function, the
+ performance is O(n).
+ </pre><p>Joe Buck also pointed out some other things to keep in mind when
+ comparing CString and the Standard string class:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
+ who exploited that may have problems moving to <code class="code">string</code>.
+ </p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
+ MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
+ bug and rebuild your MFC libraries.
+ <span class="emphasis"><em><span class="emphasis"><em>Note:</em></span> It looks like the CString shipped
+ with VC++6.0 has fixed this, although it may in fact have been
+ one of the VC++ SPs that did it.</em></span>
+ </p></li><li class="listitem"><p><code class="code">string</code> operations like this have O(n) complexity
+ <span class="emphasis"><em>if the implementors do it correctly</em></span>. The libstdc++
+ implementors did it correctly. Other vendors might not.
+ </p></li><li class="listitem"><p>While chapters of the SGI STL are used in libstdc++, their
+ string class is not. The SGI <code class="code">string</code> is essentially
+ <code class="code">vector&lt;char&gt;</code> and does not do any reference
+ counting like libstdc++'s does. (It is O(n), though.)
+ So if you're thinking about SGI's string or rope classes,
+ you're now looking at four possibilities: CString, the
+ libstdc++ string, the SGI string, and the SGI rope, and this
+ is all before any allocator or traits customizations! (More
+ choices than you can shake a stick at -- want fries with that?)
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Traits </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. 
+ Localization
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/stringstreams.html b/libstdc++-v3/doc/html/manual/stringstreams.html
index 718965570e4..6e6b77eb4e8 100644
--- a/libstdc++-v3/doc/html/manual/stringstreams.html
+++ b/libstdc++-v3/doc/html/manual/stringstreams.html
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Memory Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Part XI.  Input and Output" /><link rel="prev" href="bk01pt11ch25s02.html" title="Buffering" /><link rel="next" href="fstreams.html" title="Chapter 27. File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt11ch25s02.html">Prev</a> </td><th width="60%" align="center">Part XI. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
Input and Output
-</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Memory Based Streams"><div class="titlepage"><div><div><h2 class="title"><a id="manual.io.memstreams"></a>Chapter 26. Memory Based Streams</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="stringstreams.html#manual.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></div><div class="sect1" title="Compatibility With strstream"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.io.memstreams.compat"></a>Compatibility With strstream</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Memory Based Streams"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="sect2" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
</p><p>Stringstreams (defined in the header <code class="code">&lt;sstream&gt;</code>)
are in this author's opinion one of the coolest things since
sliced time. An example of their use is in the Received Wisdom
- section for Chapter 21 (Strings),
- <a class="link" href="bk01pt05ch13s06.html" title="CString (MFC)"> describing how to
+ section for Sect1 21 (Strings),
+ <a class="link" href="strings.html#strings.string.Cstring" title="CString (MFC)"> describing how to
format strings</a>.
</p><p>The quick definition is: they are siblings of ifstream and ofstream,
and they do for <code class="code">std::string</code> what their siblings do for
@@ -34,4 +34,4 @@
memory yourself. The strstreams have been officially deprecated,
which means that 1) future revisions of the C++ Standard won't
support them, and 2) if you use them, people will laugh at you.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt11ch25s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Buffering </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. File Based Streams</td></tr></table></div></body></html>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/support.html b/libstdc++-v3/doc/html/manual/support.html
index 14154ee4622..f514c97aade 100644
--- a/libstdc++-v3/doc/html/manual/support.html
+++ b/libstdc++-v3/doc/html/manual/support.html
@@ -1,9 +1,130 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="bk01pt02pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
Support
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02pr01.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part II.  Support"><div class="titlepage"><div><div><h1 class="title"><a id="manual.support"></a>Part II. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4.  Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
Support
- <a id="id616138" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+ <a id="id402698" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
+ This part deals with the functions called and objects created
+ automatically during the course of a program's existence.
+ </p><p>
+ While we can't reproduce the contents of the Standard here (you
+ need to get your own copy from your nation's member body; see our
+ homepage for help), we can mention a couple of changes in what
+ kind of support a C++ program gets from the Standard Library.
+ </p><div class="sect1" title="Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="sect2" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
+ C++ has the following builtin types:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ char
+ </p></li><li class="listitem"><p>
+ signed char
+ </p></li><li class="listitem"><p>
+ unsigned char
+ </p></li><li class="listitem"><p>
+ signed short
+ </p></li><li class="listitem"><p>
+ signed int
+ </p></li><li class="listitem"><p>
+ signed long
+ </p></li><li class="listitem"><p>
+ unsigned short
+ </p></li><li class="listitem"><p>
+ unsigned int
+ </p></li><li class="listitem"><p>
+ unsigned long
+ </p></li><li class="listitem"><p>
+ bool
+ </p></li><li class="listitem"><p>
+ wchar_t
+ </p></li><li class="listitem"><p>
+ float
+ </p></li><li class="listitem"><p>
+ double
+ </p></li><li class="listitem"><p>
+ long double
+ </p></li></ul></div><p>
+ These fundamental types are always available, without having to
+ include a header file. These types are exactly the same in
+ either C++ or in C.
+ </p><p>
+ Specializing parts of the library on these types is prohibited:
+ instead, use a POD.
+ </p></div><div class="sect2" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
+ The header <code class="filename">limits</code> defines
+ traits classes to give access to various implementation
+ defined-aspects of the fundamental types. The traits classes --
+ fourteen in total -- are all specializations of the template class
+ <code class="classname">numeric_limits</code>, documented <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html" target="_top">here</a>
+ and defined as follows:
+ </p><pre class="programlisting">
+ template&lt;typename T&gt;
+ struct class
+ {
+ static const bool is_specialized;
+ static T max() throw();
+ static T min() throw();
+
+ static const int digits;
+ static const int digits10;
+ static const bool is_signed;
+ static const bool is_integer;
+ static const bool is_exact;
+ static const int radix;
+ static T epsilon() throw();
+ static T round_error() throw();
+
+ static const int min_exponent;
+ static const int min_exponent10;
+ static const int max_exponent;
+ static const int max_exponent10;
+
+ static const bool has_infinity;
+ static const bool has_quiet_NaN;
+ static const bool has_signaling_NaN;
+ static const float_denorm_style has_denorm;
+ static const bool has_denorm_loss;
+ static T infinity() throw();
+ static T quiet_NaN() throw();
+ static T denorm_min() throw();
+
+ static const bool is_iec559;
+ static const bool is_bounded;
+ static const bool is_modulo;
+
+ static const bool traps;
+ static const bool tinyness_before;
+ static const float_round_style round_style;
+ };
+ </pre></div><div class="sect2" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
+ The only change that might affect people is the type of
+ <code class="constant">NULL</code>: while it is required to be a macro,
+ the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
+ to be <code class="constant">(void*)0</code>, which is often used in C.
+ </p><p>
+ For <span class="command"><strong>g++</strong></span>, <code class="constant">NULL</code> is
+ <code class="code">#define</code>'d to be
+ <code class="constant">__null</code>, a magic keyword extension of
+ <span class="command"><strong>g++</strong></span>.
+ </p><p>
+ The biggest problem of #defining <code class="constant">NULL</code> to be
+ something like <span class="quote">“<span class="quote">0L</span>â€</span> is that the compiler will view
+ that as a long integer before it views it as a pointer, so
+ overloading won't do what you expect. (This is why
+ <span class="command"><strong>g++</strong></span> has a magic extension, so that
+ <code class="constant">NULL</code> is always a pointer.)
+ </p><p>In his book <a class="ulink" href="http://www.awprofessional.com/titles/0-201-92488-9/" target="_top"><span class="emphasis"><em>Effective
+ C++</em></span></a>, Scott Meyers points out that the best way
+ to solve this problem is to not overload on pointer-vs-integer
+ types to begin with. He also offers a way to make your own magic
+ <code class="constant">NULL</code> that will match pointers before it
+ matches integers.
+ </p><p>See
+ <a class="ulink" href="http://www.awprofessional.com/titles/0-201-31015-5/" target="_top">the
+ Effective C++ CD example</a>
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. 
+ Standard Contents
+ </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/termination.html b/libstdc++-v3/doc/html/manual/termination.html
index ff86016f613..ab0bf5e19b6 100644
--- a/libstdc++-v3/doc/html/manual/termination.html
+++ b/libstdc++-v3/doc/html/manual/termination.html
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6. Termination</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II.  Support" /><link rel="prev" href="dynamic_memory.html" title="Chapter 5. Dynamic Memory" /><link rel="next" href="verbose_termination.html" title="Verbose Terminate Handler" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Part II. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
Support
-</th><td width="20%" align="right"> <a accesskey="n" href="verbose_termination.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6. Termination"><div class="titlepage"><div><div><h2 class="title"><a id="manual.support.termination"></a>Chapter 6. Termination</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></div><div class="sect1" title="Termination Handlers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="support.termination.handlers"></a>Termination Handlers</h2></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Termination"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="sect2" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
Not many changes here to <code class="filename">cstdlib</code>. You should note that the
<code class="function">abort()</code> function does not call the
destructors of automatic nor static objects, so if you're
@@ -19,30 +19,106 @@
Static objects are destroyed in reverse order of their creation.
</p></li><li class="listitem"><p>
Functions registered with <code class="function">atexit()</code> are called in
- reverse order of registration, once per registration call.
- (This isn't actually new.)
+ reverse order of registration, once per registration call.
+ (This isn't actually new.)
</p></li><li class="listitem"><p>
The previous two actions are <span class="quote">“<span class="quote">interleaved,</span>â€</span> that is,
- given this pseudocode:
+ given this pseudocode:
</p><pre class="programlisting">
extern "C or C++" void f1 (void);
extern "C or C++" void f2 (void);
-
+
static Thing obj1;
atexit(f1);
static Thing obj2;
atexit(f2);
</pre><p>
- then at a call of <code class="function">exit()</code>,
- <code class="varname">f2</code> will be called, then
- <code class="varname">obj2</code> will be destroyed, then
- <code class="varname">f1</code> will be called, and finally
- <code class="varname">obj1</code> will be destroyed. If
- <code class="varname">f1</code> or <code class="varname">f2</code> allow an
- exception to propagate out of them, Bad Things happen.
+ then at a call of <code class="function">exit()</code>,
+ <code class="varname">f2</code> will be called, then
+ <code class="varname">obj2</code> will be destroyed, then
+ <code class="varname">f1</code> will be called, and finally
+ <code class="varname">obj1</code> will be destroyed. If
+ <code class="varname">f1</code> or <code class="varname">f2</code> allow an
+ exception to propagate out of them, Bad Things happen.
</p></li></ol></div><p>
Note also that <code class="function">atexit()</code> is only required to store 32
functions, and the compiler/library might already be using some of
those slots. If you think you may run out, we recommend using
the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="verbose_termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Verbose Terminate Handler</td></tr></table></div></body></html>
+ </p></div><div class="sect2" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
+ If you are having difficulty with uncaught exceptions and want a
+ little bit of help debugging the causes of the core dumps, you can
+ make use of a GNU extension, the verbose terminate handler.
+ </p><pre class="programlisting">
+#include &lt;exception&gt;
+
+int main()
+{
+ std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
+ ...
+
+ throw <em class="replaceable"><code>anything</code></em>;
+}
+</pre><p>
+ The <code class="function">__verbose_terminate_handler</code> function
+ obtains the name of the current exception, attempts to demangle
+ it, and prints it to stderr. If the exception is derived from
+ <code class="classname">exception</code> then the output from
+ <code class="function">what()</code> will be included.
+ </p><p>
+ Any replacement termination function is required to kill the
+ program without returning; this one calls abort.
+ </p><p>
+ For example:
+ </p><pre class="programlisting">
+#include &lt;exception&gt;
+#include &lt;stdexcept&gt;
+
+struct argument_error : public std::runtime_error
+{
+ argument_error(const std::string&amp; s): std::runtime_error(s) { }
+};
+
+int main(int argc)
+{
+ std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
+ if (argc &gt; 5)
+ throw argument_error(<span class="quote">“<span class="quote">argc is greater than 5!</span>â€</span>);
+ else
+ throw argc;
+}
+</pre><p>
+ With the verbose terminate handler active, this gives:
+ </p><pre class="screen">
+ <code class="computeroutput">
+ % ./a.out
+ terminate called after throwing a `int'
+ Aborted
+ % ./a.out f f f f f f f f f f f
+ terminate called after throwing an instance of `argument_error'
+ what(): argc is greater than 5!
+ Aborted
+ </code>
+ </pre><p>
+ The 'Aborted' line comes from the call to
+ <code class="function">abort()</code>, of course.
+ </p><p>
+ This is the default termination handler; nothing need be done to
+ use it. To go back to the previous <span class="quote">“<span class="quote">silent death</span>â€</span>
+ method, simply include <code class="filename">exception</code> and
+ <code class="filename">cstdlib</code>, and call
+ </p><pre class="programlisting">
+ std::set_terminate(std::abort);
+ </pre><p>
+ After this, all calls to <code class="function">terminate</code> will use
+ <code class="function">abort</code> as the terminate handler.
+ </p><p>
+ Note: the verbose terminate handler will attempt to write to
+ stderr. If your application closes stderr or redirects it to an
+ inappropriate location,
+ <code class="function">__verbose_terminate_handler</code> will behave in
+ an unspecified manner.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. 
+ Diagnostics
+
+</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/test.html b/libstdc++-v3/doc/html/manual/test.html
index c5bcc1f54c3..d4379d3449f 100644
--- a/libstdc++-v3/doc/html/manual/test.html
+++ b/libstdc++-v3/doc/html/manual/test.html
@@ -278,7 +278,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
please email the main libstdc++ mailing list if you see
something odd or have questions.
</p></div><div class="sect3" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
- To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 30. Debug Mode">debug mode</a>, edit
+ To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
<code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
result printed by the <code class="literal">--build-cxx</code>
@@ -289,7 +289,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
release mode: any deviation indicates an error in either the
library or the test suite.
</p><p>
- The <a class="link" href="parallel_mode.html" title="Chapter 31. Parallel Mode">parallel
+ The <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel
mode</a> can be tested in much the same manner, substituting
<code class="constant">-D_GLIBCXX_PARALLEL</code> for
<code class="constant">-D_GLIBCXX_DEBUG</code> in the previous paragraph.
@@ -493,7 +493,7 @@ only default variables.
reporting functions including:
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="sect2" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="sect3" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
Qualifying Exception Safety Guarantees
- <a id="id650235" class="indexterm"></a>
+ <a id="id503957" class="indexterm"></a>
</h4></div></div></div><div class="sect4" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
Testing is composed of running a particular test sequence,
and looking at what happens to the surrounding code when
@@ -508,7 +508,7 @@ only default variables.
consistency/coherency of the test subject in the event of a
thrown exception.
</p><p>
- Random code paths can be constructed using the the basic test
+ Random code paths can be constructed using the basic test
sequences and instrumentation as above, only combined in a
random or pseudo-random way.
</p><p> To compute the code paths that throw, test instruments
@@ -543,7 +543,7 @@ only default variables.
Which has several tests for container member functions,
Includes control and test container objects. Configuration includes
random seed, iterations, number of distinct values, and the
-probability that and exception will be thrown. Assumes instantiating
+probability that an exception will be thrown. Assumes instantiating
container uses an extension
allocator, <code class="classname">__gnu_cxx::throw_allocator_random</code>,
as the allocator type.
diff --git a/libstdc++-v3/doc/html/manual/traits.html b/libstdc++-v3/doc/html/manual/traits.html
index 1d1e6fb75bf..62356dec625 100644
--- a/libstdc++-v3/doc/html/manual/traits.html
+++ b/libstdc++-v3/doc/html/manual/traits.html
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12. Traits</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Part IV.  Utilities" /><link rel="prev" href="shared_ptr.html" title="shared_ptr" /><link rel="next" href="strings.html" title="Part V.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
Utilities
-</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12. Traits"><div class="titlepage"><div><div><h2 class="title"><a id="manual.util.traits"></a>Chapter 12. Traits</h2></div></div></div><p>
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">shared_ptr </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part V. 
+</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. 
Strings
</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html
index 93114db3d57..ae98c9b881d 100644
--- a/libstdc++-v3/doc/html/manual/using.html
+++ b/libstdc++-v3/doc/html/manual/using.html
@@ -11,5 +11,5 @@
enumerated and detailed in the table below.
</p><p>
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
- </p><div class="table"><a id="id619494"></a><p class="title"><b>Table 3.1. C++ Command Options</b></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++0x</code></td><td align="left">Use the working draft of the upcoming ISO C++0x standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++0x</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++0x &lt;thread&gt;, &lt;future&gt;,
- &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 31. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
+ </p><div class="table"><a id="id444212"></a><p class="title"><b>Table 3.1. C++ Command Options</b></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++0x</code></td><td align="left">Use the working draft of the upcoming ISO C++0x standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++0x</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++0x &lt;thread&gt;, &lt;future&gt;,
+ &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_concurrency.html b/libstdc++-v3/doc/html/manual/using_concurrency.html
index f0f63a9eee2..f18aec31d8f 100644
--- a/libstdc++-v3/doc/html/manual/using_concurrency.html
+++ b/libstdc++-v3/doc/html/manual/using_concurrency.html
@@ -200,6 +200,6 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
this at application run-time
see <a class="link" href="using_macros.html" title="Macros">here</a>. Also
useful are details
- on <a class="link" href="memory.html#manual.util.memory.allocator" title="Allocators">allocator</a>
+ on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
options and capabilities.
</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
index 9e48296929a..38e19313029 100644
--- a/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+++ b/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
@@ -21,7 +21,7 @@
</p></li><li class="listitem"><p>
<code class="filename">typeinfo</code>
</p></li></ul></div><p>
- In addition, throw in
+ In addition, throw in
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
<code class="filename">cxxabi.h</code>.
</p></li></ul></div><p>
@@ -76,13 +76,27 @@ A quick read of the relevant part of the GCC
the linker. The exact format of the options is dependent on
which linker you use:
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
- GNU ld (default on Linux):<code class="literal">-Wl,--rpath,<code class="filename">destdir</code>/lib</code>
+ GNU ld (default on Linux):
+ <code class="literal">-Wl,-rpath,<code class="filename">destdir</code>/lib</code>
</p></li><li class="listitem"><p>
- IRIX ld:<code class="literal">
- -Wl,-rpath,<code class="filename">destdir</code>/lib</code>
+ IRIX ld:
+ <code class="literal">-Wl,-rpath,<code class="filename">destdir</code>/lib</code>
</p></li><li class="listitem"><p>
- Solaris ld:<code class="literal">-Wl,-R<code class="filename">destdir</code>/lib</code>
- </p></li></ul></div></li></ul></div><p>
+ Solaris ld:
+ <code class="literal">-Wl,-R<code class="filename">destdir</code>/lib</code>
+ </p></li></ul></div></li><li class="listitem"><p>
+ Some linkers allow you to specify the path to the library by
+ setting <code class="literal">LD_RUN_PATH</code> in your environment
+ when linking.
+ </p></li><li class="listitem"><p>
+ On some platforms the system administrator can configure the
+ dynamic linker to always look for libraries in
+ <code class="filename">destdir/lib</code>, for example
+ by using the <span class="command"><strong>ldconfig</strong></span> utility on Linux
+ or the <span class="command"><strong>crle</strong></span> utility on Solaris. This is a
+ system-wide change which can make the system unusable so if you
+ are unsure then use one of the other methods described above.
+ </p></li></ul></div><p>
Use the <span class="command"><strong>ldd</strong></span> utility on the linked executable
to show
which <code class="filename">libstdc++.so</code>
diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html
index 39fc1e05cfd..925d732cffd 100644
--- a/libstdc++-v3/doc/html/manual/using_exceptions.html
+++ b/libstdc++-v3/doc/html/manual/using_exceptions.html
@@ -8,12 +8,12 @@ the <code class="literal">throw</code> keyword.
These are very powerful constructs, and require some thought when
applied to the standard library in order to yield components that work
efficiently while cleaning up resources when unexpectedly killed via
-exceptional circumstances.
+exceptional circumstances.
</p><p>
Two general topics of discussion follow:
exception neutrality and exception safety.
-</p><div class="sect2" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
- What is exception-safe code?
+</p><div class="sect2" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
+ What is exception-safe code?
</p><p>
Will define this as reasonable and well-defined behavior by classes
and functions from the standard library when used by user-defined
@@ -124,7 +124,7 @@ exception neutrality and exception safety.
use <code class="literal">-fno-exceptions</code>. If you have some code that
uses <code class="literal">try</code> or <code class="literal">catch</code>, you
shouldn't use <code class="literal">-fno-exceptions</code>.
- </p><p>
+ </p><p>
And what it to be gained, tinkering in the back alleys with a
language like this? Exception handling overhead can be measured
in the size of the executable binary, and varies with the
@@ -194,7 +194,7 @@ exception neutrality and exception safety.
library has been transformed, user code may need modification. User
code that attempts or expects to do error checking on standard
library components compiled with exception handling disabled should
- be evaluated and potentially made conditional.
+ be evaluated and potentially made conditional.
</p><p>
Some issues remain with this approach (see bugzilla entry
25191). Code paths are not equivalent, in
@@ -220,7 +220,7 @@ exception neutrality and exception safety.
substitution of the C language keyword
<code class="literal">const</code> with the uglified
doppelganger <code class="literal">__const</code>.
-</p></div><div class="sect2" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="sect3" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
+</p></div><div class="sect2" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="sect3" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
C language code that is expecting to interoperate with C++ should be
compiled with <code class="literal">-fexceptions</code>. This will make
debugging a C language function called as part of C++-induced stack
@@ -235,7 +235,7 @@ is called.
getting these details right. For GNU systems, all appropriate parts
of the GNU C library are already compiled
with <code class="literal">-fexceptions</code>.
-</p></div><div class="sect3" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
+</p></div><div class="sect3" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
GNU systems re-use some of the exception handling mechanisms to
track control flow for <code class="literal">POSIX</code> thread cancellation.
</p><p>
@@ -266,54 +266,63 @@ is called.
}
catch(...)
{ this-&gt;_M_setstate(ios_base::badbit); }
-</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="id612927"></a><p><span class="title"><i>
- System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </i>. </span><span class="pagenums">
+</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id417334"></a><p><span class="biblioid">
+ <a class="ulink" href="http://www.opengroup.org/austin" target="_top">
+ <em class="citetitle">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </em>
+ </a>
+ . </span><span class="pagenums">
2.9.5 Thread Cancellation
. </span><span class="copyright">Copyright © 2008
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid">
- <a class="ulink" href="http://www.opengroup.org/austin/" target="_top">
- </a>
- . </span></p></div><div class="biblioentry" title="Error and Exception Handling"><a id="id692579"></a><p><span class="title"><i>
- Error and Exception Handling
- </i>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
- Boost
- . </span></span><span class="biblioid">
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+ . </span></p></div><div class="biblioentry"><a id="id444298"></a><p><span class="biblioid">
<a class="ulink" href="http://www.boost.org/community/error_handling.html" target="_top">
+ <em class="citetitle">
+ Error and Exception Handling
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Exception-Safety in Generic Components"><a id="id622989"></a><p><span class="title"><i>
- Exception-Safety in Generic Components
- </i>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
+ . </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
Boost
- . </span></span><span class="biblioid">
+ . </span></span></p></div><div class="biblioentry"><a id="id390281"></a><p><span class="biblioid">
<a class="ulink" href="http://www.boost.org/community/exception_safety.html" target="_top">
+ <em class="citetitle">
+ Exception-Safety in Generic Components
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Standard Library Exception Policy"><a id="id614001"></a><p><span class="title"><i>
- Standard Library Exception Policy
- </i>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
- WG21 N1077
- . </span></span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
+ Boost
+ . </span></span></p></div><div class="biblioentry"><a id="id404291"></a><p><span class="biblioid">
<a class="ulink" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
+ <em class="citetitle">
+ Standard Library Exception Policy
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="ia64 c++ abi exception handling"><a id="id599408"></a><p><span class="title"><i>
- ia64 c++ abi exception handling
- </i>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
- GNU
- . </span></span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ WG21 N1077
+ . </span></span></p></div><div class="biblioentry"><a id="id443907"></a><p><span class="biblioid">
<a class="ulink" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
+ <em class="citetitle">
+ ia64 c++ abi exception handling
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Appendix E: Standard-Library Exception Safety"><a id="id657794"></a><p><span class="title"><i>
- Appendix E: Standard-Library Exception Safety
- </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
+ GNU
+ . </span></span></p></div><div class="biblioentry"><a id="id444623"></a><p><span class="biblioid">
<a class="ulink" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
+ <em class="citetitle">
+ Appendix E: Standard-Library Exception Safety
+ </em>
</a>
- . </span></p></div><div class="biblioentry" title="Exceptional C++"><a id="id635762"></a><p><span class="title"><i>
+ . </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry" title="Exceptional C++"><a id="id444488"></a><p><span class="title"><i>
Exceptional C++
</i>. </span><span class="pagenums">
Exception-Safety Issues and Techniques
- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry" title="exception_defines.h #defines try/catch"><a id="id604495"></a><p><span class="title"><i>
- exception_defines.h #defines try/catch
- </i>. </span><span class="subtitle">
- GCC Bug <a class="ulink" href="http://gcc.gnu.org/PR25191" target="_top">25191</a>
- . </span><span class="biblioid">
+ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="id403652"></a><p><span class="biblioid">
+ <a class="ulink" href="http://gcc.gnu.org/PR25191" target="_top">
+ <em class="citetitle">
+ GCC Bug 25191: exception_defines.h #defines try/catch
+ </em>
+ </a>
. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/using_headers.html b/libstdc++-v3/doc/html/manual/using_headers.html
index 5ce54466d6f..99fe52334fc 100644
--- a/libstdc++-v3/doc/html/manual/using_headers.html
+++ b/libstdc++-v3/doc/html/manual/using_headers.html
@@ -20,19 +20,19 @@
upcoming 200x standard.
</p><p>
C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
- </p><div class="table"><a id="id616284"></a><p class="title"><b>Table 3.2. C++ 1998 Library Headers</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id667695"></a><p class="title"><b>Table 3.3. C++ 1998 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="table"><a id="id470920"></a><p class="title"><b>Table 3.2. C++ 1998 Library Headers</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id349475"></a><p class="title"><b>Table 3.3. C++ 1998 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
C++0x include files. These are only available in C++0x compilation
mode, i.e. <code class="literal">-std=c++0x</code> or <code class="literal">-std=gnu++0x</code>.
-</p><p></p><div class="table"><a id="id605616"></a><p class="title"><b>Table 3.4. C++ 200x Library Headers</b></p><div class="table-contents"><table summary="C++ 200x Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id606881"></a><p class="title"><b>Table 3.5. C++ 200x Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 200x Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr><tr><td align="left"><code class="filename">stdatomic.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><p></p><div class="table"><a id="id477183"></a><p class="title"><b>Table 3.4. C++ 200x Library Headers</b></p><div class="table-contents"><table summary="C++ 200x Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id463447"></a><p class="title"><b>Table 3.5. C++ 200x Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 200x Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr><tr><td align="left"><code class="filename">stdatomic.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
In addition, TR1 includes as:
-</p><div class="table"><a id="id593853"></a><p class="title"><b>Table 3.6. C++ TR 1 Library Headers</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id680678"></a><p class="title"><b>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
+</p><div class="table"><a id="id387306"></a><p class="title"><b>Table 3.6. C++ TR 1 Library Headers</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id479735"></a><p class="title"><b>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
compiler supports scalar decimal floating-point types defined via
<code class="code">__attribute__((mode(SD|DD|LD)))</code>.
-</p><div class="table"><a id="id563959"></a><p class="title"><b>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</b></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="id400127"></a><p class="title"><b>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</b></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
Also included are files for the C++ ABI interface:
-</p><div class="table"><a id="id661850"></a><p class="title"><b>Table 3.9. C++ ABI Headers</b></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="id401869"></a><p class="title"><b>Table 3.9. C++ ABI Headers</b></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
And a large variety of extensions.
-</p><div class="table"><a id="id614025"></a><p class="title"><b>Table 3.10. Extension Headers</b></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id662204"></a><p class="title"><b>Table 3.11. Extension Debug Headers</b></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id611004"></a><p class="title"><b>Table 3.12. Extension Profile Headers</b></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id592292"></a><p class="title"><b>Table 3.13. Extension Parallel Headers</b></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" title="Mixing Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
+</p><div class="table"><a id="id467180"></a><p class="title"><b>Table 3.10. Extension Headers</b></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id403996"></a><p class="title"><b>Table 3.11. Extension Debug Headers</b></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id403404"></a><p class="title"><b>Table 3.12. Extension Profile Headers</b></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id477245"></a><p class="title"><b>Table 3.13. Extension Parallel Headers</b></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" title="Mixing Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
</p><p>First, mixing different dialects of the standard headers is not
possible. It's an all-or-nothing affair. Thus, code like
</p><pre class="programlisting">
diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
index 9daf4d3405c..ded3c5a4c35 100644
--- a/libstdc++-v3/doc/html/manual/using_macros.html
+++ b/libstdc++-v3/doc/html/manual/using_macros.html
@@ -59,19 +59,19 @@
<code class="code">--enable-concept-checks</code>. When defined, performs
compile-time checking on certain template instantiations to
detect violations of the requirements of the standard. This
- is described in more detail <a class="link" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks">here</a>.
+ is described in more detail <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">here</a>.
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG</code></span></dt><dd><p>
Undefined by default. When defined, compiles user code using
- the <a class="link" href="debug_mode.html" title="Chapter 30. Debug Mode">debug mode</a>.
+ the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG_PEDANTIC</code></span></dt><dd><p>
Undefined by default. When defined while compiling with
- the <a class="link" href="debug_mode.html" title="Chapter 30. Debug Mode">debug mode</a>, makes
+ the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, makes
the debug mode extremely picky by making the use of libstdc++
extensions and libstdc++-specific behavior into errors.
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PARALLEL</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
- using the <a class="link" href="parallel_mode.html" title="Chapter 31. Parallel Mode">parallel
+ using the <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel
mode</a>.
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
- using the <a class="link" href="profile_mode.html" title="Chapter 32. Profile Mode">profile
+ using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
mode</a>.
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/utilities.html b/libstdc++-v3/doc/html/manual/utilities.html
index 643a52964a9..ecc1498d80c 100644
--- a/libstdc++-v3/doc/html/manual/utilities.html
+++ b/libstdc++-v3/doc/html/manual/utilities.html
@@ -1,9 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /><link rel="next" href="functors.html" title="Chapter 9. Functors" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
Utilities
-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part IV.  Utilities"><div class="titlepage"><div><div><h1 class="title"><a id="manual.util"></a>Part IV. 
+</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+</th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6.  Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
Utilities
- <a id="id596936" class="indexterm"></a>
-</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="traits.html">12. Traits</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding Data to Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Functors</td></tr></table></div></body></html>
+ <a id="id410153" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section" title="Functors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
+ get slightly the wrong idea. In the interest of not reinventing
+ the wheel, we will refer you to the introduction to the functor
+ concept written by SGI as chapter of their STL, in
+ <a class="ulink" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
+ http://www.sgi.com/tech/stl/functors.html</a>.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/vector.html b/libstdc++-v3/doc/html/manual/vector.html
deleted file mode 100644
index 8f554385943..00000000000
--- a/libstdc++-v3/doc/html/manual/vector.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>vector</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="sequences.html" title="Chapter 16. Sequences" /><link rel="prev" href="sequences.html" title="Chapter 16. Sequences" /><link rel="next" href="associative.html" title="Chapter 17. Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">vector</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sequences.html">Prev</a> </td><th width="60%" align="center">Chapter 16. Sequences</th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="vector"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.sequences.vector"></a>vector</h2></div></div></div><p>
- </p><div class="sect2" title="Space Overhead Management"><div class="titlepage"><div><div><h3 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h3></div></div></div><p>
- In <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
- message to the list</a>, Daniel Kostecky announced work on an
- alternate form of <code class="code">std::vector</code> that would support
- hints on the number of elements to be over-allocated. The design
- was also described, along with possible implementation choices.
- </p><p>
- The first two alpha releases were announced <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
- and <a class="ulink" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sequences.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sequences.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Sequences </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Associative</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/manual/verbose_termination.html b/libstdc++-v3/doc/html/manual/verbose_termination.html
deleted file mode 100644
index 540e5a77577..00000000000
--- a/libstdc++-v3/doc/html/manual/verbose_termination.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Verbose Terminate Handler</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="termination.html" title="Chapter 6. Termination" /><link rel="prev" href="termination.html" title="Chapter 6. Termination" /><link rel="next" href="diagnostics.html" title="Part III.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Verbose Terminate Handler</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Chapter 6. Termination</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h2></div></div></div><p>
- If you are having difficulty with uncaught exceptions and want a
- little bit of help debugging the causes of the core dumps, you can
- make use of a GNU extension, the verbose terminate handler.
- </p><pre class="programlisting">
-#include &lt;exception&gt;
-
-int main()
-{
- std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
- ...
-
- throw <em class="replaceable"><code>anything</code></em>;
-}
-</pre><p>
- The <code class="function">__verbose_terminate_handler</code> function
- obtains the name of the current exception, attempts to demangle
- it, and prints it to stderr. If the exception is derived from
- <code class="classname">exception</code> then the output from
- <code class="function">what()</code> will be included.
- </p><p>
- Any replacement termination function is required to kill the
- program without returning; this one calls abort.
- </p><p>
- For example:
- </p><pre class="programlisting">
-#include &lt;exception&gt;
-#include &lt;stdexcept&gt;
-
-struct argument_error : public std::runtime_error
-{
- argument_error(const std::string&amp; s): std::runtime_error(s) { }
-};
-
-int main(int argc)
-{
- std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
- if (argc &gt; 5)
- throw argument_error(<span class="quote">“<span class="quote">argc is greater than 5!</span>â€</span>);
- else
- throw argc;
-}
-</pre><p>
- With the verbose terminate handler active, this gives:
- </p><pre class="screen">
- <code class="computeroutput">
- % ./a.out
- terminate called after throwing a `int'
- Aborted
- % ./a.out f f f f f f f f f f f
- terminate called after throwing an instance of `argument_error'
- what(): argc is greater than 5!
- Aborted
- </code>
- </pre><p>
- The 'Aborted' line comes from the call to
- <code class="function">abort()</code>, of course.
- </p><p>
- This is the default termination handler; nothing need be done to
- use it. To go back to the previous <span class="quote">“<span class="quote">silent death</span>â€</span>
- method, simply include <code class="filename">exception</code> and
- <code class="filename">cstdlib</code>, and call
- </p><pre class="programlisting">
- std::set_terminate(std::abort);
- </pre><p>
- After this, all calls to <code class="function">terminate</code> will use
- <code class="function">abort</code> as the terminate handler.
- </p><p>
- Note: the verbose terminate handler will attempt to write to
- stderr. If your application closes stderr or redirects it to an
- inappropriate location,
- <code class="function">__verbose_terminate_handler</code> will behave in
- an unspecified manner.
- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="termination.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. Termination </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. 
- Diagnostics
-
-</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/html/spine.html b/libstdc++-v3/doc/html/spine.html
index edcf88aae34..585f7cdf1ea 100644
--- a/libstdc++-v3/doc/html/spine.html
+++ b/libstdc++-v3/doc/html/spine.html
@@ -5,43 +5,53 @@
</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="book"><a href="manual/spine.html">The GNU C++ Library</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
Introduction
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/support.html">II.
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="sect1"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="sect2"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt02.html">II.
+ Standard Contents
+</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/support.html">4.
Support
-</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="manual/fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="manual/termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="manual/verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/diagnostics.html">III.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect2"><a href="manual/support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="sect2"><a href="manual/support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="sect1"><a href="manual/termination.html">Termination</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect2"><a href="manual/termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/diagnostics.html">5.
Diagnostics
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="manual/utilities.html">IV.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="sect2"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
Utilities
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="manual/pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="manual/memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="manual/auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/traits.html">12. Traits</a></span></dt></dl></dd><dt><span class="part"><a href="manual/strings.html">V.
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
Strings
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/bk01pt05ch13.html">13. String Classes</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/bk01pt05ch13.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt05ch13s02.html">Case Sensitivity</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt05ch13s03.html">Arbitrary Character Types</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt05ch13s04.html">Tokenizing</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt05ch13s05.html">Shrink to Fit</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt05ch13s06.html">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/localization.html">VI.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect2"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="sect2"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="sect2"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="sect2"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8.
Localization
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/locales.html">14. Locales</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/locales.html#manual.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/locales.html#locales.locale.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/locales.html#locales.locale.design">Design</a></span></dt><dt><span class="sect2"><a href="manual/locales.html#locales.locale.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/locales.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/facets.html">15. Facets aka Categories</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="manual/codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="manual/codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="manual/messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="manual/messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/containers.html">VII.
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
Containers
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/sequences.html">16. Sequences</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/sequences.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/sequences.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/vector.html">vector</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/vector.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/associative.html">17. Associative</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect1"><a href="manual/bitset.html">bitset</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bitset.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="sect2"><a href="manual/bitset.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers_and_c.html">18. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/iterators.html">VIII.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dt><span class="sect2"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect2"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10.
Iterators
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/bk01pt08ch19.html">19. Predefined</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/bk01pt08ch19.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt08ch19s02.html">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/algorithms.html">IX.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect2"><a href="manual/iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/algorithms.html">11.
Algorithms
-</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt09pr02.html"></a></span></dt><dt><span class="chapter"><a href="manual/bk01pt09ch20.html">20. Mutating</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/bk01pt09ch20.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt09ch20.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/numerics.html">X.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/numerics.html">12.
Numerics
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/complex.html">21. Complex</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/complex.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/generalized_numeric_operations.html">22. Generalized Operations</a></span></dt><dt><span class="chapter"><a href="manual/numerics_and_c.html">23. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt10ch23s02.html">C99</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/io.html">XI.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="sect1"><a href="manual/numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect2"><a href="manual/numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/io.html">13.
Input and Output
-</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/iostream_objects.html">24. Iostream Objects</a></span></dt><dt><span class="chapter"><a href="manual/streambufs.html">25. Stream Buffers</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt11ch25s02.html">Buffering</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/stringstreams.html">26. Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/stringstreams.html#manual.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/fstreams.html">27. File Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/fstreams.html#manual.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt11ch27s02.html">Binary Input and Output</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/io_and_c.html">28. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/io_and_c.html#manual.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt11ch28s02.html">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/extensions.html">XII.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="sect1"><a href="manual/streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect2"><a href="manual/streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect2"><a href="manual/fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect2"><a href="manual/io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/atomics.html">14.
+ Atomics
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/atomics.html#std.atomics.api">API Reference</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/concurrency.html">15.
+ Concurrency
+
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/extensions.html">III.
Extensions
-</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt12pr03.html"></a></span></dt><dt><span class="chapter"><a href="manual/ext_compile_checks.html">29. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="manual/debug_mode.html">30. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch30s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch30s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch30s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch30s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch30s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch30s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch30s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch30s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">31. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch31s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch31s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch31s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch31s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch31s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch31s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch31s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch31s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch31s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch31s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/profile_mode.html">32. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="manual/profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch32s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch32s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch32s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch32s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch32s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch32s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch32s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="manual/profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_allocators.html">33. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="manual/bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">34. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch34s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt12ch34s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">35. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">36. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">37. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">38. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">39. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">40. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">41. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch41s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt12ch41s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt12ch41s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt12ch41s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_contributing.html">A.
+</a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt03pr01.html"></a></span></dt><dt><span class="chapter"><a href="manual/ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="manual/debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch18s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="manual/parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="manual/profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="manual/profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_allocators.html">20. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="manual/ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="manual/bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/ext_containers.html">21. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch21s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch21s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_utilities.html">22. Utilities</a></span></dt><dt><span class="chapter"><a href="manual/ext_algorithms.html">23. Algorithms</a></span></dt><dt><span class="chapter"><a href="manual/ext_numerics.html">24. Numerics</a></span></dt><dt><span class="chapter"><a href="manual/ext_iterators.html">25. Iterators</a></span></dt><dt><span class="chapter"><a href="manual/ext_io.html">26. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/ext_demangling.html">27. Demangling</a></span></dt><dt><span class="chapter"><a href="manual/ext_concurrency.html">28. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="manual/ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch28s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bk01pt03ch28s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="manual/bk01pt03ch28s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bk01pt03ch28s03.html">Use</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/bk01pt04.html">IV.
+ Appendices
+</a></span></dt><dd><dl><dt><span class="appendix"><a href="manual/appendix_contributing.html">A.
Contributing
-</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B.
+</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.docbook">Docbook</a></span></dt><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.combines">Combines</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B.
Porting and Maintenance
</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.special">Special Topics</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_free.html">C.
@@ -49,4 +59,4 @@
</a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D.
<acronym class="acronym">GNU</acronym> General Public License version 3
- </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt><dt><span class="index"><a href="manual/bk01ix01.html">Index</a></span></dt></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">API and Source Level Documentation</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library</td></tr></table></div></body></html>
+ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">API Documentation</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library</td></tr></table></div></body></html>
diff --git a/libstdc++-v3/doc/xml/api.xml b/libstdc++-v3/doc/xml/api.xml
index 3073ed8ba6f..d29bb5c04ca 100644
--- a/libstdc++-v3/doc/xml/api.xml
+++ b/libstdc++-v3/doc/xml/api.xml
@@ -1,15 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0">
-<book>
-
-<article id="api" xreflabel="API">
+<article xml:id="api" xreflabel="API">
<?dbhtml filename="api.html"?>
-<articleinfo>
- <title>API Documentation</title>
+<title>The GNU C++ Library API Reference</title>
+
+<info>
<copyright>
<year>
2008
@@ -18,8 +14,8 @@
2010
</year>
<holder>
- <ulink url="http://www.fsf.org/">FSF
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">FSF
+ </link>
</holder>
</copyright>
<legalnotice>
@@ -28,7 +24,7 @@
</link>
</para>
</legalnotice>
-</articleinfo>
+</info>
<para>
The GNU C++ library sources have been specially formatted so that
@@ -47,38 +43,38 @@
<itemizedlist>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
+ </link>
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
+ </link>
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
+ </link>
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
+ </link>
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
+ </link>
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">&quot;the latest collection&quot;
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">"the latest collection"
+ </link>
(For the main development tree; see the date on the first page.)
</para>
</listitem>
@@ -89,7 +85,7 @@
gcc.org site in a directory located at
<literal>&lt;URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/&gt;</literal>.
You will almost certainly need to use one of the
- <ulink url="http://gcc.gnu.org/mirrors.html">mirror sites</ulink> to download
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/mirrors.html">mirror sites</link> to download
the tarball. After unpacking, simply load libstdc++-html-*/index.html
into a browser.
</para>
diff --git a/libstdc++-v3/doc/xml/authors.xml b/libstdc++-v3/doc/xml/authors.xml
index 5d7909f8b14..1f26f63fbc6 100644
--- a/libstdc++-v3/doc/xml/authors.xml
+++ b/libstdc++-v3/doc/xml/authors.xml
@@ -1,4 +1,4 @@
-<authorgroup>
+<authorgroup xmlns="http://docbook.org/ns/docbook" version="5.0">
<!--
<author>
@@ -20,176 +20,101 @@
</author>
-->
- <author>
- <firstname></firstname>
- <surname></surname>
-
- <authorblurb>
+ <author><personname><firstname/><surname/></personname><personblurb>
<para>
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Paolo</firstname>
- <surname>Carlini</surname>
-
- <authorblurb>
+ <author><personname><firstname>Paolo</firstname><surname>Carlini</surname></personname><personblurb>
<para>
TR1, LWG Active, Closed, Defects lists.
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Phil</firstname>
- <surname>Edwards</surname>
-
- <authorblurb>
+ <author><personname><firstname>Phil</firstname><surname>Edwards</surname></personname><personblurb>
<para>
Originating author, started HOWTO and FAQ, worked on sections
Demangling, Macros, Strings, Iterators, Backwards
Compatibility, SGI Extensions, Configure, Build, Install.
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Doug</firstname>
- <surname>Gregor</surname>
-
- <authorblurb>
+ <author><personname><firstname>Doug</firstname><surname>Gregor</surname></personname><personblurb>
<para>
Debug Mode, TR1 function objects
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Benjamin</firstname>
- <surname>Kosnik</surname>
-
- <authorblurb>
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname><personblurb>
<para>
Allocators, ABI, API evolution and deprecation history,
Backwards Compatibility, Thread, Debug Support, Locales,
Facets, Parallel Mode, Headers, Namespaces, Construction and
Structure, Using Exceptions, DocBook conversion and layout.
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Dhruv</firstname>
- <surname>Matani</surname>
-
- <authorblurb>
+ <author><personname><firstname>Dhruv</firstname><surname>Matani</surname></personname><personblurb>
<para>
bitmap_allocator
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Jason</firstname>
- <surname>Merrill</surname>
-
- <authorblurb>
+ <author><personname><firstname>Jason</firstname><surname>Merrill</surname></personname><personblurb>
<para>
License, __verbose_terminate_handler
</para>
- </authorblurb>
- </author>
-
- <author>
- <firstname>Mark</firstname>
- <surname>Mitchell</surname>
+ </personblurb></author>
- <authorblurb>
+ <author><personname><firstname>Mark</firstname><surname>Mitchell</surname></personname><personblurb>
<para>
Porting
</para>
- </authorblurb>
- </author>
-
- <author>
- <firstname>Nathan</firstname>
- <surname>Myers</surname>
+ </personblurb></author>
- <authorblurb>
+ <author><personname><firstname>Nathan</firstname><surname>Myers</surname></personname><personblurb>
<para>
Referenced counted string, C++1998 implementation status.
</para>
- </authorblurb>
- </author>
-
- <author>
- <firstname>Felix</firstname>
- <surname>Natter</surname>
+ </personblurb></author>
- <authorblurb>
+ <author><personname><firstname>Felix</firstname><surname>Natter</surname></personname><personblurb>
<para>
Namespace composition, Backwards Compatibility.
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Stefan</firstname>
- <surname>Olsson</surname>
-
- <authorblurb>
+ <author><personname><firstname>Stefan</firstname><surname>Olsson</surname></personname><personblurb>
<para>
mt_allocator
</para>
- </authorblurb>
- </author>
-
- <author>
- <firstname>Silvius</firstname>
- <surname>Rus</surname>
+ </personblurb></author>
- <authorblurb>
+ <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname><personblurb>
<para>
Profile mode
</para>
- </authorblurb>
- </author>
-
- <author>
- <firstname>Johannes</firstname>
- <surname>Singler</surname>
+ </personblurb></author>
- <authorblurb>
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname><personblurb>
<para>
Parallel mode
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Ami</firstname>
- <surname>Tavory</surname>
-
- <authorblurb>
+ <author><personname><firstname>Ami</firstname><surname>Tavory</surname></personname><personblurb>
<para>
Policy Based Data Structures, Associative Containers, Unordered
Containers.
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
- <author>
- <firstname>Jonathan</firstname>
- <surname>Wakely</surname>
-
- <authorblurb>
+ <author><personname><firstname>Jonathan</firstname><surname>Wakely</surname></personname><personblurb>
<para>
shared_ptr, markup editing and styling
</para>
- </authorblurb>
- </author>
+ </personblurb></author>
</authorgroup>
diff --git a/libstdc++-v3/doc/xml/book.txml b/libstdc++-v3/doc/xml/book.txml
index a77690d0d32..55b050271a5 100644
--- a/libstdc++-v3/doc/xml/book.txml
+++ b/libstdc++-v3/doc/xml/book.txml
@@ -1,32 +1,29 @@
-<?xml version='1.0'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
+<!-- Converted by db4-upgrade version 1.0 -->
+
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="api" xreflabel="Source Level Documentation">
-<book id="api" xreflabel="Source Level Documentation">
-<title>Source Level Documentation</title>
-<bookinfo>
+<info>
<copyright>
<year>2007</year>
<holder>
- <ulink url="www.fsf.org">FSF
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="www.fsf.org">FSF
+ </link>
</holder>
</copyright>
<legalnotice>
<para>
- <ulink url="17_intro/license.html">License
- </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="17_intro/license.html">License
+ </link>
</para>
</legalnotice>
-</bookinfo>
+</info>
+
+<part><info><title/></info>
-<part>
-<title></title>
- <chapter>
- <title></title>
- <para></para>
+ <chapter><info><title/></info>
+
+ <para/>
</chapter>
</part>
diff --git a/libstdc++-v3/doc/xml/chapter.txml b/libstdc++-v3/doc/xml/chapter.txml
index 9cf5b74e855..85323e73baa 100644
--- a/libstdc++-v3/doc/xml/chapter.txml
+++ b/libstdc++-v3/doc/xml/chapter.txml
@@ -1,11 +1,8 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
+<!-- Converted by db4-upgrade version 1.0 -->
-<chapter id="manual.intro" xreflabel="Introduction">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.intro" xreflabel="Introduction">
-<chapterinfo>
+<info><title>Introduction</title>
<keywordset>
<keyword>
ISO C++
@@ -14,41 +11,41 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
-<title>Introduction</title>
-<sect1 id="manual.intro.status" xreflabel="Status">
- <title>Status</title>
+
+<section xml:id="manual.intro.status" xreflabel="Status"><info><title>Status</title></info>
+
<para>
The GNU C++ ...
</para>
-</sect1>
+</section>
-<sect1 id="manual.intro.setup" xreflabel="Setup">
- <title>Setup</title>
+<section xml:id="manual.intro.setup" xreflabel="Setup"><info><title>Setup</title></info>
+
<para>
The GNU C++ ...
</para>
- <sect2 id="manual.intro.setup.next1" xreflabel="Next1">
- <title>Next1</title>
+ <section xml:id="manual.intro.setup.next1" xreflabel="Next1"><info><title>Next1</title></info>
+
<para>
The GNU C++ ...
</para>
- </sect2>
- <sect2 id="manual.intro.setup.next2" xreflabel="Next2">
- <title>Next2</title>
+ </section>
+ <section xml:id="manual.intro.setup.next2" xreflabel="Next2"><info><title>Next2</title></info>
+
<para>
The GNU C++ ...
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
-<sect1 id="manual.intro.using" xreflabel="Using">
- <title>Using</title>
+<section xml:id="manual.intro.using" xreflabel="Using"><info><title>Using</title></info>
+
<para>
The GNU C++ ...
</para>
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/class.txml b/libstdc++-v3/doc/xml/class.txml
index 83497db3720..26c9acf97f1 100644
--- a/libstdc++-v3/doc/xml/class.txml
+++ b/libstdc++-v3/doc/xml/class.txml
@@ -1,7 +1,9 @@
-<sect1 id="manual.util.memory.allocator" xreflabel="allocator">
+<!-- Converted by db4-upgrade version 1.0 -->
+
+<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.util.memory.allocator" xreflabel="allocator">
<?dbhtml filename="allocator.html"?>
-<sect1info>
+<info><title>allocator</title>
<keywordset>
<keyword>
ISO C++
@@ -10,15 +12,15 @@
allocator
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>allocator</title>
<para>
</para>
-<sect2 id="allocator.req" xreflabel="allocator.req">
-<title>Requirements</title>
+<section xml:id="allocator.req" xreflabel="allocator.req"><info><title>Requirements</title></info>
+
<para>
</para>
@@ -35,33 +37,33 @@
<para>
</para>
-</sect2>
+</section>
+
+<section xml:id="allocator.design_issues" xreflabel="allocator.design_issues"><info><title>Design Issues</title></info>
-<sect2 id="allocator.design_issues" xreflabel="allocator.design_issues">
-<title>Design Issues</title>
<para>
</para>
<para>
</para>
-</sect2>
+</section>
+
+<section xml:id="allocator.impl" xreflabel="allocator.impl"><info><title>Implementation</title></info>
-<sect2 id="allocator.impl" xreflabel="allocator.impl">
-<title>Implementation</title>
- <sect3>
- <title>Interface Design</title>
+ <section><info><title>Interface Design</title></info>
+
<para>
</para>
<para>
</para>
- </sect3>
+ </section>
- <sect3>
- <title>Selecting Default Allocation Strategy</title>
+ <section><info><title>Selecting Default Allocation Strategy</title></info>
+
<para>
</para>
@@ -76,38 +78,38 @@
<listitem>
</listitem>
</orderedlist>
- </sect3>
+ </section>
- <sect3>
- <title>Disabling Memory Caching</title>
+ <section><info><title>Disabling Memory Caching</title></info>
+
<para>
</para>
<para>
</para>
- </sect3>
-</sect2>
+ </section>
+</section>
+
+<section xml:id="allocator.using" xreflabel="allocator.using"><info><title>Using</title></info>
-<sect2 id="allocator.using" xreflabel="allocator.using">
-<title>Using</title>
<para>
</para>
-</sect2>
+</section>
+
+<section xml:id="allocator.custom" xreflabel="allocator.custom"><info><title>Custom Allocators</title></info>
-<sect2 id="allocator.custom" xreflabel="allocator.custom">
-<title>Custom Allocators</title>
<para>
</para>
<para>
</para>
-</sect2>
+</section>
+
+<bibliography xml:id="allocator.biblio" xreflabel="allocator.biblio"><info><title>Bibliography</title></info>
-<bibliography id="allocator.biblio" xreflabel="allocator.biblio">
-<title>Bibliography</title>
<!--
<biblioentry>
@@ -116,11 +118,11 @@
<biblioid class="uri">
<ulink url="http://about:blank">
- <citetitle>
- The Title
- </citetitle>
</ulink>
</biblioid>
+ <citetitle>
+ The Title
+ </citetitle>
<editor>
<firstname></firstname>
@@ -151,4 +153,4 @@
</bibliography>
-</sect1> \ No newline at end of file
+</section>
diff --git a/libstdc++-v3/doc/xml/faq.xml b/libstdc++-v3/doc/xml/faq.xml
index 7a0953ccbe0..f8e6312386a 100644
--- a/libstdc++-v3/doc/xml/faq.xml
+++ b/libstdc++-v3/doc/xml/faq.xml
@@ -1,39 +1,34 @@
-<?xml version='1.0'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
+<book xmlns="http://docbook.org/ns/docbook" version="5.0">
-<book>
-
-<article id="faq" xreflabel="Frequently Asked Questions">
+<article xml:id="faq" xreflabel="Frequently Asked Questions">
<?dbhtml filename="faq.html"?>
-<articleinfo>
- <title>Frequently Asked Questions</title>
+<info><title>Frequently Asked Questions</title>
+
<copyright>
<year>
- 2008
+ 2008, 2010
</year>
<holder>
- <ulink url="http://www.fsf.org">FSF</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
</copyright>
-</articleinfo>
+</info>
<!-- FAQ starts here -->
<qandaset>
<!-- General Information -->
-<qandadiv id="faq.info" xreflabel="General Information">
-<title>General Information</title>
+<qandadiv xml:id="faq.info" xreflabel="General Information">
+
-<qandaentry id="faq.what">
- <question id="faq.what.q">
+<qandaentry xml:id="faq.what">
+ <question xml:id="faq.what.q">
<para>
What is libstdc++?
</para>
</question>
- <answer id="faq.what.a">
+ <answer xml:id="faq.what.a">
<para>
The GNU Standard C++ Library v3 is an ongoing project to
implement the ISO 14882 Standard C++ library as described in
@@ -41,18 +36,18 @@
exactly how far the project has come, or just want the latest
bleeding-edge code, the up-to-date source is available over
anonymous SVN, and can even be browsed over
- the <ulink url="http://gcc.gnu.org/svn.html">web</ulink>.
+ the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svn.html">web</link>.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.why">
- <question id="q-why">
+<qandaentry xml:id="faq.why">
+ <question xml:id="q-why">
<para>
Why should I use libstdc++?
</para>
</question>
- <answer id="a-why">
+ <answer xml:id="a-why">
<para>
The completion of the ISO C++ standardization gave the C++
community a powerful set of reuseable tools in the form of the C++
@@ -66,9 +61,9 @@
(<command>gcc</command>, <command>g++</command>, etc) is widely
considered to be one of the leading compilers in the world. Its
development is overseen by the
- <ulink url="http://gcc.gnu.org/">GCC team</ulink>. All of
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/">GCC team</link>. All of
the rapid development and near-legendary
- <ulink url="http://gcc.gnu.org/buildstat.html">portability</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/buildstat.html">portability</link>
that are the hallmarks of an open-source project are being
applied to libstdc++.
</para>
@@ -83,13 +78,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.who">
- <question id="q-who">
+<qandaentry xml:id="faq.who">
+ <question xml:id="q-who">
<para>
Who's in charge of it?
</para>
</question>
- <answer id="a-who">
+ <answer xml:id="a-who">
<para>
The libstdc++ project is contributed to by several developers
all over the world, in the same way as GCC or Linux.
@@ -101,19 +96,19 @@
Development and discussion is held on the libstdc++ mailing
list. Subscribing to the list, or searching the list
archives, is open to everyone. You can read instructions for
- doing so on the <ulink url="http://gcc.gnu.org/libstdc++/">homepage</ulink>.
+ doing so on the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/libstdc++/">homepage</link>.
If you have questions, ideas, code, or are just curious, sign up!
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.when">
- <question id="q-when">
+<qandaentry xml:id="faq.when">
+ <question xml:id="q-when">
<para>
When is libstdc++ going to be finished?
</para>
</question>
- <answer id="a-when">
+ <answer xml:id="a-when">
<para>
Nathan Myers gave the best of all possible answers, responding to
a Usenet article asking this question: <emphasis>Sooner, if you
@@ -122,13 +117,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.how">
- <question id="q-how">
+<qandaentry xml:id="faq.how">
+ <question xml:id="q-how">
<para>
How do I contribute to the effort?
</para>
</question>
- <answer id="a-how">
+ <answer xml:id="a-how">
<para>
Here is <link linkend="appendix.contrib">a page devoted to
this topic</link>. Subscribing to the mailing list (see above, or
@@ -142,13 +137,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.whereis_old">
- <question id="q-whereis_old">
+<qandaentry xml:id="faq.whereis_old">
+ <question xml:id="q-whereis_old">
<para>
What happened to the older libg++? I need that!
</para>
</question>
- <answer id="a-whereis_old">
+ <answer xml:id="a-whereis_old">
<para>
The most recent libg++ README states that libg++ is no longer
being actively maintained. It should not be used for new
@@ -160,13 +155,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.more_questions">
- <question id="q-more_questions">
+<qandaentry xml:id="faq.more_questions">
+ <question xml:id="q-more_questions">
<para>
What if I have more questions?
</para>
</question>
- <answer id="a-more_questions">
+ <answer xml:id="a-more_questions">
<para>
If you have read the README file, and your question remains
unanswered, then just ask the mailing list. At present, you do not
@@ -187,16 +182,16 @@
</qandadiv>
<!-- License -->
-<qandadiv id="faq.license" xreflabel="License QA">
-<title>License</title>
+<qandadiv xml:id="faq.license" xreflabel="License QA">
+
-<qandaentry id="faq.license.what">
- <question id="q-license.what">
+<qandaentry xml:id="faq.license.what">
+ <question xml:id="q-license.what">
<para>
What are the license terms for libstdc++?
</para>
</question>
- <answer id="a-license.what">
+ <answer xml:id="a-license.what">
<para>
See <link linkend="manual.intro.status.license">our license description</link>
for these and related questions.
@@ -204,13 +199,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.license.any_program">
- <question id="q-license.any_program">
+<qandaentry xml:id="faq.license.any_program">
+ <question xml:id="q-license.any_program">
<para>
So any program which uses libstdc++ falls under the GPL?
</para>
</question>
- <answer id="a-license.any_program">
+ <answer xml:id="a-license.any_program">
<para>
No. The special exception permits use of the library in
proprietary applications.
@@ -219,13 +214,13 @@
</qandaentry>
-<qandaentry id="faq.license.lgpl">
- <question id="q-license.lgpl">
+<qandaentry xml:id="faq.license.lgpl">
+ <question xml:id="q-license.lgpl">
<para>
How is that different from the GNU {Lesser,Library} GPL?
</para>
</question>
- <answer id="a-license.lgpl">
+ <answer xml:id="a-license.lgpl">
<para>
The LGPL requires that users be able to replace the LGPL code with a
modified version; this is trivial if the library in question is a C
@@ -238,13 +233,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.license.what_restrictions">
- <question id="q-license.what_restrictions">
+<qandaentry xml:id="faq.license.what_restrictions">
+ <question xml:id="q-license.what_restrictions">
<para>
I see. So, what restrictions are there on programs that use the library?
</para>
</question>
- <answer id="a-license.what_restrictions">
+ <answer xml:id="a-license.what_restrictions">
<para>
None. We encourage such programs to be released as open source,
but we won't punish you or sue you if you choose otherwise.
@@ -255,15 +250,15 @@
</qandadiv>
<!-- Installation -->
-<qandadiv id="faq.installation" xreflabel="Installation">
-<title>Installation</title>
+<qandadiv xml:id="faq.installation" xreflabel="Installation">
-<qandaentry id="faq.how_to_install">
- <question id="q-how_to_install">
+
+<qandaentry xml:id="faq.how_to_install">
+ <question xml:id="q-how_to_install">
<para>How do I install libstdc++?
</para>
</question>
- <answer id="a-how_to_install">
+ <answer xml:id="a-how_to_install">
<para>
Often libstdc++ comes pre-installed as an integral part of many
existing Linux and Unix systems, as well as many embedded
@@ -281,17 +276,17 @@
</answer>
</qandaentry>
-<qandaentry id="faq.how_to_get_sources">
- <question id="q-how_to_get_sources">
+<qandaentry xml:id="faq.how_to_get_sources">
+ <question xml:id="q-how_to_get_sources">
<para>How does one get current libstdc++ sources?
</para>
</question>
- <answer id="a-how_to_get_sources">
+ <answer xml:id="a-how_to_get_sources">
<para>
Libstdc++ sources for all official releases can be obtained as
part of the GCC sources, available from various sites and
- mirrors. A full <ulink url="http://gcc.gnu.org/mirrors.html">list of
- download sites</ulink> is provided on the main GCC site.
+ mirrors. A full <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/mirrors.html">list of
+ download sites</link> is provided on the main GCC site.
</para>
<para>
Current libstdc++ sources can always be checked out of the main
@@ -303,8 +298,8 @@
<application>Subversion</application>, or <acronym>SVN</acronym>, is
one of several revision control packages. It was selected for GNU
projects because it's free (speech), free (beer), and very high
- quality. The <ulink url="http://subversion.tigris.org"> Subversion
- home page</ulink> has a better description.
+ quality. The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://subversion.tigris.org"> Subversion
+ home page</link> has a better description.
</para>
<para>
The <quote>anonymous client checkout</quote> feature of SVN is
@@ -313,24 +308,24 @@
</para>
<para>
For more information
- see <ulink url="http://gcc.gnu.org/svn.html"><acronym>SVN</acronym>
- details</ulink>.
+ see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svn.html"><acronym>SVN</acronym>
+ details</link>.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.how_to_test">
- <question id="q-how_to_test">
+<qandaentry xml:id="faq.how_to_test">
+ <question xml:id="q-how_to_test">
<para>How do I know if it works?
</para>
</question>
- <answer id="a-how_to_test">
+ <answer xml:id="a-how_to_test">
<para>
Libstdc++ comes with its own validation testsuite, which includes
conformance testing, regression testing, ABI testing, and
performance testing. Please consult the
- <ulink url="http://gcc.gnu.org/install/test.html">testing
- documentation</ulink> for more details.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/test.html">testing
+ documentation</link> for more details.
</para>
<para>
If you find bugs in the testsuite programs themselves, or if you
@@ -340,12 +335,12 @@
</answer>
</qandaentry>
-<qandaentry id="faq.how_to_set_paths">
- <question id="q-how_to_set_paths">
+<qandaentry xml:id="faq.how_to_set_paths">
+ <question xml:id="q-how_to_set_paths">
<para>How do I insure that the dynamically linked library will be found?
</para>
</question>
- <answer id="a-how_to_set_paths">
+ <answer xml:id="a-how_to_set_paths">
<para>
Depending on your platform and library version, the error message might
be similar to one of the following:
@@ -387,16 +382,20 @@
linker has different names on different platforms but the man page
is usually called something such as <filename>ld.so/rtld/dld.so</filename>.
</para>
+ <para>
+ Using LD_LIBRARY_PATH is not always the best solution, <link linkend="manual.intro.using.linkage.dynamic">Finding Dynamic or Shared
+ Libraries</link> in the manual gives some alternatives.
+ </para>
</answer>
</qandaentry>
-<qandaentry id="faq.what_is_libsupcxx">
- <question id="q-what_is_libsupcxx">
+<qandaentry xml:id="faq.what_is_libsupcxx">
+ <question xml:id="q-what_is_libsupcxx">
<para>
What's libsupc++?
</para>
</question>
- <answer id="a-what_is_libsupcxx">
+ <answer xml:id="a-what_is_libsupcxx">
<para>
If the only functions from <filename>libstdc++.a</filename>
which you need are language support functions (those listed in
@@ -416,13 +415,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.size">
- <question id="q-size">
+<qandaentry xml:id="faq.size">
+ <question xml:id="q-size">
<para>
This library is HUGE!
</para>
</question>
- <answer id="a-size">
+ <answer xml:id="a-size">
<para>
Usually the size of libraries on disk isn't noticeable. When a
link editor (or simply <quote>linker</quote>) pulls things from a
@@ -462,16 +461,16 @@
<!-- Platform-Specific Issues -->
-<qandadiv id="faq.platform-specific" xreflabel="Platform-Specific Issues">
-<title>Platform-Specific Issues</title>
+<qandadiv xml:id="faq.platform-specific" xreflabel="Platform-Specific Issues">
+
-<qandaentry id="faq.other_compilers">
- <question id="q-other_compilers">
+<qandaentry xml:id="faq.other_compilers">
+ <question xml:id="q-other_compilers">
<para>
Can libstdc++ be used with non-GNU compilers?
</para>
</question>
- <answer id="a-other_compilers">
+ <answer xml:id="a-other_compilers">
<para>
Perhaps.
</para>
@@ -486,7 +485,7 @@
non-standard features of g++ that are not present in older
versions of proprietary compilers. It may take as much as a year or two
after an official release of GCC that contains these features for
- proprietary tools support these constructs.
+ proprietary tools to support these constructs.
</para>
<para>
In the near past, specific released versions of libstdc++ have
@@ -498,13 +497,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.solaris_long_long">
- <question id="q-solaris_long_long">
+<qandaentry xml:id="faq.solaris_long_long">
+ <question xml:id="q-solaris_long_long">
<para>
No 'long long' type on Solaris?
</para>
</question>
- <answer id="a-solaris_long_long">
+ <answer xml:id="a-solaris_long_long">
<para>
By default we try to support the C99 <type>long long</type> type.
This requires that certain functions from your C library be present.
@@ -521,13 +520,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.predefined">
- <question id="q-predefined">
+<qandaentry xml:id="faq.predefined">
+ <question xml:id="q-predefined">
<para>
<constant>_XOPEN_SOURCE</constant> and <constant>_GNU_SOURCE</constant> are always defined?
</para>
</question>
- <answer id="a-predefined">
+ <answer xml:id="a-predefined">
<para>On Solaris, g++ (but not gcc) always defines the preprocessor
macro <constant>_XOPEN_SOURCE</constant>. On GNU/Linux, the same happens
with <constant>_GNU_SOURCE</constant>. (This is not an exhaustive list;
@@ -553,11 +552,11 @@
<para>To see which symbols are defined, look for CPLUSPLUS_CPP_SPEC in
the gcc config headers for your target (and try changing them to
see what happens when building complicated code). You can also run
- <command>g++ -E -dM - &lt; /dev/null&quot;</command> to display
+ <command>g++ -E -dM - &lt; /dev/null"</command> to display
a list of predefined macros for any particular installation.
</para>
<para>This has been discussed on the mailing lists
- <ulink url="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris">quite a bit</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris">quite a bit</link>.
</para>
<para>This method is something of a wart. We'd like to find a cleaner
solution, but nobody yet has contributed the time.
@@ -566,29 +565,29 @@
</answer>
</qandaentry>
-<qandaentry id="faq.darwin_ctype">
- <question id="q-darwin_ctype">
+<qandaentry xml:id="faq.darwin_ctype">
+ <question xml:id="q-darwin_ctype">
<para>
Mac OS X <filename class="headerfile">ctype.h</filename> is broken! How can I fix it?
</para>
</question>
- <answer id="a-darwin_ctype">
+ <answer xml:id="a-darwin_ctype">
<para>This is a long-standing bug in the OS X support. Fortunately,
the patch is quite simple, and well-known.
- <ulink url="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
- link to the solution</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
+ link to the solution</link>.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.threads_i386">
- <question id="q-threads_i386">
+<qandaentry xml:id="faq.threads_i386">
+ <question xml:id="q-threads_i386">
<para>
Threading is broken on i386?
</para>
</question>
- <answer id="a-threads_i386">
+ <answer xml:id="a-threads_i386">
<para>
</para>
<para>Support for atomic integer operations is/was broken on i386
@@ -604,13 +603,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.atomic_mips">
- <question id="q-atomic_mips">
+<qandaentry xml:id="faq.atomic_mips">
+ <question xml:id="q-atomic_mips">
<para>
MIPS atomic operations
</para>
</question>
- <answer id="a-atomic_mips">
+ <answer xml:id="a-atomic_mips">
<para>
The atomic locking routines for MIPS targets requires MIPS II
and later. A patch went in just after the 3.3 release to
@@ -624,18 +623,19 @@
</answer>
</qandaentry>
-<qandaentry id="faq.linux_glibc">
- <question id="q-linux_glibc">
+<qandaentry xml:id="faq.linux_glibc">
+ <question xml:id="q-linux_glibc">
<para>
Recent GNU/Linux glibc required?
</para>
</question>
- <answer id="a-linux_glibc">
+ <answer xml:id="a-linux_glibc">
<para>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
5.0.1) and later uses localization and formatting code from the system
- C library (glibc) version 2.2.5. That version of glibc is over a
- year old and contains necessary bugfixes. Many GNU/Linux distros make
- glibc version 2.3.x available now.
+ C library (glibc) version 2.2.5 which contains necessary bugfixes.
+ Most GNU/Linux distros make more recent versions available now.
+ libstdc++ 4.6.0 and later require glibc 2.3 or later for this
+ localization and formatting code.
</para>
<para>The guideline is simple: the more recent the C++ library, the
more recent the C library. (This is also documented in the main
@@ -645,13 +645,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.freebsd_wchar">
- <question id="q-freebsd_wchar">
+<qandaentry xml:id="faq.freebsd_wchar">
+ <question xml:id="q-freebsd_wchar">
<para>
Can't use wchar_t/wstring on FreeBSD
</para>
</question>
- <answer id="a-freebsd_wchar">
+ <answer xml:id="a-freebsd_wchar">
<para>
Older versions of FreeBSD's C library do not have sufficient
support for wide character functions, and as a result the
@@ -672,16 +672,16 @@
<!-- Known Bugs -->
-<qandadiv id="faq.known_bugs" xreflabel="Known Bugs">
-<title>Known Bugs</title>
+<qandadiv xml:id="faq.known_bugs" xreflabel="Known Bugs">
+
-<qandaentry id="faq.what_works">
- <question id="q-what_works">
+<qandaentry xml:id="faq.what_works">
+ <question xml:id="q-what_works">
<para>
What works already?
</para>
</question>
- <answer id="a-what_works">
+ <answer xml:id="a-what_works">
<para>
Short answer: Pretty much everything <emphasis>works</emphasis>
except for some corner cases. Support for localization
@@ -699,13 +699,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.standard_bugs">
- <question id="q-standard_bugs">
+<qandaentry xml:id="faq.standard_bugs">
+ <question xml:id="q-standard_bugs">
<para>
Bugs in the ISO C++ language or library specification
</para>
</question>
- <answer id="a-standard_bugs">
+ <answer xml:id="a-standard_bugs">
<para>
Unfortunately, there are some.
</para>
@@ -713,7 +713,7 @@
For those people who are not part of the ISO Library Group
(i.e., nearly all of us needing to read this page in the first
place), a public list of the library defects is occasionally
- published <ulink url="http://anubis.dkuug.dk/jtc1/sc22/wg21/">here</ulink>.
+ published <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">here</link>.
Some of these issues have resulted in code changes in libstdc++.
</para>
<para>
@@ -725,13 +725,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.compiler_bugs">
- <question id="q-compiler_bugs">
+<qandaentry xml:id="faq.compiler_bugs">
+ <question xml:id="q-compiler_bugs">
<para>
Bugs in the compiler (gcc/g++) and not libstdc++
</para>
</question>
- <answer id="a-compiler_bugs">
+ <answer xml:id="a-compiler_bugs">
<para>
On occasion, the compiler is wrong. Please be advised that this
happens much less often than one would think, and avoid jumping to
@@ -745,7 +745,7 @@
</para>
<para>
Before reporting a bug, please examine the
- <ulink url="http://gcc.gnu.org/bugs.html">bugs database</ulink> with the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugs.html">bugs database</link> with the
category set to <quote>g++</quote>.
</para>
</answer>
@@ -754,21 +754,21 @@
</qandadiv>
<!-- Known Non-Bugs -->
-<qandadiv id="faq.known_non-bugs" xreflabel="Known Non-Bugs">
-<title>Known Non-Bugs</title>
+<qandadiv xml:id="faq.known_non-bugs" xreflabel="Known Non-Bugs">
-<qandaentry id="faq.stream_reopening_fails">
- <question id="q-stream_reopening_fails">
+
+<qandaentry xml:id="faq.stream_reopening_fails">
+ <question xml:id="q-stream_reopening_fails">
<para>
Reopening a stream fails
</para>
</question>
- <answer id="a-stream_reopening_fails">
+ <answer xml:id="a-stream_reopening_fails">
<para>
One of the most-reported non-bug reports. Executing a sequence like:
</para>
- <literallayout>
+ <literallayout class="normal">
#include &lt;fstream&gt;
...
std::fstream fs(<quote>a_file</quote>);
@@ -797,13 +797,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.wefcxx_verbose">
- <question id="q-wefcxx_verbose">
+<qandaentry xml:id="faq.wefcxx_verbose">
+ <question xml:id="q-wefcxx_verbose">
<para>
-Weffc++ complains too much
</para>
</question>
- <answer id="a-wefcxx_verbose">
+ <answer xml:id="a-wefcxx_verbose">
<para>
Many warnings are emitted when <literal>-Weffc++</literal> is used. Making
libstdc++ <literal>-Weffc++</literal>-clean is not a goal of the project,
@@ -819,13 +819,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.ambiguous_overloads">
- <question id="q-ambiguous_overloads">
+<qandaentry xml:id="faq.ambiguous_overloads">
+ <question xml:id="q-ambiguous_overloads">
<para>
Ambiguous overloads after including an old-style header
</para>
</question>
- <answer id="a-ambiguous_overloads">
+ <answer xml:id="a-ambiguous_overloads">
<para>
Another problem is the <literal>rel_ops</literal> namespace and the template
comparison operator functions contained therein. If they become
@@ -833,27 +833,27 @@
(e.g., <quote>using</quote> them and the &lt;iterator&gt; header),
then you will suddenly be faced with huge numbers of ambiguity
errors. This was discussed on the -v3 list; Nathan Myers
- <ulink url="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
- things up here</ulink>. The collisions with vector/string iterator
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
+ things up here</link>. The collisions with vector/string iterator
types have been fixed for 3.1.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.v2_headers">
- <question id="q-v2_headers">
+<qandaentry xml:id="faq.v2_headers">
+ <question xml:id="q-v2_headers">
<para>
The g++-3 headers are <emphasis>not ours</emphasis>
</para>
</question>
- <answer id="a-v2_headers">
+ <answer xml:id="a-v2_headers">
<para>
If you have found an extremely broken header file which is
causing problems for you, look carefully before submitting a
- &quot;high&quot; priority bug report (which you probably
+ "high" priority bug report (which you probably
shouldn't do anyhow; see the last paragraph of the page
- describing <ulink url="http://gcc.gnu.org/bugs.html">the GCC
- bug database</ulink>).
+ describing <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugs.html">the GCC
+ bug database</link>).
</para>
<para>
If the headers are in <filename>${prefix}/include/g++-3</filename>, or
@@ -875,14 +875,14 @@
</answer>
</qandaentry>
-<qandaentry id="faq.boost_concept_checks">
- <question id="q-boost_concept_checks">
+<qandaentry xml:id="faq.boost_concept_checks">
+ <question xml:id="q-boost_concept_checks">
<para>
Errors about <emphasis>*Concept</emphasis> and
<emphasis>constraints</emphasis> in the STL
</para>
</question>
- <answer id="a-boost_concept_checks">
+ <answer xml:id="a-boost_concept_checks">
<para>
If you see compilation errors containing messages about
<errortext>foo Concept </errortext>and something to do with a
@@ -895,27 +895,28 @@
</para>
<para>
More information, including how to optionally enable/disable the
- checks, is available
- <link linkend="std.diagnostics.concept_checking">here</link>.
+ checks, is available in the
+ <link linkend="std.diagnostics.concept_checking">Diagnostics</link>.
+ chapter of the manual.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.dlopen_crash">
- <question id="q-dlopen_crash">
+<qandaentry xml:id="faq.dlopen_crash">
+ <question xml:id="q-dlopen_crash">
<para>
Program crashes when using library code in a
dynamically-loaded library
</para>
</question>
- <answer id="a-dlopen_crash">
+ <answer xml:id="a-dlopen_crash">
<para>
If you are using the C++ library across dynamically-loaded
objects, make certain that you are passing the correct options
when compiling and linking:
</para>
- <literallayout>
+ <literallayout class="normal">
// compile your library components
g++ -fPIC -c a.cc
g++ -fPIC -c b.cc
@@ -931,17 +932,17 @@
</answer>
</qandaentry>
-<qandaentry id="faq.memory_leaks">
- <question id="q-memory_leaks">
+<qandaentry xml:id="faq.memory_leaks">
+ <question xml:id="q-memory_leaks">
<para>
<quote>Memory leaks</quote> in containers
</para>
</question>
- <answer id="a-memory_leaks">
+ <answer xml:id="a-memory_leaks">
<para>
A few people have reported that the standard containers appear
to leak memory when tested with memory checkers such as
- <ulink url="http://valgrind.org/">valgrind</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://valgrind.org/">valgrind</link>.
The library's default allocators keep free memory in a pool
for later reuse, rather than returning it to the OS. Although
this memory is always reachable by the library and is never
@@ -953,13 +954,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.list_size_on">
- <question id="q-list_size_on">
+<qandaentry xml:id="faq.list_size_on">
+ <question xml:id="q-list_size_on">
<para>
list::size() is O(n)!
</para>
</question>
- <answer id="a-list_size_on">
+ <answer xml:id="a-list_size_on">
<para>
See
the <link linkend="std.containers">Containers</link>
@@ -968,18 +969,18 @@
</answer>
</qandaentry>
-<qandaentry id="faq.easy_to_fix">
- <question id="q-easy_to_fix">
+<qandaentry xml:id="faq.easy_to_fix">
+ <question xml:id="q-easy_to_fix">
<para>
Aw, that's easy to fix!
</para>
</question>
- <answer id="a-easy_to_fix">
+ <answer xml:id="a-easy_to_fix">
<para>
If you have found a bug in the library and you think you have
a working fix, then send it in! The main GCC site has a page
- on <ulink url="http://gcc.gnu.org/contribute.html">submitting
- patches</ulink> that covers the procedure, but for libstdc++ you
+ on <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/contribute.html">submitting
+ patches</link> that covers the procedure, but for libstdc++ you
should also send the patch to our mailing list in addition to
the GCC patches mailing list. The libstdc++
<link linkend="appendix.contrib">contributors' page</link>
@@ -988,10 +989,10 @@
<para>
In addition to the description, the patch, and the ChangeLog
entry, it is a Good Thing if you can additionally create a small
- test program to test for the presence of the bug that your
- patch fixes. Bugs have a way of being reintroduced; if an old
- bug creeps back in, it will be caught immediately by the
- <ulink url="#2_4">testsuite</ulink> -- but only if such a test exists.
+ test program to test for the presence of the bug that your patch
+ fixes. Bugs have a way of being reintroduced; if an old bug
+ creeps back in, it will be caught immediately by the testsuite -
+ but only if such a test exists.
</para>
</answer>
</qandaentry>
@@ -1000,16 +1001,16 @@
<!-- Miscellaneous -->
-<qandadiv id="faq.misc" xreflabel="Miscellaneous">
-<title>Miscellaneous</title>
+<qandadiv xml:id="faq.misc" xreflabel="Miscellaneous">
+
-<qandaentry id="faq.iterator_as_pod">
- <question id="faq.iterator_as_pod_q">
+<qandaentry xml:id="faq.iterator_as_pod">
+ <question xml:id="faq.iterator_as_pod_q">
<para>
string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
</para>
</question>
- <answer id="faq.iterator_as_pod_a">
+ <answer xml:id="faq.iterator_as_pod_a">
<para>
If you have code that depends on container&lt;T&gt; iterators
being implemented as pointer-to-T, your code is broken. It's
@@ -1033,13 +1034,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.what_is_next">
- <question id="q-what_is_next">
+<qandaentry xml:id="faq.what_is_next">
+ <question xml:id="q-what_is_next">
<para>
What's next after libstdc++?
</para>
</question>
- <answer id="a-what_is_next">
+ <answer xml:id="a-what_is_next">
<para>
Hopefully, not much. The goal of libstdc++ is to produce a
fully-compliant, fully-portable Standard Library. After that,
@@ -1050,21 +1051,21 @@
There is an effort underway to add significant extensions to
the standard library specification. The latest version of
this effort is described in
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
- The C++ Library Technical Report 1</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ The C++ Library Technical Report 1</link>.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.sgi_stl">
- <question id="q-sgi_stl">
+<qandaentry xml:id="faq.sgi_stl">
+ <question xml:id="q-sgi_stl">
<para>
What about the STL from SGI?
</para>
</question>
- <answer id="a-sgi_stl">
+ <answer xml:id="a-sgi_stl">
<para>
- The <ulink url="http://www.sgi.com/tech/stl/">STL from SGI</ulink>,
+ The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/">STL from SGI</link>,
version 3.3, was the final merge of the STL codebase. The
code in libstdc++ contains many fixes and changes, and
the SGI code is no longer under active
@@ -1072,7 +1073,7 @@
</para>
<para>
In particular, <classname>string</classname> is not from SGI and makes no
- use of their &quot;rope&quot; class (which is included as an
+ use of their "rope" class (which is included as an
optional extension), nor is <classname>valarray</classname> and some others.
Classes like <classname>vector&lt;&gt;</classname> are, but have been
extensively modified.
@@ -1091,50 +1092,48 @@
</answer>
</qandaentry>
-<qandaentry id="faq.extensions_and_backwards_compat">
- <question id="q-extensions_and_backwards_compat">
+<qandaentry xml:id="faq.extensions_and_backwards_compat">
+ <question xml:id="q-extensions_and_backwards_compat">
<para>
Extensions and Backward Compatibility
</para>
</question>
- <answer id="a-extensions_and_backwards_compat">
+ <answer xml:id="a-extensions_and_backwards_compat">
<para>
See the <link linkend="manual.appendix.porting.backwards">link</link> on backwards compatibility and <link linkend="appendix.porting.api">link</link> on evolution.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.tr1_support">
- <question id="q-tr1_support">
+<qandaentry xml:id="faq.tr1_support">
+ <question xml:id="q-tr1_support">
<para>
Does libstdc++ support TR1?
</para>
</question>
- <answer id="a-tr1_support">
+ <answer xml:id="a-tr1_support">
<para>
Yes.
</para>
<para>
The C++ Standard Library Technical Report adds many new features to
the library. The latest version of this effort is described in
- <ulink url=
- "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
- Technical Report 1</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
+ Technical Report 1</link>.
</para>
<para>
- The implementation status of TR1 in libstdc++ can be tracked <link
- linkend="status.iso.tr1">on the TR1 status
+ The implementation status of TR1 in libstdc++ can be tracked <link linkend="status.iso.tr1">on the TR1 status
page</link>.
</para>
</answer>
</qandaentry>
-<qandaentry id="faq.get_iso_cxx">
- <question id="q-get_iso_cxx">
+<qandaentry xml:id="faq.get_iso_cxx">
+ <question xml:id="q-get_iso_cxx">
<para>How do I get a copy of the ISO C++ Standard?
</para>
</question>
- <answer id="a-get_iso_cxx">
+ <answer xml:id="a-get_iso_cxx">
<para>
Copies of the full ISO 14882 standard are available on line via
the ISO mirror site for committee members. Non-members, or those
@@ -1143,14 +1142,14 @@
get a copy of the standard from their respective national
standards organization. In the USA, this national standards
organization is ANSI and their website is
- right <ulink url="http://www.ansi.org">here</ulink>. (And if
+ right <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.ansi.org">here</link>. (And if
you've already registered with them, clicking this link will take
you to directly to the place where you can
- <ulink url="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</link>.
</para>
<para>
Who is your country's member body? Visit the
- <ulink url="http://www.iso.ch/">ISO homepage</ulink> and find out!
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.iso.ch/">ISO homepage</link> and find out!
</para>
<para>
The 2003 version of the standard (the 1998 version plus TC1) is
@@ -1159,13 +1158,13 @@
</answer>
</qandaentry>
-<qandaentry id="faq.what_is_abi">
- <question id="q-what_is_abi">
+<qandaentry xml:id="faq.what_is_abi">
+ <question xml:id="q-what_is_abi">
<para>
What's an ABI and why is it so messy?
</para>
</question>
- <answer id="a-what_is_abi">
+ <answer xml:id="a-what_is_abi">
<para>
<acronym>ABI</acronym> stands for <quote>Application Binary
Interface</quote>. Conventionally, it refers to a great
@@ -1219,19 +1218,19 @@
</answer>
</qandaentry>
-<qandaentry id="faq.size_equals_capacity">
- <question id="q-size_equals_capacity">
+<qandaentry xml:id="faq.size_equals_capacity">
+ <question xml:id="q-size_equals_capacity">
<para>
How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
</para>
</question>
- <answer id="a-size_equals_capacity">
+ <answer xml:id="a-size_equals_capacity">
<para>
The standard idiom for deallocating a <classname>vector&lt;T&gt;</classname>'s
unused memory is to create a temporary copy of the vector and swap their
contents, e.g. for <classname>vector&lt;T&gt; v</classname>
</para>
- <literallayout>
+ <literallayout class="normal">
std::vector&lt;T&gt;(v).swap(v);
</literallayout>
<para>
diff --git a/libstdc++-v3/doc/xml/gnu/fdl-1.2.xml b/libstdc++-v3/doc/xml/gnu/fdl-1.2.xml
index 8ad3a41c964..ebf54f4a21b 100644
--- a/libstdc++-v3/doc/xml/gnu/fdl-1.2.xml
+++ b/libstdc++-v3/doc/xml/gnu/fdl-1.2.xml
@@ -1,15 +1,16 @@
-<appendix id="appendix.gfdl-1.2">
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gfdl-1.2">
+<info><title>GNU Free Documentation License</title></info>
<?dbhtml filename="appendix_gfdl.html"?>
- <title>GNU Free Documentation License</title>
+
<para>
Copyright (C) 2000, 2001, 2002 Free Software Foundation,
<abbrev>Inc.</abbrev> 51 Franklin <abbrev>St</abbrev>, Fifth Floor,
- Boston, <abbrev>MA</abbrev> 02110-1301 <abbrev
- role="initialism">USA</abbrev>. Everyone is permitted to copy and
+ Boston, <abbrev>MA</abbrev> 02110-1301 <abbrev role="initialism">USA</abbrev>. Everyone is permitted to copy and
distribute verbatim copies of this license document, but changing it is
not allowed.
</para>
- <bridgehead id="fdl-1-preamble" renderas="sect1">
+ <bridgehead xml:id="fdl-1-preamble" renderas="sect1">
0. PREAMBLE
</bridgehead>
<para>
@@ -35,7 +36,7 @@
for any textual work, regardless of subject matter or whether it is
published as a printed book. We recommend this License principally for
works whose purpose is instruction or reference.</para>
- <bridgehead id="fdl-1-definitions" renderas="sect1">
+ <bridgehead xml:id="fdl-1-definitions" renderas="sect1">
1. APPLICABILITY AND DEFINITIONS
</bridgehead>
<para>
@@ -131,7 +132,7 @@
these Warranty Disclaimers may have is void and has no effect on the
meaning of this License.
</para>
- <bridgehead id="VerbatimCopying" renderas="sect1">
+ <bridgehead xml:id="VerbatimCopying" renderas="sect1">
2. VERBATIM COPYING
</bridgehead>
<para>
@@ -149,7 +150,7 @@
You may also lend copies, under the same conditions stated above, and you
may publicly display copies.
</para>
- <bridgehead id="QuantityCopying" renderas="sect1">
+ <bridgehead xml:id="QuantityCopying" renderas="sect1">
3. COPYING IN QUANTITY
</bridgehead>
<para>
@@ -190,7 +191,7 @@
them a chance to provide you with an updated version of the
Document.
</para>
- <bridgehead id="Modifications" renderas="sect1">
+ <bridgehead xml:id="Modifications" renderas="sect1">
4. MODIFICATIONS
</bridgehead>
<para>
@@ -340,7 +341,7 @@
permission to use their names for publicity for or to assert or imply
endorsement of any Modified Version.
</para>
- <bridgehead id="Combining" renderas="sect1">
+ <bridgehead xml:id="Combining" renderas="sect1">
5. COMBINING DOCUMENTS
</bridgehead>
<para>
@@ -368,7 +369,7 @@
sections Entitled "Dedications". You must delete all sections Entitled
"Endorsements".
</para>
- <bridgehead id="Collections" renderas="sect1">
+ <bridgehead xml:id="Collections" renderas="sect1">
6. COLLECTIONS OF DOCUMENTS
</bridgehead>
<para>
@@ -384,7 +385,7 @@
License into the extracted document, and follow this License in all other
respects regarding verbatim copying of that document.
</para>
- <bridgehead id="Aggregation" renderas="sect1">
+ <bridgehead xml:id="Aggregation" renderas="sect1">
7. AGGREGATION WITH INDEPENDENT WORKS
</bridgehead>
<para>
@@ -405,7 +406,7 @@
if the Document is in electronic form. Otherwise they must appear on
printed covers that bracket the whole aggregate.
</para>
- <bridgehead id="Translation" renderas="sect1">
+ <bridgehead xml:id="Translation" renderas="sect1">
8. TRANSLATION
</bridgehead>
<para>
@@ -426,7 +427,7 @@
"Dedications", or "History", the requirement (section 4) to Preserve its
Title (section 1) will typically require changing the actual title.
</para>
- <bridgehead id="fdl-1-termination" renderas="sect1">
+ <bridgehead xml:id="fdl-1-termination" renderas="sect1">
9. TERMINATION
</bridgehead>
<para>
@@ -438,15 +439,14 @@
have their licenses terminated so long as such parties remain in full
compliance.
</para>
- <bridgehead id="FutureRevisions" renderas="sect1">
+ <bridgehead xml:id="FutureRevisions" renderas="sect1">
10. FUTURE REVISIONS OF THIS LICENSE
</bridgehead>
<para>
The Free Software Foundation may publish new, revised versions of the GNU
Free Documentation License from time to time. Such new versions will be
similar in spirit to the present version, but may differ in detail to
- address new problems or concerns. See <ulink
- url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.
+ address new problems or concerns. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</link>.
</para>
<para>
Each version of the License is given a distinguishing version number. If
@@ -458,7 +458,7 @@
License, you may choose any version ever published (not as a draft) by the
Free Software Foundation.
</para>
- <bridgehead id="HowToUse" renderas="sect1">
+ <bridgehead xml:id="HowToUse" renderas="sect1">
ADDENDUM: How to use this License for your documents
</bridgehead>
<para>
diff --git a/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml b/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
new file mode 100644
index 00000000000..9500e11fe2e
--- /dev/null
+++ b/libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
@@ -0,0 +1,562 @@
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gfdl-1.3">
+<info><title>GNU Free Documentation License</title></info>
+ <?dbhtml filename="appendix_gfdl.html"?>
+
+ <simpara>Version 1.3, 3 November 2008</simpara>
+ <simpara>
+ Copyright © 2000, 2001, 2002, 2007, 2008
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">Free Software Foundation, Inc.</link>
+ </simpara>
+ <simpara>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section0" renderas="sect2">
+ 0. PREAMBLE
+ </bridgehead>
+ <simpara>
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free†in the sense of freedom:
+ to assure everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the author and
+ publisher a way to get credit for their work, while not being considered
+ responsible for modifications made by others.
+ </simpara>
+ <simpara>
+ This License is a kind of “copyleftâ€, which means that
+ derivative works of the document must themselves be free in the same
+ sense. It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+ </simpara>
+ <simpara>
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free program
+ should come with manuals providing the same freedoms that the software
+ does. But this License is not limited to software manuals; it can be used
+ for any textual work, regardless of subject matter or whether it is
+ published as a printed book. We recommend this License principally for
+ works whose purpose is instruction or reference.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section1" renderas="sect2">
+ 1. APPLICABILITY AND DEFINITIONS
+ </bridgehead>
+ <simpara>
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that work
+ under the conditions stated herein. The “Documentâ€, below,
+ refers to any such manual or work. Any member of the public is a licensee,
+ and is addressed as “youâ€. You accept the license if you copy,
+ modify or distribute the work in a way requiring permission under
+ copyright law.
+ </simpara>
+ <simpara>
+ A “Modified Version†of the Document means any work containing
+ the Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ </simpara>
+ <simpara>
+ A “Secondary Section†is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship of
+ the publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.) The relationship could be a matter of historical connection
+ with the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+ </simpara>
+ <simpara>
+ The “Invariant Sections†are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License. If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant. The Document may contain zero Invariant
+ Sections. If the Document does not identify any Invariant Sections then
+ there are none.
+ </simpara>
+ <simpara>
+ The “Cover Texts†are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says
+ that the Document is released under this License. A Front-Cover Text may
+ be at most 5 words, and a Back-Cover Text may be at most 25 words.
+ </simpara>
+ <simpara>
+ A “Transparent†copy of the Document means a machine-readable
+ copy, represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or for
+ automatic translation to a variety of formats suitable for input to text
+ formatters. A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A copy that is
+ not “Transparent†is called “Opaqueâ€.
+ </simpara>
+ <simpara>
+ Examples of suitable formats for Transparent copies include plain ASCII
+ without markup, Texinfo input format, LaTeX input format, SGML or XML
+ using a publicly available DTD, and standard-conforming simple HTML,
+ PostScript or PDF designed for human modification. Examples of transparent
+ image formats include PNG, XCF and JPG. Opaque formats include proprietary
+ formats that can be read and edited only by proprietary word processors,
+ SGML or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF produced by
+ some word processors for output purposes only.
+ </simpara>
+ <simpara>
+ The “Title Page†means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For works in
+ formats which do not have any title page as such, “Title Pageâ€
+ means the text near the most prominent appearance of the work’s
+ title, preceding the beginning of the body of the text.
+ </simpara>
+ <simpara>
+ The “publisher†means any person or entity that distributes
+ copies of the Document to the public.
+ </simpara>
+ <simpara>
+ A section “Entitled XYZ†means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ stands
+ for a specific section name mentioned below, such as
+ “Acknowledgementsâ€, “Dedicationsâ€,
+ “Endorsementsâ€, or “Historyâ€.) To “Preserve
+ the Title†of such a section when you modify the Document means that
+ it remains a section “Entitled XYZ†according to this
+ definition.
+ </simpara>
+ <simpara>
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document. These Warranty
+ Disclaimers are considered to be included by reference in this License,
+ but only as regards disclaiming warranties: any other implication that
+ these Warranty Disclaimers may have is void and has no effect on the
+ meaning of this License.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section2" renderas="sect2">
+ 2. VERBATIM COPYING
+ </bridgehead>
+ <simpara>
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the copyright
+ notices, and the license notice saying this License applies to the
+ Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License. You may not use technical
+ measures to obstruct or control the reading or further copying of the
+ copies you make or distribute. However, you may accept compensation in
+ exchange for copies. If you distribute a large enough number of copies you
+ must also follow the conditions in section 3.
+ </simpara>
+ <simpara>
+ You may also lend copies, under the same conditions stated above, and you
+ may publicly display copies.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section3" renderas="sect2">
+ 3. COPYING IN QUANTITY
+ </bridgehead>
+ <simpara>
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document’s license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
+ back cover. Both covers must also clearly and legibly identify you as the
+ publisher of these copies. The front cover must present the full title
+ with all words of the title equally prominent and visible. You may add
+ other material on the covers in addition. Copying with changes limited to
+ the covers, as long as they preserve the title of the Document and satisfy
+ these conditions, can be treated as verbatim copying in other respects.
+ </simpara>
+ <simpara>
+ If the required texts for either cover are too voluminous to fit legibly,
+ you should put the first ones listed (as many as fit reasonably) on the
+ actual cover, and continue the rest onto adjacent pages.
+ </simpara>
+ <simpara>
+ If you publish or distribute Opaque copies of the Document numbering more
+ than 100, you must either include a machine-readable Transparent copy
+ along with each Opaque copy, or state in or with each Opaque copy a
+ computer-network location from which the general network-using public has
+ access to download using public-standard network protocols a complete
+ Transparent copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you begin
+ distribution of Opaque copies in quantity, to ensure that this Transparent
+ copy will remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+ </simpara>
+ <simpara>
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section4" renderas="sect2">
+ 4. MODIFICATIONS
+ </bridgehead>
+ <simpara>
+ You may copy and distribute a Modified Version of the Document under the
+ conditions of sections 2 and 3 above, provided that you release the
+ Modified Version under precisely this License, with the Modified Version
+ filling the role of the Document, thus licensing distribution and
+ modification of the Modified Version to whoever possesses a copy of it. In
+ addition, you must do these things in the Modified Version:
+ </simpara>
+ <orderedlist numeration="upperalpha">
+ <listitem>
+ <simpara>
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions (which
+ should, if there were any, be listed in the History section of the
+ Document). You may use the same title as a previous version if the
+ original publisher of that version gives permission.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ State on the Title page the name of the publisher of the Modified
+ Version, as the publisher.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve all the copyright notices of the Document.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Add an appropriate copyright notice for your modifications adjacent to
+ the other copyright notices.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document’s license
+ notice.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Include an unaltered copy of this License.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve the section Entitled “Historyâ€, Preserve its
+ Title, and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the Title
+ Page. If there is no section Entitled “History†in the
+ Document, create one stating the title, year, authors, and publisher
+ of the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous sentence.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise the
+ network locations given in the Document for previous versions it was
+ based on. These may be placed in the “Historyâ€
+ section. You may omit a network location for a work that was published
+ at least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ For any section Entitled “Acknowledgements†or
+ “Dedicationsâ€, Preserve the Title of the section, and
+ preserve in the section all the substance and tone of each of the
+ contributor acknowledgements and/or dedications given therein.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve all the Invariant Sections of the Document, unaltered in
+ their text and in their titles. Section numbers or the equivalent are
+ not considered part of the section titles.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Delete any section Entitled “Endorsementsâ€. Such a section
+ may not be included in the Modified Version.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Do not retitle any existing section to be Entitled
+ “Endorsements†or to conflict in title with any Invariant
+ Section.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Preserve any Warranty Disclaimers.
+ </simpara>
+ </listitem>
+ </orderedlist>
+ <simpara>
+ If the Modified Version includes new front-matter sections or appendices
+ that qualify as Secondary Sections and contain no material copied from the
+ Document, you may at your option designate some or all of these sections
+ as invariant. To do this, add their titles to the list of Invariant
+ Sections in the Modified Version’s license notice. These titles
+ must be distinct from any other section titles.
+ </simpara>
+ <simpara>
+ You may add a section Entitled “Endorsementsâ€, provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties — for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative definition of a
+ standard.
+ </simpara>
+ <simpara>
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list of
+ Cover Texts in the Modified Version. Only one passage of Front-Cover Text
+ and one of Back-Cover Text may be added by (or through arrangements made
+ by) any one entity. If the Document already includes a cover text for the
+ same cover, previously added by you or by arrangement made by the same
+ entity you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous publisher
+ that added the old one.
+ </simpara>
+ <simpara>
+ The author(s) and publisher(s) of the Document do not by this License give
+ permission to use their names for publicity for or to assert or imply
+ endorsement of any Modified Version.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section5" renderas="sect2">
+ 5. COMBINING DOCUMENTS
+ </bridgehead>
+ <simpara>
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified versions,
+ provided that you include in the combination all of the Invariant Sections
+ of all of the original documents, unmodified, and list them all as
+ Invariant Sections of your combined work in its license notice, and that
+ you preserve all their Warranty Disclaimers.
+ </simpara>
+ <simpara>
+ The combined work need only contain one copy of this License, and multiple
+ identical Invariant Sections may be replaced with a single copy. If there
+ are multiple Invariant Sections with the same name but different contents,
+ make the title of each such section unique by adding at the end of it, in
+ parentheses, the name of the original author or publisher of that section
+ if known, or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of the
+ combined work.
+ </simpara>
+ <simpara>
+ In the combination, you must combine any sections Entitled
+ “History†in the various original documents, forming one
+ section Entitled “Historyâ€; likewise combine any sections
+ Entitled “Acknowledgementsâ€, and any sections Entitled
+ “Dedicationsâ€. You must delete all sections Entitled
+ “Endorsementsâ€.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section6" renderas="sect2">
+ 6. COLLECTIONS OF DOCUMENTS
+ </bridgehead>
+ <simpara>
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ </simpara>
+ <simpara>
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all other
+ respects regarding verbatim copying of that document.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section7" renderas="sect2">
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+ </bridgehead>
+ <simpara>
+ A compilation of the Document or its derivatives with other separate and
+ independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an “aggregate†if the copyright
+ resulting from the compilation is not used to limit the legal rights of
+ the compilation’s users beyond what the individual works
+ permit. When the Document is included in an aggregate, this License does
+ not apply to the other works in the aggregate which are not themselves
+ derivative works of the Document.
+ </simpara>
+ <simpara>
+ If the Cover Text requirement of section 3 is applicable to these copies
+ of the Document, then if the Document is less than one half of the entire
+ aggregate, the Document’s Cover Texts may be placed on covers that
+ bracket the Document within the aggregate, or the electronic equivalent of
+ covers if the Document is in electronic form. Otherwise they must appear
+ on printed covers that bracket the whole aggregate.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section8" renderas="sect2">
+ 8. TRANSLATION
+ </bridgehead>
+ <simpara>
+ Translation is considered a kind of modification, so you may distribute
+ translations of the Document under the terms of section 4. Replacing
+ Invariant Sections with translations requires special permission from
+ their copyright holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these Invariant
+ Sections. You may include a translation of this License, and all the
+ license notices in the Document, and any Warranty Disclaimers, provided
+ that you also include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of this
+ License or a notice or disclaimer, the original version will prevail.
+ </simpara>
+ <simpara>
+ If a section in the Document is Entitled “Acknowledgementsâ€,
+ “Dedicationsâ€, or “Historyâ€, the requirement
+ (section 4) to Preserve its Title (section 1) will typically require
+ changing the actual title.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section9" renderas="sect2">
+ 9. TERMINATION
+ </bridgehead>
+ <simpara>
+ You may not copy, modify, sublicense, or distribute the Document except as
+ expressly provided under this License. Any attempt otherwise to copy,
+ modify, sublicense, or distribute it is void, and will automatically
+ terminate your rights under this License.
+ </simpara>
+ <simpara>
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally, unless
+ and until the copyright holder explicitly and finally terminates your
+ license, and (b) permanently, if the copyright holder fails to notify you
+ of the violation by some reasonable means prior to 60 days after the
+ cessation.
+ </simpara>
+ <simpara>
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by some
+ reasonable means, this is the first time you have received notice of
+ violation of this License (for any work) from that copyright holder, and
+ you cure the violation prior to 30 days after your receipt of the notice.
+ </simpara>
+ <simpara>
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under this
+ License. If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does not
+ give you any rights to use it.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section10" renderas="sect2">
+ 10. FUTURE REVISIONS OF THIS LICENSE
+ </bridgehead>
+ <simpara>
+ The Free Software Foundation may publish new, revised versions of the GNU
+ Free Documentation License from time to time. Such new versions will be
+ similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns. See
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/copyleft/">Copyleft</link>.
+ </simpara>
+ <simpara>
+ Each version of the License is given a distinguishing version number. If
+ the Document specifies that a particular numbered version of this License
+ “or any later version†applies to it, you have the option of
+ following the terms and conditions either of that specified version or of
+ any later version that has been published (not as a draft) by the Free
+ Software Foundation. If the Document does not specify a version number of
+ this License, you may choose any version ever published (not as a draft)
+ by the Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+ </simpara>
+ <bridgehead xml:id="fdl-1-section11" renderas="sect2">
+ 11. RELICENSING
+ </bridgehead>
+ <simpara>
+ “Massive Multiauthor Collaboration Site†(or “MMC
+ Siteâ€) means any World Wide Web server that publishes copyrightable
+ works and also provides prominent facilities for anybody to edit those
+ works. A public wiki that anybody can edit is an example of such a
+ server. A “Massive Multiauthor Collaboration†(or
+ “MMCâ€) contained in the site means any set of copyrightable
+ works thus published on the MMC site.
+ </simpara>
+ <simpara>
+ “CC-BY-SA†means the Creative Commons Attribution-Share Alike
+ 3.0 license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license published
+ by that same organization.
+ </simpara>
+ <simpara>
+ “Incorporate†means to publish or republish a Document, in
+ whole or in part, as part of another Document.
+ </simpara>
+ <simpara>
+ An MMC is “eligible for relicensing†if it is licensed under
+ this License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently incorporated in
+ whole or in part into the MMC, (1) had no cover texts or invariant
+ sections, and (2) were thus incorporated prior to November 1, 2008.
+ </simpara>
+ <simpara>
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ </simpara>
+ <bridgehead xml:id="fdl-1-addendum" renderas="sect2">
+ ADDENDUM: How to use this License for your documents
+ </bridgehead>
+ <simpara>
+ To use this License in a document you have written, include a copy of the
+ License in the document and put the following copyright and license
+ notices just after the title page:
+ </simpara>
+ <screen>Copyright © YEAR YOUR NAME
+
+Permission is granted to copy, distribute and/or modify this document under the
+terms of the GNU Free Documentation License, Version 1.3 or any later version
+published by the Free Software Foundation; with no Invariant Sections, no
+Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in
+the section entitled “GNU Free Documentation Licenseâ€.</screen>
+ <simpara>
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with… Texts.†line with this:
+ </simpara>
+ <screen>with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts
+being LIST, and with the Back-Cover Texts being LIST.</screen>
+ <simpara>
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ </simpara>
+ <simpara>
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit their
+ use in free software.
+ </simpara>
+</appendix>
diff --git a/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml b/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml
index 151a9523f07..cf012ec960b 100644
--- a/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml
+++ b/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml
@@ -1,15 +1,13 @@
-<?xml version='1.0' encoding='ISO-8859-1'?>
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<appendix id="appendix.gpl-2.0">
- <appendixinfo>
- <title>GNU General Public License</title>
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gpl-2.0">
+ <info><title>GNU General Public License</title>
+
<pubdate>Version 2, June 1991</pubdate>
<copyright>
<year>1989, 1991</year>
<holder>Free Software Foundation, Inc.</holder>
</copyright>
- <legalnotice id="gpl-legalnotice">
+ <legalnotice xml:id="gpl-legalnotice">
<para>
<address>Free Software Foundation, Inc.
<street>51 Franklin Street, Fifth Floor</street>,
@@ -20,16 +18,16 @@
<para>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</para>
</legalnotice>
<releaseinfo>Version 2, June 1991</releaseinfo>
- </appendixinfo>
- <title>GNU General Public License</title>
- <section id="gpl-1">
- <title>Preamble</title>
+ </info>
+
+ <section xml:id="gpl-1"><info><title>Preamble</title></info>
+
<para>The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change
free software - to make sure the software is free for all its users.
This General Public License applies to most of the Free Software
- Foundation&apos;s software and to any other program whose authors commit
+ Foundation's software and to any other program whose authors commit
to using it. (Some other Free Software Foundation software is covered
by the GNU Library General Public License instead.) You can apply it
to your programs, too.</para>
@@ -52,7 +50,7 @@
must show them these terms so they know their rights.</para>
<para>We protect your rights with two steps:
- <orderedlist>
+ <orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>copyright the software, and</para>
</listitem>
@@ -63,26 +61,26 @@
</orderedlist>
</para>
- <para>Also, for each author&apos;s protection and ours, we want to make certain that
+ <para>Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If
the software is modified by someone else and passed on, we want its
recipients to know that what they have is not the original, so that any
- problems introduced by others will not reflect on the original authors&apos;
+ problems introduced by others will not reflect on the original authors'
reputations.</para>
<para>Finally, any free program is threatened constantly by software patents.
We wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program
proprietary. To prevent this, we have made it clear that any patent must be
- licensed for everyone&apos;s free use or not licensed at all.</para>
+ licensed for everyone's free use or not licensed at all.</para>
<para>The precise terms and conditions for copying, distribution and modification
follow.</para>
</section>
- <section id="gpl-2">
- <title>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</title>
- <section id="gpl-2-0">
- <title>Section 0</title>
+ <section xml:id="gpl-2"><info><title>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</title></info>
+
+ <section xml:id="gpl-2-0"><info><title>Section 0</title></info>
+
<para>This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms
of this General Public License. The <quote>Program</quote>, below, refers to any such
@@ -100,9 +98,9 @@
constitute a work based on the Program (independent of having been made by running
the Program). Whether that is true depends on what the Program does.</para>
</section>
- <section id="gpl-2-1">
- <title>Section 1</title>
- <para>You may copy and distribute verbatim copies of the Program&apos;s source code as you
+ <section xml:id="gpl-2-1"><info><title>Section 1</title></info>
+
+ <para>You may copy and distribute verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and appropriately
publish on each copy an appropriate copyright notice and disclaimer of warranty;
keep intact all the notices that refer to this License and to the absence of any
@@ -112,14 +110,14 @@
<para>You may charge a fee for the physical act of transferring a copy, and you may at
your option offer warranty protection in exchange for a fee.</para>
</section>
- <section id="gpl-2-2">
- <title>Section 2</title>
+ <section xml:id="gpl-2-2"><info><title>Section 2</title></info>
+
<para>You may modify your copy or copies of the Program or any portion of it, thus
forming a work based on the Program, and copy and distribute such modifications
or work under the terms of
<link linkend="gpl-2-1">Section 1</link> above, provided
that you also meet all of these conditions:
- <orderedlist numeration="loweralpha">
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
<listitem>
<para>You must cause the modified files to carry prominent notices stating that
you changed the files and the date of any change.</para>
@@ -161,13 +159,13 @@
(or with a work based on the Program) on a volume of a storage or distribution medium
does not bring the other work under the scope of this License.</para>
</section>
- <section id="gpl-2-3">
- <title>Section 3</title>
+ <section xml:id="gpl-2-3"><info><title>Section 3</title></info>
+
<para>You may copy and distribute the Program (or a work based on it, under
<link linkend="gpl-2-2">Section 2</link> in object code or executable form under the terms of
<link linkend="gpl-2-1">Sections 1</link> and
<link linkend="gpl-2-2">2</link> above provided that you also do one of the following:
- <orderedlist numeration="loweralpha">
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
<listitem>
<para>Accompany it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a medium
@@ -202,16 +200,16 @@
counts as distribution of the source code, even though third parties are not compelled to
copy the source along with the object code.</para>
</section>
- <section id="gpl-2-4">
- <title>Section 4</title>
+ <section xml:id="gpl-2-4"><info><title>Section 4</title></info>
+
<para>You may not copy, modify, sublicense, or distribute the Program except as expressly provided
under this License. Any attempt otherwise to copy, modify, sublicense or distribute the
Program is void, and will automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this License will not have their
licenses terminated so long as such parties remain in full compliance.</para>
</section>
- <section id="gpl-2-5">
- <title>Section 5</title>
+ <section xml:id="gpl-2-5"><info><title>Section 5</title></info>
+
<para>You are not required to accept this License, since you have not signed it. However, nothing
else grants you permission to modify or distribute the Program or its derivative works.
These actions are prohibited by law if you do not accept this License. Therefore, by modifying
@@ -219,16 +217,16 @@
of this License to do so, and all its terms and conditions for copying, distributing or
modifying the Program or works based on it.</para>
</section>
- <section id="gpl-2-6">
- <title>Section 6</title>
+ <section xml:id="gpl-2-6"><info><title>Section 6</title></info>
+
<para>Each time you redistribute the Program (or any work based on the Program), the recipient
automatically receives a license from the original licensor to copy, distribute or modify
the Program subject to these terms and conditions. You may not impose any further restrictions
- on the recipients&apos; exercise of the rights granted herein. You are not responsible for enforcing
+ on the recipients' exercise of the rights granted herein. You are not responsible for enforcing
compliance by third parties to this License.</para>
</section>
- <section id="gpl-2-7">
- <title>Section 7</title>
+ <section xml:id="gpl-2-7"><info><title>Section 7</title></info>
+
<para>If, as a consequence of a court judgment or allegation of patent infringement or for any other
reason (not limited to patent issues), conditions are imposed on you (whether by court order,
agreement or otherwise) that contradict the conditions of this License, they do not excuse you
@@ -254,16 +252,16 @@
<para>This section is intended to make thoroughly clear what is believed to be a consequence of the
rest of this License.</para>
</section>
- <section id="gpl-2-8">
- <title>Section 8</title>
+ <section xml:id="gpl-2-8"><info><title>Section 8</title></info>
+
<para>If the distribution and/or use of the Program is restricted in certain countries either by patents
or by copyrighted interfaces, the original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In such case, this License
incorporates the limitation as if written in the body of this License.</para>
</section>
- <section id="gpl-2-9">
- <title>Section 9</title>
+ <section xml:id="gpl-2-9"><info><title>Section 9</title></info>
+
<para>The Free Software Foundation may publish revised and/or new versions of the General Public License
from time to time. Such new versions will be similar in spirit to the present version, but may differ
in detail to address new problems or concerns.</para>
@@ -274,16 +272,16 @@
Foundation. If the Program does not specify a version number of this License, you may choose any
version ever published by the Free Software Foundation.</para>
</section>
- <section id="gpl-2-10">
- <title>Section 10</title>
+ <section xml:id="gpl-2-10"><info><title>Section 10</title></info>
+
<para>If you wish to incorporate parts of the Program into other free programs whose distribution
conditions are different, write to the author to ask for permission. For software which is copyrighted
by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions
for this. Our decision will be guided by the two goals of preserving the free status of all
derivatives of our free software and of promoting the sharing and reuse of software generally.</para>
</section>
- <section id="gpl-2-11">
- <title>NO WARRANTY Section 11</title>
+ <section xml:id="gpl-2-11"><info><title>NO WARRANTY Section 11</title></info>
+
<para>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT
PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM <quote>AS IS</quote> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
@@ -291,8 +289,8 @@
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
</section>
- <section id="gpl-2-12">
- <title>Section 12</title>
+ <section xml:id="gpl-2-12"><info><title>Section 12</title></info>
+
<para>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR
ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
@@ -304,8 +302,8 @@
<para>END OF TERMS AND CONDITIONS</para>
</section>
</section>
- <section id="gpl-3">
- <title>How to Apply These Terms to Your New Programs</title>
+ <section xml:id="gpl-3"><info><title>How to Apply These Terms to Your New Programs</title></info>
+
<para>If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.</para>
@@ -315,7 +313,7 @@
convey the exclusion of warranty; and each file should have at least
the <quote>copyright</quote> line and a pointer to where the full notice is found.</para>
- <para>&lt;one line to give the program&apos;s name and a brief idea of what it does.&gt;
+ <para>&lt;one line to give the program's name and a brief idea of what it does.&gt;
Copyright (C) &lt;year&gt; &lt;name of author&gt;</para>
<para>This program is free software; you can redistribute it and/or modify
diff --git a/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml b/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
index 90fa18be431..d5a5eae203b 100644
--- a/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
+++ b/libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
@@ -1,23 +1,21 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<appendix id="appendix.gpl-3.0">
- <?dbhtml filename="appendix_gpl.html"?>
- <title>
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.gpl-3.0"><info><title>
<acronym>GNU</acronym> General Public License version 3
- </title>
+ </title></info>
+ <?dbhtml filename="appendix_gpl.html"?>
+
<para>
Version 3, 29 June 2007
</para>
<para>
- Copyright &copy; 2007 Free Software Foundation, Inc.
- <ulink url="http://www.fsf.org/">http://www.fsf.org/</ulink>
+ Copyright © 2007 Free Software Foundation, Inc.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/">http://www.fsf.org/</link>
</para>
<para>
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
</para>
- <bridgehead id="gpl-3-preamble" renderas="sect1">
+ <bridgehead xml:id="gpl-3-preamble" renderas="sect1">
Preamble
</bridgehead>
<para>
@@ -28,7 +26,7 @@
The licenses for most software and other practical works are designed to
take away your freedom to share and change the works. By contrast, the
<acronym>GNU</acronym> General Public License is intended to guarantee your
- freedom to share and change all versions of a program&mdash;to make sure it
+ freedom to share and change all versions of a program—to make sure it
remains free software for all its users. We, the Free Software Foundation,
use the <acronym>GNU</acronym> General Public License for most of our
software; it applies also to any other work released this way by its
@@ -61,9 +59,9 @@
distribute and/or modify it.
</para>
<para>
- For the developers&rsquo; and authors&rsquo; protection, the
+ For the developers’ and authors’ protection, the
<acronym>GPL</acronym> clearly explains that there is no warranty for this
- free software. For both users&rsquo; and authors&rsquo; sake, the
+ free software. For both users’ and authors’ sake, the
<acronym>GPL</acronym> requires that modified versions be marked as changed,
so that their problems will not be attributed erroneously to authors of
previous versions.
@@ -71,7 +69,7 @@
<para>
Some devices are designed to deny users access to install or run modified
versions of the software inside them, although the manufacturer can do so.
- This is fundamentally incompatible with the aim of protecting users&rsquo;
+ This is fundamentally incompatible with the aim of protecting users’
freedom to change the software. The systematic pattern of such abuse occurs
in the area of products for individuals to use, which is precisely where it
is most unacceptable. Therefore, we have designed this version of the
@@ -95,36 +93,36 @@
<bridgehead>
TERMS AND CONDITIONS
</bridgehead>
- <bridgehead id="gpl-3-definitions" renderas="sect1">
+ <bridgehead xml:id="gpl-3-definitions" renderas="sect1">
0. Definitions.
</bridgehead>
<para>
- &ldquo;This License&rdquo; refers to version 3 of the <acronym>GNU</acronym>
+ “This License†refers to version 3 of the <acronym>GNU</acronym>
General Public License.
</para>
<para>
- &ldquo;Copyright&rdquo; also means copyright-like laws that apply to other
+ “Copyright†also means copyright-like laws that apply to other
kinds of works, such as semiconductor masks.
</para>
<para>
- &ldquo;The Program&rdquo; refers to any copyrightable work licensed under
- this License. Each licensee is addressed as &ldquo;you&rdquo;.
- &ldquo;Licensees&rdquo; and &ldquo;recipients&rdquo; may be individuals or
+ “The Program†refers to any copyrightable work licensed under
+ this License. Each licensee is addressed as “youâ€.
+ “Licensees†and “recipients†may be individuals or
organizations.
</para>
<para>
- To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of
+ To “modify†a work means to copy from or adapt all or part of
the work in a fashion requiring copyright permission, other than the making
- of an exact copy. The resulting work is called a &ldquo;modified
- version&rdquo; of the earlier work or a work &ldquo;based on&rdquo; the
+ of an exact copy. The resulting work is called a “modified
+ version†of the earlier work or a work “based on†the
earlier work.
</para>
<para>
- A &ldquo;covered work&rdquo; means either the unmodified Program or a work
+ A “covered work†means either the unmodified Program or a work
based on the Program.
</para>
<para>
- To &ldquo;propagate&rdquo; a work means to do anything with it that, without
+ To “propagate†a work means to do anything with it that, without
permission, would make you directly or secondarily liable for infringement
under applicable copyright law, except executing it on a computer or
modifying a private copy. Propagation includes copying, distribution (with
@@ -132,13 +130,13 @@
countries other activities as well.
</para>
<para>
- To &ldquo;convey&rdquo; a work means any kind of propagation that enables
+ To “convey†a work means any kind of propagation that enables
other parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not conveying.
</para>
<para>
- An interactive user interface displays &ldquo;Appropriate Legal
- Notices&rdquo; to the extent that it includes a convenient and prominently
+ An interactive user interface displays “Appropriate Legal
+ Notices†to the extent that it includes a convenient and prominently
visible feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the extent
that warranties are provided), that licensees may convey the work under this
@@ -146,37 +144,37 @@
a list of user commands or options, such as a menu, a prominent item in the
list meets this criterion.
</para>
- <bridgehead id="SourceCode" renderas="sect1">
+ <bridgehead xml:id="SourceCode" renderas="sect1">
1. Source Code.
</bridgehead>
<para>
- The &ldquo;source code&rdquo; for a work means the preferred form of the
- work for making modifications to it. &ldquo;Object code&rdquo; means any
+ The “source code†for a work means the preferred form of the
+ work for making modifications to it. “Object code†means any
non-source form of a work.
</para>
<para>
- A &ldquo;Standard Interface&rdquo; means an interface that either is an
+ A “Standard Interface†means an interface that either is an
official standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that is
widely used among developers working in that language.
</para>
<para>
- The &ldquo;System Libraries&rdquo; of an executable work include anything,
+ The “System Libraries†of an executable work include anything,
other than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major Component,
and (b) serves only to enable use of the work with that Major Component, or
to implement a Standard Interface for which an implementation is available
- to the public in source code form. A &ldquo;Major Component&rdquo;, in this
+ to the public in source code form. A “Major Componentâ€, in this
context, means a major essential component (kernel, window system, and so
on) of the specific operating system (if any) on which the executable work
runs, or a compiler used to produce the work, or an object code interpreter
used to run it.
</para>
<para>
- The &ldquo;Corresponding Source&rdquo; for a work in object code form means
+ The “Corresponding Source†for a work in object code form means
all the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
- control those activities. However, it does not include the work&rsquo;s
+ control those activities. However, it does not include the work’s
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but which
are not part of the work. For example, Corresponding Source includes
@@ -193,7 +191,7 @@
<para>
The Corresponding Source for a work in source code form is that same work.
</para>
- <bridgehead id="BasicPermissions" renderas="sect1">
+ <bridgehead xml:id="BasicPermissions" renderas="sect1">
2. Basic Permissions.
</bridgehead>
<para>
@@ -222,8 +220,8 @@
conditions stated below. Sublicensing is not allowed; section 10 makes it
unnecessary.
</para>
- <bridgehead id="Protecting" renderas="sect1">
- 3. Protecting Users&rsquo; Legal Rights From Anti-Circumvention Law.
+ <bridgehead xml:id="Protecting" renderas="sect1">
+ 3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
</bridgehead>
<para>
No covered work shall be deemed part of an effective technological measure
@@ -236,15 +234,15 @@
circumvention of technological measures to the extent such circumvention is
effected by exercising rights under this License with respect to the covered
work, and you disclaim any intention to limit operation or modification of
- the work as a means of enforcing, against the work&rsquo;s users, your or
- third parties&rsquo; legal rights to forbid circumvention of technological
+ the work as a means of enforcing, against the work’s users, your or
+ third parties’ legal rights to forbid circumvention of technological
measures.
</para>
- <bridgehead id="ConveyingVerbatim" renderas="sect1">
+ <bridgehead xml:id="ConveyingVerbatim" renderas="sect1">
4. Conveying Verbatim Copies.
</bridgehead>
<para>
- You may convey verbatim copies of the Program&rsquo;s source code as you
+ You may convey verbatim copies of the Program’s source code as you
receive it, in any medium, provided that you conspicuously and appropriately
publish on each copy an appropriate copyright notice; keep intact all
notices stating that this License and any non-permissive terms added in
@@ -256,7 +254,7 @@
You may charge any price or no price for each copy that you convey, and you
may offer support or warranty protection for a fee.
</para>
- <bridgehead id="ConveyingModified" renderas="sect1">
+ <bridgehead xml:id="ConveyingModified" renderas="sect1">
5. Conveying Modified Source Versions.
</bridgehead>
<para>
@@ -264,7 +262,7 @@
it from the Program, in the form of source code under the terms of section
4, provided that you also meet all of these conditions:
</para>
- <orderedlist numeration="loweralpha">
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
<listitem>
<para>
The work must carry prominent notices stating that you modified it, and
@@ -275,8 +273,8 @@
<para>
The work must carry prominent notices stating that it is released under
this License and any conditions added under section 7. This requirement
- modifies the requirement in section 4 to &ldquo;keep intact all
- notices&rdquo;.
+ modifies the requirement in section 4 to “keep intact all
+ noticesâ€.
</para>
</listitem>
<listitem>
@@ -303,13 +301,13 @@
A compilation of a covered work with other separate and independent works,
which are not by their nature extensions of the covered work, and which are
not combined with it such as to form a larger program, in or on a volume of
- a storage or distribution medium, is called an &ldquo;aggregate&rdquo; if
+ a storage or distribution medium, is called an “aggregate†if
the compilation and its resulting copyright are not used to limit the access
- or legal rights of the compilation&rsquo;s users beyond what the individual works
+ or legal rights of the compilation’s users beyond what the individual works
permit. Inclusion of a covered work in an aggregate does not cause
this License to apply to the other parts of the aggregate.
</para>
- <bridgehead id="ConveyingNonSource" renderas="sect1">
+ <bridgehead xml:id="ConveyingNonSource" renderas="sect1">
6. Conveying Non-Source Forms.
</bridgehead>
<para>
@@ -317,7 +315,7 @@
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these ways:
</para>
- <orderedlist numeration="loweralpha">
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Convey the object code in, or embodied in, a physical product (including
@@ -379,13 +377,13 @@
conveying the object code work.
</para>
<para>
- A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;,
+ A “User Product†is either (1) a “consumer productâ€,
which means any tangible personal property which is normally used for
personal, family, or household purposes, or (2) anything designed or sold
for incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of coverage.
- For a particular product received by a particular user, &ldquo;normally
- used&rdquo; refers to a typical or common use of that class of product,
+ For a particular product received by a particular user, “normally
+ used†refers to a typical or common use of that class of product,
regardless of the status of the particular user or of the way in which the
particular user actually uses, or expects or is expected to use, the
product. A product is a consumer product regardless of whether the product
@@ -393,7 +391,7 @@
uses represent the only significant mode of use of the product.
</para>
<para>
- &ldquo;Installation Information&rdquo; for a User Product means any methods,
+ “Installation Information†for a User Product means any methods,
procedures, authorization keys, or other information required to install and
execute modified versions of a covered work in that User Product from a
modified version of its Corresponding Source. The information must suffice
@@ -429,11 +427,11 @@
and must require no special password or key for unpacking, reading or
copying.
</para>
- <bridgehead id="AdditionalTerms" renderas="sect1">
+ <bridgehead xml:id="AdditionalTerms" renderas="sect1">
7. Additional Terms.
</bridgehead>
<para>
- &ldquo;Additional permissions&rdquo; are terms that supplement the terms of
+ “Additional permissions†are terms that supplement the terms of
this License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall be
treated as though they were included in this License, to the extent that
@@ -455,7 +453,7 @@
to a covered work, you may (if authorized by the copyright holders of that
material) supplement the terms of this License with terms:
</para>
- <orderedlist numeration="loweralpha">
+ <orderedlist numeration="loweralpha" inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Disclaiming warranty or limiting liability differently from the terms
@@ -499,8 +497,8 @@
</listitem>
</orderedlist>
<para>
- All other non-permissive additional terms are considered &ldquo;further
- restrictions&rdquo; within the meaning of section 10. If the Program as
+ All other non-permissive additional terms are considered “further
+ restrictions†within the meaning of section 10. If the Program as
you received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further restriction,
you may remove that term. If a license document contains a further
@@ -520,7 +518,7 @@
of a separately written license, or stated as exceptions; the above
requirements apply either way.
</para>
- <bridgehead id="gpl-3-termination" renderas="sect1">
+ <bridgehead xml:id="gpl-3-termination" renderas="sect1">
8. Termination.
</bridgehead>
<para>
@@ -551,7 +549,7 @@
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
</para>
- <bridgehead id="AcceptanceNotRequired" renderas="sect1">
+ <bridgehead xml:id="AcceptanceNotRequired" renderas="sect1">
9. Acceptance Not Required for Having Copies.
</bridgehead>
<para>
@@ -564,7 +562,7 @@
Therefore, by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
</para>
- <bridgehead id="AutomaticDownstream" renderas="sect1">
+ <bridgehead xml:id="AutomaticDownstream" renderas="sect1">
10. Automatic Licensing of Downstream Recipients.
</bridgehead>
<para>
@@ -574,12 +572,12 @@
compliance by third parties with this License.
</para>
<para>
- An &ldquo;entity transaction&rdquo; is a transaction transferring control
+ An “entity transaction†is a transaction transferring control
of an organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered work
results from an entity transaction, each party to that transaction who
receives a copy of the work also receives whatever licenses to the work the
- party&rsquo;s predecessor in interest had or could give under the previous
+ party’s predecessor in interest had or could give under the previous
paragraph, plus a right to possession of the Corresponding Source of the
work from the predecessor in interest, if the predecessor has it or can get
it with reasonable efforts.
@@ -593,36 +591,36 @@
by making, using, selling, offering for sale, or importing the Program or
any portion of it.
</para>
- <bridgehead id="Patents" renderas="sect1">
+ <bridgehead xml:id="Patents" renderas="sect1">
11. Patents.
</bridgehead>
<para>
- A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under
+ A “contributor†is a copyright holder who authorizes use under
this License of the Program or a work on which the Program is based. The
- work thus licensed is called the contributor&rsquo;s &ldquo;contributor
- version&rdquo;.
+ work thus licensed is called the contributor’s “contributor
+ versionâ€.
</para>
<para>
- A contributor&rsquo;s &ldquo;essential patent claims&rdquo; are all patent
+ A contributor’s “essential patent claims†are all patent
claims owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted by
this License, of making, using, or selling its contributor version, but do
not include claims that would be infringed only as a consequence of further
modification of the contributor version. For purposes of this definition,
- &ldquo;control&rdquo; includes the right to grant patent sublicenses in a
+ “control†includes the right to grant patent sublicenses in a
manner consistent with the requirements of this License.
</para>
<para>
Each contributor grants you a non-exclusive, worldwide, royalty-free patent
- license under the contributor&rsquo;s essential patent claims, to make, use,
+ license under the contributor’s essential patent claims, to make, use,
sell, offer for sale, import and otherwise run, modify and propagate the
contents of its contributor version.
</para>
<para>
- In the following three paragraphs, a &ldquo;patent license&rdquo; is any
+ In the following three paragraphs, a “patent license†is any
express agreement or commitment, however denominated, not to enforce a
patent (such as an express permission to practice a patent or covenant not
- to sue for patent infringement). To &ldquo;grant&rdquo; such a patent
+ to sue for patent infringement). To “grant†such a patent
license to a party means to make such an agreement or commitment not to
enforce a patent against the party.
</para>
@@ -634,10 +632,10 @@
cause the Corresponding Source to be so available, or (2) arrange to deprive
yourself of the benefit of the patent license for this particular work, or
(3) arrange, in a manner consistent with the requirements of this License,
- to extend the patent license to downstream recipients. &ldquo;Knowingly
- relying&rdquo; means you have actual knowledge that, but for the patent
+ to extend the patent license to downstream recipients. “Knowingly
+ relying†means you have actual knowledge that, but for the patent
license, your conveying the covered work in a country, or your
- recipient&rsquo;s use of the covered work in a country, would infringe one
+ recipient’s use of the covered work in a country, would infringe one
or more identifiable patents in that country that you have reason to believe
are valid.
</para>
@@ -650,7 +648,7 @@
all recipients of the covered work and works based on it.
</para>
<para>
- A patent license is &ldquo;discriminatory&rdquo; if it does not include
+ A patent license is “discriminatory†if it does not include
within the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered work
@@ -669,8 +667,8 @@
implied license or other defenses to infringement that may otherwise be
available to you under applicable patent law.
</para>
- <bridgehead id="NoSurrender" renderas="sect1">
- 12. No Surrender of Others&rsquo; Freedom.
+ <bridgehead xml:id="NoSurrender" renderas="sect1">
+ 12. No Surrender of Others’ Freedom.
</bridgehead>
<para>
If conditions are imposed on you (whether by court order, agreement or
@@ -683,7 +681,7 @@
Program, the only way you could satisfy both those terms and this License
would be to refrain entirely from conveying the Program.
</para>
- <bridgehead id="UsedWithAGPL" renderas="sect1">
+ <bridgehead xml:id="UsedWithAGPL" renderas="sect1">
13. Use with the <acronym>GNU</acronym> Affero General Public License.
</bridgehead>
<para>
@@ -696,7 +694,7 @@
section 13, concerning interaction through a network will apply to the
combination as such.
</para>
- <bridgehead id="RevisedVersions" renderas="sect1">
+ <bridgehead xml:id="RevisedVersions" renderas="sect1">
14. Revised Versions of this License.
</bridgehead>
<para>
@@ -708,7 +706,7 @@
<para>
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the <acronym>GNU</acronym>
- General Public License &ldquo;or any later version&rdquo; applies to it, you
+ General Public License “or any later version†applies to it, you
have the option of following the terms and conditions either of that
numbered version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
@@ -718,7 +716,7 @@
<para>
If the Program specifies that a proxy can decide which future versions of
the <acronym>GNU</acronym> General Public License can be used, that
- proxy&rsquo;s public statement of acceptance of a version permanently
+ proxy’s public statement of acceptance of a version permanently
authorizes you to choose that version for the Program.
</para>
<para>
@@ -726,20 +724,20 @@
However, no additional obligations are imposed on any author or copyright
holder as a result of your choosing to follow a later version.
</para>
- <bridgehead id="WarrantyDisclaimer" renderas="sect1">
+ <bridgehead xml:id="WarrantyDisclaimer" renderas="sect1">
15. Disclaimer of Warranty.
</bridgehead>
<para>
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
- OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF
+ OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
</para>
- <bridgehead id="LiabilityLimitation" renderas="sect1">
+ <bridgehead xml:id="LiabilityLimitation" renderas="sect1">
16. Limitation of Liability.
</bridgehead>
<para>
@@ -753,7 +751,7 @@
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
</para>
- <bridgehead id="InterpretationSecs1516" renderas="sect1">
+ <bridgehead xml:id="InterpretationSecs1516" renderas="sect1">
17. Interpretation of Sections 15 and 16.
</bridgehead>
<para>
@@ -767,7 +765,7 @@
<bridgehead>
END OF TERMS AND CONDITIONS
</bridgehead>
- <bridgehead id="HowToApply" renderas="sect1">
+ <bridgehead xml:id="HowToApply" renderas="sect1">
How to Apply These Terms to Your New Programs
</bridgehead>
<para>
@@ -779,11 +777,11 @@
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state the
exclusion of warranty; and each file should have at least the
- &ldquo;copyright&rdquo; line and a pointer to where the full notice is
+ “copyright†line and a pointer to where the full notice is
found.
</para>
<screen>
-<replaceable>one line to give the program&rsquo;s name and a brief idea of what it does.</replaceable>
+<replaceable>one line to give the program’s name and a brief idea of what it does.</replaceable>
Copyright (C) <replaceable>year</replaceable> <replaceable>name of author</replaceable>
This program is free software: you can redistribute it and/or modify
@@ -797,7 +795,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
<acronym>GNU</acronym> General Public License for more details.
You should have received a copy of the <acronym>GNU</acronym> General Public License
-along with this program. If not, see <ulink url="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</ulink>.
+along with this program. If not, see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</link>.
</screen>
<para>
Also add information on how to contact you by electronic and paper mail.
@@ -808,22 +806,22 @@ along with this program. If not, see <ulink url="http://www.gnu.org/licenses/">
</para>
<screen>
<replaceable>program</replaceable> Copyright (C) <replaceable>year</replaceable> <replaceable>name of author</replaceable>
-This program comes with ABSOLUTELY NO WARRANTY; for details type &lsquo;<literal>show w</literal>&rsquo;.
+This program comes with ABSOLUTELY NO WARRANTY; for details type ‘<literal>show w</literal>’.
This is free software, and you are welcome to redistribute it
-under certain conditions; type &lsquo;<literal>show c</literal>&rsquo; for details.
+under certain conditions; type ‘<literal>show c</literal>’ for details.
</screen>
<para>
- The hypothetical commands &lsquo;<literal>show w</literal>&rsquo; and
- &lsquo;<literal>show c</literal>&rsquo; should show the appropriate parts of
- the General Public License. Of course, your program&rsquo;s commands might be
- different; for a GUI interface, you would use an &ldquo;about box&rdquo;.
+ The hypothetical commands ‘<literal>show w</literal>’ and
+ ‘<literal>show c</literal>’ should show the appropriate parts of
+ the General Public License. Of course, your program’s commands might be
+ different; for a GUI interface, you would use an “about boxâ€.
</para>
<para>
You should also get your employer (if you work as a programmer) or school,
- if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if
+ if any, to sign a “copyright disclaimer†for the program, if
necessary. For more information on this, and how to apply and follow the
<acronym>GNU</acronym> <acronym>GPL</acronym>, see
- <ulink url="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</link>.
</para>
<para>
The <acronym>GNU</acronym> General Public License does not permit
@@ -831,7 +829,6 @@ under certain conditions; type &lsquo;<literal>show c</literal>&rsquo; for detai
subroutine library, you may consider it more useful to permit linking
proprietary applications with the library. If this is what you want to do,
use the <acronym>GNU</acronym> Lesser General Public License instead of this
- License. But first, please read <ulink
- url="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</ulink>.
+ License. But first, please read <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</link>.
</para>
</appendix>
diff --git a/libstdc++-v3/doc/xml/manual/abi.xml b/libstdc++-v3/doc/xml/manual/abi.xml
index cc5370e26ac..268f0a69199 100644
--- a/libstdc++-v3/doc/xml/manual/abi.xml
+++ b/libstdc++-v3/doc/xml/manual/abi.xml
@@ -1,7 +1,8 @@
-<sect1 id="appendix.porting.abi" xreflabel="abi">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.abi" xreflabel="abi">
<?dbhtml filename="abi.html"?>
-<sect1info>
+<info><title>ABI Policy and Guidelines</title>
<keywordset>
<keyword>
C++
@@ -22,20 +23,20 @@
compatibility
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>ABI Policy and Guidelines</title>
<para>
</para>
-<sect2 id="abi.cxx_interface">
-<title>The C++ Interface</title>
+<section xml:id="abi.cxx_interface"><info><title>The C++ Interface</title></info>
+
<para>
- C++ applications often dependent on specific language support
+ C++ applications often depend on specific language support
routines, say for throwing exceptions, or catching exceptions, and
- perhaps also dependent on features in the C++ Standard Library.
+ perhaps also depend on features in the C++ Standard Library.
</para>
<para>
@@ -53,9 +54,8 @@
virtual functions, etc. These details are defined as the compiler
Application Binary Interface, or ABI. The GNU C++ compiler uses an
industry-standard C++ ABI starting with version 3. Details can be
- found in the <ulink
- url="http://www.codesourcery.com/cxx-abi/abi.html"> ABI
- specification</ulink>.
+ found in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/cxx-abi/abi.html"> ABI
+ specification</link>.
</para>
<para>
@@ -65,8 +65,8 @@
g++ command line options may change the ABI as a side-effect of
use. Such flags include <code>-fpack-struct</code> and
<code>-fno-exceptions</code>, but include others: see the complete
- list in the GCC manual under the heading <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
- for Code Generation Conventions</ulink>.
+ list in the GCC manual under the heading <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
+ for Code Generation Conventions</link>.
</para>
<para>
@@ -105,24 +105,24 @@ given compiler ABI. In a nutshell:
implements the C++ ABI in question.
</para>
-</sect2>
+</section>
+
+<section xml:id="abi.versioning"><info><title>Versioning</title></info>
-<sect2 id="abi.versioning">
-<title>Versioning</title>
<para> The C++ interface has evolved throughout the history of the GNU
C++ toolchain. With each release, various details have been changed so
as to give distinct versions to the C++ interface.
</para>
- <sect3 id="abi.versioning.goals">
- <title>Goals</title>
+ <section xml:id="abi.versioning.goals"><info><title>Goals</title></info>
+
<para>Extending existing, stable ABIs. Versioning gives subsequent
releases of library binaries the ability to add new symbols and add
functionality, all the while retaining compatibility with the previous
releases in the series. Thus, program binaries linked with the initial
-release of a library binary will still link correctly if the library
+release of a library binary will still run correctly if the library
binary is replaced by carefully-managed subsequent library
binaries. This is called forward compatibility.
</para>
@@ -136,10 +136,10 @@ compatible.
<para>Allows multiple, incompatible ABIs to coexist at the same time.
</para>
- </sect3>
+ </section>
- <sect3 id="abi.versioning.history">
- <title>History</title>
+ <section xml:id="abi.versioning.history"><info><title>History</title></info>
+
<para>
How can this complexity be managed? What does C++ versioning mean?
@@ -179,11 +179,26 @@ compatible.
<listitem><para>gcc-3.3.1: libgcc_s.so.1</para></listitem>
<listitem><para>gcc-3.3.2: libgcc_s.so.1</para></listitem>
<listitem><para>gcc-3.3.3: libgcc_s.so.1</para></listitem>
- <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: on m68k-linux and
- hppa-linux this is either libgcc_s.so.1 (when configuring
- <code>--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all
- others, this is libgcc_s.so.1. </para>
- </listitem>
+ <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1</para></listitem>
+ </itemizedlist>
+
+ <para>For m68k-linux the versions differ as follows: </para>
+
+ <itemizedlist>
+ <listitem><para>gcc-3.4.x, gcc-4.[0-5].x: libgcc_s.so.1
+ when configuring <code>--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </para> </listitem>
+ </itemizedlist>
+
+ <para>For hppa-linux the versions differ as follows: </para>
+
+ <itemizedlist>
+ <listitem><para>gcc-3.4.x, gcc-4.[0-1].x: either libgcc_s.so.1
+ when configuring <code>--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </para> </listitem>
+ <listitem><para>gcc-4.[2-5].x: either libgcc_s.so.3 when configuring
+ <code>--with-sjlj-exceptions</code>) or libgcc_s.so.4
+ </para> </listitem>
</itemizedlist>
</listitem>
@@ -217,7 +232,7 @@ compatible.
<listitem>
<para>
Release versioning on the libstdc++.so binary, implemented in
- the same was as the libgcc_s.so binary above. Listed is the
+ the same way as the libgcc_s.so binary above. Listed is the
filename: <constant>DT_SONAME</constant> can be deduced from
the filename by removing the last two period-delimited numbers. For
example, filename <filename>libstdc++.so.5.0.4</filename>
@@ -283,18 +298,17 @@ compatible.
</para>
<para>
Note 3: This release (but not previous or subsequent) has one
- known incompatibility, see <ulink
- url="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678">33678</ulink>
+ known incompatibility, see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678">33678</link>
in the GCC bug database.
</para>
</listitem>
<listitem><para>Symbol versioning on the libstdc++.so binary.</para>
- <para>mapfile: libstdc++/config/linker-map.gnu</para>
+ <para>mapfile: libstdc++-v3/config/abi/pre/gnu.ver</para>
<para>It is versioned with the following labels and version
definitions, where the version definition is the maximum for a
- particular release. Note, only symbol which are newly introduced
+ particular release. Note, only symbols which are newly introduced
will use the maximum version definition. Thus, for release series
with the same label, but incremented version definitions, the later
release has both versions. (An example of this would be the
@@ -364,7 +378,7 @@ compatible.
<listitem><para>gcc-3.4.x, gcc-4.[0-5].x: 1000 + n (when n&gt;1) </para></listitem>
<listitem><para>gcc-3.4.x, gcc-4.[0-5].x: 999999 (when n=0)</para></listitem>
</itemizedlist>
- <para></para>
+ <para/>
</listitem>
<listitem>
@@ -381,7 +395,7 @@ compatible.
<listitem><para>gcc-3.3.x: <code>-fabi-version=1</code></para></listitem>
<listitem><para>gcc-3.4.x, gcc-4.[0-5].x: <code>-fabi-version=2</code> <emphasis>(Incompatible with previous)</emphasis></para></listitem>
</itemizedlist>
- <para></para>
+ <para/>
</listitem>
<listitem>
@@ -395,7 +409,7 @@ compatible.
<para>
This macro is defined in the file "c++config" in the
- "libstdc++/include/bits" directory. (Up to gcc-4.1.0, it was
+ "libstdc++-v3/include/bits" directory. (Up to gcc-4.1.0, it was
changed every night by an automated script. Since gcc-4.1.0, it is
the same value as gcc/DATESTAMP.)
</para>
@@ -445,7 +459,7 @@ compatible.
<listitem><para>gcc-4.4.1: 20090722</para></listitem>
<listitem><para>gcc-4.4.2: 20091015</para></listitem>
</itemizedlist>
- <para></para>
+ <para/>
</listitem>
<listitem>
@@ -459,7 +473,7 @@ compatible.
<para>
This macro is defined in the file "c++config" in the
- "libstdc++/include/bits" directory and is generated
+ "libstdc++-v3/include/bits" directory and is generated
automatically by autoconf as part of the configure-time generation
of config.h.
</para>
@@ -486,7 +500,7 @@ compatible.
<listitem><para>gcc-3.4.x: "version-unused"</para></listitem>
<listitem><para>gcc-4.[0-5].x: "version-unused"</para></listitem>
</itemizedlist>
- <para></para>
+ <para/>
</listitem>
<listitem>
@@ -499,7 +513,7 @@ compatible.
All C++ includes are installed in include/c++, then nest in a
directory hierarchy corresponding to the C++ compiler's released
version. This version corresponds to the variable "gcc_version" in
- "libstdc++/acinclude.m4," and more details can be found in that
+ "libstdc++-v3/acinclude.m4," and more details can be found in that
file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
</para>
<para>
@@ -549,7 +563,7 @@ compatible.
<listitem><para>gcc-4.4.2: include/c++/4.4.2</para></listitem>
<listitem><para>gcc-4.5.0: include/c++/4.5.0</para></listitem>
</itemizedlist>
- <para></para>
+ <para/>
</listitem>
</orderedlist>
@@ -562,14 +576,15 @@ compatible.
</para>
- </sect3>
+ </section>
- <sect3 id="abi.versioning.prereq">
- <title>Prerequisites</title>
+ <section xml:id="abi.versioning.prereq"><info><title>Prerequisites</title></info>
+
<para>
Minimum environment that supports a versioned ABI: A supported
dynamic linker, a GNU linker of sufficient vintage to understand
- demangled C++ name globbing (ld), a shared executable compiled
+ demangled C++ name globbing (ld) or the Sun linker, a shared
+ executable compiled
with g++, and shared libraries (libgcc_s, libstdc++) compiled by
a compiler (g++) with a compatible ABI. Phew.
</para>
@@ -583,12 +598,12 @@ compatible.
<para>
Most modern Linux and BSD versions, particularly ones using
gcc-3.1.x tools and more recent vintages, will meet the
- requirements above.
+ requirements above, as does Solaris 2.5 and up.
</para>
- </sect3>
+ </section>
- <sect3 id="abi.versioning.config">
- <title>Configuring</title>
+ <section xml:id="abi.versioning.config"><info><title>Configuring</title></info>
+
<para>
It turns out that most of the configure options that change
@@ -599,7 +614,7 @@ compatible.
<para>
For more information on configure options, including ABI
impacts, see:
- http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html
+ <link linkend="manual.intro.setup.configure">here</link>
</para>
<para>
@@ -608,17 +623,17 @@ compatible.
</para>
<para>
- In particular, libstdc++/acinclude.m4 has a macro called
+ In particular, libstdc++-v3/acinclude.m4 has a macro called
GLIBCXX_ENABLE_SYMVERS that defaults to yes (or the argument
passed in via --enable-symvers=foo). At that point, the macro
attempts to make sure that all the requirement for symbol
versioning are in place. For more information, please consult
acinclude.m4.
</para>
- </sect3>
+ </section>
- <sect3 id="abi.versioning.active">
- <title>Checking Active</title>
+ <section xml:id="abi.versioning.active"><info><title>Checking Active</title></info>
+
<para>
When the GNU C++ library is being built with symbol versioning
@@ -633,6 +648,7 @@ compatible.
</screen>
<para>
+ or another of the supported styles.
If you don't see this line in the configure output, or if this line
appears but the last word is 'no', then you are out of luck.
</para>
@@ -670,11 +686,28 @@ of the name, then the executable is versioned. Here's an example:
<code>U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4</code>
</para>
- </sect3>
-</sect2>
+<para>
+On Solaris 2, you can use <code>pvs -r</code> instead:
+</para>
+
+<programlisting>
+%g++ hello.cc -o hello.out
+
+%pvs -r hello.out
+ libstdc++.so.6 (GLIBCXX_3.4, GLIBCXX_3.4.12);
+ libgcc_s.so.1 (GCC_3.0);
+ libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
+</programlisting>
+
+<para>
+<code>ldd -v</code> works too, but is very verbose.
+</para>
+
+ </section>
+</section>
+
+<section xml:id="abi.changes_allowed"><info><title>Allowed Changes</title></info>
-<sect2 id="abi.changes_allowed">
-<title>Allowed Changes</title>
<para>
The following will cause the library minor version number to
@@ -689,10 +722,10 @@ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
Other allowed changes are possible.
</para>
-</sect2>
+</section>
+
+<section xml:id="abi.changes_no"><info><title>Prohibited Changes</title></info>
-<sect2 id="abi.changes_no">
-<title>Prohibited Changes</title>
<para>
The following non-exhaustive list will cause the library major version
@@ -720,19 +753,19 @@ number to increase, say from "libstdc++.so.3.0.4" to
<listitem><para> Adding an explicit copy constructor or destructor to a
class that would otherwise have implicit versions. This will change
the way the compiler deals with this class in by-value return
-statements or parameters: instead of being passing instances of this
-class in registers, the compiler will be forced to use memory. See <ulink url="http://www.codesourcery.com/cxx-abi/abi.html#calls"> this part</ulink>
+statements or parameters: instead of passing instances of this
+class in registers, the compiler will be forced to use memory. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/cxx-abi/abi.html#calls"> this part</link>
of the C++ ABI documentation for further details.
</para></listitem>
</orderedlist>
-</sect2>
+</section>
+
+<section xml:id="abi.impl"><info><title>Implementation</title></info>
-<sect2 id="abi.impl">
-<title>Implementation</title>
<orderedlist>
<listitem>
@@ -846,13 +879,13 @@ standard includes.</para>
</listitem>
</orderedlist>
-</sect2>
+</section>
-<sect2 id="abi.testing">
-<title>Testing</title>
+<section xml:id="abi.testing"><info><title>Testing</title></info>
- <sect3 id="abi.testing.single">
- <title>Single ABI Testing</title>
+
+ <section xml:id="abi.testing.single"><info><title>Single ABI Testing</title></info>
+
<para>
Testing for GNU C++ ABI changes is composed of two distinct
@@ -905,7 +938,7 @@ Use the 'make check-abi' rule in the libstdc++ Makefile.
</para>
<para>
-This is a proactive check the library ABI. Currently, exported symbol
+This is a proactive check of the library ABI. Currently, exported symbol
names that are either weak or defined are checked against a last known
good baseline. Currently, this baseline is keyed off of 3.4.0
binaries, as this was the last time the .so number was incremented. In
@@ -940,7 +973,7 @@ Another approach might be to use the -fdump-class-hierarchy flag to
get information. However, currently this approach gives insufficient
data for use in library testing, as class data members, their offsets,
and other detailed data is not displayed with this flag.
-(See g++/7470 on how this was used to find bugs.)
+(See PR g++/7470 on how this was used to find bugs.)
</para>
<para>
@@ -948,12 +981,12 @@ Perhaps there are other C++ ABI checkers. If so, please notify
us. We'd like to know about them!
</para>
- </sect3>
- <sect3 id="abi.testing.multi">
- <title>Multiple ABI Testing</title>
+ </section>
+ <section xml:id="abi.testing.multi"><info><title>Multiple ABI Testing</title></info>
+
<para>
A "C" application, dynamically linked to two shared libraries, liba,
-libb. The dependent library liba is C++ shared library compiled with
+libb. The dependent library liba is a C++ shared library compiled with
gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
libb is a C++ shared library compiled with gcc-3.4.x, and also uses io,
exceptions, locale, etc.
@@ -1035,11 +1068,11 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
code from both liba, and the dependent libstdc++.so.6, and libb,
with the dependent libstdc++.so.5.
</para>
- </sect3>
-</sect2>
+ </section>
+</section>
+
+<section xml:id="abi.issues"><info><title>Outstanding Issues</title></info>
-<sect2 id="abi.issues">
-<title>Outstanding Issues</title>
<para>
Some features in the C++ language make versioning especially
@@ -1055,149 +1088,119 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
</para>
<para>
-<ulink url="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</ulink>
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</link>
</para>
<para>
-<ulink url="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</ulink>
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</link>
</para>
-</sect2>
+</section>
+
+<bibliography xml:id="abi.biblio"><info><title>Bibliography</title></info>
-<bibliography id="abi.biblio">
-<title>Bibliography</title>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://abicheck.sourceforge.net/">
- <citetitle>
- ABIcheck, a vague idea of checking ABI compatibility
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://abicheck.sourceforge.net/" class="uri">
+ </biblioid>
+ <citetitle>
+ ABIcheck, a vague idea of checking ABI compatibility
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.codesourcery.com/public/cxx-abi/">
- <citetitle>
- C++ ABI Reference
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.codesourcery.com/public/cxx-abi/" class="uri">
</biblioid>
+ <citetitle>
+ C++ ABI Reference
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm">
- <citetitle>
- Intel Compilers for Linux Compatibility with the GNU Compilers
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" class="uri">
+ </biblioid>
+ <citetitle>
+ Intel Compilers for Linux Compatibility with the GNU Compilers
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://docs.sun.com/app/docs/doc/817-1984">
- <citetitle>
- Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386)
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docs.sun.com/app/docs/doc/819-0690" class="uri">
+ </biblioid>
+ <citetitle>
+ Linker and Libraries Guide (document 819-0690)
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://docs.sun.com/app/docs/doc/819-5266">
- <citetitle>
- Sun Solaris 2.9 : C++ Migration Guide (document 816-2459)
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docs.sun.com/app/docs/doc/819-3689" class="uri">
</biblioid>
+ <citetitle>
+ Sun Studio 11: C++ Migration Guide (document 819-3689)
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://people.redhat.com/drepper/dsohowto.pdf">
- <citetitle>
- How to Write Shared Libraries
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://people.redhat.com/drepper/dsohowto.pdf" class="uri">
</biblioid>
+ <citetitle>
+ How to Write Shared Libraries
+ </citetitle>
<author>
- <firstname>Ulrich</firstname>
- <surname>Drepper</surname>
+ <personname>
+ <firstname>Ulrich</firstname><surname>Drepper</surname>
+ </personname>
</author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.arm.com/miscPDFs/8033.pdf">
- <citetitle>
- C++ ABI for the ARM Architecture
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.arm.com/miscPDFs/8033.pdf" class="uri">
</biblioid>
+ <citetitle>
+ C++ ABI for the ARM Architecture
+ </citetitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">
- <citetitle>
- Dynamic Shared Objects: Survey and Issues
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" class="uri">
</biblioid>
+ <citetitle>
+ Dynamic Shared Objects: Survey and Issues
+ </citetitle>
<subtitle>
ISO C++ J16/06-0046
</subtitle>
- <author>
- <firstname>Benjamin</firstname>
- <surname>Kosnik</surname>
- </author>
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">
- <citetitle>
- Versioning With Namespaces
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" class="uri">
+ </biblioid>
+ <citetitle>
+ Versioning With Namespaces
+ </citetitle>
<subtitle>
ISO C++ J16/06-0083
</subtitle>
- <author>
- <firstname>Benjamin</firstname>
- <surname>Kosnik</surname>
- </author>
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf">
- <citetitle>
- Binary Compatibility of Shared Libraries Implemented in C++
- on GNU/Linux Systems
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" class="uri">
</biblioid>
+ <citetitle>
+ Binary Compatibility of Shared Libraries Implemented in C++
+ on GNU/Linux Systems
+ </citetitle>
+
<subtitle>
SYRCoSE 2009
</subtitle>
- <author>
- <firstname>Pavel</firstname>
- <surname>Shved</surname>
- </author>
- <author>
- <firstname>Denis</firstname>
- <surname>Silakov</surname>
- </author>
+ <author><personname><firstname>Pavel</firstname><surname>Shved</surname></personname></author>
+ <author><personname><firstname>Denis</firstname><surname>Silakov</surname></personname></author>
</biblioentry>
</bibliography>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/algorithms.xml b/libstdc++-v3/doc/xml/manual/algorithms.xml
index 008fd0286ed..831fe5fe602 100644
--- a/libstdc++-v3/doc/xml/manual/algorithms.xml
+++ b/libstdc++-v3/doc/xml/manual/algorithms.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.algorithms" xreflabel="Algorithms">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.algorithms" xreflabel="Algorithms">
<?dbhtml filename="algorithms.html"?>
-<chapterinfo>
+<info><title>
+ Algorithms
+ <indexterm><primary>Algorithms</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -18,19 +17,16 @@
algorithm
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Algorithms
- <indexterm><primary>Algorithms</primary></indexterm>
-</title>
<para>
The neatest accomplishment of the algorithms sect1 is that all the
work is done via iterators, not containers directly. This means two
important things:
</para>
-<orderedlist>
+<orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Anything that behaves like an iterator can be used in one of
@@ -63,7 +59,7 @@
<para>
The single thing that trips people up the most is the definition
of <emphasis>range</emphasis> used with iterators; the famous
- &quot;past-the-end&quot; rule that everybody loves to hate. The
+ "past-the-end" rule that everybody loves to hate. The
<link linkend="std.iterators">iterators sect1</link> of this
document has a complete explanation of this simple rule that seems
to cause so much confusion. Once you
@@ -74,14 +70,14 @@
<!-- Sect1 01 : Non Modifying -->
<!-- Sect1 02 : Mutating -->
-<sect1 id="std.algorithms.mutating" xreflabel="Mutating">
- <title>Mutating</title>
+<section xml:id="std.algorithms.mutating" xreflabel="Mutating"><info><title>Mutating</title></info>
+
- <sect2 id="algorithms.mutating.swap" xreflabel="swap">
- <title><function>swap</function></title>
+ <section xml:id="algorithms.mutating.swap" xreflabel="swap"><info><title><function>swap</function></title></info>
+
- <sect3 id="algorithms.swap.specializations" xreflabel="Specializations">
- <title>Specializations</title>
+ <section xml:id="algorithms.swap.specializations" xreflabel="Specializations"><info><title>Specializations</title></info>
+
<para>If you call <code> std::swap(x,y); </code> where x and y are standard
containers, then the call will automatically be replaced by a call to
@@ -89,16 +85,16 @@
</para>
<para>This allows member functions of each container class to take over, and
containers' swap functions should have O(1) complexity according to
- the standard. (And while &quot;should&quot; allows implementations to
+ the standard. (And while "should" allows implementations to
behave otherwise and remain compliant, this implementation does in
fact use constant-time swaps.) This should not be surprising, since
for two containers of the same type to swap contents, only some
internal pointers to storage need to be exchanged.
</para>
- </sect3>
- </sect2>
-</sect1>
+ </section>
+ </section>
+</section>
<!-- Sect1 03 : Sorting -->
diff --git a/libstdc++-v3/doc/xml/manual/allocator.xml b/libstdc++-v3/doc/xml/manual/allocator.xml
index ca1c8cb8609..b73554eb90e 100644
--- a/libstdc++-v3/doc/xml/manual/allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/allocator.xml
@@ -1,7 +1,8 @@
-<section id="std.util.memory.allocator" xreflabel="Allocator">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.allocator" xreflabel="Allocator">
<?dbhtml filename="allocator.html"?>
-<sectioninfo>
+<info><title>Allocators</title>
<keywordset>
<keyword>
ISO C++
@@ -10,9 +11,9 @@
allocator
</keyword>
</keywordset>
-</sectioninfo>
+</info>
+
-<title>Allocators</title>
<para>
Memory management for Standard Library entities is encapsulated in a
@@ -24,8 +25,8 @@
management classes.
</para>
-<section id="allocator.req">
-<title>Requirements</title>
+<section xml:id="allocator.req"><info><title>Requirements</title></info>
+
<para>
The C++ standard only gives a few directives in this area:
@@ -87,15 +88,14 @@
</section>
-<section id="allocator.design_issues">
-<title>Design Issues</title>
+<section xml:id="allocator.design_issues"><info><title>Design Issues</title></info>
+
<para>
The easiest way of fulfilling the requirements is to call
<function>operator new</function> each time a container needs
memory, and to call <function>operator delete</function> each time
- the container releases memory. This method may be <ulink
- url="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html">slower</ulink>
+ the container releases memory. This method may be <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00105.html">slower</link>
than caching the allocations and re-using previously-allocated
memory, but has the advantage of working correctly across a wide
variety of hardware and operating systems, including large
@@ -138,11 +138,11 @@
</section>
-<section id="allocator.impl">
-<title>Implementation</title>
+<section xml:id="allocator.impl"><info><title>Implementation</title></info>
- <section>
- <title>Interface Design</title>
+
+ <section><info><title>Interface Design</title></info>
+
<para>
The only allocator interface that
@@ -165,8 +165,8 @@
</section>
- <section>
- <title>Selecting Default Allocation Policy</title>
+ <section><info><title>Selecting Default Allocation Policy</title></info>
+
<para>
It's difficult to pick an allocation strategy that will provide
@@ -189,8 +189,8 @@
Over multiple iterations, various STL container
objects have elements inserted to some maximum amount. A variety
of allocators are tested.
- Test source for <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</ulink>
- and <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</ulink>
+ Test source for <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</link>
+ and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</link>
containers.
</para>
@@ -205,7 +205,7 @@
on a per-thread basis, as well as measuring thread contention
for memory resources.
Test source
- <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</link>.
</para>
</listitem>
@@ -215,9 +215,9 @@
</para>
<para>
Test source for
- <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</link>
and
- <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</link>
containers.
</para>
</listitem>
@@ -231,8 +231,8 @@
</section>
- <section>
- <title>Disabling Memory Caching</title>
+ <section><info><title>Disabling Memory Caching</title></info>
+
<para>
In use, <classname>allocator</classname> may allocate and
@@ -285,8 +285,8 @@
</section>
-<section id="allocator.using">
-<title>Using a Specific Allocator</title>
+<section xml:id="allocator.using"><info><title>Using a Specific Allocator</title></info>
+
<para>
You can specify different memory management schemes on a
@@ -305,8 +305,8 @@
</programlisting>
</section>
-<section id="allocator.custom">
-<title>Custom Allocators</title>
+<section xml:id="allocator.custom"><info><title>Custom Allocators</title></info>
+
<para>
Writing a portable C++ allocator would dictate that the interface
@@ -323,8 +323,8 @@
</section>
-<section id="allocator.ext">
-<title>Extension Allocators</title>
+<section xml:id="allocator.ext"><info><title>Extension Allocators</title></info>
+
<para>
Several other allocators are provided as part of this
@@ -472,8 +472,7 @@
<para>
A high-performance fixed-size allocator with
exponentially-increasing allocations. It has its own
- documentation, found <link
- linkend="manual.ext.allocator.mt">here</link>.
+ documentation, found <link linkend="manual.ext.allocator.mt">here</link>.
</para>
</listitem>
@@ -484,21 +483,20 @@
<para>
A high-performance allocator that uses a bit-map to keep track
of the used and unused memory locations. It has its own
- documentation, found <link
- linkend="manual.ext.allocator.bitmap">here</link>.
+ documentation, found <link linkend="manual.ext.allocator.bitmap">here</link>.
</para>
</listitem>
</orderedlist>
</section>
-<bibliography id="allocator.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="allocator.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 14882:1998 Programming languages - C++
- </title>
+ </citetitle>
<abbrev>
isoc++_1998
</abbrev>
@@ -506,17 +504,13 @@
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.drdobbs.com/cpp/184403759">
- <citetitle>
- The Standard Librarian: What Are Allocators Good For?
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.drdobbs.com/cpp/184403759" class="uri">
</biblioid>
- <author>
- <firstname>Matt</firstname>
- <surname>Austern</surname>
- </author>
+ <citetitle>
+ The Standard Librarian: What Are Allocators Good For?
+ </citetitle>
+
+ <author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
<publisher>
<publishername>
C/C++ Users Journal
@@ -525,39 +519,25 @@
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.cs.umass.edu/~emery/hoard/">
- <citetitle>
- The Hoard Memory Allocator
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cs.umass.edu/~emery/hoard/" class="uri">
</biblioid>
- <author>
- <firstname>Emery</firstname>
- <surname>Berger</surname>
- </author>
+ <citetitle>
+ The Hoard Memory Allocator
+ </citetitle>
+
+ <author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf">
- <citetitle>
- Reconsidering Custom Memory Allocation
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" class="uri">
</biblioid>
- <author>
- <firstname>Emery</firstname>
- <surname>Berger</surname>
- </author>
- <author>
- <firstname>Ben</firstname>
- <surname>Zorn</surname>
- </author>
- <author>
- <firstname>Kathryn</firstname>
- <surname>McKinley</surname>
- </author>
+ <citetitle>
+ Reconsidering Custom Memory Allocation
+ </citetitle>
+
+ <author><personname><firstname>Emery</firstname><surname>Berger</surname></personname></author>
+ <author><personname><firstname>Ben</firstname><surname>Zorn</surname></personname></author>
+ <author><personname><firstname>Kathryn</firstname><surname>McKinley</surname></personname></author>
<copyright>
<year>2002</year>
<holder>OOPSLA</holder>
@@ -566,21 +546,14 @@
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html">
- <citetitle>
- Allocator Types
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" class="uri">
</biblioid>
- <author>
- <firstname>Klaus</firstname>
- <surname>Kreft</surname>
- </author>
- <author>
- <firstname>Angelika</firstname>
- <surname>Langer</surname>
- </author>
+ <citetitle>
+ Allocator Types
+ </citetitle>
+
+ <author><personname><firstname>Klaus</firstname><surname>Kreft</surname></personname></author>
+ <author><personname><firstname>Angelika</firstname><surname>Langer</surname></personname></author>
<publisher>
<publishername>
C/C++ Users Journal
@@ -589,14 +562,11 @@
</biblioentry>
<biblioentry>
- <title>The C++ Programming Language</title>
- <author>
- <firstname>Bjarne</firstname>
- <surname>Stroustrup</surname>
- </author>
+ <citetitle>The C++ Programming Language</citetitle>
+ <author><personname><firstname>Bjarne</firstname><surname>Stroustrup</surname></personname></author>
<copyright>
<year>2000</year>
- <holder></holder>
+ <holder/>
</copyright>
<pagenums>19.4 Allocators</pagenums>
<publisher>
@@ -607,11 +577,8 @@
</biblioentry>
<biblioentry>
- <title>Yalloc: A Recycling C++ Allocator</title>
- <author>
- <firstname>Felix</firstname>
- <surname>Yen</surname>
- </author>
+ <citetitle>Yalloc: A Recycling C++ Allocator</citetitle>
+ <author><personname><firstname>Felix</firstname><surname>Yen</surname></personname></author>
</biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
index 279e7038a9b..7dfe8e0ddf4 100644
--- a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
+++ b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
@@ -1,12 +1,14 @@
-<?xml version='1.0'?>
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<appendix id="appendix.contrib" xreflabel="Contributing">
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.contrib" xreflabel="Contributing">
<?dbhtml filename="appendix_contributing.html"?>
-<appendixinfo>
+<info><title>
+ Contributing
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Contributing</secondary>
+ </indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,15 +17,9 @@
library
</keyword>
</keywordset>
-</appendixinfo>
+</info>
+
-<title>
- Contributing
- <indexterm>
- <primary>Appendix</primary>
- <secondary>Contributing</secondary>
- </indexterm>
-</title>
<para>
The GNU C++ Library follows an open development model. Active
@@ -32,11 +28,11 @@
should follow this procedure:
</para>
-<sect1 id="contrib.list" xreflabel="Contributor Checklist">
- <title>Contributor Checklist</title>
+<section xml:id="contrib.list" xreflabel="Contributor Checklist"><info><title>Contributor Checklist</title></info>
+
- <sect2 id="list.reading">
- <title>Reading</title>
+ <section xml:id="list.reading"><info><title>Reading</title></info>
+
<itemizedlist>
<listitem>
@@ -50,9 +46,9 @@
the standard from their respective national standards
organization. In the USA, this national standards
organization is ANSI and their web-site is right
- <ulink url="http://www.ansi.org">here.</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.ansi.org">here.</link>
(And if you've already registered with them, clicking this link will take you to directly to the place where you can
- <ulink url="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line.)</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+14882:2003">buy the standard on-line</link>.)
</para>
</listitem>
@@ -60,7 +56,7 @@
<para>
The library working group bugs, and known defects, can
be obtained here:
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </link>
</para>
</listitem>
@@ -69,16 +65,16 @@
The newsgroup dedicated to standardization issues is
comp.std.c++: this FAQ for this group is quite useful and
can be
- found <ulink url="http://www.comeaucomputing.com/csc/faq.html">
- here </ulink>.
+ found <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.comeaucomputing.com/csc/faq.html">
+ here </link>.
</para>
</listitem>
<listitem>
<para>
Peruse
- the <ulink url="http://www.gnu.org/prep/standards">GNU
- Coding Standards</ulink>, and chuckle when you hit the part
+ the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/standards">GNU
+ Coding Standards</link>, and chuckle when you hit the part
about <quote>Using Languages Other Than C</quote>.
</para>
</listitem>
@@ -100,9 +96,9 @@
</listitem>
</itemizedlist>
- </sect2>
- <sect2 id="list.copyright">
- <title>Assignment</title>
+ </section>
+ <section xml:id="list.copyright"><info><title>Assignment</title></info>
+
<para>
Small changes can be accepted without a copyright assignment form on
file. New code and additions to the library need completed copyright
@@ -129,8 +125,8 @@
<para>
For more information about getting a copyright assignment, please see
- <ulink url="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html">Legal
- Matters</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/maintain/html_node/Legal-Matters.html">Legal
+ Matters</link>.
</para>
<para>
@@ -141,18 +137,18 @@
<email>mailto:assign@gnu.org</email>, please cc the libstdc++
maintainer above so that progress can be monitored.
</para>
- </sect2>
+ </section>
- <sect2 id="list.getting">
- <title>Getting Sources</title>
+ <section xml:id="list.getting"><info><title>Getting Sources</title></info>
+
<para>
- <ulink url="http://gcc.gnu.org/svnwrite.html">Getting write access
- (look for &quot;Write after approval&quot;)</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/svnwrite.html">Getting write access
+ (look for "Write after approval")</link>
</para>
- </sect2>
+ </section>
- <sect2 id="list.patches">
- <title>Submitting Patches</title>
+ <section xml:id="list.patches"><info><title>Submitting Patches</title></info>
+
<para>
Every patch must have several pieces of information before it can be
@@ -195,8 +191,8 @@
else, use <command>diff -cp OLD NEW</command> ... If your
version of diff does not support these options, then get the
latest version of GNU
- diff. The <ulink url="http://gcc.gnu.org/wiki/SvnTricks">SVN
- Tricks</ulink> wiki page has information on customising the
+ diff. The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/wiki/SvnTricks">SVN
+ Tricks</link> wiki page has information on customising the
output of <code>svn diff</code>.
</para>
</listitem>
@@ -211,20 +207,20 @@
</listitem>
</itemizedlist>
- </sect2>
+ </section>
-</sect1>
+</section>
-<sect1 id="contrib.organization" xreflabel="Source Organization">
+<section xml:id="contrib.organization" xreflabel="Source Organization"><info><title>Directory Layout and Source Conventions</title></info>
<?dbhtml filename="source_organization.html"?>
- <title>Directory Layout and Source Conventions</title>
+
<para>
The unpacked source directory of libstdc++ contains the files
needed to create the GNU C++ Library.
</para>
- <literallayout>
+ <literallayout class="normal">
It has subdirectories:
doc
@@ -311,20 +307,20 @@ a bug or incompletely-implemented feature. Lines marked "XXX MT"
indicate a place that may require attention for multi-thread safety.
</literallayout>
-</sect1>
+</section>
-<sect1 id="contrib.coding_style" xreflabel="Coding Style">
+<section xml:id="contrib.coding_style" xreflabel="Coding Style"><info><title>Coding Style</title></info>
<?dbhtml filename="source_code_style.html"?>
- <title>Coding Style</title>
+
<para>
</para>
- <sect2 id="coding_style.bad_identifiers">
- <title>Bad Identifiers</title>
+ <section xml:id="coding_style.bad_identifiers"><info><title>Bad Identifiers</title></info>
+
<para>
Identifiers that conflict and should be avoided.
</para>
- <literallayout>
+ <literallayout class="normal">
This is the list of names <quote>reserved to the
implementation</quote> that have been claimed by certain
compilers and system headers of interest, and should not be used
@@ -509,63 +505,71 @@ indicate a place that may require attention for multi-thread safety.
__embedded_cplusplus
// long double conversion members mangled as __opr
// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html
- _opr
+ __opr
</literallayout>
- </sect2>
+ </section>
- <sect2 id="coding_style.example">
- <title>By Example</title>
- <literallayout>
+ <section xml:id="coding_style.example"><info><title>By Example</title></info>
+
+ <literallayout class="normal">
This library is written to appropriate C++ coding standards. As such,
it is intended to precede the recommendations of the GNU Coding
Standard, which can be referenced in full here:
- http://www.gnu.org/prep/standards/standards.html#Formatting
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/prep/standards/standards.html#Formatting">http://www.gnu.org/prep/standards/standards.html#Formatting</link>
The rest of this is also interesting reading, but skip the "Design
Advice" part.
The GCC coding conventions are here, and are also useful:
- http://gcc.gnu.org/codingconventions.html
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/codingconventions.html">http://gcc.gnu.org/codingconventions.html</link>
In addition, because it doesn't seem to be stated explicitly anywhere
else, there is an 80 column source limit.
- ChangeLog entries for member functions should use the
+ <filename>ChangeLog</filename> entries for member functions should use the
classname::member function name syntax as follows:
- 1999-04-15 Dennis Ritchie &lt;dr@att.com&gt;
+<code>
+1999-04-15 Dennis Ritchie &lt;dr@att.com&gt;
* src/basic_file.cc (__basic_file::open): Fix thinko in
_G_HAVE_IO_FILE_OPEN bits.
+</code>
Notable areas of divergence from what may be previous local practice
(particularly for GNU C) include:
01. Pointers and references
- char* p = "flop";
- char&amp; c = *p;
- -NOT-
- char *p = "flop"; // wrong
- char &amp;c = *p; // wrong
+ <code>
+ char* p = "flop";
+ char&amp; c = *p;
+ -NOT-
+ char *p = "flop"; // wrong
+ char &amp;c = *p; // wrong
+ </code>
Reason: In C++, definitions are mixed with executable code. Here,
- p is being initialized, not *p. This is near-universal
+ <code>p</code> is being initialized, not <code>*p</code>. This is near-universal
practice among C++ programmers; it is normal for C hackers
to switch spontaneously as they gain experience.
02. Operator names and parentheses
- operator==(type)
- -NOT-
- operator == (type) // wrong
+ <code>
+ operator==(type)
+ -NOT-
+ operator == (type) // wrong
+ </code>
- Reason: The == is part of the function name. Separating
+ Reason: The <code>==</code> is part of the function name. Separating
it makes the declaration look like an expression.
03. Function names and parentheses
- void mangle()
- -NOT-
- void mangle () // wrong
+ <code>
+ void mangle()
+ -NOT-
+ void mangle () // wrong
+ </code>
Reason: no space before parentheses (except after a control-flow
keyword) is near-universal practice for C++. It identifies the
@@ -573,86 +577,98 @@ indicate a place that may require attention for multi-thread safety.
opposed to an expression or other overloaded use of parentheses.
04. Template function indentation
- template&lt;typename T&gt;
- void
- template_function(args)
- { }
- -NOT-
- template&lt;class T&gt;
- void template_function(args) {};
+ <code>
+ template&lt;typename T&gt;
+ void
+ template_function(args)
+ { }
+ -NOT-
+ template&lt;class T&gt;
+ void template_function(args) {};
+ </code>
Reason: In class definitions, without indentation whitespace is
needed both above and below the declaration to distinguish
it visually from other members. (Also, re: "typename"
- rather than "class".) T often could be int, which is
+ rather than "class".) <code>T</code> often could be <code>int</code>, which is
not a class. ("class", here, is an anachronism.)
05. Template class indentation
- template&lt;typename _CharT, typename _Traits&gt;
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
- -NOT-
- template&lt;class _CharT, class _Traits&gt;
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
- -NOT-
- template&lt;class _CharT, class _Traits&gt;
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
+ <code>
+ template&lt;typename _CharT, typename _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ -NOT-
+ template&lt;class _CharT, class _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ -NOT-
+ template&lt;class _CharT, class _Traits&gt;
+ class basic_ios : public ios_base
+ {
+ public:
+ // Types:
+ };
+ </code>
06. Enumerators
- enum
- {
- space = _ISspace,
- print = _ISprint,
- cntrl = _IScntrl
- };
- -NOT-
- enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };
+ <code>
+ enum
+ {
+ space = _ISspace,
+ print = _ISprint,
+ cntrl = _IScntrl
+ };
+ -NOT-
+ enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };
+ </code>
07. Member initialization lists
All one line, separate from class name.
- gribble::gribble()
- : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
- -NOT-
- gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
+ <code>
+ gribble::gribble()
+ : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+ -NOT-
+ gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+ </code>
08. Try/Catch blocks
- try
- {
- //
- }
- catch (...)
- {
- //
- }
- -NOT-
- try {
- //
- } catch(...) {
- //
- }
+ <code>
+ try
+ {
+ //
+ }
+ catch (...)
+ {
+ //
+ }
+ -NOT-
+ try {
+ //
+ } catch(...) {
+ //
+ }
+ </code>
09. Member functions declarations and definitions
Keywords such as extern, static, export, explicit, inline, etc
go on the line above the function name. Thus
+ <code>
virtual int
foo()
-NOT-
virtual int foo()
+ </code>
Reason: GNU coding conventions dictate return types for functions
are on a separate line than the function name and parameter list
@@ -663,42 +679,49 @@ indicate a place that may require attention for multi-thread safety.
10. Invocation of member functions with "this-&gt;"
- For non-uglified names, use this-&gt;name to call the function.
+ For non-uglified names, use <code>this-&gt;name</code> to call the function.
+ <code>
this-&gt;sync()
-NOT-
sync()
+ </code>
Reason: Koenig lookup.
11. Namespaces
+ <code>
namespace std
{
- blah blah blah;
+ blah blah blah;
} // namespace std
-NOT-
namespace std {
- blah blah blah;
+ blah blah blah;
} // namespace std
+ </code>
12. Spacing under protected and private in class declarations:
space above, none below
i.e.
+ <code>
public:
- int foo;
+ int foo;
-NOT-
public:
- int foo;
+ int foo;
+ </code>
13. Spacing WRT return statements.
no extra spacing before returns, no parenthesis
i.e.
+ <code>
}
return __ret;
@@ -711,21 +734,22 @@ indicate a place that may require attention for multi-thread safety.
}
return (__ret);
+ </code>
14. Location of global variables.
All global variables of class type, whether in the "user visible"
- space (e.g., cin) or the implementation namespace, must be defined
+ space (e.g., <code>cin</code>) or the implementation namespace, must be defined
as a character array with the appropriate alignment and then later
re-initialized to the correct value.
This is due to startup issues on certain platforms, such as AIX.
- For more explanation and examples, see src/globals.cc. All such
+ For more explanation and examples, see <filename>src/globals.cc</filename>. All such
variables should be contained in that file, for simplicity.
15. Exception abstractions
- Use the exception abstractions found in functexcept.h, which allow
- C++ programmers to use this library with -fno-exceptions. (Even if
+ Use the exception abstractions found in <filename class="headerfile">functexcept.h</filename>, which allow
+ C++ programmers to use this library with <literal>-fno-exceptions</literal>. (Even if
that is rarely advisable, it's a necessary evil for backwards
compatibility.)
@@ -733,9 +757,11 @@ indicate a place that may require attention for multi-thread safety.
All start with the name of the function where the exception is
thrown, and then (optional) descriptive text is added. Example:
+ <code>
__throw_logic_error(__N("basic_string::_S_construct NULL not valid"));
+ </code>
- Reason: The verbose terminate handler prints out exception::what(),
+ Reason: The verbose terminate handler prints out <code>exception::what()</code>,
as well as the typeinfo for the thrown exception. As this is the
default terminate handler, by putting location info into the
exception string, a very useful error message is printed out for
@@ -755,21 +781,21 @@ indicate a place that may require attention for multi-thread safety.
to use names that begin with underscores. This is called "uglification".
The convention is:
- Local and argument names: __[a-z].*
+ Local and argument names: <literal>__[a-z].*</literal>
- Examples: __count __ix __s1
+ Examples: <code>__count __ix __s1</code>
- Type names and template formal-argument names: _[A-Z][^_].*
+ Type names and template formal-argument names: <literal>_[A-Z][^_].*</literal>
- Examples: _Helper _CharT _N
+ Examples: <code>_Helper _CharT _N</code>
- Member data and function names: _M_.*
+ Member data and function names: <literal>_M_.*</literal>
- Examples: _M_num_elements _M_initialize ()
+ Examples: <code>_M_num_elements _M_initialize ()</code>
- Static data members, constants, and enumerations: _S_.*
+ Static data members, constants, and enumerations: <literal>_S_.*</literal>
- Examples: _S_max_elements _S_default_value
+ Examples: <code>_S_max_elements _S_default_value</code>
Don't use names in the same scope that differ only in the prefix,
e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.
@@ -781,87 +807,88 @@ indicate a place that may require attention for multi-thread safety.
--------------------------
[BY EXAMPLE]
+ <code>
#ifndef _HEADER_
#define _HEADER_ 1
namespace std
{
- class gribble
- {
- public:
- gribble() throw();
+ class gribble
+ {
+ public:
+ gribble() throw();
- gribble(const gribble&amp;);
+ gribble(const gribble&amp;);
- explicit
- gribble(int __howmany);
+ explicit
+ gribble(int __howmany);
- gribble&amp;
- operator=(const gribble&amp;);
+ gribble&amp;
+ operator=(const gribble&amp;);
- virtual
- ~gribble() throw ();
+ virtual
+ ~gribble() throw ();
- // Start with a capital letter, end with a period.
- inline void
- public_member(const char* __arg) const;
+ // Start with a capital letter, end with a period.
+ inline void
+ public_member(const char* __arg) const;
- // In-class function definitions should be restricted to one-liners.
- int
- one_line() { return 0 }
+ // In-class function definitions should be restricted to one-liners.
+ int
+ one_line() { return 0 }
- int
- two_lines(const char* arg)
- { return strchr(arg, 'a'); }
+ int
+ two_lines(const char* arg)
+ { return strchr(arg, 'a'); }
- inline int
- three_lines(); // inline, but defined below.
+ inline int
+ three_lines(); // inline, but defined below.
- // Note indentation.
- template&lt;typename _Formal_argument&gt;
- void
- public_template() const throw();
+ // Note indentation.
+ template&lt;typename _Formal_argument&gt;
+ void
+ public_template() const throw();
- template&lt;typename _Iterator&gt;
- void
- other_template();
+ template&lt;typename _Iterator&gt;
+ void
+ other_template();
- private:
- class _Helper;
+ private:
+ class _Helper;
- int _M_private_data;
- int _M_more_stuff;
- _Helper* _M_helper;
- int _M_private_function();
+ int _M_private_data;
+ int _M_more_stuff;
+ _Helper* _M_helper;
+ int _M_private_function();
- enum _Enum
- {
- _S_one,
- _S_two
- };
+ enum _Enum
+ {
+ _S_one,
+ _S_two
+ };
- static void
- _S_initialize_library();
- };
+ static void
+ _S_initialize_library();
+ };
- // More-or-less-standard language features described by lack, not presence.
+ // More-or-less-standard language features described by lack, not presence.
# ifndef _G_NO_LONGLONG
- extern long long _G_global_with_a_good_long_name; // avoid globals!
+ extern long long _G_global_with_a_good_long_name; // avoid globals!
# endif
- // Avoid in-class inline definitions, define separately;
- // likewise for member class definitions:
- inline int
- gribble::public_member() const
- { int __local = 0; return __local; }
+ // Avoid in-class inline definitions, define separately;
+ // likewise for member class definitions:
+ inline int
+ gribble::public_member() const
+ { int __local = 0; return __local; }
- class gribble::_Helper
- {
- int _M_stuff;
+ class gribble::_Helper
+ {
+ int _M_stuff;
- friend class gribble;
- };
+ friend class gribble;
+ };
}
// Names beginning with "__": only for arguments and
@@ -873,57 +900,58 @@ indicate a place that may require attention for multi-thread safety.
namespace std
{
- template&lt;typename T&gt; // notice: "typename", not "class", no space
- long_return_value_type&lt;with_many, args&gt;
- function_name(char* pointer, // "char *pointer" is wrong.
- char* argument,
- const Reference&amp; ref)
- {
- // int a_local; /* wrong; see below. */
- if (test)
- {
- nested code
- }
-
- int a_local = 0; // declare variable at first use.
-
- // char a, b, *p; /* wrong */
- char a = 'a';
- char b = a + 1;
- char* c = "abc"; // each variable goes on its own line, always.
-
- // except maybe here...
- for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {
- // ...
- }
- }
-
- gribble::gribble()
- : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
-
- inline int
- gribble::three_lines()
- {
- // doesn't fit in one line.
- }
+ template&lt;typename T&gt; // notice: "typename", not "class", no space
+ long_return_value_type&lt;with_many, args&gt;
+ function_name(char* pointer, // "char *pointer" is wrong.
+ char* argument,
+ const Reference&amp; ref)
+ {
+ // int a_local; /* wrong; see below. */
+ if (test)
+ {
+ nested code
+ }
+
+ int a_local = 0; // declare variable at first use.
+
+ // char a, b, *p; /* wrong */
+ char a = 'a';
+ char b = a + 1;
+ char* c = "abc"; // each variable goes on its own line, always.
+
+ // except maybe here...
+ for (unsigned i = 0, mask = 1; mask; ++i, mask &lt;&lt;= 1) {
+ // ...
+ }
+ }
+
+ gribble::gribble()
+ : _M_private_data(0), _M_more_stuff(0), _M_helper(0)
+ { }
+
+ int
+ gribble::three_lines()
+ {
+ // doesn't fit in one line.
+ }
} // namespace std
+ </code>
</literallayout>
- </sect2>
-</sect1>
+ </section>
+</section>
-<sect1 id="contrib.doc_style" xreflabel="Documentation Style">
+<section xml:id="contrib.doc_style" xreflabel="Documentation Style"><info><title>Documentation Style</title></info>
<?dbhtml filename="documentation_style.html"?>
- <title>Documentation Style</title>
- <sect2 id="doc_style.doxygen">
- <title>Doxygen</title>
- <sect3 id="doxygen.prereq">
- <title>Prerequisites</title>
+
+ <section xml:id="doc_style.doxygen"><info><title>Doxygen</title></info>
+
+ <section xml:id="doxygen.prereq"><info><title>Prerequisites</title></info>
+
<para>
- Prerequisite tools are Bash 2.x,
- <ulink url="http://www.doxygen.org/">Doxygen</ulink>, and
- the <ulink url="http://www.gnu.org/software/coreutils/">GNU
- coreutils</ulink>. (GNU versions of find, xargs, and possibly
+ Prerequisite tools are Bash 2.0 or later,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.doxygen.org/">Doxygen</link>, and
+ the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/coreutils/">GNU
+ coreutils</link>. (GNU versions of find, xargs, and possibly
sed and grep are used, just because the GNU versions make
things very easy.)
</para>
@@ -931,18 +959,18 @@ indicate a place that may require attention for multi-thread safety.
<para>
To generate the pretty pictures and hierarchy
graphs, the
- <ulink url="http://www.graphviz.org">Graphviz</ulink> package
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.graphviz.org">Graphviz</link> package
will need to be installed. For PDF
- output, <ulink url="http://www.tug.org/applications/pdftex/">
- pdflatex</ulink> is required.
+ output, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.tug.org/applications/pdftex/">
+ pdflatex</link> is required.
</para>
- </sect3>
+ </section>
- <sect3 id="doxygen.rules">
- <title>Generating the Doxygen Files</title>
+ <section xml:id="doxygen.rules"><info><title>Generating the Doxygen Files</title></info>
+
<para>
The following Makefile rules run Doxygen to generate HTML
- docs, XML docs, PDF docs, and the man pages.
+ docs, XML docs, XML docs as a single file, PDF docs, and the man pages.
</para>
<para>
@@ -954,6 +982,10 @@ indicate a place that may require attention for multi-thread safety.
</para>
<para>
+ <screen><userinput>make doc-xml-single-doxygen</userinput></screen>
+ </para>
+
+ <para>
<screen><userinput>make doc-pdf-doxygen</userinput></screen>
</para>
@@ -962,6 +994,13 @@ indicate a place that may require attention for multi-thread safety.
</para>
<para>
+ Generated files are output into separate sub directores of
+ <filename class="directory">doc/doxygen/</filename> in the
+ build directory, based on the output format. For instance, the
+ HTML docs will be in <filename class="directory">doc/doxygen/html</filename>.
+ </para>
+
+ <para>
Careful observers will see that the Makefile rules simply call
a script from the source tree, <filename>run_doxygen</filename>, which
does the actual work of running Doxygen and then (most
@@ -976,10 +1015,10 @@ indicate a place that may require attention for multi-thread safety.
library hackers are written in triple-# comments.
</para>
- </sect3>
+ </section>
- <sect3 id="doxygen.markup">
- <title>Markup</title>
+ <section xml:id="doxygen.markup"><info><title>Markup</title></info>
+
<para>
In general, libstdc++ files should be formatted according to
@@ -993,7 +1032,7 @@ indicate a place that may require attention for multi-thread safety.
Adding Doxygen markup to a file (informally called
<quote>doxygenating</quote>) is very simple. The Doxygen manual can be
found
- <ulink url="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</link>.
We try to use a very-recent version of Doxygen.
</para>
@@ -1009,12 +1048,12 @@ indicate a place that may require attention for multi-thread safety.
<para>
Some commentary to accompany
- the first list in the <ulink url="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Special
- Documentation Blocks</ulink> section of
+ the first list in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Special
+ Documentation Blocks</link> section of
the Doxygen manual:
</para>
- <orderedlist>
+ <orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>For longer comments, use the Javadoc style...</para>
</listitem>
@@ -1072,7 +1111,7 @@ indicate a place that may require attention for multi-thread safety.
</para>
<para>
-<literallayout>
+<literallayout class="normal">
/**
* @brief A model of a linear congruential random number generator.
*
@@ -1090,11 +1129,12 @@ indicate a place that may require attention for multi-thread safety.
doubt, consult the following table.
</para>
-<table frame='all'>
+<table frame="all">
<title>HTML to Doxygen Markup Comparison</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<thead>
<row>
@@ -1110,12 +1150,12 @@ indicate a place that may require attention for multi-thread safety.
</row>
<row>
- <entry>&quot;</entry>
+ <entry>"</entry>
<entry>\"</entry>
</row>
<row>
- <entry>&apos;</entry>
+ <entry>'</entry>
<entry>\'</entry>
</row>
@@ -1149,15 +1189,15 @@ indicate a place that may require attention for multi-thread safety.
</table>
- </sect3>
+ </section>
- </sect2>
+ </section>
- <sect2 id="doc_style.docbook">
- <title>Docbook</title>
+ <section xml:id="doc_style.docbook"><info><title>Docbook</title></info>
+
- <sect3 id="docbook.prereq">
- <title>Prerequisites</title>
+ <section xml:id="docbook.prereq"><info><title>Prerequisites</title></info>
+
<para>
Editing the DocBook sources requires an XML editor. Many
exist: some notable options
@@ -1178,16 +1218,16 @@ indicate a place that may require attention for multi-thread safety.
</para>
<para>
- Access to the DocBook stylesheets and DTD is required. The
+ Access to the DocBook 5.0 stylesheets and schema is required. The
stylesheets are usually packaged by vendor, in something
- like <filename>docbook-style-xsl</filename>. To exactly match
+ like <filename>docbook5-style-xsl</filename>. To exactly match
generated output, please use a version of the stylesheets
equivalent
- to <filename>docbook-style-xsl-1.74.0-5</filename>. The
+ to <filename>docbook5-style-xsl-1.75.2-3</filename>. The
installation directory for this package corresponds to
the <literal>XSL_STYLE_DIR</literal>
in <filename>doc/Makefile.am</filename> and defaults
- to <filename class="directory">/usr/share/sgml/docbook/xsl-stylesheets</filename>.
+ to <filename class="directory">/usr/share/sgml/docbook/xsl-ns-stylesheets</filename>.
</para>
<para>
@@ -1199,26 +1239,30 @@ indicate a place that may require attention for multi-thread safety.
<para>
For validating the XML document, you'll need
something like <command>xmllint</command> and access to the
- DocBook DTD. These are provided
- by a vendor package like <filename>libxml2</filename>.
+ relevant DocBook schema. These are provided
+ by a vendor package like <filename>libxml2</filename> and <filename>docbook5-schemas-5.0-4</filename>
</para>
<para>
- For PDF output, something that transforms valid XML to PDF is
- required. Possible solutions include
- <ulink url="http://dblatex.sourceforge.net">dblatex</ulink>,
- <command>xmlto</command>, or <command>prince</command>. Other
- options are listed on the DocBook
- web <ulink url="http://wiki.docbook.org/topic/DocBookPublishingTools">pages</ulink>. Please
+ For PDF output, something that transforms valid Docbook XML to PDF is
+ required. Possible solutions include <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dblatex.sourceforge.net">dblatex</link>,
+ <command>xmlto</command>, or <command>prince</command>. Of
+ these, <command>dblatex</command> is the default. Other
+ options are listed on the DocBook web <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wiki.docbook.org/topic/DocBookPublishingTools">pages</link>. Please
consult the <email>libstdc++@gcc.gnu.org</email> list when
preparing printed manuals for current best practice and
suggestions.
</para>
<para>
- Make sure that the XML documentation and markup is valid for
- any change. This can be done easily, with the validation rules
- in the <filename>Makefile</filename>, which is equivalent to doing:
+ For Texinfo output, something that transforms valid Docbook
+ XML to Texinfo is required. The default choice is <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docbook2x.sourceforge.net/">docbook2X</link>.
+ </para>
+
+ <para>
+ Please make sure that the XML documentation and markup is valid for
+ any change. This can be done easily, with the validation rule
+ detailed below, which is equivalent to doing:
</para>
<screen>
@@ -1226,10 +1270,10 @@ indicate a place that may require attention for multi-thread safety.
xmllint --noout --valid <filename>xml/index.xml</filename>
</userinput>
</screen>
- </sect3>
+ </section>
- <sect3 id="docbook.rules">
- <title>Generating the DocBook Files</title>
+ <section xml:id="docbook.rules"><info><title>Generating the DocBook Files</title></info>
+
<para>
The following Makefile rules generate (in order): an HTML
@@ -1254,12 +1298,18 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
<screen><userinput>make doc-xml-validate-docbook</userinput></screen>
</para>
- </sect3>
+ <para>
+ Generated files are output into separate sub directores of
+ <filename class="directory">doc/docbook/</filename> in the
+ build directory, based on the output format. For instance, the
+ HTML docs will be in <filename class="directory">doc/docbook/html</filename>.
+ </para>
+ </section>
- <sect3 id="docbook.examples">
- <title>File Organization and Basics</title>
+ <section xml:id="docbook.examples"><info><title>File Organization and Basics</title></info>
+
- <literallayout>
+ <literallayout class="normal">
<emphasis>Which files are important</emphasis>
All Docbook files are in the directory
@@ -1320,24 +1370,25 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
&lt;/set&gt;
</literallayout>
- </sect3>
+ </section>
- <sect3 id="docbook.markup">
- <title>Markup By Example</title>
+ <section xml:id="docbook.markup"><info><title>Markup By Example</title></info>
+
<para>
Complete details on Docbook markup can be found in the DocBook
Element Reference,
- <ulink url="http://www.docbook.org/tdg/en/html/part2.html">online</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.docbook.org/tdg/en/html/part2.html">online</link>.
An incomplete reference for HTML to Docbook conversion is
detailed in the table below.
</para>
-<table frame='all'>
+<table frame="all">
<title>HTML to Docbook XML Markup Comparison</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<thead>
<row>
@@ -1398,7 +1449,7 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
<entry>&lt;emphasis&gt;</entry>
</row>
<row>
- <entry>&quot;</entry>
+ <entry>"</entry>
<entry>&lt;quote&gt;</entry>
</row>
</tbody>
@@ -1410,11 +1461,12 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
equivalents are listed in the table below.
</para>
-<table frame='all'>
+<table frame="all">
<title>Docbook XML Element Use</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<thead>
<row>
@@ -1481,42 +1533,112 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
</tgroup>
</table>
- </sect3>
- </sect2>
+ </section>
+ </section>
- <sect2 id="doc_style.combines">
- <title>Combines</title>
+ <section xml:id="doc_style.combines"><info><title>Combines</title></info>
+
- <sect3 id="combines.rules">
- <title>Generating Combines and Assemblages</title>
+ <section xml:id="combines.rules"><info><title>Generating Combines and Assemblages</title></info>
+
<para>
The following Makefile rules are defaults, and are usually
- aliased to variable rules.
+ aliased to more detailed rules. They are shortcuts for
+ generating HTML, PDF, Texinfo, XML, or man files and then collecting
+ the generated files into the build directory's doc directory.
</para>
+<variablelist>
+
+<varlistentry><term>
+ <emphasis>make doc-html</emphasis>
+ </term>
+<listitem>
<para>
- <screen><userinput>make doc-html</userinput></screen>
+ Generates multi-page HTML documentation in the following directories:
</para>
+ <para>
+ <filename class="directory">doc/libstdc++-api.html</filename>
+ </para>
+ <para>
+ <filename class="directory">doc/libstdc++-manual.html</filename>
+ </para>
+</listitem>
+</varlistentry>
+
+<varlistentry><term>
+ <emphasis>make doc-man</emphasis>
+ </term>
+<listitem>
+ <para>
+ Generates man pages in the following directory:
+ </para>
+ <para>
+ <filename class="directory">doc/libstdc++-api.man</filename>
+ </para>
+</listitem>
+</varlistentry>
+
+<varlistentry><term>
+ <emphasis>make doc-pdf</emphasis>
+ </term>
+<listitem>
+ <para>
+ Generates indexed PDF documentation in the following files:
+ </para>
+ <para>
+ <filename>doc/libstdc++-api.pdf</filename>
+ </para>
+ <para>
+ <filename>doc/libstdc++-manual.pdf</filename>
+ </para>
+</listitem>
+</varlistentry>
+<varlistentry><term>
+ <emphasis>make doc-texinfo</emphasis>
+ </term>
+<listitem>
+ <para>
+ Generates Texinfo documentation in the following files:
+ </para>
<para>
- <screen><userinput>make doc-man</userinput></screen>
+ <filename>doc/libstdc++-manual.texinfo</filename>
</para>
+</listitem>
+</varlistentry>
+<varlistentry><term>
+ <emphasis>make doc-xml</emphasis>
+ </term>
+<listitem>
+ <para>
+ Generates single-file XML documentation in the following files:
+ </para>
<para>
- <screen><userinput>make doc-pdf</userinput></screen>
+ <filename>doc/libstdc++-api.xml</filename>
</para>
- </sect3>
- </sect2>
-</sect1>
+ <para>
+ <filename>doc/libstdc++-manual.xml</filename>
+ </para>
+</listitem>
+</varlistentry>
+
+</variablelist>
+
+
+ </section>
+ </section>
+</section>
-<sect1 id="contrib.design_notes" xreflabel="Design Notes">
+<section xml:id="contrib.design_notes" xreflabel="Design Notes"><info><title>Design Notes</title></info>
<?dbhtml filename="source_design_notes.html"?>
- <title>Design Notes</title>
+
<para>
</para>
- <literallayout>
+ <literallayout class="normal">
The Library
-----------
@@ -2370,6 +2492,6 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
include them via "&lt;backward/hash_map.h&gt;" or "&lt;ext/hash_map&gt;" than
to search the subdirectory itself via a "-I" directive.
</literallayout>
-</sect1>
+</section>
</appendix>
diff --git a/libstdc++-v3/doc/xml/manual/appendix_free.xml b/libstdc++-v3/doc/xml/manual/appendix_free.xml
index 61df179eb3a..86d503c9452 100644
--- a/libstdc++-v3/doc/xml/manual/appendix_free.xml
+++ b/libstdc++-v3/doc/xml/manual/appendix_free.xml
@@ -1,12 +1,14 @@
-<?xml version='1.0'?>
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<appendix id="appendix.free" xreflabel="Free">
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.free" xreflabel="Free">
<?dbhtml filename="appendix_free.html"?>
-<appendixinfo>
+<info><title>
+ Free Software Needs Free Documentation
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Free Documentation</secondary>
+ </indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,15 +17,9 @@
library
</keyword>
</keywordset>
-</appendixinfo>
+</info>
+
-<title>
- Free Software Needs Free Documentation
- <indexterm>
- <primary>Appendix</primary>
- <secondary>Free Documentation</secondary>
- </indexterm>
-</title>
<para>
The biggest deficiency in free operating systems is not in the
@@ -68,7 +64,7 @@ can ill afford to lose manuals this way.
Free documentation, like free software, is a matter of freedom,
not price. The problem with these manuals was not that O'Reilly
Associates charged a price for printed copies--that in itself is fine.
-(The Free Software Foundation <ulink url="http://www.gnu.org/doc/doc.html">sells printed copies</ulink> of
+(The Free Software Foundation <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/doc/doc.html">sells printed copies</link> of
free GNU manuals, too.) But GNU manuals are available in source code
form, while these manuals are available only on paper. GNU manuals
come with permission to copy and modify; the Perl manuals do not.
@@ -167,8 +163,8 @@ check the distribution terms of a manual before you buy it, and
prefer copylefted manuals to non-copylefted ones.
</para>
<para>
-[Note: We now maintain a <ulink url="http://www.fsf.org/licensing/doc/other-free-books.html">web page
-that lists free books available from other publishers</ulink>].
+[Note: We now maintain a <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org/licensing/doc/other-free-books.html">web page
+that lists free books available from other publishers</link>].
</para>
<para>Copyright © 2004, 2005, 2006, 2007 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</para>
diff --git a/libstdc++-v3/doc/xml/manual/appendix_porting.xml b/libstdc++-v3/doc/xml/manual/appendix_porting.xml
index 80884533fab..dc29a35353f 100644
--- a/libstdc++-v3/doc/xml/manual/appendix_porting.xml
+++ b/libstdc++-v3/doc/xml/manual/appendix_porting.xml
@@ -1,12 +1,14 @@
-<?xml version='1.0'?>
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<appendix id="appendix.porting" xreflabel="Porting">
+<appendix xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting" xreflabel="Porting">
<?dbhtml filename="appendix_porting.html"?>
-<appendixinfo>
+<info><title>
+ Porting and Maintenance
+ <indexterm>
+ <primary>Appendix</primary>
+ <secondary>Porting and Maintenance</secondary>
+ </indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,44 +17,32 @@
library
</keyword>
</keywordset>
-</appendixinfo>
+</info>
+
-<title>
- Porting and Maintenance
- <indexterm>
- <primary>Appendix</primary>
- <secondary>Porting and Maintenance</secondary>
- </indexterm>
-</title>
<!-- Hacking the Build System -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="build_hacking.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="build_hacking.xml">
</xi:include>
<!-- Internals: Porting to New Hardware or Operating Systems -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="internals.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="internals.xml">
</xi:include>
<!-- Test -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="test.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="test.xml">
</xi:include>
<!-- ABI Policy and Guidelines -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="abi.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="abi.xml">
</xi:include>
<!-- API Evolution and Deprecation History -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="evolution.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="evolution.xml">
</xi:include>
<!-- Backwards Compatibility -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="backwards_compatibility.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="backwards_compatibility.xml">
</xi:include>
</appendix>
diff --git a/libstdc++-v3/doc/xml/manual/atomics.xml b/libstdc++-v3/doc/xml/manual/atomics.xml
index 345b2b7f6c1..ddeea0185d5 100644
--- a/libstdc++-v3/doc/xml/manual/atomics.xml
+++ b/libstdc++-v3/doc/xml/manual/atomics.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.atomics" xreflabel="Atomics">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.atomics" xreflabel="Atomics">
<?dbhtml filename="atomics.html"?>
-<chapterinfo>
+<info><title>
+ Atomics
+ <indexterm><primary>Atomics</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -18,20 +17,17 @@
atomic
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Atomics
- <indexterm><primary>Atomics</primary></indexterm>
-</title>
<para>
Facilities for atomic operations.
</para>
<!-- Sect1 01 : API -->
-<sect1 id="std.atomics.api">
- <title>API Reference</title>
+<section xml:id="std.atomics.api"><info><title>API Reference</title></info>
+
<para>
All items are declared in the standard header
@@ -56,6 +52,6 @@
<!-- Doxygen XML: api/group__atomics.xml -->
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/auto_ptr.xml b/libstdc++-v3/doc/xml/manual/auto_ptr.xml
index 6c49a5567f3..f62d8f472b4 100644
--- a/libstdc++-v3/doc/xml/manual/auto_ptr.xml
+++ b/libstdc++-v3/doc/xml/manual/auto_ptr.xml
@@ -1,7 +1,8 @@
-<section id="std.util.memory.auto_ptr" xreflabel="auto_ptr">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.auto_ptr" xreflabel="auto_ptr">
<?dbhtml filename="auto_ptr.html"?>
-<sectioninfo>
+<info><title>auto_ptr</title>
<keywordset>
<keyword>
ISO C++
@@ -10,12 +11,12 @@
auto_ptr
</keyword>
</keywordset>
-</sectioninfo>
+</info>
-<title>auto_ptr</title>
-<section id="auto_ptr.limitations">
-<title>Limitations</title>
+
+<section xml:id="auto_ptr.limitations"><info><title>Limitations</title></info>
+
<para>Explaining all of the fun and delicious things that can
happen with misuse of the <classname>auto_ptr</classname> class
@@ -81,8 +82,8 @@
</para>
</section>
-<section id="auto_ptr.using">
-<title>Use in Containers</title>
+<section xml:id="auto_ptr.using"><info><title>Use in Containers</title></info>
+
<para>
</para>
diff --git a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
index c6135530c18..1f7348a0e90 100644
--- a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
+++ b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.appendix.porting.backwards" xreflabel="backwards">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.appendix.porting.backwards" xreflabel="backwards">
<?dbhtml filename="backwards.html"?>
-<sect1info>
+<info><title>Backwards Compatibility</title>
<keywordset>
<keyword>
ISO C++
@@ -10,12 +11,12 @@
backwards
</keyword>
</keywordset>
-</sect1info>
+</info>
-<title>Backwards Compatibility</title>
-<sect2 id="backwards.first">
-<title>First</title>
+
+<section xml:id="backwards.first"><info><title>First</title></info>
+
<para>The first generation GNU C++ library was called libg++. It was a
separate GNU project, although reliably paired with GCC. Rumors imply
@@ -41,15 +42,15 @@ Committee couldn't include everything, and so a lot of those
<para>Portability notes and known implementation limitations are as follows.</para>
-<sect3>
- <title>No <code>ios_base</code></title>
+<section><info><title>No <code>ios_base</code></title></info>
+
<para> At least some older implementations don't have <code>std::ios_base</code>, so you should use <code>std::ios::badbit</code>, <code>std::ios::failbit</code> and <code>std::ios::eofbit</code> and <code>std::ios::goodbit</code>.
</para>
-</sect3>
+</section>
+
+<section><info><title>No <code>cout</code> in <code>ostream.h</code>, no <code>cin</code> in <code>istream.h</code></title></info>
-<sect3>
-<title>No <code>cout</code> in <code>ostream.h</code>, no <code>cin</code> in <code>istream.h</code></title>
<para>
In earlier versions of the standard,
@@ -65,15 +66,15 @@ Committee couldn't include everything, and so a lot of those
<para>This project is no longer maintained or supported, and the sources
archived. For the desperate,
-the <ulink url="http://gcc.gnu.org/extensions.html">GCC extensions
-page</ulink> describes where to find the last libg++ source. The code is
+the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/extensions.html">GCC extensions
+page</link> describes where to find the last libg++ source. The code is
considered replaced and rewritten.
</para>
-</sect3>
-</sect2>
+</section>
+</section>
+
+<section xml:id="backwards.second"><info><title>Second</title></info>
-<sect2 id="backwards.second">
-<title>Second</title>
<para>
The second generation GNU C++ library was called libstdc++, or
@@ -95,8 +96,8 @@ considered replaced and rewritten.
Portability notes and known implementation limitations are as follows.
</para>
-<sect3>
- <title>Namespace <code>std::</code> not supported</title>
+<section><info><title>Namespace <code>std::</code> not supported</title></info>
+
<para>
Some care is required to support C++ compiler and or library
@@ -179,10 +180,10 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
fi
])
</programlisting>
-</sect3>
+</section>
+
+<section><info><title>Illegal iterator usage</title></info>
-<sect3>
-<title>Illegal iterator usage</title>
<para>
The following illustrate implementation-allowed illegal iterator
use, and then correct use.
@@ -209,15 +210,14 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
</para>
</listitem>
</itemizedlist>
-</sect3>
+</section>
-<sect3>
- <title><code>isspace</code> from <filename class="headerfile">cctype</filename> is a macro
- </title>
+<section><info><title><code>isspace</code> from <filename class="headerfile">cctype</filename> is a macro
+ </title></info>
+
<para>
- Glibc 2.0.x and 2.1.x define <filename
- class="headerfile">ctype.h</filename> functionality as macros
+ Glibc 2.0.x and 2.1.x define <filename class="headerfile">ctype.h</filename> functionality as macros
(isspace, isalpha etc.).
</para>
@@ -259,17 +259,16 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
<para>
Another problem arises if you put a <code>using namespace
- std;</code> declaration at the top, and include <filename
- class="headerfile">ctype.h</filename>. This will result in
+ std;</code> declaration at the top, and include <filename class="headerfile">ctype.h</filename>. This will result in
ambiguities between the definitions in the global namespace
(<filename class="headerfile">ctype.h</filename>) and the
definitions in namespace <code>std::</code>
(<code>&lt;cctype&gt;</code>).
</para>
-</sect3>
+</section>
+
+<section><info><title>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></title></info>
-<sect3>
-<title>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></title>
<para>
One solution is to add an autoconf-test for this:
@@ -303,10 +302,10 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
to check for <code>string::at</code> separately.
</para>
-</sect3>
+</section>
+
+<section><info><title>No <code>std::char_traits&lt;char&gt;::eof</code></title></info>
-<sect3>
-<title>No <code>std::char_traits&lt;char&gt;::eof</code></title>
<para>
Use some kind of autoconf test, plus this:
@@ -320,10 +319,10 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
#endif
</programlisting>
-</sect3>
+</section>
+
+<section><info><title>No <code>string::clear</code></title></info>
-<sect3>
-<title>No <code>string::clear</code></title>
<para>
There are two functions for deleting the contents of a string:
@@ -350,28 +349,27 @@ erase(size_type __pos = 0, size_type __n = npos)
version, so you should use <code>erase</code> (which is probably
faster than <code>operator=(charT*)</code>).
</para>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
Removal of <code>ostream::form</code> and <code>istream::scan</code>
extensions
-</title>
+</title></info>
+
<para>
These are no longer supported. Please use stringstreams instead.
</para>
-</sect3>
+</section>
+
+<section><info><title>No <code>basic_stringbuf</code>, <code>basic_stringstream</code></title></info>
-<sect3>
-<title>No <code>basic_stringbuf</code>, <code>basic_stringstream</code></title>
<para>
Although the ISO standard <code>i/ostringstream</code>-classes are
provided, (<filename class="headerfile">sstream</filename>), for
compatibility with older implementations the pre-ISO
- <code>i/ostrstream</code> (<filename
- class="headerfile">strstream</filename>) interface is also provided,
+ <code>i/ostrstream</code> (<filename class="headerfile">strstream</filename>) interface is also provided,
with these caveats:
</para>
@@ -484,34 +482,33 @@ any = temp;
</programlisting>
<para>
- Another example of using stringstreams is in <link
- linkend="strings.string.shrink">this howto</link>.
+ Another example of using stringstreams is in <link linkend="strings.string.shrink">this howto</link>.
</para>
<para> There is additional information in the libstdc++-v2 info files, in
particular <quote>info iostream</quote>.
</para>
-</sect3>
+</section>
-<sect3>
- <title>Little or no wide character support</title>
+<section><info><title>Little or no wide character support</title></info>
+
<para>
Classes <classname>wstring</classname> and
<classname>char_traits&lt;wchar_t&gt;</classname> are
not supported.
</para>
-</sect3>
+</section>
-<sect3>
- <title>No templatized iostreams</title>
+<section><info><title>No templatized iostreams</title></info>
+
<para>
Classes <classname>wfilebuf</classname> and
<classname>wstringstream</classname> are not supported.
</para>
-</sect3>
+</section>
+
+<section><info><title>Thread safety issues</title></info>
-<sect3>
-<title>Thread safety issues</title>
<para>
Earlier GCC releases had a somewhat different approach to
@@ -541,10 +538,9 @@ particular <quote>info iostream</quote>.
written against per-CPU-architecture spinlocks and other parts
against the gthr.h abstraction layer which is provided by gcc. A
minor problem that pops up every so often is different
- interpretations of what &quot;thread-safe&quot; means for a
- library (not a general program). We currently use the <ulink
- url="http://www.sgi.com/tech/stl/thread_safety.html">same
- definition that SGI</ulink> uses for their STL subset. However,
+ interpretations of what "thread-safe" means for a
+ library (not a general program). We currently use the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">same
+ definition that SGI</link> uses for their STL subset. However,
the exception for read-only containers only applies to the STL
components. This definition is widely-used and something similar
will be used in the next version of the C++ standard library.
@@ -554,23 +550,22 @@ particular <quote>info iostream</quote>.
Here is a small link farm to threads (no pun) in the mail
archives that discuss the threading problem. Each link is to the
first relevant message in the thread; from there you can use
- &quot;Thread Next&quot; to move down the thread. This farm is in
+ "Thread Next" to move down the thread. This farm is in
latest-to-oldest order.
</para>
<itemizedlist>
<listitem>
<para>
- Our threading expert Loren gives a breakdown of <ulink
- url="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
- six situations involving threads</ulink> for the 3.0
+ Our threading expert Loren gives a breakdown of <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
+ six situations involving threads</link> for the 3.0
release series.
</para>
</listitem>
<listitem>
<para>
- <ulink url="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
- This message</ulink> inspired a recent updating of issues with
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
+ This message</link> inspired a recent updating of issues with
threading and the SGI STL library. It also contains some
example POSIX-multithreaded STL code.
</para>
@@ -584,12 +579,12 @@ particular <quote>info iostream</quote>.
with work to restore them. Many of the points have been
superseded anyhow.)
</para>
-</sect3>
+</section>
+
+</section>
-</sect2>
+<section xml:id="backwards.third"><info><title>Third</title></info>
-<sect2 id="backwards.third">
-<title>Third</title>
<para> The third generation GNU C++ library is called libstdc++, or
libstdc++-v3.
@@ -606,8 +601,8 @@ libstdc++-v3.
<para>Portability notes and known implementation limitations are as follows.</para>
-<sect3>
-<title>Pre-ISO headers moved to backwards or removed</title>
+<section><info><title>Pre-ISO headers moved to backwards or removed</title></info>
+
<para> The pre-ISO C++ headers
(<code>iostream.h</code>, <code>defalloc.h</code> etc.) are
@@ -621,8 +616,8 @@ libstdc++-v3.
</para>
<para>For those of you new to ISO C++ (welcome, time travelers!), no,
that isn't a typo. Yes, the headers really have new names.
- Marshall Cline's C++ FAQ Lite has a good explanation in <ulink url="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item
- [27.4]</ulink>.
+ Marshall Cline's C++ FAQ Lite has a good explanation in <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item
+ [27.4]</link>.
</para>
<para> Some include adjustment may be required. What follows is an
@@ -691,10 +686,10 @@ directive <code>using namespace std;</code> can be put at the global
scope. This should be enough to get this code compiling, assuming the
other usage is correct.
</para>
-</sect3>
+</section>
+
+<section><info><title>Extension headers hash_map, hash_set moved to ext or backwards</title></info>
-<sect3>
-<title>Extension headers hash_map, hash_set moved to ext or backwards</title>
<para>At this time most of the features of the SGI STL extension have been
replaced by standardized libraries.
@@ -781,11 +776,11 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
fi
])
</programlisting>
-</sect3>
+</section>
+
+<section><info><title>No <code>ios::nocreate/ios::noreplace</code>.
+</title></info>
-<sect3>
-<title>No <code>ios::nocreate/ios::noreplace</code>.
-</title>
<para> The existence of <code>ios::nocreate</code> being used for
input-streams has been confirmed, most probably because the author
@@ -800,12 +795,12 @@ decide whether you want to create/replace or not. To my knowledge,
even older implementations support <code>app</code>, <code>ate</code>
and <code>trunc</code> (except for <code>app</code> ?).
</para>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
No <code>stream::attach(int fd)</code>
-</title>
+</title></info>
+
<para>
Phil Edwards writes: It was considered and rejected for the ISO
@@ -825,22 +820,22 @@ No <code>stream::attach(int fd)</code>
<para>
An extension is available that implements this.
<filename class="headerfile">ext/stdio_filebuf.h</filename> contains a derived class called
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code>__gnu_cxx::stdio_filebuf</code></ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code>__gnu_cxx::stdio_filebuf</code></link>.
This class can be constructed from a C <code>FILE*</code> or a file
descriptor, and provides the <code>fd()</code> function.
</para>
<para>
For another example of this, refer to
- <ulink url="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</link>
by Nicolai Josuttis.
</para>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
Support for C++98 dialect.
-</title>
+</title></info>
+
<para>Check for complete library coverage of the C++1998/2003 standard.
</para>
@@ -911,12 +906,12 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [
fi
])
</programlisting>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
Support for C++TR1 dialect.
-</title>
+</title></info>
+
<para>Check for library coverage of the TR1 standard.
</para>
@@ -1002,13 +997,13 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [
fi
])
</programlisting>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
Support for C++0x dialect.
-</title>
+</title></info>
+
<para>Check for baseline language coverage in the compiler for the C++0xstandard.
</para>
@@ -1234,63 +1229,54 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
fi
])
</programlisting>
-</sect3>
+</section>
-<sect3>
-<title>
+<section><info><title>
Container::iterator_type is not necessarily Container::value_type*
-</title>
+</title></info>
+
<para>
This is a change in behavior from the previous version. Now, most
<type>iterator_type</type> typedefs in container classes are POD
objects, not <type>value_type</type> pointers.
</para>
-</sect3>
+</section>
+
+</section>
-</sect2>
+<bibliography xml:id="backwards.biblio"><info><title>Bibliography</title></info>
-<bibliography id="backwards.biblio">
-<title>Bibliography</title>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.kegel.com/gcc/gcc4.html">
- <citetitle>
- Migrating to GCC 4.1
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.kegel.com/gcc/gcc4.html" class="uri">
</biblioid>
- <author>
- <firstname>Dan</firstname>
- <surname>Kegel</surname>
- </author>
+ <citetitle>
+ Migrating to GCC 4.1
+ </citetitle>
+
+ <author><personname><firstname>Dan</firstname><surname>Kegel</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://lists.debian.org/debian-gcc/2006/03/msg00405.html">
- <citetitle>
- Building the Whole Debian Archive with GCC 4.1: A Summary
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" class="uri">
</biblioid>
- <author>
- <firstname>Martin</firstname>
- <surname>Michlmayr</surname>
- </author>
+ <citetitle>
+ Building the Whole Debian Archive with GCC 4.1: A Summary
+ </citetitle>
+
+ <author><personname><firstname>Martin</firstname><surname>Michlmayr</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html">
- <citetitle>
- Migration guide for GCC-3.2
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" class="uri">
</biblioid>
+ <citetitle>
+ Migration guide for GCC-3.2
+ </citetitle>
+
</biblioentry>
</bibliography>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml b/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
index 7b90e3a1d55..19b190661f0 100644
--- a/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.ext.allocator.bitmap" xreflabel="bitmap_allocator">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.allocator.bitmap" xreflabel="bitmap_allocator">
<?dbhtml filename="bitmap_allocator.html"?>
-<sect1info>
+<info><title>bitmap_allocator</title>
<keywordset>
<keyword>
ISO C++
@@ -10,15 +11,15 @@
allocator
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>bitmap_allocator</title>
<para>
</para>
-<sect2 id="allocator.bitmap.design">
-<title>Design</title>
+<section xml:id="allocator.bitmap.design"><info><title>Design</title></info>
+
<para>
As this name suggests, this allocator uses a bit-map to keep track
@@ -53,13 +54,13 @@
layer.
</para>
-</sect2>
+</section>
-<sect2 id="allocator.bitmap.impl">
-<title>Implementation</title>
+<section xml:id="allocator.bitmap.impl"><info><title>Implementation</title></info>
-<sect3 id="bitmap.impl.free_list_store" xreflabel="Free List Store">
- <title>Free List Store</title>
+
+<section xml:id="bitmap.impl.free_list_store" xreflabel="Free List Store"><info><title>Free List Store</title></info>
+
<para>
The Free List Store (referred to as FLS for the remaining part of this
@@ -121,10 +122,10 @@ else return false.</para></listitem>
Currently, (3) is being used with a value of 36% Maximum wastage per
Super Block.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.super_block" xreflabel="Super Block">
- <title>Super Block</title>
+<section xml:id="bitmap.impl.super_block" xreflabel="Super Block"><info><title>Super Block</title></info>
+
<para>
A super block is the block of memory acquired from the FLS from
@@ -144,10 +145,10 @@ else return false.</para></listitem>
getting / returning Super Bocks to and from the OS using operator new
as defined by the C++ standard.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.super_block_data" xreflabel="Super Block Data">
- <title>Super Block Data Layout</title>
+<section xml:id="bitmap.impl.super_block_data" xreflabel="Super Block Data"><info><title>Super Block Data Layout</title></info>
+
<para>
Each Super Block will be of some size that is a multiple of the
number of Bits Per Block. Typically, this value is chosen as
@@ -165,14 +166,15 @@ else return false.</para></listitem>
(assume a 32-bit system where, size_t is a 32-bit entity).
</para>
-<table frame='all'>
+<table frame="all">
<title>Bitmap Allocator Memory Map</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -219,10 +221,10 @@ else return false.</para></listitem>
x 2,
which is 8-bytes, or 2 x sizeof(size_t).
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.max_wasted" xreflabel="Max Wasted Percentage">
- <title>Maximum Wasted Percentage</title>
+<section xml:id="bitmap.impl.max_wasted" xreflabel="Max Wasted Percentage"><info><title>Maximum Wasted Percentage</title></info>
+
<para>
This has nothing to do with the algorithm per-se,
@@ -260,10 +262,10 @@ For map/multimap: k = 12, and c = 4 (int and double), we get: 37.524%
create a function that returns the Max_Wastage_Percentage for us to use.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.allocate" xreflabel="Allocate">
- <title><function>allocate</function></title>
+<section xml:id="bitmap.impl.allocate" xreflabel="Allocate"><info><title><function>allocate</function></title></info>
+
<para>
The allocate function is specialized for single object allocation
@@ -366,10 +368,10 @@ combination of the next-fit and first-fit algorithm optimized ONLY for
single object allocations.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.deallocate" xreflabel="Deallocate">
- <title><function>deallocate</function></title>
+<section xml:id="bitmap.impl.deallocate" xreflabel="Deallocate"><info><title><function>deallocate</function></title></info>
+
<para>
The deallocate function again is specialized for single objects ONLY.
For all n belonging to &gt; 1, the operator delete is called without
@@ -410,13 +412,13 @@ single object allocations.
invariant is maintained by making sure that _S_last_request and
_S_last_dealloc_index point to valid locations within the vector.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.questions" xreflabel="Questions">
- <title>Questions</title>
+<section xml:id="bitmap.impl.questions" xreflabel="Questions"><info><title>Questions</title></info>
+
- <sect4 id="bitmap.impl.question.1" xreflabel="Question 1">
- <title>1</title>
+ <section xml:id="bitmap.impl.question.1" xreflabel="Question 1"><info><title>1</title></info>
+
<para>
Q1) The "Data Layout" section is
cryptic. I have no idea of what you are trying to say. Layout of what?
@@ -429,10 +431,10 @@ general formula for calculating the size of a super block is
32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
systems.
</para>
- </sect4>
+ </section>
- <sect4 id="bitmap.impl.question.2" xreflabel="Question 2">
- <title>2</title>
+ <section xml:id="bitmap.impl.question.2" xreflabel="Question 2"><info><title>2</title></info>
+
<para>
And since I just mentioned the
term `each bitmap', what in the world is meant by it? What does each
@@ -452,10 +454,10 @@ Block a bitmap as well?
whose exact number for a super-block of a given size I have just
mentioned.
</para>
- </sect4>
+ </section>
- <sect4 id="bitmap.impl.question.3" xreflabel="Question 3">
- <title>3</title>
+ <section xml:id="bitmap.impl.question.3" xreflabel="Question 3"><info><title>3</title></info>
+
<para>
How do the allocate and deallocate functions work in regard to
bitmaps?
@@ -492,11 +494,11 @@ Block a bitmap as well?
The bit-map now looks like this:
1111111111111111111111111111111111111111111111111111111111111110
</para>
- </sect4>
-</sect3>
+ </section>
+</section>
-<sect3 id="bitmap.impl.locality" xreflabel="Locality">
- <title>Locality</title>
+<section xml:id="bitmap.impl.locality" xreflabel="Locality"><info><title>Locality</title></info>
+
<para>
Another issue would be whether to keep the all bitmaps in a
separate area in memory, or to keep them near the actual blocks
@@ -522,10 +524,10 @@ equivalent.</para></listitem>
single object allocations, though it preserves the locality of blocks
very well when they are returned back to the allocator.
</para>
-</sect3>
+</section>
-<sect3 id="bitmap.impl.grow_policy" xreflabel="Grow Policy">
- <title>Overhead and Grow Policy</title>
+<section xml:id="bitmap.impl.grow_policy" xreflabel="Grow Policy"><info><title>Overhead and Grow Policy</title></info>
+
<para>
Expected overhead per block would be 1 bit in memory. Also, once
the address of the free list has been found, the cost for
@@ -552,8 +554,8 @@ equivalent.</para></listitem>
which can fit exactly in a CPU register. Hence, the term given is
exponential growth of the internal pool.
</para>
-</sect3>
+</section>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/build_hacking.xml b/libstdc++-v3/doc/xml/manual/build_hacking.xml
index fd134bdea45..0746392a2b5 100644
--- a/libstdc++-v3/doc/xml/manual/build_hacking.xml
+++ b/libstdc++-v3/doc/xml/manual/build_hacking.xml
@@ -1,7 +1,8 @@
-<sect1 id="appendix.porting.build_hacking" xreflabel="Build Hacking">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.build_hacking" xreflabel="Build Hacking">
<?dbhtml filename="build_hacking.html"?>
-<sect1info>
+<info><title>Configure and Build Hacking</title>
<keywordset>
<keyword>
C++
@@ -19,15 +20,14 @@
shared
</keyword>
</keywordset>
-</sect1info>
+</info>
-<title>Configure and Build Hacking</title>
-<sect2 id="build_hacking.prereq">
- <title>Prerequisites</title>
+
+<section xml:id="build_hacking.prereq"><info><title>Prerequisites</title></info>
+
<para>
- As noted <ulink
- url="http://gcc.gnu.org/install/prerequisites.html">previously</ulink>,
+ As noted <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">previously</link>,
certain other tools are necessary for hacking on files that
control configure (<code>configure.ac</code>,
<code>acinclude.m4</code>) and make
@@ -38,10 +38,10 @@
the auto-tools used, so please try to play nicely with the
neighbors.
</para>
-</sect2>
+</section>
-<sect2 id="build_hacking.map">
- <title>Overview: What Comes from Where</title>
+<section xml:id="build_hacking.map"><info><title>Overview: What Comes from Where</title></info>
+
<screen>
<inlinemediaobject>
@@ -61,14 +61,14 @@
<code>"aclocal-1.11 &amp;&amp; autoconf-2.64 &amp;&amp;
autoheader-2.64 &amp;&amp; automake-1.11"</code> The version
numbers may be absent entirely or otherwise vary depending on
- <ulink url="http://gcc.gnu.org/install/prerequisites.html">the
- current requirements</ulink> and your vendor's choice of
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">the
+ current requirements</link> and your vendor's choice of
installation names.
</para>
-</sect2>
+</section>
-<sect2 id="build_hacking.scripts">
- <title>Storing Information in non-AC files (like configure.host)</title>
+<section xml:id="build_hacking.scripts"><info><title>Storing Information in non-AC files (like configure.host)</title></info>
+
<para>
Until that glorious day when we can use AC_TRY_LINK with a
@@ -97,10 +97,10 @@
to properly find them all when generating configure. I would
discourage that.
</para>
-</sect2>
+</section>
-<sect2 id="build_hacking.conventions">
- <title>Coding and Commenting Conventions</title>
+<section xml:id="build_hacking.conventions"><info><title>Coding and Commenting Conventions</title></info>
+
<para>
Most comments should use {octothorpes, shibboleths, hash marks,
@@ -122,10 +122,10 @@
<code>$target_alias</code>. The single exception is in
configure.ac, for automake+dejagnu's sake.
</para>
-</sect2>
+</section>
-<sect2 id="build_hacking.acinclude">
- <title>The acinclude.m4 layout</title>
+<section xml:id="build_hacking.acinclude"><info><title>The acinclude.m4 layout</title></info>
+
<para>
The nice thing about acinclude.m4/aclocal.m4 is that macros aren't
actually performed/called/expanded/whatever here, just loaded. So
@@ -213,10 +213,10 @@
present otherwise stuff magically goes wonky.
</para>
-</sect2>
+</section>
-<sect2 id="build_hacking.enable">
- <title><constant>GLIBCXX_ENABLE</constant>, the <literal>--enable</literal> maker</title>
+<section xml:id="build_hacking.enable"><info><title><constant>GLIBCXX_ENABLE</constant>, the <literal>--enable</literal> maker</title></info>
+
<para>
All the GLIBCXX_ENABLE_FOO macros use a common helper,
@@ -304,8 +304,7 @@
<para>
If you're wondering what that line noise in the last example was,
that's how you embed autoconf special characters in output text.
- They're called <ulink
- url="http://www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs"><emphasis>quadrigraphs</emphasis></ulink>
+ They're called <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs"><emphasis>quadrigraphs</emphasis></link>
and you should use them whenever necessary.
</para>
</listitem>
@@ -349,6 +348,6 @@
message.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/codecvt.xml b/libstdc++-v3/doc/xml/manual/codecvt.xml
index a2a90cfdb5b..0c642f9f904 100644
--- a/libstdc++-v3/doc/xml/manual/codecvt.xml
+++ b/libstdc++-v3/doc/xml/manual/codecvt.xml
@@ -1,7 +1,8 @@
-<section id="std.localization.facet.codecvt" xreflabel="codecvt">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.facet.codecvt" xreflabel="codecvt">
<?dbhtml filename="codecvt.html"?>
-<sectioninfo>
+<info><title>codecvt</title>
<keywordset>
<keyword>
ISO C++
@@ -10,9 +11,9 @@
codecvt
</keyword>
</keywordset>
-</sectioninfo>
+</info>
+
-<title>codecvt</title>
<para>
The standard class codecvt attempts to address conversions between
@@ -30,8 +31,8 @@ specializations for wide and narrow characters and the
implementation-provided extended functionality are given.
</para>
-<section id="facet.codecvt.req">
-<title>Requirements</title>
+<section xml:id="facet.codecvt.req"><info><title>Requirements</title></info>
+
<para>
Around page 425 of the C++ Standard, this charming heading comes into view:
@@ -110,11 +111,11 @@ template parameter, imply an implementation strategy that is mostly
mcsrtombs and wcsrtombs in particular.</para>
</section>
-<section id="facet.codecvt.design">
-<title>Design</title>
+<section xml:id="facet.codecvt.design"><info><title>Design</title></info>
+
-<section id="codecvt.design.wchar_t_size">
- <title><type>wchar_t</type> Size</title>
+<section xml:id="codecvt.design.wchar_t_size"><info><title><type>wchar_t</type> Size</title></info>
+
<para>
The simple implementation detail of wchar_t's size seems to
@@ -133,11 +134,11 @@ mcsrtombs and wcsrtombs in particular.</para>
</para>
</section>
-<section id="codecvt.design.unicode">
- <title>Support for Unicode</title>
+<section xml:id="codecvt.design.unicode"><info><title>Support for Unicode</title></info>
+
<para>
Probably the most frequently asked question about code conversion
- is: &quot;So dudes, what's the deal with Unicode strings?&quot;
+ is: "So dudes, what's the deal with Unicode strings?"
The dude part is optional, but apparently the usefulness of
Unicode strings is pretty widely appreciated. Sadly, this specific
encoding (And other useful encodings like UTF8, UCS4, ISO 8859-10,
@@ -190,7 +191,7 @@ UTF-16, UTF8, UTF16).
<para>
For iconv-based implementations, string literals for each of the
-encodings (i.e. &quot;UCS-2&quot; and &quot;UTF-8&quot;) are necessary,
+encodings (i.e. "UCS-2" and "UTF-8") are necessary,
although for other,
non-iconv implementations a table of enumerated values or some other
mechanism may be required.
@@ -204,14 +205,14 @@ mechanism may be required.
<listitem><para>
Some encodings require explicit endian-ness. As such, some kind
of endian marker or other byte-order marker will be necessary. See
- &quot;Footnotes for C/C++ developers&quot; in Haible for more information on
+ "Footnotes for C/C++ developers" in Haible for more information on
UCS-2/Unicode endian issues. (Summary: big endian seems most likely,
however implementations, most notably Microsoft, vary.)
</para></listitem>
<listitem><para>
Types representing the conversion state, for conversions involving
- the machinery in the &quot;C&quot; library, or the conversion descriptor, for
+ the machinery in the "C" library, or the conversion descriptor, for
conversions using iconv (such as the type iconv_t.) Note that the
conversion descriptor encodes more information than a simple encoding
state type.
@@ -238,13 +239,13 @@ mechanism may be required.
</itemizedlist>
</section>
-<section id="codecvt.design.issues">
- <title>Other Issues</title>
+<section xml:id="codecvt.design.issues"><info><title>Other Issues</title></info>
+
<para>
In addition, multi-threaded and multi-locale environments also impact
the design and requirements for code conversions. In particular, they
affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
-when implemented using standard &quot;C&quot; functions.
+when implemented using standard "C" functions.
</para>
<para>
@@ -267,7 +268,7 @@ incorrect. Yikes!
<para>
The last, and fundamental problem, is the assumption of a global
-locale for all the &quot;C&quot; functions referenced above. For something like
+locale for all the "C" functions referenced above. For something like
C++ iostreams (where codecvt is explicitly used) the notion of
multiple locales is fundamental. In practice, most users may not run
into this limitation. However, as a quality of implementation issue,
@@ -288,8 +289,8 @@ LC_CTYPE category implements.
</section>
-<section id="facet.codecvt.impl">
-<title>Implementation</title>
+<section xml:id="facet.codecvt.impl"><info><title>Implementation</title></info>
+
<para>
The two required specializations are implemented as follows:
@@ -434,8 +435,8 @@ codecvt usage.
</section>
-<section id="facet.codecvt.use">
-<title>Use</title>
+<section xml:id="facet.codecvt.use"><info><title>Use</title></info>
+
<para>A conversions involving string literal.</para>
<programlisting>
@@ -479,8 +480,8 @@ codecvt usage.
</section>
-<section id="facet.codecvt.future">
-<title>Future</title>
+<section xml:id="facet.codecvt.future"><info><title>Future</title></info>
+
<itemizedlist>
<listitem>
<para>
@@ -521,7 +522,7 @@ codecvt usage.
</para></listitem>
<listitem><para>
- how to synchronize the &quot;C&quot; and &quot;C++&quot;
+ how to synchronize the "C" and "C++"
conversion information?
</para></listitem>
@@ -535,21 +536,15 @@ codecvt usage.
</section>
-<bibliography id="facet.codecvt.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="facet.codecvt.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <title>
+ <citetitle>
The GNU C Library
- </title>
- <author>
- <surname>McGrath</surname>
- <firstname>Roland</firstname>
- </author>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2007</year>
<holder>FSF</holder>
@@ -560,23 +555,20 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Correspondence
- </title>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2002</year>
- <holder></holder>
+ <holder/>
</copyright>
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 14882:1998 Programming languages - C++
- </title>
+ </citetitle>
<copyright>
<year>1998</year>
<holder>ISO</holder>
@@ -584,9 +576,9 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 9899:1999 Programming languages - C
- </title>
+ </citetitle>
<copyright>
<year>1999</year>
<holder>ISO</holder>
@@ -594,13 +586,11 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.opengroup.org/austin">
- <citetitle>
- System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin" class="uri">
</biblioid>
+ <citetitle>
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </citetitle>
<copyright>
<year>2008</year>
<holder>
@@ -611,13 +601,10 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
The C++ Programming Language, Special Edition
- </title>
- <author>
- <surname>Stroustrup</surname>
- <firstname>Bjarne</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley, Inc.</holder>
@@ -632,20 +619,14 @@ codecvt usage.
<biblioentry>
- <title>
+ <citetitle>
Standard C++ IOStreams and Locales
- </title>
+ </citetitle>
<subtitle>
Advanced Programmer's Guide and Reference
</subtitle>
- <author>
- <surname>Langer</surname>
- <firstname>Angelika</firstname>
- </author>
- <author>
- <surname>Kreft</surname>
- <firstname>Klaus</firstname>
- </author>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder>
@@ -658,46 +639,34 @@ codecvt usage.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.lysator.liu.se/c/na1.html">
- <citetitle>
- A brief description of Normative Addendum 1
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.lysator.liu.se/c/na1.html" class="uri">
</biblioid>
- <author>
- <surname>Feather</surname>
- <firstname>Clive</firstname>
- </author>
+ <citetitle>
+ A brief description of Normative Addendum 1
+ </citetitle>
+
+ <author><personname><surname>Feather</surname><firstname>Clive</firstname></personname></author>
<pagenums>Extended Character Sets</pagenums>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://tldp.org/HOWTO/Unicode-HOWTO.html">
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tldp.org/HOWTO/Unicode-HOWTO.html" class="uri">
+ </biblioid>
<citetitle>
The Unicode HOWTO
</citetitle>
- </ulink>
- </biblioid>
- <author>
- <surname>Haible</surname>
- <firstname>Bruno</firstname>
- </author>
+
+ <author><personname><surname>Haible</surname><firstname>Bruno</firstname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
- <citetitle>
- UTF-8 and Unicode FAQ for Unix/Linux
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" class="uri">
</biblioid>
- <author>
- <surname>Khun</surname>
- <firstname>Markus</firstname>
- </author>
+ <citetitle>
+ UTF-8 and Unicode FAQ for Unix/Linux
+ </citetitle>
+
+ <author><personname><surname>Khun</surname><firstname>Markus</firstname></personname></author>
</biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/concurrency.xml b/libstdc++-v3/doc/xml/manual/concurrency.xml
index f6a7366ff0d..e3dd9b9468a 100644
--- a/libstdc++-v3/doc/xml/manual/concurrency.xml
+++ b/libstdc++-v3/doc/xml/manual/concurrency.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.concurrency" xreflabel="Concurrency">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.concurrency" xreflabel="Concurrency">
<?dbhtml filename="concurrency.html"?>
-<chapterinfo>
+<info><title>
+ Concurrency
+ <indexterm><primary>Concurrency</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -27,12 +26,9 @@
condition_variable
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Concurrency
- <indexterm><primary>Concurrency</primary></indexterm>
-</title>
<para>
Facilities for concurrent operation, and control thereof.
@@ -40,8 +36,8 @@
<!-- Sect1 01 : API -->
-<sect1 id="std.concurrency.api">
- <title>API Reference</title>
+<section xml:id="std.concurrency.api"><info><title>API Reference</title></info>
+
<para>
All items are declared in one of four standard header files.
@@ -80,6 +76,6 @@
<!-- Doxygen XML: api/group__concurrency.xml -->
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml b/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
index 2b4a09ad8ea..9092c8def61 100644
--- a/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
+++ b/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
@@ -1,12 +1,8 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="manual.ext.concurrency" xreflabel="Concurrency Extensions">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.concurrency" xreflabel="Concurrency Extensions">
<?dbhtml filename="ext_concurrency.html"?>
-<chapterinfo>
+<info><title>Concurrency</title>
<keywordset>
<keyword>
ISO C++
@@ -15,15 +11,15 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>Concurrency</title>
-<sect1 id="manual.ext.concurrency.design" xreflabel="Design">
- <title>Design</title>
+<section xml:id="manual.ext.concurrency.design" xreflabel="Design"><info><title>Design</title></info>
+
- <sect2 id="manual.ext.concurrency.design.threads" xreflabel="Threads API">
- <title>Interface to Locks and Mutexes</title>
+ <section xml:id="manual.ext.concurrency.design.threads" xreflabel="Threads API"><info><title>Interface to Locks and Mutexes</title></info>
+
<para>The file &lt;ext/concurrence.h&gt; contains all the higher-level
constructs for playing with threads. In contrast to the atomics layer,
@@ -78,10 +74,10 @@ locks it during construction of <code>__scoped_locke</code> and
unlocks it during destruction. This is an efficient way of locking
critical sections, while retaining exception-safety.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.ext.concurrency.design.atomics" xreflabel="Atomic API">
- <title>Interface to Atomic Functions</title>
+ <section xml:id="manual.ext.concurrency.design.atomics" xreflabel="Atomic API"><info><title>Interface to Atomic Functions</title></info>
+
<para>
@@ -186,15 +182,15 @@ _GLIBCXX_WRITE_MEM_BARRIER
Which expand to the appropriate write and read barrier required by the
host hardware and operating system.
</para>
- </sect2>
+ </section>
-</sect1>
+</section>
-<sect1 id="manual.ext.concurrency.impl" xreflabel="Implementation">
- <title>Implementation</title>
- <sect2 id="manual.ext.concurrency.impl.atomic_fallbacks" xreflabel="Atomic F">
- <title>Using Builtin Atomic Functions</title>
+<section xml:id="manual.ext.concurrency.impl" xreflabel="Implementation"><info><title>Implementation</title></info>
+
+ <section xml:id="manual.ext.concurrency.impl.atomic_fallbacks" xreflabel="Atomic F"><info><title>Using Builtin Atomic Functions</title></info>
+
<para>The functions for atomic operations described above are either
implemented via compiler intrinsics (if the underlying host is
@@ -253,16 +249,16 @@ hardware, hand-crafted assembly is selected. This is the case for the following
<para>And for the rest, a simulated atomic lock via pthreads.
</para>
-<para> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html"> documentation</ulink>.
+<para> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html"> documentation</link>.
</para>
<para> More details on the library fallbacks from the porting <link linkend="internals.thread_safety">section</link>.
</para>
- </sect2>
- <sect2 id="manual.ext.concurrency.impl.thread" xreflabel="Pthread">
- <title>Thread Abstraction</title>
+ </section>
+ <section xml:id="manual.ext.concurrency.impl.thread" xreflabel="Pthread"><info><title>Thread Abstraction</title></info>
+
<para>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
the thread interface for GCC. This layer is called "gthread," and is
@@ -276,7 +272,7 @@ the current host. In libstdc++ implementation files,
</para>
<para>Within libstdc++ sources, all calls to underlying thread functionality
-use this layer. More detail as to the specific interface can be found in the source <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html">documentation</ulink>.
+use this layer. More detail as to the specific interface can be found in the source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00883_source.html">documentation</link>.
</para>
<para>By design, the gthread layer is interoperable with the types,
@@ -285,12 +281,12 @@ including <code>pthread_t</code>, <code>pthread_once_t</code>, <code>pthread_cre
etc.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
-<sect1 id="manual.ext.concurrency.use" xreflabel="Use">
+<section xml:id="manual.ext.concurrency.use" xreflabel="Use"><info><title>Use</title></info>
- <title>Use</title>
+
<para>Typical usage of the last two constructs is demonstrated as follows:
</para>
@@ -332,6 +328,6 @@ and <code>__concurrence_broadcast_error</code>.
</para>
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
index 8cca56cd828..4c983a4fd2d 100644
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.intro.setup.configure" xreflabel="Configuring">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.configure" xreflabel="Configuring">
<?dbhtml filename="configure.html"?>
-<sect1info>
+<info><title>Configure</title>
<keywordset>
<keyword>
ISO C++
@@ -13,9 +14,9 @@
options
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>Configure</title>
<para>
When configuring libstdc++, you'll have to configure the entire
@@ -29,8 +30,8 @@
Here are all of the configure options specific to libstdc++. Keep
in mind that
<!-- This SECnn should be the "Choosing Package Options" section. -->
- <ulink url="http://sourceware.org/autobook/autobook/autobook_14.html">they
- all have opposite forms as well</ulink> (enable/disable and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/autobook/autobook/autobook_14.html">they
+ all have opposite forms as well</link> (enable/disable and
with/without). The defaults are for the <emphasis>current
development sources</emphasis>, which may be different than those
for released versions.
@@ -43,8 +44,8 @@
<variablelist>
<varlistentry><term><code>--enable-multilib</code>[default]</term>
<listitem><para>This is part of the generic multilib support for building cross
- compilers. As such, targets like &quot;powerpc-elf&quot; will have
- libstdc++ built many different ways: &quot;-msoft-float&quot;
+ compilers. As such, targets like "powerpc-elf" will have
+ libstdc++ built many different ways: "-msoft-float"
and not, etc. A different libstdc++ will be built for each of
the different multilib versions. This option is on by default.
</para>
@@ -68,15 +69,15 @@
libstdc++'s include files will be installed in
<code>${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>,
unless you also specify
- <literal>--with-gxx-include-dir=<filename class="directory">dirname</filename></literal> during configuration.
+ <literal>--with-gxx-include-dir=</literal><filename class="directory">dirname</filename> during configuration.
</para>
</listitem></varlistentry>
<varlistentry><term><code>--with-gxx-include-dir=&lt;include-files dir&gt;</code></term>
<listitem><para>Adds support for named libstdc++ include directory. For instance,
the following puts all the libstdc++ headers into a directory
- called &quot;4.4-20090404&quot; instead of the usual
- &quot;c++/(version)&quot;.
+ called "4.4-20090404" instead of the usual
+ "c++/(version)".
</para>
<programlisting>
--with-gxx-include-dir=/foo/H-x86-gcc-3-c-gxx-inc/include/4.4-20090404</programlisting> </listitem></varlistentry>
@@ -89,7 +90,7 @@
<varlistentry><term><code>--enable-cstdio=OPTION</code></term>
<listitem><para>Select a target-specific I/O package. At the moment, the only
- choice is to use 'stdio', a generic &quot;C&quot; abstraction.
+ choice is to use 'stdio', a generic "C" abstraction.
The default is 'stdio'. This option can change the library ABI.
</para>
</listitem></varlistentry>
@@ -105,16 +106,15 @@
choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
(IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
'gnu' to specify a model based on functionality from the GNU C
- library (langinfo/iconv/gettext) (from <ulink url="http://sources.redhat.com/glibc/">glibc</ulink>, the GNU C
- library), or 'generic' to use a generic &quot;C&quot;
- abstraction which consists of &quot;C&quot; locale info.
+ library (langinfo/iconv/gettext) (from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sources.redhat.com/glibc/">glibc</link>, the GNU C
+ library), or 'generic' to use a generic "C"
+ abstraction which consists of "C" locale info.
</para>
<para>If not explicitly specified, the configure proccess tries
to guess the most suitable package from the choices above. The
default is 'generic'. On glibc-based systems of sufficient
- vintage (2.2.5 and newer) and capability (with installed DE and
- FR locale data), 'gnu' is automatically selected. This option
+ vintage (2.3 and newer), 'gnu' is automatically selected. This option
can change the library ABI.
</para>
</listitem></varlistentry>
@@ -155,8 +155,8 @@
<varlistentry><term><code>--enable-threads=OPTION</code></term>
<listitem><para>Select a threading library. A full description is
given in the
- general <ulink url="http://gcc.gnu.org/install/configure.html">compiler
- configuration instructions</ulink>. This option can change the
+ general <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/configure.html">compiler
+ configuration instructions</link>. This option can change the
library ABI.
</para>
</listitem></varlistentry>
@@ -219,13 +219,13 @@
</listitem></varlistentry>
<varlistentry><term><code>--enable-c99</code></term>
- <listitem><para>The &quot;long long&quot; type was introduced in C99, along
+ <listitem><para>The "long long" type was introduced in C99, along
with many other functions for wide characters, and math
classification macros, etc. If enabled, all C99 functions not
specified by the C++ standard will be put into <code>namespace
__gnu_cxx</code>, and then all these names will
be injected into namespace std, so that C99 functions can be
- used &quot;as if&quot; they were in the C++ standard (as they
+ used "as if" they were in the C++ standard (as they
will eventually be in some future revision of the standard,
without a doubt). By default, C99 support is on, assuming the
configure probes find all the necessary functions and bits
@@ -234,7 +234,7 @@
</listitem></varlistentry>
<varlistentry><term><code>--enable-wchar_t</code>[default]</term>
- <listitem><para>Template specializations for the &quot;wchar_t&quot; type are
+ <listitem><para>Template specializations for the "wchar_t" type are
required for wide character conversion support. Disabling
wide character specializations may be expedient for initial
porting efforts, but builds only a subset of what is required by
@@ -244,14 +244,14 @@
</listitem></varlistentry>
<varlistentry><term><code>--enable-long-long </code></term>
- <listitem><para>The &quot;long long&quot; type was introduced in C99. It is
+ <listitem><para>The "long long" type was introduced in C99. It is
provided as a GNU extension to C++98 in g++. This flag builds
- support for &quot;long long&quot; into the library (specialized
+ support for "long long" into the library (specialized
templates and the like for iostreams). This option is on by default:
- if enabled, users will have to either use the new-style &quot;C&quot;
+ if enabled, users will have to either use the new-style "C"
headers by default (i.e., &lt;cmath&gt; not &lt;math.h&gt;)
or add appropriate compile-time flags to all compile lines to
- allow &quot;C&quot; visibility of this feature (on GNU/Linux,
+ allow "C" visibility of this feature (on GNU/Linux,
the flag is -D_ISOC99_SOURCE, which is added automatically via
CPLUSPLUS_CPP_SPEC's addition of _GNU_SOURCE).
This option can change the library ABI.
@@ -280,8 +280,8 @@
<listitem><para>In 3.1 and later, tries to turn on symbol versioning in the
shared library (if a shared library has been
requested). Values for 'style' that are currently supported
- are 'gnu', 'gnu-versioned-namespace', 'darwin', and
- 'darwin-export'. Both gnu- options require that a recent
+ are 'gnu', 'gnu-versioned-namespace', 'darwin',
+ 'darwin-export', and 'sun'. Both gnu- options require that a recent
version of the GNU linker be in use. Both darwin options are
equivalent. With no style given, the configure script will try
to guess correct defaults for the host system, probe to see if
@@ -348,4 +348,4 @@
</variablelist>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/containers.xml b/libstdc++-v3/doc/xml/manual/containers.xml
index 3b4fb4baa07..377b1a2ee6f 100644
--- a/libstdc++-v3/doc/xml/manual/containers.xml
+++ b/libstdc++-v3/doc/xml/manual/containers.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.containers" xreflabel="Containers">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.containers" xreflabel="Containers">
<?dbhtml filename="containers.html"?>
-<chapterinfo>
+<info><title>
+ Containers
+ <indexterm><primary>Containers</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,28 +14,24 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Containers
- <indexterm><primary>Containers</primary></indexterm>
-</title>
<!-- Sect1 01 : Sequences -->
-<sect1 id="std.containers.sequences" xreflabel="Sequences">
+<section xml:id="std.containers.sequences" xreflabel="Sequences"><info><title>Sequences</title></info>
<?dbhtml filename="sequences.html"?>
- <title>Sequences</title>
+
-<sect2 id="containers.sequences.list" xreflabel="list">
+<section xml:id="containers.sequences.list" xreflabel="list"><info><title>list</title></info>
<?dbhtml filename="list.html"?>
- <title>list</title>
- <sect3 id="sequences.list.size" xreflabel="list::size() is O(n)">
- <title>list::size() is O(n)</title>
+
+ <section xml:id="sequences.list.size" xreflabel="list::size() is O(n)"><info><title>list::size() is O(n)</title></info>
+
<para>
Yes it is, and that's okay. This is a decision that we preserved
when we imported SGI's STL implementation. The following is
- quoted from <ulink
- url="http://www.sgi.com/tech/stl/FAQ.html">their FAQ</ulink>:
+ quoted from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
</para>
<blockquote>
<para>
@@ -78,41 +73,38 @@
...
</programlisting>
</blockquote>
- </sect3>
-</sect2>
+ </section>
+</section>
-<sect2 id="containers.sequences.vector" xreflabel="vector">
+<section xml:id="containers.sequences.vector" xreflabel="vector"><info><title>vector</title></info>
<?dbhtml filename="vector.html"?>
- <title>vector</title>
+
<para>
</para>
- <sect3 id="sequences.vector.management" xreflabel="Space Overhead Management">
- <title>Space Overhead Management</title>
+ <section xml:id="sequences.vector.management" xreflabel="Space Overhead Management"><info><title>Space Overhead Management</title></info>
+
<para>
- In <ulink
- url="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html">this
- message to the list</ulink>, Daniel Kostecky announced work on an
+ In <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html">this
+ message to the list</link>, Daniel Kostecky announced work on an
alternate form of <code>std::vector</code> that would support
hints on the number of elements to be over-allocated. The design
was also described, along with possible implementation choices.
</para>
<para>
- The first two alpha releases were announced <ulink
- url="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html">here</ulink>
- and <ulink
- url="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html">here</ulink>.
+ The first two alpha releases were announced <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html">here</link>
+ and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html">here</link>.
</para>
- </sect3></sect2>
-</sect1>
+ </section></section>
+</section>
<!-- Sect1 02 : Associative -->
-<sect1 id="std.containers.associative" xreflabel="Associative">
+<section xml:id="std.containers.associative" xreflabel="Associative"><info><title>Associative</title></info>
<?dbhtml filename="associative.html"?>
- <title>Associative</title>
+
- <sect2 id="containers.associative.insert_hints" xreflabel="Insertion Hints">
- <title>Insertion Hints</title>
+ <section xml:id="containers.associative.insert_hints" xreflabel="Insertion Hints"><info><title>Insertion Hints</title></info>
+
<para>
Section [23.1.2], Table 69, of the C++ standard lists this
function for all of the associative containers (map, set, etc):
@@ -125,8 +117,7 @@
item to insert. The standard says that <quote><code>t</code> is
inserted as close as possible to the position just prior to
<code>p</code>.</quote> (Library DR #233 addresses this topic,
- referring to <ulink
- url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html">N1780</ulink>.
+ referring to <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html">N1780</link>.
Since version 4.2 GCC implements the resolution to DR 233, so
that insertions happen as close as possible to the hint. For
earlier releases the hint was only used as described below.
@@ -216,14 +207,14 @@
point to the correct place, then no further local searching is
done; the search begins from scratch in logarithmic time.
</para>
- </sect2>
+ </section>
- <sect2 id="containers.associative.bitset" xreflabel="bitset">
+ <section xml:id="containers.associative.bitset" xreflabel="bitset"><info><title>bitset</title></info>
<?dbhtml filename="bitset.html"?>
- <title>bitset</title>
- <sect3 id="associative.bitset.size_variable" xreflabel="Variable">
- <title>Size Variable</title>
+
+ <section xml:id="associative.bitset.size_variable" xreflabel="Variable"><info><title>Size Variable</title></info>
+
<para>
No, you cannot write code of the form
</para>
@@ -254,7 +245,7 @@
</itemizedlist>
<para>
<emphasis>A very large N in
- <code>bitset&lt;N&gt;</code>.&nbsp;&nbsp;</emphasis> It has been
+ <code>bitset&lt;N&gt;</code>.  </emphasis> It has been
pointed out a few times in newsgroups that N bits only takes up
(N/8) bytes on most systems, and division by a factor of eight is
pretty impressive when speaking of memory. Half a megabyte given
@@ -276,7 +267,7 @@
space overhead, but it's all allocated inside the object.)
</para>
<para>
- <emphasis>A container&lt;bool&gt;.&nbsp;&nbsp;</emphasis> The
+ <emphasis>A container&lt;bool&gt;.  </emphasis> The
Committee made provision for the space savings possible with that
(N/8) usage previously mentioned, so that you don't have to do
wasteful things like <code>Container&lt;char&gt;</code> or
@@ -297,7 +288,7 @@
than that of vector).
</para>
<para>
- <emphasis>Extremely weird solutions.&nbsp;&nbsp;</emphasis> If
+ <emphasis>Extremely weird solutions.  </emphasis> If
you have access to the compiler and linker at runtime, you can do
something insane, like figuring out just how many bits you need,
then writing a temporary source code file. That file contains an
@@ -329,9 +320,9 @@
<link linkend="manual.ext.containers.sgi">some extensions</link>.
</para>
- </sect3>
- <sect3 id="associative.bitset.type_string" xreflabel="Type String">
- <title>Type String</title>
+ </section>
+ <section xml:id="associative.bitset.type_string" xreflabel="Type String"><info><title>Type String</title></info>
+
<para>
</para>
<para>
@@ -357,18 +348,18 @@
<programlisting>
std::bitset&lt;5&gt; b ( <quote>10110</quote> ); // invalid
</programlisting>
- </sect3>
- </sect2>
+ </section>
+ </section>
-</sect1>
+</section>
<!-- Sect1 03 : Interacting with C -->
-<sect1 id="std.containers.c" xreflabel="Interacting with C">
+<section xml:id="std.containers.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
<?dbhtml filename="containers_and_c.html"?>
- <title>Interacting with C</title>
+
- <sect2 id="containers.c.vs_array" xreflabel="Containers vs. Arrays">
- <title>Containers vs. Arrays</title>
+ <section xml:id="containers.c.vs_array" xreflabel="Containers vs. Arrays"><info><title>Containers vs. Arrays</title></info>
+
<para>
You're writing some code and can't decide whether to use builtin
arrays or some kind of container. There are compelling reasons
@@ -464,8 +455,8 @@ template&lt;typename T, unsigned int sz&gt;
<para>
looks just weird! Hint: unused parameters can be left nameless.
</para>
- </sect2>
+ </section>
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/ctype.xml b/libstdc++-v3/doc/xml/manual/ctype.xml
index 9cc4603667d..afca9be5475 100644
--- a/libstdc++-v3/doc/xml/manual/ctype.xml
+++ b/libstdc++-v3/doc/xml/manual/ctype.xml
@@ -1,7 +1,8 @@
-<section id="std.localization.facet.ctype" xreflabel="ctype">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.facet.ctype" xreflabel="ctype">
<?dbhtml filename="ctype.html"?>
-<sectioninfo>
+<info><title>ctype</title>
<keywordset>
<keyword>
ISO C++
@@ -10,15 +11,15 @@
ctype
</keyword>
</keywordset>
-</sectioninfo>
+</info>
-<title>ctype</title>
-<section id="facet.ctype.impl">
-<title>Implementation</title>
- <section>
- <title>Specializations</title>
+<section xml:id="facet.ctype.impl"><info><title>Implementation</title></info>
+
+
+ <section><info><title>Specializations</title></info>
+
<para>
For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
@@ -60,8 +61,8 @@ characters.
</section>
</section>
-<section id="facet.ctype.future">
-<title>Future</title>
+<section xml:id="facet.ctype.future"><info><title>Future</title></info>
+
<itemizedlist>
@@ -117,21 +118,15 @@ characters.
</section>
-<bibliography id="facet.ctype.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="facet.ctype.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <title>
+ <citetitle>
The GNU C Library
- </title>
- <author>
- <surname>McGrath</surname>
- <firstname>Roland</firstname>
- </author>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2007</year>
<holder>FSF</holder>
@@ -140,23 +135,20 @@ characters.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Correspondence
- </title>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2002</year>
- <holder></holder>
+ <holder/>
</copyright>
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 14882:1998 Programming languages - C++
- </title>
+ </citetitle>
<copyright>
<year>1998</year>
<holder>ISO</holder>
@@ -164,9 +156,9 @@ characters.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 9899:1999 Programming languages - C
- </title>
+ </citetitle>
<copyright>
<year>1999</year>
<holder>ISO</holder>
@@ -174,13 +166,12 @@ characters.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.unix.org/version3/ieee_std.html">
- <citetitle>
- The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unix.org/version3/ieee_std.html" class="uri">
+ </biblioid>
+ <citetitle>
+ The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ </citetitle>
+
<copyright>
<year>1999</year>
<holder>
@@ -189,13 +180,10 @@ characters.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
The C++ Programming Language, Special Edition
- </title>
- <author>
- <surname>Stroustrup</surname>
- <firstname>Bjarne</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley, Inc.</holder>
@@ -209,20 +197,14 @@ characters.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Standard C++ IOStreams and Locales
- </title>
+ </citetitle>
<subtitle>
Advanced Programmer's Guide and Reference
</subtitle>
- <author>
- <surname>Langer</surname>
- <firstname>Angelika</firstname>
- </author>
- <author>
- <surname>Kreft</surname>
- <firstname>Klaus</firstname>
- </author>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder>
diff --git a/libstdc++-v3/doc/xml/manual/debug.xml b/libstdc++-v3/doc/xml/manual/debug.xml
index 5f97867de2e..51219d45efd 100644
--- a/libstdc++-v3/doc/xml/manual/debug.xml
+++ b/libstdc++-v3/doc/xml/manual/debug.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.intro.using.debug" xreflabel="Debugging Support">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using.debug" xreflabel="Debugging Support">
<?dbhtml filename="debug.html"?>
-<sect1info>
+<info><title>Debugging Support</title>
<keywordset>
<keyword>
C++
@@ -10,9 +11,9 @@
debug
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>Debugging Support</title>
<para>
There are numerous things that can be done to improve the ease with
@@ -20,8 +21,8 @@
are some of them.
</para>
-<sect2 id="debug.compiler">
-<title>Using <command>g++</command></title>
+<section xml:id="debug.compiler"><info><title>Using <command>g++</command></title></info>
+
<para>
Compiler flags determine how debug information is transmitted
between compilation and debug or analysis tools.
@@ -52,15 +53,14 @@
</para>
<para>
- Many other options are available: please see <ulink
- url="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options
- for Debugging Your Program"</ulink> in Using the GNU Compiler
+ Many other options are available: please see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options
+ for Debugging Your Program"</link> in Using the GNU Compiler
Collection (GCC) for a complete list.
</para>
-</sect2>
+</section>
+
+<section xml:id="debug.req"><info><title>Debug Versions of Library Binary Files</title></info>
-<sect2 id="debug.req">
-<title>Debug Versions of Library Binary Files</title>
<para>
If you would like debug symbols in libstdc++, there are two ways to
@@ -79,8 +79,7 @@
debug build will persist, without having to specify
<code>CXXFLAGS</code>, and the debug library will be installed in a
separate directory tree, in <code>(prefix)/lib/debug</code>. For
- more information, look at the <link
- linkend="manual.intro.setup.configure">configuration</link> section.
+ more information, look at the <link linkend="manual.intro.setup.configure">configuration</link> section.
</para>
<para>
@@ -94,10 +93,10 @@
This quick and dirty approach is often sufficient for quick
debugging tasks, when you cannot or don't want to recompile your
application to use the <link linkend="manual.ext.debug_mode">debug mode</link>.</para>
-</sect2>
+</section>
+
+<section xml:id="debug.memory"><info><title>Memory Leak Hunting</title></info>
-<sect2 id="debug.memory">
-<title>Memory Leak Hunting</title>
<para>
There are various third party memory tracing and debug utilities
@@ -116,8 +115,7 @@
thing of great importance to keep in mind when debugging C++ code
that uses <code>new</code> and <code>delete</code>: there are
different kinds of allocation schemes that can be used by <code>
- std::allocator </code>. For implementation details, see the <link
- linkend="manual.ext.allocator.mt">mt allocator</link> documentation and
+ std::allocator </code>. For implementation details, see the <link linkend="manual.ext.allocator.mt">mt allocator</link> documentation and
look specifically for <code>GLIBCXX_FORCE_NEW</code>.
</para>
@@ -189,17 +187,67 @@
valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
</programlisting>
-</sect2>
+</section>
+
+<section xml:id="debug.races"><info><title>Data Race Hunting</title></info>
+<para>
+ All synchronization primitives used in the library internals should be
+ understood by race detectors so that they do not produce false reports.
+</para>
+
+<para>
+ We use two annotations (macros) to explain low-level synchronization
+ to race detectors:
+ <code>_GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE()</code> and
+ <code> _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER()</code>.
+ By default, these two macros are defined empty -- anyone who wants
+ to use a race detector will need to redefine these macros to call an
+ appropriate API.
+ Since these macros are empty by default, redefining them in the user code
+ will affect only the inline template code, e.g. <code>shared_ptr</code>.
+ In order to redefine the macros in <code>basic_string</code> one will
+ need to disable extern templates (by defining
+ <code>_GLIBCXX_EXTERN_TEMPLATE=-1</code>) or rebuild the
+ <code>.so</code> file.
+ The rest of the cases (currently, <code>ios_base::Init::~Init</code>,
+ <code>locale::_Impl</code> and <code>locale::facet</code>) will require
+ to rebuild the <code>.so</code> file.
+</para>
+
+<para>
+ The approach described above works at least with the following race
+ detection tools:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://valgrind.org/docs/manual/drd-manual.html">
+ DRD </link>,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://valgrind.org/docs/manual/hg-manual.html">
+ Helgrind </link>,
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://code.google.com/p/data-race-test">
+ ThreadSanitizer </link>.
+</para>
+
+<para>
+ With DRD, Helgrind and ThreadSanitizer you will need to define
+ the macros like this:
+<programlisting>
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) ANNOTATE_HAPPENS_BEFORE(A)
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
+</programlisting>
+ Refer to the documentation of each particular tool for the details.
+</para>
+
+</section>
+
+<section xml:id="debug.gdb"><info><title>Using <command>gdb</command></title></info>
-<sect2 id="debug.gdb">
-<title>Using <command>gdb</command></title>
<para>
</para>
<para>
- Many options are available for gdb itself: please see <ulink
- url="http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC125">
- "GDB features for C++" </ulink> in the gdb documentation. Also
+ Many options are available for gdb itself: please see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC125">
+ "GDB features for C++" </link> in the gdb documentation. Also
recommended: the other parts of this manual.
</para>
@@ -258,47 +306,47 @@
<para>
For additional information on STL support and GDB please visit:
- <ulink url="http://sourceware.org/gdb/wiki/STLSupport"> "GDB Support
- for STL" </ulink> in the GDB wiki. Additionally, in-depth
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/gdb/wiki/STLSupport"> "GDB Support
+ for STL" </link> in the GDB wiki. Additionally, in-depth
documentation and discussion of the pretty printing feature can be
found in "Pretty Printing" node in the GDB manual. You can find
on-line versions of the GDB user manual in GDB's homepage, at
- <ulink url="http://sourceware.org/gdb/"> "GDB: The GNU Project
- Debugger" </ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/gdb/"> "GDB: The GNU Project
+ Debugger" </link>.
</para>
-</sect2>
+</section>
+
+<section xml:id="debug.exceptions"><info><title>Tracking uncaught exceptions</title></info>
-<sect2 id="debug.exceptions">
-<title>Tracking uncaught exceptions</title>
<para>
The <link linkend="support.termination.verbose">verbose
termination handler</link> gives information about uncaught
exceptions which are killing the program. It is described in the
linked-to page.
</para>
-</sect2>
+</section>
+
+<section xml:id="debug.debug_mode"><info><title>Debug Mode</title></info>
-<sect2 id="debug.debug_mode">
-<title>Debug Mode</title>
<para> The <link linkend="manual.ext.debug_mode">Debug Mode</link>
has compile and run-time checks for many containers.
</para>
-</sect2>
+</section>
+
+<section xml:id="debug.compile_time_checks"><info><title>Compile Time Checking</title></info>
-<sect2 id="debug.compile_time_checks">
-<title>Compile Time Checking</title>
<para> The <link linkend="manual.ext.compile_checks">Compile-Time
Checks</link> Extension has compile-time checks for many algorithms.
</para>
-</sect2>
+</section>
+
+<section xml:id="debug.profile_mode" xreflabel="debug.profile_mode"><info><title>Profile-based Performance Analysis</title></info>
-<sect2 id="debug.profile_mode" xreflabel="debug.profile_mode">
-<title>Profile-based Performance Analysis</title>
<para> The <link linkend="manual.ext.profile_mode">Profile-based
Performance Analysis</link> Extension has performance checks for many
algorithms.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml
index c3b3b57859d..f0ab4992846 100644
--- a/libstdc++-v3/doc/xml/manual/debug_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml
@@ -1,12 +1,8 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="manual.ext.debug_mode" xreflabel="Debug Mode">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.debug_mode" xreflabel="Debug Mode">
<?dbhtml filename="debug_mode.html"?>
-<chapterinfo>
+<info><title>Debug Mode</title>
<keywordset>
<keyword>
C++
@@ -18,12 +14,12 @@
debug
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>Debug Mode</title>
-<sect1 id="manual.ext.debug_mode.intro" xreflabel="Intro">
- <title>Intro</title>
+<section xml:id="manual.ext.debug_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
<para>
By default, libstdc++ is built with efficiency in mind, and
therefore performs little or no error checking that is not
@@ -65,10 +61,10 @@
different predicate.</para></listitem>
</itemizedlist>
-</sect1>
+</section>
-<sect1 id="manual.ext.debug_mode.semantics" xreflabel="Semantics">
- <title>Semantics</title>
+<section xml:id="manual.ext.debug_mode.semantics" xreflabel="Semantics"><info><title>Semantics</title></info>
+
<para>
</para>
@@ -146,14 +142,14 @@ guaranteed to work. For full debug-mode support you can use the
which always works correctly.
</para>
-</sect1>
+</section>
-<sect1 id="manual.ext.debug_mode.using" xreflabel="Using">
- <title>Using</title>
+<section xml:id="manual.ext.debug_mode.using" xreflabel="Using"><info><title>Using</title></info>
+
<para>
</para>
-<sect2 id="debug_mode.using.mode" xreflabel="Using Mode">
- <title>Using the Debug Mode</title>
+<section xml:id="debug_mode.using.mode" xreflabel="Using Mode"><info><title>Using the Debug Mode</title></info>
+
<para>To use the libstdc++ debug mode, compile your application with the
compiler flag <code>-D_GLIBCXX_DEBUG</code>. Note that this flag
@@ -168,10 +164,10 @@ which always works correctly.
<code>GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
different length.</para>
-</sect2>
+</section>
-<sect2 id="debug_mode.using.specific" xreflabel="Using Specific">
- <title>Using a Specific Debug Container</title>
+<section xml:id="debug_mode.using.specific" xreflabel="Using Specific"><info><title>Using a Specific Debug Container</title></info>
+
<para>When it is not feasible to recompile your entire application, or
only specific containers need checking, debugging containers are
available as GNU extensions. These debugging containers are
@@ -183,13 +179,14 @@ which always works correctly.
containers:
</para>
-<table frame='all'>
+<table frame="all">
<title>Debugging Containers</title>
-<tgroup cols='4' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
@@ -274,13 +271,14 @@ which always works correctly.
containers have additional debug capability.
</para>
-<table frame='all'>
+<table frame="all">
<title>Debugging Containers C++0x</title>
-<tgroup cols='4' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
@@ -318,15 +316,15 @@ containers have additional debug capability.
</tbody>
</tgroup>
</table>
-</sect2>
-</sect1>
+</section>
+</section>
-<sect1 id="manual.ext.debug_mode.design" xreflabel="Design">
- <title>Design</title>
+<section xml:id="manual.ext.debug_mode.design" xreflabel="Design"><info><title>Design</title></info>
+
<para>
</para>
- <sect2 id="debug_mode.design.goals" xreflabel="Goals">
- <title>Goals</title>
+ <section xml:id="debug_mode.design.goals" xreflabel="Goals"><info><title>Goals</title></info>
+
<para>
</para>
<para> The libstdc++ debug mode replaces unsafe (but efficient) standard
@@ -376,7 +374,7 @@ containers have additional debug capability.
higher-numbered conformance levels are more usable (i.e., require
less recompilation) but are more complicated to implement than
the lower-numbered conformance levels.
- <orderedlist>
+ <orderedlist inheritnum="ignore" continuation="restarts">
<listitem><para><emphasis>Full recompilation</emphasis>: The user must recompile his or
her entire application and all C++ libraries it depends on,
including the C++ standard library that ships with the
@@ -438,18 +436,18 @@ containers have additional debug capability.
</orderedlist>
</para></listitem>
</itemizedlist>
- </sect2>
+ </section>
- <sect2 id="debug_mode.design.methods" xreflabel="Methods">
- <title>Methods</title>
+ <section xml:id="debug_mode.design.methods" xreflabel="Methods"><info><title>Methods</title></info>
+
<para>
</para>
<para>This section provides an overall view of the design of the
libstdc++ debug mode and details the relationship between design
decisions and the stated design goals.</para>
- <sect3 id="debug_mode.design.methods.wrappers" xreflabel="Method Wrapper">
- <title>The Wrapper Model</title>
+ <section xml:id="debug_mode.design.methods.wrappers" xreflabel="Method Wrapper"><info><title>The Wrapper Model</title></info>
+
<para>The libstdc++ debug mode uses a wrapper model where the
debugging versions of library components (e.g., iterators and
containers) form a layer on top of the release versions of the
@@ -471,8 +469,8 @@ containers have additional debug capability.
past-the-end iterators or inserting into a container using an
iterator from a different container.</para>
- <sect4 id="debug_mode.design.methods.safe_iter" xreflabel="Method Safe Iter">
- <title>Safe Iterators</title>
+ <section xml:id="debug_mode.design.methods.safe_iter" xreflabel="Method Safe Iter"><info><title>Safe Iterators</title></info>
+
<para>Iterator wrappers provide a debugging layer over any iterator that
is attached to a particular container, and will manage the
information detailing the iterator's state (singular,
@@ -492,10 +490,10 @@ containers have additional debug capability.
whose <code>iterator</code> or <code>const_iterator</code> typedef
is the type of the safe iterator.</para></listitem>
</itemizedlist>
- </sect4>
+ </section>
- <sect4 id="debug_mode.design.methods.safe_seq" xreflabel="Method Safe Seq">
- <title>Safe Sequences (Containers)</title>
+ <section xml:id="debug_mode.design.methods.safe_seq" xreflabel="Method Safe Seq"><info><title>Safe Sequences (Containers)</title></info>
+
<para>Container wrappers provide a debugging layer over a particular
container type. Because containers vary greatly in the member
@@ -540,11 +538,11 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
// duplicate std::list interface with debugging semantics
};
</programlisting>
- </sect4>
- </sect3>
+ </section>
+ </section>
- <sect3 id="debug_mode.design.methods.precond" xreflabel="Precondition check">
- <title>Precondition Checking</title>
+ <section xml:id="debug_mode.design.methods.precond" xreflabel="Precondition check"><info><title>Precondition Checking</title></info>
+
<para>The debug mode operates primarily by checking the preconditions of
all standard library operations that it supports. Preconditions that
are always checked (regardless of whether or not we are in debug
@@ -575,10 +573,10 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
check macro that supports more advance formulation of error
messages, <code>_GLIBCXX_DEBUG_VERIFY</code>. These macros are
documented more thoroughly in the debug mode source code.</para>
- </sect3>
+ </section>
- <sect3 id="debug_mode.design.methods.coexistence" xreflabel="Coexistence">
- <title>Release- and debug-mode coexistence</title>
+ <section xml:id="debug_mode.design.methods.coexistence" xreflabel="Coexistence"><info><title>Release- and debug-mode coexistence</title></info>
+
<para>The libstdc++ debug mode is the first debug mode we know of that
is able to provide the "Per-use recompilation" (4) guarantee, that
allows release-compiled and debug-compiled code to be linked and
@@ -591,16 +589,16 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
<para>Achieving link- and run-time coexistence is not a trivial
implementation task. To achieve this goal we required a small
extension to the GNU C++ compiler (since incorporated into the C++0x language specification, described in the GCC Manual for the C++ language as
- <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association">namespace
- association</ulink>), and a complex organization of debug- and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Namespace-Association.html#Namespace-Association">namespace
+ association</link>), and a complex organization of debug- and
release-modes. The end result is that we have achieved per-use
recompilation but have had to give up some checking of the
<code>std::basic_string</code> class template (namely, safe
iterators).
</para>
- <sect4 id="methods.coexistence.compile" xreflabel="Compile">
- <title>Compile-time coexistence of release- and debug-mode components</title>
+ <section xml:id="methods.coexistence.compile" xreflabel="Compile"><info><title>Compile-time coexistence of release- and debug-mode components</title></info>
+
<para>Both the release-mode components and the debug-mode
components need to exist within a single translation unit so that
@@ -665,11 +663,11 @@ namespace std
inline namespace __debug { }
}
</programlisting>
- </sect4>
+ </section>
- <sect4 id="methods.coexistence.link" xreflabel="Link">
- <title>Link- and run-time coexistence of release- and
- debug-mode components</title>
+ <section xml:id="methods.coexistence.link" xreflabel="Link"><info><title>Link- and run-time coexistence of release- and
+ debug-mode components</title></info>
+
<para>Because each component has a distinct and separate release and
debug implementation, there is no issue with link-time
@@ -730,7 +728,7 @@ test02()
debug/release containers, we must note two things about locale
facets:</para>
-<orderedlist>
+<orderedlist inheritnum="ignore" continuation="restarts">
<listitem><para>They exist as shared state: one can create a facet in one
translation unit and access the facet via the same type name in a
different translation unit. This means that we cannot have two
@@ -752,10 +750,10 @@ test02()
simple alternatives (e.g., <code>__gnu_debug::basic_string</code>),
and the usability benefit we gain from the ability to mix debug- and
release-compiled translation units is enormous.</para>
- </sect4>
+ </section>
+
+ <section xml:id="methods.coexistence.alt" xreflabel="Alternatives"><info><title>Alternatives for Coexistence</title></info>
- <sect4 id="methods.coexistence.alt" xreflabel="Alternatives">
-<title>Alternatives for Coexistence</title>
<para>The coexistence scheme above was chosen over many alternatives,
including language-only solutions and solutions that also required
@@ -805,8 +803,8 @@ test02()
<listitem><para><emphasis> Use implementation-specific properties of anonymous
namespaces. </emphasis>
- See <ulink url="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html"> this post
- </ulink>
+ See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00004.html"> this post
+ </link>
This method fails the <emphasis>correctness</emphasis> criteria.</para></listitem>
<listitem><para><emphasis>Extension: allow reopening on namespaces</emphasis>: This would
@@ -832,8 +830,8 @@ test02()
functions taking no arguments in mixed-mode settings resulting in
equivalent link names, <code> vector::push_back() </code> being
one example.
- See <ulink url="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html">link
- name</ulink> </para></listitem>
+ See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2003-08/msg00177.html">link
+ name</link> </para></listitem>
</itemizedlist>
<para>Other options may exist for implementing the debug mode, many of
@@ -848,12 +846,12 @@ test02()
added as we are able to identify other typical problem cases. These
test cases will serve as a benchmark by which we can compare debug
mode implementations.</para>
- </sect4>
- </sect3>
- </sect2>
+ </section>
+ </section>
+ </section>
- <sect2 id="debug_mode.design.other" xreflabel="Other">
- <title>Other Implementations</title>
+ <section xml:id="debug_mode.design.other" xreflabel="Other"><info><title>Other Implementations</title></info>
+
<para>
</para>
<para> There are several existing implementations of debug modes for C++
@@ -861,15 +859,15 @@ test02()
supports debugging for programs using libstdc++. The existing
implementations include:</para>
<itemizedlist>
- <listitem><para><ulink url="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</ulink>:
+ <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html">SafeSTL</link>:
SafeSTL was the original debugging version of the Standard Template
Library (STL), implemented by Cay S. Horstmann on top of the
Hewlett-Packard STL. Though it inspired much work in this area, it
has not been kept up-to-date for use with modern compilers or C++
standard library implementations.</para></listitem>
- <listitem><para><ulink url="http://www.stlport.org/">STLport</ulink>: STLport is a free
- implementation of the C++ standard library derived from the <ulink url="http://www.sgi.com/tech/stl/">SGI implementation</ulink>, and
+ <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stlport.org/">STLport</link>: STLport is a free
+ implementation of the C++ standard library derived from the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/">SGI implementation</link>, and
ported to many other platforms. It includes a debug mode that uses a
wrapper model (that in some ways inspired the libstdc++ debug mode
design), although at the time of this writing the debug mode is
@@ -885,7 +883,7 @@ test02()
guarantee.</para></listitem>
</itemizedlist>
- </sect2>
-</sect1>
+ </section>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/diagnostics.xml b/libstdc++-v3/doc/xml/manual/diagnostics.xml
index 271477e3712..b9a7048716f 100644
--- a/libstdc++-v3/doc/xml/manual/diagnostics.xml
+++ b/libstdc++-v3/doc/xml/manual/diagnostics.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.diagnostics" xreflabel="Diagnostics">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.diagnostics" xreflabel="Diagnostics">
<?dbhtml filename="diagnostics.html"?>
-<chapterinfo>
+<info><title>
+ Diagnostics
+ <indexterm><primary>Diagnostics</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,19 +14,16 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Diagnostics
- <indexterm><primary>Diagnostics</primary></indexterm>
-</title>
-<sect1 id="std.diagnostics.exceptions" xreflabel="Exceptions">
+<section xml:id="std.diagnostics.exceptions" xreflabel="Exceptions"><info><title>Exceptions</title></info>
<?dbhtml filename="exceptions.html"?>
- <title>Exceptions</title>
+
- <sect2 id="std.diagnostics.exceptions.api">
- <title>API Reference</title>
+ <section xml:id="std.diagnostics.exceptions.api"><info><title>API Reference</title></info>
+
<para>
All exception objects are defined in one of the standard header
files: <filename>exception</filename>,
@@ -53,9 +49,9 @@
<!-- Doxygen XML: api/group__exceptions.xml -->
- </sect2>
- <sect2 id="std.diagnostics.exceptions.data" xreflabel="Adding Data to Exceptions">
- <title>Adding Data to <classname>exception</classname></title>
+ </section>
+ <section xml:id="std.diagnostics.exceptions.data" xreflabel="Adding Data to Exceptions"><info><title>Adding Data to <classname>exception</classname></title></info>
+
<para>
The standard exception classes carry with them a single string as
data (usually describing what went wrong or where the 'throw' took
@@ -76,11 +72,11 @@
};
</programlisting>
- </sect2>
-</sect1>
+ </section>
+</section>
-<sect1 id="std.diagnostics.concept_checking" xreflabel="Concept Checking">
- <title>Concept Checking</title>
+<section xml:id="std.diagnostics.concept_checking" xreflabel="Concept Checking"><info><title>Concept Checking</title></info>
+
<para>
In 1999, SGI added <quote>concept checkers</quote> to their
implementation of the STL: code which checked the template
@@ -88,7 +84,7 @@
that the parameters being used met the requirements of the
standard. For example, the Standard requires that types passed as
template parameters to <classname>vector</classname> be
- &quot;Assignable&quot; (which means what you think it means). The
+ "Assignable" (which means what you think it means). The
checking was done during compilation, and none of the code was
executed at runtime.
</para>
@@ -101,8 +97,8 @@
The primary author of the checking code, Jeremy Siek, had already
started work on a replacement implementation. The new code has been
formally reviewed and accepted into
- <ulink url="http://www.boost.org/libs/concept_check/concept_check.htm">the
- Boost libraries</ulink>, and we are pleased to incorporate it into the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ Boost libraries</link>, and we are pleased to incorporate it into the
GNU C++ library.
</para>
<para>
@@ -126,6 +122,6 @@
checking described above.
</para>
-</sect1>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml
index eda00060a66..08876deb18a 100644
--- a/libstdc++-v3/doc/xml/manual/evolution.xml
+++ b/libstdc++-v3/doc/xml/manual/evolution.xml
@@ -1,7 +1,8 @@
-<sect1 id="appendix.porting.api" xreflabel="api">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.api" xreflabel="api">
<?dbhtml filename="api.html"?>
-<sect1info>
+<info><title>API Evolution and Deprecation History</title>
<keywordset>
<keyword>ISO C++</keyword>
<keyword>api</keyword>
@@ -9,16 +10,16 @@
<keyword>deprecation</keyword>
<keyword>history</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>API Evolution and Deprecation History</title>
<para>
A list of user-visible changes, in chronological order
</para>
-<sect2 id="api.rel_300">
-<title><constant>3.0</constant></title>
+<section xml:id="api.rel_300"><info><title><constant>3.0</constant></title></info>
+
<para>
Extensions moved to <filename class="directory">include/ext</filename>.
@@ -39,10 +40,10 @@ deactivates the warning.)
-</sect2>
+</section>
+
+<section xml:id="api.rel_310"><info><title><constant>3.1</constant></title></info>
-<sect2 id="api.rel_310">
-<title><constant>3.1</constant></title>
<para>
</para>
@@ -65,10 +66,10 @@ Extensions to tree data structures added in <filename class="headerfile">ext/rb_
Removal of <filename class="headerfile">ext/tree</filename>, moved to <filename class="headerfile">backward/tree.h</filename>.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_320"><info><title><constant>3.2</constant></title></info>
-<sect2 id="api.rel_320">
-<title><constant>3.2</constant></title>
<para>
</para>
<para>Symbol versioning introduced for shared library.</para>
@@ -89,16 +90,16 @@ Removal of <filename class="headerfile">ext/tree</filename>, moved to <filename
<para>Error handling in iostreams cleaned up, made consistent. </para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_330"><info><title><constant>3.3</constant></title></info>
-<sect2 id="api.rel_330">
-<title><constant>3.3</constant></title>
<para>
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_340"><info><title><constant>3.4</constant></title></info>
-<sect2 id="api.rel_340">
-<title><constant>3.4</constant></title>
<para>
</para>
<para>
@@ -161,13 +162,14 @@ _Alloc_traits</code> have been removed.
underlying allocator was not user-configurable.
</para>
-<table frame='all'>
+<table frame="all">
<title>Extension Allocators</title>
-<tgroup cols='4' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
@@ -225,12 +227,13 @@ _Alloc_traits</code> have been removed.
the first released version of GCC that included the extension allocator.
</para>
-<table frame='all'>
+<table frame="all">
<title>Extension Allocators Continued</title>
-<tgroup cols='3' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
+
+<tgroup cols="3" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
<thead>
<row>
@@ -277,10 +280,10 @@ Extension <filename class="headerfile">ext/demangle.h</filename> added.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_400"><info><title><constant>4.0</constant></title></info>
-<sect2 id="api.rel_400">
-<title><constant>4.0</constant></title>
<para>
</para>
<para>
@@ -300,10 +303,10 @@ Removal of <filename class="headerfile">ext/demangle.h</filename>.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_410"><info><title><constant>4.1</constant></title></info>
-<sect2 id="api.rel_410">
-<title><constant>4.1</constant></title>
<para>
</para>
@@ -324,10 +327,10 @@ types, namespace <code>pb_assoc</code>.
<para> Extension for policy-based <code>basic_string</code> first added: <code>__gnu_cxx::__versa_string</code> in <filename class="headerfile">ext/vstring.h</filename>.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_420"><info><title><constant>4.2</constant></title></info>
-<sect2 id="api.rel_420">
-<title><constant>4.2</constant></title>
<para>
</para>
@@ -360,10 +363,10 @@ __gnu_cxx::__debug</code>.</para>
and <filename class="headerfile">ext/throw_allocator.h</filename>.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_430"><info><title><constant>4.3</constant></title></info>
-<sect2 id="api.rel_430">
-<title><constant>4.3</constant></title>
<para>
</para>
@@ -448,11 +451,11 @@ PCH binary files no longer installed. Instead, the source files are installed.
Namespace pb_ds moved to __gnu_pb_ds.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_440"><info><title><constant>4.4</constant></title></info>
-<sect2 id="api.rel_440">
-<title><constant>4.4</constant></title>
<para>
</para>
@@ -558,10 +561,10 @@ for non-standard pointer types has been added
to <classname>vector</classname>
and <classname>forward_list</classname>.
</para>
-</sect2>
+</section>
+
+<section xml:id="api.rel_450"><info><title><constant>4.5</constant></title></info>
-<sect2 id="api.rel_450">
-<title><constant>4.5</constant></title>
<para>
</para>
@@ -623,6 +626,6 @@ now defaults to zero.
<para> Extensions modified: <filename class="headerfile">ext/throw_allocator.h</filename>.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/extensions.xml b/libstdc++-v3/doc/xml/manual/extensions.xml
index 7fa9a5e36e4..b93c61f1be2 100644
--- a/libstdc++-v3/doc/xml/manual/extensions.xml
+++ b/libstdc++-v3/doc/xml/manual/extensions.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE part PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<part id="manual.ext" xreflabel="Extensions">
+<part xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext" xreflabel="Extensions">
<?dbhtml filename="extensions.html"?>
-<partinfo>
+<info><title>
+ Extensions
+ <indexterm><primary>Extensions</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,15 +14,12 @@
library
</keyword>
</keywordset>
-</partinfo>
+</info>
+
-<title>
- Extensions
- <indexterm><primary>Extensions</primary></indexterm>
-</title>
-<preface>
- <title></title>
+<preface><info><title/></info>
+
<para>
Here we will make an attempt at describing the non-Standard extensions to
the library. Some of these are from SGI's STL, some of these are GNU's,
@@ -32,7 +28,7 @@
<para><emphasis>Before</emphasis> you leap in and use any of these
extensions, be aware of two things:
</para>
-<orderedlist>
+<orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Non-Standard means exactly that.
@@ -55,9 +51,9 @@ extensions, be aware of two things:
</preface>
<!-- Chapter 01 : Compile Time Checks -->
-<chapter id="manual.ext.compile_checks" xreflabel="Compile Time Checks">
+<chapter xml:id="manual.ext.compile_checks" xreflabel="Compile Time Checks"><info><title>Compile Time Checks</title></info>
<?dbhtml filename="ext_compile_checks.html"?>
- <title>Compile Time Checks</title>
+
<para>
Also known as concept checking.
</para>
@@ -77,8 +73,8 @@ extensions, be aware of two things:
<para>The primary author of the checking code, Jeremy Siek, had already
started work on a replacement implementation. The new code has been
formally reviewed and accepted into
- <ulink url="http://www.boost.org/libs/concept_check/concept_check.htm">the
- Boost libraries</ulink>, and we are pleased to incorporate it into the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/concept_check/concept_check.htm">the
+ Boost libraries</link>, and we are pleased to incorporate it into the
GNU C++ library.
</para>
<para>The new version imposes a much smaller space overhead on the generated
@@ -104,54 +100,48 @@ extensions, be aware of two things:
</chapter>
<!-- Chapter 02 : Debug Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="debug_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug_mode.xml">
</xi:include>
<!-- Chapter 03 : Parallel Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="parallel_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="parallel_mode.xml">
</xi:include>
<!-- Chapter 04 : Profile Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="profile_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="profile_mode.xml">
</xi:include>
<!-- Chapter 05 : Allocators -->
-<chapter id="manual.ext.allocator" xreflabel="Allocators">
+<chapter xml:id="manual.ext.allocator" xreflabel="Allocators"><info><title>Allocators</title></info>
<?dbhtml filename="ext_allocators.html"?>
- <title>Allocators</title>
+
<!-- Section 01 : __mt_alloc -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="mt_allocator.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="mt_allocator.xml">
</xi:include>
<!-- Section 02 : bitmap_allocator -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="bitmap_allocator.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="bitmap_allocator.xml">
</xi:include>
</chapter>
<!-- Chapter 06 : Containers -->
-<chapter id="manual.ext.containers" xreflabel="Containers">
+<chapter xml:id="manual.ext.containers" xreflabel="Containers"><info><title>Containers</title></info>
<?dbhtml filename="ext_containers.html"?>
- <title>Containers</title>
+
<para>
</para>
- <sect1 id="manual.ext.containers.pbds" xreflabel="Policy Based Data Structures">
- <title>Policy Based Data Structures</title>
+ <section xml:id="manual.ext.containers.pbds" xreflabel="Policy Based Data Structures"><info><title>Policy Based Data Structures</title></info>
+
<para>
- <ulink
- url="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</link>.
</para>
- </sect1>
+ </section>
- <sect1 id="manual.ext.containers.sgi" xreflabel="SGI ext">
- <title>HP/SGI</title>
+ <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext"><info><title>HP/SGI</title></info>
+
<para>
</para>
@@ -173,7 +163,7 @@ extensions, be aware of two things:
<para>There are
versions of single-bit test, set, reset, and flip member functions which
do no range-checking. If we call them member functions of an instantiation
- of &quot;bitset&lt;N&gt;,&quot; then their names and signatures are:
+ of "bitset&lt;N&gt;," then their names and signatures are:
</para>
<programlisting>
bitset&lt;N&gt;&amp; _Unchecked_set (size_t pos);
@@ -196,19 +186,19 @@ extensions, be aware of two things:
resolution calls for range-checking to be done. We'll just wait and see...
</para>
<para>Finally, two additional searching functions have been added. They return
- the index of the first &quot;on&quot; bit, and the index of the first
- &quot;on&quot; bit that is after <code>prev</code>, respectively:
+ the index of the first "on" bit, and the index of the first
+ "on" bit that is after <code>prev</code>, respectively:
</para>
<programlisting>
size_t _Find_first() const;
size_t _Find_next (size_t prev) const;</programlisting>
<para>The same caveat given for the _Unchecked_* functions applies here also.
</para>
- </sect1>
+ </section>
- <sect1 id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep">
- <title>Deprecated HP/SGI</title>
+ <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated HP/SGI</title></info>
+
<para>
The SGI hashing classes <classname>hash_set</classname> and
@@ -230,8 +220,8 @@ extensions, be aware of two things:
<code>&lt;hash_map&gt;</code> and <code>&lt;hash_set&gt;</code>
are deprecated but available as backwards-compatible extensions,
as discussed further below. <code>&lt;rope&gt;</code> is the
- SGI specialization for large strings (&quot;rope,&quot;
- &quot;large strings,&quot; get it? Love that geeky humor.)
+ SGI specialization for large strings ("rope,"
+ "large strings," get it? Love that geeky humor.)
<code>&lt;slist&gt;</code> is a singly-linked list, for when the
doubly-linked <code>list&lt;&gt;</code> is too much space
overhead, and <code>&lt;rb_tree&gt;</code> exposes the red-black
@@ -240,12 +230,12 @@ extensions, be aware of two things:
</para>
<para>Each of the associative containers map, multimap, set, and multiset
have a counterpart which uses a
- <ulink url="http://www.sgi.com/tech/stl/HashFunction.html">hashing
- function</ulink> to do the arranging, instead of a strict weak ordering
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/HashFunction.html">hashing
+ function</link> to do the arranging, instead of a strict weak ordering
function. The classes take as one of their template parameters a
function object that will return the hash value; by default, an
instantiation of
- <ulink url="http://www.sgi.com/tech/stl/hash.html">hash</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/hash.html">hash</link>.
You should specialize this functor for your class, or define your own,
before trying to use one of the hashing classes.
</para>
@@ -269,13 +259,13 @@ extensions, be aware of two things:
</para>
</blockquote>
- </sect1>
+ </section>
</chapter>
<!-- Chapter 07 : Utilities -->
-<chapter id="manual.ext.util" xreflabel="Utilities">
+<chapter xml:id="manual.ext.util" xreflabel="Utilities"><info><title>Utilities</title></info>
<?dbhtml filename="ext_utilities.html"?>
- <title>Utilities</title>
+
<para>
The &lt;functional&gt; header contains many additional functors
and helper functions, extending section 20.3. They are
@@ -343,9 +333,9 @@ get_temporary_buffer(5, (int*)0);
</chapter>
<!-- Chapter 08 : Algorithms -->
-<chapter id="manual.ext.algorithms" xreflabel="Algorithms">
+<chapter xml:id="manual.ext.algorithms" xreflabel="Algorithms"><info><title>Algorithms</title></info>
<?dbhtml filename="ext_algorithms.html"?>
- <title>Algorithms</title>
+
<para>25.1.6 (count, count_if) is extended with two more versions of count
and count_if. The standard versions return their results. The
additional signatures return void, but take a final parameter by
@@ -381,34 +371,34 @@ get_temporary_buffer(5, (int*)0);
</chapter>
<!-- Chapter 09 : Numerics -->
-<chapter id="manual.ext.numerics" xreflabel="Numerics">
+<chapter xml:id="manual.ext.numerics" xreflabel="Numerics"><info><title>Numerics</title></info>
<?dbhtml filename="ext_numerics.html"?>
- <title>Numerics</title>
+
<para>26.4, the generalized numeric operations such as accumulate, are extended
with the following functions:
</para>
<programlisting>
power (x, n);
power (x, n, moniod_operation);</programlisting>
-<para>Returns, in FORTRAN syntax, &quot;x ** n&quot; where n&gt;=0. In the
+<para>Returns, in FORTRAN syntax, "x ** n" where n&gt;=0. In the
case of n == 0, returns the identity element for the
monoid operation. The two-argument signature uses multiplication (for
- a true &quot;power&quot; implementation), but addition is supported as well.
+ a true "power" implementation), but addition is supported as well.
The operation functor must be associative.
</para>
<para>The <code>iota</code> function wins the award for Extension With the
- Coolest Name. It &quot;assigns sequentially increasing values to a range.
+ Coolest Name. It "assigns sequentially increasing values to a range.
That is, it assigns value to *first, value + 1 to *(first + 1) and so
- on.&quot; Quoted from SGI documentation.
+ on." Quoted from SGI documentation.
</para>
<programlisting>
void iota(_ForwardIter first, _ForwardIter last, _Tp value);</programlisting>
</chapter>
<!-- Chapter 10 : Iterators -->
-<chapter id="manual.ext.iterators" xreflabel="Iterators">
+<chapter xml:id="manual.ext.iterators" xreflabel="Iterators"><info><title>Iterators</title></info>
<?dbhtml filename="ext_iterators.html"?>
- <title>Iterators</title>
+
<para>24.3.2 describes <code>struct iterator</code>, which didn't exist in the
original HP STL implementation (the language wasn't rich enough at the
time). For backwards compatibility, base classes are provided which
@@ -430,17 +420,17 @@ get_temporary_buffer(5, (int*)0);
</chapter>
<!-- Chapter 11 : IO -->
-<chapter id="manual.ext.io" xreflabel="IO">
+<chapter xml:id="manual.ext.io" xreflabel="IO"><info><title>Input and Output</title></info>
<?dbhtml filename="ext_io.html"?>
- <title>Input and Output</title>
+
<para>
Extensions allowing <code>filebuf</code>s to be constructed from
"C" types like FILE*s and file descriptors.
</para>
- <sect1 id="manual.ext.io.filebuf_derived" xreflabel="Derived filebufs">
- <title>Derived filebufs</title>
+ <section xml:id="manual.ext.io.filebuf_derived" xreflabel="Derived filebufs"><info><title>Derived filebufs</title></info>
+
<para>The v2 library included non-standard extensions to construct
<code>std::filebuf</code>s from C stdio types such as
@@ -483,7 +473,7 @@ get_temporary_buffer(5, (int*)0);
the <code>fd()</code> function were removed from the standard
filebuf. Instead, <code>&lt;ext/stdio_filebuf.h&gt;</code> contains
a derived class called
- <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code>__gnu_cxx::stdio_filebuf</code></ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html"><code>__gnu_cxx::stdio_filebuf</code></link>.
This class can be constructed from a C <code>FILE*</code> or a file
descriptor, and provides the <code>fd()</code> function.
</para></listitem>
@@ -496,22 +486,21 @@ get_temporary_buffer(5, (int*)0);
<para>
</para>
- </sect1>
+ </section>
</chapter>
<!-- Chapter 12 : Demangling -->
-<chapter id="manual.ext.demangle" xreflabel="Demangling">
+<chapter xml:id="manual.ext.demangle" xreflabel="Demangling"><info><title>Demangling</title></info>
<?dbhtml filename="ext_demangling.html"?>
- <title>Demangling</title>
+
<para>
Transforming C++ ABI identifiers (like RTTI symbols) into the
original C++ source identifiers is called
<quote>demangling.</quote>
</para>
<para>
- If you have read the <ulink
- url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html">source
- documentation for <code>namespace abi</code></ulink> then you are
+ If you have read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01115.html">source
+ documentation for <code>namespace abi</code></link> then you are
aware of the cross-vendor C++ ABI in use by GCC. One of the
exposed functions is used for demangling,
<code>abi::__cxa_demangle</code>.
@@ -586,8 +575,7 @@ int main()
</chapter>
<!-- Chapter 13 : Concurrency -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="concurrency_extensions.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency_extensions.xml">
</xi:include>
</part>
diff --git a/libstdc++-v3/doc/xml/manual/internals.xml b/libstdc++-v3/doc/xml/manual/internals.xml
index 63664cea3f1..72af0b835c8 100644
--- a/libstdc++-v3/doc/xml/manual/internals.xml
+++ b/libstdc++-v3/doc/xml/manual/internals.xml
@@ -1,7 +1,8 @@
-<sect1 id="appendix.porting.internals" xreflabel="Portin Internals">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="appendix.porting.internals" xreflabel="Portin Internals">
<?dbhtml filename="internals.html"?>
-<sect1info>
+<info><title>Porting to New Hardware or Operating Systems</title>
<keywordset>
<keyword>
ISO C++
@@ -10,9 +11,9 @@
internals
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>Porting to New Hardware or Operating Systems</title>
<para>
</para>
@@ -45,8 +46,8 @@ a "host." The comment at the top of <code>configure.ac</code> explains why.)
</para>
-<sect2 id="internals.os">
-<title>Operating System</title>
+<section xml:id="internals.os"><info><title>Operating System</title></info>
+
<para>If you are porting to a new operating system (as opposed to a new chip
using an existing operating system), you will need to create a new
@@ -151,11 +152,11 @@ this:
<para>We recommend copying an existing <code>os_defines.h</code> to use as a
starting point.
</para>
-</sect2>
+</section>
-<sect2 id="internals.cpu">
-<title>CPU</title>
+<section xml:id="internals.cpu"><info><title>CPU</title></info>
+
<para>If you are porting to a new chip (as opposed to a new operating system
running on an existing chip), you will need to create a new directory in the
@@ -183,11 +184,11 @@ example, <code>alpha</code>, <code>alphaev5</code>, and <code>alphaev6</code> al
appropriate for your chip.
</para>
-</sect2>
+</section>
+
+<section xml:id="internals.char_types"><info><title>Character Types</title></info>
-<sect2 id="internals.char_types">
-<title>Character Types</title>
<para>The library requires that you provide three header files to implement
character classification, analogous to that provided by the C libraries
@@ -399,11 +400,11 @@ from <code>__low</code> up until <code>__high</code> into the vector given by
}
</programlisting>
-</sect2>
+</section>
-<sect2 id="internals.thread_safety">
-<title>Thread Safety</title>
+<section xml:id="internals.thread_safety"><info><title>Thread Safety</title></info>
+
<para>The C++ library string functionality requires a couple of atomic
operations to provide thread-safety. If you don't take any special
@@ -482,11 +483,11 @@ must be equivalent to those provided here, but using atomic operations:
}
</programlisting>
-</sect2>
+</section>
+
+<section xml:id="internals.numeric_limits"><info><title>Numeric Limits</title></info>
-<sect2 id="internals.numeric_limits">
-<title>Numeric Limits</title>
<para>The C++ library requires information about the fundamental data types,
such as the minimum and maximum representable values of each type.
@@ -504,11 +505,11 @@ To take that approach, create a new file called <code>cpu_limits.h</code> in
your CPU configuration directory (see <link linkend="internals.cpu">CPU</link>).
</para>
-</sect2>
+</section>
+
+<section xml:id="internals.libtool"><info><title>Libtool</title></info>
-<sect2 id="internals.libtool">
-<title>Libtool</title>
<para>The C++ library is compiled, archived and linked with libtool.
Explaining the full workings of libtool is beyond the scope of this
@@ -543,6 +544,6 @@ operating system.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index cfd8c4fe6ac..705119b6d3e 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -1,12 +1,10 @@
-<?xml version='1.0'?>
-<!DOCTYPE part PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<part id="manual.intro" xreflabel="Introduction">
+<part xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual.intro" xreflabel="Introduction">
<?dbhtml filename="intro.html"?>
-<partinfo>
+<info><title>
+ Introduction
+ <indexterm><primary>Introduction</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,75 +13,65 @@
library
</keyword>
</keywordset>
-</partinfo>
+</info>
+
-<title>
- Introduction
- <indexterm><primary>Introduction</primary></indexterm>
-</title>
<!-- Chapter 01 : Status -->
-<chapter id="manual.intro.status" xreflabel="Status">
+<chapter xml:id="manual.intro.status" xreflabel="Status"><info><title>Status</title></info>
<?dbhtml filename="status.html"?>
- <title>Status</title>
+
<!-- Section 01 : Implementation Status -->
- <sect1 id="manual.intro.status.iso" xreflabel="Status">
- <title>Implementation Status</title>
+ <section xml:id="manual.intro.status.iso" xreflabel="Status"><info><title>Implementation Status</title></info>
+
<!-- Section 01.1 : Status C++ 1998 -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="status_cxx1998.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx1998.xml">
</xi:include>
<!-- Section 01.2 : Status C++ 200x -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="status_cxx200x.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxx200x.xml">
</xi:include>
<!-- Section 01.3 : Status C++ TR1 -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="status_cxxtr1.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxxtr1.xml">
</xi:include>
<!-- Section 01.4 : Status C++ TR24733 -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="status_cxxtr24733.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="status_cxxtr24733.xml">
</xi:include>
- </sect1>
+ </section>
<!-- Section 02 : License -->
- <sect1 id="manual.intro.status.license" xreflabel="License">
+ <section xml:id="manual.intro.status.license" xreflabel="License"><info><title>License</title></info>
<?dbhtml filename="license.html"?>
- <title>License</title>
+
<para>
There are two licenses affecting GNU libstdc++: one for the code,
and one for the documentation.
</para>
<para>
- There is a license section in the FAQ regarding common <link
- linkend="faq.license">questions</link>. If you have more
- questions, ask the FSF or the <ulink
- url="http://gcc.gnu.org/lists.html">gcc mailing list</ulink>.
+ There is a license section in the FAQ regarding common <link linkend="faq.license">questions</link>. If you have more
+ questions, ask the FSF or the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/lists.html">gcc mailing list</link>.
</para>
- <sect2 id="manual.intro.status.license.gpl" xreflabel="License GPL">
- <title>The Code: GPL</title>
+ <section xml:id="manual.intro.status.license.gpl" xreflabel="License GPL"><info><title>The Code: GPL</title></info>
+
<para>
- The source code is distributed under the <link
- linkend="appendix.gpl-3.0">GNU General Public License version 3</link>,
+ The source code is distributed under the <link linkend="appendix.gpl-3.0">GNU General Public License version 3</link>,
with the addition under section 7 of an exception described in
the <quote>GCC Runtime Library Exception, version 3.1</quote>
as follows (or see the file COPYING.RUNTIME):
</para>
- <literallayout>
+ <literallayout class="normal">
GCC RUNTIME LIBRARY EXCEPTION
Version 3.1, 31 March 2009
-Copyright (C) 2009 <ulink url="http://www.fsf.org">Free Software Foundation, Inc.</ulink>
+Copyright (C) 2009 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">Free Software Foundation, Inc.</link>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
@@ -157,17 +145,17 @@ requirements of the license of GCC.
Hopefully that text is self-explanatory. If it isn't, you need to speak
to your lawyer, or the Free Software Foundation.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.status.license.fdl" xreflabel="License FDL">
- <title>The Documentation: GPL, FDL</title>
+ <section xml:id="manual.intro.status.license.fdl" xreflabel="License FDL"><info><title>The Documentation: GPL, FDL</title></info>
+
<para>
The documentation shipped with the library and made available over
the web, excluding the pages generated from source comments, are
copyrighted by the Free Software Foundation, and placed under the
- <link linkend="appendix.gfdl-1.2"> GNU Free Documentation
- License version 1.2</link>. There are no Front-Cover Texts, no
+ <link linkend="appendix.gfdl-1.3"> GNU Free Documentation
+ License version 1.3</link>. There are no Front-Cover Texts, no
Back-Cover Texts, and no Invariant Sections.
</para>
@@ -182,27 +170,26 @@ requirements of the license of GCC.
If you plan on making copies of the documentation, please let us know.
We can probably offer suggestions.
</para>
- </sect2>
+ </section>
- </sect1>
+ </section>
<!-- Section 03 : Known Bugs -->
- <sect1 id="manual.intro.status.bugs" xreflabel="Bugs">
+ <section xml:id="manual.intro.status.bugs" xreflabel="Bugs"><info><title>Bugs</title></info>
<?dbhtml filename="bugs.html"?>
- <title>Bugs</title>
+
- <sect2 id="manual.intro.status.bugs.impl" xreflabel="Bugs impl">
- <title>Implementation Bugs</title>
+ <section xml:id="manual.intro.status.bugs.impl" xreflabel="Bugs impl"><info><title>Implementation Bugs</title></info>
+
<para>
Information on known bugs, details on efforts to fix them, and
- fixed bugs are all available as part of the <ulink
- url="http://gcc.gnu.org/bugs/">GCC bug tracking system</ulink>,
+ fixed bugs are all available as part of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/bugs/">GCC bug tracking system</link>,
with the category set to <literal>libstdc++</literal>.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.status.bugs.iso" xreflabel="Bugs iso">
- <title>Standard Bugs</title>
+ <section xml:id="manual.intro.status.bugs.iso" xreflabel="Bugs iso"><info><title>Standard Bugs</title></info>
+
<para>
Everybody's got issues. Even the C++ Standard Library.
</para>
@@ -216,10 +203,10 @@ requirements of the license of GCC.
Here are the issues which have resulted in code changes to the library.
The links are to the specific defect reports from a <emphasis>partial
copy</emphasis> of the Issues List. You can read the full version online
- at the <ulink url="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++
- Committee homepage</ulink>, linked to on the
- <ulink url="http://gcc.gnu.org/readings.html">GCC &quot;Readings&quot;
- page</ulink>. If
+ at the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">ISO C++
+ Committee homepage</link>, linked to on the
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/readings.html">GCC "Readings"
+ page</link>. If
you spend a lot of time reading the issues, we recommend downloading
the ZIP file and reading them locally.
</para>
@@ -237,116 +224,116 @@ requirements of the license of GCC.
and src directories for appearances of
<constant>_GLIBCXX_RESOLVE_LIB_DEFECTS</constant> for examples
of style. Note that we usually do not make changes to the
- code until an issue has reached <ulink url="../ext/lwg-active.html#DR">DR</ulink> status.
+ code until an issue has reached <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-active.html#DR">DR</link> status.
</para>
<variablelist>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#5">5</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#5">5</link>:
<emphasis>string::compare specification questionable</emphasis>
</term>
<listitem><para>This should be two overloaded functions rather than a single function.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#17">17</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#17">17</link>:
<emphasis>Bad bool parsing</emphasis>
</term>
<listitem><para>Apparently extracting Boolean values was messed up...
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#19">19</ulink>:
- <emphasis>&quot;Noconv&quot; definition too vague</emphasis>
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#19">19</link>:
+ <emphasis>"Noconv" definition too vague</emphasis>
</term>
<listitem><para>If <code>codecvt::do_in</code> returns <code>noconv</code> there are
no changes to the values in <code>[to, to_limit)</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#22">22</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#22">22</link>:
<emphasis>Member open vs flags</emphasis>
</term>
<listitem><para>Re-opening a file stream does <emphasis>not</emphasis> clear the state flags.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#23">23</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#23">23</link>:
<emphasis>Num_get overflow result</emphasis>
</term>
<listitem><para>Implement the proposed resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#25">25</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#25">25</link>:
<emphasis>String operator&lt;&lt; uses width() value wrong</emphasis>
</term>
<listitem><para>Padding issues.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#48">48</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#48">48</link>:
<emphasis>Use of non-existent exception constructor</emphasis>
</term>
<listitem><para>An instance of <code>ios_base::failure</code> is constructed instead.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#49">49</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#49">49</link>:
<emphasis>Underspecification of ios_base::sync_with_stdio</emphasis>
</term>
<listitem><para>The return type is the <emphasis>previous</emphasis> state of synchronization.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#50">50</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#50">50</link>:
<emphasis>Copy constructor and assignment operator of ios_base</emphasis>
</term>
<listitem><para>These members functions are declared <code>private</code> and are
thus inaccessible. Specifying the correct semantics of
- &quot;copying stream state&quot; was deemed too complicated.
+ "copying stream state" was deemed too complicated.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#60">60</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#60">60</link>:
<emphasis>What is a formatted input function?</emphasis>
</term>
<listitem><para>This DR made many widespread changes to <code>basic_istream</code>
and <code>basic_ostream</code> all of which have been implemented.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#63">63</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#63">63</link>:
<emphasis>Exception-handling policy for unformatted output</emphasis>
</term>
<listitem><para>Make the policy consistent with that of formatted input, unformatted
input, and formatted output.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#68">68</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#68">68</link>:
<emphasis>Extractors for char* should store null at end</emphasis>
</term>
<listitem><para>And they do now. An editing glitch in the last item in the list of
[27.6.1.2.3]/7.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#74">74</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#74">74</link>:
<emphasis>Garbled text for codecvt::do_max_length</emphasis>
</term>
<listitem><para>The text of the standard was gibberish. Typos gone rampant.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#75">75</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#75">75</link>:
<emphasis>Contradiction in codecvt::length's argument types</emphasis>
</term>
<listitem><para>Change the first parameter to <code>stateT&amp;</code> and implement
the new effects paragraph.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#83">83</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#83">83</link>:
<emphasis>string::npos vs. string::max_size()</emphasis>
</term>
<listitem><para>Safety checks on the size of the string should test against
<code>max_size()</code> rather than <code>npos</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#90">90</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#90">90</link>:
<emphasis>Incorrect description of operator&gt;&gt; for strings</emphasis>
</term>
<listitem><para>The effect contain <code>isspace(c,getloc())</code> which must be
replaced by <code>isspace(c,is.getloc())</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#91">91</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#91">91</link>:
<emphasis>Description of operator&gt;&gt; and getline() for string&lt;&gt;
might cause endless loop</emphasis>
</term>
@@ -355,7 +342,7 @@ requirements of the license of GCC.
not required to set <code>gcount</code>).
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#103">103</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#103">103</link>:
<emphasis>set::iterator is required to be modifiable, but this allows
modification of keys.</emphasis>
</term>
@@ -364,14 +351,14 @@ requirements of the license of GCC.
</code> are constant iterators.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#109">109</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#109">109</link>:
<emphasis>Missing binders for non-const sequence elements</emphasis>
</term>
<listitem><para>The <code>binder1st</code> and <code>binder2nd</code> didn't have an
<code>operator()</code> taking a non-const parameter.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#110">110</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#110">110</link>:
<emphasis>istreambuf_iterator::equal not const</emphasis>
</term>
<listitem><para>This was not a const member function. Note that the DR says to
@@ -379,31 +366,31 @@ requirements of the license of GCC.
overloaded version with identical contents.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#117">117</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#117">117</link>:
<emphasis>basic_ostream uses nonexistent num_put member functions</emphasis>
</term>
<listitem><para><code>num_put::put()</code> was overloaded on the wrong types.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#118">118</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#118">118</link>:
<emphasis>basic_istream uses nonexistent num_get member functions</emphasis>
</term>
<listitem><para>Same as 117, but for <code>num_get::get()</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#129">129</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#129">129</link>:
<emphasis>Need error indication from seekp() and seekg()</emphasis>
</term>
<listitem><para>These functions set <code>failbit</code> on error now.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#130">130</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#130">130</link>:
<emphasis>Return type of container::erase(iterator) differs for associative containers</emphasis>
</term>
<listitem><para>Make member <code>erase</code> return iterator for <code>set</code>, <code>multiset</code>, <code>map</code>, <code>multimap</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#136">136</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#136">136</link>:
<emphasis>seekp, seekg setting wrong streams?</emphasis>
</term>
<listitem><para><code>seekp</code> should only set the output stream, and
@@ -417,46 +404,46 @@ requirements of the license of GCC.
should probably not be calling <code>underflow()</code>.
</para></listitem></varlistentry> -->
- <varlistentry><term><ulink url="../ext/lwg-defects.html#167">167</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#167">167</link>:
<emphasis>Improper use of traits_type::length()</emphasis>
</term>
<listitem><para><code>op&lt;&lt;</code> with a <code>const char*</code> was
calculating an incorrect number of characters to write.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#169">169</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#169">169</link>:
<emphasis>Bad efficiency of overflow() mandated</emphasis>
</term>
<listitem><para>Grow efficiently the internal array object.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#171">171</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#171">171</link>:
<emphasis>Strange seekpos() semantics due to joint position</emphasis>
</term>
<listitem><para>Quite complex to summarize...
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#181">181</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#181">181</link>:
<emphasis>make_pair() unintended behavior</emphasis>
</term>
<listitem><para>This function used to take its arguments as reference-to-const, now
it copies them (pass by value).
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#195">195</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#195">195</link>:
<emphasis>Should basic_istream::sentry's constructor ever set eofbit?</emphasis>
</term>
<listitem><para>Yes, it can, specifically if EOF is reached while skipping whitespace.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#211">211</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#211">211</link>:
<emphasis>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</emphasis>
</term>
<listitem><para>If nothing is extracted into the string, <code>op&gt;&gt;</code> now
sets <code>failbit</code> (which can cause an exception, etc., etc.).
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#214">214</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#214">214</link>:
<emphasis>set::find() missing const overload</emphasis>
</term>
<listitem><para>Both <code>set</code> and <code>multiset</code> were missing
@@ -464,47 +451,47 @@ requirements of the license of GCC.
for const instances.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#231">231</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#231">231</link>:
<emphasis>Precision in iostream?</emphasis>
</term>
<listitem><para>For conversion from a floating-point type, <code>str.precision()</code>
is specified in the conversion specification.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#233">233</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#233">233</link>:
<emphasis>Insertion hints in associative containers</emphasis>
</term>
<listitem><para>Implement N1780, first check before then check after, insert as close
to hint as possible.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#235">235</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#235">235</link>:
<emphasis>No specification of default ctor for reverse_iterator</emphasis>
</term>
<listitem><para>The declaration of <code>reverse_iterator</code> lists a default constructor.
However, no specification is given what this constructor should do.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#241">241</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#241">241</link>:
<emphasis>Does unique_copy() require CopyConstructible and Assignable?</emphasis>
</term>
<listitem><para>Add a helper for forward_iterator/output_iterator, fix the existing
one for input_iterator/output_iterator to not rely on Assignability.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#243">243</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#243">243</link>:
<emphasis>get and getline when sentry reports failure</emphasis>
</term>
<listitem><para>Store a null character only if the character array has a non-zero size.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#251">251</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#251">251</link>:
<emphasis>basic_stringbuf missing allocator_type</emphasis>
</term>
<listitem><para>This nested typedef was originally not specified.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#253">253</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#253">253</link>:
<emphasis>valarray helper functions are almost entirely useless</emphasis>
</term>
<listitem><para>Make the copy constructor and copy-assignment operator declarations
@@ -512,60 +499,60 @@ requirements of the license of GCC.
definitions.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#265">265</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#265">265</link>:
<emphasis>std::pair::pair() effects overly restrictive</emphasis>
</term>
<listitem><para>The default ctor would build its members from copies of temporaries;
now it simply uses their respective default ctors.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#266">266</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#266">266</link>:
<emphasis>bad_exception::~bad_exception() missing Effects clause</emphasis>
</term>
<listitem><para>The <code>bad_</code>* classes no longer have destructors (they
are trivial), since no description of them was ever given.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#271">271</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#271">271</link>:
<emphasis>basic_iostream missing typedefs</emphasis>
</term>
<listitem><para>The typedefs it inherits from its base classes can't be used, since
(for example) <code>basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#275">275</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#275">275</link>:
<emphasis>Wrong type in num_get::get() overloads</emphasis>
</term>
<listitem><para>Similar to 118.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#280">280</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#280">280</link>:
<emphasis>Comparison of reverse_iterator to const reverse_iterator</emphasis>
</term>
<listitem><para>Add global functions with two template parameters.
(NB: not added for now a templated assignment operator)
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#292">292</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#292">292</link>:
<emphasis>Effects of a.copyfmt (a)</emphasis>
</term>
<listitem><para>If <code>(this == &amp;rhs)</code> do nothing.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#300">300</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#300">300</link>:
<emphasis>List::merge() specification incomplete</emphasis>
</term>
<listitem><para>If <code>(this == &amp;x)</code> do nothing.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#303">303</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#303">303</link>:
<emphasis>Bitset input operator underspecified</emphasis>
</term>
<listitem><para>Basically, compare the input character to
<code>is.widen(0)</code> and <code>is.widen(1)</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#305">305</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#305">305</link>:
<emphasis>Default behavior of codecvt&lt;wchar_t, char,
mbstate_t&gt;::length()</emphasis>
</term>
@@ -573,20 +560,20 @@ requirements of the license of GCC.
mbstate_t&gt;::do_length</code> must return.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#328">328</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#328">328</link>:
<emphasis>Bad sprintf format modifier in
money_put&lt;&gt;::do_put()</emphasis>
</term>
- <listitem><para>Change the format string to &quot;%.0Lf&quot;.
+ <listitem><para>Change the format string to "%.0Lf".
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#365">365</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#365">365</link>:
<emphasis>Lack of const-qualification in clause 27</emphasis>
</term>
<listitem><para>Add const overloads of <code>is_open</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#387">387</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#387">387</link>:
<emphasis>std::complex over-encapsulated</emphasis>
</term>
<listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code>
@@ -595,26 +582,26 @@ requirements of the license of GCC.
free functions.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#389">389</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#389">389</link>:
<emphasis>Const overload of valarray::operator[] returns
by value</emphasis>
</term>
<listitem><para>Change it to return a <code>const T&amp;</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#396">396</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#396">396</link>:
<emphasis>what are characters zero and one</emphasis>
</term>
<listitem><para>Implement the proposed resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#402">402</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#402">402</link>:
<emphasis>Wrong new expression in [some_]allocator::construct</emphasis>
</term>
- <listitem><para>Replace &quot;new&quot; with &quot;::new&quot;.
+ <listitem><para>Replace "new" with "::new".
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#408">408</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-active.html#408">408</link>:
<emphasis>
Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
</emphasis>
@@ -622,76 +609,76 @@ requirements of the license of GCC.
<listitem><para>Tweak the debug-mode checks in _Safe_iterator.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#409">409</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#409">409</link>:
<emphasis>Closing an fstream should clear the error state</emphasis>
</term>
<listitem><para>Have <code>open</code> clear the error flags.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-closed.html#431">431</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#431">431</link>:
<emphasis>Swapping containers with unequal allocators</emphasis>
</term>
<listitem><para>Implement Option 3, as per N1599.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#432">432</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#432">432</link>:
<emphasis>stringbuf::overflow() makes only one write position
available</emphasis>
</term>
<listitem><para>Implement the resolution, beyond DR 169.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#434">434</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#434">434</link>:
<emphasis>bitset::to_string() hard to use</emphasis>
</term>
<listitem><para>Add three overloads, taking fewer template arguments.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#438">438</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#438">438</link>:
<emphasis>Ambiguity in the "do the right thing" clause</emphasis>
</term>
<listitem><para>Implement the resolution, basically cast less.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#453">453</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#453">453</link>:
<emphasis>basic_stringbuf::seekoff need not always fail for an empty stream</emphasis>
</term>
<listitem><para>Don't fail if the next pointer is null and newoff is zero.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#455">455</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#455">455</link>:
<emphasis>cerr::tie() and wcerr::tie() are overspecified</emphasis>
</term>
<listitem><para>Initialize cerr tied to cout and wcerr tied to wcout.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#464">464</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#464">464</link>:
<emphasis>Suggestion for new member functions in standard containers</emphasis>
</term>
<listitem><para>Add <code>data()</code> to <code>std::vector</code> and
<code>at(const key_type&amp;)</code> to <code>std::map</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#508">508</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#508">508</link>:
<emphasis>Bad parameters for ranlux64_base_01</emphasis>
</term>
<listitem><para>Fix the parameters.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-closed.html#512">512</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#512">512</link>:
<emphasis>Seeding subtract_with_carry_01 from a single unsigned long</emphasis>
</term>
<listitem><para>Construct a <code>linear_congruential</code> engine and seed with it.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-closed.html#526">526</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#526">526</link>:
<emphasis>Is it undefined if a function in the standard changes in
parameters?</emphasis>
</term>
<listitem><para>Use &amp;value.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#538">538</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#538">538</link>:
<emphasis>241 again: Does unique_copy() require CopyConstructible
and Assignable?</emphasis>
</term>
@@ -699,7 +686,7 @@ requirements of the license of GCC.
input_iterator' value_type.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#539">539</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-active.html#539">539</link>:
<emphasis>partial_sum and adjacent_difference should mention
requirements</emphasis>
</term>
@@ -707,116 +694,116 @@ requirements of the license of GCC.
in adjacent_difference.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#541">541</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#541">541</link>:
<emphasis>shared_ptr template assignment and void</emphasis>
</term>
<listitem><para>Add an auto_ptr&lt;void&gt; specialization.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#543">543</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#543">543</link>:
<emphasis>valarray slice default constructor</emphasis>
</term>
<listitem><para>Follow the straightforward proposed resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#550">550</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#550">550</link>:
<emphasis>What should the return type of pow(float,int) be?</emphasis>
</term>
<listitem><para>In C++0x mode, remove the pow(float,int), etc., signatures.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#586">586</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#586">586</link>:
<emphasis>string inserter not a formatted function</emphasis>
</term>
<listitem><para>Change it to be a formatted output function (i.e. catch exceptions).
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#596">596</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#596">596</link>:
<emphasis>27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis>
</term>
<listitem><para>Add the missing modes to fopen_mode.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#630">630</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#630">630</link>:
<emphasis>arrays of valarray</emphasis>
</term>
<listitem><para>Implement the simple resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#660">660</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#660">660</link>:
<emphasis>Missing bitwise operations</emphasis>
</term>
<listitem><para>Add the missing operations.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#691">691</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#691">691</link>:
<emphasis>const_local_iterator cbegin, cend missing from TR1</emphasis>
</term>
<listitem><para>In C++0x mode add cbegin(size_type) and cend(size_type)
to the unordered containers.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#693">693</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#693">693</link>:
<emphasis>std::bitset::all() missing</emphasis>
</term>
<listitem><para>Add it, consistently with the discussion.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#695">695</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#695">695</link>:
<emphasis>ctype&lt;char&gt;::classic_table() not accessible</emphasis>
</term>
<listitem><para>Make the member functions table and classic_table public.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#696">696</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#696">696</link>:
<emphasis>istream::operator&gt;&gt;(int&amp;) broken</emphasis>
</term>
<listitem><para>Implement the straightforward resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#761">761</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#761">761</link>:
<emphasis>unordered_map needs an at() member function</emphasis>
</term>
<listitem><para>In C++0x mode, add at() and at() const.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#775">775</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#775">775</link>:
<emphasis>Tuple indexing should be unsigned?</emphasis>
</term>
- <listitem><para>Implement the int -> size_t replacements.
+ <listitem><para>Implement the int -&gt; size_t replacements.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#776">776</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#776">776</link>:
<emphasis>Undescribed assign function of std::array</emphasis>
</term>
<listitem><para>In C++0x mode, remove assign, add fill.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#781">781</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#781">781</link>:
<emphasis>std::complex should add missing C99 functions</emphasis>
</term>
<listitem><para>In C++0x mode, add std::proj.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#809">809</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#809">809</link>:
<emphasis>std::swap should be overloaded for array types</emphasis>
</term>
<listitem><para>Add the overload.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#844">844</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#844">844</link>:
<emphasis>complex pow return type is ambiguous</emphasis>
</term>
<listitem><para>In C++0x mode, remove the pow(complex&lt;T&gt;, int) signature.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-defects.html#853">853</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#853">853</link>:
<emphasis>to_string needs updating with zero and one</emphasis>
</term>
<listitem><para>Update / add the signatures.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#865">865</ulink>:
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-active.html#865">865</link>:
<emphasis>More algorithms that throw away information</emphasis>
</term>
<listitem><para>The traditional HP / SGI return type and value is blessed
@@ -824,15 +811,15 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
</variablelist>
- </sect2>
- </sect1>
+ </section>
+ </section>
</chapter>
<!-- Chapter 02 : Setup -->
-<chapter id="manual.intro.setup" xreflabel="Setup">
+<chapter xml:id="manual.intro.setup" xreflabel="Setup"><info><title>Setup</title></info>
<?dbhtml filename="setup.html"?>
- <title>Setup</title>
+
<para>To transform libstdc++ sources into installed include files
and properly built binaries useful for linking to other software is
@@ -859,36 +846,33 @@ requirements of the license of GCC.
</para>
<!-- Section 01 : Prerequisites -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="prerequisites.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="prerequisites.xml">
</xi:include>
<!-- Section 02 : Configure -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="configure.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="configure.xml">
</xi:include>
<!-- Section 03 : Make -->
-<sect1 id="manual.intro.setup.make" xreflabel="Make">
+<section xml:id="manual.intro.setup.make" xreflabel="Make"><info><title>Make</title></info>
<?dbhtml filename="make.html"?>
-<title>Make</title>
+
<para>If you have never done this before, you should read the basic
- <ulink url="http://gcc.gnu.org/install/">GCC Installation
- Instructions</ulink> first. Read <emphasis>all of them</emphasis>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/">GCC Installation
+ Instructions</link> first. Read <emphasis>all of them</emphasis>.
<emphasis>Twice.</emphasis>
</para>
-<para>Then type:<command>make</command>, and congratulations, you're
+<para>Then type: <command>make</command>, and congratulations, you've
started to build.
</para>
-</sect1>
+</section>
</chapter>
<!-- Chapter 03 : Using -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="using.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using.xml">
</xi:include>
</part>
diff --git a/libstdc++-v3/doc/xml/manual/io.xml b/libstdc++-v3/doc/xml/manual/io.xml
index 13a1d7a47d2..6378313b593 100644
--- a/libstdc++-v3/doc/xml/manual/io.xml
+++ b/libstdc++-v3/doc/xml/manual/io.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.io" xreflabel="Input and Output">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.io" xreflabel="Input and Output">
<?dbhtml filename="io.html"?>
-<chapterinfo>
+<info><title>
+ Input and Output
+ <indexterm><primary>Input and Output</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,17 +14,14 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Input and Output
- <indexterm><primary>Input and Output</primary></indexterm>
-</title>
<!-- Sect1 01 : Iostream Objects -->
-<sect1 id="std.io.objects" xreflabel="IO Objects">
+<section xml:id="std.io.objects" xreflabel="IO Objects"><info><title>Iostream Objects</title></info>
<?dbhtml filename="iostream_objects.html"?>
- <title>Iostream Objects</title>
+
<para>To minimize the time you have to wait on the compiler, it's good to
only include the headers you really need. Many people simply include
@@ -35,10 +31,10 @@
</para>
<para><emphasis>&lt;iosfwd&gt;</emphasis> should be included whenever you simply
need the <emphasis>name</emphasis> of an I/O-related class, such as
- &quot;ofstream&quot; or &quot;basic_streambuf&quot;. Like the name
+ "ofstream" or "basic_streambuf". Like the name
implies, these are forward declarations. (A word to all you fellow
old school programmers: trying to forward declare classes like
- &quot;class istream;&quot; won't work. Look in the iosfwd header if
+ "class istream;" won't work. Look in the iosfwd header if
you'd like to know why.) For example,
</para>
<programlisting>
@@ -93,9 +89,9 @@
the various concrete implementations. If you are only using the
interfaces, then you only need to use the appropriate interface header.
</para>
- <para><emphasis>&lt;iomanip&gt;</emphasis> provides &quot;extractors and inserters
+ <para><emphasis>&lt;iomanip&gt;</emphasis> provides "extractors and inserters
that alter information maintained by class ios_base and its derived
- classes,&quot; such as std::setprecision and std::setw. If you need
+ classes," such as std::setprecision and std::setw. If you need
to write expressions like <code>os &lt;&lt; setw(3);</code> or
<code>is &gt;&gt; setbase(8);</code>, you must include &lt;iomanip&gt;.
</para>
@@ -157,24 +153,24 @@
compile times will go down when there's less parsing work to do.
</para>
-</sect1>
+</section>
<!-- Sect1 02 : Stream Buffers -->
-<sect1 id="std.io.streambufs" xreflabel="Stream Buffers">
+<section xml:id="std.io.streambufs" xreflabel="Stream Buffers"><info><title>Stream Buffers</title></info>
<?dbhtml filename="streambufs.html"?>
- <title>Stream Buffers</title>
+
- <sect2 id="io.streambuf.derived" xreflabel="Derived streambuf Classes">
- <title>Derived streambuf Classes</title>
+ <section xml:id="io.streambuf.derived" xreflabel="Derived streambuf Classes"><info><title>Derived streambuf Classes</title></info>
+
<para>
</para>
<para>Creating your own stream buffers for I/O can be remarkably easy.
If you are interested in doing so, we highly recommend two very
excellent books:
- <ulink url="http://www.angelikalanger.com/iostreams.html">Standard C++
- IOStreams and Locales</ulink> by Langer and Kreft, ISBN 0-201-18395-1, and
- <ulink url="http://www.josuttis.com/libbook/">The C++ Standard Library</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.angelikalanger.com/iostreams.html">Standard C++
+ IOStreams and Locales</link> by Langer and Kreft, ISBN 0-201-18395-1, and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.josuttis.com/libbook/">The C++ Standard Library</link>
by Nicolai Josuttis, ISBN 0-201-37926-0. Both are published by
Addison-Wesley, who isn't paying us a cent for saying that, honest.
</para>
@@ -223,14 +219,14 @@
</programlisting>
<para>Try it yourself! More examples can be found in 3.1.x code, in
<code>include/ext/*_filebuf.h</code>, and in this article by James Kanze:
- <ulink url="http://kanze.james.neuf.fr/articles/fltrsbf1.html">Filtering
- Streambufs</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kanze.james.neuf.fr/articles/fltrsbf1.html">Filtering
+ Streambufs</link>.
</para>
- </sect2>
+ </section>
- <sect2 id="io.streambuf.buffering" xreflabel="Buffering">
- <title>Buffering</title>
+ <section xml:id="io.streambuf.buffering" xreflabel="Buffering"><info><title>Buffering</title></info>
+
<para>First, are you sure that you understand buffering? Chaptericularly
the fact that C++ may not, in fact, have anything to do with it?
</para>
@@ -241,8 +237,8 @@
when the output stream is, in fact, a terminal and not a file
or some other device -- and <emphasis>that</emphasis> may not even be true
since C++ says nothing about files nor terminals. All of that is
- system-dependent. (The &quot;newline-buffer-flushing only occurring
- on terminals&quot; thing is mostly true on Unix systems, though.)
+ system-dependent. (The "newline-buffer-flushing only occurring
+ on terminals" thing is mostly true on Unix systems, though.)
</para>
<para>Some people also believe that sending <code>endl</code> down an
output stream only writes a newline. This is incorrect; after a
@@ -252,17 +248,17 @@
wasted when doing this to a file:
</para>
<programlisting>
- output &lt;&lt; &quot;a line of text&quot; &lt;&lt; endl;
+ output &lt;&lt; "a line of text" &lt;&lt; endl;
output &lt;&lt; some_data_variable &lt;&lt; endl;
- output &lt;&lt; &quot;another line of text&quot; &lt;&lt; endl; </programlisting>
+ output &lt;&lt; "another line of text" &lt;&lt; endl; </programlisting>
<para>The proper thing to do in this case to just write the data out
and let the libraries and the system worry about the buffering.
If you need a newline, just write a newline:
</para>
<programlisting>
- output &lt;&lt; &quot;a line of text\n&quot;
+ output &lt;&lt; "a line of text\n"
&lt;&lt; some_data_variable &lt;&lt; '\n'
- &lt;&lt; &quot;another line of text\n&quot;; </programlisting>
+ &lt;&lt; "another line of text\n"; </programlisting>
<para>I have also joined the output statements into a single statement.
You could make the code prettier by moving the single newline to
the start of the quoted text on the last line, for example.
@@ -289,10 +285,10 @@
os.rdbuf()-&gt;pubsetbuf(0,0);
is.rdbuf()-&gt;pubsetbuf(0,0);
- os.open(&quot;/foo/bar/baz&quot;);
- is.open(&quot;/qux/quux/quuux&quot;);
+ os.open("/foo/bar/baz");
+ is.open("/qux/quux/quuux");
...
- os &lt;&lt; &quot;this data is written immediately\n&quot;;
+ os &lt;&lt; "this data is written immediately\n";
is &gt;&gt; i; // and this will probably cause a disk read </programlisting>
<para>Since all aspects of buffering are handled by a streambuf-derived
member, it is necessary to get at that member with <code>rdbuf()</code>.
@@ -303,8 +299,8 @@
<para>A great deal of this is implementation-dependent. For example,
<code>streambuf</code> does not specify any actions for its own
<code>setbuf()</code>-ish functions; the classes derived from
- <code>streambuf</code> each define behavior that &quot;makes
- sense&quot; for that class: an argument of (0,0) turns off buffering
+ <code>streambuf</code> each define behavior that "makes
+ sense" for that class: an argument of (0,0) turns off buffering
for <code>filebuf</code> but does nothing at all for its siblings
<code>stringbuf</code> and <code>strstreambuf</code>, and specifying
anything other than (0,0) has varying effects.
@@ -320,15 +316,15 @@
changing those are system-dependent.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Sect1 03 : Memory-based Streams -->
-<sect1 id="std.io.memstreams" xreflabel="Memory Streams">
+<section xml:id="std.io.memstreams" xreflabel="Memory Streams"><info><title>Memory Based Streams</title></info>
<?dbhtml filename="stringstreams.html"?>
- <title>Memory Based Streams</title>
- <sect2 id="std.io.memstreams.compat" xreflabel="Compatibility strstream">
- <title>Compatibility With strstream</title>
+
+ <section xml:id="std.io.memstreams.compat" xreflabel="Compatibility strstream"><info><title>Compatibility With strstream</title></info>
+
<para>
</para>
<para>Stringstreams (defined in the header <code>&lt;sstream&gt;</code>)
@@ -360,23 +356,23 @@
<para>If you are a user of the strstream classes, you need to update
your code. You don't have to explicitly append <code>ends</code> to
terminate the C-style character array, you don't have to mess with
- &quot;freezing&quot; functions, and you don't have to manage the
+ "freezing" functions, and you don't have to manage the
memory yourself. The strstreams have been officially deprecated,
which means that 1) future revisions of the C++ Standard won't
support them, and 2) if you use them, people will laugh at you.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Sect1 04 : File-based Streams -->
-<sect1 id="std.io.filestreams" xreflabel="File Streams">
+<section xml:id="std.io.filestreams" xreflabel="File Streams"><info><title>File Based Streams</title></info>
<?dbhtml filename="fstreams.html"?>
- <title>File Based Streams</title>
+
- <sect2 id="std.io.filestreams.copying_a_file" xreflabel="Copying a File">
- <title>Copying a File</title>
+ <section xml:id="std.io.filestreams.copying_a_file" xreflabel="Copying a File"><info><title>Copying a File</title></info>
+
<para>
</para>
@@ -395,13 +391,13 @@
OUT &lt;&lt; IN;</programlisting>
<para>For those of you who don't already know why this doesn't work
(probably from having done it before), I invite you to quickly
- create a simple text file called &quot;input_file&quot; containing
+ create a simple text file called "input_file" containing
the sentence
</para>
<programlisting>
The quick brown fox jumped over the lazy dog.</programlisting>
<para>surrounded by blank lines. Code it up and try it. The contents
- of &quot;output_file&quot; may surprise you.
+ of "output_file" may surprise you.
</para>
<para>Seriously, go do it. Get surprised, then come back. It's worth it.
</para>
@@ -411,7 +407,7 @@
handled by the <code>basic_streambuf</code> family. Fortunately, the
<code>operator&lt;&lt;</code> is overloaded to take an ostream and
a pointer-to-streambuf, in order to help with just this kind of
- &quot;dump the data verbatim&quot; situation.
+ "dump the data verbatim" situation.
</para>
<para>Why a <emphasis>pointer</emphasis> to streambuf and not just a streambuf? Well,
the [io]streams hold pointers (or references, depending on the
@@ -427,7 +423,7 @@
behavior, since that chaptericular &lt;&lt; isn't defined by the Standard.
I have seen instances where it is implemented, but the character
extraction process removes all the whitespace, leaving you with no
- blank lines and only &quot;Thequickbrownfox...&quot;. With
+ blank lines and only "Thequickbrownfox...". With
libraries that do not define that operator, IN (or one of IN's
member pointers) sometimes gets converted to a void*, and the output
file then contains a perfect text representation of a hexadecimal
@@ -439,10 +435,10 @@
descendants.
</para>
- </sect2>
+ </section>
- <sect2 id="std.io.filestreams.binary" xreflabel="Binary Input and Output">
- <title>Binary Input and Output</title>
+ <section xml:id="std.io.filestreams.binary" xreflabel="Binary Input and Output"><info><title>Binary Input and Output</title></info>
+
<para>
</para>
<para>The first and most important thing to remember about binary I/O is
@@ -454,7 +450,7 @@
<para>Sorry. Them's the breaks.
</para>
<para>This isn't going to try and be a complete tutorial on reading and
- writing binary files (because &quot;binary&quot;
+ writing binary files (because "binary"
covers a lot of ground), but we will try and clear
up a couple of misconceptions and common errors.
</para>
@@ -481,7 +477,7 @@
</para>
<para>Third, using the <code>get()</code> and <code>put()/write()</code> member
functions still aren't guaranteed to help you. These are
- &quot;unformatted&quot; I/O functions, but still character-based.
+ "unformatted" I/O functions, but still character-based.
(This may or may not be what you want, see below.)
</para>
<para>Notice how all the problems here are due to the inappropriate use
@@ -558,9 +554,9 @@
<para>
An instructive thread from comp.lang.c++.moderated delved off into
this topic starting more or less at
- <ulink url="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d">this</ulink>
- post and continuing to the end of the thread. (The subject heading is &quot;binary iostreams&quot; on both comp.std.c++
- and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar K&uuml;hl.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://groups.google.com/group/comp.std.c++/browse_thread/thread/f87b4abd7954a87/946a3eb9921e382d?q=comp.std.c%2B%2B+binary+iostream#946a3eb9921e382d">this</link>
+ post and continuing to the end of the thread. (The subject heading is "binary iostreams" on both comp.std.c++
+ and comp.lang.c++.moderated.) Take special note of the replies by James Kanze and Dietmar Kühl.
</para>
<para>Briefly, the problems of byte ordering and type sizes mean that
the unformatted functions like <code>ostream::put()</code> and
@@ -569,28 +565,28 @@
invocation of a program to another invocation of the same program
on a different platform, etc.
</para>
- </sect2>
+ </section>
-</sect1>
+</section>
<!-- Sect1 03 : Interacting with C -->
-<sect1 id="std.io.c" xreflabel="Interacting with C">
+<section xml:id="std.io.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
<?dbhtml filename="io_and_c.html"?>
- <title>Interacting with C</title>
+
- <sect2 id="std.io.c.FILE" xreflabel="Using FILE* and file descriptors">
- <title>Using FILE* and file descriptors</title>
+ <section xml:id="std.io.c.FILE" xreflabel="Using FILE* and file descriptors"><info><title>Using FILE* and file descriptors</title></info>
+
<para>
See the <link linkend="manual.ext.io">extensions</link> for using
<type>FILE</type> and <type>file descriptors</type> with
<classname>ofstream</classname> and
<classname>ifstream</classname>.
</para>
- </sect2>
+ </section>
- <sect2 id="std.io.c.sync" xreflabel="Performance Issues">
- <title>Performance</title>
+ <section xml:id="std.io.c.sync" xreflabel="Performance Issues"><info><title>Performance</title></info>
+
<para>
Pathetic Performance? Ditch C.
</para>
@@ -604,9 +600,9 @@
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
- std::cout &lt;&lt; &quot;Hel&quot;;
- std::printf (&quot;lo, worl&quot;);
- std::cout &lt;&lt; &quot;d!\n&quot;;
+ std::cout &lt;&lt; "Hel";
+ std::printf ("lo, worl");
+ std::cout &lt;&lt; "d!\n";
</programlisting>
<para>This must do what you think it does.
</para>
@@ -647,7 +643,7 @@
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/iterators.xml b/libstdc++-v3/doc/xml/manual/iterators.xml
index 86b92a4f54b..bcfa30cd5f9 100644
--- a/libstdc++-v3/doc/xml/manual/iterators.xml
+++ b/libstdc++-v3/doc/xml/manual/iterators.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.iterators" xreflabel="Iterators">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.iterators" xreflabel="Iterators">
<?dbhtml filename="iterators.html"?>
-<chapterinfo>
+<info><title>
+ Iterators
+ <indexterm><primary>Iterators</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,19 +14,16 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Iterators
- <indexterm><primary>Iterators</primary></indexterm>
-</title>
<!-- Sect1 01 : Predefined -->
-<sect1 id="std.iterators.predefined" xreflabel="Predefined">
- <title>Predefined</title>
+<section xml:id="std.iterators.predefined" xreflabel="Predefined"><info><title>Predefined</title></info>
+
- <sect2 id="iterators.predefined.vs_pointers" xreflabel="Versus Pointers">
- <title>Iterators vs. Pointers</title>
+ <section xml:id="iterators.predefined.vs_pointers" xreflabel="Versus Pointers"><info><title>Iterators vs. Pointers</title></info>
+
<para>
The following
FAQ <link linkend="faq.iterator_as_pod">entry</link> points out that
@@ -63,7 +59,7 @@ classes.
How much overhead <emphasis>is</emphasis> there when using an
iterator class? Very little. Most of the layering classes
contain nothing but typedefs, and typedefs are
- &quot;meta-information&quot; that simply tell the compiler some
+ "meta-information" that simply tell the compiler some
nicknames; they don't create code. That information gets passed
down through inheritance, so while the compiler has to do work
looking up all the names, your runtime code does not. (This has
@@ -71,10 +67,10 @@ classes.
</para>
- </sect2>
+ </section>
- <sect2 id="iterators.predefined.end" xreflabel="end() Is One Past the End">
- <title>One Past the End</title>
+ <section xml:id="iterators.predefined.end" xreflabel="end() Is One Past the End"><info><title>One Past the End</title></info>
+
<para>This starts off sounding complicated, but is actually very easy,
especially towards the end. Trust me.
@@ -88,7 +84,7 @@ classes.
C and C++ for builtin arrays. The following rules have always been
true for both languages:
</para>
- <orderedlist>
+ <orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>You can point anywhere in the array, <emphasis>or to the first element
past the end of the array</emphasis>. A pointer that points to one
@@ -145,9 +141,9 @@ classes.
</para>
<para>Now think back to your junior-high school algebra course, when you
were learning how to draw graphs. Remember that a graph terminating
- with a solid dot meant, &quot;Everything up through this point,&quot;
- and a graph terminating with an open dot meant, &quot;Everything up
- to, but not including, this point,&quot; respectively called closed
+ with a solid dot meant, "Everything up through this point,"
+ and a graph terminating with an open dot meant, "Everything up
+ to, but not including, this point," respectively called closed
and open ranges? Remember how closed ranges were written with
brackets, <emphasis>[a,b]</emphasis>, and open ranges were written with parentheses,
<emphasis>(a,b)</emphasis>?
@@ -181,8 +177,8 @@ classes.
<para>Just don't dereference <code>end()</code>.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Sect1 02 : Stream -->
diff --git a/libstdc++-v3/doc/xml/manual/locale.xml b/libstdc++-v3/doc/xml/manual/locale.xml
index 234439ae355..dcdd1032284 100644
--- a/libstdc++-v3/doc/xml/manual/locale.xml
+++ b/libstdc++-v3/doc/xml/manual/locale.xml
@@ -1,6 +1,7 @@
-<section id="std.localization.locales.locale" xreflabel="Locale">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization.locales.locale" xreflabel="Locale">
-<sectioninfo>
+<info><title>locale</title>
<keywordset>
<keyword>
ISO C++
@@ -9,9 +10,9 @@
locale
</keyword>
</keywordset>
-</sectioninfo>
+</info>
+
-<title>locale</title>
<para>
Describes the basic locale object, including nested
@@ -19,8 +20,8 @@ classes id, facet, and the reference-counted implementation object,
class _Impl.
</para>
-<section id="locales.locale.req">
-<title>Requirements</title>
+<section xml:id="locales.locale.req"><info><title>Requirements</title></info>
+
<para>
Class locale is non-templatized and has two distinct types nested
@@ -89,8 +90,8 @@ Provides an index for looking up specific facets.
</para>
</section>
-<section id="locales.locale.design">
-<title>Design</title>
+<section xml:id="locales.locale.design"><info><title>Design</title></info>
+
<para>
The major design challenge is fitting an object-orientated and
@@ -105,11 +106,11 @@ portability is an issue.
</section>
-<section id="locales.locale.impl">
-<title>Implementation</title>
+<section xml:id="locales.locale.impl"><info><title>Implementation</title></info>
- <section id="locale.impl.c">
- <title>Interacting with &quot;C&quot; locales</title>
+
+ <section xml:id="locale.impl.c"><info><title>Interacting with "C" locales</title></info>
+
<itemizedlist>
<listitem>
@@ -470,8 +471,8 @@ global locale" (emphasis Paolo), that is:
</section>
</section>
-<section id="locales.locale.future">
-<title>Future</title>
+<section xml:id="locales.locale.future"><info><title>Future</title></info>
+
<itemizedlist>
<listitem>
@@ -510,21 +511,15 @@ global locale" (emphasis Paolo), that is:
</itemizedlist>
</section>
-<bibliography id="locales.locale.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="locales.locale.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <title>
+ <citetitle>
The GNU C Library
- </title>
- <author>
- <surname>McGrath</surname>
- <firstname>Roland</firstname>
- </author>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2007</year>
<holder>FSF</holder>
@@ -536,23 +531,20 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Correspondence
- </title>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2002</year>
- <holder></holder>
+ <holder/>
</copyright>
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 14882:1998 Programming languages - C++
- </title>
+ </citetitle>
<copyright>
<year>1998</year>
<holder>ISO</holder>
@@ -560,9 +552,9 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 9899:1999 Programming languages - C
- </title>
+ </citetitle>
<copyright>
<year>1999</year>
<holder>ISO</holder>
@@ -570,13 +562,11 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.opengroup.org/austin">
- <citetitle>
- System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin" class="uri">
</biblioid>
+ <citetitle>
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </citetitle>
<copyright>
<year>2008</year>
<holder>
@@ -587,13 +577,10 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
The C++ Programming Language, Special Edition
- </title>
- <author>
- <surname>Stroustrup</surname>
- <firstname>Bjarne</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley, Inc.</holder>
@@ -607,20 +594,14 @@ global locale" (emphasis Paolo), that is:
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Standard C++ IOStreams and Locales
- </title>
+ </citetitle>
<subtitle>
Advanced Programmer's Guide and Reference
</subtitle>
- <author>
- <surname>Langer</surname>
- <firstname>Angelika</firstname>
- </author>
- <author>
- <surname>Kreft</surname>
- <firstname>Klaus</firstname>
- </author>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder>
diff --git a/libstdc++-v3/doc/xml/manual/localization.xml b/libstdc++-v3/doc/xml/manual/localization.xml
index 70898546776..b46e707fc4e 100644
--- a/libstdc++-v3/doc/xml/manual/localization.xml
+++ b/libstdc++-v3/doc/xml/manual/localization.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.localization" xreflabel="Localization">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.localization" xreflabel="Localization">
<?dbhtml filename="localization.html"?>
-<chapterinfo>
+<info><title>
+ Localization
+ <indexterm><primary>Localization</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,42 +14,35 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Localization
- <indexterm><primary>Localization</primary></indexterm>
-</title>
<!-- Section 01 : Locale -->
-<section id="std.localization.locales" xreflabel="Locales">
+<section xml:id="std.localization.locales" xreflabel="Locales"><info><title>Locales</title></info>
<?dbhtml filename="locales.html"?>
- <title>Locales</title>
+
<!-- Section 01 : locale -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="locale.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="locale.xml">
</xi:include>
</section>
<!-- Section 02 : Facet -->
-<section id="std.localization.facet" xreflabel="Facets">
+<section xml:id="std.localization.facet" xreflabel="Facets"><info><title>Facets</title></info>
<?dbhtml filename="facets.html"?>
- <title>Facets</title>
+
<!-- Section 01 : ctype -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="ctype.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="ctype.xml">
</xi:include>
<!-- Section 02 : codecvt -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="codecvt.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="codecvt.xml">
</xi:include>
<!-- Section 03 : messages -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="messages.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="messages.xml">
</xi:include>
</section>
diff --git a/libstdc++-v3/doc/xml/manual/messages.xml b/libstdc++-v3/doc/xml/manual/messages.xml
index f0428d43781..d834e27d7a8 100644
--- a/libstdc++-v3/doc/xml/manual/messages.xml
+++ b/libstdc++-v3/doc/xml/manual/messages.xml
@@ -1,7 +1,8 @@
-<section id="manual.localization.facet.messages" xreflabel="Messages">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.localization.facet.messages" xreflabel="Messages">
<?dbhtml filename="messages.html"?>
-<sectioninfo>
+<info><title>messages</title>
<keywordset>
<keyword>
ISO C++
@@ -10,9 +11,9 @@
messages
</keyword>
</keywordset>
-</sectioninfo>
+</info>
+
-<title>messages</title>
<para>
The std::messages facet implements message retrieval functionality
@@ -20,8 +21,8 @@ equivalent to Java's java.text.MessageFormat .using either GNU gettext
or IEEE 1003.1-200 functions.
</para>
-<section id="facet.messages.req">
-<title>Requirements</title>
+<section xml:id="facet.messages.req"><info><title>Requirements</title></info>
+
<para>
The std::messages facet is probably the most vaguely defined facet in
@@ -108,8 +109,8 @@ be found, returns dfault.
</section>
-<section id="facet.messages.design">
-<title>Design</title>
+<section xml:id="facet.messages.design"><info><title>Design</title></info>
+
<para>
A couple of notes on the standard.
@@ -157,11 +158,11 @@ other, explicitly named locales.
</section>
-<section id="facet.messages.impl">
-<title>Implementation</title>
+<section xml:id="facet.messages.impl"><info><title>Implementation</title></info>
- <section id="messages.impl.models">
- <title>Models</title>
+
+ <section xml:id="messages.impl.models"><info><title>Models</title></info>
+
<para>
This is a relatively simple class, on the face of it. The standard
specifies very little in concrete terms, so generic
@@ -228,8 +229,8 @@ model.
</section>
- <section id="messages.impl.gnu">
- <title>The GNU Model</title>
+ <section xml:id="messages.impl.gnu"><info><title>The GNU Model</title></info>
+
<para>
The messages facet, because it is retrieving and converting
@@ -321,8 +322,8 @@ model.
</section>
</section>
-<section id="facet.messages.use">
-<title>Use</title>
+<section xml:id="facet.messages.use"><info><title>Use</title></info>
+
<para>
A simple example using the GNU model of message conversion.
</para>
@@ -351,8 +352,8 @@ void test01()
</section>
-<section id="facet.messages.future">
-<title>Future</title>
+<section xml:id="facet.messages.future"><info><title>Future</title></info>
+
<itemizedlist>
<listitem>
@@ -438,21 +439,15 @@ void test01()
</section>
-<bibliography id="facet.messages.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="facet.messages.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <title>
+ <citetitle>
The GNU C Library
- </title>
- <author>
- <surname>McGrath</surname>
- <firstname>Roland</firstname>
- </author>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2007</year>
<holder>FSF</holder>
@@ -462,23 +457,20 @@ void test01()
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Correspondence
- </title>
- <author>
- <surname>Drepper</surname>
- <firstname>Ulrich</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
<copyright>
<year>2002</year>
- <holder></holder>
+ <holder/>
</copyright>
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 14882:1998 Programming languages - C++
- </title>
+ </citetitle>
<copyright>
<year>1998</year>
<holder>ISO</holder>
@@ -486,9 +478,9 @@ void test01()
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
ISO/IEC 9899:1999 Programming languages - C
- </title>
+ </citetitle>
<copyright>
<year>1999</year>
@@ -497,13 +489,11 @@ void test01()
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.opengroup.org/austin">
- <citetitle>
- System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin" class="uri">
</biblioid>
+ <citetitle>
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </citetitle>
<copyright>
<year>2008</year>
<holder>
@@ -514,13 +504,10 @@ void test01()
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
The C++ Programming Language, Special Edition
- </title>
- <author>
- <surname>Stroustrup</surname>
- <firstname>Bjarne</firstname>
- </author>
+ </citetitle>
+ <author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley, Inc.</holder>
@@ -534,20 +521,14 @@ void test01()
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Standard C++ IOStreams and Locales
- </title>
+ </citetitle>
<subtitle>
Advanced Programmer's Guide and Reference
</subtitle>
- <author>
- <surname>Langer</surname>
- <firstname>Angelika</firstname>
- </author>
- <author>
- <surname>Kreft</surname>
- <firstname>Klaus</firstname>
- </author>
+ <author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
+ <author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
<copyright>
<year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder>
@@ -560,27 +541,24 @@ void test01()
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://java.sun.com/reference/api/index.html">
- <citetitle>
- API Specifications, Java Platform
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://java.sun.com/reference/api/index.html" class="uri">
+ </biblioid>
+ <citetitle>
+ API Specifications, Java Platform
+ </citetitle>
+
<pagenums>java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle
</pagenums>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.gnu.org/software/gettext/">
- <citetitle>
- GNU gettext tools, version 0.10.38, Native Language Support
-Library and Tools.
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/gettext/" class="uri">
</biblioid>
+ <citetitle>
+ GNU gettext tools, version 0.10.38, Native Language Support
+ Library and Tools.
+ </citetitle>
</biblioentry>
</bibliography>
diff --git a/libstdc++-v3/doc/xml/manual/mt_allocator.xml b/libstdc++-v3/doc/xml/manual/mt_allocator.xml
index ba93b10fa68..b31b593bc29 100644
--- a/libstdc++-v3/doc/xml/manual/mt_allocator.xml
+++ b/libstdc++-v3/doc/xml/manual/mt_allocator.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.ext.allocator.mt" xreflabel="mt allocator">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.allocator.mt" xreflabel="mt allocator">
<?dbhtml filename="mt_allocator.html"?>
-<sect1info>
+<info><title>mt_allocator</title>
<keywordset>
<keyword>
ISO C++
@@ -10,15 +11,15 @@
allocator
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>mt_allocator</title>
<para>
</para>
-<sect2 id="allocator.mt.intro">
-<title>Intro</title>
+<section xml:id="allocator.mt.intro"><info><title>Intro</title></info>
+
<para>
The mt allocator [hereinafter referred to simply as "the allocator"]
@@ -40,14 +41,14 @@
view - the "inner workings" of the allocator.
</para>
-</sect2>
+</section>
+
+<section xml:id="allocator.mt.design_issues"><info><title>Design Issues</title></info>
-<sect2 id="allocator.mt.design_issues">
-<title>Design Issues</title>
-<sect3 id="allocator.mt.overview">
-<title>Overview</title>
+<section xml:id="allocator.mt.overview"><info><title>Overview</title></info>
+
<para> There are three general components to the allocator: a datum
@@ -104,15 +105,15 @@ classes, namely member functions <code>allocate</code> and
<code>deallocate</code>, plus others.
</para>
-</sect3>
-</sect2>
+</section>
+</section>
+
+<section xml:id="allocator.mt.impl"><info><title>Implementation</title></info>
-<sect2 id="allocator.mt.impl">
-<title>Implementation</title>
-<sect3 id="allocator.mt.tune">
-<title>Tunable Parameters</title>
+<section xml:id="allocator.mt.tune"><info><title>Tunable Parameters</title></info>
+
<para>Certain allocation parameters can be modified, or tuned. There
exists a nested <code>struct __pool_base::_Tune</code> that contains all
@@ -166,10 +167,10 @@ int main()
}
</programlisting>
-</sect3>
+</section>
+
+<section xml:id="allocator.mt.init"><info><title>Initialization</title></info>
-<sect3 id="allocator.mt.init">
-<title>Initialization</title>
<para>
The static variables (pointers to freelists, tuning parameters etc)
@@ -276,10 +277,10 @@ The _S_initialize() function:
a thread decides to return some blocks to the global freelist.
</para>
-</sect3>
+</section>
+
+<section xml:id="allocator.mt.deallocation"><info><title>Deallocation Notes</title></info>
-<sect3 id="allocator.mt.deallocation">
-<title>Deallocation Notes</title>
<para> Notes about deallocation. This allocator does not explicitly
release memory. Because of this, memory debugging programs like
@@ -308,16 +309,16 @@ containers, this works, as an instance of the allocator is constructed
as part of a container's constructor. However, this assumption is
implementation-specific, and subject to change. For an example of a
pool that frees memory, see the following
- <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
- example.</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
+ example.</link>
</para>
-</sect3>
+</section>
-</sect2>
+</section>
+
+<section xml:id="allocator.mt.example_single"><info><title>Single Thread Example</title></info>
-<sect2 id="allocator.mt.example_single">
-<title>Single Thread Example</title>
<para>
Let's start by describing how the data on a freelist is laid out in memory.
@@ -408,10 +409,10 @@ after a set of performance measurements that showed that this is roughly 10%
faster than maintaining a set of "last pointers" as well.
</para>
-</sect2>
+</section>
+
+<section xml:id="allocator.mt.example_multi"><info><title>Multiple Thread Example</title></info>
-<sect2 id="allocator.mt.example_multi">
-<title>Multiple Thread Example</title>
<para>
In the ST example we never used the thread_id variable present in each block.
@@ -549,6 +550,6 @@ be improved to further reduce the risk of blocks being "bounced back
and forth" between freelists.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/numerics.xml b/libstdc++-v3/doc/xml/manual/numerics.xml
index 379e83cf56d..a9e866e78c8 100644
--- a/libstdc++-v3/doc/xml/manual/numerics.xml
+++ b/libstdc++-v3/doc/xml/manual/numerics.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.numerics" xreflabel="Numerics">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.numerics" xreflabel="Numerics">
<?dbhtml filename="numerics.html"?>
-<chapterinfo>
+<info><title>
+ Numerics
+ <indexterm><primary>Numerics</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,21 +14,18 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Numerics
- <indexterm><primary>Numerics</primary></indexterm>
-</title>
<!-- Sect1 01 : Complex -->
-<sect1 id="std.numerics.complex" xreflabel="complex">
+<section xml:id="std.numerics.complex" xreflabel="complex"><info><title>Complex</title></info>
<?dbhtml filename="complex.html"?>
- <title>Complex</title>
+
<para>
</para>
- <sect2 id="numerics.complex.processing" xreflabel="complex Processing">
- <title>complex Processing</title>
+ <section xml:id="numerics.complex.processing" xreflabel="complex Processing"><info><title>complex Processing</title></info>
+
<para>
</para>
<para>Using <code>complex&lt;&gt;</code> becomes even more comple- er, sorry,
@@ -38,7 +34,7 @@
compiled a list of C++98 and C99 conflict points; his description of
C's new type versus those of C++ and how to get them playing together
nicely is
-<ulink url="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</ulink>.
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://david.tribble.com/text/cdiffs.htm#C99-complex">here</link>.
</para>
<para><code>complex&lt;&gt;</code> is intended to be instantiated with a
floating-point type. As long as you meet that and some other basic
@@ -49,13 +45,13 @@
<code>(u)</code>, and <code>(u,v)</code>.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Sect1 02 : Generalized Operations -->
-<sect1 id="std.numerics.generalized_ops" xreflabel="Generalized Ops">
+<section xml:id="std.numerics.generalized_ops" xreflabel="Generalized Ops"><info><title>Generalized Operations</title></info>
<?dbhtml filename="generalized_numeric_operations.html"?>
- <title>Generalized Operations</title>
+
<para>
</para>
@@ -93,15 +89,15 @@
<para>The other three functions have similar dual-signature forms.
</para>
-</sect1>
+</section>
<!-- Sect1 03 : Interacting with C -->
-<sect1 id="std.numerics.c" xreflabel="Interacting with C">
+<section xml:id="std.numerics.c" xreflabel="Interacting with C"><info><title>Interacting with C</title></info>
<?dbhtml filename="numerics_and_c.html"?>
- <title>Interacting with C</title>
+
- <sect2 id="numerics.c.array" xreflabel="Numerics vs. Arrays">
- <title>Numerics vs. Arrays</title>
+ <section xml:id="numerics.c.array" xreflabel="Numerics vs. Arrays"><info><title>Numerics vs. Arrays</title></info>
+
<para>One of the major reasons why FORTRAN can chew through numbers so well
is that it is defined to be free of pointer aliasing, an assumption
@@ -112,7 +108,7 @@
as an extension).
</para>
<para>That library solution is a set of two classes, five template classes,
- and &quot;a whole bunch&quot; of functions. The classes are required
+ and "a whole bunch" of functions. The classes are required
to be free of pointer aliasing, so compilers can optimize the
daylights out of them the same way that they have been for FORTRAN.
They are collectively called <code>valarray</code>, although strictly
@@ -121,10 +117,10 @@
libraries before.
</para>
- </sect2>
+ </section>
- <sect2 id="numerics.c.c99" xreflabel="C99">
- <title>C99</title>
+ <section xml:id="numerics.c.c99" xreflabel="C99"><info><title>C99</title></info>
+
<para>In addition to the other topics on this page, we'll note here some
of the C99 features that appear in libstdc++.
@@ -143,7 +139,7 @@
<code>wcstoll</code>.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/parallel_mode.xml b/libstdc++-v3/doc/xml/manual/parallel_mode.xml
index fbc2ed1dbec..ec0faf9c71d 100644
--- a/libstdc++-v3/doc/xml/manual/parallel_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/parallel_mode.xml
@@ -1,12 +1,8 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="manual.ext.parallel_mode" xreflabel="Parallel Mode">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.parallel_mode" xreflabel="Parallel Mode">
<?dbhtml filename="parallel_mode.html"?>
-<chapterinfo>
+<info><title>Parallel Mode</title>
<keywordset>
<keyword>
C++
@@ -18,9 +14,9 @@
parallel
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>Parallel Mode</title>
<para> The libstdc++ parallel mode is an experimental parallel
implementation of many algorithms the C++ Standard Library.
@@ -35,8 +31,8 @@ specific compiler flag.
</para>
-<sect1 id="manual.ext.parallel_mode.intro" xreflabel="Intro">
- <title>Intro</title>
+<section xml:id="manual.ext.parallel_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
<para>The following library components in the include
<filename class="headerfile">numeric</filename> are included in the parallel mode:</para>
@@ -83,10 +79,10 @@ specific compiler flag.
<listitem><para><function>std::unique_copy</function></para></listitem>
</itemizedlist>
-</sect1>
+</section>
-<sect1 id="manual.ext.parallel_mode.semantics" xreflabel="Semantics">
- <title>Semantics</title>
+<section xml:id="manual.ext.parallel_mode.semantics" xreflabel="Semantics"><info><title>Semantics</title></info>
+
<para> The parallel mode STL algorithms are currently not exception-safe,
i.e. user-defined functors must not throw exceptions.
@@ -100,13 +96,13 @@ it is not possible to call parallel STL algorithm in
concurrent threads, either.
It might work with other compilers, though.</para>
-</sect1>
+</section>
-<sect1 id="manual.ext.parallel_mode.using" xreflabel="Using">
- <title>Using</title>
+<section xml:id="manual.ext.parallel_mode.using" xreflabel="Using"><info><title>Using</title></info>
+
-<sect2 id="parallel_mode.using.prereq_flags">
- <title>Prerequisite Compiler Flags</title>
+<section xml:id="parallel_mode.using.prereq_flags"><info><title>Prerequisite Compiler Flags</title></info>
+
<para>
Any use of parallel functionality requires additional compiler
@@ -114,7 +110,7 @@ It might work with other compilers, though.</para>
not difficult: just compile your application with the compiler
flag <literal>-fopenmp</literal>. This will link
in <code>libgomp</code>, the GNU
- OpenMP <ulink url="http://gcc.gnu.org/onlinedocs/libgomp">implementation</ulink>,
+ OpenMP <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libgomp">implementation</link>,
whose presence is mandatory.
</para>
@@ -129,10 +125,10 @@ In addition, hardware that supports atomic operations and a compiler
the GCC manual for more information.
</para>
-</sect2>
+</section>
-<sect2 id="parallel_mode.using.parallel_mode">
- <title>Using Parallel Mode</title>
+<section xml:id="parallel_mode.using.parallel_mode"><info><title>Using Parallel Mode</title></info>
+
<para>
To use the libstdc++ parallel mode, compile your application with
@@ -154,10 +150,10 @@ In addition, hardware that supports atomic operations and a compiler
translation units. Parallel mode functionality has distinct linkage,
and cannot be confused with normal mode symbols.
</para>
-</sect2>
+</section>
-<sect2 id="parallel_mode.using.specific">
- <title>Using Specific Parallel Components</title>
+<section xml:id="parallel_mode.using.specific"><info><title>Using Specific Parallel Components</title></info>
+
<para>When it is not feasible to recompile your entire application, or
only specific algorithms need to be parallel-aware, individual
@@ -199,13 +195,14 @@ flags for atomic operations.)
parallel algorithms that can be used in a similar manner:
</para>
-<table frame='all'>
+<table frame="all">
<title>Parallel Algorithms</title>
-<tgroup cols='4' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
@@ -461,16 +458,16 @@ flags for atomic operations.)
</tgroup>
</table>
-</sect2>
+</section>
-</sect1>
+</section>
-<sect1 id="manual.ext.parallel_mode.design" xreflabel="Design">
- <title>Design</title>
+<section xml:id="manual.ext.parallel_mode.design" xreflabel="Design"><info><title>Design</title></info>
+
<para>
</para>
-<sect2 id="parallel_mode.design.intro" xreflabel="Intro">
- <title>Interface Basics</title>
+<section xml:id="parallel_mode.design.intro" xreflabel="Intro"><info><title>Interface Basics</title></info>
+
<para>
All parallel algorithms are intended to have signatures that are
@@ -536,14 +533,14 @@ overload is therefore missing.
</para>
-</sect2>
+</section>
-<sect2 id="parallel_mode.design.tuning" xreflabel="Tuning">
- <title>Configuration and Tuning</title>
+<section xml:id="parallel_mode.design.tuning" xreflabel="Tuning"><info><title>Configuration and Tuning</title></info>
+
-<sect3 id="parallel_mode.design.tuning.omp" xreflabel="OpenMP Environment">
- <title>Setting up the OpenMP Environment</title>
+<section xml:id="parallel_mode.design.tuning.omp" xreflabel="OpenMP Environment"><info><title>Setting up the OpenMP Environment</title></info>
+
<para>
Several aspects of the overall runtime environment can be manipulated
@@ -585,10 +582,10 @@ nested parallelism (<function>omp_set_nested</function>), schedule kind
documentation for more information.
</para>
-</sect3>
+</section>
-<sect3 id="parallel_mode.design.tuning.compile" xreflabel="Compile Switches">
- <title>Compile Time Switches</title>
+<section xml:id="parallel_mode.design.tuning.compile" xreflabel="Compile Switches"><info><title>Compile Time Switches</title></info>
+
<para>
To force an algorithm to execute sequentially, even though parallelism
@@ -662,10 +659,10 @@ Multiway mergesort comes with the two splitting strategies for multi-way
merging. The quicksort options cannot be used for <code>stable_sort</code>.
</para>
-</sect3>
+</section>
-<sect3 id="parallel_mode.design.tuning.settings" xreflabel="_Settings">
- <title>Run Time Settings and Defaults</title>
+<section xml:id="parallel_mode.design.tuning.settings" xreflabel="_Settings"><info><title>Run Time Settings and Defaults</title></info>
+
<para>
The default parallelization strategy, the choice of specific algorithm
@@ -729,8 +726,8 @@ i. e. it is a singleton. It can be read and written by calling
<code>__gnu_parallel::_Settings::set</code>, respectively.
Please note that the first call return a const object, so direct manipulation
is forbidden.
-See <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html">
- <filename class="headerfile">settings.h</filename></ulink>
+See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01005.html">
+ <filename class="headerfile">settings.h</filename></link>
for complete details.
</para>
@@ -754,12 +751,12 @@ int main()
}
</programlisting>
-</sect3>
+</section>
-</sect2>
+</section>
-<sect2 id="parallel_mode.design.impl" xreflabel="Impl">
- <title>Implementation Namespaces</title>
+<section xml:id="parallel_mode.design.impl" xreflabel="Impl"><info><title>Implementation Namespaces</title></info>
+
<para> One namespace contain versions of code that are always
explicitly sequential:
@@ -787,12 +784,12 @@ related to the parallel mode on a per-namespace basis, can be found in
the generated source documentation.
</para>
-</sect2>
+</section>
-</sect1>
+</section>
-<sect1 id="manual.ext.parallel_mode.test" xreflabel="Testing">
- <title>Testing</title>
+<section xml:id="manual.ext.parallel_mode.test" xreflabel="Testing"><info><title>Testing</title></info>
+
<para>
Both the normal conformance and regression tests and the
@@ -830,28 +827,22 @@ the generated source documentation.
file, and can be generated by using the <code>make
doc-performance</code> rule in the testsuite's Makefile.
</para>
-</sect1>
+</section>
+
+<bibliography xml:id="parallel_mode.biblio"><info><title>Bibliography</title></info>
-<bibliography id="parallel_mode.biblio">
-<title>Bibliography</title>
<biblioentry>
- <title>
+ <citetitle>
Parallelization of Bulk Operations for STL Dictionaries
- </title>
+ </citetitle>
- <author>
- <firstname>Johannes</firstname>
- <surname>Singler</surname>
- </author>
- <author>
- <firstname>Leonor</firstname>
- <surname>Frias</surname>
- </author>
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname></author>
+ <author><personname><firstname>Leonor</firstname><surname>Frias</surname></personname></author>
<copyright>
<year>2007</year>
- <holder></holder>
+ <holder/>
</copyright>
<publisher>
@@ -862,26 +853,17 @@ the generated source documentation.
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
The Multi-Core Standard Template Library
- </title>
-
- <author>
- <firstname>Johannes</firstname>
- <surname>Singler</surname>
- </author>
- <author>
- <firstname>Peter</firstname>
- <surname>Sanders</surname>
- </author>
- <author>
- <firstname>Felix</firstname>
- <surname>Putze</surname>
- </author>
+ </citetitle>
+
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname></author>
+ <author><personname><firstname>Peter</firstname><surname>Sanders</surname></personname></author>
+ <author><personname><firstname>Felix</firstname><surname>Putze</surname></personname></author>
<copyright>
<year>2007</year>
- <holder></holder>
+ <holder/>
</copyright>
<publisher>
diff --git a/libstdc++-v3/doc/xml/manual/prerequisites.xml b/libstdc++-v3/doc/xml/manual/prerequisites.xml
index cdfe6ccccb1..6fd813548f1 100644
--- a/libstdc++-v3/doc/xml/manual/prerequisites.xml
+++ b/libstdc++-v3/doc/xml/manual/prerequisites.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.intro.setup.prereq" xreflabel="Prerequisites">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.prereq" xreflabel="Prerequisites">
<?dbhtml filename="prerequisites.html"?>
-<sect1info>
+<info><title>Prerequisites</title>
<keywordset>
<keyword>
ISO C++
@@ -10,17 +11,17 @@
Prerequisites
</keyword>
</keywordset>
-</sect1info>
+</info>
+
-<title>Prerequisites</title>
<para>
Because libstdc++ is part of GCC, the primary source for
installation instructions is
- <ulink url="http://gcc.gnu.org/install/">the GCC install page</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/">the GCC install page</link>.
In particular, list of prerequisite software needed to build the library
- <ulink url="http://gcc.gnu.org/install/prerequisites.html">
- starts with those requirements.</ulink> The same pages also list
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">
+ starts with those requirements.</link> The same pages also list
the tools you will need if you wish to modify the source.
</para>
@@ -31,8 +32,8 @@
<para>As of GCC 4.0.1 the minimum version of binutils required to build
libstdc++ is <code>2.15.90.0.1.1</code>. You can get snapshots
(as well as releases) of binutils from
- <ulink url="ftp://sources.redhat.com/pub/binutils/">
- ftp://sources.redhat.com/pub/binutils</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="ftp://sources.redhat.com/pub/binutils/">
+ ftp://sources.redhat.com/pub/binutils</link>.
Older releases of libstdc++ do not require such a recent version,
but to take full advantage of useful space-saving features and
bug-fixes you should use a recent binutils whenever possible.
@@ -41,6 +42,12 @@
</para>
<para>
+ To generate the API documentation from the sources you will need
+ Doxygen, see <link linkend="contrib.doc_style">Documentation
+ Style</link> in the appendix for full details.
+ </para>
+
+ <para>
Finally, a few system-specific requirements:
</para>
@@ -52,16 +59,8 @@
<para>
If gcc 3.1.0 or later on is being used on linux, an attempt
will be made to use "C" library functionality necessary for
- C++ named locale support. For gcc 3.2.1 and later, this
- means that glibc 2.2.5 or later is required and the "C"
- library de_DE locale information must be installed.
- </para>
-
- <para>
- Note however that the sanity checks involving the de_DE
- locale are skipped when an explicit --enable-clocale=gnu
- configure option is used: only the basic checks are carried
- out, defending against misconfigurations.
+ C++ named locale support. For gcc 4.6.0 and later, this
+ means that glibc 2.3 or later is required.
</para>
<para>
@@ -94,14 +93,14 @@ ta_IN UTF-8
zh_TW BIG5
</programlisting>
- <para>Failure to have the underlying "C" library locale
- information installed will mean that C++ named locales for the
- above regions will not work: because of this, the libstdc++
- testsuite will skip the named locale tests. If this isn't an
- issue, don't worry about it. If named locales are needed, the
- underlying locale information must be installed. Note that
- rebuilding libstdc++ after the "C" locales are installed is not
- necessary.
+ <para>Failure to have installed the underlying "C" library
+ locale information for any of the above regions means that
+ the corresponding C++ named locale will not work: because of
+ this, the libstdc++ testsuite will skip named locale tests
+ which need missing information. If this isn't an issue, don't
+ worry about it. If a named locale is needed, the underlying
+ locale information must be installed. Note that rebuilding
+ libstdc++ after "C" locales are installed is not necessary.
</para>
<para>
@@ -158,4 +157,4 @@ zh_TW BIG5
</varlistentry>
</variablelist>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/profile_mode.xml b/libstdc++-v3/doc/xml/manual/profile_mode.xml
index 5665d4e6477..cb4db6732a5 100644
--- a/libstdc++-v3/doc/xml/manual/profile_mode.xml
+++ b/libstdc++-v3/doc/xml/manual/profile_mode.xml
@@ -1,12 +1,8 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="manual.ext.profile_mode" xreflabel="Profile Mode">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.profile_mode" xreflabel="Profile Mode">
<?dbhtml filename="profile_mode.html"?>
-<chapterinfo>
+<info><title>Profile Mode</title>
<keywordset>
<keyword>
C++
@@ -18,13 +14,13 @@
profile
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>Profile Mode</title>
-<sect1 id="manual.ext.profile_mode.intro" xreflabel="Intro">
- <title>Intro</title>
+<section xml:id="manual.ext.profile_mode.intro" xreflabel="Intro"><info><title>Intro</title></info>
+
<para>
<emphasis>Goal: </emphasis>Give performance improvement advice based on
recognition of suboptimal usage patterns of the standard library.
@@ -36,8 +32,8 @@
various components at interesting entry/exit points to/from the standard
library. Process trace, recognize suboptimal patterns, give advice.
For details, see
- <ulink url="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
- CGO 2009</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ CGO 2009</link>.
</para>
<para>
<emphasis>Strengths: </emphasis>
@@ -71,8 +67,8 @@
</para>
-<sect2 id="manual.ext.profile_mode.using" xreflabel="Using">
- <title>Using the Profile Mode</title>
+<section xml:id="manual.ext.profile_mode.using" xreflabel="Using"><info><title>Using the Profile Mode</title></info>
+
<para>
This is the anticipated common workflow for program <code>foo.cc</code>:
@@ -155,10 +151,10 @@ vector-size: improvement = 3: call stack = 0x804842c ...
at a higher abstraction level.
</para>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.tuning" xreflabel="Tuning">
- <title>Tuning the Profile Mode</title>
+<section xml:id="manual.ext.profile_mode.tuning" xreflabel="Tuning"><info><title>Tuning the Profile Mode</title></info>
+
<para>Compile time switches and environment variables (see also file
profiler.h). Unless specified otherwise, they can be set at compile time
@@ -214,21 +210,22 @@ vector-size: improvement = 3: call stack = 0x804842c ...
</itemizedlist>
</para>
-</sect2>
+</section>
-</sect1>
+</section>
-<sect1 id="manual.ext.profile_mode.design" xreflabel="Design">
- <title>Design</title>
+<section xml:id="manual.ext.profile_mode.design" xreflabel="Design"><info><title>Design</title></info>
+
<para>
</para>
-<table frame='all'>
+<table frame="all">
<title>Profile Code Location</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<thead>
<row>
@@ -258,9 +255,8 @@ vector-size: improvement = 3: call stack = 0x804842c ...
<para>
</para>
-<sect2 id="manual.ext.profile_mode.design.wrapper"
- xreflabel="Wrapper">
-<title>Wrapper Model</title>
+<section xml:id="manual.ext.profile_mode.design.wrapper" xreflabel="Wrapper"><info><title>Wrapper Model</title></info>
+
<para>
In order to get our instrumented library version included instead of the
release one,
@@ -285,12 +281,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
not allowed. Mixing them at compile time will result in preprocessor errors.
Mixing them at link time is undefined.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.design.instrumentation" xreflabel="Instrumentation"><info><title>Instrumentation</title></info>
-<sect2 id="manual.ext.profile_mode.design.instrumentation"
- xreflabel="Instrumentation">
-<title>Instrumentation</title>
<para>
Instead of instrumenting every public entry and exit point,
we chose to add instrumentation on demand, as needed
@@ -313,12 +308,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
All the instrumentation on/off compile time switches live in
<code>include/profile/profiler.h</code>.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.design.rtlib" xreflabel="Run Time Behavior"><info><title>Run Time Behavior</title></info>
-<sect2 id="manual.ext.profile_mode.design.rtlib"
- xreflabel="Run Time Behavior">
-<title>Run Time Behavior</title>
<para>
For practical reasons, the instrumentation library processes the trace
partially
@@ -339,15 +333,14 @@ vector-size: improvement = 3: call stack = 0x804842c ...
<para>
For details, see
- <ulink url="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
- CGO 2009</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dx.doi.org/10.1109/CGO.2009.36">paper presented at
+ CGO 2009</link>.
</para>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.design.analysis"
- xreflabel="Analysis and Diagnostics">
-<title>Analysis and Diagnostics</title>
+<section xml:id="manual.ext.profile_mode.design.analysis" xreflabel="Analysis and Diagnostics"><info><title>Analysis and Diagnostics</title></info>
+
<para>
Final analysis takes place offline, and it is based entirely on the
generated trace and debugging info in the application binary.
@@ -357,12 +350,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
The input to the analysis is a table indexed by profile type and call stack.
The data type for each entry depends on the profile type.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.design.cost-model" xreflabel="Cost Model"><info><title>Cost Model</title></info>
-<sect2 id="manual.ext.profile_mode.design.cost-model"
- xreflabel="Cost Model">
-<title>Cost Model</title>
<para>
While it is likely that cost models become complex as we get into
more sophisticated analysis, we will try to follow a simple set of rules
@@ -399,12 +391,11 @@ vector-size: improvement = 3: call stack = 0x804842c ...
care require a sorted container.</para></listitem>
</itemizedlist>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.design.reports" xreflabel="Reports"><info><title>Reports</title></info>
-<sect2 id="manual.ext.profile_mode.design.reports"
- xreflabel="Reports">
-<title>Reports</title>
<para>
There are two types of reports. First, if we recognize a pattern for which
we have a substitute that is likely to give better performance, we print
@@ -419,12 +410,11 @@ which have the worst data locality in actual traversals.
Although this does not offer a solution,
it helps the user focus on the key problems and ignore the uninteresting ones.
</para>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.design.testing"
- xreflabel="Testing">
-<title>Testing</title>
+<section xml:id="manual.ext.profile_mode.design.testing" xreflabel="Testing"><info><title>Testing</title></info>
+
<para>
First, we want to make sure we preserve the behavior of the release mode.
You can just type <code>"make check-profile"</code>, which
@@ -436,13 +426,12 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
Each diagnostic must come with at least two tests, one for false positives
and one for false negatives.
</para>
-</sect2>
+</section>
+
+</section>
-</sect1>
+<section xml:id="manual.ext.profile_mode.api" xreflabel="API"><info><title>Extensions for Custom Containers</title></info>
-<sect1 id="manual.ext.profile_mode.api"
- xreflabel="API">
-<title>Extensions for Custom Containers</title>
<para>
Many large projects use their own data structures instead of the ones in the
@@ -453,12 +442,11 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
<code>profiler.h</code> (look for "Instrumentation hooks").
</para>
-</sect1>
+</section>
+
+<section xml:id="manual.ext.profile_mode.cost_model" xreflabel="Cost Model"><info><title>Empirical Cost Model</title></info>
-<sect1 id="manual.ext.profile_mode.cost_model"
- xreflabel="Cost Model">
-<title>Empirical Cost Model</title>
<para>
Currently, the cost model uses formulas with predefined relative weights
@@ -479,17 +467,15 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
generic parameters.
</para>
-</sect1>
+</section>
-<sect1 id="manual.ext.profile_mode.implementation"
- xreflabel="Implementation">
-<title>Implementation Issues</title>
+<section xml:id="manual.ext.profile_mode.implementation" xreflabel="Implementation"><info><title>Implementation Issues</title></info>
-<sect2 id="manual.ext.profile_mode.implementation.stack"
- xreflabel="Stack Traces">
-<title>Stack Traces</title>
+
+<section xml:id="manual.ext.profile_mode.implementation.stack" xreflabel="Stack Traces"><info><title>Stack Traces</title></info>
+
<para>
Accurate stack traces are needed during profiling since we group events by
call context and dynamic instance. Without accurate traces, diagnostics
@@ -503,12 +489,11 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
to 0 if you are willing to give up call context information, or to a small
positive value to reduce run time overhead.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.implementation.symbols" xreflabel="Symbolization"><info><title>Symbolization of Instruction Addresses</title></info>
-<sect2 id="manual.ext.profile_mode.implementation.symbols"
- xreflabel="Symbolization">
-<title>Symbolization of Instruction Addresses</title>
<para>
The profiling and analysis phases use only instruction addresses.
An external utility such as addr2line is needed to postprocess the result.
@@ -516,12 +501,11 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
This would require access to symbol tables, debug information tables,
external programs or libraries and other system dependent information.
</para>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.implementation.concurrency"
- xreflabel="Concurrency">
-<title>Concurrency</title>
+<section xml:id="manual.ext.profile_mode.implementation.concurrency" xreflabel="Concurrency"><info><title>Concurrency</title></info>
+
<para>
Our current model is simplistic, but precise.
We cannot afford to approximate because some of our diagnostics require
@@ -529,24 +513,22 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
During profiling, we keep a single information table per diagnostic.
There is a single lock per information table.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.implementation.stdlib-in-proflib" xreflabel="Using the Standard Library in the Runtime Library"><info><title>Using the Standard Library in the Instrumentation Implementation</title></info>
-<sect2 id="manual.ext.profile_mode.implementation.stdlib-in-proflib"
- xreflabel="Using the Standard Library in the Runtime Library">
-<title>Using the Standard Library in the Instrumentation Implementation</title>
<para>
As much as we would like to avoid uses of libstdc++ within our
instrumentation library, containers such as unordered_map are very
appealing. We plan to use them as long as they are named properly
to avoid ambiguity.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.implementation.malloc-hooks" xreflabel="Malloc Hooks"><info><title>Malloc Hooks</title></info>
-<sect2 id="manual.ext.profile_mode.implementation.malloc-hooks"
- xreflabel="Malloc Hooks">
-<title>Malloc Hooks</title>
<para>
User applications/libraries can provide malloc hooks.
When the implementation of the malloc hooks uses stdlibc++, there can
@@ -563,12 +545,11 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
XXX: A definitive solution to this problem would be for the profile extension
to use a custom allocator internally, and perhaps not to use libstdc++.
</para>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.implementation.construction-destruction"
- xreflabel="Construction and Destruction of Global Objects">
-<title>Construction and Destruction of Global Objects</title>
+<section xml:id="manual.ext.profile_mode.implementation.construction-destruction" xreflabel="Construction and Destruction of Global Objects"><info><title>Construction and Destruction of Global Objects</title></info>
+
<para>
The profiling library state is initialized at the first call to a profiling
method. This allows us to record the construction of all global objects.
@@ -576,18 +557,16 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
by a function registered by <code>atexit</code>, thus invoked by
<code>exit</code>.
</para>
-</sect2>
+</section>
+
+</section>
+
-</sect1>
+<section xml:id="manual.ext.profile_mode.developer" xreflabel="Developer Information"><info><title>Developer Information</title></info>
-<sect1 id="manual.ext.profile_mode.developer"
- xreflabel="Developer Information">
-<title>Developer Information</title>
+<section xml:id="manual.ext.profile_mode.developer.bigpic" xreflabel="Big Picture"><info><title>Big Picture</title></info>
-<sect2 id="manual.ext.profile_mode.developer.bigpic"
- xreflabel="Big Picture">
-<title>Big Picture</title>
<para>The profile mode headers are included with
<code>-D_GLIBCXX_PROFILE</code> through preprocessor directives in
@@ -609,11 +588,10 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
<code>-D_GLIBCXX_PROFILE_...</code> compiler option.
</para>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.developer.howto" xreflabel="How To Add A Diagnostic"><info><title>How To Add A Diagnostic</title></info>
-<sect2 id="manual.ext.profile_mode.developer.howto"
- xreflabel="How To Add A Diagnostic">
-<title>How To Add A Diagnostic</title>
<para>Let's say the diagnostic name is "magic".
</para>
@@ -684,11 +662,11 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
<para>Add documentation in file <code>doc/xml/manual/profile_mode.xml</code>.
</para>
-</sect2>
-</sect1>
+</section>
+</section>
+
+<section xml:id="manual.ext.profile_mode.diagnostics"><info><title>Diagnostics</title></info>
-<sect1 id="manual.ext.profile_mode.diagnostics">
-<title>Diagnostics</title>
<para>
The table below presents all the diagnostics we intend to implement.
@@ -712,16 +690,17 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
specific needs or time budgets.
</para>
-<table frame='all'>
+<table frame="all">
<title>Profile Diagnostics</title>
-<tgroup cols='7' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
-<colspec colname='c6'></colspec>
-<colspec colname='c7'></colspec>
+
+<tgroup cols="7" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
+<colspec colname="c6"/>
+<colspec colname="c7"/>
<thead>
<row>
@@ -735,145 +714,145 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
</thead>
<tbody>
<row>
- <entry><ulink url="#manual.ext.profile_mode.analysis.containers">
- CONTAINERS</ulink></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.hashtable_too_small">
- HASHTABLE_TOO_SMALL</ulink></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.containers">
+ CONTAINERS</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_too_small">
+ HASHTABLE_TOO_SMALL</link></entry>
<entry>10</entry>
<entry>1</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.hashtable_too_large">
- HASHTABLE_TOO_LARGE</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_too_large">
+ HASHTABLE_TOO_LARGE</link></entry>
<entry>5</entry>
<entry>1</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.inefficient_hash">
- INEFFICIENT_HASH</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.inefficient_hash">
+ INEFFICIENT_HASH</link></entry>
<entry>7</entry>
<entry>3</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.vector_too_small">
- VECTOR_TOO_SMALL</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_too_small">
+ VECTOR_TOO_SMALL</link></entry>
<entry>8</entry>
<entry>1</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.vector_too_large">
- VECTOR_TOO_LARGE</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_too_large">
+ VECTOR_TOO_LARGE</link></entry>
<entry>5</entry>
<entry>1</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.vector_to_hashtable">
- VECTOR_TO_HASHTABLE</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_to_hashtable">
+ VECTOR_TO_HASHTABLE</link></entry>
<entry>7</entry>
<entry>7</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>no</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.hashtable_to_vector">
- HASHTABLE_TO_VECTOR</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.hashtable_to_vector">
+ HASHTABLE_TO_VECTOR</link></entry>
<entry>7</entry>
<entry>7</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>no</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.vector_to_list">
- VECTOR_TO_LIST</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.vector_to_list">
+ VECTOR_TO_LIST</link></entry>
<entry>8</entry>
<entry>5</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>yes</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.list_to_vector">
- LIST_TO_VECTOR</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.list_to_vector">
+ LIST_TO_VECTOR</link></entry>
<entry>10</entry>
<entry>5</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>no</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.assoc_ord_to_unord">
- ORDERED_TO_UNORDERED</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.assoc_ord_to_unord">
+ ORDERED_TO_UNORDERED</link></entry>
<entry>10</entry>
<entry>5</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>only map/unordered_map</entry>
</row>
<row>
- <entry><ulink url="#manual.ext.profile_mode.analysis.algorithms">
- ALGORITHMS</ulink></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.algorithms.sort">
- SORT</ulink></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.algorithms">
+ ALGORITHMS</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.algorithms.sort">
+ SORT</link></entry>
<entry>7</entry>
<entry>8</entry>
- <entry></entry>
+ <entry/>
<entry>7</entry>
<entry>no</entry>
</row>
<row>
- <entry><ulink url="#manual.ext.profile_mode.analysis.locality">
- LOCALITY</ulink></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.locality.sw_prefetch">
- SOFTWARE_PREFETCH</ulink></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality">
+ LOCALITY</link></entry>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality.sw_prefetch">
+ SOFTWARE_PREFETCH</link></entry>
<entry>8</entry>
<entry>8</entry>
- <entry></entry>
+ <entry/>
<entry>5</entry>
<entry>no</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.locality.linked">
- RBTREE_LOCALITY</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.locality.linked">
+ RBTREE_LOCALITY</link></entry>
<entry>4</entry>
<entry>8</entry>
- <entry></entry>
+ <entry/>
<entry>5</entry>
<entry>no</entry>
</row>
<row>
- <entry></entry>
- <entry><ulink url="#manual.ext.profile_mode.analysis.mthread.false_share">
- FALSE_SHARING</ulink></entry>
+ <entry/>
+ <entry><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#manual.ext.profile_mode.analysis.mthread.false_share">
+ FALSE_SHARING</link></entry>
<entry>8</entry>
<entry>10</entry>
- <entry></entry>
+ <entry/>
<entry>10</entry>
<entry>no</entry>
</row>
@@ -881,9 +860,8 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
</tgroup>
</table>
-<sect2 id="manual.ext.profile_mode.analysis.template"
- xreflabel="Template">
-<title>Diagnostic Template</title>
+<section xml:id="manual.ext.profile_mode.analysis.template" xreflabel="Template"><info><title>Diagnostic Template</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
@@ -912,21 +890,19 @@ advice sample
</programlisting>
</para></listitem>
</itemizedlist>
-</sect2>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.containers" xreflabel="Containers"><info><title>Containers</title></info>
-<sect2 id="manual.ext.profile_mode.analysis.containers"
- xreflabel="Containers">
-<title>Containers</title>
<para>
<emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_CONTAINERS</code>.
</para>
-<sect3 id="manual.ext.profile_mode.analysis.hashtable_too_small"
- xreflabel="Hashtable Too Small">
-<title>Hashtable Too Small</title>
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_too_small" xreflabel="Hashtable Too Small"><info><title>Hashtable Too Small</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
@@ -964,12 +940,11 @@ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
-<sect3 id="manual.ext.profile_mode.analysis.hashtable_too_large"
- xreflabel="Hashtable Too Large">
-<title>Hashtable Too Large</title>
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_too_large" xreflabel="Hashtable Too Large"><info><title>Hashtable Too Large</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
@@ -1010,11 +985,10 @@ bytes of memory and M iteration steps.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.inefficient_hash" xreflabel="Inefficient Hash"><info><title>Inefficient Hash</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.inefficient_hash"
- xreflabel="Inefficient Hash">
-<title>Inefficient Hash</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
@@ -1057,11 +1031,10 @@ class dumb_hash {
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_too_small" xreflabel="Vector Too Small"><info><title>Vector Too Small</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.vector_too_small"
- xreflabel="Vector Too Small">
-<title>Vector Too Small</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
@@ -1098,11 +1071,10 @@ copying 4000000 bytes and 20 memory allocations and deallocations.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_too_large" xreflabel="Vector Too Large"><info><title>Vector Too Large</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.vector_too_large"
- xreflabel="Vector Too Large">
-<title>Vector Too Large</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
@@ -1140,11 +1112,10 @@ bytes of memory and may reduce the number of cache and TLB misses.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_to_hashtable" xreflabel="Vector to Hashtable"><info><title>Vector to Hashtable</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.vector_to_hashtable"
- xreflabel="Vector to Hashtable">
-<title>Vector to Hashtable</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
@@ -1187,11 +1158,10 @@ comparisons.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.hashtable_to_vector" xreflabel="Hashtable to Vector"><info><title>Hashtable to Vector</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.hashtable_to_vector"
- xreflabel="Hashtable to Vector">
-<title>Hashtable to Vector</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
@@ -1232,11 +1202,10 @@ indirections and may achieve better data locality.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.vector_to_list" xreflabel="Vector to List"><info><title>Vector to List</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.vector_to_list"
- xreflabel="Vector to List">
-<title>Vector to List</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
@@ -1278,11 +1247,10 @@ operations.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.list_to_vector" xreflabel="List to Vector"><info><title>List to Vector</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.list_to_vector"
- xreflabel="List to Vector">
-<title>List to Vector</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
@@ -1321,11 +1289,10 @@ memory references.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.list_to_slist" xreflabel="List to Forward List"><info><title>List to Forward List (Slist)</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.list_to_slist"
- xreflabel="List to Forward List">
-<title>List to Forward List (Slist)</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
@@ -1367,11 +1334,10 @@ foo.cc:1: advice: Change "list" to "forward_list".
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.assoc_ord_to_unord" xreflabel="Ordered to Unordered Associative Container"><info><title>Ordered to Unordered Associative Container</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"
- xreflabel="Ordered to Unordered Associative Container">
-<title>Ordered to Unordered Associative Container</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
@@ -1410,23 +1376,21 @@ foo.cc:1: advice: Change "list" to "forward_list".
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+</section>
-</sect2>
+<section xml:id="manual.ext.profile_mode.analysis.algorithms" xreflabel="Algorithms"><info><title>Algorithms</title></info>
-<sect2 id="manual.ext.profile_mode.analysis.algorithms"
- xreflabel="Algorithms">
-<title>Algorithms</title>
<para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_ALGORITHMS</code>.
</para>
-<sect3 id="manual.ext.profile_mode.analysis.algorithms.sort"
- xreflabel="Sorting">
-<title>Sort Algorithm Performance</title>
+<section xml:id="manual.ext.profile_mode.analysis.algorithms.sort" xreflabel="Sorting"><info><title>Sort Algorithm Performance</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_SORT</code>.
@@ -1437,10 +1401,10 @@ foo.cc:1: advice: Change "list" to "forward_list".
</para></listitem>
<listitem><para><emphasis>Fundamentals:</emphasis>
See papers:
- <ulink url="http://portal.acm.org/citation.cfm?doid=1065944.1065981">
- A framework for adaptive algorithm selection in STAPL</ulink> and
- <ulink url="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227">
- Optimizing Sorting with Machine Learning Algorithms</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://portal.acm.org/citation.cfm?doid=1065944.1065981">
+ A framework for adaptive algorithm selection in STAPL</link> and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227">
+ Optimizing Sorting with Machine Learning Algorithms</link>.
</para></listitem>
<listitem><para><emphasis>Sample runtime reduction:</emphasis>60%.
</para></listitem>
@@ -1459,22 +1423,20 @@ foo.cc:1: advice: Change "list" to "forward_list".
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.analysis.locality"
- xreflabel="Data Locality">
-<title>Data Locality</title>
+<section xml:id="manual.ext.profile_mode.analysis.locality" xreflabel="Data Locality"><info><title>Data Locality</title></info>
+
<para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_LOCALITY</code>.
</para>
-<sect3 id="manual.ext.profile_mode.analysis.locality.sw_prefetch"
- xreflabel="Need Software Prefetch">
-<title>Need Software Prefetch</title>
+<section xml:id="manual.ext.profile_mode.analysis.locality.sw_prefetch" xreflabel="Need Software Prefetch"><info><title>Need Software Prefetch</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
@@ -1532,11 +1494,10 @@ foo.cc:7: advice: Insert prefetch instruction.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.locality.linked" xreflabel="Linked Structure Locality"><info><title>Linked Structure Locality</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.locality.linked"
- xreflabel="Linked Structure Locality">
-<title>Linked Structure Locality</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
@@ -1548,8 +1509,8 @@ foo.cc:7: advice: Insert prefetch instruction.
<listitem><para><emphasis>Fundamentals:</emphasis>Allocation can be tuned
to a specific traversal pattern, to result in better data locality.
See paper:
- <ulink url="http://www.springerlink.com/content/8085744l00x72662/">
- Custom Memory Allocation for Free</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.springerlink.com/content/8085744l00x72662/">
+ Custom Memory Allocation for Free</link>.
</para></listitem>
<listitem><para><emphasis>Sample runtime reduction:</emphasis>30%.
</para></listitem>
@@ -1593,14 +1554,13 @@ the allocation sequence or switching to a structure conscious allocator.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.analysis.mthread"
- xreflabel="Multithreaded Data Access">
-<title>Multithreaded Data Access</title>
+<section xml:id="manual.ext.profile_mode.analysis.mthread" xreflabel="Multithreaded Data Access"><info><title>Multithreaded Data Access</title></info>
+
<para>
The diagnostics in this group are not meant to be implemented short term.
@@ -1612,9 +1572,8 @@ the allocation sequence or switching to a structure conscious allocator.
<code>_GLIBCXX_PROFILE_MULTITHREADED</code>.
</para>
-<sect3 id="manual.ext.profile_mode.analysis.mthread.ddtest"
- xreflabel="Dependence Violations at Container Level">
-<title>Data Dependence Violations at Container Level</title>
+<section xml:id="manual.ext.profile_mode.analysis.mthread.ddtest" xreflabel="Dependence Violations at Container Level"><info><title>Data Dependence Violations at Container Level</title></info>
+
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_DDTEST</code>.
@@ -1638,9 +1597,9 @@ the allocation sequence or switching to a structure conscious allocator.
Keep a shadow for each container. Record iterator dereferences and
container member accesses. Issue advice for elements referenced by
multiple threads.
- See paper: <ulink url="http://portal.acm.org/citation.cfm?id=207110.207148">
+ See paper: <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://portal.acm.org/citation.cfm?id=207110.207148">
The LRPD test: speculative run-time parallelization of loops with
- privatization and reduction parallelization</ulink>.
+ privatization and reduction parallelization</link>.
</para></listitem>
<listitem><para><emphasis>Cost model:</emphasis>
Number of accesses to elements referenced from multiple threads
@@ -1650,11 +1609,10 @@ the allocation sequence or switching to a structure conscious allocator.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
+
+<section xml:id="manual.ext.profile_mode.analysis.mthread.false_share" xreflabel="False Sharing"><info><title>False Sharing</title></info>
-<sect3 id="manual.ext.profile_mode.analysis.mthread.false_share"
- xreflabel="False Sharing">
-<title>False Sharing</title>
<itemizedlist>
<listitem><para><emphasis>Switch:</emphasis>
<code>_GLIBCXX_PROFILE_FALSE_SHARING</code>.
@@ -1699,14 +1657,13 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
</programlisting>
</para></listitem>
</itemizedlist>
-</sect3>
+</section>
-</sect2>
+</section>
-<sect2 id="manual.ext.profile_mode.analysis.statistics"
- xreflabel="Statistics">
-<title>Statistics</title>
+<section xml:id="manual.ext.profile_mode.analysis.statistics" xreflabel="Statistics"><info><title>Statistics</title></info>
+
<para>
<emphasis>Switch:</emphasis>
@@ -1726,32 +1683,26 @@ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
of each operation actually performed on the container.
</para>
-</sect2>
+</section>
+
+</section>
-</sect1>
+<bibliography xml:id="profile_mode.biblio"><info><title>Bibliography</title></info>
-<bibliography id="profile_mode.biblio">
-<title>Bibliography</title>
<biblioentry>
- <title>
+ <citetitle>
Perflint: A Context Sensitive Performance Advisor for C++ Programs
- </title>
+ </citetitle>
- <author>
- <firstname>Lixia</firstname>
- <surname>Liu</surname>
- </author>
- <author>
- <firstname>Silvius</firstname>
- <surname>Rus</surname>
- </author>
+ <author><personname><firstname>Lixia</firstname><surname>Liu</surname></personname></author>
+ <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname></author>
<copyright>
<year>2009</year>
- <holder></holder>
+ <holder/>
</copyright>
<publisher>
diff --git a/libstdc++-v3/doc/xml/manual/shared_ptr.xml b/libstdc++-v3/doc/xml/manual/shared_ptr.xml
index 70e000dcc5b..4ef5f72b6a6 100644
--- a/libstdc++-v3/doc/xml/manual/shared_ptr.xml
+++ b/libstdc++-v3/doc/xml/manual/shared_ptr.xml
@@ -1,7 +1,8 @@
-<section id="std.util.memory.shared_ptr" xreflabel="shared_ptr">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util.memory.shared_ptr" xreflabel="shared_ptr">
<?dbhtml filename="shared_ptr.html"?>
-<sectioninfo>
+<info><title>shared_ptr</title>
<keywordset>
<keyword>
ISO C++
@@ -10,17 +11,17 @@
shared_ptr
</keyword>
</keywordset>
-</sectioninfo>
+</info>
+
-<title>shared_ptr</title>
<para>
The shared_ptr class template stores a pointer, usually obtained via new,
and implements shared ownership semantics.
</para>
-<section id="shared_ptr.req">
-<title>Requirements</title>
+<section xml:id="shared_ptr.req"><info><title>Requirements</title></info>
+
<para>
</para>
@@ -43,8 +44,8 @@ and implements shared ownership semantics.
</para>
</section>
-<section id="shared_ptr.design_issues">
-<title>Design Issues</title>
+<section xml:id="shared_ptr.design_issues"><info><title>Design Issues</title></info>
+
<para>
@@ -67,11 +68,11 @@ technique known as type erasure.
</section>
-<section id="shared_ptr.impl">
-<title>Implementation</title>
+<section xml:id="shared_ptr.impl"><info><title>Implementation</title></info>
- <section>
- <title>Class Hierarchy</title>
+
+ <section><info><title>Class Hierarchy</title></info>
+
<para>
A <classname>shared_ptr&lt;T&gt;</classname> contains a pointer of
@@ -88,7 +89,7 @@ resource.
<term><classname>_Sp_counted_base&lt;Lp&gt;</classname></term>
<listitem>
<para>
-The base of the hierarchy is parameterized on the lock policy alone.
+The base of the hierarchy is parameterized on the lock policy (see below.)
_Sp_counted_base doesn't depend on the type of pointer being managed,
it only maintains the reference counts and calls virtual functions when
the counts drop to zero. The managed object is destroyed when the last
@@ -158,18 +159,8 @@ that simplifies the implementation slightly.
</section>
- <section>
- <title>Thread Safety</title>
-
- <para>
-The interface of <classname>tr1::shared_ptr</classname> was extended for C++0x
-with support for rvalue-references and the other features from
-N2351. As with other libstdc++ headers shared by TR1 and C++0x,
-boost_shared_ptr.h uses conditional compilation, based on the macros
-<constant>_GLIBCXX_INCLUDE_AS_CXX0X</constant> and
-<constant>_GLIBCXX_INCLUDE_AS_TR1</constant>, to enable and disable
-features.
- </para>
+ <section><info><title>Thread Safety</title></info>
+
<para>
C++0x-only features are: rvalue-ref/move support, allocator support,
@@ -180,8 +171,8 @@ deprecated in C++0x mode.
<para>
The
-<ulink url="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
-Safety</ulink> section of the Boost shared_ptr documentation says "shared_ptr
+<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety">Thread
+Safety</link> section of the Boost shared_ptr documentation says "shared_ptr
objects offer the same level of thread safety as built-in types."
The implementation must ensure that concurrent updates to separate shared_ptr
instances are correct even when those instances share a reference count e.g.
@@ -234,8 +225,8 @@ Policy below for details.
</section>
- <section>
- <title>Selecting Lock Policy</title>
+ <section><info><title>Selecting Lock Policy</title></info>
+
<para>
</para>
@@ -264,8 +255,8 @@ available policies are:
</para>
<para>
Selected when GCC supports a builtin atomic compare-and-swap operation
-on the target processor (see <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html">Atomic
-Builtins</ulink>.) The reference counts are maintained using a lock-free
+on the target processor (see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html">Atomic
+Builtins</link>.) The reference counts are maintained using a lock-free
algorithm and GCC's atomic builtins, which provide the required memory
synchronisation.
</para>
@@ -302,27 +293,35 @@ used when libstdc++ is built without <literal>--enable-threads</literal>.
</para>
</section>
- <section>
- <title>Dual C++0x and TR1 Implementation</title>
+ <section><info><title>Dual C++0x and TR1 Implementation</title></info>
+
+
+<para>
+The interface of <classname>tr1::shared_ptr</classname> was extended for C++0x
+with support for rvalue-references and the other features from N2351.
+The <classname>_Sp_counted_base</classname> base class is implemented in
+<filename>tr1/boost_sp_shared_count.h</filename> and is common to the TR1
+and C++0x versions of <classname>shared_ptr</classname>.
+</para>
<para>
The classes derived from <classname>_Sp_counted_base</classname> (see Class Hierarchy
-below) and <classname>__shared_count</classname> are implemented separately for C++0x
-and TR1, in <filename>bits/boost_sp_shared_count.h</filename> and
-<filename>tr1/boost_sp_shared_count.h</filename> respectively. All other classes
-including <classname>_Sp_counted_base</classname> are shared by both implementations.
+above) and <classname>__shared_count</classname> are implemented separately for C++0x
+and TR1, in <filename>bits/shared_ptr.h</filename> and
+<filename>tr1/shared_ptr.h</filename> respectively.
</para>
<para>
The TR1 implementation is considered relatively stable, so is unlikely to
change unless bug fixes require it. If the code that is common to both
C++0x and TR1 modes needs to diverge further then it might be necessary to
-duplicate additional classes and only make changes to the C++0x versions.
+duplicate <classname>_Sp_counted_base</classname> and only make changes to
+the C++0x version.
</para>
</section>
-<section>
-<title>Related functions and classes</title>
+<section><info><title>Related functions and classes</title></info>
+
<variablelist>
@@ -414,25 +413,25 @@ the following types, depending on how the shared_ptr is constructed.
</listitem>
-->
-<section id="shared_ptr.using">
-<title>Use</title>
+<section xml:id="shared_ptr.using"><info><title>Use</title></info>
+
- <section>
- <title>Examples</title>
+ <section><info><title>Examples</title></info>
+
<para>
Examples of use can be found in the testsuite, under
- <filename class="directory">testsuite/tr1/2_general_utilities/shared_ptr</filename>.
+ <filename class="directory">testsuite/tr1/2_general_utilities/shared_ptr</filename>,
+ <filename class="directory">testsuite/20_util/shared_ptr</filename>
+ and
+ <filename class="directory">testsuite/20_util/weak_ptr</filename>.
</para>
</section>
- <section>
- <title>Unresolved Issues</title>
+ <section><info><title>Unresolved Issues</title></info>
+
<para>
- The resolution to C++ Standard Library issue <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#674">674</ulink>,
- "shared_ptr interface changes for consistency with N1856" will
- need to be implemented after it is accepted into the working
- paper. Issue <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#743">743</ulink>
- might also require changes.
+ The <emphasis><classname>shared_ptr</classname> atomic access</emphasis>
+ clause in the C++0x working draft is not implemented in GCC.
</para>
<para>
@@ -476,17 +475,12 @@ the following types, depending on how the shared_ptr is constructed.
would alter the ABI.
</para>
- <para>
- Exposing the alias constructor in TR1 mode could simplify the
- *_pointer_cast functions. Constructor could be private in TR1
- mode, with the cast functions as friends.
- </para>
</section>
</section>
-<section id="shared_ptr.ack">
-<title>Acknowledgments</title>
+<section xml:id="shared_ptr.ack"><info><title>Acknowledgments</title></info>
+
<para>
The original authors of the Boost shared_ptr, which is really nice
@@ -497,56 +491,48 @@ the following types, depending on how the shared_ptr is constructed.
</section>
-<bibliography id="shared_ptr.biblio">
-<title>Bibliography</title>
+<bibliography xml:id="shared_ptr.biblio"><info><title>Bibliography</title></info>
+
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm">
- <citetitle>
- Improving shared_ptr for C++0x, Revision 2
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" class="uri">
</biblioid>
+ <citetitle>
+ Improving shared_ptr for C++0x, Revision 2
+ </citetitle>
<subtitle>
N2351
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html">
- <citetitle>
- C++ Standard Library Active Issues List
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" class="uri">
</biblioid>
+ <citetitle>
+ C++ Standard Library Active Issues List
+ </citetitle>
<subtitle>
N2456
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">
- <citetitle>
- Working Draft, Standard for Programming Language C++
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" class="uri">
</biblioid>
+ <citetitle>
+ Working Draft, Standard for Programming Language C++
+ </citetitle>
<subtitle>
N2461
</subtitle>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://boost.org/libs/smart_ptr/shared_ptr.htm">shared_ptr
- <citetitle>
- Boost C++ Libraries documentation, shared_ptr
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://boost.org/libs/smart_ptr/shared_ptr.htm" class="uri">shared_ptr
</biblioid>
+ <citetitle>
+ Boost C++ Libraries documentation, shared_ptr
+ </citetitle>
<subtitle>
N2461
</subtitle>
diff --git a/libstdc++-v3/doc/xml/manual/spine.xml b/libstdc++-v3/doc/xml/manual/spine.xml
index 1c806ca18b8..808ca0341cd 100644
--- a/libstdc++-v3/doc/xml/manual/spine.xml
+++ b/libstdc++-v3/doc/xml/manual/spine.xml
@@ -1,19 +1,15 @@
-<?xml version='1.0'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<book id="manual-index">
+<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="manual-index">
<?dbhtml dir="manual"?>
<?dbhtml filename="spine.html"?>
-<title>The GNU C++ Library</title>
-<bookinfo>
+ <title>The GNU C++ Library Manual</title>
+
+<info>
<copyright>
<year>2009</year>
<year>2010</year>
<holder>
- <ulink url="http://www.fsf.org">FSF</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
</copyright>
<legalnotice>
@@ -21,117 +17,101 @@
<link linkend="manual.intro.status.license">License</link>
</para>
</legalnotice>
-</bookinfo>
+</info>
<!-- Part 01 : Intro -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="intro.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="intro.xml">
</xi:include>
<!-- Part 02 : Standard Contents -->
-<part id="manual.std" xreflabel="Standard Contents">
-<title>
- Standard Contents
-</title>
+<part xml:id="manual.std" xreflabel="Standard Contents">
+<info>
+ <title>
+ Standard Contents
+ </title>
+</info>
+
<!-- Chapter 01 : Support -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="support.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="support.xml">
</xi:include>
<!-- Chapter 02 : Diagnostics -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="diagnostics.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="diagnostics.xml">
</xi:include>
<!-- Chapter 03 : Utilities -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="utilities.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="utilities.xml">
</xi:include>
<!-- Chapter 04 : Strings -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="strings.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="strings.xml">
</xi:include>
<!-- Chapter 05 : Localization -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="localization.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="localization.xml">
</xi:include>
<!-- Chapter 06 : Containers -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="containers.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="containers.xml">
</xi:include>
<!-- Chapter 07 : Iterators -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="iterators.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="iterators.xml">
</xi:include>
<!-- Chapter 08 : Algorithms -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="algorithms.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="algorithms.xml">
</xi:include>
<!-- Chapter 09 : Numerics -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="numerics.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="numerics.xml">
</xi:include>
<!-- Chapter 10 : Input Output -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="io.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="io.xml">
</xi:include>
<!-- Chapter 11 : Atomics -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="atomics.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="atomics.xml">
</xi:include>
<!-- Chapter 12 : Concurrency -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="concurrency.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency.xml">
</xi:include>
</part>
<!-- Part 03 : Extensions -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="extensions.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="extensions.xml">
</xi:include>
<!-- Part 04 : Appendices -->
-<part id="appendix" xreflabel="Appendices">
-<title>
+<part xml:id="appendix" xreflabel="Appendices"><info><title>
Appendices
-</title>
+</title></info>
+
<!-- Appendix A -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="appendix_contributing.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_contributing.xml">
</xi:include>
<!-- Appendix B -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="appendix_porting.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_porting.xml">
</xi:include>
<!-- Appendix C -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="appendix_free.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="appendix_free.xml">
</xi:include>
<!-- Appendix D -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="../gnu/gpl-3.0.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="../gnu/gpl-3.0.xml">
</xi:include>
<!-- Appendix E -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="../gnu/fdl-1.2.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="../gnu/fdl-1.3.xml">
</xi:include>
</part>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx1998.xml b/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
index c5e63fa977e..67f6f891df0 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
@@ -1,7 +1,8 @@
-<sect2 id="status.iso.1998" xreflabel="ISO C++ 1998">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.1998" xreflabel="ISO C++ 1998">
<?dbhtml filename="status_iso_cxx1998.html"?>
-<sect2info>
+<info><title>C++ 1998/2003</title>
<keywordset>
<keyword>
ISO C++
@@ -10,12 +11,11 @@
1998
</keyword>
</keywordset>
-</sect2info>
+</info>
-<title>C++ 1998/2003</title>
-<sect3 id="iso.1998.status" xreflabel="Implementation Status">
- <title>Implementation Status</title>
+<section xml:id="iso.1998.status" xreflabel="Implementation Status">
+<info><title>Implementation Status</title></info>
<para>
This status table is based on the table of contents of ISO/IEC 14882:2003.
@@ -35,13 +35,14 @@ particular release.
Broken/Partial
<?dbhtml bgcolor="#B0B0B0" ?>
-->
-<table frame='all'>
-<title>C++ 1998/2003 Implementation Status</title>
-<tgroup cols='4' align='left' colsep='0' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+<table frame="all">
+ <title>C++ 1998/2003 Implementation Status</title>
+
+<tgroup cols="4" align="left" colsep="0" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
<entry>Section</entry>
@@ -65,25 +66,25 @@ particular release.
<entry>18.1</entry>
<entry>Types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.2</entry>
<entry>Implementation properties</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.2.1</entry>
<entry>Numeric Limits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.2.1.1</entry>
<entry>Class template <code>numeric_limits</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.2.1.2</entry>
@@ -104,85 +105,85 @@ particular release.
<entry>18.2.1.5</entry>
<entry><code>numeric_limits</code> specializations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.2.2</entry>
<entry>C Library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.3</entry>
<entry>Start and termination</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.4</entry>
<entry>Dynamic memory management</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.5</entry>
<entry>Type identification</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.5.1</entry>
<entry>Class type_info</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.5.2</entry>
<entry>Class bad_cast</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.5.3</entry>
<entry>Class bad_typeid</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.6</entry>
<entry>Exception handling</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.6.1</entry>
<entry>Class exception</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.6.2</entry>
<entry>Violation exception-specifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.6.3</entry>
<entry>Abnormal termination</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.6.4</entry>
<entry><code>uncaught_exception</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.7</entry>
<entry>Other runtime support</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -196,19 +197,19 @@ particular release.
<entry>19.1</entry>
<entry>Exception classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.2</entry>
<entry>Assertions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.3</entry>
<entry>Error numbers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -222,139 +223,139 @@ particular release.
<entry>20.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.2</entry>
<entry>Utility components</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.2.1</entry>
<entry>Operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.2.2</entry>
<entry><code>pair</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3</entry>
<entry>Function objects</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.3.1</entry>
<entry>Base</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.2</entry>
<entry>Arithmetic operation</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.3</entry>
<entry>Comparisons</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.4</entry>
<entry>Logical operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.5</entry>
<entry>Negators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.6</entry>
<entry>Binders</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.7</entry>
<entry>Adaptors for pointers to functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.8</entry>
<entry>Adaptors for pointers to members</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4</entry>
<entry>Memory</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.4.1</entry>
<entry>The default allocator</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.2</entry>
<entry>Raw storage iterator</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.3</entry>
<entry>Temporary buffers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.4</entry>
<entry>Specialized algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.4.1</entry>
<entry><code>uninitialized_copy</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.4.2</entry>
<entry><code>uninitialized_fill</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.4.3</entry>
<entry><code>uninitialized_fill_n</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.5</entry>
<entry>Class template <code>auto_ptr</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.4.6</entry>
<entry>C library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -367,50 +368,50 @@ particular release.
<row>
<entry>21.1</entry>
<entry>Character traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>21.1.1</entry>
<entry>Character traits requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.1.2</entry>
<entry>traits typedef</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.1.3</entry>
<entry><code>char_traits</code> specializations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>21.1.3.1</entry>
<entry>struct <code>char_traits&lt;char&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.1.3.2</entry>
<entry>struct <code>char_traits&lt;wchar_t&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.2</entry>
<entry>String classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.3</entry>
<entry>Class template <code>basic_string</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.4</entry>
@@ -429,158 +430,158 @@ particular release.
<row>
<entry>22.1</entry>
<entry>Locales</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.1.1</entry>
<entry>Class <code>locale</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.1.2</entry>
<entry><code>locale</code> globals</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.1.3</entry>
<entry>Convenience interfaces</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.1.3.1</entry>
<entry>Character classification</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.1.3.2</entry>
<entry>Character conversions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2</entry>
<entry>Standard locale categories</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.2.1</entry>
<entry><code>ctype</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.2</entry>
<entry>Numeric</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.2.2.1</entry>
<entry><code>num_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.2.2</entry>
<entry><code>num_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.3</entry>
<entry><code>num_punct</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.4</entry>
<entry><code>collate</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.5</entry>
<entry>Time</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.2.5.1</entry>
<entry><code>time_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.5.2</entry>
<entry><code>time_get_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.5.3</entry>
<entry><code>time_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.5.3</entry>
<entry><code>time_put_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.6</entry>
<entry>Monetary</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.2.6.1</entry>
<entry><code>money_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.6.2</entry>
<entry><code>money_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.6.3</entry>
<entry><code>money_punct</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.6.4</entry>
<entry><code>money_punct_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.7</entry>
<entry><code>messages</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2.8</entry>
<entry>Program-defined facets</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.3</entry>
<entry>C Library Locales</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -594,91 +595,91 @@ particular release.
<entry>23.1</entry>
<entry>Container requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2</entry>
<entry>Sequence containers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.2.1</entry>
<entry>Class template <code>deque</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.2</entry>
<entry>Class template <code>list</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.3</entry>
<entry>Adaptors</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.2.3.1</entry>
<entry>Class template <code>queue</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.3.2</entry>
<entry>Class template <code>priority_queue</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.3.3</entry>
<entry>Class template <code>stack</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.4</entry>
<entry>Class template <code>vector</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.2.5</entry>
<entry>Class <code>vector&lt;bool&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3</entry>
<entry>Associative containers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.3.1</entry>
<entry>Class template <code>map</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.2</entry>
<entry>Class template <code>multimap</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.3</entry>
<entry>Class template <code>set</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.4</entry>
<entry>Class template <code>multiset</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -692,67 +693,67 @@ particular release.
<entry>24.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.2</entry>
<entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.3</entry>
<entry>Iterator primitives</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.4</entry>
<entry>Predefined iterators and Iterator adaptors</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>24.4.1</entry>
<entry>Reverse iterators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.4.2</entry>
<entry>Insert iterators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5</entry>
<entry>Stream iterators</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>24.5.1</entry>
<entry>Class template <code>istream_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5.2</entry>
<entry>Class template <code>ostream_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5.3</entry>
<entry>Class template <code>istreambuf_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5.4</entry>
<entry>Class template <code>ostreambuf_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -766,25 +767,25 @@ particular release.
<entry>25.1</entry>
<entry>Non-modifying sequence operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>25.2</entry>
<entry>Mutating sequence operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>25.3</entry>
<entry>Sorting and related operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>25.4</entry>
<entry>C library algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -798,115 +799,115 @@ particular release.
<entry>26.1</entry>
<entry>Numeric type requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.2</entry>
<entry>Complex numbers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3</entry>
<entry>Numeric arrays</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.3.1</entry>
<entry>Header <code>&lt;valarray&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.2</entry>
<entry>Class template <code>valarray</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.3</entry>
<entry><code>valarray</code> non-member operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.4</entry>
<entry>Class <code>slice</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.5</entry>
<entry>Class template <code>slice_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.6</entry>
<entry>Class <code>gslice</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.7</entry>
<entry>Class template <code>gslice_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.8</entry>
<entry>Class template <code>mask_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3.9</entry>
<entry>Class template <code>indirect_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4</entry>
<entry>Generalized numeric operations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.4.1</entry>
<entry><code>accumulate</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4.2</entry>
<entry><code>inner_product</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4.3</entry>
<entry><code>partial_sum</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4.4</entry>
<entry><code>adjacent_difference</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4.5</entry>
<entry>iota</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5</entry>
<entry>C Library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -920,61 +921,61 @@ particular release.
<entry>27.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.2</entry>
<entry>Forward declarations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.3</entry>
<entry>Standard iostream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.3.1</entry>
<entry>Narrow stream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.3.2</entry>
<entry>Wide stream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.4</entry>
<entry>Iostreams base classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.5</entry>
<entry>Stream buffers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.6</entry>
<entry>Formatting and manipulators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.7</entry>
<entry>String-based streams</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.8</entry>
<entry>File-based streams</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -987,53 +988,53 @@ particular release.
<row>
<entry>D.1</entry>
<entry>Increment operator with bool operand</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.2</entry>
<entry><code>static</code> keyword</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.3</entry>
<entry>Access declarations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.4</entry>
<entry>Implicit conversion from const strings</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.5</entry>
<entry>C standard library headers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.6</entry>
<entry>Old iostreams members</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.7</entry>
<entry>char* streams</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
</tbody>
</tgroup>
</table>
-</sect3>
+</section>
-<sect3 id="iso.1998.specific" xreflabel="Implementation Specific">
- <title>Implementation Specific Behavior</title>
+<section xml:id="iso.1998.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
+
<para>
The ISO standard defines the following phrase:
@@ -1056,8 +1057,8 @@ particular release.
</blockquote>
<para>
We do so here, for the C++ library only. Behavior of the
- compiler, linker, runtime loader, and other elements of &quot;the
- implementation&quot; are documented elsewhere. Everything listed
+ compiler, linker, runtime loader, and other elements of "the
+ implementation" are documented elsewhere. Everything listed
in Annex B, Implementation Qualities, are also part of the
compiler, not the library.
</para>
@@ -1104,13 +1105,13 @@ particular release.
<code>std::type_info::name()</code> is the mangled type name (see the
previous entry for more).
</para>
- <para><emphasis>[20.1.5]/5</emphasis> <emphasis>&quot;Implementors are encouraged to
+ <para><emphasis>[20.1.5]/5</emphasis> <emphasis>"Implementors are encouraged to
supply libraries that can accept allocators that encapsulate more
general memory models and that support non-equal instances. In such
implementations, any requirements imposed on allocators by containers
beyond those requirements that appear in Table 32, and the semantics
of containers and algorithms when allocator instances compare
- non-equal, are implementation-defined.&quot;</emphasis> As yet we don't
+ non-equal, are implementation-defined."</emphasis> As yet we don't
have any allocators which compare non-equal, so we can't describe how
they behave.
</para>
@@ -1158,6 +1159,6 @@ particular release.
a get area exists will... whatever <code>fflush()</code> does, I think.
</para>
-</sect3>
+</section>
-</sect2>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml b/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
index d3ea5ca2c3a..4a74ea7aa46 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
@@ -1,7 +1,8 @@
-<sect2 id="status.iso.200x" xreflabel="Status C++ 200x">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.200x" xreflabel="Status C++ 200x">
<?dbhtml filename="status_iso_cxx200x.html"?>
-<sect2info>
+<info><title>C++ 200x</title>
<keywordset>
<keyword>
ISO C++
@@ -10,14 +11,12 @@
200x
</keyword>
</keywordset>
-</sect2info>
-
-<title>C++ 200x</title>
+</info>
<para>
This table is based on the table of contents of ISO/IEC
-Doc No: N3000=09-0190 Date: 2009-11-09
-Working Draft, Standard for Programming Language C++
+JTC1 SC22 WG21 Doc No: N3092 Date: 2010-03-26
+Final Committee Draft, Standard for Programming Language C++
</para>
<para>
@@ -44,13 +43,14 @@ particular release.
Broken/Partial
<?dbhtml bgcolor="#B0B0B0" ?>
-->
-<table frame='all'>
+<table frame="all">
<title>C++ 200x Implementation Status</title>
-<tgroup cols='4' align='left' colsep='0' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="0" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
<entry>Section</entry>
@@ -61,6 +61,7 @@ particular release.
</thead>
<tbody>
+
<row>
<entry>
<emphasis>18</emphasis>
@@ -74,33 +75,33 @@ particular release.
<entry>18.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>18.2</entry>
<entry>Types</entry>
<entry>Partial</entry>
- <entry>Missing offsetof, max_align_t, nullptr_t</entry>
+ <entry>Missing offsetof, max_align_t</entry>
</row>
<row>
<entry>18.3</entry>
<entry>Implementation properties</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.3.1</entry>
<entry>Numeric Limits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.3.1.1</entry>
<entry>Class template <code>numeric_limits</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
@@ -114,164 +115,150 @@ particular release.
<entry>18.3.1.3</entry>
<entry><code>float_round_style</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>18.3.1.4</entry>
<entry><code>float_denorm_style</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.3.1.5</entry>
<entry><code>numeric_limits</code> specializations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.3.2</entry>
<entry>C Library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.4</entry>
<entry>Integer types</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.4.1</entry>
<entry>Header <code>&lt;cstdint&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>18.4.2</entry>
- <entry>The header <code>&lt;stdint.h&gt;</code></entry>
- <entry>Partial</entry>
- <entry>May use configure-generated stdint.h via GCC_HEADER_STDINT</entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>18.5</entry>
<entry>Start and termination</entry>
<entry>Partial</entry>
- <entry>Missing quick_exit, at_quick_exit</entry>
+ <entry>C library dependency for quick_exit, at_quick_exit</entry>
</row>
<row>
<entry>18.6</entry>
<entry>Dynamic memory management</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.7</entry>
<entry>Type identification</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.7.1</entry>
<entry>Class type_info</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>18.7.2</entry>
- <entry>Class type_index</entry>
- <entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <entry>18.7.3</entry>
<entry>Class bad_cast</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>18.7.4</entry>
+ <entry>18.7.3</entry>
<entry>Class bad_typeid</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8</entry>
<entry>Exception handling</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.8.1</entry>
<entry>Class exception</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8.2</entry>
- <entry>Violation exception-specifications</entry>
+ <entry>Violating exception-specifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8.3</entry>
<entry>Abnormal termination</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8.4</entry>
<entry><code>uncaught_exception</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8.5</entry>
- <entry>Propagation</entry>
+ <entry>Exception Propagation</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.8.6</entry>
- <entry>Class <code>nested_exception</code></entry>
+ <entry><code>nested_exception</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.9</entry>
<entry>Initializer lists</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>18.9.1</entry>
<entry>Initializer list constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.9.2</entry>
<entry>Initializer list access</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>18.9.3</entry>
- <entry>Initializer list concept maps</entry>
+ <entry>Initializer list range access</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>18.10</entry>
<entry>Other runtime support</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -285,63 +272,61 @@ particular release.
<entry>19.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.2</entry>
<entry>Exception classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.3</entry>
<entry>Assertions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.4</entry>
<entry>Error numbers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.5</entry>
<entry>System error support</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>19.5.1</entry>
<entry>Class <code>error_category</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>19.5.2</entry>
<entry>Class <code>error_code</code></entry>
- <entry>Partial</entry>
- <entry>Missing concept ErrorCodeEnum</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>19.5.3</entry>
<entry>Class <code>error_condition</code></entry>
- <entry>Partial</entry>
- <entry>Missing concept ErrorConditionEnum</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>19.5.4</entry>
<entry>Comparison operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>19.5.5</entry>
<entry>Class <code>system_error</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -352,647 +337,616 @@ particular release.
</entry>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>20.1</entry>
<entry>General</entry>
- <entry>Partial</entry>
- <entry>Missing all concepts</entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>20.2</entry>
- <entry>Concepts</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Requirements</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.3</entry>
<entry>Utility components</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.3.1</entry>
<entry>Operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.2</entry>
- <entry><code>forward</code> and <code>move</code> helpers</entry>
+ <entry>Swap</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.3</entry>
- <entry><code>pair</code></entry>
+ <entry><code>forward</code> and <code>move</code> helpers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>20.3.4</entry>
- <entry>tuple-like access to <code>pair</code></entry>
+ <entry>Function template <code>declval</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>20.3.5</entry>
- <entry>Range concept maps for <code>pair</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Pairs</entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.3.6</entry>
- <entry>Class template <code>bitset</code></entry>
+ <entry>20.3.5.1</entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.3.5.2</entry>
+ <entry>Class template <code>pair</code></entry>
<entry>Partial</entry>
<entry>Missing constexpr</entry>
</row>
<row>
+ <entry>20.3.5.3</entry>
+ <entry>Tuple-like access to <code>pair</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>20.3.5.4</entry>
+ <entry><code>pair</code> range access</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>20.3.5.5</entry>
+ <entry>Piecewise construction</entry>
+ <entry>N</entry>
+ <entry/>
+ </row>
+ <row>
<entry>20.4</entry>
- <entry>Compile-time rational arithmetic</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Tuples</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>20.4.1</entry>
- <entry>Class template <code>ratio</code></entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>In general</entry>
+ <entry/>
+ <entry/>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>20.4.2</entry>
- <entry>Arithmetic on <code>ratio</code> types</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>Class template <code>tuple</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr and range access</entry>
</row>
<row>
- <entry>20.4.3</entry>
- <entry>Comparison of <code>ratio</code> types</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>20.5</entry>
+ <entry>Class template <code>bitset</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing constexpr</entry>
+ </row>
+ <row>
+ <entry>20.6</entry>
+ <entry>Compile-time rational arithmetic</entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.4.4</entry>
- <entry>SI types</entry>
+ <entry>20.6.1</entry>
+ <entry>Class template <code>ratio</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.5</entry>
- <entry>Tuples</entry>
- <entry></entry>
- <entry></entry>
+ <entry>20.6.2</entry>
+ <entry>Arithmetic on <code>ratio</code> types</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <entry>20.5.1</entry>
- <entry>General</entry>
+ <entry>20.6.3</entry>
+ <entry>Comparison of <code>ratio</code> types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.5.2</entry>
- <entry>Class template <code>tuple</code></entry>
- <entry>Partial</entry>
- <entry>Missing range concept maps</entry>
+ <entry>20.6.4</entry>
+ <entry>SI types for <code>ratio</code></entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <entry>20.6</entry>
+ <entry>20.7</entry>
<entry>Metaprogramming and type traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.6.1</entry>
+ <entry>20.7.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.6.2</entry>
+ <entry>20.7.2</entry>
<entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.6.3</entry>
+ <entry>20.7.3</entry>
<entry>Helper classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.4</entry>
+ <entry>20.7.4</entry>
<entry>Unary Type Traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <entry>20.6.4.1</entry>
+ <entry>20.7.4.1</entry>
<entry>Primary type categories</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.4.2</entry>
+ <entry>20.7.4.2</entry>
<entry>Composite type traits</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.6.4.3</entry>
+ <entry>20.7.4.3</entry>
<entry>Type properties</entry>
<entry>Partial</entry>
- <entry>Missing is_system_layout</entry>
+ <entry>Missing is_trivially_copyable, is_literal_type, is_nothrow_constructible</entry>
</row>
<row>
- <entry>20.6.5</entry>
+ <entry>20.7.5</entry>
<entry>Relationships between types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.6</entry>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.7.6</entry>
<entry>Transformations between types</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing underlying_type</entry>
</row>
<row>
- <entry>20.6.6.1</entry>
+ <entry>20.7.6.1</entry>
<entry>Const-volatile modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.6.2</entry>
+ <entry>20.7.6.2</entry>
<entry>Reference modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.6.3</entry>
+ <entry>20.7.6.3</entry>
<entry>Sign modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.6.4</entry>
+ <entry>20.7.6.4</entry>
<entry>Array modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.6.6.5</entry>
+ <entry>20.7.6.5</entry>
<entry>Pointer modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.6.7</entry>
+ <entry>20.7.6.6</entry>
<entry>Other transformations</entry>
- <entry>Partial</entry>
- <entry>Missing decay</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <entry>20.7</entry>
+ <entry>20.8</entry>
<entry>Function objects</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.7.1</entry>
+ <entry>20.8.1</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.3</entry>
- <entry>Base</entry>
+ <entry>20.8.2</entry>
+ <entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.4</entry>
- <entry>Function object return types</entry>
+ <entry>20.8.3</entry>
+ <entry>Base</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.5</entry>
+ <entry>20.8.4</entry>
<entry>Class template <code>reference_wrapper</code></entry>
<entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.7.6</entry>
- <entry>Identity operation</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.7</entry>
+ <entry>20.8.5</entry>
<entry>Arithmetic operation</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.8</entry>
+ <entry>20.8.6</entry>
<entry>Comparisons</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.9</entry>
+ <entry>20.8.7</entry>
<entry>Logical operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.10</entry>
+ <entry>20.8.8</entry>
<entry>Bitwise operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.11</entry>
+ <entry>20.8.9</entry>
<entry>Negators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.12</entry>
- <entry>Template <code>function</code> and function template <code>bind</code></entry>
+ <entry>20.8.10</entry>
+ <entry>Function template <code>bind</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.13</entry>
+ <entry>20.8.11</entry>
<entry>Adaptors for pointers to functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.14</entry>
+ <entry>20.8.12</entry>
<entry>Adaptors for pointers to members</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.15</entry>
+ <entry>20.8.13</entry>
<entry>Function template <code>mem_fn</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.16</entry>
+ <entry>20.8.14</entry>
<entry>Polymorphic function wrappers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.7.16.1</entry>
+ <entry>20.8.14.1</entry>
<entry>Class <code>bad_function_call</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.16.2</entry>
+ <entry>20.8.14.2</entry>
<entry>Class template <code>function</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.7.17</entry>
+ <entry>20.8.15</entry>
<entry>Class template <code>hash</code></entry>
<entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.7.18</entry>
- <entry>Class template <code>reference_closure</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8</entry>
+ <entry>20.9</entry>
<entry>Memory</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.01</entry>
+ <entry>20.9.1</entry>
<entry>Allocator argument tag</entry>
<entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <entry>20.8.02</entry>
- <entry>Allocators</entry>
- <entry></entry>
- <entry></entry>
- </row>
- <row>
- <entry>20.8.02.1</entry>
- <entry>General</entry>
- <entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.02.2</entry>
- <entry>Allocator concept</entry>
- <entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.02.3</entry>
- <entry>Support for legacy allocators</entry>
- <entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.02.4</entry>
- <entry>Allocator and Legacy Allocator members</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.03</entry>
- <entry>Allocator-related element concepts</entry>
+ <entry>20.9.2</entry>
+ <entry><code>uses_allocator</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.04</entry>
- <entry>Allocator propagation traits</entry>
+ <entry>20.9.3</entry>
+ <entry>Pointer traits</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.05</entry>
- <entry>Allocator propagation map</entry>
+ <entry>20.9.4</entry>
+ <entry>Allocator traits</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.06</entry>
+ <entry>20.9.5</entry>
<entry>The default allocator</entry>
<entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <entry>20.8.07</entry>
- <entry>Scoped allocator adaptor</entry>
- <entry></entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.07.1</entry>
- <entry><code>scoped_allocator_adaptor_base</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.07.2</entry>
- <entry><code>scoped_allocator_adaptor constructors</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>20.9.6</entry>
+ <entry>Scoped allocator adaptor</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.07.3</entry>
- <entry><code>scoped_allocator_adaptor2</code></entry>
+ <entry>20.9.6.1</entry>
+ <entry>Scoped allocator adaptor member types</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.07.3</entry>
- <entry>scoped_allocator_adaptor members</entry>
+ <entry>20.9.6.2</entry>
+ <entry>Scoped allocator adaptor constructors</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.07.4</entry>
- <entry><code>scoped_allocator_adaptor globals</code></entry>
+ <entry>20.9.6.3</entry>
+ <entry>Scoped allocator adaptor members</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.08</entry>
+ <entry>20.9.7</entry>
<entry>Raw storage iterator</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.09</entry>
+ <entry>20.9.8</entry>
<entry>Temporary buffers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.10</entry>
- <entry><code>construct_element</code></entry>
- <entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <entry>20.8.11</entry>
+ <entry>20.9.9</entry>
<entry>Specialized algorithms</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.11.1</entry>
+ <entry>20.9.9.1</entry>
<entry><code>addressof</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.11.2</entry>
+ <entry>20.9.9.2</entry>
<entry><code>uninitialized_copy</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.11.3</entry>
+ <entry>20.9.9.3</entry>
<entry><code>uninitialized_fill</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.11.4</entry>
+ <entry>20.9.9.4</entry>
<entry><code>uninitialized_fill_n</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.12</entry>
+ <entry>20.9.10</entry>
<entry>Class template <code>unique_ptr</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.13</entry>
+ <entry>20.9.11</entry>
<entry>Smart pointers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.8.13.1</entry>
+ <entry>20.9.11.1</entry>
<entry>Class <code>bad_weak_ptr</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.13.2</entry>
+ <entry>20.9.11.2</entry>
<entry>Class template <code>shared_ptr</code></entry>
<entry>Y</entry>
<entry>
<para>
Uses code from
- <ulink url="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</link>.
</para>
</entry>
</row>
<row>
- <entry>20.8.13.3</entry>
+ <entry>20.9.11.3</entry>
<entry>Class template <code>weak_ptr</code></entry>
<entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <entry>20.8.13.4</entry>
- <entry>Class template <code>owner_less</code></entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.13.5</entry>
+ <entry>20.9.11.4</entry>
<entry>Class template <code>emable_shared_from_this</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.8.13.6</entry>
+ <entry>20.9.11.5</entry>
<entry><code>shared_ptr</code> atomic access</entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>20.9.11.6</entry>
+ <entry>Hash support</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>20.8.13.7</entry>
+ <entry>20.9.12</entry>
<entry>Pointer safety</entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>20.8.14</entry>
+ <entry>20.9.13</entry>
<entry>Align</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.8.15</entry>
+ <entry>20.9.16</entry>
<entry>C library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9</entry>
+ <entry>20.10</entry>
<entry>Time utilities</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.9.1</entry>
+ <entry>20.10.1</entry>
<entry>Clock requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9.2</entry>
+ <entry>20.10.2</entry>
<entry>Time-related traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.9.2.1</entry>
+ <entry>20.10.2.1</entry>
<entry><code>treat_as_floating_point</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9.2.2</entry>
+ <entry>20.10.2.2</entry>
<entry><code>duration_values</code></entry>
<entry>Partial</entry>
<entry>Missing constexpr</entry>
</row>
<row>
- <entry>20.9.2.3</entry>
+ <entry>20.10.2.3</entry>
<entry>Specializations of <code>common_type</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9.3</entry>
+ <entry>20.10.3</entry>
<entry>Class template <code>duration</code></entry>
<entry>Partial</entry>
<entry>Missing constexpr</entry>
</row>
<row>
- <entry>20.9.4</entry>
+ <entry>20.10.4</entry>
<entry>Class template <code>time_point</code></entry>
<entry>Partial</entry>
<entry>Missing constexpr</entry>
</row>
<row>
- <entry>20.9.5</entry>
+ <entry>20.10.5</entry>
<entry>Clocks</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <entry>20.9.5.1</entry>
+ <entry>20.10.5.1</entry>
<entry>Class <code>system_clock</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9.5.2</entry>
+ <entry>20.10.5.2</entry>
<entry>Class <code>monotonic_clock</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.9.5.3</entry>
+ <entry>20.10.5.3</entry>
<entry>Class <code>high_resolution_clock</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>20.10</entry>
+ <entry>20.11</entry>
<entry>Date and time functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>20.12</entry>
+ <entry>Class <code>type_index</code></entry>
+ <entry>N</entry>
+ <entry/>
</row>
<row>
<entry>
@@ -1006,31 +960,31 @@ particular release.
<entry>21.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.2</entry>
<entry>Character traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>21.2.1</entry>
<entry>Character traits requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.2.2</entry>
- <entry>traits typedef</entry>
+ <entry>traits typedefs</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.2.3</entry>
<entry><code>char_traits</code> specializations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>21.2.3.1</entry>
@@ -1060,22 +1014,28 @@ particular release.
<entry>21.3</entry>
<entry>String classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.4</entry>
<entry>Class template <code>basic_string</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.5</entry>
<entry>Numeric Conversions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>21.6</entry>
+ <entry>Hash support</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>21.7</entry>
<entry>Null-terminated sequence utilities</entry>
<entry>Y</entry>
<entry>C library dependency</entry>
@@ -1092,196 +1052,196 @@ particular release.
<entry>22.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.2</entry>
<entry>Header <code>&lt;locale&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.3</entry>
<entry>Locales</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.3.1</entry>
<entry>Class <code>locale</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.3.2</entry>
<entry><code>locale</code> globals</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.3.3</entry>
<entry>Convenience interfaces</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.3.3.1</entry>
<entry>Character classification</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.3.3.2</entry>
<entry>Conversions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.3.3.2.1</entry>
- <entry>Character</entry>
+ <entry>Character conversions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>22.3.3.2.2</entry>
- <entry>String</entry>
+ <entry><code>string</code> conversions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>22.3.3.2.3</entry>
- <entry>Buffer</entry>
+ <entry>Buffer conversions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4</entry>
- <entry>Standard locale categories</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Standard <code>locale</code> categories</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.4.1</entry>
- <entry><code>ctype</code></entry>
+ <entry>The <code>ctype</code> category</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.2</entry>
- <entry>Numeric</entry>
- <entry></entry>
- <entry></entry>
+ <entry>The numeric category</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.4.2.1</entry>
<entry><code>num_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.2.2</entry>
<entry><code>num_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.3</entry>
- <entry><code>num_punct</code></entry>
+ <entry>The numeric punctuation facet</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.4</entry>
- <entry><code>collate</code></entry>
+ <entry>The collate category</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.5</entry>
- <entry>Time</entry>
- <entry></entry>
- <entry></entry>
+ <entry>The time category</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.4.5.1</entry>
- <entry><code>time_get</code></entry>
+ <entry>Class template <code>time_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.5.2</entry>
- <entry><code>time_get_byname</code></entry>
+ <entry>Class template <code>time_get_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.5.3</entry>
- <entry><code>time_put</code></entry>
+ <entry>Class template <code>time_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.5.3</entry>
- <entry><code>time_put_byname</code></entry>
+ <entry>Class template <code>time_put_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.6</entry>
- <entry>Monetary</entry>
- <entry></entry>
- <entry></entry>
+ <entry>The monetary category</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>22.4.6.1</entry>
- <entry><code>money_get</code></entry>
+ <entry>Class template <code>money_get</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.6.2</entry>
- <entry><code>money_put</code></entry>
+ <entry>Class template <code>money_put</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.6.3</entry>
- <entry><code>money_punct</code></entry>
+ <entry>Class template <code>money_punct</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.6.4</entry>
- <entry><code>money_punct_byname</code></entry>
+ <entry>Class template <code>money_punct_byname</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.7</entry>
- <entry><code>messages</code></entry>
+ <entry>The message retrieval category</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.4.8</entry>
<entry>Program-defined facets</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>22.5</entry>
<entry>Standard code conversion facets</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>22.6</entry>
<entry>C Library Locales</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -1292,36 +1252,52 @@ particular release.
</entry>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>23.1</entry>
<entry>General</entry>
- <entry>Partial</entry>
- <entry>Missing concepts</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.2</entry>
<entry>Container requirements</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>23.2.1</entry>
- <entry>General requirements</entry>
- <entry>Partial</entry>
- <entry>Missing construct_element</entry>
+ <entry>General container requirements</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>23.2.2</entry>
<entry>Data races</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.3</entry>
+ <entry>Sequence containers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.4</entry>
+ <entry>Associative containers</entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>23.2.5</entry>
+ <entry>Unordered associative containers</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>23.3</entry>
<entry>Sequence containers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.3.1</entry>
@@ -1333,115 +1309,115 @@ particular release.
<entry>23.3.2</entry>
<entry>Class template <code>deque</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.3</entry>
<entry>Class template <code>forward_list</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.4</entry>
<entry>Class template <code>list</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.5</entry>
- <entry>Adaptors</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Container adaptors</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.3.5.1</entry>
<entry>Class template <code>queue</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.5.2</entry>
<entry>Class template <code>priority_queue</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.5.3</entry>
<entry>Class template <code>stack</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.6</entry>
<entry>Class template <code>vector</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.3.7</entry>
<entry>Class <code>vector&lt;bool&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.4</entry>
<entry>Associative containers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.4.1</entry>
<entry>Class template <code>map</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.4.2</entry>
<entry>Class template <code>multimap</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.4.3</entry>
<entry>Class template <code>set</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.4.4</entry>
<entry>Class template <code>multiset</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.5</entry>
<entry>Unordered associative containers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>23.5.1</entry>
<entry>Class template <code>unordered_map</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.5.2</entry>
<entry>Class template <code>unordered_multimap</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.5.3</entry>
<entry>Class template <code>unordered_set</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>23.5.4</entry>
<entry>Class template <code>unordered_multiset</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -1452,109 +1428,89 @@ particular release.
</entry>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>24.1</entry>
<entry>General</entry>
- <entry>Partial</entry>
- <entry>Missing concepts</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>24.2</entry>
- <entry>Iterator concepts</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Iterator requirements</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>24.3</entry>
<entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
- <entry>Partial</entry>
- <entry>Missing concepts</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>24.4</entry>
- <entry>Iterator operations</entry>
+ <entry>Iterator primitives</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5</entry>
- <entry>Predefined iterators and Iterator adaptors</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Iterator adaptors</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>24.5.1</entry>
<entry>Reverse iterators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5.2</entry>
<entry>Insert iterators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.5.3</entry>
<entry>Move iterators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.6</entry>
<entry>Stream iterators</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>24.6.1</entry>
<entry>Class template <code>istream_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.6.2</entry>
<entry>Class template <code>ostream_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.6.3</entry>
<entry>Class template <code>istreambuf_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>24.6.4</entry>
<entry>Class template <code>ostreambuf_iterator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>24.7</entry>
- <entry>Insert iterators</entry>
- <entry></entry>
- <entry></entry>
- </row>
- <row>
- <entry>24.7.1</entry>
- <entry>Class template <code>back_insert_iterator</code></entry>
- <entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <entry>24.7.3</entry>
- <entry>Class template <code>front_insert_iterator</code></entry>
- <entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <entry>24.7.5</entry>
- <entry>Class template <code>insert_iterator</code></entry>
- <entry>Y</entry>
- <entry></entry>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>24.6.5</entry>
+ <entry>range access</entry>
+ <entry>N</entry>
+ <entry/>
</row>
<row>
<entry>
@@ -1565,41 +1521,34 @@ particular release.
</entry>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>25.1</entry>
<entry>General</entry>
- <entry>Partial</entry>
- <entry>Missing concepts</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>25.2</entry>
- <entry>Header <code>&lt;algorithm&gt;</code> synopsis</entry>
- <entry>Y</entry>
- <entry></entry>
- </row>
- <row>
- <entry>25.3</entry>
<entry>Non-modifying sequence operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>25.4</entry>
+ <entry>25.3</entry>
<entry>Mutating sequence operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>25.5</entry>
+ <entry>25.4</entry>
<entry>Sorting and related operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>25.6</entry>
+ <entry>25.5</entry>
<entry>C library algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -1613,19 +1562,19 @@ particular release.
<entry>26.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.2</entry>
<entry>Numeric type requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.3</entry>
<entry>The floating-point environment</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.4</entry>
@@ -1636,28 +1585,26 @@ particular release.
<row>
<entry>26.5</entry>
<entry>Random number generation</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>26.5.1</entry>
- <entry>Header <code>&lt;random&gt;</code> synopsis</entry>
- <entry>Partial</entry>
- <entry>Missing concepts</entry>
+ <entry>Requirements</entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>26.5.2</entry>
- <entry>Concepts and related requirements</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Header <code>&lt;random&gt;</code> synopsis</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.3</entry>
- <entry>Random number engines</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Random number engine class templates</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.3.1</entry>
@@ -1679,9 +1626,9 @@ particular release.
</row>
<row>
<entry>26.5.4</entry>
- <entry>Random number engine adaptors</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Random number engine adaptor class templates</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.4.1</entry>
@@ -1705,7 +1652,7 @@ particular release.
<entry>26.5.5</entry>
<entry>Engines and engine adaptors with predefined parameters</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.6</entry>
@@ -1716,371 +1663,382 @@ particular release.
<row>
<entry>26.5.7</entry>
<entry>Utilities</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.7.1</entry>
<entry>Class <code>seed_seq</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.7.2</entry>
- <entry>Function template generate_canonical</entry>
+ <entry>Function template <code>generate_canonical</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8</entry>
- <entry>Random number distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Random number distribution class templates</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.1</entry>
<entry>Uniform distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.1.1</entry>
<entry>Class template <code>uniform_int_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.1.2</entry>
<entry>Class template <code>uniform_real_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.2</entry>
<entry>Bernoulli distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.2.1</entry>
<entry>Class <code>bernoulli_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.2.2</entry>
<entry>Class template <code>binomial_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.2.3</entry>
<entry>Class template <code>geometric_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.2.4</entry>
<entry>Class template <code>negative_binomial_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.3</entry>
<entry>Poisson distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.3.1</entry>
<entry>Class template <code>poisson_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.3.2</entry>
<entry>Class template <code>exponential_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.3.3</entry>
<entry>Class template <code>gamma_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.3.4</entry>
<entry>Class template <code>weibull_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.3.5</entry>
<entry>Class template <code>extreme_value_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4</entry>
<entry>Normal distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.1</entry>
<entry>Class template <code>normal_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.2</entry>
<entry>Class template <code>lognormal_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.3</entry>
<entry>Class template <code>chi_squared_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.4</entry>
<entry>Class template <code>cauchy_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.5</entry>
<entry>Class template <code>fisher_f_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.4.6</entry>
<entry>Class template <code>student_t_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.5</entry>
<entry>Sampling distributions</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.5.8.5.1</entry>
<entry>Class template <code>discrete_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.5.2</entry>
<entry>Class template <code>piecewise_constant_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.5.8.5.3</entry>
<entry>Class template <code>piecewise_linear_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6</entry>
<entry>Numeric arrays</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.6.1</entry>
<entry>Header <code>&lt;valarray&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.2</entry>
<entry>Class template <code>valarray</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.3</entry>
<entry><code>valarray</code> non-member operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.4</entry>
<entry>Class <code>slice</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.5</entry>
<entry>Class template <code>slice_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.6</entry>
- <entry>Class <code>gslice</code></entry>
+ <entry>The <code>gslice</code> class</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.7</entry>
<entry>Class template <code>gslice_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.8</entry>
<entry>Class template <code>mask_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.6.9</entry>
<entry>Class template <code>indirect_array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#C8B0B0" ?>
+ <entry>26.6.10</entry>
+ <entry><code>valarray</code> range access</entry>
+ <entry>N</entry>
+ <entry/>
</row>
<row>
<entry>26.7</entry>
<entry>Generalized numeric operations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>26.7.1</entry>
<entry><code>accumulate</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.7.2</entry>
<entry><code>inner_product</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.7.3</entry>
<entry><code>partial_sum</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.7.4</entry>
<entry><code>adjacent_difference</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.7.5</entry>
<entry>iota</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>26.8</entry>
<entry>C Library</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
<emphasis>27</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
- <emphasis>Input/output</emphasis>
+ <emphasis>Input/output library</emphasis>
</entry>
</row>
<row>
<entry>27.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.2</entry>
- <entry>Requirements</entry>
+ <entry>Iostreams requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.2.1</entry>
- <entry>Imbue limitations</entry>
+ <entry>Imbue Limitations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.2.2</entry>
- <entry>Positioning type limitations</entry>
+ <entry>Positioning Type Limitations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.2.3</entry>
<entry>Thread safety</entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.3</entry>
<entry>Forward declarations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.4</entry>
<entry>Standard iostream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.4.1</entry>
<entry>Narrow stream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>27.4.2</entry>
<entry>Wide stream objects</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.5</entry>
<entry>Iostreams base classes</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
</row>
<row>
<entry>27.6</entry>
<entry>Stream buffers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.7</entry>
<entry>Formatting and manipulators</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.8</entry>
<entry>String-based streams</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.9</entry>
<entry>File-based streams</entry>
- <entry>Y</entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing move and swap operations</entry>
</row>
<row>
<entry>
@@ -2092,99 +2050,92 @@ particular release.
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.01</entry>
+ <entry>28.1</entry>
<entry>General</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.02</entry>
+ <entry>28.2</entry>
<entry>Definitions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.03</entry>
+ <entry>28.3</entry>
<entry>Requirements</entry>
<entry>N</entry>
- <entry></entry>
- </row>
- <row>
- <?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.04</entry>
- <entry>Regular expressions summary</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.05</entry>
+ <entry>28.4</entry>
<entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>28.06</entry>
+ <entry>28.5</entry>
<entry>Namespace <code>std::regex_constants</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <entry>28.07</entry>
+ <entry>28.6</entry>
<entry>Class <code>regex_error</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.08</entry>
+ <entry>28.7</entry>
<entry>Class template <code>regex_traits</code></entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.09</entry>
+ <entry>28.8</entry>
<entry>Class template <code>basic_regex</code></entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.10</entry>
+ <entry>28.9</entry>
<entry>Class template <code>sub_match</code></entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
- <entry>28.11</entry>
+ <entry>28.10</entry>
<entry>Class template <code>match_results</code></entry>
<entry>Partial</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.12</entry>
+ <entry>28.11</entry>
<entry>Regular expression algorithms</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.13</entry>
+ <entry>28.12</entry>
<entry>Regular expression Iterators</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
- <entry>28.14</entry>
+ <entry>28.13</entry>
<entry>Modified ECMAScript regular expression grammar</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -2198,20 +2149,20 @@ particular release.
<entry>29.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>29.2</entry>
<entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>29.3</entry>
<entry>Order and consistency</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>29.4</entry>
@@ -2222,8 +2173,8 @@ particular release.
<row>
<entry>29.5</entry>
<entry>Atomic types</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>29.5.1</entry>
@@ -2247,20 +2198,20 @@ particular release.
<entry>29.6</entry>
<entry>Operations on atomic types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>29.7</entry>
<entry>Flag Type and operations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>29.8</entry>
<entry>Fences</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>
@@ -2274,197 +2225,206 @@ particular release.
<entry>30.1</entry>
<entry>General</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.2</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.3</entry>
<entry>Threads</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.3.1</entry>
<entry>Class <code>thread</code></entry>
<entry>Partial</entry>
- <entry>Missing futures</entry>
+ <entry><code>thread::id</code> is not trivially copyable</entry>
</row>
<row>
<entry>30.3.2</entry>
<entry>Namespace <code>this_thread</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4</entry>
<entry>Mutual exclusion</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>30.4.1</entry>
<entry>Mutex requirements</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>30.4.1.1</entry>
<entry>Class <code>mutex</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry>Missing constexpr</entry>
</row>
<row>
<entry>30.4.1.2</entry>
<entry>Class <code>recursive_mutex</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.2</entry>
<entry>Timed mutex requirements</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>30.4.2.1</entry>
<entry>Class <code>timed_mutex</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.2.2</entry>
<entry>Class <code>recursive_timed_mutex</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.3</entry>
<entry>Locks</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>30.4.3.1</entry>
<entry>Class template <code>lock_guard</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.3.2</entry>
<entry>Class template <code>unique_lock</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.4</entry>
<entry>Generic locking algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>30.4.5</entry>
<entry>Call once</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>30.4.5.1</entry>
<entry><code>once_flag</code></entry>
- <entry>Partial</entry>
+ <entry>Y</entry>
<entry>Missing constexpr</entry>
</row>
<row>
<entry>30.4.5.2</entry>
<entry><code>call_once</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.5</entry>
<entry>Condition variables</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Partial</entry>
+ <entry>Missing notify_all_at_thread_exit</entry>
</row>
<row>
<entry>30.5.1</entry>
<entry>Class <code>condition_variable</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.5.2</entry>
<entry>Class <code>condition_variable_any</code></entry>
- <entry>Partial</entry>
- <entry></entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>30.6</entry>
<entry>Futures</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>30.6.1</entry>
<entry>Overview</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>30.6.2</entry>
<entry>Error handling</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Y</entry>
+ <entry>Missing constexpr</entry>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>30.6.3</entry>
<entry>Class <code>future_error</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
<entry>30.6.4</entry>
- <entry>Class template <code>unique_future</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Associated asynchronous state</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.6.5</entry>
- <entry>Class template <code>shared_future</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Class template <code>promise</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>allocator_arg_t</code> and set_*_at_thread_exit</entry>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.6.6</entry>
- <entry>Class template <code>promise</code></entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Class template <code>future</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing future_status</entry>
</row>
<row>
- <?dbhtml bgcolor="#C8B0B0" ?>
+ <?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.6.7</entry>
- <entry>Allocator templates</entry>
- <entry>N</entry>
- <entry></entry>
+ <entry>Class template <code>shared_future</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing future_status</entry>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>30.6.8</entry>
- <entry>Class template <code>packaged_task</code></entry>
+ <entry>Class template <code>atomic_future</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
+ </row>
+ <row>
+ <entry>30.6.9</entry>
+ <entry>Function template <code>async</code></entry>
+ <entry>Y</entry>
+ <entry/>
+ </row>
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>30.6.10</entry>
+ <entry>Class template <code>packaged_task</code></entry>
+ <entry>Partial</entry>
+ <entry>Missing <code>allocator_arg_t</code> and make_ready_at_thread_exit</entry>
</row>
<row>
<entry>
@@ -2476,63 +2436,63 @@ particular release.
</row>
<row>
<entry>D.1</entry>
- <entry>Increment operator with bool operand</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Increment operator with <code>bool</code> operand</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.2</entry>
<entry><code>static</code> keyword</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.3</entry>
<entry>Access declarations</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.4</entry>
- <entry>Implicit conversion from const strings</entry>
- <entry></entry>
- <entry></entry>
+ <entry><code>register</code> keyword</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.5</entry>
- <entry>C standard library headers</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Dynamic exception specifications</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.6</entry>
- <entry>Old iostreams members</entry>
- <entry></entry>
- <entry></entry>
+ <entry>C standard library headers</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.7</entry>
- <entry>char* streams</entry>
- <entry></entry>
- <entry></entry>
+ <entry>Old iostreams members</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.8</entry>
- <entry>Binders</entry>
- <entry></entry>
- <entry></entry>
+ <entry>char* streams</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.9</entry>
- <entry><code>auto_ptr</code></entry>
- <entry></entry>
- <entry></entry>
+ <entry>Binders</entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>D.10</entry>
- <entry>Iterator primitives</entry>
- <entry></entry>
- <entry></entry>
+ <entry><code>auto_ptr</code></entry>
+ <entry/>
+ <entry/>
</row>
</tbody>
@@ -2540,4 +2500,4 @@ particular release.
</table>
-</sect2>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml b/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
index 4d3650167e6..321c4ba269c 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
@@ -1,7 +1,8 @@
-<sect2 id="status.iso.tr1" xreflabel="Status C++ TR1">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.tr1" xreflabel="Status C++ TR1">
<?dbhtml filename="status_iso_cxxtr1.html"?>
-<sect2info>
+<info><title>C++ TR1</title>
<keywordset>
<keyword>
ISO C++
@@ -10,9 +11,7 @@
tr1
</keyword>
</keywordset>
-</sect2info>
-
-<title>C++ TR1</title>
+</info>
<para>
This table is based on the table of contents of ISO/IEC DTR 19768
@@ -40,13 +39,14 @@ release.
Broken/Partial
<?dbhtml bgcolor="#B0B0B0" ?>
-->
-<table frame='all'>
+<table frame="all">
<title>C++ TR1 Implementation Status</title>
-<tgroup cols='4' align='left' colsep='0' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="0" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
@@ -64,77 +64,77 @@ release.
<row>
<entry>2.1</entry>
<entry>Reference wrappers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>2.1.1</entry>
<entry>Additions to header <code>&lt;functional&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.1.2</entry>
<entry>Class template <code>reference_wrapper</code></entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>2.1.2.1</entry>
<entry><code>reference_wrapper</code> construct/copy/destroy</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.1.2.2</entry>
<entry><code>reference_wrapper</code> assignment</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.1.2.3</entry>
<entry><code>reference_wrapper</code> access</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.1.2.4</entry>
<entry><code>reference_wrapper</code> invocation</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.1.2.5</entry>
<entry><code>reference_wrapper</code> helper functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2</entry>
<entry>Smart pointers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>2.2.1</entry>
<entry>Additions to header <code>&lt;memory&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.2</entry>
<entry>Class <code>bad_weak_ptr</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3</entry>
<entry>Class template <code>shared_ptr</code></entry>
- <entry></entry>
+ <entry/>
<entry>
<para>
Uses code from
- <ulink url="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</link>.
</para>
</entry>
</row>
@@ -142,115 +142,115 @@ release.
<entry>2.2.3.1</entry>
<entry><code>shared_ptr</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.2</entry>
<entry><code>shared_ptr</code> destructor</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.3</entry>
<entry><code>shared_ptr</code> assignment</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.4</entry>
<entry><code>shared_ptr</code> modifiers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.5</entry>
<entry><code>shared_ptr</code> observers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.6</entry>
<entry><code>shared_ptr</code> comparison</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.7</entry>
<entry><code>shared_ptr</code> I/O</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.8</entry>
<entry><code>shared_ptr</code> specialized algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.9</entry>
<entry><code>shared_ptr</code> casts</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.3.10</entry>
<entry><code>get_deleter</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4</entry>
<entry>Class template <code>weak_ptr</code></entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>2.2.4.1</entry>
<entry><code>weak_ptr</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.2</entry>
<entry><code>weak_ptr</code> destructor</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.3</entry>
<entry><code>weak_ptr</code> assignment</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.4</entry>
<entry><code>weak_ptr</code> modifiers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.5</entry>
<entry><code>weak_ptr</code> observers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.6</entry>
<entry><code>weak_ptr</code> comparison</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.4.7</entry>
<entry><code>weak_ptr</code> specialized algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>2.2.5</entry>
<entry>Class template <code>enable_shared_from_this</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>3</emphasis></entry>
@@ -260,133 +260,133 @@ release.
<entry>3.1</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.2</entry>
<entry>Additions to <code>&lt;functional&gt; synopsis</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.3</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4</entry>
<entry>Function return types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.5</entry>
<entry>Function template <code>mem_fn</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.6</entry>
<entry>Function object binders</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>3.6.1</entry>
<entry>Class template <code>is_bind_expression</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.6.2</entry>
<entry>Class template <code>is_placeholder</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.6.3</entry>
<entry>Function template <code>bind</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.6.4</entry>
<entry>Placeholders</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7</entry>
<entry>Polymorphic function wrappers</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>3.7.1</entry>
- <entry>Class <code>bad_function_call<code></code></code></entry>
+ <entry>Class <code>bad_function_call</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.1.1</entry>
<entry><code>bad_function_call</code> constructor</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2</entry>
<entry>Class template <code>function</code></entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>3.7.2.1</entry>
<entry><code>function</code> construct/copy/destroy</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.2</entry>
<entry><code>function</code> modifiers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.3</entry>
<entry><code>function</code> capacity</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.4</entry>
<entry><code>function</code> invocation</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.5</entry>
<entry><code>function</code> target access</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.6</entry>
<entry>undefined operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.7</entry>
<entry>null pointer comparison operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.7.2.8</entry>
<entry>specialized algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>4</emphasis></entry>
@@ -396,97 +396,97 @@ release.
<entry>4.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.2</entry>
<entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.3</entry>
<entry>Helper classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.4</entry>
<entry>General Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.5</entry>
<entry>Unary Type Traits</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>4.5.1</entry>
<entry>Primary Type Categories</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.5.2</entry>
<entry>Composite type traits</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.5.3</entry>
<entry>Type properties</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.6</entry>
<entry>Relationships between types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.7</entry>
<entry>Transformations between types</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>4.7.1</entry>
<entry>Const-volatile modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.7.2</entry>
<entry>Reference modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.7.3</entry>
<entry>Array modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.7.4</entry>
<entry>Pointer modifications</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.8</entry>
<entry>Other transformations</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>4.9</entry>
<entry>Implementation requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>5</emphasis></entry>
@@ -495,62 +495,62 @@ release.
<row>
<entry>5.1</entry>
<entry>Random number generation</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>5.1.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.2</entry>
<entry>Header <code>&lt;random&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.3</entry>
<entry>Class template <code>variate_generator</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4</entry>
<entry>Random number engine class templates</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.1</entry>
<entry>Class template <code>linear_congruential</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.2</entry>
<entry>Class template <code>mersenne_twister</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.3</entry>
<entry>Class template <code>subtract_with_carry</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.4</entry>
<entry>Class template <code>subtract_with_carry_01</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.5</entry>
<entry>Class template <code>discard_block</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.4.6</entry>
@@ -562,229 +562,229 @@ release.
<entry>5.1.5</entry>
<entry>Engines with predefined parameters</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.6</entry>
<entry>Class <code>random_device</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7</entry>
<entry>Random distribution class templates</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.1</entry>
<entry>Class template <code>uniform_int</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.2</entry>
<entry>Class <code>bernoulli_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.3</entry>
<entry>Class template <code>geometric_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.4</entry>
<entry>Class template <code>poisson_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.5</entry>
<entry>Class template <code>binomial_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.6</entry>
<entry>Class template <code>uniform_real</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.7</entry>
<entry>Class template <code>exponential_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.8</entry>
<entry>Class template <code>normal_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.1.7.9</entry>
<entry>Class template <code>gamma_distribution</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2</entry>
<entry>Mathematical special functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1</entry>
<entry>Additions to header <code>&lt;cmath&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.1</entry>
<entry>associated Laguerre polynomials</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.2</entry>
<entry>associated Legendre functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.3</entry>
<entry>beta function</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.4</entry>
<entry>(complete) elliptic integral of the first kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.5</entry>
<entry>(complete) elliptic integral of the second kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.6</entry>
<entry>(complete) elliptic integral of the third kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.7</entry>
<entry>confluent hypergeometric functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.8</entry>
<entry>regular modified cylindrical Bessel functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.9</entry>
<entry>cylindrical Bessel functions (of the first kind)</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.10</entry>
<entry>irregular modified cylindrical Bessel functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.11</entry>
<entry>cylindrical Neumann functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.12</entry>
<entry>(incomplete) elliptic integral of the first kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.13</entry>
<entry>(incomplete) elliptic integral of the second kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.14</entry>
<entry>(incomplete) elliptic integral of the third kind</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.15</entry>
<entry>exponential integral</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.16</entry>
<entry>Hermite polynomials</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.17</entry>
<entry>hypergeometric functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.18</entry>
<entry>Laguerre polynomials</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.19</entry>
<entry>Legendre polynomials</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.20</entry>
<entry>Riemann zeta function</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.21</entry>
<entry>spherical Bessel functions (of the first kind)</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.22</entry>
<entry>spherical associated Legendre functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.1.23</entry>
<entry>spherical Neumann functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>5.2.2</entry>
<entry>Additions to header <code>&lt;math.h&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>6</emphasis></entry>
@@ -794,236 +794,236 @@ release.
<entry>6.1</entry>
<entry>Tuple types</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.1</entry>
<entry>Header <code>&lt;tuple&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.2</entry>
<entry>Additions to header <code>&lt;utility&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3</entry>
<entry>Class template <code>tuple</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3.1</entry>
<entry>Construction</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3.2</entry>
<entry>Tuple creation functions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3.3</entry>
<entry>Tuple helper classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3.4</entry>
<entry>Element access</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.3.5</entry>
<entry>Relational operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.1.4</entry>
<entry>Pairs</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2</entry>
<entry>Fixed size array</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.1</entry>
<entry>Header <code>&lt;array&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2</entry>
<entry>Class template <code>array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2.1</entry>
<entry><code>array</code> constructors, copy, and assignment</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2.2</entry>
<entry><code>array</code> specialized algorithms</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2.3</entry>
<entry><code>array</code> size</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2.4</entry>
<entry>Zero sized <code>array</code>s</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.2.2.5</entry>
<entry>Tuple interface to class template <code>array</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3</entry>
<entry>Unordered associative containers</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.1</entry>
<entry>Unordered associative container requirements</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.1.1</entry>
<entry>Exception safety guarantees</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.2</entry>
<entry>Additions to header <code>&lt;functional&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.3</entry>
<entry>Class template <code>hash</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4</entry>
<entry>Unordered associative container classes</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.1</entry>
<entry>Header <code>&lt;unordered_set&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.2</entry>
<entry>Header <code>&lt;unordered_map&gt;</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.3</entry>
<entry>Class template <code>unordered_set</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.3.1</entry>
<entry><code>unordered_set</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.3.2</entry>
<entry><code>unordered_set</code> swap</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.4</entry>
<entry>Class template <code>unordered_map</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.4.1</entry>
<entry><code>unordered_map</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.4.2</entry>
<entry><code>unordered_map</code> element access</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.4.3</entry>
<entry><code>unordered_map</code> swap</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.5</entry>
- <entry>Class template <code>unordered_multiset<code></code></code></entry>
+ <entry>Class template <code>unordered_multiset</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.5.1</entry>
<entry><code>unordered_multiset</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.5.2</entry>
<entry><code>unordered_multiset</code> swap</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.6</entry>
<entry>Class template <code>unordered_multimap</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.6.1</entry>
<entry><code>unordered_multimap</code> constructors</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>6.3.4.6.2</entry>
<entry><code>unordered_multimap</code> swap</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>7</emphasis></entry>
@@ -1034,322 +1034,322 @@ release.
<entry>7.1</entry>
<entry>Definitions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.2</entry>
<entry>Requirements</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.3</entry>
<entry>Regular expressions summary</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.4</entry>
<entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.5</entry>
<entry>Namespace <code>tr1::regex_constants</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.5.1</entry>
<entry>Bitmask Type <code>syntax_option_type</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.5.2</entry>
<entry>Bitmask Type <code>regex_constants::match_flag_type</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.5.3</entry>
<entry>Implementation defined <code>error_type</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.6</entry>
<entry>Class <code>regex_error</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.7</entry>
<entry>Class template <code>regex_traits</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8</entry>
<entry>Class template <code>basic_regex</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.1</entry>
<entry><code>basic_regex</code> constants</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.2</entry>
<entry><code>basic_regex</code> constructors</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.3</entry>
<entry><code>basic_regex</code> assign</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.4</entry>
<entry><code>basic_regex</code> constant operations</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.5</entry>
<entry><code>basic_regex</code> locale</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.6</entry>
<entry><code>basic_regex</code> swap</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.7</entry>
<entry><code>basic_regex</code> non-member functions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.8.7.1</entry>
<entry><code>basic_regex</code> non-member swap</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.9</entry>
<entry>Class template <code>sub_match</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.9.1</entry>
<entry><code>sub_match</code> members</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.9.2</entry>
<entry><code>sub_match</code> non-member operators</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10</entry>
<entry>Class template <code>match_results</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.1</entry>
<entry><code>match_results</code> constructors</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.2</entry>
<entry><code>match_results</code> size</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.3</entry>
<entry><code>match_results</code> element access</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.4</entry>
<entry><code>match_results</code> formatting</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.5</entry>
<entry><code>match_results</code> allocator</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.10.6</entry>
<entry><code>match_results</code> swap</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.11</entry>
<entry>Regular expression algorithms</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.11.1</entry>
<entry>exceptions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.11.2</entry>
<entry><code>regex_match</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.11.3</entry>
<entry><code>regex_search</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.11.4</entry>
<entry><code>regex_replace</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12</entry>
<entry>Regular expression Iterators</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.1</entry>
<entry>Class template <code>regex_iterator</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.1.1</entry>
<entry><code>regex_iterator</code> constructors</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.1.2</entry>
<entry><code>regex_iterator</code> comparisons</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.1.3</entry>
<entry><code>regex_iterator</code> dereference</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.1.4</entry>
<entry><code>regex_iterator</code> increment</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.2</entry>
<entry>Class template <code>regex_token_iterator</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.2.1</entry>
<entry><code>regex_token_iterator</code> constructors</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.2.2</entry>
<entry><code>regex_token_iterator</code> comparisons</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.2.3</entry>
<entry><code>regex_token_iterator</code> dereference</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.12.2.4</entry>
<entry><code>regex_token_iterator</code> increment</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>7.13</entry>
<entry>Modified ECMAScript regular expression grammar</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry><emphasis>8</emphasis></entry>
@@ -1359,61 +1359,61 @@ release.
<entry>8.1</entry>
<entry>Additions to header <code>&lt;complex&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.2</entry>
<entry>Function <code>acos</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.3</entry>
<entry>Function <code>asin</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.4</entry>
<entry>Function <code>atan</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.5</entry>
<entry>Function <code>acosh</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.6</entry>
<entry>Function <code>asinh</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.7</entry>
<entry>Function <code>atanh</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.8</entry>
<entry>Function <code>fabs</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.1.9</entry>
<entry>Additional Overloads</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
@@ -1433,88 +1433,88 @@ release.
<entry>8.4</entry>
<entry>Additions to header <code>&lt;cctype&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.4.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.4.2</entry>
<entry>Function <code>isblank</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.5</entry>
<entry>Additions to header <code>&lt;ctype.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.6</entry>
<entry>Header <code>&lt;cfenv&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.6.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.6.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.7</entry>
<entry>Header <code>&lt;fenv.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.8</entry>
<entry>Additions to header <code>&lt;cfloat&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.9</entry>
<entry>Additions to header <code>&lt;float.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>8.10</entry>
<entry>Additions to header <code>&lt;ios&gt;</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>8.10.1</entry>
<entry>Synopsis</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>8.10.2</entry>
<entry>Function <code>hexfloat</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.11</entry>
<entry>Header <code>&lt;cinttypes&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.11.1</entry>
@@ -1526,56 +1526,56 @@ release.
<entry>8.11.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.12</entry>
<entry>Header <code>&lt;inttypes.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.13</entry>
<entry>Additions to header <code>&lt;climits&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.14</entry>
<entry>Additions to header <code>&lt;limits.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>8.15</entry>
<entry>Additions to header <code>&lt;locale&gt;</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.16</entry>
<entry>Additions to header <code>&lt;cmath&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.16.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.16.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.16.3</entry>
<entry>Function template definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.16.4</entry>
@@ -1587,73 +1587,73 @@ release.
<entry>8.17</entry>
<entry>Additions to header <code>&lt;math.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.18</entry>
<entry>Additions to header <code>&lt;cstdarg&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.19</entry>
<entry>Additions to header <code>&lt;stdarg.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.20</entry>
<entry>The header <code>&lt;cstdbool&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.21</entry>
<entry>The header <code>&lt;stdbool.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.22</entry>
<entry>The header <code>&lt;cstdint&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.22.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.22.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.23</entry>
<entry>The header <code>&lt;stdint.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.24</entry>
<entry>Additions to header <code>&lt;cstdio&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.24.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.24.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.24.3</entry>
@@ -1665,43 +1665,43 @@ release.
<entry>8.24.4</entry>
<entry>Additions to header <code>&lt;stdio.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.25</entry>
<entry>Additions to header <code>&lt;cstdlib&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.25.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.25.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.25.3</entry>
<entry>Function <code>abs</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.25.4</entry>
<entry>Function <code>div</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.26</entry>
<entry>Additions to header <code>&lt;stdlib.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.27</entry>
@@ -1725,19 +1725,19 @@ release.
<entry>8.30</entry>
<entry>Additions to header <code>&lt;cwchar&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.30.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.30.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.30.3</entry>
@@ -1749,34 +1749,34 @@ release.
<entry>8.31</entry>
<entry>Additions to header <code>&lt;wchar.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.32</entry>
<entry>Additions to header <code>&lt;cwctype&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.32.1</entry>
<entry>Synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.32.2</entry>
<entry>Function <code>iswblank</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>8.33</entry>
<entry>Additions to header <code>&lt;wctype.h&gt;</code></entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
</tbody>
</tgroup>
</table>
-</sect2>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml b/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
index f3b29b9bf36..997e76be18f 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
@@ -1,15 +1,14 @@
-<sect2 id="status.iso.tr24733" xreflabel="Status C++ TR24733">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="status.iso.tr24733" xreflabel="Status C++ TR24733">
<?dbhtml filename="status_iso_cxxtr24733.html"?>
-<sect2info>
+<info><title>C++ TR 24733</title>
<keywordset>
<keyword>
TR 24733
</keyword>
</keywordset>
-</sect2info>
-
-<title>C++ TR 24733</title>
+</info>
<para>
This table is based on the table of contents of
@@ -32,13 +31,14 @@ particular release.
Broken/Partial
<?dbhtml bgcolor="#B0B0B0" ?>
-->
-<table frame='all'>
+<table frame="all">
<title>C++ TR 24733 Implementation Status</title>
-<tgroup cols='4' align='left' colsep='0' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="0" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<thead>
<row>
<entry>Section</entry>
@@ -88,14 +88,14 @@ particular release.
<row>
<entry>3.1</entry>
<entry>Characteristics of decimal floating-point types</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>3.2</entry>
<entry>Decimal Types</entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
@@ -129,157 +129,157 @@ particular release.
<entry>3.2.5</entry>
<entry>Initialization from coefficient and exponent</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.2.6</entry>
<entry>Conversion to generic floating-point type</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.2.7</entry>
<entry>Unary arithmetic operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.2.8</entry>
<entry>Binary arithmetic operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.2.9</entry>
<entry>Comparison operators</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.2.10</entry>
<entry>Formatted input</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.2.11</entry>
<entry>Formatted output</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.3</entry>
<entry>Additions to header <code>limits</code></entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4</entry>
<entry>Headers <code>cfloat</code> and <code>float.h</code></entry>
- <entry></entry>
- <entry></entry>
+ <entry/>
+ <entry/>
</row>
<row>
<entry>3.4.2</entry>
<entry>Additions to header <code>cfloat</code> synopsis</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>3.4.3</entry>
<entry>Additions to header <code>float.h</code> synopsis</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4.4</entry>
<entry>Maximum finite value</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4.5</entry>
<entry>Epsilon</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4.6</entry>
<entry>Minimum positive normal value</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4.7</entry>
<entry>Minimum positive subnormal value</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<entry>3.4.8</entry>
<entry>Evaluation format</entry>
<entry>Y</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.5</entry>
<entry>Additions to <code>cfenv</code> and <code>fenv.h</code></entry>
<entry>Outside the scope of GCC</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.6</entry>
<entry>Additions to <code>cmath</code> and <code>math.h</code></entry>
<entry>Outside the scope of GCC</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.7</entry>
<entry>Additions to <code>cstdio</code> and <code>stdio.h</code></entry>
<entry>Outside the scope of GCC</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.8</entry>
<entry>Additions to <code>cstdlib</code> and <code>stdlib.h</code></entry>
<entry>Outside the scope of GCC</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.9</entry>
<entry>Additions to <code>cwchar</code> and <code>wchar.h</code></entry>
<entry>Outside the scope of GCC</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.10</entry>
<entry>Facets</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.11</entry>
<entry>Type traits</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>3.12</entry>
<entry>Hash functions</entry>
<entry>N</entry>
- <entry></entry>
+ <entry/>
</row>
<row>
@@ -296,4 +296,4 @@ particular release.
</table>
-</sect2>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/strings.xml b/libstdc++-v3/doc/xml/manual/strings.xml
index 412484e8ef2..4d9fc64f766 100644
--- a/libstdc++-v3/doc/xml/manual/strings.xml
+++ b/libstdc++-v3/doc/xml/manual/strings.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.strings" xreflabel="Strings">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.strings" xreflabel="Strings">
<?dbhtml filename="strings.html"?>
-<chapterinfo>
+<info><title>
+ Strings
+ <indexterm><primary>Strings</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,25 +14,20 @@
library
</keyword>
</keywordset>
-</chapterinfo>
-
-<title>
- Strings
- <indexterm><primary>Strings</primary></indexterm>
-</title>
+</info>
<!-- Sect1 01 : Character Traits -->
<!-- Sect1 02 : String Classes -->
-<sect1 id="std.strings.string" xreflabel="string">
- <title>String Classes</title>
+<section xml:id="std.strings.string" xreflabel="string"><info><title>String Classes</title></info>
+
- <sect2 id="strings.string.simple" xreflabel="Simple Transformations">
- <title>Simple Transformations</title>
+ <section xml:id="strings.string.simple" xreflabel="Simple Transformations"><info><title>Simple Transformations</title></info>
+
<para>
Here are Standard, simple, and portable ways to perform common
transformations on a <code>string</code> instance, such as
- &quot;convert to all upper case.&quot; The word transformations
+ "convert to all upper case." The word transformations
is especially apt, because the standard template function
<code>transform&lt;&gt;</code> is used.
</para>
@@ -90,8 +84,8 @@
are overloaded names (declared in <code>&lt;cctype&gt;</code> and
<code>&lt;locale&gt;</code>) so the template-arguments for
<code>transform&lt;&gt;</code> cannot be deduced, as explained in
- <ulink url="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html">this
- message</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-11/msg00180.html">this
+ message</link>.
<!-- section 14.8.2.4 clause 16 in ISO 14882:1998 -->
At minimum, you can write short wrappers like
</para>
@@ -122,14 +116,14 @@
optimize named temporaries out of existence.
</para>
- </sect2>
- <sect2 id="strings.string.case" xreflabel="Case Sensitivity">
- <title>Case Sensitivity</title>
+ </section>
+ <section xml:id="strings.string.case" xreflabel="Case Sensitivity"><info><title>Case Sensitivity</title></info>
+
<para>
</para>
<para>The well-known-and-if-it-isn't-well-known-it-ought-to-be
- <ulink url="http://www.gotw.ca/gotw/">Guru of the Week</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gotw.ca/gotw/">Guru of the Week</link>
discussions held on Usenet covered this topic in January of 1998.
Briefly, the challenge was, <quote>write a 'ci_string' class which
is identical to the standard 'string' class, but is
@@ -149,34 +143,33 @@
<para>The solution is surprisingly easy. The original answer was
posted on Usenet, and a revised version appears in Herb Sutter's
- book <emphasis>Exceptional C++</emphasis> and on his website as <ulink url="http://www.gotw.ca/gotw/029.htm">GotW 29</ulink>.
+ book <emphasis>Exceptional C++</emphasis> and on his website as <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gotw.ca/gotw/029.htm">GotW 29</link>.
</para>
<para>See? Told you it was easy!</para>
<para>
<emphasis>Added June 2000:</emphasis> The May 2000 issue of C++
- Report contains a fascinating <ulink
- url="http://lafstern.org/matt/col2_new.pdf"> article</ulink> by
+ Report contains a fascinating <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://lafstern.org/matt/col2_new.pdf"> article</link> by
Matt Austern (yes, <emphasis>the</emphasis> Matt Austern) on why
case-insensitive comparisons are not as easy as they seem, and
why creating a class is the <emphasis>wrong</emphasis> way to go
about it in production code. (The GotW answer mentions one of
the principle difficulties; his article mentions more.)
</para>
- <para>Basically, this is &quot;easy&quot; only if you ignore some things,
+ <para>Basically, this is "easy" only if you ignore some things,
things which may be too important to your program to ignore. (I chose
to ignore them when originally writing this entry, and am surprised
that nobody ever called me on it...) The GotW question and answer
remain useful instructional tools, however.
</para>
<para><emphasis>Added September 2000:</emphasis> James Kanze provided a link to a
- <ulink url="http://www.unicode.org/reports/tr21/tr21-5.html">Unicode
- Technical Report discussing case handling</ulink>, which provides some
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.unicode.org/reports/tr21/tr21-5.html">Unicode
+ Technical Report discussing case handling</link>, which provides some
very good information.
</para>
- </sect2>
- <sect2 id="strings.string.character_types" xreflabel="Arbitrary Characters">
- <title>Arbitrary Character Types</title>
+ </section>
+ <section xml:id="strings.string.character_types" xreflabel="Arbitrary Characters"><info><title>Arbitrary Character Types</title></info>
+
<para>
</para>
@@ -231,24 +224,24 @@
built-in types.
</para>
<para>If you want to use your own special character class, then you have
- <ulink url="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
- of work to do</ulink>, especially if you with to use i18n features
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
+ of work to do</link>, especially if you with to use i18n features
(facets require traits information but don't have a traits argument).
</para>
- <para>Another example of how to specialize char_traits was given <ulink url="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">on the
- mailing list</ulink> and at a later date was put into the file <code>
+ <para>Another example of how to specialize char_traits was given <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">on the
+ mailing list</link> and at a later date was put into the file <code>
include/ext/pod_char_traits.h</code>. We agree
that the way it's used with basic_string (scroll down to main())
- doesn't look nice, but that's because <ulink url="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
- nice-looking first attempt</ulink> turned out to <ulink url="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
- be conforming C++</ulink>, due to the rule that CharT must be a POD.
+ doesn't look nice, but that's because <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
+ nice-looking first attempt</link> turned out to <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
+ be conforming C++</link>, due to the rule that CharT must be a POD.
(See how tricky this is?)
</para>
- </sect2>
+ </section>
- <sect2 id="strings.string.token" xreflabel="Tokenizing">
- <title>Tokenizing</title>
+ <section xml:id="strings.string.token" xreflabel="Tokenizing"><info><title>Tokenizing</title></info>
+
<para>
</para>
<para>The Standard C (and C++) function <code>strtok()</code> leaves a lot to
@@ -256,7 +249,7 @@
destroys the character string on which it operates, and it requires
you to handle all the memory problems. But it does let the client
code decide what to use to break the string into pieces; it allows
- you to choose the &quot;whitespace,&quot; so to speak.
+ you to choose the "whitespace," so to speak.
</para>
<para>A C++ implementation lets us keep the good things and fix those
annoyances. The implementation here is more intuitive (you only
@@ -345,9 +338,9 @@ stringtok(Container &amp;container, string const &amp;in,
</para>
- </sect2>
- <sect2 id="strings.string.shrink" xreflabel="Shrink to Fit">
- <title>Shrink to Fit</title>
+ </section>
+ <section xml:id="strings.string.shrink" xreflabel="Shrink to Fit"><info><title>Shrink to Fit</title></info>
+
<para>
</para>
<para>From GCC 3.4 calling <code>s.reserve(res)</code> on a
@@ -366,12 +359,16 @@ stringtok(Container &amp;container, string const &amp;in,
entry</link>) but the regular copy constructor cannot be used
because libstdc++'s <code>string</code> is Copy-On-Write.
</para>
+ <para>In <link linkend="status.iso.200x">C++0x</link> mode you can call
+ <code>s.shrink_to_fit()</code> to achieve the same effect as
+ <code>s.reserve(s.size())</code>.
+ </para>
- </sect2>
+ </section>
- <sect2 id="strings.string.Cstring" xreflabel="CString (MFC)">
- <title>CString (MFC)</title>
+ <section xml:id="strings.string.Cstring" xreflabel="CString (MFC)"><info><title>CString (MFC)</title></info>
+
<para>
</para>
@@ -383,8 +380,8 @@ stringtok(Container &amp;container, string const &amp;in,
are relying on special functions offered by the CString class.
</para>
<para>Things are not as bad as they seem. In
- <ulink url="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html">this
- message</ulink>, Joe Buck points out a few very important things:
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html">this
+ message</link>, Joe Buck points out a few very important things:
</para>
<itemizedlist>
<listitem><para>The Standard <code>string</code> supports all the operations
@@ -481,8 +478,8 @@ stringtok(Container &amp;container, string const &amp;in,
</para></listitem>
</itemizedlist>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Sect1 03 : Interacting with C -->
diff --git a/libstdc++-v3/doc/xml/manual/support.xml b/libstdc++-v3/doc/xml/manual/support.xml
index 20b5b726eed..2cb7205bd44 100644
--- a/libstdc++-v3/doc/xml/manual/support.xml
+++ b/libstdc++-v3/doc/xml/manual/support.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.support" xreflabel="Support">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.support" xreflabel="Support">
<?dbhtml filename="support.html"?>
-<chapterinfo>
+<info><title>
+ Support
+ <indexterm><primary>Support</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,12 +14,7 @@
library
</keyword>
</keywordset>
-</chapterinfo>
-
-<title>
- Support
- <indexterm><primary>Support</primary></indexterm>
-</title>
+</info>
<para>
This part deals with the functions called and objects created
@@ -34,11 +28,11 @@
kind of support a C++ program gets from the Standard Library.
</para>
-<sect1 id="std.support.types" xreflabel="Types">
+<section xml:id="std.support.types" xreflabel="Types"><info><title>Types</title></info>
<?dbhtml filename="fundamental_types.html"?>
- <title>Types</title>
- <sect2 id="std.support.types.fundamental" xreflabel="Fundamental Types">
- <title>Fundamental Types</title>
+
+ <section xml:id="std.support.types.fundamental" xreflabel="Fundamental Types"><info><title>Fundamental Types</title></info>
+
<para>
C++ has the following builtin types:
</para>
@@ -98,9 +92,9 @@
instead, use a POD.
</para>
- </sect2>
- <sect2 id="std.support.types.numeric_limits" xreflabel="Numeric Properties">
- <title>Numeric Properties</title>
+ </section>
+ <section xml:id="std.support.types.numeric_limits" xreflabel="Numeric Properties"><info><title>Numeric Properties</title></info>
+
<para>
@@ -108,8 +102,7 @@
traits classes to give access to various implementation
defined-aspects of the fundamental types. The traits classes --
fourteen in total -- are all specializations of the template class
- <classname>numeric_limits</classname>, documented <ulink
- url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html">here</ulink>
+ <classname>numeric_limits</classname>, documented <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00593.html">here</link>
and defined as follows:
</para>
@@ -153,10 +146,10 @@
static const float_round_style round_style;
};
</programlisting>
- </sect2>
+ </section>
- <sect2 id="std.support.types.null" xreflabel="NULL">
- <title>NULL</title>
+ <section xml:id="std.support.types.null" xreflabel="NULL"><info><title>NULL</title></info>
+
<para>
The only change that might affect people is the type of
<constant>NULL</constant>: while it is required to be a macro,
@@ -166,7 +159,7 @@
<para>
For <command>g++</command>, <constant>NULL</constant> is
- <programlisting>#define</programlisting>'d to be
+ <code>#define</code>'d to be
<constant>__null</constant>, a magic keyword extension of
<command>g++</command>.
</para>
@@ -180,25 +173,24 @@
<constant>NULL</constant> is always a pointer.)
</para>
- <para>In his book <ulink
- url="http://www.awprofessional.com/titles/0-201-92488-9/"><emphasis>Effective
- C++</emphasis></ulink>, Scott Meyers points out that the best way
+ <para>In his book <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-92488-9/"><emphasis>Effective
+ C++</emphasis></link>, Scott Meyers points out that the best way
to solve this problem is to not overload on pointer-vs-integer
types to begin with. He also offers a way to make your own magic
<constant>NULL</constant> that will match pointers before it
matches integers.
</para>
<para>See
- <ulink url="http://www.awprofessional.com/titles/0-201-31015-5/">the
- Effective C++ CD example</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-31015-5/">the
+ Effective C++ CD example</link>
</para>
- </sect2>
+ </section>
-</sect1>
+</section>
-<sect1 id="std.support.memory" xreflabel="Dynamic Memory">
+<section xml:id="std.support.memory" xreflabel="Dynamic Memory"><info><title>Dynamic Memory</title></info>
<?dbhtml filename="dynamic_memory.html"?>
- <title>Dynamic Memory</title>
+
<para>
There are six flavors each of <function>new</function> and
<function>delete</function>, so make certain that you're using the right
@@ -211,7 +203,7 @@
people are used to using
</para></listitem>
<listitem><para>
- Single object &quot;nothrow&quot; form, returning NULL on errors
+ Single object "nothrow" form, returning NULL on errors
</para></listitem>
<listitem><para>
Array <function>new</function>, throwing
@@ -276,16 +268,15 @@
<classname>bad_alloc</classname> is derived from the base <classname>exception</classname>
class defined in Sect1 19.
</para>
-</sect1>
+</section>
-<sect1 id="std.support.termination" xreflabel="Termination">
+<section xml:id="std.support.termination" xreflabel="Termination"><info><title>Termination</title></info>
<?dbhtml filename="termination.html"?>
- <title>Termination</title>
- <sect2 id="support.termination.handlers" xreflabel="Termination Handlers">
- <title>Termination Handlers</title>
+
+ <section xml:id="support.termination.handlers" xreflabel="Termination Handlers"><info><title>Termination Handlers</title></info>
+
<para>
- Not many changes here to <filename
- class="headerfile">cstdlib</filename>. You should note that the
+ Not many changes here to <filename class="headerfile">cstdlib</filename>. You should note that the
<function>abort()</function> function does not call the
destructors of automatic nor static objects, so if you're
depending on those to do cleanup, it isn't going to happen.
@@ -298,7 +289,7 @@
funky, too, until you look closer. Basically, three points to
remember are:
</para>
- <orderedlist>
+ <orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Static objects are destroyed in reverse order of their creation.
@@ -342,11 +333,11 @@
those slots. If you think you may run out, we recommend using
the <function>xatexit</function>/<function>xexit</function> combination from <literal>libiberty</literal>, which has no such limit.
</para>
- </sect2>
+ </section>
- <sect2 id="support.termination.verbose" xreflabel="Verbose Terminate Handler">
+ <section xml:id="support.termination.verbose" xreflabel="Verbose Terminate Handler"><info><title>Verbose Terminate Handler</title></info>
<?dbhtml filename="verbose_termination.html"?>
- <title>Verbose Terminate Handler</title>
+
<para>
If you are having difficulty with uncaught exceptions and want a
little bit of help debugging the causes of the core dumps, you can
@@ -446,7 +437,7 @@ int main(int argc)
an unspecified manner.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/test.xml b/libstdc++-v3/doc/xml/manual/test.xml
index 6c0f266d349..006ff332086 100644
--- a/libstdc++-v3/doc/xml/manual/test.xml
+++ b/libstdc++-v3/doc/xml/manual/test.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.intro.setup.test" xreflabel="Testing">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.setup.test" xreflabel="Testing">
<?dbhtml filename="test.html"?>
-<sect1info>
+<info><title>Test</title>
<keywordset>
<keyword>
ISO C++
@@ -25,20 +26,18 @@
exception safety
</keyword>
</keywordset>
-</sect1info>
-
-<title>Test</title>
+</info>
<para>
The libstdc++ testsuite includes testing for standard conformance,
regressions, ABI, and performance.
</para>
-<sect2 id="test.organization" xreflabel="Test Organization">
-<title>Organization</title>
+<section xml:id="test.organization" xreflabel="Test Organization"><info><title>Organization</title></info>
+
+
+<section xml:id="test.organization.layout" xreflabel="Directory Layout"><info><title>Directory Layout</title></info>
-<sect3 id="test.organization.layout" xreflabel="Directory Layout">
-<title>Directory Layout</title>
<para>
The directory <emphasis>libsrcdir/testsuite</emphasis> contains the
@@ -131,11 +130,11 @@ util Files for libtestc++, utilities and testing routines.
All new tests should be written with the policy of one test
case, one file in mind.
</para>
-</sect3>
+</section>
+
+<section xml:id="test.organization.naming" xreflabel="Naming Conventions"><info><title>Naming Conventions</title></info>
-<sect3 id="test.organization.naming" xreflabel="Naming Conventions">
-<title>Naming Conventions</title>
<para>
In addition, there are some special names and suffixes that are
@@ -225,15 +224,15 @@ cat 27_io/objects/char/3_xin.in | a.out
</listitem>
</itemizedlist>
-</sect3>
-</sect2>
+</section>
+</section>
-<sect2 id="test.run" xreflabel="Running the Testsuite">
-<title>Running the Testsuite</title>
+<section xml:id="test.run" xreflabel="Running the Testsuite"><info><title>Running the Testsuite</title></info>
- <sect3 id="test.run.basic">
- <title>Basic</title>
+
+ <section xml:id="test.run.basic"><info><title>Basic</title></info>
+
<para>
You can check the status of the build without installing it
@@ -259,18 +258,16 @@ cat 27_io/objects/char/3_xin.in | a.out
<para>
Archives of test results for various versions and platforms are
- available on the GCC website in the <ulink
- url="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
- status</ulink> section of each individual release, and are also
- archived on a daily basis on the <ulink
- url="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults</ulink>
+ available on the GCC website in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/gcc-4.3/buildstat.html">build
+ status</link> section of each individual release, and are also
+ archived on a daily basis on the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc-testresults/current">gcc-testresults</link>
mailing list. Please check either of these places for a similar
combination of source version, operating system, and host CPU.
</para>
- </sect3>
+ </section>
- <sect3 id="test.run.variations">
- <title>Variations</title>
+ <section xml:id="test.run.variations"><info><title>Variations</title></info>
+
<para>
There are several options for running tests, including testing
the regression tests, testing a subset of the regression tests,
@@ -470,13 +467,12 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
please email the main libstdc++ mailing list if you see
something odd or have questions.
</para>
- </sect3>
+ </section>
- <sect3 id="test.run.permutations">
- <title>Permutations</title>
+ <section xml:id="test.run.permutations"><info><title>Permutations</title></info>
+
<para>
- To run the libstdc++ test suite under the <link
- linkend="manual.ext.debug_mode">debug mode</link>, edit
+ To run the libstdc++ test suite under the <link linkend="manual.ext.debug_mode">debug mode</link>, edit
<filename>libstdc++-v3/scripts/testsuite_flags</filename> to add the
compile-time flag <constant>-D_GLIBCXX_DEBUG</constant> to the
result printed by the <literal>--build-cxx</literal>
@@ -500,11 +496,11 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
set to <constant>-D_GLIBCXX_DEBUG</constant> or
<constant>-D_GLIBCXX_PARALLEL</constant>.
</para>
- </sect3>
-</sect2>
+ </section>
+</section>
+
+<section xml:id="test.new_tests"><info><title>Writing a new test case</title></info>
-<sect2 id="test.new_tests">
-<title>Writing a new test case</title>
<para>
The first step in making a new test case is to choose the correct
@@ -632,14 +628,14 @@ up in the normal.exp file.
<para>
More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
</para>
-</sect2>
+</section>
+
+<section xml:id="test.harness" xreflabel="Test Harness and Utilities"><info><title>Test Harness and Utilities</title></info>
-<sect2 id="test.harness" xreflabel="Test Harness and Utilities">
-<title>Test Harness and Utilities</title>
-<sect3 id="test.harness.dejagnu">
-<title>Dejagnu Harness Details</title>
+<section xml:id="test.harness.dejagnu"><info><title>Dejagnu Harness Details</title></info>
+
<para>
Underlying details of testing for conformance and regressions are
abstracted via the GNU Dejagnu package. This is similar to the
@@ -682,10 +678,10 @@ board" information unique to this library. This is currently unused and sets
only default variables.
</para>
-</sect3>
+</section>
+
+<section xml:id="test.harness.utils"><info><title>Utilities</title></info>
-<sect3 id="test.harness.utils">
-<title>Utilities</title>
<para>
</para>
<para>
@@ -800,24 +796,24 @@ only default variables.
</itemizedlist>
</listitem>
</itemizedlist>
-</sect3>
+</section>
-</sect2>
+</section>
-<sect2 id="test.special">
-<title>Special Topics</title>
+<section xml:id="test.special"><info><title>Special Topics</title></info>
-<sect3 id="test.exception.safety">
-<title>
+
+<section xml:id="test.exception.safety"><info><title>
Qualifying Exception Safety Guarantees
<indexterm>
<primary>Test</primary>
<secondary>Exception Safety</secondary>
</indexterm>
-</title>
+</title></info>
+
+
+<section xml:id="test.exception.safety.overview"><info><title>Overview</title></info>
-<sect4 id="test.exception.safety.overview">
-<title>Overview</title>
<para>
Testing is composed of running a particular test sequence,
@@ -856,13 +852,13 @@ only default variables.
potential error paths have been exercised in a sequential
manner.
</para>
-</sect4>
+</section>
-<sect4 id="test.exception.safety.status">
-<title>
+<section xml:id="test.exception.safety.status"><info><title>
Existing tests
-</title>
+</title></info>
+
<itemizedlist>
<listitem>
@@ -924,13 +920,13 @@ as the allocator type.
</para>
</listitem>
</itemizedlist>
-</sect4>
+</section>
-<sect4 id="test.exception.safety.containers">
-<title>
+<section xml:id="test.exception.safety.containers"><info><title>
C++0x Requirements Test Sequence Descriptions
-</title>
+</title></info>
+
<itemizedlist>
<listitem>
@@ -1030,10 +1026,10 @@ C++0x Requirements Test Sequence Descriptions
</listitem>
</itemizedlist>
-</sect4>
+</section>
-</sect3>
+</section>
-</sect2>
+</section>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index e4863c2e4dc..e3400a678c1 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -1,21 +1,15 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="manual.intro.using" xreflabel="Using">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using" xreflabel="Using">
+ <info><title>Using</title></info>
<?dbhtml filename="using.html"?>
-<title>Using</title>
-
-
- <sect1 id="manual.intro.using.flags" xreflabel="Flags">
- <title>Command Options</title>
+ <section xml:id="manual.intro.using.flags" xreflabel="Flags"><info><title>Command Options</title></info>
+
<para>
The set of features available in the GNU C++ library is shaped
by
- several <ulink url="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html">GCC
- Command Options</ulink>. Options that impact libstdc++ are
+ several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Invoking-GCC.html">GCC
+ Command Options</link>. Options that impact libstdc++ are
enumerated and detailed in the table below.
</para>
@@ -23,11 +17,12 @@
By default, <command>g++</command> is equivalent to <command>g++ -std=gnu++98</command>. The standard library also defaults to this dialect.
</para>
- <table frame='all'>
+ <table frame="all">
<title>C++ Command Options</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<thead>
<row>
@@ -82,19 +77,19 @@
</tgroup>
</table>
- </sect1>
+ </section>
- <sect1 id="manual.intro.using.headers" xreflabel="Headers">
+ <section xml:id="manual.intro.using.headers" xreflabel="Headers"><info><title>Headers</title></info>
<?dbhtml filename="using_headers.html"?>
- <title>Headers</title>
+
- <sect2 id="manual.intro.using.headers.all" xreflabel="Header Files">
- <title>Header Files</title>
+ <section xml:id="manual.intro.using.headers.all" xreflabel="Header Files"><info><title>Header Files</title></info>
+
<para>
The C++ standard specifies the entire set of header files that
must be available to all hosted implementations. Actually, the
- word &quot;files&quot; is a misnomer, since the contents of the
+ word "files" is a misnomer, since the contents of the
headers don't necessarily have to be in any kind of external
file. The only rule is that when one <code>#include</code>'s a
header, the contents of that header become available, no matter
@@ -121,14 +116,15 @@
C++98/03 include files. These are available in the default compilation mode, i.e. <code>-std=c++98</code> or <code>-std=gnu++98</code>.
</para>
-<table frame='all'>
+<table frame="all">
<title>C++ 1998 Library Headers</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
<entry><filename class="headerfile">algorithm</filename></entry>
@@ -180,15 +176,16 @@
</tgroup>
</table>
-<para></para>
-<table frame='all'>
+<para/>
+<table frame="all">
<title>C++ 1998 Library Headers for C Library Facilities</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
<entry><filename class="headerfile">cassert</filename></entry>
@@ -225,15 +222,16 @@ C++0x include files. These are only available in C++0x compilation
mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
</para>
-<para></para>
-<table frame='all'>
+<para/>
+<table frame="all">
<title>C++ 200x Library Headers</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -309,16 +307,17 @@ mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
</tgroup>
</table>
-<para></para>
+<para/>
-<table frame='all'>
+<table frame="all">
<title>C++ 200x Library Headers for C Library Facilities</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
<entry><filename class="headerfile">cassert</filename></entry>
@@ -368,14 +367,15 @@ mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
In addition, TR1 includes as:
</para>
-<table frame='all'>
+<table frame="all">
<title>C++ TR 1 Library Headers</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -400,17 +400,18 @@ mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
</tgroup>
</table>
-<para></para>
+<para/>
-<table frame='all'>
+<table frame="all">
<title>C++ TR 1 Library Headers for C Library Facilities</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -445,10 +446,11 @@ compiler supports scalar decimal floating-point types defined via
<code>__attribute__((mode(SD|DD|LD)))</code>.
</para>
-<table frame='all'>
+<table frame="all">
<title>C++ TR 24733 Decimal Floating-Point Header</title>
-<tgroup cols='1' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
+
+<tgroup cols="1" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
<tbody>
<row>
<entry><filename class="headerfile">decimal/decimal</filename></entry>
@@ -461,11 +463,12 @@ compiler supports scalar decimal floating-point types defined via
Also included are files for the C++ ABI interface:
</para>
-<table frame='all'>
+<table frame="all">
<title>C++ ABI Headers</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<tbody>
<row><entry><filename class="headerfile">cxxabi.h</filename></entry><entry><filename class="headerfile">cxxabi_forced.h</filename></entry></row>
</tbody>
@@ -476,14 +479,15 @@ compiler supports scalar decimal floating-point types defined via
And a large variety of extensions.
</para>
-<table frame='all'>
+<table frame="all">
<title>Extension Headers</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -536,16 +540,17 @@ compiler supports scalar decimal floating-point types defined via
</tgroup>
</table>
-<para></para>
+<para/>
-<table frame='all'>
+<table frame="all">
<title>Extension Debug Headers</title>
-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
-<colspec colname='c5'></colspec>
+
+<tgroup cols="5" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
+<colspec colname="c5"/>
<tbody>
<row>
@@ -567,15 +572,16 @@ compiler supports scalar decimal floating-point types defined via
</tgroup>
</table>
-<para></para>
+<para/>
-<table frame='all'>
+<table frame="all">
<title>Extension Profile Headers</title>
-<tgroup cols='4' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
-<colspec colname='c3'></colspec>
-<colspec colname='c4'></colspec>
+
+<tgroup cols="4" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
+<colspec colname="c3"/>
+<colspec colname="c4"/>
<tbody>
<row>
@@ -596,13 +602,14 @@ compiler supports scalar decimal floating-point types defined via
</tgroup>
</table>
-<para></para>
+<para/>
-<table frame='all'>
+<table frame="all">
<title>Extension Parallel Headers</title>
-<tgroup cols='2' align='left' colsep='1' rowsep='1'>
-<colspec colname='c1'></colspec>
-<colspec colname='c2'></colspec>
+
+<tgroup cols="2" align="left" colsep="1" rowsep="1">
+<colspec colname="c1"/>
+<colspec colname="c2"/>
<tbody>
<row>
<entry><filename class="headerfile">parallel/algorithm</filename></entry>
@@ -612,10 +619,10 @@ compiler supports scalar decimal floating-point types defined via
</tgroup>
</table>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.headers.mixing" xreflabel="Mixing Headers">
- <title>Mixing Headers</title>
+ <section xml:id="manual.intro.using.headers.mixing" xreflabel="Mixing Headers"><info><title>Mixing Headers</title></info>
+
<para> A few simple rules.
</para>
@@ -655,10 +662,10 @@ same translation unit:
<para> Several parts of C++0x diverge quite substantially from TR1 predecessors.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.headers.cheaders" xreflabel="C Headers and">
- <title>The C Headers and <code>namespace std</code></title>
+ <section xml:id="manual.intro.using.headers.cheaders" xreflabel="C Headers and"><info><title>The C Headers and <code>namespace std</code></title></info>
+
<para>
The standard specifies that if one includes the C-style header
@@ -682,10 +689,10 @@ used uniformly, instead of a combination
of <code>std::sinf</code>, <code>std::sin</code>,
and <code>std::sinl</code>.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.headers.pre" xreflabel="Precompiled Headers">
- <title>Precompiled Headers</title>
+ <section xml:id="manual.intro.using.headers.pre" xreflabel="Precompiled Headers"><info><title>Precompiled Headers</title></info>
+
<para>There are three base header files that are provided. They can be
@@ -754,18 +761,18 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
</programlisting>
<para>The exclamation point to the left of the <code>stdc++.h.gch</code> listing means that the generated PCH file was used, and thus the </para>
-<para></para>
+<para/>
-<para> Detailed information about creating precompiled header files can be found in the GCC <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html">documentation</ulink>.
+<para> Detailed information about creating precompiled header files can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html">documentation</link>.
</para>
- </sect2>
- </sect1>
+ </section>
+ </section>
- <sect1 id="manual.intro.using.macros" xreflabel="Macros">
+ <section xml:id="manual.intro.using.macros" xreflabel="Macros"><info><title>Macros</title></info>
<?dbhtml filename="using_macros.html"?>
- <title>Macros</title>
+
<para>
All library macros begin with <code>_GLIBCXX_</code>.
@@ -863,8 +870,7 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
<code>--enable-concept-checks</code>. When defined, performs
compile-time checking on certain template instantiations to
detect violations of the requirements of the standard. This
- is described in more detail <link
- linkend="manual.ext.compile_checks">here</link>.
+ is described in more detail <link linkend="manual.ext.compile_checks">here</link>.
</para>
</listitem></varlistentry>
@@ -901,14 +907,14 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
</listitem></varlistentry>
</variablelist>
- </sect1>
+ </section>
- <sect1 id="manual.intro.using.namespaces" xreflabel="Namespaces">
+ <section xml:id="manual.intro.using.namespaces" xreflabel="Namespaces"><info><title>Namespaces</title></info>
<?dbhtml filename="using_namespaces.html"?>
- <title>Namespaces</title>
+
- <sect2 id="manual.intro.using.namespaces.all" xreflabel="Available Namespaces">
- <title>Available Namespaces</title>
+ <section xml:id="manual.intro.using.namespaces.all" xreflabel="Available Namespaces"><info><title>Available Namespaces</title></info>
+
@@ -937,14 +943,14 @@ and <code>__gnu_pbds</code>.
</para></listitem>
</itemizedlist>
-<para> A complete list of implementation namespaces (including namespace contents) is available in the generated source <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</ulink>.
+<para> A complete list of implementation namespaces (including namespace contents) is available in the generated source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</link>.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.namespaces.std" xreflabel="namespace std">
- <title>namespace std</title>
+ <section xml:id="manual.intro.using.namespaces.std" xreflabel="namespace std"><info><title>namespace std</title></info>
+
<para>
@@ -967,10 +973,10 @@ cases where the qualified verbiage becomes unwieldy.)
</listitem>
</itemizedlist>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.namespaces.comp" xreflabel="Using Namespace Composition">
- <title>Using Namespace Composition</title>
+ <section xml:id="manual.intro.using.namespaces.comp" xreflabel="Using Namespace Composition"><info><title>Using Namespace Composition</title></info>
+
<para>
Best practice in programming suggests sequestering new data or
@@ -1005,22 +1011,22 @@ namespace gtk
<code>std::string</code> does not get imported into
the global namespace. Additionally, a more elaborate arrangement can be made for backwards compatibility and portability, whereby the
<code>using</code>-declarations can wrapped in macros that
- are set based on autoconf-tests to either &quot;&quot; or i.e. <code>using
+ are set based on autoconf-tests to either "" or i.e. <code>using
std::string;</code> (depending on whether the system has
libstdc++ in <code>std::</code> or not). (ideas from
Llewelly and Karl Nelson)
</para>
- </sect2>
- </sect1>
+ </section>
+ </section>
- <sect1 id="manual.intro.using.linkage" xreflabel="Linkage">
+ <section xml:id="manual.intro.using.linkage" xreflabel="Linkage"><info><title>Linking</title></info>
<?dbhtml filename="using_dynamic_or_shared.html"?>
- <title>Linking</title>
+
- <sect2 id="manual.intro.using.linkage.freestanding" xreflabel="Freestanding">
- <title>Almost Nothing</title>
+ <section xml:id="manual.intro.using.linkage.freestanding" xreflabel="Freestanding"><info><title>Almost Nothing</title></info>
+
<para>
Or as close as it gets: freestanding. This is a minimal
configuration, with only partial support for the standard
@@ -1121,10 +1127,10 @@ namespace gtk
identified above is actually used at compile time. Violations
are diagnosed as undefined symbols at link time.
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.linkage.dynamic" xreflabel="Dynamic and Shared">
- <title>Finding Dynamic or Shared Libraries</title>
+ <section xml:id="manual.intro.using.linkage.dynamic" xreflabel="Dynamic and Shared"><info><title>Finding Dynamic or Shared Libraries</title></info>
+
<para>
If the only library built is the static library
@@ -1139,10 +1145,10 @@ namespace gtk
</para>
<para>
A quick read of the relevant part of the GCC
- manual, <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling
- C++ Programs</ulink>, specifies linking against a C++
+ manual, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling
+ C++ Programs</link>, specifies linking against a C++
library. More details from the
- GCC <ulink url="http://gcc.gnu.org/faq.html#rpath">FAQ</ulink>,
+ GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/faq.html#rpath">FAQ</link>,
which states <emphasis>GCC does not, by default, specify a
location so that the dynamic linker can find dynamic libraries at
runtime.</emphasis>
@@ -1176,22 +1182,42 @@ A quick read of the relevant part of the GCC
<itemizedlist>
<listitem>
<para>
- GNU ld (default on Linux):<literal>-Wl,--rpath,<filename class="directory">destdir</filename>/lib</literal>
+ GNU ld (default on Linux):
+ <literal>-Wl,-rpath,</literal><filename class="directory">destdir/lib</filename>
</para>
</listitem>
<listitem>
<para>
- IRIX ld:<literal>
- -Wl,-rpath,<filename class="directory">destdir</filename>/lib</literal>
+ IRIX ld:
+ <literal>-Wl,-rpath,</literal><filename class="directory">destdir/lib</filename>
</para>
</listitem>
<listitem>
<para>
- Solaris ld:<literal>-Wl,-R<filename class="directory">destdir</filename>/lib</literal>
+ Solaris ld:
+ <literal>-Wl,-R</literal><filename class="directory">destdir/lib</filename>
</para>
</listitem>
</itemizedlist>
</listitem>
+ <listitem>
+ <para>
+ Some linkers allow you to specify the path to the library by
+ setting <literal>LD_RUN_PATH</literal> in your environment
+ when linking.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ On some platforms the system administrator can configure the
+ dynamic linker to always look for libraries in
+ <filename class="directory">destdir/lib</filename>, for example
+ by using the <command>ldconfig</command> utility on Linux
+ or the <command>crle</command> utility on Solaris. This is a
+ system-wide change which can make the system unusable so if you
+ are unsure then use one of the other methods described above.
+ </para>
+ </listitem>
</itemizedlist>
<para>
Use the <command>ldd</command> utility on the linked executable
@@ -1205,13 +1231,13 @@ A quick read of the relevant part of the GCC
create your executables, these details are taken care of for
you.
</para>
- </sect2>
- </sect1>
+ </section>
+ </section>
- <sect1 id="manual.intro.using.concurrency" xreflabel="Concurrency">
+ <section xml:id="manual.intro.using.concurrency" xreflabel="Concurrency"><info><title>Concurrency</title></info>
<?dbhtml filename="using_concurrency.html"?>
- <title>Concurrency</title>
+
<para>This section discusses issues surrounding the proper compilation
of multithreaded applications which use the Standard C++
@@ -1219,8 +1245,8 @@ A quick read of the relevant part of the GCC
standard does not address matters of multithreaded applications.
</para>
- <sect2 id="manual.intro.using.concurrency.prereq" xreflabel="Thread Prereq">
- <title>Prerequisites</title>
+ <section xml:id="manual.intro.using.concurrency.prereq" xreflabel="Thread Prereq"><info><title>Prerequisites</title></info>
+
<para>All normal disclaimers aside, multithreaded C++ application are
only supported when libstdc++ and all user code was built with
@@ -1254,14 +1280,14 @@ A quick read of the relevant part of the GCC
in ``gcc -dumpspecs'' (look at lib and cpp entries).
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.concurrency.thread_safety" xreflabel="Thread Safety">
- <title>Thread Safety</title>
+ <section xml:id="manual.intro.using.concurrency.thread_safety" xreflabel="Thread Safety"><info><title>Thread Safety</title></info>
+
<para>
-We currently use the <ulink url="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</ulink> definition of thread safety.
+We currently use the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety.
</para>
@@ -1295,9 +1321,8 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
Requisite command-line flags are used for atomic operations
and threading. Examples of this include <code>-pthread</code>
and <code>-march=native</code>, although specifics vary
- depending on the host environment. See <ulink
- url="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine
- Dependent Options</ulink>.
+ depending on the host environment. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine
+ Dependent Options</link>.
</para>
</listitem>
<listitem>
@@ -1346,20 +1371,20 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
</para>
- </sect2>
- <sect2 id="manual.intro.using.concurrency.atomics" xreflabel="Atomics">
- <title>Atomics</title>
+ </section>
+ <section xml:id="manual.intro.using.concurrency.atomics" xreflabel="Atomics"><info><title>Atomics</title></info>
+
<para>
</para>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.concurrency.io" xreflabel="IO">
- <title>IO</title>
+ <section xml:id="manual.intro.using.concurrency.io" xreflabel="IO"><info><title>IO</title></info>
+
<para>This gets a bit tricky. Please read carefully, and bear with me.
</para>
- <sect3 id="concurrency.io.structure" xreflabel="Structure">
- <title>Structure</title>
+ <section xml:id="concurrency.io.structure" xreflabel="Structure"><info><title>Structure</title></info>
+
<para>A wrapper
type called <code>__basic_file</code> provides our abstraction layer
for the <code>std::filebuf</code> classes. Nearly all decisions dealing
@@ -1370,18 +1395,18 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
level is akin to providing locking within containers, and is not done
for the same reasons (see the links above).
</para>
- </sect3>
+ </section>
- <sect3 id="concurrency.io.defaults" xreflabel="Defaults">
- <title>Defaults</title>
+ <section xml:id="concurrency.io.defaults" xreflabel="Defaults"><info><title>Defaults</title></info>
+
<para>The __basic_file type is simply a collection of small wrappers around
the C stdio layer (again, see the link under Structure). We do no
locking ourselves, but simply pass through to calls to <code>fopen</code>,
<code>fwrite</code>, and so forth.
</para>
- <para>So, for 3.0, the question of &quot;is multithreading safe for I/O&quot;
- must be answered with, &quot;is your platform's C library threadsafe
- for I/O?&quot; Some are by default, some are not; many offer multiple
+ <para>So, for 3.0, the question of "is multithreading safe for I/O"
+ must be answered with, "is your platform's C library threadsafe
+ for I/O?" Some are by default, some are not; many offer multiple
implementations of the C library with varying tradeoffs of threadsafety
and efficiency. You, the programmer, are always required to take care
with multiple threads.
@@ -1400,10 +1425,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
inside an <code>std::ofstream</code>), you need to guard such accesses
like any other critical shared resource.
</para>
- </sect3>
+ </section>
- <sect3 id="concurrency.io.future" xreflabel="Future">
- <title>Future</title>
+ <section xml:id="concurrency.io.future" xreflabel="Future"><info><title>Future</title></info>
+
<para> A
second choice may be available for I/O implementations: libio. This is
disabled by default, and in fact will not currently work due to other
@@ -1414,11 +1439,11 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
type is basically derived from FILE. (The real situation is more
complex than that... it's derived from an internal type used to
implement FILE. See libio/libioP.h to see scary things done with
- vtbls.) The result is that there is no &quot;layer&quot; of C stdio
+ vtbls.) The result is that there is no "layer" of C stdio
to go through; the filebuf makes calls directly into the same
functions used to implement <code>fread</code>, <code>fwrite</code>,
and so forth, using internal data structures. (And when I say
- &quot;makes calls directly,&quot; I mean the function is literally
+ "makes calls directly," I mean the function is literally
replaced by a jump into an internal function. Fast but frightening.
*grin*)
</para>
@@ -1433,20 +1458,20 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
installed. For other platforms, a copy of the libio subsection will
be built and included in libstdc++.
</para>
- </sect3>
+ </section>
- <sect3 id="concurrency.io.alt" xreflabel="Alt">
- <title>Alternatives</title>
+ <section xml:id="concurrency.io.alt" xreflabel="Alt"><info><title>Alternatives</title></info>
+
<para>Don't forget that other cstdio implementations are possible. You could
easily write one to perform your own forms of locking, to solve your
- &quot;interesting&quot; problems.
+ "interesting" problems.
</para>
- </sect3>
+ </section>
- </sect2>
+ </section>
- <sect2 id="manual.intro.using.concurrency.containers" xreflabel="Containers">
- <title>Containers</title>
+ <section xml:id="manual.intro.using.concurrency.containers" xreflabel="Containers"><info><title>Containers</title></info>
+
<para>This section discusses issues surrounding the design of
multithreaded applications which use Standard C++ containers.
@@ -1461,10 +1486,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
</para>
<para>Two excellent pages to read when working with the Standard C++
containers and threads are
- <ulink url="http://www.sgi.com/tech/stl/thread_safety.html">SGI's
- http://www.sgi.com/tech/stl/thread_safety.html</ulink> and
- <ulink url="http://www.sgi.com/tech/stl/Allocators.html">SGI's
- http://www.sgi.com/tech/stl/Allocators.html</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI's
+ http://www.sgi.com/tech/stl/thread_safety.html</link> and
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/Allocators.html">SGI's
+ http://www.sgi.com/tech/stl/Allocators.html</link>.
</para>
<para><emphasis>However, please ignore all discussions about the user-level
configuration of the lock implementation inside the STL
@@ -1508,17 +1533,15 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
options and capabilities.
</para>
- </sect2>
-</sect1>
+ </section>
+</section>
<!-- Section 0x : Exception policies, expectations, topics -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="using_exceptions.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using_exceptions.xml">
</xi:include>
<!-- Section 0x : Debug -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="debug.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug.xml">
</xi:include>
</chapter>
diff --git a/libstdc++-v3/doc/xml/manual/using_exceptions.xml b/libstdc++-v3/doc/xml/manual/using_exceptions.xml
index d6f52a572a1..afc38734ae8 100644
--- a/libstdc++-v3/doc/xml/manual/using_exceptions.xml
+++ b/libstdc++-v3/doc/xml/manual/using_exceptions.xml
@@ -1,7 +1,8 @@
-<sect1 id="manual.intro.using.exceptions" xreflabel="Using Exceptions">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.intro.using.exceptions" xreflabel="Using Exceptions">
<?dbhtml filename="using_exceptions.html"?>
-<sect1info>
+<info><title>Exceptions</title>
<keywordset>
<keyword>
C++
@@ -25,9 +26,7 @@
-fno-exceptions
</keyword>
</keywordset>
-</sect1info>
-
-<title>Exceptions</title>
+</info>
<para>
The C++ language provides language support for stack unwinding
@@ -48,8 +47,8 @@ exception neutrality and exception safety.
</para>
-<sect2 id="intro.using.exception.safety" xreflabel="Exception Safety">
-<title>Exception Safety</title>
+<section xml:id="intro.using.exception.safety" xreflabel="Exception Safety"><info><title>Exception Safety</title></info>
+
<para>
What is exception-safe code?
@@ -121,11 +120,11 @@ exception neutrality and exception safety.
</listitem>
</itemizedlist>
-</sect2>
+</section>
-<sect2 id="intro.using.exception.propagating" xreflabel="Exceptions Neutrality">
-<title>Exception Neutrality</title>
+<section xml:id="intro.using.exception.propagating" xreflabel="Exceptions Neutrality"><info><title>Exception Neutrality</title></info>
+
<para>
Simply put, once thrown an exception object should continue in
flight unless handled explicitly. In practice, this means
@@ -201,10 +200,10 @@ exception neutrality and exception safety.
</listitem>
</itemizedlist>
-</sect2>
+</section>
+
+<section xml:id="intro.using.exception.no" xreflabel="-fno-exceptions"><info><title>Doing without</title></info>
-<sect2 id="intro.using.exception.no" xreflabel="-fno-exceptions">
-<title>Doing without</title>
<para>
C++ is a language that strives to be as efficient as is possible
in delivering features. As such, considerable care is used by both
@@ -217,7 +216,7 @@ exception neutrality and exception safety.
support <literal>try</literal> and <literal>catch</literal> blocks
and thrown objects. (Language support
for <literal>-fno-exceptions</literal> is documented in the GNU
- GCC <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</ulink>.)
+ GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</link>.)
</para>
<para>Before detailing the library support
@@ -353,13 +352,13 @@ exception neutrality and exception safety.
</para>
-</sect2>
+</section>
-<sect2 id="intro.using.exception.compat">
-<title>Compatibility</title>
+<section xml:id="intro.using.exception.compat"><info><title>Compatibility</title></info>
+
+
+<section xml:id="using.exception.compat.c"><info><title>With <literal>C</literal></title></info>
-<sect3 id="using.exception.compat.c">
-<title>With <literal>C</literal></title>
<para>
C language code that is expecting to interoperate with C++ should be
compiled with <literal>-fexceptions</literal>. This will make
@@ -381,10 +380,10 @@ is called.
with <literal>-fexceptions</literal>.
</para>
-</sect3>
+</section>
+
+<section xml:id="using.exception.compat.posix"><info><title>With <literal>POSIX</literal> thread cancellation</title></info>
-<sect3 id="using.exception.compat.posix">
-<title>With <literal>POSIX</literal> thread cancellation</title>
<para>
GNU systems re-use some of the exception handling mechanisms to
@@ -424,28 +423,27 @@ is called.
<programlisting>
catch(const __cxxabiv1::__forced_unwind&amp;)
{
- this->_M_setstate(ios_base::badbit);
+ this-&gt;_M_setstate(ios_base::badbit);
throw;
}
catch(...)
- { this->_M_setstate(ios_base::badbit); }
+ { this-&gt;_M_setstate(ios_base::badbit); }
</programlisting>
-</sect3>
-</sect2>
+</section>
+</section>
+
+<bibliography xml:id="using.exceptions.biblio"><info><title>Bibliography</title></info>
-<bibliography id="using.exceptions.biblio">
-<title>Bibliography</title>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.opengroup.org/austin">
- <citetitle>
- System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
- </citetitle>
- </ulink>
- </biblioid>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opengroup.org/austin" class="uri">
+ </biblioid>
+ <citetitle>
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </citetitle>
+
<pagenums>
2.9.5 Thread Cancellation
</pagenums>
@@ -459,17 +457,13 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.boost.org/community/error_handling.html">
- <citetitle>
- Error and Exception Handling
- </citetitle>
- </ulink>
- </biblioid>
- <author>
- <firstname>David</firstname>
- <surname>Abrahams </surname>
- </author>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/community/error_handling.html" class="uri">
+ </biblioid>
+ <citetitle>
+ Error and Exception Handling
+ </citetitle>
+
+ <author><personname><firstname>David</firstname><surname>Abrahams </surname></personname></author>
<publisher>
<publishername>
Boost
@@ -479,17 +473,13 @@ is called.
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.boost.org/community/exception_safety.html">
- <citetitle>
- Exception-Safety in Generic Components
- </citetitle>
- </ulink>
- </biblioid>
- <author>
- <firstname>David</firstname>
- <surname>Abrahams</surname>
- </author>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/community/exception_safety.html" class="uri">
+ </biblioid>
+ <citetitle>
+ Exception-Safety in Generic Components
+ </citetitle>
+
+ <author><personname><firstname>David</firstname><surname>Abrahams</surname></personname></author>
<publisher>
<publishername>
Boost
@@ -498,17 +488,12 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf">
- <citetitle>
- Standard Library Exception Policy
- </citetitle>
- </ulink>
- </biblioid>
- <author>
- <firstname>Matt</firstname>
- <surname>Austern</surname>
- </author>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" class="uri">
+ </biblioid>
+ <citetitle>
+ Standard Library Exception Policy
+ </citetitle>
+ <author><personname><firstname>Matt</firstname><surname>Austern</surname></personname></author>
<publisher>
<publishername>
WG21 N1077
@@ -517,17 +502,13 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html">
- <citetitle>
- ia64 c++ abi exception handling
- </citetitle>
- </ulink>
- </biblioid>
- <author>
- <firstname>Richard</firstname>
- <surname>Henderson</surname>
- </author>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" class="uri">
+ </biblioid>
+ <citetitle>
+ ia64 c++ abi exception handling
+ </citetitle>
+
+ <author><personname><firstname>Richard</firstname><surname>Henderson</surname></personname></author>
<publisher>
<publishername>
GNU
@@ -536,42 +517,32 @@ is called.
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://www.research.att.com/~bs/3rd_safe.pdf">
- <citetitle>
- Appendix E: Standard-Library Exception Safety
- </citetitle>
- </ulink>
- </biblioid>
- <author>
- <firstname>Bjarne</firstname>
- <surname>Stroustrup</surname>
- </author>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.research.att.com/~bs/3rd_safe.pdf" class="uri">
+ </biblioid>
+ <citetitle>
+ Appendix E: Standard-Library Exception Safety
+ </citetitle>
+ <author><personname><firstname>Bjarne</firstname><surname>Stroustrup</surname></personname></author>
</biblioentry>
<biblioentry>
- <title>
+ <citetitle>
Exceptional C++
- </title>
+ </citetitle>
<pagenums>
Exception-Safety Issues and Techniques
</pagenums>
- <author>
- <firstname>Herb</firstname>
- <surname>Sutter</surname>
- </author>
+ <author><personname><firstname>Herb</firstname><surname>Sutter</surname></personname></author>
</biblioentry>
<biblioentry>
- <biblioid class="uri">
- <ulink url="http://gcc.gnu.org/PR25191">
- <citetitle>
- GCC Bug 25191: exception_defines.h #defines try/catch
- </citetitle>
- </ulink>
+ <biblioid xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/PR25191" class="uri">
</biblioid>
+ <citetitle>
+ GCC Bug 25191: exception_defines.h #defines try/catch
+ </citetitle>
</biblioentry>
</bibliography>
-</sect1>
+</section>
diff --git a/libstdc++-v3/doc/xml/manual/utilities.xml b/libstdc++-v3/doc/xml/manual/utilities.xml
index ef118f5ccc4..5c3a8fd4864 100644
--- a/libstdc++-v3/doc/xml/manual/utilities.xml
+++ b/libstdc++-v3/doc/xml/manual/utilities.xml
@@ -1,12 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[ ]>
-
-<chapter id="std.util" xreflabel="Utilities">
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="std.util" xreflabel="Utilities">
<?dbhtml filename="utilities.html"?>
-<chapterinfo>
+<info><title>
+ Utilities
+ <indexterm><primary>Utilities</primary></indexterm>
+</title>
<keywordset>
<keyword>
ISO C++
@@ -15,30 +14,27 @@
library
</keyword>
</keywordset>
-</chapterinfo>
+</info>
+
-<title>
- Utilities
- <indexterm><primary>Utilities</primary></indexterm>
-</title>
<!-- Section 01 : Functors -->
-<section id="std.util.functors" xreflabel="Functors">
+<section xml:id="std.util.functors" xreflabel="Functors"><info><title>Functors</title></info>
<?dbhtml filename="functors.html"?>
- <title>Functors</title>
+
<para>If you don't know what functors are, you're not alone. Many people
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor
concept written by SGI as chapter of their STL, in
- <ulink url="http://www.sgi.com/tech/stl/functors.html">their
- http://www.sgi.com/tech/stl/functors.html</ulink>.
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/functors.html">their
+ http://www.sgi.com/tech/stl/functors.html</link>.
</para>
</section>
<!-- Section 02 : Pairs -->
-<section id="std.util.pairs" xreflabel="Pairs">
+<section xml:id="std.util.pairs" xreflabel="Pairs"><info><title>Pairs</title></info>
<?dbhtml filename="pairs.html"?>
- <title>Pairs</title>
+
<para>The <code>pair&lt;T1,T2&gt;</code> is a simple and handy way to
carry around a pair of objects. One is of type T1, and another of
type T2; they may be the same type, but you don't get anything
@@ -92,9 +88,9 @@
</section>
<!-- Section 03 : Memory -->
-<section id="std.util.memory" xreflabel="Memory">
+<section xml:id="std.util.memory" xreflabel="Memory"><info><title>Memory</title></info>
<?dbhtml filename="memory.html"?>
- <title>Memory</title>
+
<para>
Memory contains three general areas. First, function and operator
calls via <function>new</function> and <function>delete</function>
@@ -104,26 +100,23 @@
</para>
<!-- Section 01 : allocator -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="allocator.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="allocator.xml">
</xi:include>
<!-- Section 02 : auto_ptr -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="auto_ptr.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="auto_ptr.xml">
</xi:include>
<!-- Section 03 : shared_ptr -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="shared_ptr.xml">
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="shared_ptr.xml">
</xi:include>
</section>
<!-- Section 04 : Traits -->
-<section id="std.util.traits" xreflabel="Traits">
+<section xml:id="std.util.traits" xreflabel="Traits"><info><title>Traits</title></info>
<?dbhtml filename="traits.html"?>
- <title>Traits</title>
+
<para>
</para>
</section>
diff --git a/libstdc++-v3/doc/xml/spine.xml b/libstdc++-v3/doc/xml/spine.xml
index 27d0d8ab3c4..5fb739fb2bc 100644
--- a/libstdc++-v3/doc/xml/spine.xml
+++ b/libstdc++-v3/doc/xml/spine.xml
@@ -1,15 +1,11 @@
-<?xml version='1.0'?>
-<!DOCTYPE set PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY authors SYSTEM "authors.xml">
-]>
-
-<set id="set-index" xreflabel="The GNU C++ Library Documentation">
+<set xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="set-index"
+ xreflabel="The GNU C++ Library">
<?dbhtml filename="spine.html"?>
-<title>The GNU C++ Library Documentation</title>
-<setinfo>
+ <title>The GNU C++ Library</title>
+
+<info>
<copyright>
<year>2000</year>
<year>2001</year>
@@ -23,26 +19,144 @@
<year>2009</year>
<year>2010</year>
<holder>
- <ulink url="http://www.fsf.org">FSF</ulink>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
</copyright>
- &authors;
-</setinfo>
+
+<authorgroup version="5.0">
+
+<!--
+ <author>
+ <firstname>Benjamin</firstname>
+ <surname>Kosnik</surname>
+
+ <affiliation>
+ <shortaffil>Red Hat</shortaffil>
+ <orgname>Red Hat, Inc.</orgname>
+ <address>
+ <email>libstdc++@gcc.gnu.org</email>
+ </address>
+ </affiliation>
+
+ <authorblurb>
+ <para>
+ </para>
+ </authorblurb>
+ </author>
+-->
+
+ <author><personname><firstname/><surname/></personname><personblurb>
+ <para>
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Paolo</firstname><surname>Carlini</surname></personname><personblurb>
+ <para>
+ TR1, LWG Active, Closed, Defects lists.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Phil</firstname><surname>Edwards</surname></personname><personblurb>
+ <para>
+ Originating author, started HOWTO and FAQ, worked on sections
+ Demangling, Macros, Strings, Iterators, Backwards
+ Compatibility, SGI Extensions, Configure, Build, Install.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Doug</firstname><surname>Gregor</surname></personname><personblurb>
+ <para>
+ Debug Mode, TR1 function objects
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Benjamin</firstname><surname>Kosnik</surname></personname><personblurb>
+ <para>
+ Allocators, ABI, API evolution and deprecation history,
+ Backwards Compatibility, Thread, Debug Support, Locales,
+ Facets, Parallel Mode, Headers, Namespaces, Construction and
+ Structure, Using Exceptions, DocBook conversion and layout.
+ </para>
+ </personblurb></author>
+
+
+ <author><personname><firstname>Dhruv</firstname><surname>Matani</surname></personname><personblurb>
+ <para>
+ bitmap_allocator
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Jason</firstname><surname>Merrill</surname></personname><personblurb>
+ <para>
+ License, __verbose_terminate_handler
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Mark</firstname><surname>Mitchell</surname></personname><personblurb>
+ <para>
+ Porting
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Nathan</firstname><surname>Myers</surname></personname><personblurb>
+ <para>
+ Referenced counted string, C++1998 implementation status.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Felix</firstname><surname>Natter</surname></personname><personblurb>
+ <para>
+ Namespace composition, Backwards Compatibility.
+ </para>
+ </personblurb></author>
+
+
+ <author><personname><firstname>Stefan</firstname><surname>Olsson</surname></personname><personblurb>
+ <para>
+ mt_allocator
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Silvius</firstname><surname>Rus</surname></personname><personblurb>
+ <para>
+ Profile mode
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Johannes</firstname><surname>Singler</surname></personname><personblurb>
+ <para>
+ Parallel mode
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Ami</firstname><surname>Tavory</surname></personname><personblurb>
+ <para>
+ Policy Based Data Structures, Associative Containers, Unordered
+ Containers.
+ </para>
+ </personblurb></author>
+
+ <author><personname><firstname>Jonathan</firstname><surname>Wakely</surname></personname><personblurb>
+ <para>
+ shared_ptr, markup editing and styling
+ </para>
+ </personblurb></author>
+
+</authorgroup>
+
+</info>
<!-- User Manual -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="manual/spine.xml" parse="xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="manual/spine.xml" parse="xml">
</xi:include>
<!-- Source Level Documentation-->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="api.xml" parse="xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="api.xml" parse="xml">
</xi:include>
<!-- FAQ -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="faq.xml" parse="xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="faq.xml" parse="xml">
</xi:include>
</set>
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 23aad14692c..3b9c5519d4a 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -121,6 +121,16 @@ bits_headers = \
${bits_srcdir}/postypes.h \
${bits_srcdir}/random.h \
${bits_srcdir}/random.tcc \
+ ${bits_srcdir}/range_access.h \
+ ${bits_srcdir}/regex.h \
+ ${bits_srcdir}/regex_compiler.h \
+ ${bits_srcdir}/regex_constants.h \
+ ${bits_srcdir}/regex_cursor.h \
+ ${bits_srcdir}/regex_error.h \
+ ${bits_srcdir}/regex_grep_matcher.h \
+ ${bits_srcdir}/regex_grep_matcher.tcc \
+ ${bits_srcdir}/regex_nfa.h \
+ ${bits_srcdir}/regex_nfa.tcc \
${bits_srcdir}/stream_iterator.h \
${bits_srcdir}/streambuf_iterator.h \
${bits_srcdir}/shared_ptr.h \
@@ -800,6 +810,7 @@ profile_impl_srcdir = ${glibcxx_srcdir}/include/profile/impl
profile_impl_builddir = ./profile/impl
profile_impl_headers = \
${profile_impl_srcdir}/profiler.h \
+ ${profile_impl_srcdir}/profiler_algos.h \
${profile_impl_srcdir}/profiler_container_size.h \
${profile_impl_srcdir}/profiler_hash_func.h \
${profile_impl_srcdir}/profiler_hashtable_size.h \
@@ -893,7 +904,7 @@ pch_output_dirs = \
${pch1_output_builddir} ${pch2_output_builddir} ${pch3_output_builddir}
pch_output_anchors = \
${pch1_output_anchor} ${pch2_output_anchor} ${pch3_output_anchor}
-PCHFLAGS=-x c++-header $(CXXFLAGS)
+PCHFLAGS=-x c++-header -nostdinc++ $(CXXFLAGS)
if GLIBCXX_BUILD_PCH
pch_build = ${pch_output}
else
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 9caf45989a8..d32efa8e7fd 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -36,8 +36,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = include
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -56,6 +56,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -65,8 +66,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -103,6 +102,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -363,6 +363,16 @@ bits_headers = \
${bits_srcdir}/postypes.h \
${bits_srcdir}/random.h \
${bits_srcdir}/random.tcc \
+ ${bits_srcdir}/range_access.h \
+ ${bits_srcdir}/regex.h \
+ ${bits_srcdir}/regex_compiler.h \
+ ${bits_srcdir}/regex_constants.h \
+ ${bits_srcdir}/regex_cursor.h \
+ ${bits_srcdir}/regex_error.h \
+ ${bits_srcdir}/regex_grep_matcher.h \
+ ${bits_srcdir}/regex_grep_matcher.tcc \
+ ${bits_srcdir}/regex_nfa.h \
+ ${bits_srcdir}/regex_nfa.tcc \
${bits_srcdir}/stream_iterator.h \
${bits_srcdir}/streambuf_iterator.h \
${bits_srcdir}/shared_ptr.h \
@@ -1034,6 +1044,7 @@ profile_impl_srcdir = ${glibcxx_srcdir}/include/profile/impl
profile_impl_builddir = ./profile/impl
profile_impl_headers = \
${profile_impl_srcdir}/profiler.h \
+ ${profile_impl_srcdir}/profiler_algos.h \
${profile_impl_srcdir}/profiler_container_size.h \
${profile_impl_srcdir}/profiler_hash_func.h \
${profile_impl_srcdir}/profiler_hashtable_size.h \
@@ -1119,7 +1130,7 @@ pch_output_dirs = \
pch_output_anchors = \
${pch1_output_anchor} ${pch2_output_anchor} ${pch3_output_anchor}
-PCHFLAGS = -x c++-header $(CXXFLAGS)
+PCHFLAGS = -x c++-header -nostdinc++ $(CXXFLAGS)
@GLIBCXX_BUILD_PCH_FALSE@pch_build =
@GLIBCXX_BUILD_PCH_TRUE@pch_build = ${pch_output}
@@ -1189,37 +1200,6 @@ TAGS:
ctags: CTAGS
CTAGS:
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile all-local
@@ -1320,15 +1300,15 @@ uninstall-am:
.PHONY: all all-am all-local check check-am clean clean-generic \
clean-libtool clean-local distclean distclean-generic \
- distclean-libtool distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am \
- install-data-local install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+ distclean-libtool dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am
# Here are the rules for building the headers
diff --git a/libstdc++-v3/include/backward/hash_fun.h b/libstdc++-v3/include/backward/hash_fun.h
index b7b14a1e418..66e31d844cd 100644
--- a/libstdc++-v3/include/backward/hash_fun.h
+++ b/libstdc++-v3/include/backward/hash_fun.h
@@ -57,7 +57,7 @@
#ifndef _BACKWARD_HASH_FUN_H
#define _BACKWARD_HASH_FUN_H 1
-#include <cstddef>
+#include <bits/c++config.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/backward/hash_map b/libstdc++-v3/include/backward/hash_map
index 813ec472860..fe6e785c012 100644
--- a/libstdc++-v3/include/backward/hash_map
+++ b/libstdc++-v3/include/backward/hash_map
@@ -57,7 +57,10 @@
#ifndef _BACKWARD_HASH_MAP
#define _BACKWARD_HASH_MAP 1
+#ifndef _GLIBCXX_PERMIT_BACKWARD_HASH
#include "backward_warning.h"
+#endif
+
#include <bits/c++config.h>
#include <backward/hashtable.h>
#include <bits/concept_check.h>
diff --git a/libstdc++-v3/include/backward/hash_set b/libstdc++-v3/include/backward/hash_set
index 5a2ade78214..1e4f1a9792d 100644
--- a/libstdc++-v3/include/backward/hash_set
+++ b/libstdc++-v3/include/backward/hash_set
@@ -57,7 +57,10 @@
#ifndef _BACKWARD_HASH_SET
#define _BACKWARD_HASH_SET 1
+#ifndef _GLIBCXX_PERMIT_BACKWARD_HASH
#include "backward_warning.h"
+#endif
+
#include <bits/c++config.h>
#include <backward/hashtable.h>
#include <bits/concept_check.h>
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h
index 645d8830fd8..cf541bc28aa 100644
--- a/libstdc++-v3/include/bits/algorithmfwd.h
+++ b/libstdc++-v3/include/bits/algorithmfwd.h
@@ -134,22 +134,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/
/**
- * @defgroup mutating_algorithms Mutating Algorithms
+ * @defgroup mutating_algorithms Mutating
* @ingroup algorithms
*/
/**
- * @defgroup non_mutating_algorithms Non-Mutating Algorithms
+ * @defgroup non_mutating_algorithms Non-Mutating
* @ingroup algorithms
*/
/**
- * @defgroup sorting_algorithms Sorting Algorithms
+ * @defgroup sorting_algorithms Sorting
* @ingroup algorithms
*/
/**
- * @defgroup set_algorithms Set Operation Algorithms
+ * @defgroup set_algorithms Set Operation
* @ingroup sorting_algorithms
*
* These algorithms are common set operations performed on sequences
@@ -158,7 +158,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/
/**
- * @defgroup binary_search_algorithms Binary Search Algorithms
+ * @defgroup binary_search_algorithms Binary Search
* @ingroup sorting_algorithms
*
* These algorithms are variations of a classic binary search, and
@@ -521,7 +521,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
template<typename _RAIter, typename _UGenerator>
void
- shuffle(_RAIter, _RAIter, _UGenerator&);
+ shuffle(_RAIter, _RAIter, _UGenerator&&);
#endif
template<typename _RAIter>
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index b022c306053..2fb671721ab 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -48,13 +48,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @class basic_string basic_string.h <string>
* @brief Managing sequences of characters and character-like objects.
*
+ * @ingroup strings
* @ingroup sequences
*
* Meets the requirements of a <a href="tables.html#65">container</a>, a
* <a href="tables.html#66">reversible container</a>, and a
* <a href="tables.html#67">sequence</a>. Of the
* <a href="tables.html#68">optional sequence requirements</a>, only
- * @c push_back, @c at, and array access are supported.
+ * @c push_back, @c at, and @c %array access are supported.
*
* @doctodo
*
@@ -78,13 +79,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*
* This approach has the enormous advantage that a string object
* requires only one allocation. All the ugliness is confined
- * within a single pair of inline functions, which each compile to
+ * within a single %pair of inline functions, which each compile to
* a single @a add instruction: _Rep::_M_data(), and
* string::_M_rep(); and the allocation function which gets a
* block of raw bytes and with room enough and constructs a _Rep
* object at the front.
*
- * The reason you want _M_data pointing to the character array and
+ * The reason you want _M_data pointing to the character %array and
* not the _Rep is so that the debugger can see the string
* contents. (Probably we should add a non-inline member to get
* the _Rep for the debugger to use, so users can check the actual
@@ -231,9 +232,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING
if (__builtin_expect(this != &_S_empty_rep(), false))
#endif
- if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount,
- -1) <= 0)
- _M_destroy(__a);
+ {
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
+ if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount,
+ -1) <= 0)
+ {
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
+ _M_destroy(__a);
+ }
+ }
} // XXX MT
void
@@ -457,8 +465,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
size_type __n, const _Alloc& __a);
/**
- * @brief Construct string initialized by a character array.
- * @param s Source character array.
+ * @brief Construct string initialized by a character %array.
+ * @param s Source character %array.
* @param n Number of characters to copy.
* @param a Allocator to use (default is default allocator).
*
@@ -500,7 +508,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
/**
- * @brief Construct string from an initializer list.
+ * @brief Construct string from an initializer %list.
* @param l std::initializer_list of characters.
* @param a Allocator to use (default is default allocator).
*/
@@ -570,7 +578,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
/**
- * @brief Set value to string constructed from initializer list.
+ * @brief Set value to string constructed from initializer %list.
* @param l std::initializer_list.
*/
basic_string&
@@ -719,7 +727,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* This function will %resize the %string to the specified
* number of characters. If the number is smaller than the
* %string's current size the %string is truncated, otherwise
- * the %string is extended and new elements are set to @a c.
+ * the %string is extended and new elements are %set to @a c.
*/
void
resize(size_type __n, _CharT __c);
@@ -850,6 +858,40 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return _M_data()[__n];
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * Returns a read/write reference to the data at the first
+ * element of the %string.
+ */
+ reference
+ front()
+ { return operator[](0); }
+
+ /**
+ * Returns a read-only (constant) reference to the data at the first
+ * element of the %string.
+ */
+ const_reference
+ front() const
+ { return operator[](0); }
+
+ /**
+ * Returns a read/write reference to the data at the last
+ * element of the %string.
+ */
+ reference
+ back()
+ { return operator[](this->size() - 1); }
+
+ /**
+ * Returns a read-only (constant) reference to the data at the
+ * last element of the %string.
+ */
+ const_reference
+ back() const
+ { return operator[](this->size() - 1); }
+#endif
+
/**
* @brief Provides access to the data contained in the %string.
* @param n The index of the character to access.
@@ -1696,7 +1738,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @throw std::out_of_range If pos > size().
*
* Copies up to @a n characters starting at @a pos into the C string @a
- * s. If @a pos is greater than size(), out_of_range is thrown.
+ * s. If @a pos is %greater than size(), out_of_range is thrown.
*/
size_type
copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
@@ -2224,10 +2266,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
compare(size_type __pos, size_type __n1, const _CharT* __s) const;
/**
- * @brief Compare substring against a character array.
+ * @brief Compare substring against a character %array.
* @param pos1 Index of first character of substring.
* @param n1 Number of characters in substring.
- * @param s character array to compare against.
+ * @param s character %array to compare against.
* @param n2 Number of characters of s.
* @return Integer < 0, 0, or > 0.
*
@@ -2887,7 +2929,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
size_t
operator()(const string& __s) const
- { return std::_Fnv_hash::hash(__s.data(), __s.length()); }
+ { return std::_Hash_impl::hash(__s.data(), __s.length()); }
};
#ifdef _GLIBCXX_USE_WCHAR_T
@@ -2898,8 +2940,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
size_t
operator()(const wstring& __s) const
- { return std::_Fnv_hash::hash(__s.data(),
- __s.length() * sizeof(wchar_t)); }
+ { return std::_Hash_impl::hash(__s.data(),
+ __s.length() * sizeof(wchar_t)); }
};
#endif
#endif /* _GLIBCXX_COMPATIBILITY_CXX0X */
@@ -2912,8 +2954,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
size_t
operator()(const u16string& __s) const
- { return std::_Fnv_hash::hash(__s.data(),
- __s.length() * sizeof(char16_t)); }
+ { return std::_Hash_impl::hash(__s.data(),
+ __s.length() * sizeof(char16_t)); }
};
/// std::hash specialization for u32string.
@@ -2923,8 +2965,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
size_t
operator()(const u32string& __s) const
- { return std::_Fnv_hash::hash(__s.data(),
- __s.length() * sizeof(char32_t)); }
+ { return std::_Hash_impl::hash(__s.data(),
+ __s.length() * sizeof(char32_t)); }
};
#endif
diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
index d450a4717de..ab71ad67e17 100644
--- a/libstdc++-v3/include/bits/basic_string.tcc
+++ b/libstdc++-v3/include/bits/basic_string.tcc
@@ -1,7 +1,7 @@
// Components for manipulating sequences of characters -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -130,7 +130,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif
// NB: Not required, but considered best practice.
if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
- __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));
+ __throw_logic_error(__N("basic_string::_S_construct null not valid"));
const size_type __dnew = static_cast<size_type>(std::distance(__beg,
__end));
diff --git a/libstdc++-v3/include/bits/boost_concept_check.h b/libstdc++-v3/include/bits/boost_concept_check.h
index 054fcf27e5e..cffd7fb2d05 100644
--- a/libstdc++-v3/include/bits/boost_concept_check.h
+++ b/libstdc++-v3/include/bits/boost_concept_check.h
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +42,7 @@
#pragma GCC system_header
-#include <cstddef> // for ptrdiff_t, used next
+#include <bits/c++config.h>
#include <bits/stl_iterator_base_types.h> // for traits and tags
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 3746696458a..19b55bc5b08 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -1,7 +1,7 @@
// Predefined symbols and macros -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -60,6 +60,35 @@
# define _GLIBCXX_DEPRECATED_ATTR
#endif
+// Macros for race detectors.
+// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
+// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
+// atomic (lock-free) synchronization to race detectors:
+// the race detector will infer a happens-before arc from the former to the
+// latter when they share the same argument pointer.
+//
+// The most frequent use case for these macros (and the only case in the
+// current implementation of the library) is atomic reference counting:
+// void _M_remove_reference()
+// {
+// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
+// if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
+// {
+// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
+// _M_destroy(__a);
+// }
+// }
+// The annotations in this example tell the race detector that all memory
+// accesses occurred when the refcount was positive do not race with
+// memory accesses which occurred after the refcount became zero.
+
+#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
+# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
+#endif
+#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
+# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
+#endif
+
// Macros for activating various namespace association modes.
// _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG
// _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
@@ -376,4 +405,19 @@ _GLIBCXX_END_NAMESPACE
# endif
#endif
+#ifdef __cplusplus
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ typedef __SIZE_TYPE__ size_t;
+ typedef __PTRDIFF_TYPE__ ptrdiff_t;
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ typedef decltype(nullptr) nullptr_t;
+#endif
+
+_GLIBCXX_END_NAMESPACE
+
+#endif // __cplusplus
+
// End of prewritten config; the discovered settings follow.
diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h
index 412e75a2ec0..786c1c6b380 100644
--- a/libstdc++-v3/include/bits/char_traits.h
+++ b/libstdc++-v3/include/bits/char_traits.h
@@ -42,13 +42,6 @@
#include <bits/postypes.h> // For streampos
#include <cwchar> // For WEOF, wmemmove, wmemset, etc.
-#ifndef _GLIBCXX_STDIO_MACROS
-# include <cstdio> // For EOF
-# define _CHAR_TRAITS_EOF EOF
-#else
-# define _CHAR_TRAITS_EOF (-1)
-#endif
-
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
/**
@@ -139,7 +132,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
static int_type
eof()
- { return static_cast<int_type>(_CHAR_TRAITS_EOF); }
+ { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
static int_type
not_eof(const int_type& __c)
@@ -294,7 +287,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static int_type
eof()
- { return static_cast<int_type>(_CHAR_TRAITS_EOF); }
+ { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
static int_type
not_eof(const int_type& __c)
@@ -570,6 +563,4 @@ _GLIBCXX_END_NAMESPACE
#endif
-#undef _CHAR_TRAITS_EOF
-
#endif // _CHAR_TRAITS_H
diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h
index 0d7b9ff09fc..030494665a0 100644
--- a/libstdc++-v3/include/bits/cpp_type_traits.h
+++ b/libstdc++-v3/include/bits/cpp_type_traits.h
@@ -414,6 +414,34 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
};
#endif
+ template<typename _Tp>
+ class __has_iterator_category
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Up>
+ struct _Wrap_type
+ { };
+
+ template<typename _Up>
+ static __one __test(_Wrap_type<typename _Up::iterator_category>*);
+
+ template<typename _Up>
+ static __two __test(...);
+
+ public:
+ static const bool __value = sizeof(__test<_Tp>(0)) == 1;
+ };
+
+ template<typename _Tp>
+ struct __is_iterator
+ {
+ enum { __value = (__has_iterator_category<_Tp>::__value
+ || __is_pointer<_Tp>::__value) };
+ typedef typename __truth_type<__value>::__type __type;
+ };
+
_GLIBCXX_END_NAMESPACE
#endif //_CPP_TYPE_TRAITS_H
diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc
index cde067cf382..d8c27870647 100644
--- a/libstdc++-v3/include/bits/deque.tcc
+++ b/libstdc++-v3/include/bits/deque.tcc
@@ -1,6 +1,7 @@
// Deque implementation (out of line) -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -59,6 +60,33 @@
_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template <typename _Tp, typename _Alloc>
+ void
+ deque<_Tp, _Alloc>::
+ _M_default_initialize()
+ {
+ _Map_pointer __cur;
+ __try
+ {
+ for (__cur = this->_M_impl._M_start._M_node;
+ __cur < this->_M_impl._M_finish._M_node;
+ ++__cur)
+ std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(),
+ _M_get_Tp_allocator());
+ std::__uninitialized_default_a(this->_M_impl._M_finish._M_first,
+ this->_M_impl._M_finish._M_cur,
+ _M_get_Tp_allocator());
+ }
+ __catch(...)
+ {
+ std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
+ _M_get_Tp_allocator());
+ __throw_exception_again;
+ }
+ }
+#endif
+
template <typename _Tp, typename _Alloc>
deque<_Tp, _Alloc>&
deque<_Tp, _Alloc>::
@@ -271,6 +299,32 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_M_insert_aux(__pos, __n, __x);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template <typename _Tp, typename _Alloc>
+ void
+ deque<_Tp, _Alloc>::
+ _M_default_append(size_type __n)
+ {
+ if (__n)
+ {
+ iterator __new_finish = _M_reserve_elements_at_back(__n);
+ __try
+ {
+ std::__uninitialized_default_a(this->_M_impl._M_finish,
+ __new_finish,
+ _M_get_Tp_allocator());
+ this->_M_impl._M_finish = __new_finish;
+ }
+ __catch(...)
+ {
+ _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+ __new_finish._M_node + 1);
+ __throw_exception_again;
+ }
+ }
+ }
+#endif
+
template <typename _Tp, typename _Alloc>
void
deque<_Tp, _Alloc>::
diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h
index 57b7836a324..a76c8a31260 100644
--- a/libstdc++-v3/include/bits/forward_list.h
+++ b/libstdc++-v3/include/bits/forward_list.h
@@ -139,7 +139,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pointer
operator->() const
- { return &static_cast<_Node*>(this->_M_node)->_M_value; }
+ { return std::__addressof(static_cast<_Node*>
+ (this->_M_node)->_M_value); }
_Self&
operator++()
@@ -210,7 +211,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pointer
operator->() const
- { return &static_cast<_Node*>(this->_M_node)->_M_value; }
+ { return std::__addressof(static_cast<_Node*>
+ (this->_M_node)->_M_value); }
_Self&
operator++()
@@ -450,7 +452,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param al An allocator object.
*/
forward_list(forward_list&& __list, const _Alloc& __al)
- : _Base(std::forward<_Base>(__list), __al)
+ : _Base(std::move(__list), __al)
{ }
/**
@@ -461,7 +463,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* constructed elements.
*/
explicit
- forward_list(size_type __n);
+ forward_list(size_type __n)
+ : _Base()
+ { _M_default_initialize(__n); }
/**
* @brief Creates a %forward_list with copies of an exemplar element.
@@ -519,7 +523,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* %forward_list.
*/
forward_list(forward_list&& __list)
- : _Base(std::forward<_Base>(__list)) { }
+ : _Base(std::move(__list)) { }
/**
* @brief Builds a %forward_list from an initializer_list
@@ -998,7 +1002,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* populated with given data.
*/
void
- resize(size_type __sz, value_type __val);
+ resize(size_type __sz, const value_type& __val);
/**
* @brief Erases all the elements.
@@ -1207,6 +1211,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Called by splice_after and insert_after.
iterator
_M_splice_after(const_iterator __pos, forward_list&& __list);
+
+ // Called by forward_list(n).
+ void
+ _M_default_initialize(size_type __n);
+
+ // Called by resize(sz).
+ void
+ _M_default_insert_after(const_iterator __pos, size_type __n);
};
/**
diff --git a/libstdc++-v3/include/bits/forward_list.tcc b/libstdc++-v3/include/bits/forward_list.tcc
index 7468a90d1af..70453c2cc89 100644
--- a/libstdc++-v3/include/bits/forward_list.tcc
+++ b/libstdc++-v3/include/bits/forward_list.tcc
@@ -114,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_fill_initialize(size_type __n, const value_type& __value)
{
_Node_base* __to = &this->_M_impl._M_head;
- for (; __n > 0; --__n)
+ for (; __n; --__n)
{
__to->_M_next = this->_M_create_node(__value);
__to = __to->_M_next;
@@ -122,12 +122,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp, typename _Alloc>
+ void
forward_list<_Tp, _Alloc>::
- forward_list(size_type __n)
- : _Base()
+ _M_default_initialize(size_type __n)
{
_Node_base* __to = &this->_M_impl._M_head;
- for (; __n > 0; --__n)
+ for (; __n; --__n)
{
__to->_M_next = this->_M_create_node();
__to = __to->_M_next;
@@ -164,6 +164,24 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _Tp, typename _Alloc>
void
forward_list<_Tp, _Alloc>::
+ _M_default_insert_after(const_iterator __pos, size_type __n)
+ {
+ const_iterator __saved_pos = __pos;
+ __try
+ {
+ for (; __n; --__n)
+ __pos = emplace_after(__pos);
+ }
+ __catch(...)
+ {
+ erase_after(__saved_pos, ++__pos);
+ __throw_exception_again;
+ }
+ }
+
+ template<typename _Tp, typename _Alloc>
+ void
+ forward_list<_Tp, _Alloc>::
resize(size_type __sz)
{
iterator __k = before_begin();
@@ -177,16 +195,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (__len == __sz)
erase_after(__k, end());
else
- {
- forward_list __tmp(__sz - __len);
- splice_after(__k, std::move(__tmp));
- }
+ _M_default_insert_after(__k, __sz - __len);
}
template<typename _Tp, typename _Alloc>
void
forward_list<_Tp, _Alloc>::
- resize(size_type __sz, value_type __val)
+ resize(size_type __sz, const value_type& __val)
{
iterator __k = before_begin();
@@ -271,13 +286,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
remove(const _Tp& __val)
{
_Node* __curr = static_cast<_Node*>(&this->_M_impl._M_head);
- while (_Node* __temp = static_cast<_Node*>(__curr->_M_next))
+ _Node* __extra = 0;
+
+ while (_Node* __tmp = static_cast<_Node*>(__curr->_M_next))
{
- if (__temp->_M_value == __val)
- this->_M_erase_after(__curr);
- else
- __curr = static_cast<_Node*>(__curr->_M_next);
+ if (__tmp->_M_value == __val)
+ {
+ if (std::__addressof(__tmp->_M_value)
+ != std::__addressof(__val))
+ {
+ this->_M_erase_after(__curr);
+ continue;
+ }
+ else
+ __extra = __curr;
+ }
+ __curr = static_cast<_Node*>(__curr->_M_next);
}
+
+ if (__extra)
+ this->_M_erase_after(__extra);
}
template<typename _Tp, typename _Alloc>
@@ -287,9 +315,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
remove_if(_Pred __pred)
{
_Node* __curr = static_cast<_Node*>(&this->_M_impl._M_head);
- while (_Node* __temp = static_cast<_Node*>(__curr->_M_next))
+ while (_Node* __tmp = static_cast<_Node*>(__curr->_M_next))
{
- if (__pred(__temp->_M_value))
+ if (__pred(__tmp->_M_value))
this->_M_erase_after(__curr);
else
__curr = static_cast<_Node*>(__curr->_M_next);
diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc
index c5f7f8c52af..c498f48caee 100644
--- a/libstdc++-v3/include/bits/fstream.tcc
+++ b/libstdc++-v3/include/bits/fstream.tcc
@@ -64,21 +64,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (_M_buf_allocated)
{
delete [] _M_buf;
- _M_buf = NULL;
+ _M_buf = 0;
_M_buf_allocated = false;
}
delete [] _M_ext_buf;
- _M_ext_buf = NULL;
+ _M_ext_buf = 0;
_M_ext_buf_size = 0;
- _M_ext_next = NULL;
- _M_ext_end = NULL;
+ _M_ext_next = 0;
+ _M_ext_end = 0;
}
template<typename _CharT, typename _Traits>
basic_filebuf<_CharT, _Traits>::
basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock),
_M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(),
- _M_state_last(), _M_buf(NULL), _M_buf_size(BUFSIZ),
+ _M_state_last(), _M_buf(0), _M_buf_size(BUFSIZ),
_M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(),
_M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false),
_M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0),
@@ -93,7 +93,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
basic_filebuf<_CharT, _Traits>::
open(const char* __s, ios_base::openmode __mode)
{
- __filebuf_type *__ret = NULL;
+ __filebuf_type *__ret = 0;
if (!this->is_open())
{
_M_file.open(__s, __mode);
@@ -128,7 +128,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
close()
{
if (!this->is_open())
- return NULL;
+ return 0;
bool __testfail = false;
{
@@ -167,7 +167,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__testfail = true;
if (__testfail)
- return NULL;
+ return 0;
else
return this;
}
diff --git a/libstdc++-v3/include/bits/functional_hash.h b/libstdc++-v3/include/bits/functional_hash.h
index aaa05aad689..36396878892 100644
--- a/libstdc++-v3/include/bits/functional_hash.h
+++ b/libstdc++-v3/include/bits/functional_hash.h
@@ -32,7 +32,7 @@
#pragma GCC system_header
-#include <cstddef>
+#include <bits/c++config.h>
#include <bits/stl_function.h>
namespace std
@@ -116,74 +116,55 @@ namespace std
#undef _Cxx_hashtable_define_trivial_hash
- // Fowler / Noll / Vo (FNV) Hash (type FNV-1a)
-
- // Dummy generic implementation (for sizeof(size_t) != 4, 8).
- template<size_t>
- struct _Fnv_hash_base
- {
- template<typename _Tp>
- static size_t
- hash(const _Tp* __ptr, size_t __clength, size_t __hash = 0)
- {
- const char* __cptr = reinterpret_cast<const char*>(__ptr);
- for (; __clength; --__clength)
- __hash = (__hash * 131) + *__cptr++;
- return __hash;
- }
- };
-
- template<>
- struct _Fnv_hash_base<4>
- {
- template<typename _Tp>
- static size_t
- hash(const _Tp* __ptr, size_t __clength,
- size_t __hash = static_cast<size_t>(2166136261UL))
- {
- const char* __cptr = reinterpret_cast<const char*>(__ptr);
- for (; __clength; --__clength)
- {
- __hash ^= static_cast<size_t>(*__cptr++);
- __hash *= static_cast<size_t>(16777619UL);
- }
- return __hash;
- }
- };
-
- template<>
- struct _Fnv_hash_base<8>
- {
- template<typename _Tp>
- static size_t
- hash(const _Tp* __ptr, size_t __clength,
- size_t __hash = static_cast<size_t>(14695981039346656037ULL))
- {
- const char* __cptr = reinterpret_cast<const char*>(__ptr);
- for (; __clength; --__clength)
- {
- __hash ^= static_cast<size_t>(*__cptr++);
- __hash *= static_cast<size_t>(1099511628211ULL);
- }
- return __hash;
- }
- };
-
- struct _Fnv_hash
- : public _Fnv_hash_base<sizeof(size_t)>
- {
- using _Fnv_hash_base<sizeof(size_t)>::hash;
-
- template<typename _Tp>
- static size_t
- hash(const _Tp& __val)
- { return hash(&__val, sizeof(__val)); }
-
- template<typename _Tp>
- static size_t
- __hash_combine(const _Tp& __val, size_t __hash)
- { return hash(&__val, sizeof(__val), __hash); }
- };
+ // Hash function implementation for the nontrivial specialization.
+ // All of them are based on a primitive that hashes a pointer to
+ // a byte array. The actual hash algorithm is not guaranteed to
+ // stay the same from release to release -- it may be updated or
+ // tuned to improve hash quality or speed.
+ size_t
+ _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
+
+ // A similar hash primitive, using the FNV hash algorithm. This
+ // algorithm is guaranteed to stay the same from release to release.
+ // (although it might not produce the same values on different machines.)
+ size_t
+ _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
+
+ struct _Hash_impl
+ {
+ static size_t
+ hash(const void* __ptr, size_t __clength,
+ size_t __seed = static_cast<size_t>(0xc70f6907UL))
+ { return _Hash_bytes(__ptr, __clength, __seed); }
+
+ template<typename _Tp>
+ static size_t
+ hash(const _Tp& __val)
+ { return hash(&__val, sizeof(__val)); }
+
+ template<typename _Tp>
+ static size_t
+ __hash_combine(const _Tp& __val, size_t __hash)
+ { return hash(&__val, sizeof(__val), __hash); }
+ };
+
+ struct _Fnv_hash_impl
+ {
+ static size_t
+ hash(const void* __ptr, size_t __clength,
+ size_t __seed = static_cast<size_t>(2166136261UL))
+ { return _Fnv_hash_bytes(__ptr, __clength, __seed); }
+
+ template<typename _Tp>
+ static size_t
+ hash(const _Tp& __val)
+ { return hash(&__val, sizeof(__val)); }
+
+ template<typename _Tp>
+ static size_t
+ __hash_combine(const _Tp& __val, size_t __hash)
+ { return hash(&__val, sizeof(__val), __hash); }
+ };
/// Specialization for float.
template<>
@@ -191,7 +172,7 @@ namespace std
hash<float>::operator()(float __val) const
{
// 0 and -0 both hash to zero.
- return __val != 0.0f ? std::_Fnv_hash::hash(__val) : 0;
+ return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
}
/// Specialization for double.
@@ -200,7 +181,7 @@ namespace std
hash<double>::operator()(double __val) const
{
// 0 and -0 both hash to zero.
- return __val != 0.0 ? std::_Fnv_hash::hash(__val) : 0;
+ return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
}
/// Specialization for long double.
diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h
index c7aceb19f8e..be6d9a185d6 100644
--- a/libstdc++-v3/include/bits/hashtable.h
+++ b/libstdc++-v3/include/bits/hashtable.h
@@ -175,6 +175,7 @@ namespace std
_Node_allocator_type _M_node_allocator;
_Node** _M_buckets;
size_type _M_bucket_count;
+ size_type _M_begin_bucket_index; // First non-empty bucket.
size_type _M_element_count;
_RehashPolicy _M_rehash_policy;
@@ -212,7 +213,22 @@ namespace std
_Hashtable(_Hashtable&&);
_Hashtable&
- operator=(const _Hashtable&);
+ operator=(const _Hashtable& __ht)
+ {
+ _Hashtable __tmp(__ht);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ _Hashtable&
+ operator=(_Hashtable&& __ht)
+ {
+ // NB: DR 1204.
+ // NB: DR 675.
+ this->clear();
+ this->swap(__ht);
+ return *this;
+ }
~_Hashtable();
@@ -221,21 +237,11 @@ namespace std
// Basic container operations
iterator
begin()
- {
- iterator __i(_M_buckets);
- if (!__i._M_cur_node)
- __i._M_incr_bucket();
- return __i;
- }
+ { return iterator(_M_buckets + _M_begin_bucket_index); }
const_iterator
begin() const
- {
- const_iterator __i(_M_buckets);
- if (!__i._M_cur_node)
- __i._M_incr_bucket();
- return __i;
- }
+ { return const_iterator(_M_buckets + _M_begin_bucket_index); }
iterator
end()
@@ -247,12 +253,7 @@ namespace std
const_iterator
cbegin() const
- {
- const_iterator __i(_M_buckets);
- if (!__i._M_cur_node)
- __i._M_incr_bucket();
- return __i;
- }
+ { return const_iterator(_M_buckets + _M_begin_bucket_index); }
const_iterator
cend() const
@@ -393,10 +394,7 @@ namespace std
iterator
_M_insert(const value_type&, std::false_type);
- void
- _M_erase_node(_Node*, _Node**);
-
- public:
+ public:
// Insert and erase
_Insert_Return_Type
insert(const value_type& __v)
@@ -556,6 +554,7 @@ namespace std
{
_M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint);
_M_buckets = _M_allocate_buckets(_M_bucket_count);
+ _M_begin_bucket_index = _M_bucket_count;
}
template<typename _Key, typename _Value,
@@ -586,6 +585,7 @@ namespace std
__distance_fw(__f,
__l)));
_M_buckets = _M_allocate_buckets(_M_bucket_count);
+ _M_begin_bucket_index = _M_bucket_count;
__try
{
for (; __f != __l; ++__f)
@@ -612,6 +612,7 @@ namespace std
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(__ht),
_M_node_allocator(__ht._M_node_allocator),
_M_bucket_count(__ht._M_bucket_count),
+ _M_begin_bucket_index(__ht._M_begin_bucket_index),
_M_element_count(__ht._M_element_count),
_M_rehash_policy(__ht._M_rehash_policy)
{
@@ -651,14 +652,16 @@ namespace std
_H1, _H2, _Hash, __chc>(__ht),
__detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(__ht),
_M_node_allocator(__ht._M_node_allocator),
+ _M_buckets(__ht._M_buckets),
_M_bucket_count(__ht._M_bucket_count),
+ _M_begin_bucket_index(__ht._M_begin_bucket_index),
_M_element_count(__ht._M_element_count),
- _M_rehash_policy(__ht._M_rehash_policy),
- _M_buckets(__ht._M_buckets)
+ _M_rehash_policy(__ht._M_rehash_policy)
{
size_type __n_bkt = __ht._M_rehash_policy._M_next_bkt(0);
__ht._M_buckets = __ht._M_allocate_buckets(__n_bkt);
__ht._M_bucket_count = __n_bkt;
+ __ht._M_begin_bucket_index = __ht._M_bucket_count;
__ht._M_element_count = 0;
__ht._M_rehash_policy = _RehashPolicy();
}
@@ -668,21 +671,6 @@ namespace std
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
bool __chc, bool __cit, bool __uk>
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
- _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>&
- _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
- _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- operator=(const _Hashtable& __ht)
- {
- _Hashtable __tmp(__ht);
- this->swap(__tmp);
- return *this;
- }
-
- template<typename _Key, typename _Value,
- typename _Allocator, typename _ExtractKey, typename _Equal,
- typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
- bool __chc, bool __cit, bool __uk>
- _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
~_Hashtable()
{
@@ -713,6 +701,7 @@ namespace std
std::swap(_M_rehash_policy, __x._M_rehash_policy);
std::swap(_M_buckets, __x._M_buckets);
std::swap(_M_bucket_count, __x._M_bucket_count);
+ std::swap(_M_begin_bucket_index, __x._M_begin_bucket_index);
std::swap(_M_element_count, __x._M_element_count);
}
@@ -915,6 +904,8 @@ namespace std
this->_M_store_code(__new_node, __code);
_M_buckets[__n] = __new_node;
++_M_element_count;
+ if (__n < _M_begin_bucket_index)
+ _M_begin_bucket_index = __n;
return iterator(__new_node, _M_buckets + __n);
}
__catch(...)
@@ -981,6 +972,8 @@ namespace std
{
__new_node->_M_next = _M_buckets[__n];
_M_buckets[__n] = __new_node;
+ if (__n < _M_begin_bucket_index)
+ _M_begin_bucket_index = __n;
}
this->_M_store_code(__new_node, __code);
@@ -988,34 +981,6 @@ namespace std
return iterator(__new_node, _M_buckets + __n);
}
- // For erase(iterator) and erase(const_iterator).
- template<typename _Key, typename _Value,
- typename _Allocator, typename _ExtractKey, typename _Equal,
- typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
- bool __chc, bool __cit, bool __uk>
- void
- _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
- _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_erase_node(_Node* __p, _Node** __b)
- {
- _Node* __cur = *__b;
- if (__cur == __p)
- *__b = __cur->_M_next;
- else
- {
- _Node* __next = __cur->_M_next;
- while (__next != __p)
- {
- __cur = __next;
- __next = __cur->_M_next;
- }
- __cur->_M_next = __next->_M_next;
- }
-
- _M_deallocate_node(__p);
- --_M_element_count;
- }
-
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
@@ -1050,7 +1015,31 @@ namespace std
{
iterator __result(__it._M_cur_node, __it._M_cur_bucket);
++__result;
- _M_erase_node(__it._M_cur_node, __it._M_cur_bucket);
+
+ _Node* __cur = *__it._M_cur_bucket;
+ if (__cur == __it._M_cur_node)
+ {
+ *__it._M_cur_bucket = __cur->_M_next;
+
+ // If _M_begin_bucket_index no longer indexes the first non-empty
+ // bucket - its single node is being erased - update it.
+ if (!_M_buckets[_M_begin_bucket_index])
+ _M_begin_bucket_index = __result._M_cur_bucket - _M_buckets;
+ }
+ else
+ {
+ _Node* __next = __cur->_M_next;
+ while (__next != __it._M_cur_node)
+ {
+ __cur = __next;
+ __next = __cur->_M_next;
+ }
+ __cur->_M_next = __next->_M_next;
+ }
+
+ _M_deallocate_node(__it._M_cur_node);
+ --_M_element_count;
+
return __result;
}
@@ -1079,7 +1068,8 @@ namespace std
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 526. Is it undefined if a function in the standard changes
// in parameters?
- if (&this->_M_extract((*__slot)->_M_v) != &__k)
+ if (std::__addressof(this->_M_extract((*__slot)->_M_v))
+ != std::__addressof(__k))
{
_Node* __p = *__slot;
*__slot = __p->_M_next;
@@ -1103,6 +1093,20 @@ namespace std
++__result;
}
+ // If the entire bucket indexed by _M_begin_bucket_index has been
+ // erased look forward for the first non-empty bucket.
+ if (!_M_buckets[_M_begin_bucket_index])
+ {
+ if (!_M_element_count)
+ _M_begin_bucket_index = _M_bucket_count;
+ else
+ {
+ ++_M_begin_bucket_index;
+ while (!_M_buckets[_M_begin_bucket_index])
+ ++_M_begin_bucket_index;
+ }
+ }
+
return __result;
}
@@ -1120,8 +1124,8 @@ namespace std
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
erase(const_iterator __first, const_iterator __last)
{
- while (__first != __last)
- __first = this->erase(__first);
+ while (__first != __last)
+ __first = this->erase(__first);
return iterator(__last._M_cur_node, __last._M_cur_bucket);
}
@@ -1136,6 +1140,7 @@ namespace std
{
_M_deallocate_nodes(_M_buckets, _M_bucket_count);
_M_element_count = 0;
+ _M_begin_bucket_index = _M_bucket_count;
}
template<typename _Key, typename _Value,
@@ -1164,6 +1169,7 @@ namespace std
_Node** __new_array = _M_allocate_buckets(__n);
__try
{
+ _M_begin_bucket_index = __n;
for (size_type __i = 0; __i < _M_bucket_count; ++__i)
while (_Node* __p = _M_buckets[__i])
{
@@ -1171,6 +1177,8 @@ namespace std
_M_buckets[__i] = __p->_M_next;
__p->_M_next = __new_array[__new_index];
__new_array[__new_index] = __p;
+ if (__new_index < _M_begin_bucket_index)
+ _M_begin_bucket_index = __new_index;
}
_M_deallocate_buckets(_M_buckets, _M_bucket_count);
_M_bucket_count = __n;
@@ -1186,6 +1194,7 @@ namespace std
_M_deallocate_buckets(__new_array, __n);
_M_deallocate_nodes(_M_buckets, _M_bucket_count);
_M_element_count = 0;
+ _M_begin_bucket_index = _M_bucket_count;
__throw_exception_again;
}
}
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index 6e6a8fb0177..694d0ffdeb4 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -145,7 +145,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur->_M_v; }
+ { return std::__addressof(this->_M_cur->_M_v); }
_Node_iterator&
operator++()
@@ -190,7 +190,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur->_M_v; }
+ { return std::__addressof(this->_M_cur->_M_v); }
_Node_const_iterator&
operator++()
@@ -288,7 +288,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur_node->_M_v; }
+ { return std::__addressof(this->_M_cur_node->_M_v); }
_Hashtable_iterator&
operator++()
@@ -338,7 +338,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur_node->_M_v; }
+ { return std::__addressof(this->_M_cur_node->_M_v); }
_Hashtable_const_iterator&
operator++()
diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index 0ac3d692647..6749a731065 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -42,15 +42,6 @@
#include <bits/localefwd.h>
#include <bits/locale_classes.h>
-#ifndef _GLIBCXX_STDIO_MACROS
-# include <cstdio> // For SEEK_CUR, SEEK_END
-# define _IOS_BASE_SEEK_CUR SEEK_CUR
-# define _IOS_BASE_SEEK_END SEEK_END
-#else
-# define _IOS_BASE_SEEK_CUR 1
-# define _IOS_BASE_SEEK_END 2
-#endif
-
_GLIBCXX_BEGIN_NAMESPACE(std)
// The following definitions of bitmask types are enums, not ints,
@@ -189,8 +180,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
enum _Ios_Seekdir
{
_S_beg = 0,
- _S_cur = _IOS_BASE_SEEK_CUR,
- _S_end = _IOS_BASE_SEEK_END,
+ _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
+ _S_end = _GLIBCXX_STDIO_SEEK_END,
_S_ios_seekdir_end = 1L << 16
};
@@ -483,7 +474,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// 0 => OK to delete.
int
_M_remove_reference()
- { return __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); }
+ {
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
+ int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
+ if (__res == 0)
+ {
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
+ }
+ return __res;
+ }
};
_Callback_list* _M_callbacks;
@@ -970,8 +970,4 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE
-#undef _IOS_BASE_SEEK_CUR
-#undef _IOS_BASE_SEEK_END
-
#endif /* _IOS_BASE_H */
-
diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc
index 535923981a5..3446c42a85b 100644
--- a/libstdc++-v3/include/bits/list.tcc
+++ b/libstdc++-v3/include/bits/list.tcc
@@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_M_get_Node_allocator().destroy(__tmp);
#else
- _M_get_Tp_allocator().destroy(&__tmp->_M_data);
+ _M_get_Tp_allocator().destroy(std::__addressof(__tmp->_M_data));
#endif
_M_put_node(__tmp);
}
@@ -112,6 +112,56 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
return __ret;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Tp, typename _Alloc>
+ void
+ list<_Tp, _Alloc>::
+ _M_default_append(size_type __n)
+ {
+ size_type __i = 0;
+ __try
+ {
+ for (; __i < __n; ++__i)
+ emplace_back();
+ }
+ __catch(...)
+ {
+ for (; __i; --__i)
+ pop_back();
+ __throw_exception_again;
+ }
+ }
+
+ template<typename _Tp, typename _Alloc>
+ void
+ list<_Tp, _Alloc>::
+ resize(size_type __new_size)
+ {
+ iterator __i = begin();
+ size_type __len = 0;
+ for (; __i != end() && __len < __new_size; ++__i, ++__len)
+ ;
+ if (__len == __new_size)
+ erase(__i, end());
+ else // __i == end()
+ _M_default_append(__new_size - __len);
+ }
+
+ template<typename _Tp, typename _Alloc>
+ void
+ list<_Tp, _Alloc>::
+ resize(size_type __new_size, const value_type& __x)
+ {
+ iterator __i = begin();
+ size_type __len = 0;
+ for (; __i != end() && __len < __new_size; ++__i, ++__len)
+ ;
+ if (__len == __new_size)
+ erase(__i, end());
+ else // __i == end()
+ insert(end(), __new_size - __len, __x);
+ }
+#else
template<typename _Tp, typename _Alloc>
void
list<_Tp, _Alloc>::
@@ -126,6 +176,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
else // __i == end()
insert(end(), __new_size - __len, __x);
}
+#endif
template<typename _Tp, typename _Alloc>
list<_Tp, _Alloc>&
@@ -198,7 +249,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 526. Is it undefined if a function in the standard changes
// in parameters?
- if (&*__first != &__value)
+ if (std::__addressof(*__first) != std::__addressof(__value))
_M_erase(__first);
else
__extra = __first;
diff --git a/libstdc++-v3/include/bits/locale_classes.h b/libstdc++-v3/include/bits/locale_classes.h
index 347e7612486..8a846bce0c6 100644
--- a/libstdc++-v3/include/bits/locale_classes.h
+++ b/libstdc++-v3/include/bits/locale_classes.h
@@ -402,8 +402,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
_M_remove_reference() const throw()
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
{
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
__try
{ delete this; }
__catch(...)
@@ -508,8 +511,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
_M_remove_reference() throw()
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
{
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
__try
{ delete this; }
__catch(...)
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index 2e18f7da8ed..79bfd03026d 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -1587,12 +1587,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
bool _M_allocated;
- __numpunct_cache(size_t __refs = 0) : facet(__refs),
- _M_grouping(NULL), _M_grouping_size(0), _M_use_grouping(false),
- _M_truename(NULL), _M_truename_size(0), _M_falsename(NULL),
- _M_falsename_size(0), _M_decimal_point(_CharT()),
- _M_thousands_sep(_CharT()), _M_allocated(false)
- { }
+ __numpunct_cache(size_t __refs = 0)
+ : facet(__refs), _M_grouping(0), _M_grouping_size(0),
+ _M_use_grouping(false),
+ _M_truename(0), _M_truename_size(0), _M_falsename(0),
+ _M_falsename_size(0), _M_decimal_point(_CharT()),
+ _M_thousands_sep(_CharT()), _M_allocated(false)
+ { }
~__numpunct_cache();
@@ -1657,7 +1658,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param refs Refcount to pass to the base class.
*/
explicit
- numpunct(size_t __refs = 0) : facet(__refs), _M_data(NULL)
+ numpunct(size_t __refs = 0)
+ : facet(__refs), _M_data(0)
{ _M_initialize_numpunct(); }
/**
@@ -1685,7 +1687,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/
explicit
numpunct(__c_locale __cloc, size_t __refs = 0)
- : facet(__refs), _M_data(NULL)
+ : facet(__refs), _M_data(0)
{ _M_initialize_numpunct(__cloc); }
/**
@@ -1841,7 +1843,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// For use at construction time only.
void
- _M_initialize_numpunct(__c_locale __cloc = NULL);
+ _M_initialize_numpunct(__c_locale __cloc = 0);
};
template<typename _CharT>
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 1608e2c42da..52bafd36dfe 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -1,7 +1,7 @@
// Locale support -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -56,7 +56,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const locale::facet** __caches = __loc._M_impl->_M_caches;
if (!__caches[__i])
{
- __numpunct_cache<_CharT>* __tmp = NULL;
+ __numpunct_cache<_CharT>* __tmp = 0;
__try
{
__tmp = new __numpunct_cache<_CharT>;
diff --git a/libstdc++-v3/include/bits/locale_facets_nonio.h b/libstdc++-v3/include/bits/locale_facets_nonio.h
index a25e0acd2c0..fdc810d12be 100644
--- a/libstdc++-v3/include/bits/locale_facets_nonio.h
+++ b/libstdc++-v3/include/bits/locale_facets_nonio.h
@@ -118,20 +118,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
bool _M_allocated;
__timepunct_cache(size_t __refs = 0) : facet(__refs),
- _M_date_format(NULL), _M_date_era_format(NULL), _M_time_format(NULL),
- _M_time_era_format(NULL), _M_date_time_format(NULL),
- _M_date_time_era_format(NULL), _M_am(NULL), _M_pm(NULL),
- _M_am_pm_format(NULL), _M_day1(NULL), _M_day2(NULL), _M_day3(NULL),
- _M_day4(NULL), _M_day5(NULL), _M_day6(NULL), _M_day7(NULL),
- _M_aday1(NULL), _M_aday2(NULL), _M_aday3(NULL), _M_aday4(NULL),
- _M_aday5(NULL), _M_aday6(NULL), _M_aday7(NULL), _M_month01(NULL),
- _M_month02(NULL), _M_month03(NULL), _M_month04(NULL), _M_month05(NULL),
- _M_month06(NULL), _M_month07(NULL), _M_month08(NULL), _M_month09(NULL),
- _M_month10(NULL), _M_month11(NULL), _M_month12(NULL), _M_amonth01(NULL),
- _M_amonth02(NULL), _M_amonth03(NULL), _M_amonth04(NULL),
- _M_amonth05(NULL), _M_amonth06(NULL), _M_amonth07(NULL),
- _M_amonth08(NULL), _M_amonth09(NULL), _M_amonth10(NULL),
- _M_amonth11(NULL), _M_amonth12(NULL), _M_allocated(false)
+ _M_date_format(0), _M_date_era_format(0), _M_time_format(0),
+ _M_time_era_format(0), _M_date_time_format(0),
+ _M_date_time_era_format(0), _M_am(0), _M_pm(0),
+ _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0),
+ _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0),
+ _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0),
+ _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0),
+ _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0),
+ _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0),
+ _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0),
+ _M_amonth02(0), _M_amonth03(0), _M_amonth04(0),
+ _M_amonth05(0), _M_amonth06(0), _M_amonth07(0),
+ _M_amonth08(0), _M_amonth09(0), _M_amonth10(0),
+ _M_amonth11(0), _M_amonth12(0), _M_allocated(false)
{ }
~__timepunct_cache();
@@ -313,7 +313,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// For use at construction time only.
void
- _M_initialize_timepunct(__c_locale __cloc = NULL);
+ _M_initialize_timepunct(__c_locale __cloc = 0);
};
template<typename _CharT>
@@ -883,11 +883,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
bool _M_allocated;
__moneypunct_cache(size_t __refs = 0) : facet(__refs),
- _M_grouping(NULL), _M_grouping_size(0), _M_use_grouping(false),
+ _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false),
_M_decimal_point(_CharT()), _M_thousands_sep(_CharT()),
- _M_curr_symbol(NULL), _M_curr_symbol_size(0),
- _M_positive_sign(NULL), _M_positive_sign_size(0),
- _M_negative_sign(NULL), _M_negative_sign_size(0),
+ _M_curr_symbol(0), _M_curr_symbol_size(0),
+ _M_positive_sign(0), _M_positive_sign_size(0),
+ _M_negative_sign(0), _M_negative_sign_size(0),
_M_frac_digits(0),
_M_pos_format(money_base::pattern()),
_M_neg_format(money_base::pattern()), _M_allocated(false)
@@ -955,7 +955,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param refs Passed to the base facet class.
*/
explicit
- moneypunct(size_t __refs = 0) : facet(__refs), _M_data(NULL)
+ moneypunct(size_t __refs = 0)
+ : facet(__refs), _M_data(0)
{ _M_initialize_moneypunct(); }
/**
@@ -983,7 +984,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/
explicit
moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
- : facet(__refs), _M_data(NULL)
+ : facet(__refs), _M_data(0)
{ _M_initialize_moneypunct(__cloc, __s); }
/**
@@ -1271,8 +1272,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// For use at construction time only.
void
- _M_initialize_moneypunct(__c_locale __cloc = NULL,
- const char* __name = NULL);
+ _M_initialize_moneypunct(__c_locale __cloc = 0,
+ const char* __name = 0);
};
template<typename _CharT, bool _Intl>
diff --git a/libstdc++-v3/include/bits/locale_facets_nonio.tcc b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
index 48a913901e7..b5c77b9d7c0 100644
--- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc
+++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
@@ -44,7 +44,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const locale::facet** __caches = __loc._M_impl->_M_caches;
if (!__caches[__i])
{
- __moneypunct_cache<_CharT, _Intl>* __tmp = NULL;
+ __moneypunct_cache<_CharT, _Intl>* __tmp = 0;
__try
{
__tmp = new __moneypunct_cache<_CharT, _Intl>;
diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h
index 91754814d8b..9329cb491db 100644
--- a/libstdc++-v3/include/bits/move.h
+++ b/libstdc++-v3/include/bits/move.h
@@ -1,6 +1,6 @@
// Move, forward and identity for C++0x + swap -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,38 +31,43 @@
#define _MOVE_H 1
#include <bits/c++config.h>
-#include <cstddef>
#include <bits/concept_check.h>
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <type_traits> // Brings in std::declval too.
-
_GLIBCXX_BEGIN_NAMESPACE(std)
- /// identity
+ // Used, in C++03 mode too, by allocators, etc.
template<typename _Tp>
- struct identity
+ inline _Tp*
+ __addressof(_Tp& __r)
{
- typedef _Tp type;
- };
+ return reinterpret_cast<_Tp*>
+ (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
+ }
+
+_GLIBCXX_END_NAMESPACE
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#include <type_traits> // Brings in std::declval too.
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
/// forward (as per N2835)
/// Forward lvalues as rvalues.
template<typename _Tp>
inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type
- forward(typename std::identity<_Tp>::type& __t)
+ forward(typename std::common_type<_Tp>::type& __t)
{ return static_cast<_Tp&&>(__t); }
/// Forward rvalues as rvalues.
template<typename _Tp>
inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type
- forward(typename std::identity<_Tp>::type&& __t)
+ forward(typename std::common_type<_Tp>::type&& __t)
{ return static_cast<_Tp&&>(__t); }
// Forward lvalues as lvalues.
template<typename _Tp>
inline typename enable_if<is_lvalue_reference<_Tp>::value, _Tp>::type
- forward(typename std::identity<_Tp>::type __t)
+ forward(typename std::common_type<_Tp>::type __t)
{ return __t; }
// Prevent forwarding rvalues as const lvalues.
@@ -81,14 +86,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
move(_Tp&& __t)
{ return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
- /// declval, defined in <type_traits>.
+ /// declval, from type_traits.
+
+ /**
+ * @brief Returns the actual address of the object or function
+ * referenced by r, even in the presence of an overloaded
+ * operator&.
+ * @param __r Reference to an object or function.
+ * @return The actual address.
+ */
+ template<typename _Tp>
+ inline _Tp*
+ addressof(_Tp& __r)
+ { return std::__addressof(__r); }
_GLIBCXX_END_NAMESPACE
-#define _GLIBCXX_MOVE(_Tp) std::move(_Tp)
+#define _GLIBCXX_MOVE(__val) std::move(__val)
#define _GLIBCXX_FORWARD(_Tp, __val) std::forward<_Tp>(__val)
#else
-#define _GLIBCXX_MOVE(_Tp) (_Tp)
+#define _GLIBCXX_MOVE(__val) (__val)
#define _GLIBCXX_FORWARD(_Tp, __val) (__val)
#endif
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
index cc950f03ae2..4c3ebe2fc65 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -28,6 +28,9 @@
* You should not attempt to use it directly.
*/
+#ifndef _RANDOM_H
+#define _RANDOM_H 1
+
#include <vector>
namespace std
@@ -1614,7 +1617,7 @@ namespace std
*/
/**
- * @addtogroup random_distributions_uniform Uniform Distributions
+ * @addtogroup random_distributions_uniform Uniform
* @ingroup random_distributions
* @{
*/
@@ -1972,7 +1975,7 @@ namespace std
/* @} */ // group random_distributions_uniform
/**
- * @addtogroup random_distributions_normal Normal Distributions
+ * @addtogroup random_distributions_normal Normal
* @ingroup random_distributions
* @{
*/
@@ -3226,7 +3229,7 @@ namespace std
/* @} */ // group random_distributions_normal
/**
- * @addtogroup random_distributions_bernoulli Bernoulli Distributions
+ * @addtogroup random_distributions_bernoulli Bernoulli
* @ingroup random_distributions
* @{
*/
@@ -3957,7 +3960,7 @@ namespace std
/* @} */ // group random_distributions_bernoulli
/**
- * @addtogroup random_distributions_poisson Poisson Distributions
+ * @addtogroup random_distributions_poisson Poisson
* @ingroup random_distributions
* @{
*/
@@ -5337,6 +5340,6 @@ namespace std
/* @} */ // group random_utilities
/* @} */ // group random
-
}
+#endif
diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
index 5a66bd6b2e2..9312038f834 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -27,6 +27,9 @@
* You should not attempt to use it directly.
*/
+#ifndef _RANDOM_TCC
+#define _RANDOM_TCC 1
+
#include <numeric> // std::accumulate and std::partial_sum
namespace std
@@ -828,27 +831,61 @@ namespace std
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __param)
{
- // XXX Must be fixed to work well for *arbitrary* __urng.max(),
- // __urng.min(), __param.b(), __param.a(). Currently works fine only
- // in the most common case __urng.max() - __urng.min() >=
- // __param.b() - __param.a(), with __urng.max() > __urng.min() >= 0.
typedef typename std::make_unsigned<typename
- _UniformRandomNumberGenerator::result_type>::type __urntype;
+ _UniformRandomNumberGenerator::result_type>::type __urngtype;
typedef typename std::make_unsigned<result_type>::type __utype;
- typedef typename std::conditional<(sizeof(__urntype) > sizeof(__utype)),
- __urntype, __utype>::type __uctype;
+ typedef typename std::conditional<(sizeof(__urngtype)
+ > sizeof(__utype)),
+ __urngtype, __utype>::type __uctype;
- result_type __ret;
+ const __uctype __urngmin = __urng.min();
+ const __uctype __urngmax = __urng.max();
+ const __uctype __urngrange = __urngmax - __urngmin;
+ const __uctype __urange
+ = __uctype(__param.b()) - __uctype(__param.a());
- const __urntype __urnmin = __urng.min();
- const __urntype __urnmax = __urng.max();
- const __urntype __urnrange = __urnmax - __urnmin;
- const __uctype __urange = __param.b() - __param.a();
- const __uctype __udenom = (__urnrange <= __urange
- ? 1 : __urnrange / (__urange + 1));
- do
- __ret = (__urntype(__urng()) - __urnmin) / __udenom;
- while (__ret > __param.b() - __param.a());
+ __uctype __ret;
+
+ if (__urngrange > __urange)
+ {
+ // downscaling
+ const __uctype __uerange = __urange + 1; // __urange can be zero
+ const __uctype __scaling = __urngrange / __uerange;
+ const __uctype __past = __uerange * __scaling;
+ do
+ __ret = __uctype(__urng()) - __urngmin;
+ while (__ret >= __past);
+ __ret /= __scaling;
+ }
+ else if (__urngrange < __urange)
+ {
+ // upscaling
+ /*
+ Note that every value in [0, urange]
+ can be written uniquely as
+
+ (urngrange + 1) * high + low
+
+ where
+
+ high in [0, urange / (urngrange + 1)]
+
+ and
+
+ low in [0, urngrange].
+ */
+ __uctype __tmp; // wraparound control
+ do
+ {
+ const __uctype __uerngrange = __urngrange + 1;
+ __tmp = (__uerngrange * operator()
+ (__urng, param_type(0, __urange / __uerngrange)));
+ __ret = __tmp + (__uctype(__urng()) - __urngmin);
+ }
+ while (__ret > __urange || __ret < __tmp);
+ }
+ else
+ __ret = __uctype(__urng()) - __urngmin;
return __ret + __param.a();
}
@@ -2781,3 +2818,5 @@ namespace std
return __sum / __tmp;
}
}
+
+#endif
diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
new file mode 100644
index 00000000000..e9bf67e499b
--- /dev/null
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -0,0 +1,102 @@
+// <range_access.h> -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/range_access.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_RANGE_ACCESS_H
+#define _GLIBCXX_RANGE_ACCESS_H 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ /**
+ * @brief Return an iterator pointing to the first element of
+ * the container.
+ * @param cont Container.
+ */
+ template<class _Container>
+ inline auto
+ begin(_Container& __cont) -> decltype(__cont.begin())
+ { return __cont.begin(); }
+
+ /**
+ * @brief Return an iterator pointing to the first element of
+ * the const container.
+ * @param cont Container.
+ */
+ template<class _Container>
+ inline auto
+ begin(const _Container& __cont) -> decltype(__cont.begin())
+ { return __cont.begin(); }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element of
+ * the container.
+ * @param cont Container.
+ */
+ template<class _Container>
+ inline auto
+ end(_Container& __cont) -> decltype(__cont.end())
+ { return __cont.end(); }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element of
+ * the const container.
+ * @param cont Container.
+ */
+ template<class _Container>
+ inline auto
+ end(const _Container& __cont) -> decltype(__cont.end())
+ { return __cont.end(); }
+
+ /**
+ * @brief Return an iterator pointing to the first element of the array.
+ * @param arr Array.
+ */
+ template<class _Tp, size_t _Nm>
+ inline _Tp*
+ begin(_Tp (&__arr)[_Nm])
+ { return __arr; }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element
+ * of the array.
+ * @param arr Array.
+ */
+ template<class _Tp, size_t _Nm>
+ inline _Tp*
+ end(_Tp (&__arr)[_Nm])
+ { return __arr + _Nm; }
+
+_GLIBCXX_END_NAMESPACE
+
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
+#endif // _GLIBCXX_RANGE_ACCESS_H
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
new file mode 100644
index 00000000000..bbec88cb7ff
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex.h
@@ -0,0 +1,2428 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+
+/**
+ * @defgroup regex Regular Expressions
+ * A facility for performing regular expression pattern matching.
+ */
+ //@{
+
+ // [7.7] Class regex_traits
+ /**
+ * @brief Describes aspects of a regular expression.
+ *
+ * A regular expression traits class that satisfies the requirements of
+ * section [28.7].
+ *
+ * The class %regex is parameterized around a set of related types and
+ * functions used to complete the definition of its semantics. This class
+ * satisfies the requirements of such a traits class.
+ */
+ template<typename _Ch_type>
+ struct regex_traits
+ {
+ public:
+ typedef _Ch_type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::locale locale_type;
+ typedef std::ctype_base::mask char_class_type;
+
+ public:
+ /**
+ * @brief Constructs a default traits object.
+ */
+ regex_traits()
+ { }
+
+ /**
+ * @brief Gives the length of a C-style string starting at @p __p.
+ *
+ * @param __p a pointer to the start of a character sequence.
+ *
+ * @returns the number of characters between @p *__p and the first
+ * default-initialized value of type @p char_type. In other words, uses
+ * the C-string algorithm for determining the length of a sequence of
+ * characters.
+ */
+ static std::size_t
+ length(const char_type* __p)
+ { return string_type::traits_type::length(__p); }
+
+ /**
+ * @brief Performs the identity translation.
+ *
+ * @param c A character to the locale-specific character set.
+ *
+ * @returns c.
+ */
+ char_type
+ translate(char_type __c) const
+ { return __c; }
+
+ /**
+ * @brief Translates a character into a case-insensitive equivalent.
+ *
+ * @param c A character to the locale-specific character set.
+ *
+ * @returns the locale-specific lower-case equivalent of c.
+ * @throws std::bad_cast if the imbued locale does not support the ctype
+ * facet.
+ */
+ char_type
+ translate_nocase(char_type __c) const
+ {
+ using std::ctype;
+ using std::use_facet;
+ return use_facet<ctype<char_type> >(_M_locale).tolower(__c);
+ }
+
+ /**
+ * @brief Gets a sort key for a character sequence.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ *
+ * Returns a sort key for the character sequence designated by the
+ * iterator range [F1, F2) such that if the character sequence [G1, G2)
+ * sorts before the character sequence [H1, H2) then
+ * v.transform(G1, G2) < v.transform(H1, H2).
+ *
+ * What this really does is provide a more efficient way to compare a
+ * string to multiple other strings in locales with fancy collation
+ * rules and equivalence classes.
+ *
+ * @returns a locale-specific sort key equivalent to the input range.
+ *
+ * @throws std::bad_cast if the current locale does not have a collate
+ * facet.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ transform(_Fwd_iter __first, _Fwd_iter __last) const
+ {
+ using std::collate;
+ using std::use_facet;
+ const collate<_Ch_type>& __c(use_facet<
+ collate<_Ch_type> >(_M_locale));
+ string_type __s(__first, __last);
+ return __c.transform(__s.data(), __s.data() + __s.size());
+ }
+
+ /**
+ * @brief Gets a sort key for a character sequence, independant of case.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ *
+ * Effects: if typeid(use_facet<collate<_Ch_type> >) ==
+ * typeid(collate_byname<_Ch_type>) and the form of the sort key
+ * returned by collate_byname<_Ch_type>::transform(first, last) is known
+ * and can be converted into a primary sort key then returns that key,
+ * otherwise returns an empty string.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ transform_primary(_Fwd_iter __first, _Fwd_iter __last) const
+ { return string_type(); }
+
+ /**
+ * @brief Gets a collation element by name.
+ *
+ * @param first beginning of the collation element name.
+ * @param last one-past-the-end of the collation element name.
+ *
+ * @returns a sequence of one or more characters that represents the
+ * collating element consisting of the character sequence designated by
+ * the iterator range [first, last). Returns an empty string if the
+ * character sequence is not a valid collating element.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
+ { return string_type(); }
+
+ /**
+ * @brief Maps one or more characters to a named character
+ * classification.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ * @param icase ignores the case of the classification name.
+ *
+ * @returns an unspecified value that represents the character
+ * classification named by the character sequence designated by the
+ * iterator range [first, last). If @p icase is true, the returned mask
+ * identifies the classification regardless of the case of the characters
+ * to be matched (for example, [[:lower:]] is the same as [[:alpha:]]),
+ * otherwise a case-dependant classification is returned. The value
+ * returned shall be independent of the case of the characters in the
+ * character sequence. If the name is not recognized then returns a value
+ * that compares equal to 0.
+ *
+ * At least the following names (or their wide-character equivalent) are
+ * supported.
+ * - d
+ * - w
+ * - s
+ * - alnum
+ * - alpha
+ * - blank
+ * - cntrl
+ * - digit
+ * - graph
+ * - lower
+ * - print
+ * - punct
+ * - space
+ * - upper
+ * - xdigit
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ char_class_type
+ lookup_classname(_Fwd_iter __first, _Fwd_iter __last,
+ bool __icase = false) const
+ { return 0; }
+
+ /**
+ * @brief Determines if @p c is a member of an identified class.
+ *
+ * @param c a character.
+ * @param f a class type (as returned from lookup_classname).
+ *
+ * @returns true if the character @p c is a member of the classification
+ * represented by @p f, false otherwise.
+ *
+ * @throws std::bad_cast if the current locale does not have a ctype
+ * facet.
+ */
+ bool
+ isctype(_Ch_type __c, char_class_type __f) const;
+
+ /**
+ * @brief Converts a digit to an int.
+ *
+ * @param ch a character representing a digit.
+ * @param radix the radix if the numeric conversion (limited to 8, 10,
+ * or 16).
+ *
+ * @returns the value represented by the digit ch in base radix if the
+ * character ch is a valid digit in base radix; otherwise returns -1.
+ */
+ int
+ value(_Ch_type __ch, int __radix) const;
+
+ /**
+ * @brief Imbues the regex_traits object with a copy of a new locale.
+ *
+ * @param loc A locale.
+ *
+ * @returns a copy of the previous locale in use by the regex_traits
+ * object.
+ *
+ * @note Calling imbue with a different locale than the one currently in
+ * use invalidates all cached data held by *this.
+ */
+ locale_type
+ imbue(locale_type __loc)
+ {
+ std::swap(_M_locale, __loc);
+ return __loc;
+ }
+
+ /**
+ * @brief Gets a copy of the current locale in use by the regex_traits
+ * object.
+ */
+ locale_type
+ getloc() const
+ { return _M_locale; }
+
+ protected:
+ locale_type _M_locale;
+ };
+
+ template<typename _Ch_type>
+ bool
+ regex_traits<_Ch_type>::
+ isctype(_Ch_type __c, char_class_type __f) const
+ {
+ using std::ctype;
+ using std::use_facet;
+ const ctype<_Ch_type>& __ctype(use_facet<
+ ctype<_Ch_type> >(_M_locale));
+
+ if (__ctype.is(__c, __f))
+ return true;
+
+ // special case of underscore in [[:w:]]
+ if (__c == __ctype.widen('_'))
+ {
+ const char __wb[] = "w";
+ char_class_type __wt = this->lookup_classname(__wb,
+ __wb + sizeof(__wb));
+ if (__f | __wt)
+ return true;
+ }
+
+ // special case of [[:space:]] in [[:blank:]]
+ if (__ctype.is(std::ctype_base::space, __c))
+ {
+ const char __bb[] = "blank";
+ char_class_type __bt = this->lookup_classname(__bb,
+ __bb + sizeof(__bb));
+ if (__f | __bt)
+ return true;
+ }
+
+ return false;
+ }
+
+ template<typename _Ch_type>
+ int
+ regex_traits<_Ch_type>::
+ value(_Ch_type __ch, int __radix) const
+ {
+ std::basic_istringstream<_Ch_type> __is(string_type(1, __ch));
+ int __v;
+ if (__radix == 8)
+ __is >> std::oct;
+ else if (__radix == 16)
+ __is >> std::hex;
+ __is >> __v;
+ return __is.fail() ? -1 : __v;
+ }
+
+ // [7.8] Class basic_regex
+ /**
+ * Objects of specializations of this class represent regular expressions
+ * constructed from sequences of character type @p _Ch_type.
+ *
+ * Storage for the regular expression is allocated and deallocated as
+ * necessary by the member functions of this class.
+ */
+ template<typename _Ch_type, typename _Rx_traits = regex_traits<_Ch_type> >
+ class basic_regex
+ {
+ public:
+ // types:
+ typedef _Ch_type value_type;
+ typedef regex_constants::syntax_option_type flag_type;
+ typedef typename _Rx_traits::locale_type locale_type;
+ typedef typename _Rx_traits::string_type string_type;
+
+ /**
+ * @name Constants
+ * std [28.8.1](1)
+ * @todo These should be constexpr.
+ */
+ //@{
+ static const regex_constants::syntax_option_type icase
+ = regex_constants::icase;
+ static const regex_constants::syntax_option_type nosubs
+ = regex_constants::nosubs;
+ static const regex_constants::syntax_option_type optimize
+ = regex_constants::optimize;
+ static const regex_constants::syntax_option_type collate
+ = regex_constants::collate;
+ static const regex_constants::syntax_option_type ECMAScript
+ = regex_constants::ECMAScript;
+ static const regex_constants::syntax_option_type basic
+ = regex_constants::basic;
+ static const regex_constants::syntax_option_type extended
+ = regex_constants::extended;
+ static const regex_constants::syntax_option_type awk
+ = regex_constants::awk;
+ static const regex_constants::syntax_option_type grep
+ = regex_constants::grep;
+ static const regex_constants::syntax_option_type egrep
+ = regex_constants::egrep;
+ //@}
+
+ // [7.8.2] construct/copy/destroy
+ /**
+ * Constructs a basic regular expression that does not match any
+ * character sequence.
+ */
+ basic_regex()
+ : _M_flags(regex_constants::ECMAScript),
+ _M_automaton(__regex::__compile<const _Ch_type*, _Rx_traits>(0, 0,
+ _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Constructs a basic regular expression from the sequence
+ * [p, p + char_traits<_Ch_type>::length(p)) interpreted according to the
+ * flags in @p f.
+ *
+ * @param p A pointer to the start of a C-style null-terminated string
+ * containing a regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ explicit
+ basic_regex(const _Ch_type* __p,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f),
+ _M_automaton(__regex::__compile(__p, __p + _Rx_traits::length(__p),
+ _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Constructs a basic regular expression from the sequence
+ * [p, p + len) interpreted according to the flags in @p f.
+ *
+ * @param p A pointer to the start of a string containing a regular
+ * expression.
+ * @param len The length of the string containing the regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ basic_regex(const _Ch_type* __p, std::size_t __len, flag_type __f)
+ : _M_flags(__f),
+ _M_automaton(__regex::__compile(__p, __p + __len, _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Copy-constructs a basic regular expression.
+ *
+ * @param rhs A @p regex object.
+ */
+ basic_regex(const basic_regex& __rhs)
+ : _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
+ _M_automaton(__rhs._M_automaton)
+ { }
+
+ /**
+ * @brief Move-constructs a basic regular expression.
+ *
+ * @param rhs A @p regex object.
+ */
+ basic_regex(const basic_regex&& __rhs)
+ : _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
+ _M_automaton(std::move(__rhs._M_automaton))
+ { }
+
+ /**
+ * @brief Constructs a basic regular expression from the string
+ * @p s interpreted according to the flags in @p f.
+ *
+ * @param s A string containing a regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p s is not a valid regular expression.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc>
+ explicit
+ basic_regex(const std::basic_string<_Ch_type, _Ch_traits,
+ _Ch_alloc>& __s,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f),
+ _M_automaton(__regex::__compile(__s.begin(), __s.end(),
+ _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Constructs a basic regular expression from the range
+ * [first, last) interpreted according to the flags in @p f.
+ *
+ * @param first The start of a range containing a valid regular
+ * expression.
+ * @param last The end of a range containing a valid regular
+ * expression.
+ * @param f The format flags of the regular expression.
+ *
+ * @throws regex_error if @p [first, last) is not a valid regular
+ * expression.
+ */
+ template<typename _InputIterator>
+ basic_regex(_InputIterator __first, _InputIterator __last,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f),
+ _M_automaton(__regex::__compile(__first, __last, _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Constructs a basic regular expression from an initializer list.
+ *
+ * @param l The initializer list.
+ * @param f The format flags of the regular expression.
+ *
+ * @throws regex_error if @p l is not a valid regular expression.
+ */
+ basic_regex(initializer_list<_Ch_type> __l,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f),
+ _M_automaton(__regex::__compile(__l.begin(), __l.end(),
+ _M_traits, _M_flags))
+ { }
+
+ /**
+ * @brief Destroys a basic regular expression.
+ */
+ ~basic_regex()
+ { }
+
+ /**
+ * @brief Assigns one regular expression to another.
+ */
+ basic_regex&
+ operator=(const basic_regex& __rhs)
+ { return this->assign(__rhs); }
+
+ /**
+ * @brief Move-assigns one regular expression to another.
+ */
+ basic_regex&
+ operator=(basic_regex&& __rhs)
+ { return this->assign(std::move(__rhs)); }
+
+ /**
+ * @brief Replaces a regular expression with a new one constructed from
+ * a C-style null-terminated string.
+ *
+ * @param A pointer to the start of a null-terminated C-style string
+ * containing a regular expression.
+ */
+ basic_regex&
+ operator=(const _Ch_type* __p)
+ { return this->assign(__p, flags()); }
+
+ /**
+ * @brief Replaces a regular expression with a new one constructed from
+ * a string.
+ *
+ * @param A pointer to a string containing a regular expression.
+ */
+ template<typename _Ch_typeraits, typename _Allocator>
+ basic_regex&
+ operator=(const basic_string<_Ch_type, _Ch_typeraits, _Allocator>& __s)
+ { return this->assign(__s, flags()); }
+
+ // [7.8.3] assign
+ /**
+ * @brief the real assignment operator.
+ *
+ * @param rhs Another regular expression object.
+ */
+ basic_regex&
+ assign(const basic_regex& __rhs)
+ {
+ basic_regex __tmp(__rhs);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ /**
+ * @brief The move-assignment operator.
+ *
+ * @param rhs Another regular expression object.
+ */
+ basic_regex&
+ assign(basic_regex&& __rhs)
+ {
+ basic_regex __tmp(std::move(__rhs));
+ this->swap(__tmp);
+ return *this;
+ }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * C-style null-terminated string containing a regular expression
+ * pattern.
+ *
+ * @param p A pointer to a C-style null-terminated string containing
+ * a regular expression pattern.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ basic_regex&
+ assign(const _Ch_type* __p,
+ flag_type __flags = regex_constants::ECMAScript)
+ { return this->assign(string_type(__p), __flags); }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * C-style string containing a regular expression pattern.
+ *
+ * @param p A pointer to a C-style string containing a
+ * regular expression pattern.
+ * @param len The length of the regular expression pattern string.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ basic_regex&
+ assign(const _Ch_type* __p, std::size_t __len, flag_type __flags)
+ { return this->assign(string_type(__p, __len), __flags); }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * string containing a regular expression pattern.
+ *
+ * @param s A string containing a regular expression pattern.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ template<typename _Ch_typeraits, typename _Allocator>
+ basic_regex&
+ assign(const basic_string<_Ch_type, _Ch_typeraits, _Allocator>& __s,
+ flag_type __f = regex_constants::ECMAScript)
+ {
+ basic_regex __tmp(__s, __f);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object.
+ *
+ * @param first The start of a range containing a valid regular
+ * expression.
+ * @param last The end of a range containing a valid regular
+ * expression.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * the object remains unchanged.
+ */
+ template<typename _InputIterator>
+ basic_regex&
+ assign(_InputIterator __first, _InputIterator __last,
+ flag_type __flags = regex_constants::ECMAScript)
+ { return this->assign(string_type(__first, __last), __flags); }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object.
+ *
+ * @param l An initializer list representing a regular expression.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if @p l does not contain a valid regular
+ * expression pattern interpreted according to @p flags. If regex_error
+ * is thrown, the object remains unchanged.
+ */
+ basic_regex&
+ assign(initializer_list<_Ch_type> __l,
+ flag_type __f = regex_constants::ECMAScript)
+ { return this->assign(__l.begin(), __l.end(), __f); }
+
+ // [7.8.4] const operations
+ /**
+ * @brief Gets the number of marked subexpressions within the regular
+ * expression.
+ */
+ unsigned int
+ mark_count() const
+ { return _M_automaton->_M_sub_count() - 1; }
+
+ /**
+ * @brief Gets the flags used to construct the regular expression
+ * or in the last call to assign().
+ */
+ flag_type
+ flags() const
+ { return _M_flags; }
+
+ // [7.8.5] locale
+ /**
+ * @brief Imbues the regular expression object with the given locale.
+ *
+ * @param loc A locale.
+ */
+ locale_type
+ imbue(locale_type __loc)
+ { return _M_traits.imbue(__loc); }
+
+ /**
+ * @brief Gets the locale currently imbued in the regular expression
+ * object.
+ */
+ locale_type
+ getloc() const
+ { return _M_traits.getloc(); }
+
+ // [7.8.6] swap
+ /**
+ * @brief Swaps the contents of two regular expression objects.
+ *
+ * @param rhs Another regular expression object.
+ */
+ void
+ swap(basic_regex& __rhs)
+ {
+ std::swap(_M_flags, __rhs._M_flags);
+ std::swap(_M_traits, __rhs._M_traits);
+ std::swap(_M_automaton, __rhs._M_automaton);
+ }
+
+#ifdef _GLIBCXX_DEBUG
+ void
+ _M_dot(std::ostream& __ostr)
+ { _M_automaton->_M_dot(__ostr); }
+#endif
+
+ const __regex::_AutomatonPtr&
+ _M_get_automaton() const
+ { return _M_automaton; }
+
+ protected:
+ flag_type _M_flags;
+ _Rx_traits _M_traits;
+ __regex::_AutomatonPtr _M_automaton;
+ };
+
+ /** @brief Standard regular expressions. */
+ typedef basic_regex<char> regex;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ /** @brief Standard wide-character regular expressions. */
+ typedef basic_regex<wchar_t> wregex;
+#endif
+
+
+ // [7.8.6] basic_regex swap
+ /**
+ * @brief Swaps the contents of two regular expression objects.
+ * @param lhs First regular expression.
+ * @param rhs Second regular expression.
+ */
+ template<typename _Ch_type, typename _Rx_traits>
+ inline void
+ swap(basic_regex<_Ch_type, _Rx_traits>& __lhs,
+ basic_regex<_Ch_type, _Rx_traits>& __rhs)
+ { __lhs.swap(__rhs); }
+
+
+ // [7.9] Class template sub_match
+ /**
+ * A sequence of characters matched by a particular marked sub-expression.
+ *
+ * An object of this class is essentially a pair of iterators marking a
+ * matched subexpression within a regular expression pattern match. Such
+ * objects can be converted to and compared with std::basic_string objects
+ * of a similar base character type as the pattern matched by the regular
+ * expression.
+ *
+ * The iterators that make up the pair are the usual half-open interval
+ * referencing the actual original pattern matched.
+ */
+ template<typename _BiIter>
+ class sub_match : public std::pair<_BiIter, _BiIter>
+ {
+ public:
+ typedef typename iterator_traits<_BiIter>::value_type value_type;
+ typedef typename iterator_traits<_BiIter>::difference_type
+ difference_type;
+ typedef _BiIter iterator;
+ typedef std::basic_string<value_type> string_type;
+
+ public:
+ bool matched;
+
+ /**
+ * Gets the length of the matching sequence.
+ */
+ difference_type
+ length() const
+ { return this->matched ? std::distance(this->first, this->second) : 0; }
+
+ /**
+ * @brief Gets the matching sequence as a string.
+ *
+ * @returns the matching sequence as a string.
+ *
+ * This is the implicit conversion operator. It is identical to the
+ * str() member function except that it will want to pop up in
+ * unexpected places and cause a great deal of confusion and cursing
+ * from the unwary.
+ */
+ operator string_type() const
+ {
+ return this->matched
+ ? string_type(this->first, this->second)
+ : string_type();
+ }
+
+ /**
+ * @brief Gets the matching sequence as a string.
+ *
+ * @returns the matching sequence as a string.
+ */
+ string_type
+ str() const
+ {
+ return this->matched
+ ? string_type(this->first, this->second)
+ : string_type();
+ }
+
+ /**
+ * @brief Compares this and another matched sequence.
+ *
+ * @param s Another matched sequence to compare to this one.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const sub_match& __s) const
+ { return this->str().compare(__s.str()); }
+
+ /**
+ * @brief Compares this sub_match to a string.
+ *
+ * @param s A string to compare to this sub_match.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const string_type& __s) const
+ { return this->str().compare(__s); }
+
+ /**
+ * @brief Compares this sub_match to a C-style string.
+ *
+ * @param s A C-style string to compare to this sub_match.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const value_type* __s) const
+ { return this->str().compare(__s); }
+ };
+
+
+ /** @brief Standard regex submatch over a C-style null-terminated string. */
+ typedef sub_match<const char*> csub_match;
+ /** @brief Standard regex submatch over a standard string. */
+ typedef sub_match<string::const_iterator> ssub_match;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ /** @brief Regex submatch over a C-style null-terminated wide string. */
+ typedef sub_match<const wchar_t*> wcsub_match;
+ /** @brief Regex submatch over a standard wide string. */
+ typedef sub_match<wstring::const_iterator> wssub_match;
+#endif
+
+ // [7.9.2] sub_match non-member operators
+
+ /**
+ * @brief Tests the equivalence of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator==(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) == 0; }
+
+ /**
+ * @brief Tests the inequivalence of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator!=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) != 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator<(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) < 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator<=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) <= 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator>=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) >= 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator>(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) > 0; }
+
+ /**
+ * @brief Tests the equivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator==(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator!=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator<(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator>(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator>=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator<=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Tests the equivalence of a C string and a regular expression
+ * submatch.
+ * @param lhs A C string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of an iterator value and a regular
+ * expression submatch.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A pointer to a string?
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A pointer to a string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Tests the equivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Inserts a matched string into an output stream.
+ *
+ * @param os The output stream.
+ * @param m A submatch string.
+ *
+ * @returns the output stream with the submatch string inserted.
+ */
+ template<typename _Ch_type, typename _Ch_traits, typename _Bi_iter>
+ inline
+ basic_ostream<_Ch_type, _Ch_traits>&
+ operator<<(basic_ostream<_Ch_type, _Ch_traits>& __os,
+ const sub_match<_Bi_iter>& __m)
+ { return __os << __m.str(); }
+
+ // [7.10] Class template match_results
+
+ /*
+ * Special sub_match object representing an unmatched sub-expression.
+ */
+ template<typename _Bi_iter>
+ inline const sub_match<_Bi_iter>&
+ __unmatched_sub()
+ {
+ static const sub_match<_Bi_iter> __unmatched = sub_match<_Bi_iter>();
+ return __unmatched;
+ }
+
+ /**
+ * @brief The results of a match or search operation.
+ *
+ * A collection of character sequences representing the result of a regular
+ * expression match. Storage for the collection is allocated and freed as
+ * necessary by the member functions of class template match_results.
+ *
+ * This class satisfies the Sequence requirements, with the exception that
+ * only the operations defined for a const-qualified Sequence are supported.
+ *
+ * The sub_match object stored at index 0 represents sub-expression 0, i.e.
+ * the whole match. In this case the %sub_match member matched is always true.
+ * The sub_match object stored at index n denotes what matched the marked
+ * sub-expression n within the matched expression. If the sub-expression n
+ * participated in a regular expression match then the %sub_match member
+ * matched evaluates to true, and members first and second denote the range
+ * of characters [first, second) which formed that match. Otherwise matched
+ * is false, and members first and second point to the end of the sequence
+ * that was searched.
+ *
+ * @nosubgrouping
+ */
+ template<typename _Bi_iter,
+ typename _Allocator = allocator<sub_match<_Bi_iter> > >
+ class match_results
+ : private std::vector<std::sub_match<_Bi_iter>, _Allocator>
+ {
+ private:
+ /*
+ * The vector base is empty if this does not represent a successful match.
+ * Otherwise it contains n+3 elements where n is the number of marked
+ * sub-expressions:
+ * [0] entire match
+ * [1] 1st marked subexpression
+ * ...
+ * [n] nth marked subexpression
+ * [n+1] prefix
+ * [n+2] suffix
+ */
+ typedef std::vector<std::sub_match<_Bi_iter>, _Allocator>
+ _Base_type;
+
+ public:
+ /**
+ * @name 10.? Public Types
+ */
+ //@{
+ typedef sub_match<_Bi_iter> value_type;
+ typedef const value_type& const_reference;
+ typedef const_reference reference;
+ typedef typename _Base_type::const_iterator const_iterator;
+ typedef const_iterator iterator;
+ typedef typename std::iterator_traits<_Bi_iter>::difference_type
+ difference_type;
+ /* TODO: needs allocator_traits */
+ typedef typename _Allocator::size_type size_type;
+ typedef _Allocator allocator_type;
+ typedef typename std::iterator_traits<_Bi_iter>::value_type
+ char_type;
+ typedef std::basic_string<char_type> string_type;
+ //@}
+
+ public:
+ /**
+ * @name 10.1 Construction, Copying, and Destruction
+ */
+ //@{
+
+ /**
+ * @brief Constructs a default %match_results container.
+ * @post size() returns 0 and str() returns an empty string.
+ */
+ explicit
+ match_results(const _Allocator& __a = _Allocator())
+ : _Base_type(__a)
+ { }
+
+ /**
+ * @brief Copy constructs a %match_results.
+ */
+ match_results(const match_results& __rhs)
+ : _Base_type(__rhs)
+ { }
+
+ /**
+ * @brief Assigns rhs to *this.
+ */
+ match_results&
+ operator=(const match_results __rhs)
+ {
+ match_results(__rhs).swap(*this);
+ return *this;
+ }
+
+ /**
+ * @brief Destroys a %match_results object.
+ */
+ ~match_results()
+ { }
+
+ //@}
+
+ /**
+ * @name 10.2 Size
+ */
+ //@{
+
+ /**
+ * @brief Gets the number of matches and submatches.
+ *
+ * The number of matches for a given regular expression will be either 0
+ * if there was no match or mark_count() + 1 if a match was successful.
+ * Some matches may be empty.
+ *
+ * @returns the number of matches found.
+ */
+ size_type
+ size() const
+ {
+ size_type __size = _Base_type::size();
+ return (__size && _Base_type::operator[](0).matched) ? __size - 2 : 0;
+ }
+
+ size_type
+ max_size() const
+ { return _Base_type::max_size(); }
+
+ /**
+ * @brief Indicates if the %match_results contains no results.
+ * @retval true The %match_results object is empty.
+ * @retval false The %match_results object is not empty.
+ */
+ bool
+ empty() const
+ { return _Base_type::empty(); }
+
+ //@}
+
+ /**
+ * @name 10.3 Element Access
+ */
+ //@{
+
+ /**
+ * @brief Gets the length of the indicated submatch.
+ * @param sub indicates the submatch.
+ *
+ * This function returns the length of the indicated submatch, or the
+ * length of the entire match if @p sub is zero (the default).
+ */
+ difference_type
+ length(size_type __sub = 0) const
+ { return this[__sub].length(); }
+
+ /**
+ * @brief Gets the offset of the beginning of the indicated submatch.
+ * @param sub indicates the submatch.
+ *
+ * This function returns the offset from the beginning of the target
+ * sequence to the beginning of the submatch, unless the value of @p sub
+ * is zero (the default), in which case this function returns the offset
+ * from the beginning of the target sequence to the beginning of the
+ * match.
+ *
+ * Returns -1 if @p sub is out of range.
+ */
+ difference_type
+ position(size_type __sub = 0) const
+ {
+ return __sub < size() ? std::distance(this->prefix().first,
+ (*this)[__sub].first) : -1;
+ }
+
+ /**
+ * @brief Gets the match or submatch converted to a string type.
+ * @param sub indicates the submatch.
+ *
+ * This function gets the submatch (or match, if @p sub is zero) extracted
+ * from the target range and converted to the associated string type.
+ */
+ string_type
+ str(size_type __sub = 0) const
+ { return (*this)[__sub].str(); }
+
+ /**
+ * @brief Gets a %sub_match reference for the match or submatch.
+ * @param sub indicates the submatch.
+ *
+ * This function gets a reference to the indicated submatch, or the entire
+ * match if @p sub is zero.
+ *
+ * If @p sub >= size() then this function returns a %sub_match with a
+ * special value indicating no submatch.
+ */
+ const_reference
+ operator[](size_type __sub) const
+ {
+ return __sub < size()
+ ? _Base_type::operator[](__sub)
+ : __unmatched_sub<_Bi_iter>();
+ }
+
+ /**
+ * @brief Gets a %sub_match representing the match prefix.
+ *
+ * This function gets a reference to a %sub_match object representing the
+ * part of the target range between the start of the target range and the
+ * start of the match.
+ */
+ const_reference
+ prefix() const
+ {
+ return !empty()
+ ? _Base_type::operator[](_Base_type::size() - 2)
+ : __unmatched_sub<_Bi_iter>();
+ }
+
+ /**
+ * @brief Gets a %sub_match representing the match suffix.
+ *
+ * This function gets a reference to a %sub_match object representing the
+ * part of the target range between the end of the match and the end of
+ * the target range.
+ */
+ const_reference
+ suffix() const
+ {
+ return !empty()
+ ? _Base_type::operator[](_Base_type::size() - 1)
+ : __unmatched_sub<_Bi_iter>();
+ }
+
+ /**
+ * @brief Gets an iterator to the start of the %sub_match collection.
+ */
+ const_iterator
+ begin() const
+ { return _Base_type::begin(); }
+
+ /**
+ * @brief Gets an iterator to the start of the %sub_match collection.
+ */
+ const_iterator
+ cbegin() const
+ { return _Base_type::cbegin(); }
+
+ /**
+ * @brief Gets an iterator to one-past-the-end of the collection.
+ */
+ const_iterator
+ end() const
+ {
+ return !empty()
+ ? _Base_type::end() - 2
+ : _Base_type::end();
+ }
+
+ /**
+ * @brief Gets an iterator to one-past-the-end of the collection.
+ */
+ const_iterator
+ cend() const
+ {
+ return !empty()
+ ? _Base_type::cend() - 2
+ : _Base_type::cend();
+ }
+
+ //@}
+
+ /**
+ * @name 10.4 Formatting
+ *
+ * These functions perform formatted substitution of the matched character
+ * sequences into their target. The format specifiers and escape sequences
+ * accepted by these functions are determined by their @p flags parameter
+ * as documented above.
+ */
+ //@{
+
+ /**
+ * @todo Implement this function.
+ */
+ template<typename _Out_iter>
+ _Out_iter
+ format(_Out_iter __out, const string_type& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::format_default) const
+ { return __out; }
+
+ /**
+ * @todo Implement this function.
+ */
+ string_type
+ format(const string_type& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::format_default) const;
+
+ //@}
+
+ /**
+ * @name 10.5 Allocator
+ */
+ //@{
+
+ /**
+ * @brief Gets a copy of the allocator.
+ */
+ allocator_type
+ get_allocator() const
+ { return _Base_type::get_allocator(); }
+
+ //@}
+
+ /**
+ * @name 10.6 Swap
+ */
+ //@{
+
+ /**
+ * @brief Swaps the contents of two match_results.
+ */
+ void
+ swap(match_results& __that)
+ { _Base_type::swap(__that); }
+ //@}
+
+ private:
+ friend class __regex::_SpecializedResults<_Bi_iter, _Allocator>;
+ };
+
+ typedef match_results<const char*> cmatch;
+ typedef match_results<string::const_iterator> smatch;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef match_results<const wchar_t*> wcmatch;
+ typedef match_results<wstring::const_iterator> wsmatch;
+#endif
+
+ // match_results comparisons
+ /**
+ * @brief Compares two match_results for equality.
+ * @returns true if the two objects refer to the same match,
+ * false otherwise.
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator>
+ inline bool
+ operator==(const match_results<_Bi_iter, _Allocator>& __m1,
+ const match_results<_Bi_iter, _Allocator>& __m2);
+
+ /**
+ * @brief Compares two match_results for inequality.
+ * @returns true if the two objects do not refer to the same match,
+ * false otherwise.
+ */
+ template<typename _Bi_iter, class _Allocator>
+ inline bool
+ operator!=(const match_results<_Bi_iter, _Allocator>& __m1,
+ const match_results<_Bi_iter, _Allocator>& __m2)
+ { return !(__m1 == __m2); }
+
+ // [7.10.6] match_results swap
+ /**
+ * @brief Swaps two match results.
+ * @param lhs A match result.
+ * @param rhs A match result.
+ *
+ * The contents of the two match_results objects are swapped.
+ */
+ template<typename _Bi_iter, typename _Allocator>
+ inline void
+ swap(match_results<_Bi_iter, _Allocator>& __lhs,
+ match_results<_Bi_iter, _Allocator>& __rhs)
+ { __lhs.swap(__rhs); }
+
+ // [7.11.2] Function template regex_match
+ /**
+ * @name Matching, Searching, and Replacing
+ */
+ //@{
+
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and all of the character sequence [first, last).
+ *
+ * @param s Start of the character sequence to match.
+ * @param e One-past-the-end of the character sequence to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator,
+ typename _Ch_type, typename _Rx_traits>
+ bool
+ regex_match(_Bi_iter __s,
+ _Bi_iter __e,
+ match_results<_Bi_iter, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ __regex::_AutomatonPtr __a = __re._M_get_automaton();
+ __regex::_Automaton::_SizeT __sz = __a->_M_sub_count();
+ __regex::_SpecializedCursor<_Bi_iter> __cs(__s, __e);
+ __regex::_SpecializedResults<_Bi_iter, _Allocator> __r(__sz, __cs, __m);
+ __regex::_Grep_matcher __matcher(__cs, __r, __a, __flags);
+ return __m[0].matched;
+ }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and all of the character sequence [first, last).
+ *
+ * @param first Beginning of the character sequence to match.
+ * @param last One-past-the-end of the character sequence to match.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+ bool
+ regex_match(_Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ match_results<_Bi_iter> __what;
+ return regex_match(__first, __last, __what, __re, __flags);
+ }
+
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and a C-style null-terminated string.
+ *
+ * @param s The C-style null-terminated string to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param f Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_type, typename _Allocator, typename _Rx_traits>
+ inline bool
+ regex_match(const _Ch_type* __s,
+ match_results<const _Ch_type*, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_match(__s, __s + _Rx_traits::length(__s), __m, __re, __f); }
+
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and a string.
+ *
+ * @param s The string to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc,
+ typename _Allocator, typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+ match_results<typename basic_string<_Ch_type,
+ _Ch_traits, _Ch_alloc>::const_iterator, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_match(__s.begin(), __s.end(), __m, __re, __flags); }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and a C-style null-terminated string.
+ *
+ * @param s The C-style null-terminated string to match.
+ * @param re The regular expression.
+ * @param f Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_type, class _Rx_traits>
+ inline bool
+ regex_match(const _Ch_type* __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_match(__s, __s + _Rx_traits::length(__s), __re, __f); }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and a string.
+ *
+ * @param s [IN] The string to match.
+ * @param re [IN] The regular expression.
+ * @param flags [IN] Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_traits, typename _Str_allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_match(const basic_string<_Ch_type, _Ch_traits, _Str_allocator>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_match(__s.begin(), __s.end(), __re, __flags); }
+
+ // [7.11.3] Function template regex_search
+ /**
+ * Searches for a regular expression within a range.
+ * @param first [IN] The start of the string to search.
+ * @param last [IN] One-past-the-end of the string to search.
+ * @param m [OUT] The match results.
+ * @param re [IN] The regular expression to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ *
+ * @throws an exception of type regex_error.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(_Bi_iter __first, _Bi_iter __last,
+ match_results<_Bi_iter, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return false; }
+
+ /**
+ * Searches for a regular expression within a range.
+ * @param first [IN] The start of the string to search.
+ * @param last [IN] One-past-the-end of the string to search.
+ * @param re [IN] The regular expression to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @doctodo
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(_Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ match_results<_Bi_iter> __what;
+ return regex_search(__first, __last, __what, __re, __flags);
+ }
+
+ /**
+ * @brief Searches for a regular expression within a C-string.
+ * @param s [IN] A C-string to search for the regex.
+ * @param m [OUT] The set of regex matches.
+ * @param e [IN] The regex to search for in @p s.
+ * @param f [IN] The search flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ * @doctodo
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_type, class _Allocator, class _Rx_traits>
+ inline bool
+ regex_search(const _Ch_type* __s,
+ match_results<const _Ch_type*, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
+
+ /**
+ * @brief Searches for a regular expression within a C-string.
+ * @param s [IN] The C-string to search.
+ * @param e [IN] The regular expression to search for.
+ * @param f [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @doctodo
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(const _Ch_type* __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s, __s + _Rx_traits::length(__s), __e, __f); }
+
+ /**
+ * @brief Searches for a regular expression within a string.
+ * @param s [IN] The string to search.
+ * @param e [IN] The regular expression to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @doctodo
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_traits, typename _String_allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(const basic_string<_Ch_type, _Ch_traits,
+ _String_allocator>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_search(__s.begin(), __s.end(), __e, __flags); }
+
+ /**
+ * @brief Searches for a regular expression within a string.
+ * @param s [IN] A C++ string to search for the regex.
+ * @param m [OUT] The set of regex matches.
+ * @param e [IN] The regex to search for in @p s.
+ * @param f [IN] The search flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc,
+ typename _Allocator, typename _Ch_type,
+ typename _Rx_traits>
+ inline bool
+ regex_search(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+ match_results<typename basic_string<_Ch_type,
+ _Ch_traits, _Ch_alloc>::const_iterator, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s.begin(), __s.end(), __m, __e, __f); }
+
+ // std [28.11.4] Function template regex_replace
+ /**
+ * @doctodo
+ * @param out
+ * @param first
+ * @param last
+ * @param e
+ * @param fmt
+ * @param flags
+ *
+ * @returns out
+ * @throws an exception of type regex_error.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Out_iter, typename _Bi_iter,
+ typename _Rx_traits, typename _Ch_type>
+ inline _Out_iter
+ regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ const basic_string<_Ch_type>& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return __out; }
+
+ /**
+ * @doctodo
+ * @param s
+ * @param e
+ * @param fmt
+ * @param flags
+ *
+ * @returns a copy of string @p s with replacements.
+ *
+ * @throws an exception of type regex_error.
+ */
+ template<typename _Rx_traits, typename _Ch_type>
+ inline basic_string<_Ch_type>
+ regex_replace(const basic_string<_Ch_type>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ const basic_string<_Ch_type>& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ std::string __result;
+ regex_replace(std::back_inserter(__result),
+ __s.begin(), __s.end(), __e, __fmt, __flags);
+ return __result;
+ }
+
+ //@}
+
+ // std [28.12] Class template regex_iterator
+ /**
+ * An iterator adaptor that will provide repeated calls of regex_search over
+ * a range until no more matches remain.
+ */
+ template<typename _Bi_iter,
+ typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+ typename _Rx_traits = regex_traits<_Ch_type> >
+ class regex_iterator
+ {
+ public:
+ typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
+ typedef match_results<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ public:
+ /**
+ * @brief Provides a singular iterator, useful for indicating
+ * one-past-the-end of a range.
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator();
+
+ /**
+ * Constructs a %regex_iterator...
+ * @param a [IN] The start of a text range to search.
+ * @param b [IN] One-past-the-end of the text range to search.
+ * @param re [IN] The regular expression to match.
+ * @param m [IN] Policy flags for match rules.
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Copy constructs a %regex_iterator.
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator&
+ operator=(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ bool
+ operator==(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ bool
+ operator!=(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ const value_type&
+ operator*();
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ const value_type*
+ operator->();
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator&
+ operator++();
+
+ /**
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_iterator
+ operator++(int);
+
+ private:
+ // these members are shown for exposition only:
+ _Bi_iter begin;
+ _Bi_iter end;
+ const regex_type* pregex;
+ regex_constants::match_flag_type flags;
+ match_results<_Bi_iter> match;
+ };
+
+ typedef regex_iterator<const char*> cregex_iterator;
+ typedef regex_iterator<string::const_iterator> sregex_iterator;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef regex_iterator<const wchar_t*> wcregex_iterator;
+ typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
+#endif
+
+ // [7.12.2] Class template regex_token_iterator
+ /**
+ * Iterates over submatches in a range (or @a splits a text string).
+ *
+ * The purpose of this iterator is to enumerate all, or all specified,
+ * matches of a regular expression within a text range. The dereferenced
+ * value of an iterator of this class is a std::sub_match object.
+ */
+ template<typename _Bi_iter,
+ typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+ typename _Rx_traits = regex_traits<_Ch_type> >
+ class regex_token_iterator
+ {
+ public:
+ typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
+ typedef sub_match<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ public:
+ /**
+ * @brief Default constructs a %regex_token_iterator.
+ * @todo Implement this function.
+ *
+ * A default-constructed %regex_token_iterator is a singular iterator
+ * that will compare equal to the one-past-the-end value for any
+ * iterator of the same type.
+ */
+ regex_token_iterator();
+
+ /**
+ * Constructs a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-end of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatch [IN] Which submatch to return. There are some
+ * special values for this parameter:
+ * - -1 each enumerated subexpression does NOT
+ * match the regular expression (aka field
+ * splitting)
+ * - 0 the entire string matching the
+ * subexpression is returned for each match
+ * within the text.
+ * - >0 enumerates only the indicated
+ * subexpression from a match within the text.
+ * @param m [IN] Policy flags for match rules.
+ *
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+ int __submatch = 0,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Constructs a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-end of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatches [IN] A list of subexpressions to return for each
+ * regular expression match within the text.
+ * @param m [IN] Policy flags for match rules.
+ *
+ * @todo Implement this function.
+ * @doctodo
+ */
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+ const regex_type& __re,
+ const std::vector<int>& __submatches,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Constructs a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-end of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatches [IN] A list of subexpressions to return for each
+ * regular expression match within the text.
+ * @param m [IN] Policy flags for match rules.
+
+ * @todo Implement this function.
+ * @doctodo
+ */
+ template<std::size_t _Nm>
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+ const regex_type& __re,
+ const int (&__submatches)[_Nm],
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * @brief Copy constructs a %regex_token_iterator.
+ * @param rhs [IN] A %regex_token_iterator to copy.
+ * @todo Implement this function.
+ */
+ regex_token_iterator(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Assigns a %regex_token_iterator to another.
+ * @param rhs [IN] A %regex_token_iterator to copy.
+ * @todo Implement this function.
+ */
+ regex_token_iterator&
+ operator=(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Compares a %regex_token_iterator to another for equality.
+ * @todo Implement this function.
+ */
+ bool
+ operator==(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Compares a %regex_token_iterator to another for inequality.
+ * @todo Implement this function.
+ */
+ bool
+ operator!=(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Dereferences a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ const value_type&
+ operator*();
+
+ /**
+ * @brief Selects a %regex_token_iterator member.
+ * @todo Implement this function.
+ */
+ const value_type*
+ operator->();
+
+ /**
+ * @brief Increments a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ regex_token_iterator&
+ operator++();
+
+ /**
+ * @brief Postincrements a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ regex_token_iterator
+ operator++(int);
+
+ private: // data members for exposition only:
+ typedef regex_iterator<_Bi_iter, _Ch_type, _Rx_traits> position_iterator;
+
+ position_iterator __position;
+ const value_type* __result;
+ value_type __suffix;
+ std::size_t __n;
+ std::vector<int> __subs;
+ };
+
+ /** @brief Token iterator for C-style NULL-terminated strings. */
+ typedef regex_token_iterator<const char*> cregex_token_iterator;
+ /** @brief Token iterator for standard strings. */
+ typedef regex_token_iterator<string::const_iterator> sregex_token_iterator;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ /** @brief Token iterator for C-style NULL-terminated wide strings. */
+ typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
+ /** @brief Token iterator for standard wide-character strings. */
+ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
+#endif
+
+ //@} // group regex
+
+}
+
diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h
new file mode 100644
index 00000000000..b15807aa762
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_compiler.h
@@ -0,0 +1,1115 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_compiler.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+namespace __regex
+{
+ struct _Scanner_base
+ {
+ // FIXME: replace these constanst with constexpr
+ typedef unsigned int _StateT;
+
+ static const _StateT _S_state_at_start = 1 << 0;
+ static const _StateT _S_state_in_brace = 1 << 2;
+ static const _StateT _S_state_in_bracket = 1 << 3;
+ };
+
+ //
+ // @brief Scans an input range for regex tokens.
+ //
+ // The %_Scanner class interprets the regular expression pattern in the input
+ // range passed to its constructor as a sequence of parse tokens passed to
+ // the regular expression compiler. The sequence of tokens provided depends
+ // on the flag settings passed to the constructor: different regular
+ // expression gramars will interpret the same input pattern in syntactically
+ // different ways.
+ //
+ template<typename _InputIterator>
+ class _Scanner: public _Scanner_base
+ {
+ public:
+ typedef _InputIterator _IteratorT;
+ typedef typename std::iterator_traits<_IteratorT>::value_type _CharT;
+ typedef std::basic_string<_CharT> _StringT;
+ typedef regex_constants::syntax_option_type _FlagT;
+ typedef const std::ctype<_CharT> _CtypeT;
+
+ // Token types returned from the scanner.
+ enum _TokenT
+ {
+ _S_token_anychar,
+ _S_token_backref,
+ _S_token_bracket_begin,
+ _S_token_bracket_end,
+ _S_token_inverse_class,
+ _S_token_char_class_name,
+ _S_token_closure0,
+ _S_token_closure1,
+ _S_token_collelem_multi,
+ _S_token_collelem_single,
+ _S_token_collsymbol,
+ _S_token_comma,
+ _S_token_dash,
+ _S_token_dup_count,
+ _S_token_eof,
+ _S_token_equiv_class_name,
+ _S_token_interval_begin,
+ _S_token_interval_end,
+ _S_token_line_begin,
+ _S_token_line_end,
+ _S_token_opt,
+ _S_token_or,
+ _S_token_ord_char,
+ _S_token_quoted_char,
+ _S_token_subexpr_begin,
+ _S_token_subexpr_end,
+ _S_token_word_begin,
+ _S_token_word_end,
+ _S_token_unknown
+ };
+
+ public:
+ _Scanner(_IteratorT __begin, _IteratorT __end, _FlagT __flags,
+ std::locale __loc)
+ : _M_current(__begin) , _M_end(__end) , _M_flags(__flags),
+ _M_ctype(std::use_facet<_CtypeT>(__loc)), _M_state(_S_state_at_start)
+ { _M_advance(); }
+
+ void
+ _M_advance();
+
+ _TokenT
+ _M_token() const
+ { return _M_curToken; }
+
+ const _StringT&
+ _M_value() const
+ { return _M_curValue; }
+
+#ifdef _GLIBCXX_DEBUG
+ std::ostream&
+ _M_print(std::ostream&);
+#endif
+
+ private:
+ void
+ _M_eat_escape();
+
+ void
+ _M_scan_in_brace();
+
+ void
+ _M_scan_in_bracket();
+
+ void
+ _M_eat_charclass();
+
+ void
+ _M_eat_equivclass();
+
+ void
+ _M_eat_collsymbol();
+
+ private:
+ _IteratorT _M_current;
+ _IteratorT _M_end;
+ _FlagT _M_flags;
+ _CtypeT& _M_ctype;
+ _TokenT _M_curToken;
+ _StringT _M_curValue;
+ _StateT _M_state;
+ };
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_advance()
+ {
+ if (_M_current == _M_end)
+ {
+ _M_curToken = _S_token_eof;
+ return;
+ }
+
+ _CharT __c = *_M_current;
+ if (_M_state & _S_state_in_bracket)
+ {
+ _M_scan_in_bracket();
+ return;
+ }
+ if (_M_state & _S_state_in_brace)
+ {
+ _M_scan_in_brace();
+ return;
+ }
+ else if (_M_state & _S_state_at_start && __c == _M_ctype.widen('^'))
+ {
+ _M_curToken = _S_token_line_begin;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('$'))
+ {
+ _M_curToken = _S_token_line_end;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('.'))
+ {
+ _M_curToken = _S_token_anychar;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('*'))
+ {
+ _M_curToken = _S_token_closure0;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('+'))
+ {
+ _M_curToken = _S_token_closure1;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('|'))
+ {
+ _M_curToken = _S_token_or;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('['))
+ {
+ _M_curToken = _S_token_bracket_begin;
+ _M_state |= (_S_state_in_bracket | _S_state_at_start);
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('\\'))
+ {
+ _M_eat_escape();
+ return;
+ }
+ else if (!(_M_flags & (regex_constants::basic | regex_constants::grep)))
+ {
+ if (__c == _M_ctype.widen('('))
+ {
+ _M_curToken = _S_token_subexpr_begin;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen(')'))
+ {
+ _M_curToken = _S_token_subexpr_end;
+ ++_M_current;
+ return;
+ }
+ else if (__c == _M_ctype.widen('{'))
+ {
+ _M_curToken = _S_token_interval_begin;
+ _M_state |= _S_state_in_brace;
+ ++_M_current;
+ return;
+ }
+ }
+
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ ++_M_current;
+ }
+
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_scan_in_brace()
+ {
+ if (_M_ctype.is(_CtypeT::digit, *_M_current))
+ {
+ _M_curToken = _S_token_dup_count;
+ _M_curValue.assign(1, *_M_current);
+ ++_M_current;
+ while (_M_current != _M_end
+ && _M_ctype.is(_CtypeT::digit, *_M_current))
+ {
+ _M_curValue += *_M_current;
+ ++_M_current;
+ }
+ return;
+ }
+ else if (*_M_current == _M_ctype.widen(','))
+ {
+ _M_curToken = _S_token_comma;
+ ++_M_current;
+ return;
+ }
+ if (_M_flags & (regex_constants::basic | regex_constants::grep))
+ {
+ if (*_M_current == _M_ctype.widen('\\'))
+ _M_eat_escape();
+ }
+ else
+ {
+ if (*_M_current == _M_ctype.widen('}'))
+ {
+ _M_curToken = _S_token_interval_end;
+ _M_state &= ~_S_state_in_brace;
+ ++_M_current;
+ return;
+ }
+ }
+ }
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_scan_in_bracket()
+ {
+ if (_M_state & _S_state_at_start && *_M_current == _M_ctype.widen('^'))
+ {
+ _M_curToken = _S_token_inverse_class;
+ _M_state &= ~_S_state_at_start;
+ ++_M_current;
+ return;
+ }
+ else if (*_M_current == _M_ctype.widen('['))
+ {
+ ++_M_current;
+ if (_M_current == _M_end)
+ {
+ _M_curToken = _S_token_eof;
+ return;
+ }
+
+ if (*_M_current == _M_ctype.widen('.'))
+ {
+ _M_curToken = _S_token_collsymbol;
+ _M_eat_collsymbol();
+ return;
+ }
+ else if (*_M_current == _M_ctype.widen(':'))
+ {
+ _M_curToken = _S_token_char_class_name;
+ _M_eat_charclass();
+ return;
+ }
+ else if (*_M_current == _M_ctype.widen('='))
+ {
+ _M_curToken = _S_token_equiv_class_name;
+ _M_eat_equivclass();
+ return;
+ }
+ }
+ else if (*_M_current == _M_ctype.widen('-'))
+ {
+ _M_curToken = _S_token_dash;
+ ++_M_current;
+ return;
+ }
+ else if (*_M_current == _M_ctype.widen(']'))
+ {
+ if (!(_M_flags & regex_constants::ECMAScript)
+ || !(_M_state & _S_state_at_start))
+ {
+ // special case: only if _not_ chr first after
+ // '[' or '[^' and if not ECMAscript
+ _M_curToken = _S_token_bracket_end;
+ ++_M_current;
+ return;
+ }
+ }
+ _M_curToken = _S_token_collelem_single;
+ _M_curValue.assign(1, *_M_current);
+ ++_M_current;
+ }
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_eat_escape()
+ {
+ ++_M_current;
+ if (_M_current == _M_end)
+ {
+ _M_curToken = _S_token_eof;
+ return;
+ }
+ _CharT __c = *_M_current;
+ ++_M_current;
+
+ if (__c == _M_ctype.widen('('))
+ {
+ if (!(_M_flags & (regex_constants::basic | regex_constants::grep)))
+ {
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ }
+ else
+ _M_curToken = _S_token_subexpr_begin;
+ }
+ else if (__c == _M_ctype.widen(')'))
+ {
+ if (!(_M_flags & (regex_constants::basic | regex_constants::grep)))
+ {
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ }
+ else
+ _M_curToken = _S_token_subexpr_end;
+ }
+ else if (__c == _M_ctype.widen('{'))
+ {
+ if (!(_M_flags & (regex_constants::basic | regex_constants::grep)))
+ {
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ }
+ else
+ {
+ _M_curToken = _S_token_interval_begin;
+ _M_state |= _S_state_in_brace;
+ }
+ }
+ else if (__c == _M_ctype.widen('}'))
+ {
+ if (!(_M_flags & (regex_constants::basic | regex_constants::grep)))
+ {
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ }
+ else
+ {
+ if (!(_M_state && _S_state_in_brace))
+ __throw_regex_error(regex_constants::error_badbrace);
+ _M_state &= ~_S_state_in_brace;
+ _M_curToken = _S_token_interval_end;
+ }
+ }
+ else if (__c == _M_ctype.widen('x'))
+ {
+ ++_M_current;
+ if (_M_current == _M_end)
+ {
+ _M_curToken = _S_token_eof;
+ return;
+ }
+ if (_M_ctype.is(_CtypeT::digit, *_M_current))
+ {
+ _M_curValue.assign(1, *_M_current);
+ ++_M_current;
+ if (_M_current == _M_end)
+ {
+ _M_curToken = _S_token_eof;
+ return;
+ }
+ if (_M_ctype.is(_CtypeT::digit, *_M_current))
+ {
+ _M_curValue += *_M_current;
+ ++_M_current;
+ return;
+ }
+ }
+ }
+ else if (__c == _M_ctype.widen('^')
+ || __c == _M_ctype.widen('.')
+ || __c == _M_ctype.widen('*')
+ || __c == _M_ctype.widen('$')
+ || __c == _M_ctype.widen('\\'))
+ {
+ _M_curToken = _S_token_ord_char;
+ _M_curValue.assign(1, __c);
+ }
+ else if (_M_ctype.is(_CtypeT::digit, __c))
+ {
+ _M_curToken = _S_token_backref;
+ _M_curValue.assign(1, __c);
+ }
+ else
+ __throw_regex_error(regex_constants::error_escape);
+ }
+
+
+ // Eats a character class or throwns an exception.
+ // current point to ':' delimiter on entry, char after ']' on return
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_eat_charclass()
+ {
+ ++_M_current; // skip ':'
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_ctype);
+ for (_M_curValue.clear();
+ _M_current != _M_end && *_M_current != _M_ctype.widen(':');
+ ++_M_current)
+ _M_curValue += *_M_current;
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_ctype);
+ ++_M_current; // skip ':'
+ if (*_M_current != _M_ctype.widen(']'))
+ __throw_regex_error(regex_constants::error_ctype);
+ ++_M_current; // skip ']'
+ }
+
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_eat_equivclass()
+ {
+ ++_M_current; // skip '='
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_collate);
+ for (_M_curValue.clear();
+ _M_current != _M_end && *_M_current != _M_ctype.widen('=');
+ ++_M_current)
+ _M_curValue += *_M_current;
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_collate);
+ ++_M_current; // skip '='
+ if (*_M_current != _M_ctype.widen(']'))
+ __throw_regex_error(regex_constants::error_collate);
+ ++_M_current; // skip ']'
+ }
+
+
+ template<typename _InputIterator>
+ void
+ _Scanner<_InputIterator>::
+ _M_eat_collsymbol()
+ {
+ ++_M_current; // skip '.'
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_collate);
+ for (_M_curValue.clear();
+ _M_current != _M_end && *_M_current != _M_ctype.widen('.');
+ ++_M_current)
+ _M_curValue += *_M_current;
+ if (_M_current == _M_end)
+ __throw_regex_error(regex_constants::error_collate);
+ ++_M_current; // skip '.'
+ if (*_M_current != _M_ctype.widen(']'))
+ __throw_regex_error(regex_constants::error_collate);
+ ++_M_current; // skip ']'
+ }
+
+#ifdef _GLIBCXX_DEBUG
+ template<typename _InputIterator>
+ std::ostream&
+ _Scanner<_InputIterator>::
+ _M_print(std::ostream& ostr)
+ {
+ switch (_M_curToken)
+ {
+ case _S_token_anychar:
+ ostr << "any-character\n";
+ break;
+ case _S_token_backref:
+ ostr << "backref\n";
+ break;
+ case _S_token_bracket_begin:
+ ostr << "bracket-begin\n";
+ break;
+ case _S_token_bracket_end:
+ ostr << "bracket-end\n";
+ break;
+ case _S_token_char_class_name:
+ ostr << "char-class-name \"" << _M_curValue << "\"\n";
+ break;
+ case _S_token_closure0:
+ ostr << "closure0\n";
+ break;
+ case _S_token_closure1:
+ ostr << "closure1\n";
+ break;
+ case _S_token_collelem_multi:
+ ostr << "coll-elem-multi \"" << _M_curValue << "\"\n";
+ break;
+ case _S_token_collelem_single:
+ ostr << "coll-elem-single \"" << _M_curValue << "\"\n";
+ break;
+ case _S_token_collsymbol:
+ ostr << "collsymbol \"" << _M_curValue << "\"\n";
+ break;
+ case _S_token_comma:
+ ostr << "comma\n";
+ break;
+ case _S_token_dash:
+ ostr << "dash\n";
+ break;
+ case _S_token_dup_count:
+ ostr << "dup count: " << _M_curValue << "\n";
+ break;
+ case _S_token_eof:
+ ostr << "EOF\n";
+ break;
+ case _S_token_equiv_class_name:
+ ostr << "equiv-class-name \"" << _M_curValue << "\"\n";
+ break;
+ case _S_token_interval_begin:
+ ostr << "interval begin\n";
+ break;
+ case _S_token_interval_end:
+ ostr << "interval end\n";
+ break;
+ case _S_token_line_begin:
+ ostr << "line begin\n";
+ break;
+ case _S_token_line_end:
+ ostr << "line end\n";
+ break;
+ case _S_token_opt:
+ ostr << "opt\n";
+ break;
+ case _S_token_or:
+ ostr << "or\n";
+ break;
+ case _S_token_ord_char:
+ ostr << "ordinary character: \"" << _M_value() << "\"\n";
+ break;
+ case _S_token_quoted_char:
+ ostr << "quoted char\n";
+ break;
+ case _S_token_subexpr_begin:
+ ostr << "subexpr begin\n";
+ break;
+ case _S_token_subexpr_end:
+ ostr << "subexpr end\n";
+ break;
+ case _S_token_word_begin:
+ ostr << "word begin\n";
+ break;
+ case _S_token_word_end:
+ ostr << "word end\n";
+ break;
+ case _S_token_unknown:
+ ostr << "-- unknown token --\n";
+ break;
+ }
+ return ostr;
+ }
+#endif
+
+ // Builds an NFA from an input iterator interval.
+ template<typename _InIter, typename _TraitsT>
+ class _Compiler
+ {
+ public:
+ typedef _InIter _IterT;
+ typedef typename std::iterator_traits<_InIter>::value_type _CharT;
+ typedef std::basic_string<_CharT> _StringT;
+ typedef regex_constants::syntax_option_type _FlagT;
+
+ public:
+ _Compiler(const _InIter& __b, const _InIter& __e,
+ _TraitsT& __traits, _FlagT __flags);
+
+ const _Nfa&
+ _M_nfa() const
+ { return _M_state_store; }
+
+ private:
+ typedef _Scanner<_InIter> _ScannerT;
+ typedef typename _ScannerT::_TokenT _TokenT;
+ typedef std::stack<_StateSeq, std::vector<_StateSeq> > _StackT;
+ typedef _RangeMatcher<_InIter, _TraitsT> _RMatcherT;
+
+ // accepts a specific token or returns false.
+ bool
+ _M_match_token(_TokenT __token);
+
+ void
+ _M_disjunction();
+
+ bool
+ _M_alternative();
+
+ bool
+ _M_term();
+
+ bool
+ _M_assertion();
+
+ bool
+ _M_quantifier();
+
+ bool
+ _M_atom();
+
+ bool
+ _M_bracket_expression();
+
+ bool
+ _M_bracket_list(_RMatcherT& __matcher);
+
+ bool
+ _M_follow_list(_RMatcherT& __matcher);
+
+ bool
+ _M_follow_list2(_RMatcherT& __matcher);
+
+ bool
+ _M_expression_term(_RMatcherT& __matcher);
+
+ bool
+ _M_range_expression(_RMatcherT& __matcher);
+
+ bool
+ _M_start_range(_RMatcherT& __matcher);
+
+ bool
+ _M_collating_symbol(_RMatcherT& __matcher);
+
+ bool
+ _M_equivalence_class(_RMatcherT& __matcher);
+
+ bool
+ _M_character_class(_RMatcherT& __matcher);
+
+ int
+ _M_cur_int_value(int __radix);
+
+ private:
+ _TraitsT& _M_traits;
+ _ScannerT _M_scanner;
+ _StringT _M_cur_value;
+ _Nfa _M_state_store;
+ _StackT _M_stack;
+ };
+
+ template<typename _InIter, typename _TraitsT>
+ _Compiler<_InIter, _TraitsT>::
+ _Compiler(const _InIter& __b, const _InIter& __e, _TraitsT& __traits,
+ _Compiler<_InIter, _TraitsT>::_FlagT __flags)
+ : _M_traits(__traits), _M_scanner(__b, __e, __flags, _M_traits.getloc()),
+ _M_state_store(__flags)
+ {
+ using std::bind;
+ using std::placeholders::_1;
+ using std::placeholders::_2;
+ typedef _StartTagger<_InIter, _TraitsT> _Start;
+ typedef _EndTagger<_InIter, _TraitsT> _End;
+
+ _StateSeq __r(_M_state_store,
+ _M_state_store._M_insert_subexpr_begin(
+ bind(_Start(0), _1, _2)));
+ _M_disjunction();
+ if (!_M_stack.empty())
+ {
+ __r._M_append(_M_stack.top());
+ _M_stack.pop();
+ }
+ __r._M_append(_M_state_store.
+ _M_insert_subexpr_end(0, bind(_End(0), _1, _2)));
+ __r._M_append(_M_state_store._M_insert_accept());
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_match_token(_Compiler<_InIter, _TraitsT>::_TokenT token)
+ {
+ if (token == _M_scanner._M_token())
+ {
+ _M_cur_value = _M_scanner._M_value();
+ _M_scanner._M_advance();
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ void
+ _Compiler<_InIter, _TraitsT>::
+ _M_disjunction()
+ {
+ this->_M_alternative();
+ if (_M_match_token(_ScannerT::_S_token_or))
+ {
+ _StateSeq __alt1 = _M_stack.top(); _M_stack.pop();
+ this->_M_disjunction();
+ _StateSeq __alt2 = _M_stack.top(); _M_stack.pop();
+ _M_stack.push(_StateSeq(__alt1, __alt2));
+ }
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_alternative()
+ {
+ if (this->_M_term())
+ {
+ _StateSeq __re = _M_stack.top(); _M_stack.pop();
+ this->_M_alternative();
+ if (!_M_stack.empty())
+ {
+ __re._M_append(_M_stack.top());
+ _M_stack.pop();
+ }
+ _M_stack.push(__re);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_term()
+ {
+ if (this->_M_assertion())
+ return true;
+ if (this->_M_atom())
+ {
+ this->_M_quantifier();
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_assertion()
+ {
+ if (_M_match_token(_ScannerT::_S_token_line_begin))
+ {
+ // __m.push(_Matcher::_S_opcode_line_begin);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_line_end))
+ {
+ // __m.push(_Matcher::_S_opcode_line_end);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_word_begin))
+ {
+ // __m.push(_Matcher::_S_opcode_word_begin);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_word_end))
+ {
+ // __m.push(_Matcher::_S_opcode_word_end);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_quantifier()
+ {
+ if (_M_match_token(_ScannerT::_S_token_closure0))
+ {
+ if (_M_stack.empty())
+ __throw_regex_error(regex_constants::error_badrepeat);
+ _StateSeq __r(_M_stack.top(), -1);
+ __r._M_append(__r._M_front());
+ _M_stack.pop();
+ _M_stack.push(__r);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_closure1))
+ {
+ if (_M_stack.empty())
+ __throw_regex_error(regex_constants::error_badrepeat);
+ _StateSeq __r(_M_state_store,
+ _M_state_store.
+ _M_insert_alt(_S_invalid_state_id,
+ _M_stack.top()._M_front()));
+ _M_stack.top()._M_append(__r);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_opt))
+ {
+ if (_M_stack.empty())
+ __throw_regex_error(regex_constants::error_badrepeat);
+ _StateSeq __r(_M_stack.top(), -1);
+ _M_stack.pop();
+ _M_stack.push(__r);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_interval_begin))
+ {
+ if (_M_stack.empty())
+ __throw_regex_error(regex_constants::error_badrepeat);
+ if (!_M_match_token(_ScannerT::_S_token_dup_count))
+ __throw_regex_error(regex_constants::error_badbrace);
+ _StateSeq __r(_M_stack.top());
+ int __min_rep = _M_cur_int_value(10);
+ for (int __i = 1; __i < __min_rep; ++__i)
+ _M_stack.top()._M_append(__r._M_clone());
+ if (_M_match_token(_ScannerT::_S_token_comma))
+ if (_M_match_token(_ScannerT::_S_token_dup_count))
+ {
+ int __n = _M_cur_int_value(10) - __min_rep;
+ if (__n < 0)
+ __throw_regex_error(regex_constants::error_badbrace);
+ for (int __i = 0; __i < __n; ++__i)
+ {
+ _StateSeq __r(_M_state_store,
+ _M_state_store.
+ _M_insert_alt(_S_invalid_state_id,
+ _M_stack.top()._M_front()));
+ _M_stack.top()._M_append(__r);
+ }
+ }
+ else
+ {
+ _StateSeq __r(_M_stack.top(), -1);
+ __r._M_push_back(__r._M_front());
+ _M_stack.pop();
+ _M_stack.push(__r);
+ }
+ if (!_M_match_token(_ScannerT::_S_token_interval_end))
+ __throw_regex_error(regex_constants::error_brace);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_atom()
+ {
+ using std::bind;
+ using std::placeholders::_1;
+ using std::placeholders::_2;
+ typedef _CharMatcher<_InIter, _TraitsT> _CMatcher;
+ typedef _StartTagger<_InIter, _TraitsT> _Start;
+ typedef _EndTagger<_InIter, _TraitsT> _End;
+
+ if (_M_match_token(_ScannerT::_S_token_anychar))
+ {
+ _M_stack.push(_StateSeq(_M_state_store,
+ _M_state_store.
+ _M_insert_matcher(bind(_AnyMatcher, _1))));
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_ord_char))
+ {
+ _M_stack.push(_StateSeq
+ (_M_state_store, _M_state_store.
+ _M_insert_matcher
+ (bind(_CMatcher(_M_cur_value[0], _M_traits), _1))));
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_quoted_char))
+ {
+ // note that in the ECMA grammar, this case covers backrefs.
+ _M_stack.push(_StateSeq(_M_state_store,
+ _M_state_store.
+ _M_insert_matcher
+ (bind(_CMatcher(_M_cur_value[0], _M_traits),
+ _1))));
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_backref))
+ {
+ // __m.push(_Matcher::_S_opcode_ordchar, _M_cur_value);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_subexpr_begin))
+ {
+ int __mark = _M_state_store._M_sub_count();
+ _StateSeq __r(_M_state_store,
+ _M_state_store.
+ _M_insert_subexpr_begin(bind(_Start(__mark), _1, _2)));
+ this->_M_disjunction();
+ if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
+ __throw_regex_error(regex_constants::error_paren);
+ if (!_M_stack.empty())
+ {
+ __r._M_append(_M_stack.top());
+ _M_stack.pop();
+ }
+ __r._M_append(_M_state_store._M_insert_subexpr_end
+ (__mark, bind(_End(__mark), _1, _2)));
+ _M_stack.push(__r);
+ return true;
+ }
+ return _M_bracket_expression();
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_bracket_expression()
+ {
+ using std::bind;
+ using std::placeholders::_1;
+ if (_M_match_token(_ScannerT::_S_token_bracket_begin))
+ {
+ _RMatcherT __matcher(_M_match_token(_ScannerT::_S_token_line_begin),
+ _M_traits);
+ if (!_M_bracket_list(__matcher)
+ || !_M_match_token(_ScannerT::_S_token_bracket_end))
+ __throw_regex_error(regex_constants::error_brack);
+ _M_stack.push(_StateSeq(_M_state_store,
+ _M_state_store._M_insert_matcher
+ (bind(__matcher, _1))));
+ return true;
+ }
+ return false;
+ }
+
+ // If the dash is the last character in the bracket expression, it is not
+ // special.
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_bracket_list(_RMatcherT& __matcher)
+ {
+ if (_M_follow_list(__matcher))
+ {
+ if (_M_match_token(_ScannerT::_S_token_dash))
+ __matcher._M_add_char(_M_cur_value[0]);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_follow_list(_RMatcherT& __matcher)
+ { return _M_expression_term(__matcher) && _M_follow_list2(__matcher); }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_follow_list2(_RMatcherT& __matcher)
+ {
+ if (_M_expression_term(__matcher))
+ return _M_follow_list2(__matcher);
+ return true;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_expression_term(_RMatcherT& __matcher)
+ {
+ return (_M_collating_symbol(__matcher)
+ || _M_character_class(__matcher)
+ || _M_equivalence_class(__matcher)
+ || (_M_start_range(__matcher)
+ && _M_range_expression(__matcher)));
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_range_expression(_RMatcherT& __matcher)
+ {
+ if (!_M_collating_symbol(__matcher))
+ if (!_M_match_token(_ScannerT::_S_token_dash))
+ __throw_regex_error(regex_constants::error_range);
+ __matcher._M_make_range();
+ return true;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_start_range(_RMatcherT& __matcher)
+ { return _M_match_token(_ScannerT::_S_token_dash); }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_collating_symbol(_RMatcherT& __matcher)
+ {
+ if (_M_match_token(_ScannerT::_S_token_collelem_single))
+ {
+ __matcher._M_add_char(_M_cur_value[0]);
+ return true;
+ }
+ if (_M_match_token(_ScannerT::_S_token_collsymbol))
+ {
+ __matcher._M_add_collating_element(_M_cur_value);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_equivalence_class(_RMatcherT& __matcher)
+ {
+ if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
+ {
+ __matcher._M_add_equivalence_class(_M_cur_value);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ bool
+ _Compiler<_InIter, _TraitsT>::
+ _M_character_class(_RMatcherT& __matcher)
+ {
+ if (_M_match_token(_ScannerT::_S_token_char_class_name))
+ {
+ __matcher._M_add_character_class(_M_cur_value);
+ return true;
+ }
+ return false;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ int
+ _Compiler<_InIter, _TraitsT>::
+ _M_cur_int_value(int __radix)
+ {
+ int __v = 0;
+ for (typename _StringT::size_type __i = 0;
+ __i < _M_cur_value.length(); ++__i)
+ __v =__v * __radix + _M_traits.value(_M_cur_value[__i], __radix);
+ return __v;
+ }
+
+ template<typename _InIter, typename _TraitsT>
+ _AutomatonPtr
+ __compile(const _InIter& __b, const _InIter& __e, _TraitsT& __t,
+ regex_constants::syntax_option_type __f)
+ { return _AutomatonPtr(new _Nfa(_Compiler<_InIter, _TraitsT>(__b, __e, __t,
+ __f)._M_nfa())); }
+
+} // namespace __regex
+} // namespace std
+
+/* vim: set ts=8 sw=2 sts=2: */
diff --git a/libstdc++-v3/include/bits/regex_constants.h b/libstdc++-v3/include/bits/regex_constants.h
new file mode 100644
index 00000000000..ae462b3234f
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_constants.h
@@ -0,0 +1,299 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_constants.h
+ * @brief Constant definitions for the std regex library.
+ *
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+
+/**
+ * @namespace std::regex_constants
+ * @brief ISO C++-0x entities sub namespace for regex.
+ */
+namespace regex_constants
+{
+ /**
+ * @name 5.1 Regular Expression Syntax Options
+ */
+ //@{
+ enum __syntax_option
+ {
+ _S_icase,
+ _S_nosubs,
+ _S_optimize,
+ _S_collate,
+ _S_ECMAScript,
+ _S_basic,
+ _S_extended,
+ _S_awk,
+ _S_grep,
+ _S_egrep,
+ _S_syntax_last
+ };
+
+ /**
+ * @brief This is a bitmask type indicating how to interpret the regex.
+ *
+ * The @c syntax_option_type is implementation defined but it is valid to
+ * perform bitwise operations on these values and expect the right thing to
+ * happen.
+ *
+ * A valid value of type syntax_option_type shall have exactly one of the
+ * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
+ * %set.
+ */
+ typedef unsigned int syntax_option_type;
+
+ /**
+ * Specifies that the matching of regular expressions against a character
+ * sequence shall be performed without regard to case.
+ */
+ static const syntax_option_type icase = 1 << _S_icase;
+
+ /**
+ * Specifies that when a regular expression is matched against a character
+ * container sequence, no sub-expression matches are to be stored in the
+ * supplied match_results structure.
+ */
+ static const syntax_option_type nosubs = 1 << _S_nosubs;
+
+ /**
+ * Specifies that the regular expression engine should pay more attention to
+ * the speed with which regular expressions are matched, and less to the
+ * speed with which regular expression objects are constructed. Otherwise
+ * it has no detectable effect on the program output.
+ */
+ static const syntax_option_type optimize = 1 << _S_optimize;
+
+ /**
+ * Specifies that character ranges of the form [a-b] should be locale
+ * sensitive.
+ */
+ static const syntax_option_type collate = 1 << _S_collate;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
+ * Language Specification, Standard Ecma-262, third edition, 1999], as
+ * modified in section [28.13]. This grammar is similar to that defined
+ * in the PERL scripting language but extended with elements found in the
+ * POSIX regular expression grammar.
+ */
+ static const syntax_option_type ECMAScript = 1 << _S_ECMAScript;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
+ * Portable Operating System Interface (POSIX), Base Definitions and
+ * Headers, Section 9, Regular Expressions [IEEE, Information Technology --
+ * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+ */
+ static const syntax_option_type basic = 1 << _S_basic;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
+ * Portable Operating System Interface (POSIX), Base Definitions and Headers,
+ * Section 9, Regular Expressions.
+ */
+ static const syntax_option_type extended = 1 << _S_extended;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by POSIX utility awk in IEEE Std 1003.1-2001. This option is
+ * identical to syntax_option_type extended, except that C-style escape
+ * sequences are supported. These sequences are:
+ * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos;, &apos;,
+ * and \\ddd (where ddd is one, two, or three octal digits).
+ */
+ static const syntax_option_type awk = 1 << _S_awk;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by POSIX utility grep in IEEE Std 1003.1-2001. This option is
+ * identical to syntax_option_type basic, except that newlines are treated
+ * as whitespace.
+ */
+ static const syntax_option_type grep = 1 << _S_grep;
+
+ /**
+ * Specifies that the grammar recognized by the regular expression engine is
+ * that used by POSIX utility grep when given the -E option in
+ * IEEE Std 1003.1-2001. This option is identical to syntax_option_type
+ * extended, except that newlines are treated as whitespace.
+ */
+ static const syntax_option_type egrep = 1 << _S_egrep;
+
+ //@}
+
+ /**
+ * @name 5.2 Matching Rules
+ *
+ * Matching a regular expression against a sequence of characters [first,
+ * last) proceeds according to the rules of the grammar specified for the
+ * regular expression object, modified according to the effects listed
+ * below for any bitmask elements set.
+ *
+ */
+ //@{
+
+ enum __match_flag
+ {
+ _S_not_bol,
+ _S_not_eol,
+ _S_not_bow,
+ _S_not_eow,
+ _S_any,
+ _S_not_null,
+ _S_continuous,
+ _S_prev_avail,
+ _S_sed,
+ _S_no_copy,
+ _S_first_only,
+ _S_match_flag_last
+ };
+
+ /**
+ * @brief This is a bitmask type indicating regex matching rules.
+ *
+ * The @c match_flag_type is implementation defined but it is valid to
+ * perform bitwise operations on these values and expect the right thing to
+ * happen.
+ */
+ typedef std::bitset<_S_match_flag_last> match_flag_type;
+
+ /**
+ * The default matching rules.
+ */
+ static const match_flag_type match_default = 0;
+
+ /**
+ * The first character in the sequence [first, last) is treated as though it
+ * is not at the beginning of a line, so the character (^) in the regular
+ * expression shall not match [first, first).
+ */
+ static const match_flag_type match_not_bol = 1 << _S_not_bol;
+
+ /**
+ * The last character in the sequence [first, last) is treated as though it
+ * is not at the end of a line, so the character ($) in the regular
+ * expression shall not match [last, last).
+ */
+ static const match_flag_type match_not_eol = 1 << _S_not_eol;
+
+ /**
+ * The expression \\b is not matched against the sub-sequence
+ * [first,first).
+ */
+ static const match_flag_type match_not_bow = 1 << _S_not_bow;
+
+ /**
+ * The expression \\b should not be matched against the sub-sequence
+ * [last,last).
+ */
+ static const match_flag_type match_not_eow = 1 << _S_not_eow;
+
+ /**
+ * If more than one match is possible then any match is an acceptable
+ * result.
+ */
+ static const match_flag_type match_any = 1 << _S_any;
+
+ /**
+ * The expression does not match an empty sequence.
+ */
+ static const match_flag_type match_not_null = 1 << _S_not_null;
+
+ /**
+ * The expression only matches a sub-sequence that begins at first .
+ */
+ static const match_flag_type match_continuous = 1 << _S_continuous;
+
+ /**
+ * --first is a valid iterator position. When this flag is set then the
+ * flags match_not_bol and match_not_bow are ignored by the regular
+ * expression algorithms 7.11 and iterators 7.12.
+ */
+ static const match_flag_type match_prev_avail = 1 << _S_prev_avail;
+
+ /**
+ * When a regular expression match is to be replaced by a new string, the
+ * new string is constructed using the rules used by the ECMAScript replace
+ * function in ECMA- 262 [Ecma International, ECMAScript Language
+ * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
+ * String.prototype.replace. In addition, during search and replace
+ * operations all non-overlapping occurrences of the regular expression
+ * are located and replaced, and sections of the input that did not match
+ * the expression are copied unchanged to the output string.
+ *
+ * Format strings (from ECMA-262 [15.5.4.11]):
+ * @li $$ The dollar-sign itself ($)
+ * @li $& The matched substring.
+ * @li $` The portion of @a string that precedes the matched substring.
+ * This would be match_results::prefix().
+ * @li $' The portion of @a string that follows the matched substring.
+ * This would be match_results::suffix().
+ * @li $n The nth capture, where n is in [1,9] and $n is not followed by a
+ * decimal digit. If n <= match_results::size() and the nth capture
+ * is undefined, use the empty string instead. If n >
+ * match_results::size(), the result is implementation-defined.
+ * @li $nn The nnth capture, where nn is a two-digit decimal number on
+ * [01, 99]. If nn <= match_results::size() and the nth capture is
+ * undefined, use the empty string instead. If
+ * nn > match_results::size(), the result is implementation-defined.
+ */
+ static const match_flag_type format_default = 0;
+
+ /**
+ * When a regular expression match is to be replaced by a new string, the
+ * new string is constructed using the rules used by the POSIX sed utility
+ * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
+ * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+ */
+ static const match_flag_type format_sed = 1 << _S_sed;
+
+ /**
+ * During a search and replace operation, sections of the character
+ * container sequence being searched that do not match the regular
+ * expression shall not be copied to the output string.
+ */
+ static const match_flag_type format_no_copy = 1 << _S_no_copy;
+
+ /**
+ * When specified during a search and replace operation, only the first
+ * occurrence of the regular expression shall be replaced.
+ */
+ static const match_flag_type format_first_only = 1 << _S_first_only;
+
+ //@}
+
+} // namespace regex_constants
+} // namespace std
+
diff --git a/libstdc++-v3/include/bits/regex_cursor.h b/libstdc++-v3/include/bits/regex_cursor.h
new file mode 100644
index 00000000000..e8330fb7885
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_cursor.h
@@ -0,0 +1,92 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_cursor.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+namespace __regex
+{
+ // ABC for pattern matching
+ struct _PatternCursor
+ {
+ virtual ~_PatternCursor() { };
+ virtual void _M_next() = 0;
+ virtual bool _M_at_end() const = 0;
+ };
+
+ // Provides a cursor into the specific target string.
+ template<typename _FwdIterT>
+ class _SpecializedCursor
+ : public _PatternCursor
+ {
+ public:
+ _SpecializedCursor(const _FwdIterT& __b, const _FwdIterT __e)
+ : _M_b(__b), _M_c(__b), _M_e(__e)
+ { }
+
+ typename std::iterator_traits<_FwdIterT>::value_type
+ _M_current() const
+ { return *_M_c; }
+
+ void
+ _M_next()
+ { ++_M_c; }
+
+ _FwdIterT
+ _M_pos() const
+ { return _M_c; }
+
+ const _FwdIterT&
+ _M_begin() const
+ { return _M_b; }
+
+ const _FwdIterT&
+ _M_end() const
+ { return _M_e; }
+
+ bool
+ _M_at_end() const
+ { return _M_c == _M_e; }
+
+ private:
+ _FwdIterT _M_b;
+ _FwdIterT _M_c;
+ _FwdIterT _M_e;
+ };
+
+ // Helper funxtion to create a cursor specialized for an iterator class.
+ template<typename _FwdIterT>
+ inline _SpecializedCursor<_FwdIterT>
+ __cursor(const _FwdIterT& __b, const _FwdIterT __e)
+ { return _SpecializedCursor<_FwdIterT>(__b, __e); }
+
+} // namespace __regex
+} // namespace std
+
+/* vim: set ts=8 sw=2 sts=2: */
diff --git a/libstdc++-v3/include/bits/regex_error.h b/libstdc++-v3/include/bits/regex_error.h
new file mode 100644
index 00000000000..283eabfd9fb
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_error.h
@@ -0,0 +1,160 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_error.h
+ * @brief Error and exception objects for the std regex library.
+ *
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+
+namespace regex_constants
+{
+ /**
+ * @name 5.3 Error Types
+ */
+ //@{
+
+ enum error_type
+ {
+ _S_error_collate,
+ _S_error_ctype,
+ _S_error_escape,
+ _S_error_backref,
+ _S_error_brack,
+ _S_error_paren,
+ _S_error_brace,
+ _S_error_badbrace,
+ _S_error_range,
+ _S_error_space,
+ _S_error_badrepeat,
+ _S_error_complexity,
+ _S_error_stack,
+ _S_error_last
+ };
+
+ /** The expression contained an invalid collating element name. */
+ static const error_type error_collate(_S_error_collate);
+
+ /** The expression contained an invalid character class name. */
+ static const error_type error_ctype(_S_error_ctype);
+
+ /**
+ * The expression contained an invalid escaped character, or a trailing
+ * escape.
+ */
+ static const error_type error_escape(_S_error_escape);
+
+ /** The expression contained an invalid back reference. */
+ static const error_type error_backref(_S_error_backref);
+
+ /** The expression contained mismatched [ and ]. */
+ static const error_type error_brack(_S_error_brack);
+
+ /** The expression contained mismatched ( and ). */
+ static const error_type error_paren(_S_error_paren);
+
+ /** The expression contained mismatched { and } */
+ static const error_type error_brace(_S_error_brace);
+
+ /** The expression contained an invalid range in a {} expression. */
+ static const error_type error_badbrace(_S_error_badbrace);
+
+ /**
+ * The expression contained an invalid character range,
+ * such as [b-a] in most encodings.
+ */
+ static const error_type error_range(_S_error_range);
+
+ /**
+ * There was insufficient memory to convert the expression into a
+ * finite state machine.
+ */
+ static const error_type error_space(_S_error_space);
+
+ /**
+ * One of <em>*?+{<em> was not preceded by a valid regular expression.
+ */
+ static const error_type error_badrepeat(_S_error_badrepeat);
+
+ /**
+ * The complexity of an attempted match against a regular expression
+ * exceeded a pre-set level.
+ */
+ static const error_type error_complexity(_S_error_complexity);
+
+ /**
+ * There was insufficient memory to determine whether the
+ * regular expression could match the specified character sequence.
+ */
+ static const error_type error_stack(_S_error_stack);
+
+ //@}
+}
+
+ // [7.8] Class regex_error
+ /**
+ * @brief A regular expression exception class.
+ * @ingroup exceptions
+ *
+ * The regular expression library throws objects of this class on error.
+ */
+ class regex_error
+ : public std::runtime_error
+ {
+ public:
+ /**
+ * @brief Constructs a regex_error object.
+ *
+ * @param ecode the regex error code.
+ */
+ explicit
+ regex_error(regex_constants::error_type __ecode)
+ : std::runtime_error("regex_error"), _M_code(__ecode)
+ { }
+
+ /**
+ * @brief Gets the regex error code.
+ *
+ * @returns the regex error code.
+ */
+ regex_constants::error_type
+ code() const
+ { return _M_code; }
+
+ protected:
+ regex_constants::error_type _M_code;
+ };
+
+
+ inline void
+ __throw_regex_error(regex_constants::error_type __ecode)
+ { throw regex_error(__ecode); }
+
+} // namespace std
+
diff --git a/libstdc++-v3/include/bits/regex_grep_matcher.h b/libstdc++-v3/include/bits/regex_grep_matcher.h
new file mode 100644
index 00000000000..33890e4257c
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_grep_matcher.h
@@ -0,0 +1,131 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_grep_matcher.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+
+namespace std
+{
+ template<typename _BiIter>
+ class sub_match;
+
+ template<typename _Bi_iter, typename _Allocator>
+ class match_results;
+
+namespace __regex
+{
+ // A _Results facade specialized for wrapping a templated sub_match.
+ template<typename _FwdIterT, typename _Alloc>
+ class _SpecializedResults
+ : public _Results
+ {
+ public:
+ _SpecializedResults(const _Automaton::_SizeT __size,
+ const _SpecializedCursor<_FwdIterT>& __cursor,
+ match_results<_FwdIterT, _Alloc>& __m);
+
+ void
+ _M_set_pos(int __i, int __j, const _PatternCursor& __pc);
+
+ void
+ _M_set_matched(int __i, bool __is_matched)
+ { _M_results.at(__i).matched = __is_matched; }
+
+ private:
+ match_results<_FwdIterT, _Alloc>& _M_results;
+ };
+
+ template<typename _FwdIterT, typename _Alloc>
+ _SpecializedResults<_FwdIterT, _Alloc>::
+ _SpecializedResults(const _Automaton::_SizeT __size,
+ const _SpecializedCursor<_FwdIterT>& __cursor,
+ match_results<_FwdIterT, _Alloc>& __m)
+ : _M_results(__m)
+ {
+ typedef typename match_results<_FwdIterT, _Alloc>::size_type size_type;
+ _M_results.clear();
+ std::sub_match<_FwdIterT> __sm;
+ __sm.matched = false;
+ size_type __result_count = __size + 2;
+ for (size_type __i = 0; __i < __result_count; ++__i)
+ _M_results.push_back(__sm);
+ _M_results.at(__size+0).first = __cursor._M_begin();
+ _M_results.at(__size+0).second = __cursor._M_begin();
+ _M_results.at(__size+1).first = __cursor._M_end();
+ _M_results.at(__size+1).second = __cursor._M_end();
+ }
+
+ template<typename _FwdIterT, typename _Alloc>
+ void
+ _SpecializedResults<_FwdIterT, _Alloc>::
+ _M_set_pos(int __i, int __j, const _PatternCursor& __pc)
+ {
+ typedef const _SpecializedCursor<_FwdIterT>& _CursorT;
+ _CursorT __c = static_cast<_CursorT>(__pc);
+ if (__j == 0)
+ _M_results.at(__i).first = __c._M_pos();
+ else
+ _M_results.at(__i).second = __c._M_pos()+1;
+ }
+
+ // A stack of states used in evaluating the NFA.
+ typedef std::stack<_StateIdT, std::vector<_StateIdT> > _StateStack;
+
+ // Executes a regular expression NFA/DFA over a range using a variant of
+ // the parallel execution algorithm featured in the grep utility, modified
+ // to use Laurikari tags.
+ class _Grep_matcher
+ {
+ public:
+ _Grep_matcher(_PatternCursor& __p,
+ _Results& __r,
+ const _AutomatonPtr& __automaton,
+ regex_constants::match_flag_type __flags);
+
+ private:
+ _StateSet
+ _M_e_closure(_StateIdT __i);
+
+ _StateSet
+ _M_e_closure(const _StateSet& __s);
+
+ _StateSet
+ _M_e_closure(_StateStack& __stack, const _StateSet& __s);
+
+ private:
+ const std::shared_ptr<_Nfa> _M_nfa;
+ _PatternCursor& _M_pattern;
+ _Results& _M_results;
+ };
+
+} // namespace __regex
+} // namespace std
+
+#include <bits/regex_grep_matcher.tcc>
+
+/* vim: set ts=8 sw=2 sts=2: */
diff --git a/libstdc++-v3/include/bits/regex_grep_matcher.tcc b/libstdc++-v3/include/bits/regex_grep_matcher.tcc
new file mode 100644
index 00000000000..6964592ab1d
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_grep_matcher.tcc
@@ -0,0 +1,177 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_grep_matcher.tcc
+ */
+#include <regex>
+
+namespace std
+{
+
+namespace
+{
+
+ // A stack of states used in evaluating the NFA.
+ typedef std::stack<std::__regex::_StateIdT,
+ std::vector<std::__regex::_StateIdT>
+ > _StateStack;
+
+ // Obtains the next state set given the current state set __s and the current
+ // input character.
+ inline std::__regex::_StateSet
+ __move(const std::__regex::_PatternCursor& __p,
+ const std::__regex::_Nfa& __nfa,
+ const std::__regex::_StateSet& __s)
+ {
+ std::__regex::_StateSet __m;
+ for (std::__regex::_StateSet::const_iterator __i = __s.begin();
+ __i != __s.end(); ++__i)
+ {
+ if (*__i == std::__regex::_S_invalid_state_id)
+ continue;
+
+ const std::__regex::_State& __state = __nfa[*__i];
+ if (__state._M_opcode == std::__regex::_S_opcode_match
+ && __state._M_matches(__p))
+ __m.insert(__state._M_next);
+ }
+ return __m;
+ }
+
+ // returns true if (__s intersect __t) is not empty
+ inline bool
+ __includes_some(const std::__regex::_StateSet& __s,
+ const std::__regex::_StateSet& __t)
+ {
+ if (__s.size() > 0 && __t.size() > 0)
+ {
+ std::__regex::_StateSet::const_iterator __first = __s.begin();
+ std::__regex::_StateSet::const_iterator __second = __t.begin();
+ while (__first != __s.end() && __second != __t.end())
+ {
+ if (*__first < *__second)
+ ++__first;
+ else if (*__second < *__first)
+ ++__second;
+ else
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // If an identified state __u is not already in the current state set __e,
+ // insert it and push it on the current state stack __s.
+ inline void
+ __add_visited_state(const std::__regex::_StateIdT __u,
+ _StateStack& __s,
+ std::__regex::_StateSet& __e)
+ {
+ if (__e.count(__u) == 0)
+ {
+ __e.insert(__u);
+ __s.push(__u);
+ }
+ }
+
+} // anonymous namespace
+
+namespace __regex
+{
+ inline _Grep_matcher::
+ _Grep_matcher(_PatternCursor& __p, _Results& __r,
+ const _AutomatonPtr& __nfa,
+ regex_constants::match_flag_type __flags)
+ : _M_nfa(static_pointer_cast<_Nfa>(__nfa)), _M_pattern(__p), _M_results(__r)
+ {
+ __regex::_StateSet __t = this->_M_e_closure(_M_nfa->_M_start());
+ for (; !_M_pattern._M_at_end(); _M_pattern._M_next())
+ __t = this->_M_e_closure(__move(_M_pattern, *_M_nfa, __t));
+
+ _M_results._M_set_matched(0,
+ __includes_some(_M_nfa->_M_final_states(), __t));
+ }
+
+ // Creates the e-closure set for the initial state __i.
+ inline _StateSet _Grep_matcher::
+ _M_e_closure(_StateIdT __i)
+ {
+ _StateSet __s;
+ __s.insert(__i);
+ _StateStack __stack;
+ __stack.push(__i);
+ return this->_M_e_closure(__stack, __s);
+ }
+
+ // Creates the e-closure set for an arbitrary state set __s.
+ inline _StateSet _Grep_matcher::
+ _M_e_closure(const _StateSet& __s)
+ {
+ _StateStack __stack;
+ for (_StateSet::const_iterator __i = __s.begin(); __i != __s.end(); ++__i)
+ __stack.push(*__i);
+ return this->_M_e_closure(__stack, __s);
+ }
+
+ inline _StateSet _Grep_matcher::
+ _M_e_closure(_StateStack& __stack, const _StateSet& __s)
+ {
+ _StateSet __e = __s;
+ while (!__stack.empty())
+ {
+ _StateIdT __t = __stack.top(); __stack.pop();
+ if (__t == _S_invalid_state_id)
+ continue;
+ // for each __u with edge from __t to __u labeled e do ...
+ const _State& __state = _M_nfa->operator[](__t);
+ switch (__state._M_opcode)
+ {
+ case _S_opcode_alternative:
+ __add_visited_state(__state._M_next, __stack, __e);
+ __add_visited_state(__state._M_alt, __stack, __e);
+ break;
+ case _S_opcode_subexpr_begin:
+ __add_visited_state(__state._M_next, __stack, __e);
+ __state._M_tagger(_M_pattern, _M_results);
+ break;
+ case _S_opcode_subexpr_end:
+ __add_visited_state(__state._M_next, __stack, __e);
+ __state._M_tagger(_M_pattern, _M_results);
+ _M_results._M_set_matched(__state._M_subexpr, true);
+ break;
+ case _S_opcode_accept:
+ __add_visited_state(__state._M_next, __stack, __e);
+ break;
+ default:
+ break;
+ }
+ }
+ return __e;
+ }
+
+} // namespace __regex
+} // namespace std
+
+/* vim: set ts=8 sw=2 sts=2: */
diff --git a/libstdc++-v3/include/bits/regex_nfa.h b/libstdc++-v3/include/bits/regex_nfa.h
new file mode 100644
index 00000000000..2a938915b97
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_nfa.h
@@ -0,0 +1,403 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_nfa.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+namespace std
+{
+namespace __regex
+{
+
+ // Base class for, um, automata. Could be an NFA or a DFA. Your choice.
+ class _Automaton
+ {
+ public:
+ typedef unsigned int _SizeT;
+
+ public:
+ virtual
+ ~_Automaton()
+ { }
+
+ virtual _SizeT
+ _M_sub_count() const = 0;
+
+#ifdef _GLIBCXX_DEBUG
+ virtual std::ostream&
+ _M_dot(std::ostream& __ostr) const = 0;
+#endif
+ };
+
+ // Generic shred pointer to an automaton.
+ typedef std::shared_ptr<_Automaton> _AutomatonPtr;
+
+ // Operation codes that define the type of transitions within the base NFA
+ // that represents the regular expression.
+ enum _Opcode
+ {
+ _S_opcode_unknown = 0,
+ _S_opcode_alternative = 1,
+ _S_opcode_subexpr_begin = 4,
+ _S_opcode_subexpr_end = 5,
+ _S_opcode_match = 100,
+ _S_opcode_accept = 255
+ };
+
+ // Provides a generic facade for a templated match_results.
+ struct _Results
+ {
+ virtual void _M_set_pos(int __i, int __j, const _PatternCursor& __p) = 0;
+ virtual void _M_set_matched(int __i, bool __is_matched) = 0;
+ };
+
+ // Tags current state (for subexpr begin/end).
+ typedef std::function<void (const _PatternCursor&, _Results&)> _Tagger;
+
+ template<typename _FwdIterT, typename _TraitsT>
+ struct _StartTagger
+ : public _Tagger
+ {
+ explicit
+ _StartTagger(int __i)
+ : _M_index(__i)
+ { }
+
+ void
+ operator()(const _PatternCursor& __pc, _Results& __r)
+ { __r._M_set_pos(_M_index, 0, __pc); }
+
+ int _M_index;
+ };
+
+ template<typename _FwdIterT, typename _TraitsT>
+ struct _EndTagger
+ : public _Tagger
+ {
+ explicit
+ _EndTagger(int __i)
+ : _M_index(__i)
+ { }
+
+ void
+ operator()(const _PatternCursor& __pc, _Results& __r)
+ { __r._M_set_pos(_M_index, 1, __pc); }
+
+ int _M_index;
+ _FwdIterT _M_pos;
+ };
+ // Indicates if current state matches cursor current.
+ typedef std::function<bool (const _PatternCursor&)> _Matcher;
+
+ // Matches any character
+ inline bool
+ _AnyMatcher(const _PatternCursor&)
+ { return true; }
+
+ // Matches a single character
+ template<typename _InIterT, typename _TraitsT>
+ struct _CharMatcher
+ : public _Matcher
+ {
+ typedef typename _TraitsT::char_type char_type;
+
+ explicit
+ _CharMatcher(char_type __c, const _TraitsT& __t = _TraitsT())
+ : _M_traits(__t), _M_c(_M_traits.translate(__c))
+ { }
+
+ bool
+ operator()(const _PatternCursor& __pc) const
+ {
+ typedef const _SpecializedCursor<_InIterT>& _CursorT;
+ _CursorT __c = static_cast<_CursorT>(__pc);
+ return _M_traits.translate(__c._M_current()) == _M_c;
+ }
+
+ const _TraitsT& _M_traits;
+ char_type _M_c;
+ };
+
+ // Matches a character range (bracket expression)
+ template<typename _InIterT, typename _TraitsT>
+ struct _RangeMatcher
+ : public _Matcher
+ {
+ typedef typename _TraitsT::char_type _CharT;
+ typedef std::basic_string<_CharT> _StringT;
+
+ explicit
+ _RangeMatcher(bool __is_non_matching, const _TraitsT& __t = _TraitsT())
+ : _M_traits(__t), _M_is_non_matching(__is_non_matching)
+ { }
+
+ bool
+ operator()(const _PatternCursor& __pc) const
+ {
+ typedef const _SpecializedCursor<_InIterT>& _CursorT;
+ _CursorT __c = static_cast<_CursorT>(__pc);
+ return true;
+ }
+
+ void
+ _M_add_char(_CharT __c)
+ { }
+
+ void
+ _M_add_collating_element(const _StringT& __s)
+ { }
+
+ void
+ _M_add_equivalence_class(const _StringT& __s)
+ { }
+
+ void
+ _M_add_character_class(const _StringT& __s)
+ { }
+
+ void
+ _M_make_range()
+ { }
+
+ const _TraitsT& _M_traits;
+ bool _M_is_non_matching;
+ };
+
+ // Identifies a state in the NFA.
+ typedef int _StateIdT;
+
+ // The special case in which a state identifier is not an index.
+ static const _StateIdT _S_invalid_state_id = -1;
+
+
+ // An individual state in an NFA
+ //
+ // In this case a "state" is an entry in the NFA definition coupled with its
+ // outgoing transition(s). All states have a single outgoing transition,
+ // except for accepting states (which have no outgoing transitions) and alt
+ // states, which have two outgoing transitions.
+ //
+ struct _State
+ {
+ typedef int _OpcodeT;
+
+ _OpcodeT _M_opcode; // type of outgoing transition
+ _StateIdT _M_next; // outgoing tranition
+ _StateIdT _M_alt; // for _S_opcode_alternative
+ unsigned int _M_subexpr; // for _S_opcode_subexpr_*
+ _Tagger _M_tagger; // for _S_opcode_subexpr_*
+ _Matcher _M_matches; // for _S_opcode_match
+
+ explicit _State(_OpcodeT __opcode)
+ : _M_opcode(__opcode), _M_next(_S_invalid_state_id)
+ { }
+
+ _State(const _Matcher& __m)
+ : _M_opcode(_S_opcode_match), _M_next(_S_invalid_state_id), _M_matches(__m)
+ { }
+
+ _State(_OpcodeT __opcode, unsigned int __s, const _Tagger& __t)
+ : _M_opcode(__opcode), _M_next(_S_invalid_state_id), _M_subexpr(__s),
+ _M_tagger(__t)
+ { }
+
+ _State(_StateIdT __next, _StateIdT __alt)
+ : _M_opcode(_S_opcode_alternative), _M_next(__next), _M_alt(__alt)
+ { }
+
+#ifdef _GLIBCXX_DEBUG
+ std::ostream&
+ _M_print(std::ostream& ostr) const;
+
+ // Prints graphviz dot commands for state.
+ std::ostream&
+ _M_dot(std::ostream& __ostr, _StateIdT __id) const;
+#endif
+ };
+
+
+ // The Grep Matcher works on sets of states. Here are sets of states.
+ typedef std::set<_StateIdT> _StateSet;
+
+ // A collection of all states making up an NFA
+ //
+ // An NFA is a 4-tuple M = (K, S, s, F), where
+ // K is a finite set of states,
+ // S is the alphabet of the NFA,
+ // s is the initial state,
+ // F is a set of final (accepting) states.
+ //
+ // This NFA class is templated on S, a type that will hold values of the
+ // underlying alphabet (without regard to semantics of that alphabet). The
+ // other elements of the tuple are generated during construction of the NFA
+ // and are available through accessor member functions.
+ //
+ class _Nfa
+ : public _Automaton, public std::vector<_State>
+ {
+ public:
+ typedef _State _StateT;
+ typedef unsigned int _SizeT;
+ typedef regex_constants::syntax_option_type _FlagT;
+
+ public:
+ _Nfa(_FlagT __f)
+ : _M_flags(__f), _M_start_state(0), _M_subexpr_count(0)
+ { }
+
+ ~_Nfa()
+ { }
+
+ _FlagT
+ _M_options() const
+ { return _M_flags; }
+
+ _StateIdT
+ _M_start() const
+ { return _M_start_state; }
+
+ const _StateSet&
+ _M_final_states() const
+ { return _M_accepting_states; }
+
+ _SizeT
+ _M_sub_count() const
+ { return _M_subexpr_count; }
+
+ _StateIdT
+ _M_insert_accept()
+ {
+ this->push_back(_StateT(_S_opcode_accept));
+ _M_accepting_states.insert(this->size()-1);
+ return this->size()-1;
+ }
+
+ _StateIdT
+ _M_insert_alt(_StateIdT __next, _StateIdT __alt)
+ {
+ this->push_back(_StateT(__next, __alt));
+ return this->size()-1;
+ }
+
+ _StateIdT
+ _M_insert_matcher(_Matcher __m)
+ {
+ this->push_back(_StateT(__m));
+ return this->size()-1;
+ }
+
+ _StateIdT
+ _M_insert_subexpr_begin(const _Tagger& __t)
+ {
+ this->push_back(_StateT(_S_opcode_subexpr_begin, _M_subexpr_count++, __t));
+ return this->size()-1;
+ }
+
+ _StateIdT
+ _M_insert_subexpr_end(unsigned int __i, const _Tagger& __t)
+ {
+ this->push_back(_StateT(_S_opcode_subexpr_end, __i, __t));
+ return this->size()-1;
+ }
+
+#ifdef _GLIBCXX_DEBUG
+ std::ostream&
+ _M_dot(std::ostream& __ostr) const;
+#endif
+
+ private:
+ _FlagT _M_flags;
+ _StateIdT _M_start_state;
+ _StateSet _M_accepting_states;
+ _SizeT _M_subexpr_count;
+ };
+
+ // Describes a sequence of one or more %_State, its current start and end(s).
+ //
+ // This structure contains fragments of an NFA during construction.
+ class _StateSeq
+ {
+ public:
+ // Constructs a single-node sequence
+ _StateSeq(_Nfa& __ss, _StateIdT __s, _StateIdT __e = _S_invalid_state_id)
+ : _M_nfa(__ss), _M_start(__s), _M_end1(__s), _M_end2(__e)
+ { }
+ // Constructs a split sequence from two other sequencces
+ _StateSeq(const _StateSeq& __e1, const _StateSeq& __e2)
+ : _M_nfa(__e1._M_nfa),
+ _M_start(_M_nfa._M_insert_alt(__e1._M_start, __e2._M_start)),
+ _M_end1(__e1._M_end1), _M_end2(__e2._M_end1)
+ { }
+
+ // Constructs a split sequence from a single sequence
+ _StateSeq(const _StateSeq& __e, _StateIdT __id)
+ : _M_nfa(__e._M_nfa),
+ _M_start(_M_nfa._M_insert_alt(__id, __e._M_start)),
+ _M_end1(__id), _M_end2(__e._M_end1)
+ { }
+
+ // Constructs a copy of a %_StateSeq
+ _StateSeq(const _StateSeq& __rhs)
+ : _M_nfa(__rhs._M_nfa), _M_start(__rhs._M_start),
+ _M_end1(__rhs._M_end1), _M_end2(__rhs._M_end2)
+ { }
+
+
+ _StateSeq& operator=(const _StateSeq& __rhs);
+
+ _StateIdT
+ _M_front() const
+ { return _M_start; }
+
+ // Extends a sequence by one.
+ void
+ _M_push_back(_StateIdT __id);
+
+ // Extends and maybe joins a sequence.
+ void
+ _M_append(_StateIdT __id);
+
+ void
+ _M_append(_StateSeq& __rhs);
+
+ // Clones an entire sequence.
+ _StateIdT
+ _M_clone();
+
+ private:
+ _Nfa& _M_nfa;
+ _StateIdT _M_start;
+ _StateIdT _M_end1;
+ _StateIdT _M_end2;
+
+ };
+
+} // namespace __regex
+} // namespace std
+
+#include <bits/regex_nfa.tcc>
+
diff --git a/libstdc++-v3/include/bits/regex_nfa.tcc b/libstdc++-v3/include/bits/regex_nfa.tcc
new file mode 100644
index 00000000000..2a1a4d07679
--- /dev/null
+++ b/libstdc++-v3/include/bits/regex_nfa.tcc
@@ -0,0 +1,170 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/**
+ * @file bits/regex_nfa.tcc
+ */
+#include <regex>
+
+namespace std
+{
+namespace __regex
+{
+#ifdef _GLIBCXX_DEBUG
+inline std::ostream& _State::
+_M_print(std::ostream& ostr) const
+{
+ switch (_M_opcode)
+ {
+ case _S_opcode_alternative:
+ ostr << "alt next=" << _M_next << " alt=" << _M_alt;
+ break;
+ case _S_opcode_subexpr_begin:
+ ostr << "subexpr begin next=" << _M_next << " index=" << _M_subexpr;
+ break;
+ case _S_opcode_subexpr_end:
+ ostr << "subexpr end next=" << _M_next << " index=" << _M_subexpr;
+ break;
+ case _S_opcode_match:
+ ostr << "match next=" << _M_next;
+ break;
+ case _S_opcode_accept:
+ ostr << "accept next=" << _M_next;
+ break;
+ default:
+ ostr << "unknown next=" << _M_next;
+ break;
+ }
+ return ostr;
+}
+
+// Prints graphviz dot commands for state.
+inline std::ostream& _State::
+_M_dot(std::ostream& __ostr, _StateIdT __id) const
+{
+ switch (_M_opcode)
+ {
+ case _S_opcode_alternative:
+ __ostr << __id << " [label=\"" << __id << "\\nALT\"];\n"
+ << __id << " -> " << _M_next
+ << " [label=\"epsilon\", tailport=\"s\"];\n"
+ << __id << " -> " << _M_alt
+ << " [label=\"epsilon\", tailport=\"n\"];\n";
+ break;
+ case _S_opcode_subexpr_begin:
+ __ostr << __id << " [label=\"" << __id << "\\nSBEGIN "
+ << _M_subexpr << "\"];\n"
+ << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+ break;
+ case _S_opcode_subexpr_end:
+ __ostr << __id << " [label=\"" << __id << "\\nSEND "
+ << _M_subexpr << "\"];\n"
+ << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+ break;
+ case _S_opcode_match:
+ __ostr << __id << " [label=\"" << __id << "\\nMATCH\"];\n"
+ << __id << " -> " << _M_next << " [label=\"<match>\"];\n";
+ break;
+ case _S_opcode_accept:
+ __ostr << __id << " [label=\"" << __id << "\\nACC\"];\n" ;
+ break;
+ default:
+ __ostr << __id << " [label=\"" << __id << "\\nUNK\"];\n"
+ << __id << " -> " << _M_next << " [label=\"?\"];\n";
+ break;
+ }
+ return __ostr;
+}
+
+inline std::ostream& _Nfa::
+_M_dot(std::ostream& __ostr) const
+{
+ __ostr << "digraph _Nfa {\n"
+ << " rankdir=LR;\n";
+ for (unsigned int __i = 0; __i < this->size(); ++__i)
+ { this->at(__i)._M_dot(__ostr, __i); }
+ __ostr << "}\n";
+ return __ostr;
+}
+#endif
+
+inline _StateSeq& _StateSeq::
+operator=(const _StateSeq& __rhs)
+{
+ _M_start = __rhs._M_start;
+ _M_end1 = __rhs._M_end1;
+ _M_end2 = __rhs._M_end2;
+ return *this;
+}
+
+inline void _StateSeq::
+_M_push_back(_StateIdT __id)
+{
+ if (_M_end1 != _S_invalid_state_id)
+ _M_nfa[_M_end1]._M_next = __id;
+ _M_end1 = __id;
+}
+
+inline void _StateSeq::
+_M_append(_StateIdT __id)
+{
+ if (_M_end2 != _S_invalid_state_id)
+ {
+ if (_M_end2 == _M_end1)
+ _M_nfa[_M_end2]._M_alt = __id;
+ else
+ _M_nfa[_M_end2]._M_next = __id;
+ _M_end2 = _S_invalid_state_id;
+ }
+ if (_M_end1 != _S_invalid_state_id)
+ _M_nfa[_M_end1]._M_next = __id;
+ _M_end1 = __id;
+}
+
+inline void _StateSeq::
+_M_append(_StateSeq& __rhs)
+{
+ if (_M_end2 != _S_invalid_state_id)
+ {
+ if (_M_end2 == _M_end1)
+ _M_nfa[_M_end2]._M_alt = __rhs._M_start;
+ else
+ _M_nfa[_M_end2]._M_next = __rhs._M_start;
+ _M_end2 = _S_invalid_state_id;
+ }
+ if (__rhs._M_end2 != _S_invalid_state_id)
+ _M_end2 = __rhs._M_end2;
+ if (_M_end1 != _S_invalid_state_id)
+ _M_nfa[_M_end1]._M_next = __rhs._M_start;
+ _M_end1 = __rhs._M_end1;
+}
+
+// @todo implement this function.
+inline _StateIdT _StateSeq::
+_M_clone()
+{ return 0; }
+
+} // namespace __regex
+} // namespace std
+
diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h
index 5e1960012c9..2d9e6f771a6 100644
--- a/libstdc++-v3/include/bits/shared_ptr.h
+++ b/libstdc++-v3/include/bits/shared_ptr.h
@@ -123,6 +123,23 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
shared_ptr(_Tp1* __p, _Deleter __d) : __shared_ptr<_Tp>(__p, __d) { }
/**
+ * @brief Construct a %shared_ptr that owns a null pointer
+ * and the deleter @a __d.
+ * @param __p A null pointer constant.
+ * @param __d A deleter.
+ * @post use_count() == 1 && get() == __p
+ * @throw std::bad_alloc, in which case @a __d(__p) is called.
+ *
+ * Requirements: _Deleter's copy constructor and destructor must
+ * not throw
+ *
+ * The last owner will call __d(__p)
+ */
+ template<typename _Deleter>
+ shared_ptr(nullptr_t __p, _Deleter __d)
+ : __shared_ptr<_Tp>(__p, __d) { }
+
+ /**
* @brief Construct a %shared_ptr that owns the pointer @a __p
* and the deleter @a __d.
* @param __p A pointer.
@@ -141,6 +158,25 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
shared_ptr(_Tp1* __p, _Deleter __d, const _Alloc& __a)
: __shared_ptr<_Tp>(__p, __d, __a) { }
+ /**
+ * @brief Construct a %shared_ptr that owns a null pointer
+ * and the deleter @a __d.
+ * @param __p A null pointer constant.
+ * @param __d A deleter.
+ * @param __a An allocator.
+ * @post use_count() == 1 && get() == __p
+ * @throw std::bad_alloc, in which case @a __d(__p) is called.
+ *
+ * Requirements: _Deleter's copy constructor and destructor must
+ * not throw _Alloc's copy constructor and destructor must not
+ * throw.
+ *
+ * The last owner will call __d(__p)
+ */
+ template<typename _Deleter, typename _Alloc>
+ shared_ptr(nullptr_t __p, _Deleter __d, const _Alloc& __a)
+ : __shared_ptr<_Tp>(__p, __d, __a) { }
+
// Aliasing constructor
/**
@@ -170,8 +206,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param __r A %shared_ptr.
* @post get() == __r.get() && use_count() == __r.use_count()
*/
- template<typename _Tp1>
- shared_ptr(const shared_ptr<_Tp1>& __r) : __shared_ptr<_Tp>(__r) { }
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
+ shared_ptr(const shared_ptr<_Tp1>& __r)
+ : __shared_ptr<_Tp>(__r) { }
/**
* @brief Move-constructs a %shared_ptr instance from @a __r.
@@ -186,7 +224,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param __r A %shared_ptr rvalue.
* @post *this contains the old value of @a __r, @a __r is empty.
*/
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
shared_ptr(shared_ptr<_Tp1>&& __r)
: __shared_ptr<_Tp>(std::move(__r)) { }
@@ -212,6 +251,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
shared_ptr(std::unique_ptr<_Tp1, _Del>&& __r)
: __shared_ptr<_Tp>(std::move(__r)) { }
+ /**
+ * @brief Construct an empty %shared_ptr.
+ * @param __p A null pointer constant.
+ * @post use_count() == 0 && get() == nullptr
+ */
+ shared_ptr(nullptr_t __p) : __shared_ptr<_Tp>(__p) { }
+
template<typename _Tp1>
shared_ptr&
operator=(const shared_ptr<_Tp1>& __r) // never throws
@@ -271,11 +317,31 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
operator==(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
{ return __a.get() == __b.get(); }
+ template<typename _Tp>
+ inline bool
+ operator==(const shared_ptr<_Tp>& __a, nullptr_t)
+ { return __a.get() == nullptr; }
+
+ template<typename _Tp>
+ inline bool
+ operator==(nullptr_t, const shared_ptr<_Tp>& __b)
+ { return nullptr == __b.get(); }
+
template<typename _Tp1, typename _Tp2>
inline bool
operator!=(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
{ return __a.get() != __b.get(); }
+ template<typename _Tp>
+ inline bool
+ operator!=(const shared_ptr<_Tp>& __a, nullptr_t)
+ { return __a.get() != nullptr; }
+
+ template<typename _Tp>
+ inline bool
+ operator!=(nullptr_t, const shared_ptr<_Tp>& __b)
+ { return nullptr != __b.get(); }
+
template<typename _Tp1, typename _Tp2>
inline bool
operator<(const shared_ptr<_Tp1>& __a, const shared_ptr<_Tp2>& __b)
@@ -323,11 +389,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
public:
weak_ptr() : __weak_ptr<_Tp>() { }
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
weak_ptr(const weak_ptr<_Tp1>& __r)
: __weak_ptr<_Tp>(__r) { }
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
weak_ptr(const shared_ptr<_Tp1>& __r)
: __weak_ptr<_Tp>(__r) { }
@@ -471,6 +539,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
std::forward<_Args>(__args)...);
}
+ /// std::hash specialization for shared_ptr.
+ template<typename _Tp>
+ struct hash<shared_ptr<_Tp>>
+ : public std::unary_function<shared_ptr<_Tp>, size_t>
+ {
+ size_t
+ operator()(const shared_ptr<_Tp>& __s) const
+ { return std::hash<_Tp*>()(__s.get()); }
+ };
+
// @} group pointer_abstractions
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
index 1999f36023b..183c241e29b 100644
--- a/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -85,6 +85,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
class _Sp_counted_ptr : public _Sp_counted_base<_Lp>
{
public:
+ explicit
_Sp_counted_ptr(_Ptr __p)
: _M_ptr(__p) { }
@@ -97,7 +98,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ delete this; }
virtual void*
- _M_get_deleter(const std::type_info& __ti)
+ _M_get_deleter(const std::type_info&)
{ return 0; }
_Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
@@ -107,6 +108,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_Ptr _M_ptr; // copy constructor must not throw
};
+ template<>
+ inline void
+ _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() { }
+
+ template<>
+ inline void
+ _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() { }
+
+ template<>
+ inline void
+ _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() { }
+
// Support for custom deleter and/or allocator
template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
class _Sp_counted_deleter : public _Sp_counted_ptr<_Ptr, _Lp>
@@ -181,6 +194,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_Base_type;
public:
+ explicit
_Sp_counted_ptr_inplace(_Alloc __a)
: _Base_type(static_cast<_Tp*>(0), _Sp_destroy_inplace<_Tp>(), __a)
, _M_storage()
@@ -237,6 +251,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ }
template<typename _Ptr>
+ explicit
__shared_count(_Ptr __p) : _M_pi(0)
{
__try
@@ -316,6 +331,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if _GLIBCXX_DEPRECATED
// Special case for auto_ptr<_Tp> to provide the strong guarantee.
template<typename _Tp>
+ explicit
__shared_count(std::auto_ptr<_Tp>&& __r)
: _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get()))
{ __r.release(); }
@@ -323,6 +339,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Special case for unique_ptr<_Tp,_Del> to provide the strong guarantee.
template<typename _Tp, typename _Del>
+ explicit
__shared_count(std::unique_ptr<_Tp, _Del>&& __r)
: _M_pi(_S_create_from_up(std::move(__r)))
{ __r.release(); }
@@ -545,7 +562,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
explicit __shared_ptr(_Tp1* __p) : _M_ptr(__p), _M_refcount(__p)
{
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- // __glibcxx_function_requires(_CompleteConcept<_Tp1*>)
+ static_assert( sizeof(_Tp1) > 0, "incomplete type" );
__enable_shared_from_this_helper(_M_refcount, __p, __p);
}
@@ -567,6 +584,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__enable_shared_from_this_helper(_M_refcount, __p, __p);
}
+ template<typename _Deleter>
+ __shared_ptr(nullptr_t __p, _Deleter __d)
+ : _M_ptr(0), _M_refcount(__p, __d)
+ { }
+
+ template<typename _Deleter, typename _Alloc>
+ __shared_ptr(nullptr_t __p, _Deleter __d, const _Alloc& __a)
+ : _M_ptr(0), _M_refcount(__p, __d, __a)
+ { }
+
template<typename _Tp1>
__shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, _Tp* __p)
: _M_ptr(__p), _M_refcount(__r._M_refcount) // never throws
@@ -574,10 +601,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// generated copy constructor, assignment, destructor are fine.
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
__shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
: _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
- { __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) }
+ { }
__shared_ptr(__shared_ptr&& __r)
: _M_ptr(__r._M_ptr), _M_refcount() // never throws
@@ -586,11 +614,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__r._M_ptr = 0;
}
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
__shared_ptr(__shared_ptr<_Tp1, _Lp>&& __r)
: _M_ptr(__r._M_ptr), _M_refcount() // never throws
{
- __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
_M_refcount._M_swap(__r._M_refcount);
__r._M_ptr = 0;
}
@@ -624,13 +652,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
: _M_ptr(__r.get()), _M_refcount()
{
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- // TODO requires _Tp1 is complete, delete __r.release() well-formed
+ static_assert( sizeof(_Tp1) > 0, "incomplete type" );
_Tp1* __tmp = __r.get();
_M_refcount = __shared_count<_Lp>(std::move(__r));
__enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
}
#endif
+ /* TODO: use delegating constructor */
+ __shared_ptr(nullptr_t) : _M_ptr(0), _M_refcount() // never throws
+ { }
+
template<typename _Tp1>
__shared_ptr&
operator=(const __shared_ptr<_Tp1, _Lp>& __r) // never throws
@@ -819,12 +851,32 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const __shared_ptr<_Tp2, _Lp>& __b)
{ return __a.get() == __b.get(); }
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t)
+ { return __a.get() == nullptr; }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __b)
+ { return nullptr == __b.get(); }
+
template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
inline bool
operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
const __shared_ptr<_Tp2, _Lp>& __b)
{ return __a.get() != __b.get(); }
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t)
+ { return __a.get() != nullptr; }
+
+ template<typename _Tp, _Lock_policy _Lp>
+ inline bool
+ operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __b)
+ { return nullptr != __b.get(); }
+
template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
inline bool
operator<(const __shared_ptr<_Tp1, _Lp>& __a,
@@ -934,18 +986,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
//
// It is not possible to avoid spurious access violations since
// in multithreaded programs __r._M_ptr may be invalidated at any point.
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
__weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r)
: _M_refcount(__r._M_refcount) // never throws
- {
- __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- _M_ptr = __r.lock().get();
- }
+ { _M_ptr = __r.lock().get(); }
- template<typename _Tp1>
+ template<typename _Tp1, typename = typename
+ std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
__weak_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
: _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
- { __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) }
+ { }
template<typename _Tp1>
__weak_ptr&
@@ -1133,6 +1184,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
std::forward<_Args>(__args)...);
}
+ /// std::hash specialization for __shared_ptr.
+ template<typename _Tp, _Lock_policy _Lp>
+ struct hash<__shared_ptr<_Tp, _Lp>>
+ : public std::unary_function<__shared_ptr<_Tp, _Lp>, size_t>
+ {
+ size_t
+ operator()(const __shared_ptr<_Tp, _Lp>& __s) const
+ { return std::hash<_Tp*>()(__s.get()); }
+ };
+
_GLIBCXX_END_NAMESPACE
#endif // _SHARED_PTR_BASE_H
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index 5b4991e33b6..456c5369c17 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -2403,13 +2403,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__val, __comp);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle;
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp(*__middle, __val))
{
@@ -2450,13 +2448,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__glibcxx_requires_partitioned_upper(__first, __last, __val);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle;
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__val < *__middle)
__len = __half;
@@ -2503,13 +2499,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__val, __comp);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle;
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp(__val, *__middle))
__len = __half;
@@ -2558,13 +2552,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__glibcxx_requires_partitioned_upper(__first, __last, __val);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle, __left, __right;
-
+
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (*__middle < __val)
{
@@ -2576,9 +2568,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__len = __half;
else
{
- __left = std::lower_bound(__first, __middle, __val);
+ _ForwardIterator __left = std::lower_bound(__first, __middle,
+ __val);
std::advance(__first, __len);
- __right = std::upper_bound(++__middle, __first, __val);
+ _ForwardIterator __right = std::upper_bound(++__middle, __first,
+ __val);
return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
}
}
@@ -2605,8 +2599,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _ForwardIterator, typename _Tp, typename _Compare>
pair<_ForwardIterator, _ForwardIterator>
equal_range(_ForwardIterator __first, _ForwardIterator __last,
- const _Tp& __val,
- _Compare __comp)
+ const _Tp& __val, _Compare __comp)
{
typedef typename iterator_traits<_ForwardIterator>::value_type
_ValueType;
@@ -2625,13 +2618,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__val, __comp);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle, __left, __right;
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp(*__middle, __val))
{
@@ -2643,9 +2634,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__len = __half;
else
{
- __left = std::lower_bound(__first, __middle, __val, __comp);
+ _ForwardIterator __left = std::lower_bound(__first, __middle,
+ __val, __comp);
std::advance(__first, __len);
- __right = std::upper_bound(++__middle, __first, __val, __comp);
+ _ForwardIterator __right = std::upper_bound(++__middle, __first,
+ __val, __comp);
return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
}
}
@@ -4133,7 +4126,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _UniformRandomNumberGenerator& __g)
+ _UniformRandomNumberGenerator&& __g)
{
// concept requirements
__glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
@@ -4844,7 +4837,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
// "the type returned by a _Generator"
__typeof__(__gen())>)
- for (; __n > 0; --__n, ++__first)
+ for (__decltype(__n + 0) __niter = __n;
+ __niter > 0; --__niter, ++__first)
*__first = __gen();
return __first;
}
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index e92540431de..1d951aa7999 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -58,7 +58,6 @@
#define _STL_ALGOBASE_H 1
#include <bits/c++config.h>
-#include <cstddef>
#include <bits/functexcept.h>
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
@@ -258,27 +257,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __a;
}
-
- // If _Iterator has a base returns it otherwise _Iterator is returned
- // untouched
- template<typename _Iterator, bool _HasBase>
- struct _Iter_base
- {
- typedef _Iterator iterator_type;
- static iterator_type
- _S_base(_Iterator __it)
- { return __it; }
- };
-
- template<typename _Iterator>
- struct _Iter_base<_Iterator, true>
- {
- typedef typename _Iterator::iterator_type iterator_type;
- static iterator_type
- _S_base(_Iterator __it)
- { return __it.base(); }
- };
-
// If _Iterator is a __normal_iterator return its base (a plain pointer,
// normally) otherwise return it untouched. See copy, fill, ...
template<typename _Iterator>
@@ -395,7 +373,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename iterator_traits<_II>::value_type _ValueTypeI;
typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
typedef typename iterator_traits<_II>::iterator_category _Category;
- const bool __simple = (__is_pod(_ValueTypeI)
+ const bool __simple = (__is_trivial(_ValueTypeI)
&& __is_pointer<_II>::__value
&& __is_pointer<_OI>::__value
&& __are_same<_ValueTypeI, _ValueTypeO>::__value);
@@ -590,7 +568,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename iterator_traits<_BI1>::value_type _ValueType1;
typedef typename iterator_traits<_BI2>::value_type _ValueType2;
typedef typename iterator_traits<_BI1>::iterator_category _Category;
- const bool __simple = (__is_pod(_ValueType1)
+ const bool __simple = (__is_trivial(_ValueType1)
&& __is_pointer<_BI1>::__value
&& __is_pointer<_BI2>::__value
&& __are_same<_ValueType1, _ValueType2>::__value);
@@ -748,7 +726,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
__fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
{
- for (; __n > 0; --__n, ++__first)
+ for (__decltype(__n + 0) __niter = __n;
+ __niter > 0; --__niter, ++__first)
*__first = __value;
return __first;
}
@@ -759,7 +738,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
{
const _Tp __tmp = __value;
- for (; __n > 0; --__n, ++__first)
+ for (__decltype(__n + 0) __niter = __n;
+ __niter > 0; --__niter, ++__first)
*__first = __tmp;
return __first;
}
@@ -965,13 +945,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__glibcxx_requires_partitioned_lower(__first, __last, __val);
_DistanceType __len = std::distance(__first, __last);
- _DistanceType __half;
- _ForwardIterator __middle;
while (__len > 0)
{
- __half = __len >> 1;
- __middle = __first;
+ _DistanceType __half = __len >> 1;
+ _ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (*__middle < __val)
{
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index db81761ca7d..c489b447ca1 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -528,7 +528,7 @@ template<typename _Alloc>
#ifdef __GXX_EXPERIMENTAL_CXX0X__
vector(vector&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ : _Base(std::move(__x)) { }
vector(initializer_list<bool> __l,
const allocator_type& __a = allocator_type())
diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h
index 3c30b9a4504..d84b8f164fd 100644
--- a/libstdc++-v3/include/bits/stl_construct.h
+++ b/libstdc++-v3/include/bits/stl_construct.h
@@ -1,6 +1,7 @@
// nonstandard construct and destroy functions -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -66,19 +67,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* Constructs an object in existing memory by invoking an allocated
* object's constructor with an initializer.
*/
- template<typename _T1, typename _T2>
- inline void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- // Allow perfect forwarding
- _Construct(_T1* __p, _T2&& __value)
+ template<typename _T1, typename... _Args>
+ inline void
+ _Construct(_T1* __p, _Args&&... __args)
+ { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
#else
+ template<typename _T1, typename _T2>
+ inline void
_Construct(_T1* __p, const _T2& __value)
-#endif
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_]allocator::construct
- ::new(static_cast<void*>(__p)) _T1(_GLIBCXX_FORWARD(_T2, __value));
+ ::new(static_cast<void*>(__p)) _T1(__value);
}
+#endif
/**
* Destroy the object pointed to by a pointer type.
@@ -96,7 +99,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__destroy(_ForwardIterator __first, _ForwardIterator __last)
{
for (; __first != __last; ++__first)
- std::_Destroy(&*__first);
+ std::_Destroy(std::__addressof(*__first));
}
};
@@ -137,7 +140,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_Allocator& __alloc)
{
for (; __first != __last; ++__first)
- __alloc.destroy(&*__first);
+ __alloc.destroy(std::__addressof(*__first));
}
template<typename _ForwardIterator, typename _Tp>
diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h
index 19022b0cf34..397b6333b5b 100644
--- a/libstdc++-v3/include/bits/stl_deque.h
+++ b/libstdc++-v3/include/bits/stl_deque.h
@@ -449,6 +449,10 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
: _M_impl()
{ _M_initialize_map(0); }
+ _Deque_base(size_t __num_elements)
+ : _M_impl()
+ { _M_initialize_map(__num_elements); }
+
_Deque_base(const allocator_type& __a, size_t __num_elements)
: _M_impl(__a)
{ _M_initialize_map(__num_elements); }
@@ -773,6 +777,32 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
deque(const allocator_type& __a)
: _Base(__a, 0) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Creates a %deque with default constructed elements.
+ * @param n The number of elements to initially create.
+ *
+ * This constructor fills the %deque with @a n default
+ * constructed elements.
+ */
+ explicit
+ deque(size_type __n)
+ : _Base(__n)
+ { _M_default_initialize(); }
+
+ /**
+ * @brief Creates a %deque with copies of an exemplar element.
+ * @param n The number of elements to initially create.
+ * @param value An element to copy.
+ * @param a An allocator.
+ *
+ * This constructor fills the %deque with @a n copies of @a value.
+ */
+ deque(size_type __n, const value_type& __value,
+ const allocator_type& __a = allocator_type())
+ : _Base(__a, __n)
+ { _M_fill_initialize(__value); }
+#else
/**
* @brief Creates a %deque with copies of an exemplar element.
* @param n The number of elements to initially create.
@@ -786,6 +816,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
const allocator_type& __a = allocator_type())
: _Base(__a, __n)
{ _M_fill_initialize(__value); }
+#endif
/**
* @brief %Deque copy constructor.
@@ -808,8 +839,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The newly-created %deque contains the exact contents of @a x.
* The contents of @a x are a valid, but unspecified %deque.
*/
- deque(deque&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ deque(deque&& __x)
+ : _Base(std::move(__x)) { }
/**
* @brief Builds a %deque from an initializer list.
@@ -824,11 +855,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
*/
deque(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- _M_range_initialize(__l.begin(), __l.end(),
- random_access_iterator_tag());
- }
+ : _Base(__a)
+ {
+ _M_range_initialize(__l.begin(), __l.end(),
+ random_access_iterator_tag());
+ }
#endif
/**
@@ -1086,6 +1117,49 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
max_size() const
{ return _M_get_Tp_allocator().max_size(); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Resizes the %deque to the specified number of elements.
+ * @param new_size Number of elements the %deque should contain.
+ *
+ * This function will %resize the %deque to the specified
+ * number of elements. If the number is smaller than the
+ * %deque's current size the %deque is truncated, otherwise
+ * default constructed elements are appended.
+ */
+ void
+ resize(size_type __new_size)
+ {
+ const size_type __len = size();
+ if (__new_size > __len)
+ _M_default_append(__new_size - __len);
+ else if (__new_size < __len)
+ _M_erase_at_end(this->_M_impl._M_start
+ + difference_type(__new_size));
+ }
+
+ /**
+ * @brief Resizes the %deque to the specified number of elements.
+ * @param new_size Number of elements the %deque should contain.
+ * @param x Data with which new elements should be populated.
+ *
+ * This function will %resize the %deque to the specified
+ * number of elements. If the number is smaller than the
+ * %deque's current size the %deque is truncated, otherwise the
+ * %deque is extended and new elements are populated with given
+ * data.
+ */
+ void
+ resize(size_type __new_size, const value_type& __x)
+ {
+ const size_type __len = size();
+ if (__new_size > __len)
+ insert(this->_M_impl._M_finish, __new_size - __len, __x);
+ else if (__new_size < __len)
+ _M_erase_at_end(this->_M_impl._M_start
+ + difference_type(__new_size));
+ }
+#else
/**
* @brief Resizes the %deque to the specified number of elements.
* @param new_size Number of elements the %deque should contain.
@@ -1101,11 +1175,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
resize(size_type __new_size, value_type __x = value_type())
{
const size_type __len = size();
- if (__new_size < __len)
- _M_erase_at_end(this->_M_impl._M_start + difference_type(__new_size));
- else
+ if (__new_size > __len)
insert(this->_M_impl._M_finish, __new_size - __len, __x);
+ else if (__new_size < __len)
+ _M_erase_at_end(this->_M_impl._M_start
+ + difference_type(__new_size));
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/** A non-binding request to reduce memory use. */
@@ -1564,6 +1640,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
void
_M_fill_initialize(const value_type& __value);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // called by deque(n).
+ void
+ _M_default_initialize();
+#endif
+
// Internal assign functions follow. The *_aux functions do the actual
// assignment work for the range versions.
@@ -1752,6 +1834,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
this->_M_impl._M_finish = __pos;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // Called by resize(sz).
+ void
+ _M_default_append(size_type __n);
+#endif
+
//@{
/// Memory-handling helpers for the previous internal insert functions.
iterator
diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h
index 9348fe9702f..b52fa7a91e0 100644
--- a/libstdc++-v3/include/bits/stl_heap.h
+++ b/libstdc++-v3/include/bits/stl_heap.h
@@ -62,7 +62,7 @@
_GLIBCXX_BEGIN_NAMESPACE(std)
/**
- * @defgroup heap_algorithms Heap Algorithms
+ * @defgroup heap_algorithms Heap
* @ingroup sorting_algorithms
*/
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 105469acb4e..83a390d3d9e 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -416,14 +416,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* the end, if you like). Assigning a value to the %iterator will
* always append the value to the end of the container.
*/
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
back_insert_iterator&
operator=(typename _Container::const_reference __value)
{
container->push_back(__value);
return *this;
}
+#else
+ back_insert_iterator&
+ operator=(const typename _Container::value_type& __value)
+ {
+ container->push_back(__value);
+ return *this;
+ }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
back_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
@@ -499,14 +506,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* the front, if you like). Assigning a value to the %iterator will
* always prepend the value to the front of the container.
*/
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
front_insert_iterator&
operator=(typename _Container::const_reference __value)
{
container->push_front(__value);
return *this;
}
+#else
+ front_insert_iterator&
+ operator=(const typename _Container::value_type& __value)
+ {
+ container->push_front(__value);
+ return *this;
+ }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
front_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
@@ -603,6 +617,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* // vector v contains A, 1, 2, 3, and Z
* @endcode
*/
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
insert_iterator&
operator=(typename _Container::const_reference __value)
{
@@ -610,8 +625,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
++iter;
return *this;
}
+#else
+ insert_iterator&
+ operator=(const typename _Container::value_type& __value)
+ {
+ iter = container->insert(iter, __value);
+ ++iter;
+ return *this;
+ }
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
insert_iterator&
operator=(typename _Container::value_type&& __value)
{
diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
index 627fbe917ee..f885ae63f71 100644
--- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
+++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h
@@ -61,6 +61,7 @@
#define _STL_ITERATOR_BASE_FUNCS_H 1
#pragma GCC system_header
+
#include <bits/concept_check.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -173,6 +174,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+
template<typename _ForwardIterator>
inline _ForwardIterator
next(_ForwardIterator __x, typename
@@ -183,14 +185,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _BidirectionalIterator>
- inline _BidirectionalIterator
+ inline _BidirectionalIterator
prev(_BidirectionalIterator __x, typename
iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
{
std::advance(__x, -__n);
return __x;
}
-#endif
+
+#endif // __GXX_EXPERIMENTAL_CXX0X__
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/bits/stl_iterator_base_types.h b/libstdc++-v3/include/bits/stl_iterator_base_types.h
index 07687bd2cd3..20fee58a0a8 100644
--- a/libstdc++-v3/include/bits/stl_iterator_base_types.h
+++ b/libstdc++-v3/include/bits/stl_iterator_base_types.h
@@ -63,12 +63,21 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <bits/cpp_type_traits.h> // For __has_iterator_category
+#endif
_GLIBCXX_BEGIN_NAMESPACE(std)
/**
* @defgroup iterators Iterators
+ * Abstractions for uniform iterating through various underlying types.
+ */
+ //@{
+
+ /**
+ * @defgroup iterator_tags Iterator Tags
* These are empty types, used to distinguish different iterators. The
* distinction is not made by what they contain, but simply by what they
* are. Different underlying algorithms can then be used based on the
@@ -91,7 +100,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
/// Random-access iterators support a superset of bidirectional
/// iterator operations.
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
-
+ //@}
/**
* @brief Common %iterator class.
@@ -127,6 +136,25 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* argument. Specialized versions for pointers and pointers-to-const
* provide tighter, more correct semantics.
*/
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Iterator,
+ bool = __has_iterator_category<_Iterator>::__value>
+ struct __iterator_traits { };
+
+ template<typename _Iterator>
+ struct __iterator_traits<_Iterator, true>
+ {
+ typedef typename _Iterator::iterator_category iterator_category;
+ typedef typename _Iterator::value_type value_type;
+ typedef typename _Iterator::difference_type difference_type;
+ typedef typename _Iterator::pointer pointer;
+ typedef typename _Iterator::reference reference;
+ };
+
+ template<typename _Iterator>
+ struct iterator_traits
+ : public __iterator_traits<_Iterator> { };
+#else
template<typename _Iterator>
struct iterator_traits
{
@@ -136,6 +164,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename _Iterator::pointer pointer;
typedef typename _Iterator::reference reference;
};
+#endif
/// Partial specialization for pointer types.
template<typename _Tp>
@@ -170,6 +199,24 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
//@}
+ // If _Iterator has a base returns it otherwise _Iterator is returned
+ // untouched
+ template<typename _Iterator, bool _HasBase>
+ struct _Iter_base
+ {
+ typedef _Iterator iterator_type;
+ static iterator_type _S_base(_Iterator __it)
+ { return __it; }
+ };
+
+ template<typename _Iterator>
+ struct _Iter_base<_Iterator, true>
+ {
+ typedef typename _Iterator::iterator_type iterator_type;
+ static iterator_type _S_base(_Iterator __it)
+ { return __it.base(); }
+ };
+
_GLIBCXX_END_NAMESPACE
#endif /* _STL_ITERATOR_BASE_TYPES_H */
diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h
index 5fcbc4f3470..2bbb26fb494 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -128,14 +128,14 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_List_iterator(_List_node_base* __x)
: _M_node(__x) { }
- // Must downcast from List_node_base to _List_node to get to _M_data.
+ // Must downcast from _List_node_base to _List_node to get to _M_data.
reference
operator*() const
{ return static_cast<_Node*>(_M_node)->_M_data; }
pointer
operator->() const
- { return &static_cast<_Node*>(_M_node)->_M_data; }
+ { return std::__addressof(static_cast<_Node*>(_M_node)->_M_data); }
_Self&
operator++()
@@ -215,7 +215,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
pointer
operator->() const
- { return &static_cast<_Node*>(_M_node)->_M_data; }
+ { return std::__addressof(static_cast<_Node*>(_M_node)->_M_data); }
_Self&
operator++()
@@ -461,7 +461,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Node* __p = this->_M_get_node();
__try
{
- _M_get_Tp_allocator().construct(&__p->_M_data, __x);
+ _M_get_Tp_allocator().construct
+ (std::__addressof(__p->_M_data), __x);
}
__catch(...)
{
@@ -507,6 +508,32 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
list(const allocator_type& __a)
: _Base(__a) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Creates a %list with default constructed elements.
+ * @param n The number of elements to initially create.
+ *
+ * This constructor fills the %list with @a n default
+ * constructed elements.
+ */
+ explicit
+ list(size_type __n)
+ : _Base()
+ { _M_default_initialize(__n); }
+
+ /**
+ * @brief Creates a %list with copies of an exemplar element.
+ * @param n The number of elements to initially create.
+ * @param value An element to copy.
+ * @param a An allocator object.
+ *
+ * This constructor fills the %list with @a n copies of @a value.
+ */
+ list(size_type __n, const value_type& __value,
+ const allocator_type& __a = allocator_type())
+ : _Base(__a)
+ { _M_fill_initialize(__n, __value); }
+#else
/**
* @brief Creates a %list with copies of an exemplar element.
* @param n The number of elements to initially create.
@@ -520,6 +547,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
const allocator_type& __a = allocator_type())
: _Base(__a)
{ _M_fill_initialize(__n, __value); }
+#endif
/**
* @brief %List copy constructor.
@@ -541,7 +569,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %list.
*/
list(list&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ : _Base(std::move(__x)) { }
/**
* @brief Builds a %list from an initializer_list
@@ -810,6 +838,32 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
max_size() const
{ return _M_get_Node_allocator().max_size(); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Resizes the %list to the specified number of elements.
+ * @param new_size Number of elements the %list should contain.
+ *
+ * This function will %resize the %list to the specified number
+ * of elements. If the number is smaller than the %list's
+ * current size the %list is truncated, otherwise default
+ * constructed elements are appended.
+ */
+ void
+ resize(size_type __new_size);
+
+ /**
+ * @brief Resizes the %list to the specified number of elements.
+ * @param new_size Number of elements the %list should contain.
+ * @param x Data with which new elements should be populated.
+ *
+ * This function will %resize the %list to the specified number
+ * of elements. If the number is smaller than the %list's
+ * current size the %list is truncated, otherwise the %list is
+ * extended and new elements are populated with given data.
+ */
+ void
+ resize(size_type __new_size, const value_type& __x);
+#else
/**
* @brief Resizes the %list to the specified number of elements.
* @param new_size Number of elements the %list should contain.
@@ -822,6 +876,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
*/
void
resize(size_type __new_size, value_type __x = value_type());
+#endif
// element access
/**
@@ -1393,10 +1448,23 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
void
_M_fill_initialize(size_type __n, const value_type& __x)
{
- for (; __n > 0; --__n)
+ for (; __n; --__n)
push_back(__x);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // Called by list(n).
+ void
+ _M_default_initialize(size_type __n)
+ {
+ for (; __n; --__n)
+ emplace_back();
+ }
+
+ // Called by resize(sz).
+ void
+ _M_default_append(size_type __n);
+#endif
// Internal assign functions follow.
@@ -1453,7 +1521,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_M_get_Node_allocator().destroy(__n);
#else
- _M_get_Tp_allocator().destroy(&__n->_M_data);
+ _M_get_Tp_allocator().destroy(std::__addressof(__n->_M_data));
#endif
_M_put_node(__n);
}
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index 7f81fab1c64..5d6a98b75b2 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -179,7 +179,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %map.
*/
map(map&& __x)
- : _M_t(std::forward<_Rep_type>(__x._M_t)) { }
+ : _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %map from an initializer_list.
diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h
index e5575bc9f72..82a80f27eb4 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -177,7 +177,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %multimap.
*/
multimap(multimap&& __x)
- : _M_t(std::forward<_Rep_type>(__x._M_t)) { }
+ : _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %multimap from an initializer_list.
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index 209e58eb9e8..cfe849bf79a 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -190,7 +190,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %multiset.
*/
multiset(multiset&& __x)
- : _M_t(std::forward<_Rep_type>(__x._M_t)) { }
+ : _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %multiset from an initializer_list.
diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h
index 11d0d107f25..c5f2986fb77 100644
--- a/libstdc++-v3/include/bits/stl_pair.h
+++ b/libstdc++-v3/include/bits/stl_pair.h
@@ -57,15 +57,25 @@
#ifndef _STL_PAIR_H
#define _STL_PAIR_H 1
-#include <bits/move.h> // for std::move / std::forward, std::decay, and
- // std::swap
+#include <bits/move.h> // for std::move / std::forward, and std::swap
#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <type_traits>
+#include <type_traits> // for std::__decay_and_strip too
#endif
_GLIBCXX_BEGIN_NAMESPACE(std)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ struct piecewise_construct_t { };
+
+ // forward declarations
+ template<typename...>
+ class tuple;
+
+ template<int...>
+ struct _Index_tuple;
+#endif
+
/// pair holds two objects of arbitrary type.
template<class _T1, class _T2>
struct pair
@@ -88,6 +98,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
: first(__a), second(__b) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ pair(const pair&) = default;
+
// DR 811.
template<class _U1, class = typename
std::enable_if<std::is_convertible<_U1, _T1>::value>::type>
@@ -108,9 +120,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
: first(std::forward<_U1>(__x)),
second(std::forward<_U2>(__y)) { }
- pair(pair&& __p)
- : first(std::move(__p.first)),
- second(std::move(__p.second)) { }
+ template<class... _Args1, class... _Args2>
+ pair(piecewise_construct_t,
+ tuple<_Args1...> __first_args,
+ tuple<_Args2...> __second_args)
+ : first(__cons<first_type>(std::move(__first_args))),
+ second(__cons<second_type>(std::move(__second_args))) { }
#endif
/** There is also a templated copy ctor for the @c pair class itself. */
@@ -122,8 +137,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<class _U1, class _U2>
pair(pair<_U1, _U2>&& __p)
- : first(std::move(__p.first)),
- second(std::move(__p.second)) { }
+ : first(std::forward<_U1>(__p.first)),
+ second(std::forward<_U2>(__p.second)) { }
pair&
operator=(pair&& __p)
@@ -135,6 +150,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<class _U1, class _U2>
pair&
+ operator=(const pair<_U1, _U2>& __p)
+ {
+ first = __p.first;
+ second = __p.second;
+ return *this;
+ }
+
+ template<class _U1, class _U2>
+ pair&
operator=(pair<_U1, _U2>&& __p)
{
first = std::move(__p.first);
@@ -149,6 +173,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
swap(first, __p.first);
swap(second, __p.second);
}
+
+ private:
+ template<typename _Tp, typename... _Args>
+ static _Tp
+ __cons(tuple<_Args...>&&);
+
+ template<typename _Tp, typename... _Args, int... _Indexes>
+ static _Tp
+ __do_cons(tuple<_Args...>&&, const _Index_tuple<_Indexes...>&);
#endif
};
@@ -217,35 +250,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
make_pair(_T1 __x, _T2 __y)
{ return pair<_T1, _T2>(__x, __y); }
#else
- template<typename _Tp>
- class reference_wrapper;
-
- // Helper which adds a reference to a type when given a reference_wrapper
- template<typename _Tp>
- struct __strip_reference_wrapper
- {
- typedef _Tp __type;
- };
-
- template<typename _Tp>
- struct __strip_reference_wrapper<reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
-
- template<typename _Tp>
- struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
-
- template<typename _Tp>
- struct __decay_and_strip
- {
- typedef typename __strip_reference_wrapper<
- typename decay<_Tp>::type>::__type __type;
- };
-
// NB: DR 706.
template<class _T1, class _T2>
inline pair<typename __decay_and_strip<_T1>::__type,
diff --git a/libstdc++-v3/include/bits/stl_queue.h b/libstdc++-v3/include/bits/stl_queue.h
index 058f1b65d27..96e29ed636e 100644
--- a/libstdc++-v3/include/bits/stl_queue.h
+++ b/libstdc++-v3/include/bits/stl_queue.h
@@ -1,6 +1,6 @@
// Queue implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -137,16 +137,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
explicit
queue(_Sequence&& __c = _Sequence())
: c(std::move(__c)) { }
-
- queue(queue&& __q)
- : c(std::move(__q.c)) { }
-
- queue&
- operator=(queue&& __q)
- {
- c = std::move(__q.c);
- return *this;
- }
#endif
/**
@@ -451,17 +441,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
c.insert(c.end(), __first, __last);
std::make_heap(c.begin(), c.end(), comp);
}
-
- priority_queue(priority_queue&& __pq)
- : c(std::move(__pq.c)), comp(std::move(__pq.comp)) { }
-
- priority_queue&
- operator=(priority_queue&& __pq)
- {
- c = std::move(__pq.c);
- comp = std::move(__pq.comp);
- return *this;
- }
#endif
/**
diff --git a/libstdc++-v3/include/bits/stl_raw_storage_iter.h b/libstdc++-v3/include/bits/stl_raw_storage_iter.h
index de6cad97042..254aa85a1a7 100644
--- a/libstdc++-v3/include/bits/stl_raw_storage_iter.h
+++ b/libstdc++-v3/include/bits/stl_raw_storage_iter.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -81,7 +81,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
raw_storage_iterator&
operator=(const _Tp& __element)
{
- std::_Construct(&*_M_iter, __element);
+ std::_Construct(std::__addressof(*_M_iter), __element);
return *this;
}
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index 54321e278ac..ce5bc6c15f2 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -197,7 +197,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %set.
*/
set(set&& __x)
- : _M_t(std::forward<_Rep_type>(__x._M_t)) { }
+ : _M_t(std::move(__x._M_t)) { }
/**
* @brief Builds a %set from an initializer_list.
diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h
index a08b1ee1324..47571179c87 100644
--- a/libstdc++-v3/include/bits/stl_tempbuf.h
+++ b/libstdc++-v3/include/bits/stl_tempbuf.h
@@ -59,7 +59,6 @@
#include <bits/stl_algobase.h>
#include <bits/stl_construct.h>
-#include <bits/stl_uninitialized.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -176,6 +175,70 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
operator=(const _Temporary_buffer&);
};
+
+ template<bool>
+ struct __uninitialized_construct_buf_dispatch
+ {
+ template<typename _ForwardIterator, typename _Tp>
+ static void
+ __ucr(_ForwardIterator __first, _ForwardIterator __last,
+ _Tp& __value)
+ {
+ if(__first == __last)
+ return;
+
+ _ForwardIterator __cur = __first;
+ __try
+ {
+ std::_Construct(std::__addressof(*__first),
+ _GLIBCXX_MOVE(__value));
+ _ForwardIterator __prev = __cur;
+ ++__cur;
+ for(; __cur != __last; ++__cur, ++__prev)
+ std::_Construct(std::__addressof(*__cur),
+ _GLIBCXX_MOVE(*__prev));
+ __value = _GLIBCXX_MOVE(*__prev);
+ }
+ __catch(...)
+ {
+ std::_Destroy(__first, __cur);
+ __throw_exception_again;
+ }
+ }
+ };
+
+ template<>
+ struct __uninitialized_construct_buf_dispatch<true>
+ {
+ template<typename _ForwardIterator, typename _Tp>
+ static void
+ __ucr(_ForwardIterator, _ForwardIterator, _Tp&) { }
+ };
+
+ // Constructs objects in the range [first, last).
+ // Note that while these new objects will take valid values,
+ // their exact value is not defined. In particular they may
+ // be 'moved from'.
+ //
+ // While __value may altered during this algorithm, it will have
+ // the same value when the algorithm finishes, unless one of the
+ // constructions throws.
+ //
+ // Requirements: _ForwardIterator::value_type(_Tp&&) is valid.
+ template<typename _ForwardIterator, typename _Tp>
+ inline void
+ __uninitialized_construct_buf(_ForwardIterator __first,
+ _ForwardIterator __last,
+ _Tp& __value)
+ {
+ typedef typename std::iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+
+ std::__uninitialized_construct_buf_dispatch<
+ __has_trivial_constructor(_ValueType)>::
+ __ucr(__first, __last, __value);
+ }
+
template<typename _ForwardIterator, typename _Tp>
_Temporary_buffer<_ForwardIterator, _Tp>::
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
@@ -189,8 +252,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_buffer = __p.first;
_M_len = __p.second;
if(_M_buffer)
- std::__uninitialized_construct_range(_M_buffer, _M_buffer + _M_len,
- *__first);
+ std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
+ *__first);
}
__catch(...)
{
diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
index d37dc57246e..4e9fdf73b55 100644
--- a/libstdc++-v3/include/bits/stl_tree.h
+++ b/libstdc++-v3/include/bits/stl_tree.h
@@ -1,6 +1,7 @@
// RB tree implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -176,7 +177,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pointer
operator->() const
- { return &static_cast<_Link_type>(_M_node)->_M_value_field; }
+ { return std::__addressof(static_cast<_Link_type>
+ (_M_node)->_M_value_field); }
_Self&
operator++()
@@ -251,7 +253,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pointer
operator->() const
- { return &static_cast<_Link_type>(_M_node)->_M_value_field; }
+ { return std::__addressof(static_cast<_Link_type>
+ (_M_node)->_M_value_field); }
_Self&
operator++()
@@ -368,7 +371,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
_Link_type __tmp = _M_get_node();
__try
- { get_allocator().construct(&__tmp->_M_value_field, __x); }
+ { get_allocator().construct
+ (std::__addressof(__tmp->_M_value_field), __x); }
__catch(...)
{
_M_put_node(__tmp);
@@ -380,7 +384,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
_M_destroy_node(_Link_type __p)
{
- get_allocator().destroy(&__p->_M_value_field);
+ get_allocator().destroy(std::__addressof(__p->_M_value_field));
_M_put_node(__p);
}
#else
@@ -1354,7 +1358,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// DR 130. Associative erase should return an iterator.
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc>
- inline typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+ typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
erase(iterator __position)
{
@@ -1373,7 +1377,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// DR 130. Associative erase should return an iterator.
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc>
- inline typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator
+ typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
erase(const_iterator __position)
{
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index 4b6399d9961..c5cbde0c1a4 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -1,6 +1,7 @@
// Raw memory manipulators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -59,19 +60,19 @@
_GLIBCXX_BEGIN_NAMESPACE(std)
- template<bool>
+ template<bool _TrivialValueTypes>
struct __uninitialized_copy
{
template<typename _InputIterator, typename _ForwardIterator>
static _ForwardIterator
- uninitialized_copy(_InputIterator __first, _InputIterator __last,
- _ForwardIterator __result)
+ __uninit_copy(_InputIterator __first, _InputIterator __last,
+ _ForwardIterator __result)
{
_ForwardIterator __cur = __result;
__try
{
for (; __first != __last; ++__first, ++__cur)
- std::_Construct(&*__cur, *__first);
+ std::_Construct(std::__addressof(*__cur), *__first);
return __cur;
}
__catch(...)
@@ -87,8 +88,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
template<typename _InputIterator, typename _ForwardIterator>
static _ForwardIterator
- uninitialized_copy(_InputIterator __first, _InputIterator __last,
- _ForwardIterator __result)
+ __uninit_copy(_InputIterator __first, _InputIterator __last,
+ _ForwardIterator __result)
{ return std::copy(__first, __last, __result); }
};
@@ -111,25 +112,25 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename iterator_traits<_ForwardIterator>::value_type
_ValueType2;
- return std::__uninitialized_copy<(__is_pod(_ValueType1)
- && __is_pod(_ValueType2))>::
- uninitialized_copy(__first, __last, __result);
+ return std::__uninitialized_copy<(__is_trivial(_ValueType1)
+ && __is_trivial(_ValueType2))>::
+ __uninit_copy(__first, __last, __result);
}
- template<bool>
+ template<bool _TrivialValueType>
struct __uninitialized_fill
{
template<typename _ForwardIterator, typename _Tp>
static void
- uninitialized_fill(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __x)
+ __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+ const _Tp& __x)
{
_ForwardIterator __cur = __first;
__try
{
for (; __cur != __last; ++__cur)
- std::_Construct(&*__cur, __x);
+ std::_Construct(std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -144,8 +145,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
template<typename _ForwardIterator, typename _Tp>
static void
- uninitialized_fill(_ForwardIterator __first,
- _ForwardIterator __last, const _Tp& __x)
+ __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+ const _Tp& __x)
{ std::fill(__first, __last, __x); }
};
@@ -166,86 +167,24 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename iterator_traits<_ForwardIterator>::value_type
_ValueType;
- std::__uninitialized_fill<__is_pod(_ValueType)>::
- uninitialized_fill(__first, __last, __x);
+ std::__uninitialized_fill<__is_trivial(_ValueType)>::
+ __uninit_fill(__first, __last, __x);
}
- template<bool>
- struct __uninitialized_construct_range_dispatch
- {
- template<typename _ForwardIterator, typename _Tp>
- static void
- __ucr(_ForwardIterator __first, _ForwardIterator __last,
- _Tp& __value)
- {
- if(__first == __last)
- return;
-
- _ForwardIterator __cur = __first;
- __try
- {
- std::_Construct(&*__first, _GLIBCXX_MOVE(__value));
- _ForwardIterator __prev = __cur;
- ++__cur;
- for(; __cur != __last; ++__cur, ++__prev)
- std::_Construct(&*__cur, _GLIBCXX_MOVE(*__prev));
- __value = _GLIBCXX_MOVE(*__prev);
- }
- __catch(...)
- {
- std::_Destroy(__first, __cur);
- __throw_exception_again;
- }
- }
- };
-
- template<>
- struct __uninitialized_construct_range_dispatch<true>
- {
- template<typename _ForwardIterator, typename _Tp>
- static void
- __ucr(_ForwardIterator, _ForwardIterator, _Tp&) { }
- };
-
- // Constructs objects in the range [first, last).
- // Note that while these new objects will take valid values,
- // their exact value is not defined. In particular they may
- // be 'moved from'.
- //
- // While __value may altered during this algorithm, it will have
- // the same value when the algorithm finishes, unless one of the
- // constructions throws.
- //
- // Requirements: _ForwardIterator::value_type(_Tp&&) is valid.
- template<typename _ForwardIterator, typename _Tp>
- inline void
- __uninitialized_construct_range(_ForwardIterator __first,
- _ForwardIterator __last,
- _Tp& __value)
- {
- typedef typename std::iterator_traits<_ForwardIterator>::value_type
- _ValueType;
-
- std::__uninitialized_construct_range_dispatch<
- __has_trivial_constructor(_ValueType)>::
- __ucr(__first, __last, __value);
- }
-
-
- template<bool>
+ template<bool _TrivialValueType>
struct __uninitialized_fill_n
{
template<typename _ForwardIterator, typename _Size, typename _Tp>
static void
- uninitialized_fill_n(_ForwardIterator __first, _Size __n,
- const _Tp& __x)
+ __uninit_fill_n(_ForwardIterator __first, _Size __n,
+ const _Tp& __x)
{
_ForwardIterator __cur = __first;
__try
{
for (; __n > 0; --__n, ++__cur)
- std::_Construct(&*__cur, __x);
+ std::_Construct(std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -260,8 +199,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
template<typename _ForwardIterator, typename _Size, typename _Tp>
static void
- uninitialized_fill_n(_ForwardIterator __first, _Size __n,
- const _Tp& __x)
+ __uninit_fill_n(_ForwardIterator __first, _Size __n,
+ const _Tp& __x)
{ std::fill_n(__first, __n, __x); }
};
@@ -281,8 +220,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef typename iterator_traits<_ForwardIterator>::value_type
_ValueType;
- std::__uninitialized_fill_n<__is_pod(_ValueType)>::
- uninitialized_fill_n(__first, __n, __x);
+ std::__uninitialized_fill_n<__is_trivial(_ValueType)>::
+ __uninit_fill_n(__first, __n, __x);
}
// Extensions: versions of uninitialized_copy, uninitialized_fill,
@@ -301,7 +240,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__try
{
for (; __first != __last; ++__first, ++__cur)
- __alloc.construct(&*__cur, *__first);
+ __alloc.construct(std::__addressof(*__cur), *__first);
return __cur;
}
__catch(...)
@@ -337,7 +276,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__try
{
for (; __cur != __last; ++__cur)
- __alloc.construct(&*__cur, __x);
+ __alloc.construct(std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -362,7 +301,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__try
{
for (; __n > 0; --__n, ++__cur)
- __alloc.construct(&*__cur, __x);
+ __alloc.construct(std::__addressof(*__cur), __x);
}
__catch(...)
{
@@ -488,6 +427,166 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // Extensions: __uninitialized_default, __uninitialized_default_n,
+ // __uninitialized_default_a, __uninitialized_default_n_a.
+
+ template<bool _TrivialValueType>
+ struct __uninitialized_default_1
+ {
+ template<typename _ForwardIterator>
+ static void
+ __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+ {
+ _ForwardIterator __cur = __first;
+ __try
+ {
+ for (; __cur != __last; ++__cur)
+ std::_Construct(std::__addressof(*__cur));
+ }
+ __catch(...)
+ {
+ std::_Destroy(__first, __cur);
+ __throw_exception_again;
+ }
+ }
+ };
+
+ template<>
+ struct __uninitialized_default_1<true>
+ {
+ template<typename _ForwardIterator>
+ static void
+ __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+ {
+ typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+
+ std::fill(__first, __last, _ValueType());
+ }
+ };
+
+ template<bool _TrivialValueType>
+ struct __uninitialized_default_n_1
+ {
+ template<typename _ForwardIterator, typename _Size>
+ static void
+ __uninit_default_n(_ForwardIterator __first, _Size __n)
+ {
+ _ForwardIterator __cur = __first;
+ __try
+ {
+ for (; __n > 0; --__n, ++__cur)
+ std::_Construct(std::__addressof(*__cur));
+ }
+ __catch(...)
+ {
+ std::_Destroy(__first, __cur);
+ __throw_exception_again;
+ }
+ }
+ };
+
+ template<>
+ struct __uninitialized_default_n_1<true>
+ {
+ template<typename _ForwardIterator, typename _Size>
+ static void
+ __uninit_default_n(_ForwardIterator __first, _Size __n)
+ {
+ typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+
+ std::fill_n(__first, __n, _ValueType());
+ }
+ };
+
+ // __uninitialized_default
+ // Fills [first, last) with std::distance(first, last) default
+ // constructed value_types(s).
+ template<typename _ForwardIterator>
+ inline void
+ __uninitialized_default(_ForwardIterator __first,
+ _ForwardIterator __last)
+ {
+ typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+
+ std::__uninitialized_default_1<__is_trivial(_ValueType)>::
+ __uninit_default(__first, __last);
+ }
+
+ // __uninitialized_default_n
+ // Fills [first, first + n) with n default constructed value_type(s).
+ template<typename _ForwardIterator, typename _Size>
+ inline void
+ __uninitialized_default_n(_ForwardIterator __first, _Size __n)
+ {
+ typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+
+ std::__uninitialized_default_n_1<__is_trivial(_ValueType)>::
+ __uninit_default_n(__first, __n);
+ }
+
+
+ // __uninitialized_default_a
+ // Fills [first, last) with std::distance(first, last) default
+ // constructed value_types(s), constructed with the allocator alloc.
+ template<typename _ForwardIterator, typename _Allocator>
+ void
+ __uninitialized_default_a(_ForwardIterator __first,
+ _ForwardIterator __last,
+ _Allocator& __alloc)
+ {
+ _ForwardIterator __cur = __first;
+ __try
+ {
+ for (; __cur != __last; ++__cur)
+ __alloc.construct(std::__addressof(*__cur));
+ }
+ __catch(...)
+ {
+ std::_Destroy(__first, __cur, __alloc);
+ __throw_exception_again;
+ }
+ }
+
+ template<typename _ForwardIterator, typename _Tp>
+ inline void
+ __uninitialized_default_a(_ForwardIterator __first,
+ _ForwardIterator __last,
+ allocator<_Tp>&)
+ { std::__uninitialized_default(__first, __last); }
+
+
+ // __uninitialized_default_n_a
+ // Fills [first, first + n) with n default constructed value_types(s),
+ // constructed with the allocator alloc.
+ template<typename _ForwardIterator, typename _Size, typename _Allocator>
+ void
+ __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+ _Allocator& __alloc)
+ {
+ _ForwardIterator __cur = __first;
+ __try
+ {
+ for (; __n > 0; --__n, ++__cur)
+ __alloc.construct(std::__addressof(*__cur));
+ }
+ __catch(...)
+ {
+ std::_Destroy(__first, __cur, __alloc);
+ __throw_exception_again;
+ }
+ }
+
+ template<typename _ForwardIterator, typename _Size, typename _Tp>
+ inline void
+ __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+ allocator<_Tp>&)
+ { std::__uninitialized_default_n(__first, __n); }
+
+
template<typename _InputIterator, typename _Size,
typename _ForwardIterator>
_ForwardIterator
@@ -498,8 +597,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__try
{
for (; __n > 0; --__n, ++__first, ++__cur)
- ::new(static_cast<void*>(&*__cur)) typename
- iterator_traits<_ForwardIterator>::value_type(*__first);
+ std::_Construct(std::__addressof(*__cur), *__first);
return __cur;
}
__catch(...)
diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h
index 96fc86c5dc9..147e3f7715b 100644
--- a/libstdc++-v3/include/bits/stl_vector.h
+++ b/libstdc++-v3/include/bits/stl_vector.h
@@ -107,6 +107,14 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Vector_base(const allocator_type& __a)
: _M_impl(__a) { }
+ _Vector_base(size_t __n)
+ : _M_impl()
+ {
+ this->_M_impl._M_start = this->_M_allocate(__n);
+ this->_M_impl._M_finish = this->_M_impl._M_start;
+ this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+ }
+
_Vector_base(size_t __n, const allocator_type& __a)
: _M_impl(__a)
{
@@ -215,6 +223,32 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
vector(const allocator_type& __a)
: _Base(__a) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Creates a %vector with default constructed elements.
+ * @param n The number of elements to initially create.
+ *
+ * This constructor fills the %vector with @a n default
+ * constructed elements.
+ */
+ explicit
+ vector(size_type __n)
+ : _Base(__n)
+ { _M_default_initialize(__n); }
+
+ /**
+ * @brief Creates a %vector with copies of an exemplar element.
+ * @param n The number of elements to initially create.
+ * @param value An element to copy.
+ * @param a An allocator.
+ *
+ * This constructor fills the %vector with @a n copies of @a value.
+ */
+ vector(size_type __n, const value_type& __value,
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __a)
+ { _M_fill_initialize(__n, __value); }
+#else
/**
* @brief Creates a %vector with copies of an exemplar element.
* @param n The number of elements to initially create.
@@ -228,6 +262,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
const allocator_type& __a = allocator_type())
: _Base(__n, __a)
{ _M_fill_initialize(__n, __value); }
+#endif
/**
* @brief %Vector copy constructor.
@@ -255,7 +290,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* The contents of @a x are a valid, but unspecified %vector.
*/
vector(vector&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ : _Base(std::move(__x)) { }
/**
* @brief Builds a %vector from an initializer list.
@@ -538,6 +573,25 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
max_size() const
{ return _M_get_Tp_allocator().max_size(); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Resizes the %vector to the specified number of elements.
+ * @param new_size Number of elements the %vector should contain.
+ *
+ * This function will %resize the %vector to the specified
+ * number of elements. If the number is smaller than the
+ * %vector's current size the %vector is truncated, otherwise
+ * default constructed elements are appended.
+ */
+ void
+ resize(size_type __new_size)
+ {
+ if (__new_size > size())
+ _M_default_append(__new_size - size());
+ else if (__new_size < size())
+ _M_erase_at_end(this->_M_impl._M_start + __new_size);
+ }
+
/**
* @brief Resizes the %vector to the specified number of elements.
* @param new_size Number of elements the %vector should contain.
@@ -550,13 +604,34 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* given data.
*/
void
- resize(size_type __new_size, value_type __x = value_type())
+ resize(size_type __new_size, const value_type& __x)
{
- if (__new_size < size())
+ if (__new_size > size())
+ insert(end(), __new_size - size(), __x);
+ else if (__new_size < size())
_M_erase_at_end(this->_M_impl._M_start + __new_size);
- else
+ }
+#else
+ /**
+ * @brief Resizes the %vector to the specified number of elements.
+ * @param new_size Number of elements the %vector should contain.
+ * @param x Data with which new elements should be populated.
+ *
+ * This function will %resize the %vector to the specified
+ * number of elements. If the number is smaller than the
+ * %vector's current size the %vector is truncated, otherwise
+ * the %vector is extended and new elements are populated with
+ * given data.
+ */
+ void
+ resize(size_type __new_size, value_type __x = value_type())
+ {
+ if (__new_size > size())
insert(end(), __new_size - size(), __x);
+ else if (__new_size < size())
+ _M_erase_at_end(this->_M_impl._M_start + __new_size);
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/** A non-binding request to reduce capacity() to size(). */
@@ -718,13 +793,21 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* Returns a pointer such that [data(), data() + size()) is a valid
* range. For a non-empty %vector, data() == &front().
*/
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ _Tp*
+#else
pointer
+#endif
data()
- { return pointer(this->_M_impl._M_start); }
+ { return std::__addressof(front()); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ const _Tp*
+#else
const_pointer
+#endif
data() const
- { return const_pointer(this->_M_impl._M_start); }
+ { return std::__addressof(front()); }
// [23.2.4.3] modifiers
/**
@@ -1041,6 +1124,16 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // Called by the vector(n) constructor.
+ void
+ _M_default_initialize(size_type __n)
+ {
+ std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
+ _M_get_Tp_allocator());
+ this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
+ }
+#endif
// Internal assign functions follow. The *_aux functions do the actual
// assignment work for the range versions.
@@ -1123,6 +1216,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
void
_M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // Called by resize(n).
+ void
+ _M_default_append(size_type __n);
+#endif
+
// Called by insert(p,x)
#ifndef __GXX_EXPERIMENTAL_CXX0X__
void
diff --git a/libstdc++-v3/include/bits/stringfwd.h b/libstdc++-v3/include/bits/stringfwd.h
index c63e777b718..5679be76524 100644
--- a/libstdc++-v3/include/bits/stringfwd.h
+++ b/libstdc++-v3/include/bits/stringfwd.h
@@ -1,6 +1,7 @@
// String support -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -44,6 +45,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _Alloc>
class allocator;
+ /**
+ * @defgroup strings Strings
+ *
+ * @{
+ */
+
template<class _CharT>
struct char_traits;
@@ -53,12 +60,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<> struct char_traits<char>;
- typedef basic_string<char> string;
+ typedef basic_string<char> string; ///< A string of @c char
#ifdef _GLIBCXX_USE_WCHAR_T
template<> struct char_traits<wchar_t>;
- typedef basic_string<wchar_t> wstring;
+ typedef basic_string<wchar_t> wstring; ///< A string of @c wchar_t
#endif
#if (defined(__GXX_EXPERIMENTAL_CXX0X__) \
@@ -67,10 +74,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<> struct char_traits<char16_t>;
template<> struct char_traits<char32_t>;
- typedef basic_string<char16_t> u16string;
- typedef basic_string<char32_t> u32string;
+ typedef basic_string<char16_t> u16string; ///< A string of @c char16_t
+ typedef basic_string<char32_t> u32string; ///< A string of @c char32_t
#endif
+ /** @} */
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h
index afa3043c428..d6adb1459e3 100644
--- a/libstdc++-v3/include/bits/unique_ptr.h
+++ b/libstdc++-v3/include/bits/unique_ptr.h
@@ -49,7 +49,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
default_delete() { }
- template<typename _Up>
+ template<typename _Up, typename = typename
+ std::enable_if<std::is_convertible<_Up*, _Tp*>::value>::type>
default_delete(const default_delete<_Up>&) { }
void
@@ -77,16 +78,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
};
/// 20.7.12.2 unique_ptr for single objects.
- template <typename _Tp, typename _Tp_Deleter = default_delete<_Tp> >
+ template <typename _Tp, typename _Dp = default_delete<_Tp> >
class unique_ptr
{
- typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
- typedef _Tp* unique_ptr::* __unspecified_pointer_type;
+ typedef std::tuple<_Tp*, _Dp> __tuple_type;
+
+ // use SFINAE to determine whether _Del::pointer exists
+ class _Pointer
+ {
+ template<typename _Up>
+ static typename _Up::pointer __test(typename _Up::pointer*);
+
+ template<typename _Up>
+ static _Tp* __test(...);
+
+ typedef typename remove_reference<_Dp>::type _Del;
+
+ public:
+ typedef decltype( __test<_Del>(0) ) type;
+ };
public:
- typedef _Tp* pointer;
- typedef _Tp element_type;
- typedef _Tp_Deleter deleter_type;
+ typedef typename _Pointer::type pointer;
+ typedef _Tp element_type;
+ typedef _Dp deleter_type;
// Constructors.
unique_ptr()
@@ -111,18 +126,40 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
+ unique_ptr(nullptr_t)
+ : _M_t(pointer(), deleter_type())
+ { }
+
// Move constructors.
unique_ptr(unique_ptr&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
- template<typename _Up, typename _Up_Deleter>
- unique_ptr(unique_ptr<_Up, _Up_Deleter>&& __u)
+ template<typename _Up, typename _Ep, typename = typename
+ std::enable_if
+ <std::is_convertible<typename unique_ptr<_Up, _Ep>::pointer,
+ pointer>::value
+ && !std::is_array<_Up>::value
+ && ((std::is_reference<_Dp>::value
+ && std::is_same<_Ep, _Dp>::value)
+ || (!std::is_reference<_Dp>::value
+ && std::is_convertible<_Ep, _Dp>::value))>
+ ::type>
+ unique_ptr(unique_ptr<_Up, _Ep>&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter()))
{ }
+#if _GLIBCXX_DEPRECATED
+ template<typename _Up, typename = typename
+ std::enable_if<std::is_convertible<_Up*, _Tp*>::value
+ && std::is_same<_Dp,
+ default_delete<_Tp>>::value>::type>
+ unique_ptr(auto_ptr<_Up>&& __u)
+ : _M_t(__u.release(), deleter_type()) { }
+#endif
+
// Destructor.
~unique_ptr() { reset(); }
-
+
// Assignment.
unique_ptr&
operator=(unique_ptr&& __u)
@@ -132,9 +169,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return *this;
}
- template<typename _Up, typename _Up_Deleter>
+ template<typename _Up, typename _Ep, typename = typename
+ std::enable_if
+ <std::is_convertible<typename unique_ptr<_Up, _Ep>::pointer,
+ pointer>::value
+ && !std::is_array<_Up>::value>::type>
unique_ptr&
- operator=(unique_ptr<_Up, _Up_Deleter>&& __u)
+ operator=(unique_ptr<_Up, _Ep>&& __u)
{
reset(__u.release());
get_deleter() = std::move(__u.get_deleter());
@@ -142,7 +183,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
unique_ptr&
- operator=(__unspecified_pointer_type)
+ operator=(nullptr_t)
{
reset();
return *this;
@@ -215,16 +256,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// [unique.ptr.runtime]
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 740 - omit specialization for array objects with a compile time length
- template<typename _Tp, typename _Tp_Deleter>
- class unique_ptr<_Tp[], _Tp_Deleter>
+ template<typename _Tp, typename _Dp>
+ class unique_ptr<_Tp[], _Dp>
{
- typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
- typedef _Tp* unique_ptr::* __unspecified_pointer_type;
+ typedef std::tuple<_Tp*, _Dp> __tuple_type;
public:
typedef _Tp* pointer;
typedef _Tp element_type;
- typedef _Tp_Deleter deleter_type;
+ typedef _Dp deleter_type;
// Constructors.
unique_ptr()
@@ -249,12 +289,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
+ /* TODO: use delegating constructor */
+ unique_ptr(nullptr_t)
+ : _M_t(pointer(), deleter_type())
+ { }
+
// Move constructors.
unique_ptr(unique_ptr&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
- template<typename _Up, typename _Up_Deleter>
- unique_ptr(unique_ptr<_Up, _Up_Deleter>&& __u)
+ template<typename _Up, typename _Ep>
+ unique_ptr(unique_ptr<_Up, _Ep>&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter()))
{ }
@@ -270,9 +315,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return *this;
}
- template<typename _Up, typename _Up_Deleter>
+ template<typename _Up, typename _Ep>
unique_ptr&
- operator=(unique_ptr<_Up, _Up_Deleter>&& __u)
+ operator=(unique_ptr<_Up, _Ep>&& __u)
{
reset(__u.release());
get_deleter() = std::move(__u.get_deleter());
@@ -280,7 +325,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
unique_ptr&
- operator=(__unspecified_pointer_type)
+ operator=(nullptr_t)
{
reset();
return *this;
@@ -323,7 +368,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
using std::swap;
swap(std::get<0>(_M_t), __p);
- if (__p != pointer())
+ if (__p != nullptr)
+ get_deleter()(__p);
+ }
+
+ void
+ reset(nullptr_t)
+ {
+ pointer __p = get();
+ std::get<0>(_M_t) = pointer();
+ if (__p != nullptr)
get_deleter()(__p);
}
@@ -365,54 +419,87 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__tuple_type _M_t;
};
- template<typename _Tp, typename _Tp_Deleter>
+ template<typename _Tp, typename _Dp>
inline void
- swap(unique_ptr<_Tp, _Tp_Deleter>& __x,
- unique_ptr<_Tp, _Tp_Deleter>& __y)
+ swap(unique_ptr<_Tp, _Dp>& __x,
+ unique_ptr<_Tp, _Dp>& __y)
{ __x.swap(__y); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
inline bool
- operator==(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator==(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return __x.get() == __y.get(); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return __x.get() == nullptr; }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __y)
+ { return nullptr == __y.get(); }
+
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
inline bool
- operator!=(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator!=(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return !(__x.get() == __y.get()); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp>
inline bool
- operator<(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+ { return __x.get() != nullptr; }
+
+ template<typename _Tp, typename _Dp>
+ inline bool
+ operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __y)
+ { return nullptr != __y.get(); }
+
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
+ inline bool
+ operator<(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return __x.get() < __y.get(); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
inline bool
- operator<=(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator<=(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return !(__y.get() < __x.get()); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
inline bool
- operator>(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator>(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return __y.get() < __x.get(); }
- template<typename _Tp, typename _Tp_Deleter,
- typename _Up, typename _Up_Deleter>
+ template<typename _Tp, typename _Dp,
+ typename _Up, typename _Ep>
inline bool
- operator>=(const unique_ptr<_Tp, _Tp_Deleter>& __x,
- const unique_ptr<_Up, _Up_Deleter>& __y)
+ operator>=(const unique_ptr<_Tp, _Dp>& __x,
+ const unique_ptr<_Up, _Ep>& __y)
{ return !(__x.get() < __y.get()); }
+ /// std::hash specialization for unique_ptr.
+ template<typename _Tp, typename _Dp>
+ struct hash<unique_ptr<_Tp, _Dp>>
+ : public std::unary_function<unique_ptr<_Tp, _Dp>, size_t>
+ {
+ size_t
+ operator()(const unique_ptr<_Tp, _Dp>& __u) const
+ {
+ typedef unique_ptr<_Tp, _Dp> _UP;
+ return std::hash<typename _UP::pointer>()(__u.get());
+ }
+ };
+
// @} group pointer_abstractions
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h
index 74998ff7725..08058c1a94f 100644
--- a/libstdc++-v3/include/bits/unordered_map.h
+++ b/libstdc++-v3/include/bits/unordered_map.h
@@ -56,6 +56,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
@@ -73,7 +74,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
template<typename _InputIterator>
__unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -82,8 +83,24 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
- __unordered_map(__unordered_map&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ __unordered_map(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(),
+ __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
+ { }
+
+ __unordered_map&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Key, class _Tp,
@@ -110,6 +127,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
@@ -128,7 +146,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
template<typename _InputIterator>
__unordered_multimap(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -137,8 +155,24 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
- __unordered_multimap(__unordered_multimap&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ __unordered_multimap(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(),
+ __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
+ { }
+
+ __unordered_multimap&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
@@ -239,35 +273,22 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_map(unordered_map&& __x)
- : _Base(std::forward<_Base>(__x)) { }
-
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
unordered_map&
- operator=(unordered_map&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
- unordered_map&
operator=(initializer_list<value_type> __l)
{
this->clear();
@@ -318,38 +339,24 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
: _Base(__n, __hf, __eql, __a)
{ }
-
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_multimap(unordered_multimap&& __x)
- : _Base(std::forward<_Base>(__x)) { }
-
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
unordered_multimap&
- operator=(unordered_multimap&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
- unordered_multimap&
operator=(initializer_list<value_type> __l)
{
this->clear();
diff --git a/libstdc++-v3/include/bits/unordered_set.h b/libstdc++-v3/include/bits/unordered_set.h
index 50dee215e16..260ad796c1a 100644
--- a/libstdc++-v3/include/bits/unordered_set.h
+++ b/libstdc++-v3/include/bits/unordered_set.h
@@ -56,6 +56,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
@@ -68,22 +69,38 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
template<typename _InputIterator>
__unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
- __unordered_set(__unordered_set&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ __unordered_set(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(), __eql,
+ std::_Identity<value_type>(), __a)
+ { }
+
+ __unordered_set&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Value,
@@ -108,6 +125,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
@@ -120,23 +138,39 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
template<typename _InputIterator>
__unordered_multiset(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
- __unordered_multiset(__unordered_multiset&& __x)
- : _Base(std::forward<_Base>(__x)) { }
+ __unordered_multiset(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(), __eql,
+ std::_Identity<value_type>(), __a)
+ { }
+
+ __unordered_multiset&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Value, class _Hash, class _Pred, class _Alloc,
@@ -232,35 +266,22 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_set(unordered_set&& __x)
- : _Base(std::forward<_Base>(__x)) { }
-
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
unordered_set&
- operator=(unordered_set&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
- unordered_set&
operator=(initializer_list<value_type> __l)
{
this->clear();
@@ -311,35 +332,22 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_multiset(unordered_multiset&& __x)
- : _Base(std::forward<_Base>(__x)) { }
-
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
unordered_multiset&
- operator=(unordered_multiset&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
- unordered_multiset&
operator=(initializer_list<value_type> __l)
{
this->clear();
diff --git a/libstdc++-v3/include/bits/valarray_array.h b/libstdc++-v3/include/bits/valarray_array.h
index a12b3347b9d..7aa61f14d81 100644
--- a/libstdc++-v3/include/bits/valarray_array.h
+++ b/libstdc++-v3/include/bits/valarray_array.h
@@ -1,7 +1,7 @@
// The template and inlines for the -*- C++ -*- internal _Array helper class.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -127,7 +127,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
inline void
__valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t)
{
- _Array_init_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __t);
+ _Array_init_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __t);
}
//
@@ -160,7 +160,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__valarray_copy_construct(const _Tp* __b, const _Tp* __e,
_Tp* __restrict__ __o)
{
- _Array_copy_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __o);
+ _Array_copy_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __o);
}
// copy-construct raw array [__o, *) from strided array __a[<__n : __s>]
@@ -169,7 +169,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n,
size_t __s, _Tp* __restrict__ __o)
{
- if (__is_pod(_Tp))
+ if (__is_trivial(_Tp))
while (__n--)
{
*__o++ = *__a;
@@ -190,7 +190,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t* __restrict__ __i,
_Tp* __restrict__ __o, size_t __n)
{
- if (__is_pod(_Tp))
+ if (__is_trivial(_Tp))
while (__n--)
*__o++ = __a[*__i++];
else
@@ -203,7 +203,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
inline void
__valarray_destroy_elements(_Tp* __b, _Tp* __e)
{
- if (!__is_pod(_Tp))
+ if (!__is_trivial(_Tp))
while (__b != __e)
{
__b->~_Tp();
@@ -267,7 +267,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__valarray_copy(const _Tp* __restrict__ __a, size_t __n,
_Tp* __restrict__ __b)
{
- _Array_copier<_Tp, __is_pod(_Tp)>::_S_do_it(__a, __n, __b);
+ _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b);
}
// Copy strided array __a[<__n : __s>] in plain __b[<__n>]
diff --git a/libstdc++-v3/include/bits/vector.tcc b/libstdc++-v3/include/bits/vector.tcc
index e1097931048..ffe4bb8e630 100644
--- a/libstdc++-v3/include/bits/vector.tcc
+++ b/libstdc++-v3/include/bits/vector.tcc
@@ -458,6 +458,59 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Tp, typename _Alloc>
+ void
+ vector<_Tp, _Alloc>::
+ _M_default_append(size_type __n)
+ {
+ if (__n != 0)
+ {
+ if (size_type(this->_M_impl._M_end_of_storage
+ - this->_M_impl._M_finish) >= __n)
+ {
+ std::__uninitialized_default_n_a(this->_M_impl._M_finish,
+ __n, _M_get_Tp_allocator());
+ this->_M_impl._M_finish += __n;
+ }
+ else
+ {
+ const size_type __len =
+ _M_check_len(__n, "vector::_M_default_append");
+ const size_type __old_size = this->size();
+ pointer __new_start(this->_M_allocate(__len));
+ pointer __new_finish(__new_start);
+ __try
+ {
+ __new_finish =
+ std::__uninitialized_move_a(this->_M_impl._M_start,
+ this->_M_impl._M_finish,
+ __new_start,
+ _M_get_Tp_allocator());
+ std::__uninitialized_default_n_a(__new_finish, __n,
+ _M_get_Tp_allocator());
+ __new_finish += __n;
+ }
+ __catch(...)
+ {
+ std::_Destroy(__new_start, __new_finish,
+ _M_get_Tp_allocator());
+ _M_deallocate(__new_start, __len);
+ __throw_exception_again;
+ }
+ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+ _M_get_Tp_allocator());
+ _M_deallocate(this->_M_impl._M_start,
+ this->_M_impl._M_end_of_storage
+ - this->_M_impl._M_start);
+ this->_M_impl._M_start = __new_start;
+ this->_M_impl._M_finish = __new_finish;
+ this->_M_impl._M_end_of_storage = __new_start + __len;
+ }
+ }
+ }
+#endif
+
template<typename _Tp, typename _Alloc>
template<typename _InputIterator>
void
@@ -695,7 +748,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (__words)
{
const size_t __clength = __words * sizeof(_Bit_type);
- __hash = std::_Fnv_hash::hash(__b._M_impl._M_start._M_p, __clength);
+ __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength);
}
const size_t __extrabits = __b.size() % _S_word_bit;
@@ -707,9 +760,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t __clength
= (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__;
if (__words)
- __hash = std::_Fnv_hash::hash(&__hiword, __clength, __hash);
+ __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash);
else
- __hash = std::_Fnv_hash::hash(&__hiword, __clength);
+ __hash = std::_Hash_impl::hash(&__hiword, __clength);
}
return __hash;
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index 126721163d1..02ca6af744b 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -497,6 +497,252 @@ _GLIBCXX_END_NAMESPACE
_GLIBCXX_BEGIN_NAMESPACE(std)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ inline int
+ fpclassify(float __x)
+ { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+ FP_SUBNORMAL, FP_ZERO, __x); }
+
+ inline int
+ fpclassify(double __x)
+ { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+ FP_SUBNORMAL, FP_ZERO, __x); }
+
+ inline int
+ fpclassify(long double __x)
+ { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+ FP_SUBNORMAL, FP_ZERO, __x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ int>::__type
+ fpclassify(_Tp __x)
+ { return __x != 0 ? FP_NORMAL : FP_ZERO; }
+
+ inline bool
+ isfinite(float __x)
+ { return __builtin_isfinite(__x); }
+
+ inline bool
+ isfinite(double __x)
+ { return __builtin_isfinite(__x); }
+
+ inline bool
+ isfinite(long double __x)
+ { return __builtin_isfinite(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
+ isfinite(_Tp __x)
+ { return true; }
+
+ inline bool
+ isinf(float __x)
+ { return __builtin_isinf(__x); }
+
+ inline bool
+ isinf(double __x)
+ { return __builtin_isinf(__x); }
+
+ inline bool
+ isinf(long double __x)
+ { return __builtin_isinf(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
+ isinf(_Tp __x)
+ { return false; }
+
+ inline bool
+ isnan(float __x)
+ { return __builtin_isnan(__x); }
+
+ inline bool
+ isnan(double __x)
+ { return __builtin_isnan(__x); }
+
+ inline bool
+ isnan(long double __x)
+ { return __builtin_isnan(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
+ isnan(_Tp __x)
+ { return false; }
+
+ inline bool
+ isnormal(float __x)
+ { return __builtin_isnormal(__x); }
+
+ inline bool
+ isnormal(double __x)
+ { return __builtin_isnormal(__x); }
+
+ inline bool
+ isnormal(long double __x)
+ { return __builtin_isnormal(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
+ isnormal(_Tp __x)
+ { return __x != 0 ? true : false; }
+
+ inline bool
+ signbit(float __x)
+ { return __builtin_signbit(__x); }
+
+ inline bool
+ signbit(double __x)
+ { return __builtin_signbit(__x); }
+
+ inline bool
+ signbit(long double __x)
+ { return __builtin_signbit(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ bool>::__type
+ signbit(_Tp __x)
+ { return __x < 0 ? true : false; }
+
+ inline bool
+ isgreater(float __x, float __y)
+ { return __builtin_isgreater(__x, __y); }
+
+ inline bool
+ isgreater(double __x, double __y)
+ { return __builtin_isgreater(__x, __y); }
+
+ inline bool
+ isgreater(long double __x, long double __y)
+ { return __builtin_isgreater(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ isgreater(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_isgreater(__type(__x), __type(__y));
+ }
+
+ inline bool
+ isgreaterequal(float __x, float __y)
+ { return __builtin_isgreaterequal(__x, __y); }
+
+ inline bool
+ isgreaterequal(double __x, double __y)
+ { return __builtin_isgreaterequal(__x, __y); }
+
+ inline bool
+ isgreaterequal(long double __x, long double __y)
+ { return __builtin_isgreaterequal(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ isgreaterequal(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_isgreaterequal(__type(__x), __type(__y));
+ }
+
+ inline bool
+ isless(float __x, float __y)
+ { return __builtin_isless(__x, __y); }
+
+ inline bool
+ isless(double __x, double __y)
+ { return __builtin_isless(__x, __y); }
+
+ inline bool
+ isless(long double __x, long double __y)
+ { return __builtin_isless(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ isless(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_isless(__type(__x), __type(__y));
+ }
+
+ inline bool
+ islessequal(float __x, float __y)
+ { return __builtin_islessequal(__x, __y); }
+
+ inline bool
+ islessequal(double __x, double __y)
+ { return __builtin_islessequal(__x, __y); }
+
+ inline bool
+ islessequal(long double __x, long double __y)
+ { return __builtin_islessequal(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ islessequal(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_islessequal(__type(__x), __type(__y));
+ }
+
+ inline bool
+ islessgreater(float __x, float __y)
+ { return __builtin_islessgreater(__x, __y); }
+
+ inline bool
+ islessgreater(double __x, double __y)
+ { return __builtin_islessgreater(__x, __y); }
+
+ inline bool
+ islessgreater(long double __x, long double __y)
+ { return __builtin_islessgreater(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ islessgreater(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_islessgreater(__type(__x), __type(__y));
+ }
+
+ inline bool
+ isunordered(float __x, float __y)
+ { return __builtin_isunordered(__x, __y); }
+
+ inline bool
+ isunordered(double __x, double __y)
+ { return __builtin_isunordered(__x, __y); }
+
+ inline bool
+ isunordered(long double __x, long double __y)
+ { return __builtin_isunordered(__x, __y); }
+
+ template<typename _Tp, typename _Up>
+ inline typename
+ __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value), bool>::__type
+ isunordered(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return __builtin_isunordered(__type(__x), __type(__y));
+ }
+
+#else
+
template<typename _Tp>
inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
int>::__type
@@ -606,6 +852,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __builtin_isunordered(__type(__f1), __type(__f2));
}
+#endif
+
_GLIBCXX_END_NAMESPACE
#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */
diff --git a/libstdc++-v3/include/c_global/cstddef b/libstdc++-v3/include/c_global/cstddef
index ce2d310244c..d9a7383e68d 100644
--- a/libstdc++-v3/include/c_global/cstddef
+++ b/libstdc++-v3/include/c_global/cstddef
@@ -42,15 +42,3 @@
#include <bits/c++config.h>
#include <stddef.h>
-
-#ifndef _GLIBCXX_CSTDDEF
-#define _GLIBCXX_CSTDDEF 1
-
-_GLIBCXX_BEGIN_NAMESPACE(std)
-
- using ::ptrdiff_t;
- using ::size_t;
-
-_GLIBCXX_END_NAMESPACE
-
-#endif
diff --git a/libstdc++-v3/include/c_global/cstdio b/libstdc++-v3/include/c_global/cstdio
index f87af196936..9124229248b 100644
--- a/libstdc++-v3/include/c_global/cstdio
+++ b/libstdc++-v3/include/c_global/cstdio
@@ -41,7 +41,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <stdio.h>
#ifndef _GLIBCXX_CSTDIO
@@ -151,15 +150,16 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
extern "C" int
- (snprintf)(char * restrict, size_t, const char * restrict, ...) throw ();
+ (snprintf)(char * __restrict, std::size_t, const char * __restrict, ...)
+ throw ();
extern "C" int
- (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list);
- extern "C" int (vscanf)(const char * restrict, __gnuc_va_list);
+ (vfscanf)(FILE * __restrict, const char * __restrict, __gnuc_va_list);
+ extern "C" int (vscanf)(const char * __restrict, __gnuc_va_list);
extern "C" int
- (vsnprintf)(char * restrict, size_t, const char * restrict, __gnuc_va_list)
- throw ();
+ (vsnprintf)(char * __restrict, std::size_t, const char * __restrict,
+ __gnuc_va_list) throw ();
extern "C" int
- (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list)
+ (vsscanf)(const char * __restrict, const char * __restrict, __gnuc_va_list)
throw ();
#endif
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
index dc9b9564170..943f26328f0 100644
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -41,7 +41,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#ifndef _GLIBCXX_CSTDLIB
#define _GLIBCXX_CSTDLIB 1
@@ -57,9 +56,9 @@
_GLIBCXX_BEGIN_NAMESPACE(std)
- extern "C" void abort(void) throw () _GLIBC_NORETURN;
+ extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
extern "C" int atexit(void (*)()) throw ();
- extern "C" void exit(int) throw () _GLIBC_NORETURN;
+ extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
_GLIBCXX_END_NAMESPACE
@@ -182,9 +181,9 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
extern "C" long long int (atoll)(const char *) throw ();
extern "C" long long int
- (strtoll)(const char * restrict, char ** restrict, int) throw ();
+ (strtoll)(const char * __restrict, char ** __restrict, int) throw ();
extern "C" unsigned long long int
- (strtoull)(const char * restrict, char ** restrict, int) throw ();
+ (strtoull)(const char * __restrict, char ** __restrict, int) throw ();
#endif
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using ::atoll;
diff --git a/libstdc++-v3/include/c_global/cstring b/libstdc++-v3/include/c_global/cstring
index 445202035d5..21721be67ed 100644
--- a/libstdc++-v3/include/c_global/cstring
+++ b/libstdc++-v3/include/c_global/cstring
@@ -41,7 +41,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <string.h>
#ifndef _GLIBCXX_CSTRING
diff --git a/libstdc++-v3/include/c_global/ctime b/libstdc++-v3/include/c_global/ctime
index 55f1f069766..f5bb49ccbc9 100644
--- a/libstdc++-v3/include/c_global/ctime
+++ b/libstdc++-v3/include/c_global/ctime
@@ -40,7 +40,7 @@
#pragma GCC system_header
-#include <cstddef>
+#include <bits/c++config.h>
#include <time.h>
#ifndef _GLIBCXX_CTIME
diff --git a/libstdc++-v3/include/c_global/cwchar b/libstdc++-v3/include/c_global/cwchar
index 537f39a023b..c2bbde09c51 100644
--- a/libstdc++-v3/include/c_global/cwchar
+++ b/libstdc++-v3/include/c_global/cwchar
@@ -41,7 +41,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#if _GLIBCXX_HAVE_WCHAR_H
#include <wchar.h>
@@ -243,16 +242,16 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
extern "C" long double
- (wcstold)(const wchar_t * restrict, wchar_t ** restrict) throw ();
+ (wcstold)(const wchar_t * __restrict, wchar_t ** __restrict) throw ();
#endif
#if !_GLIBCXX_USE_C99_DYNAMIC
using ::wcstold;
#endif
#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
extern "C" long long int
- (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int) throw ();
+ (wcstoll)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw ();
extern "C" unsigned long long int
- (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int) throw ();
+ (wcstoull)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw ();
#endif
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using ::wcstoll;
diff --git a/libstdc++-v3/include/c_global/cwctype b/libstdc++-v3/include/c_global/cwctype
index be649a28950..2ac1155aa9b 100644
--- a/libstdc++-v3/include/c_global/cwctype
+++ b/libstdc++-v3/include/c_global/cwctype
@@ -43,9 +43,15 @@
#include <bits/c++config.h>
#if _GLIBCXX_HAVE_WCTYPE_H
-#include <wctype.h>
+
+#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 10
+// Work around glibc BZ 9694
+#include <stddef.h>
#endif
+#include <wctype.h>
+#endif // _GLIBCXX_HAVE_WCTYPE_H
+
#ifndef _GLIBCXX_CWCTYPE
#define _GLIBCXX_CWCTYPE 1
diff --git a/libstdc++-v3/include/c_std/cstddef b/libstdc++-v3/include/c_std/cstddef
index 93fed5db6ac..006c432d7bc 100644
--- a/libstdc++-v3/include/c_std/cstddef
+++ b/libstdc++-v3/include/c_std/cstddef
@@ -45,11 +45,4 @@
#include <bits/c++config.h>
#include <stddef.h>
-_GLIBCXX_BEGIN_NAMESPACE(std)
-
- using ::ptrdiff_t;
- using ::size_t;
-
-_GLIBCXX_END_NAMESPACE
-
#endif
diff --git a/libstdc++-v3/include/c_std/cstdio b/libstdc++-v3/include/c_std/cstdio
index a697437a662..6f648ad10a6 100644
--- a/libstdc++-v3/include/c_std/cstdio
+++ b/libstdc++-v3/include/c_std/cstdio
@@ -43,8 +43,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
-
#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
@@ -151,15 +149,16 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
extern "C" int
- (snprintf)(char * restrict, size_t, const char * restrict, ...) throw ();
+ (snprintf)(char * __restrict, std::size_t, const char * __restrict, ...)
+ throw ();
extern "C" int
- (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list);
- extern "C" int (vscanf)(const char * restrict, __gnuc_va_list);
+ (vfscanf)(FILE * __restrict, const char * __restrict, __gnuc_va_list);
+ extern "C" int (vscanf)(const char * __restrict, __gnuc_va_list);
extern "C" int
- (vsnprintf)(char * restrict, size_t, const char * restrict, __gnuc_va_list)
- throw ();
+ (vsnprintf)(char * __restrict, std::size_t, const char * __restrict,
+ __gnuc_va_list) throw ();
extern "C" int
- (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list)
+ (vsscanf)(const char * __restrict, const char * __restrict, __gnuc_va_list)
throw ();
#endif
diff --git a/libstdc++-v3/include/c_std/cstdlib b/libstdc++-v3/include/c_std/cstdlib
index c1e3379c121..443f1e7df75 100644
--- a/libstdc++-v3/include/c_std/cstdlib
+++ b/libstdc++-v3/include/c_std/cstdlib
@@ -43,7 +43,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#if !_GLIBCXX_HOSTED
// The C standard does not require a freestanding implementation to
@@ -181,9 +180,9 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
extern "C" long long int (atoll)(const char *) throw ();
extern "C" long long int
- (strtoll)(const char * restrict, char ** restrict, int) throw ();
+ (strtoll)(const char * __restrict, char ** __restrict, int) throw ();
extern "C" unsigned long long int
- (strtoull)(const char * restrict, char ** restrict, int) throw ();
+ (strtoull)(const char * __restrict, char ** __restrict, int) throw ();
#endif
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using ::atoll;
diff --git a/libstdc++-v3/include/c_std/cstring b/libstdc++-v3/include/c_std/cstring
index 914365655ec..06bf12fba9d 100644
--- a/libstdc++-v3/include/c_std/cstring
+++ b/libstdc++-v3/include/c_std/cstring
@@ -44,7 +44,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <string.h>
// Get rid of those macros defined in <string.h> in lieu of real functions.
diff --git a/libstdc++-v3/include/c_std/ctime b/libstdc++-v3/include/c_std/ctime
index dca90eb8d88..459c8fc7b60 100644
--- a/libstdc++-v3/include/c_std/ctime
+++ b/libstdc++-v3/include/c_std/ctime
@@ -42,7 +42,7 @@
#pragma GCC system_header
-#include <cstddef>
+#include <bits/c++config.h>
#include <time.h>
// Get rid of those macros defined in <time.h> in lieu of real functions.
diff --git a/libstdc++-v3/include/c_std/cwchar b/libstdc++-v3/include/c_std/cwchar
index 3d503674ed1..f6676aa0402 100644
--- a/libstdc++-v3/include/c_std/cwchar
+++ b/libstdc++-v3/include/c_std/cwchar
@@ -44,7 +44,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#if _GLIBCXX_HAVE_WCHAR_H
#include <wchar.h>
@@ -239,16 +238,16 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
extern "C" long double
- (wcstold)(const wchar_t * restrict, wchar_t ** restrict) throw ();
+ (wcstold)(const wchar_t * __restrict, wchar_t ** __restrict) throw ();
#endif
#if !_GLIBCXX_USE_C99_DYNAMIC
using ::wcstold;
#endif
#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
extern "C" long long int
- (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int) throw ();
+ (wcstoll)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw ();
extern "C" unsigned long long int
- (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int) throw ();
+ (wcstoull)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw ();
#endif
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using ::wcstoll;
diff --git a/libstdc++-v3/include/c_std/cwctype b/libstdc++-v3/include/c_std/cwctype
index 4af425067b9..d6750390a0a 100644
--- a/libstdc++-v3/include/c_std/cwctype
+++ b/libstdc++-v3/include/c_std/cwctype
@@ -45,9 +45,15 @@
#include <bits/c++config.h>
#if _GLIBCXX_HAVE_WCTYPE_H
-#include <wctype.h>
+
+#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 10
+// Work around glibc BZ 9694
+#include <stddef.h>
#endif
+#include <wctype.h>
+#endif // _GLIBCXX_HAVE_WCTYPE_H
+
// Get rid of those macros defined in <wctype.h> in lieu of real functions.
#undef iswalnum
#undef iswalpha
diff --git a/libstdc++-v3/include/debug/debug.h b/libstdc++-v3/include/debug/debug.h
index 305299b2f3a..50bf725c1f3 100644
--- a/libstdc++-v3/include/debug/debug.h
+++ b/libstdc++-v3/include/debug/debug.h
@@ -123,7 +123,6 @@ namespace __gnu_debug
# define __glibcxx_requires_subscript(_N) __glibcxx_check_subscript(_N)
# include <debug/functions.h>
-# include <debug/formatter.h>
#endif
diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index 0c98006badb..9c21598ea67 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -67,17 +67,31 @@ namespace __debug
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// 23.2.1.1 construct/copy/destroy:
- explicit deque(const _Allocator& __a = _Allocator())
+ explicit
+ deque(const _Allocator& __a = _Allocator())
: _Base(__a) { }
- explicit deque(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ deque(size_type __n)
+ : _Base(__n) { }
+
+ deque(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#else
+ explicit
+ deque(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a) { }
+#endif
template<class _InputIterator>
deque(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last, __a)
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __a)
{ }
deque(const deque& __x)
@@ -88,7 +102,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
deque(deque&& __x)
- : _Base(std::forward<deque>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
deque(initializer_list<value_type> __l,
@@ -131,7 +145,8 @@ namespace __debug
assign(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::assign(__first, __last);
+ _Base::assign(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
}
@@ -208,6 +223,39 @@ namespace __debug
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ {
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef __gnu_debug::_After_nth_from<_Base_const_iterator> _After_nth;
+
+ bool __invalidate_all = __sz > this->size();
+ if (__sz < this->size())
+ this->_M_invalidate_if(_After_nth(__sz, _M_base().begin()));
+
+ _Base::resize(__sz);
+
+ if (__invalidate_all)
+ this->_M_invalidate_all();
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef __gnu_debug::_After_nth_from<_Base_const_iterator> _After_nth;
+
+ bool __invalidate_all = __sz > this->size();
+ if (__sz < this->size())
+ this->_M_invalidate_if(_After_nth(__sz, _M_base().begin()));
+
+ _Base::resize(__sz, __c);
+
+ if (__invalidate_all)
+ this->_M_invalidate_all();
+ }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{
@@ -223,6 +271,7 @@ namespace __debug
if (__invalidate_all)
this->_M_invalidate_all();
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
using _Base::shrink_to_fit;
@@ -363,7 +412,8 @@ namespace __debug
_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_insert_range(__position, __first, __last);
- _Base::insert(__position.base(), __first, __last);
+ _Base::insert(__position.base(), __gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
}
diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h
index b4b43896d04..6945a88af66 100644
--- a/libstdc++-v3/include/debug/formatter.h
+++ b/libstdc++-v3/include/debug/formatter.h
@@ -32,12 +32,14 @@
#include <bits/c++config.h>
#include <typeinfo>
-#include <debug/debug.h>
namespace __gnu_debug
{
using std::type_info;
+ template<typename _Iterator>
+ bool __check_singular(_Iterator&);
+
/** Determine if the two types are the same. */
template<typename _Type1, typename _Type2>
struct __is_same
@@ -338,7 +340,7 @@ namespace __gnu_debug
const _Error_formatter&
_M_iterator(const _Iterator& __it, const char* __name = 0) const
{
- if (_M_num_parameters < size_t(__max_parameters))
+ if (_M_num_parameters < std::size_t(__max_parameters))
_M_parameters[_M_num_parameters++] = _Parameter(__it, __name,
_Is_iterator());
return *this;
@@ -347,7 +349,7 @@ namespace __gnu_debug
const _Error_formatter&
_M_integer(long __value, const char* __name = 0) const
{
- if (_M_num_parameters < size_t(__max_parameters))
+ if (_M_num_parameters < std::size_t(__max_parameters))
_M_parameters[_M_num_parameters++] = _Parameter(__value, __name);
return *this;
}
@@ -355,7 +357,7 @@ namespace __gnu_debug
const _Error_formatter&
_M_string(const char* __value, const char* __name = 0) const
{
- if (_M_num_parameters < size_t(__max_parameters))
+ if (_M_num_parameters < std::size_t(__max_parameters))
_M_parameters[_M_num_parameters++] = _Parameter(__value, __name);
return *this;
}
@@ -364,7 +366,7 @@ namespace __gnu_debug
const _Error_formatter&
_M_sequence(const _Sequence& __seq, const char* __name = 0) const
{
- if (_M_num_parameters < size_t(__max_parameters))
+ if (_M_num_parameters < std::size_t(__max_parameters))
_M_parameters[_M_num_parameters++] = _Parameter(__seq, __name,
_Is_sequence());
return *this;
@@ -381,7 +383,7 @@ namespace __gnu_debug
_M_error() const;
private:
- _Error_formatter(const char* __file, size_t __line)
+ _Error_formatter(const char* __file, std::size_t __line)
: _M_file(__file), _M_line(__line), _M_num_parameters(0), _M_text(0),
_M_max_length(78), _M_column(1), _M_first_line(true), _M_wordwrap(false)
{ _M_get_max_length(); }
@@ -402,19 +404,19 @@ namespace __gnu_debug
enum { __max_parameters = 9 };
const char* _M_file;
- size_t _M_line;
+ std::size_t _M_line;
mutable _Parameter _M_parameters[__max_parameters];
- mutable size_t _M_num_parameters;
+ mutable std::size_t _M_num_parameters;
mutable const char* _M_text;
- mutable size_t _M_max_length;
+ mutable std::size_t _M_max_length;
enum { _M_indent = 4 } ;
- mutable size_t _M_column;
+ mutable std::size_t _M_column;
mutable bool _M_first_line;
mutable bool _M_wordwrap;
public:
static _Error_formatter
- _M_at(const char* __file, size_t __line)
+ _M_at(const char* __file, std::size_t __line)
{ return _Error_formatter(__file, __line); }
};
} // namespace __gnu_debug
diff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h
index a4b1d785844..75ed9ef057f 100644
--- a/libstdc++-v3/include/debug/functions.h
+++ b/libstdc++-v3/include/debug/functions.h
@@ -1,6 +1,6 @@
// Debugging support implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -31,9 +31,9 @@
#define _GLIBCXX_DEBUG_FUNCTIONS_H 1
#include <bits/c++config.h>
-#include <cstddef> // for ptrdiff_t
#include <bits/stl_iterator_base_types.h> // for iterator_traits, categories
#include <bits/cpp_type_traits.h> // for __is_integer
+#include <debug/formatter.h>
namespace __gnu_debug
{
@@ -154,7 +154,7 @@ namespace __gnu_debug
const _InputIterator& __last
__attribute__((__unused__)))
{
- _GLIBCXX_DEBUG_ASSERT(__valid_range(__first, __last));
+ __glibcxx_check_valid_range(__first, __last);
return __first;
}
@@ -165,7 +165,7 @@ namespace __gnu_debug
const _Integer& __n __attribute__((__unused__)))
{
#ifdef _GLIBCXX_DEBUG_PEDANTIC
- _GLIBCXX_DEBUG_ASSERT(__s != 0 || __n == 0);
+ __glibcxx_assert(__s != 0 || __n == 0);
#endif
return __s;
}
@@ -176,7 +176,7 @@ namespace __gnu_debug
__check_string(const _CharT* __s)
{
#ifdef _GLIBCXX_DEBUG_PEDANTIC
- _GLIBCXX_DEBUG_ASSERT(__s != 0);
+ __glibcxx_assert(__s != 0);
#endif
return __s;
}
@@ -243,7 +243,7 @@ namespace __gnu_debug
// Verify that the < operator for elements in the sequence is a
// StrictWeakOrdering by checking that it is irreflexive.
- _GLIBCXX_DEBUG_ASSERT(__first == __last || !(*__first < *__first));
+ __glibcxx_assert(__first == __last || !(*__first < *__first));
return __check_sorted_aux(__first, __last, _Category());
}
@@ -258,7 +258,7 @@ namespace __gnu_debug
// Verify that the predicate is StrictWeakOrdering by checking that it
// is irreflexive.
- _GLIBCXX_DEBUG_ASSERT(__first == __last || !__pred(*__first, *__first));
+ __glibcxx_assert(__first == __last || !__pred(*__first, *__first));
return __check_sorted_aux(__first, __last, __pred, _Category());
}
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index 39a64818830..b6567846e9b 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -67,17 +67,31 @@ namespace __debug
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// 23.2.2.1 construct/copy/destroy:
- explicit list(const _Allocator& __a = _Allocator())
+ explicit
+ list(const _Allocator& __a = _Allocator())
: _Base(__a) { }
- explicit list(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ list(size_type __n)
+ : _Base(__n) { }
+
+ list(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#else
+ explicit
+ list(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a) { }
+#endif
template<class _InputIterator>
list(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last, __a)
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __a)
{ }
@@ -89,7 +103,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
list(list&& __x)
- : _Base(std::forward<list>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
list(initializer_list<value_type> __l,
@@ -139,7 +153,8 @@ namespace __debug
assign(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::assign(__first, __last);
+ _Base::assign(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
}
@@ -208,6 +223,63 @@ namespace __debug
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin+__sz, end())
+ iterator __victim = begin();
+ iterator __end = end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ while (__victim != __end)
+ {
+ iterator __real_victim = __victim++;
+ __real_victim._M_invalidate();
+ }
+
+ __try
+ {
+ _Base::resize(__sz);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ this->_M_detach_singular();
+
+ // if __sz < size(), invalidate all iterators in [begin+__sz, end())
+ iterator __victim = begin();
+ iterator __end = end();
+ for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
+ ++__victim;
+
+ while (__victim != __end)
+ {
+ iterator __real_victim = __victim++;
+ __real_victim._M_invalidate();
+ }
+
+ __try
+ {
+ _Base::resize(__sz, __c);
+ }
+ __catch(...)
+ {
+ this->_M_revalidate_singular();
+ __throw_exception_again;
+ }
+ }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{
@@ -235,6 +307,7 @@ namespace __debug
__throw_exception_again;
}
}
+#endif
// element access:
reference
@@ -341,7 +414,8 @@ namespace __debug
_InputIterator __last)
{
__glibcxx_check_insert_range(__position, __first, __last);
- _Base::insert(__position.base(), __first, __last);
+ _Base::insert(__position.base(), __gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
iterator
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 24f5ea6c06c..0159bcb79f7 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -81,7 +81,9 @@ namespace __debug
map(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last),
__comp, __a), _Safe_base() { }
map(const map& __x)
@@ -92,7 +94,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
map(map&& __x)
- : _Base(std::forward<map>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
map(initializer_list<value_type> __l,
@@ -226,7 +228,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index 32a54290406..5c45ee6bd5d 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -82,7 +82,9 @@ namespace __debug
multimap(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last),
__comp, __a) { }
multimap(const multimap& __x)
@@ -93,7 +95,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multimap(multimap&& __x)
- : _Base(std::forward<multimap>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
multimap(initializer_list<value_type> __l,
@@ -213,7 +215,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index 9f65ba34b28..d7d9270fb5e 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -79,7 +79,9 @@ namespace __debug
multiset(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last),
__comp, __a) { }
multiset(const multiset& __x)
@@ -90,7 +92,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multiset(multiset&& __x)
- : _Base(std::forward<multiset>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
multiset(initializer_list<value_type> __l,
@@ -200,12 +202,13 @@ namespace __debug
}
template<typename _InputIterator>
- void
- insert(_InputIterator __first, _InputIterator __last)
- {
- __glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
- }
+ void
+ insert(_InputIterator __first, _InputIterator __last)
+ {
+ __glibcxx_check_valid_range(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
+ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
void
diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h
index eb0a3e4ae15..91b059e8a13 100644
--- a/libstdc++-v3/include/debug/safe_iterator.h
+++ b/libstdc++-v3/include/debug/safe_iterator.h
@@ -1,6 +1,6 @@
// Safe iterator implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,9 +33,9 @@
#include <debug/debug.h>
#include <debug/macros.h>
#include <debug/functions.h>
-#include <debug/formatter.h>
#include <debug/safe_base.h>
#include <bits/stl_pair.h>
+#include <bits/stl_iterator_base_types.h> // for _Iter_base
#include <ext/type_traits.h>
namespace __gnu_debug
@@ -88,7 +88,7 @@ namespace __gnu_debug
typedef std::iterator_traits<_Iterator> _Traits;
public:
- typedef _Iterator _Base_iterator;
+ typedef _Iterator iterator_type;
typedef typename _Traits::iterator_category iterator_category;
typedef typename _Traits::value_type value_type;
typedef typename _Traits::difference_type difference_type;
@@ -136,7 +136,7 @@ namespace __gnu_debug
_Safe_iterator(
const _Safe_iterator<_MutableIterator,
typename __gnu_cxx::__enable_if<(std::__are_same<_MutableIterator,
- typename _Sequence::iterator::_Base_iterator>::__value),
+ typename _Sequence::iterator::iterator_type>::__value),
_Sequence>::__type>& __x)
: _Safe_iterator_base(__x, _M_constant()), _M_current(__x.base())
{
@@ -638,6 +638,37 @@ namespace __gnu_debug
operator+(typename _Safe_iterator<_Iterator,_Sequence>::difference_type __n,
const _Safe_iterator<_Iterator, _Sequence>& __i)
{ return __i + __n; }
+
+ // Helper struct to detect random access safe iterators.
+ template<typename _Iterator>
+ struct __is_safe_random_iterator
+ {
+ enum { __value = 0 };
+ typedef std::__false_type __type;
+ };
+
+ template<typename _Iterator, typename _Sequence>
+ struct __is_safe_random_iterator<_Safe_iterator<_Iterator, _Sequence> >
+ : std::__are_same<std::random_access_iterator_tag,
+ typename std::iterator_traits<_Iterator>::
+ iterator_category>
+ { };
+
+ template<typename _Iterator>
+ struct _Siter_base
+ : std::_Iter_base<_Iterator, __is_safe_random_iterator<_Iterator>::__value>
+ { };
+
+ /** Helper function to extract base iterator of random access safe iterator
+ in order to reduce performance impact of debug mode. Limited to random
+ access iterator because it is the only category for which it is possible
+ to check for correct iterators order in the __valid_range function
+ thanks to the < operator.
+ */
+ template<typename _Iterator>
+ inline typename _Siter_base<_Iterator>::iterator_type
+ __base(_Iterator __it)
+ { return _Siter_base<_Iterator>::_S_base(__it); }
} // namespace __gnu_debug
#ifndef _GLIBCXX_EXPORT_TEMPLATE
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index 2bd3ddfa5dc..5cd3f6972e1 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -79,7 +79,9 @@ namespace __debug
set(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last), __last,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last),
__comp, __a) { }
set(const set& __x)
@@ -90,7 +92,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
set(set&& __x)
- : _Base(std::forward<set>(__x)), _Safe_base()
+ : _Base(std::move(__x)), _Safe_base()
{ this->_M_swap(__x); }
set(initializer_list<value_type> __l,
@@ -209,7 +211,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string
index 160488e989b..4fe0a0686d7 100644
--- a/libstdc++-v3/include/debug/string
+++ b/libstdc++-v3/include/debug/string
@@ -107,13 +107,15 @@ namespace __gnu_debug
template<typename _InputIterator>
basic_string(_InputIterator __begin, _InputIterator __end,
- const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__begin, __end), __end, __a)
+ const _Allocator& __a = _Allocator())
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__begin,
+ __end)),
+ __gnu_debug::__base(__end), __a)
{ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
basic_string(basic_string&& __str)
- : _Base(std::forward<_Base>(__str))
+ : _Base(std::move(__str))
{ }
basic_string(std::initializer_list<_CharT> __l,
@@ -153,7 +155,7 @@ namespace __gnu_debug
basic_string&
operator=(basic_string&& __str)
{
- *static_cast<_Base*>(this) = std::forward<_Base>(__str);
+ *static_cast<_Base*>(this) = std::move(__str);
this->_M_invalidate_all();
return *this;
}
@@ -262,6 +264,11 @@ namespace __gnu_debug
using _Base::at;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ using _Base::front;
+ using _Base::back;
+#endif
+
// 21.3.5 modifiers:
basic_string&
operator+=(const basic_string& __str)
@@ -345,7 +352,8 @@ namespace __gnu_debug
append(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::append(__first, __last);
+ _Base::append(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
return *this;
}
@@ -371,7 +379,7 @@ namespace __gnu_debug
basic_string&
assign(basic_string&& __x)
{
- _Base::assign(std::forward<_Base>(__x));
+ _Base::assign(std::move(__x));
this->_M_invalidate_all();
return *this;
}
@@ -416,7 +424,8 @@ namespace __gnu_debug
assign(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::assign(__first, __last);
+ _Base::assign(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
return *this;
}
@@ -496,7 +505,8 @@ namespace __gnu_debug
insert(iterator __p, _InputIterator __first, _InputIterator __last)
{
__glibcxx_check_insert_range(__p, __first, __last);
- _Base::insert(__p.base(), __first, __last);
+ _Base::insert(__p.base(), __gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
}
diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map
index e4c9fa213c5..2e2f9122ee0 100644
--- a/libstdc++-v3/include/debug/unordered_map
+++ b/libstdc++-v3/include/debug/unordered_map
@@ -78,12 +78,14 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ unordered_map(_InputIterator __first, _InputIterator __last,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__gnu_debug::__check_valid_range(__f, __l), __l, __n,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __n,
__hf, __eql, __a), _Safe_base() { }
unordered_map(const unordered_map& __x)
@@ -93,10 +95,10 @@ namespace __debug
: _Base(__x), _Safe_base() { }
unordered_map(unordered_map&& __x)
- : _Base(std::forward<unordered_map>(__x)), _Safe_base() { }
+ : _Base(std::move(__x)), _Safe_base() { }
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -197,7 +199,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
iterator
@@ -337,12 +340,14 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_multimap(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ unordered_multimap(_InputIterator __first, _InputIterator __last,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__gnu_debug::__check_valid_range(__f, __l), __l, __n,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __n,
__hf, __eql, __a), _Safe_base() { }
unordered_multimap(const unordered_multimap& __x)
@@ -352,10 +357,10 @@ namespace __debug
: _Base(__x), _Safe_base() { }
unordered_multimap(unordered_multimap&& __x)
- : _Base(std::forward<unordered_multimap>(__x)), _Safe_base() { }
+ : _Base(std::move(__x)), _Safe_base() { }
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -448,7 +453,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
iterator
diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set
index 2956bb04fc5..ea90c675476 100644
--- a/libstdc++-v3/include/debug/unordered_set
+++ b/libstdc++-v3/include/debug/unordered_set
@@ -78,12 +78,14 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ unordered_set(_InputIterator __first, _InputIterator __last,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__gnu_debug::__check_valid_range(__f, __l), __l, __n,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __n,
__hf, __eql, __a), _Safe_base() { }
unordered_set(const unordered_set& __x)
@@ -93,10 +95,10 @@ namespace __debug
: _Base(__x), _Safe_base() { }
unordered_set(unordered_set&& __x)
- : _Base(std::forward<unordered_set>(__x)), _Safe_base() { }
+ : _Base(std::move(__x)), _Safe_base() { }
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -197,7 +199,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
iterator
@@ -333,12 +336,14 @@ namespace __debug
: _Base(__n, __hf, __eql, __a) { }
template<typename _InputIterator>
- unordered_multiset(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ unordered_multiset(_InputIterator __first, _InputIterator __last,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__gnu_debug::__check_valid_range(__f, __l), __l, __n,
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __n,
__hf, __eql, __a), _Safe_base() { }
unordered_multiset(const unordered_multiset& __x)
@@ -348,10 +353,10 @@ namespace __debug
: _Base(__x), _Safe_base() { }
unordered_multiset(unordered_multiset&& __x)
- : _Base(std::forward<unordered_multiset>(__x)), _Safe_base() { }
+ : _Base(std::move(__x)), _Safe_base() { }
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -444,7 +449,8 @@ namespace __debug
insert(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::insert(__first, __last);
+ _Base::insert(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
}
iterator
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index c360197fe8c..b0846b8f42e 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -72,18 +72,31 @@ namespace __debug
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// 23.2.4.1 construct/copy/destroy:
- explicit vector(const _Allocator& __a = _Allocator())
+ explicit
+ vector(const _Allocator& __a = _Allocator())
: _Base(__a), _M_guaranteed_capacity(0) { }
- explicit vector(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ vector(size_type __n)
+ : _Base(__n), _M_guaranteed_capacity(__n) { }
+
+ vector(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a), _M_guaranteed_capacity(__n) { }
+#else
+ explicit
+ vector(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a), _M_guaranteed_capacity(__n) { }
+#endif
template<class _InputIterator>
vector(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
- : _Base(__gnu_debug::__check_valid_range(__first, __last),
- __last, __a),
+ : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
+ __last)),
+ __gnu_debug::__base(__last), __a),
_M_guaranteed_capacity(0)
{ _M_update_guaranteed_capacity(); }
@@ -96,7 +109,7 @@ namespace __debug
#ifdef __GXX_EXPERIMENTAL_CXX0X__
vector(vector&& __x)
- : _Base(std::forward<vector>(__x)), _Safe_base(),
+ : _Base(std::move(__x)), _Safe_base(),
_M_guaranteed_capacity(this->size())
{
this->_M_swap(__x);
@@ -146,7 +159,8 @@ namespace __debug
assign(_InputIterator __first, _InputIterator __last)
{
__glibcxx_check_valid_range(__first, __last);
- _Base::assign(__first, __last);
+ _Base::assign(__gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
this->_M_invalidate_all();
_M_update_guaranteed_capacity();
}
@@ -226,6 +240,31 @@ namespace __debug
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ {
+ bool __realloc = _M_requires_reallocation(__sz);
+ if (__sz < this->size())
+ this->_M_invalidate_if(_After_nth(__sz, _M_base().begin()));
+ _Base::resize(__sz);
+ if (__realloc)
+ this->_M_invalidate_all();
+ _M_update_guaranteed_capacity();
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ bool __realloc = _M_requires_reallocation(__sz);
+ if (__sz < this->size())
+ this->_M_invalidate_if(_After_nth(__sz, _M_base().begin()));
+ _Base::resize(__sz, __c);
+ if (__realloc)
+ this->_M_invalidate_all();
+ _M_update_guaranteed_capacity();
+ }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{
@@ -235,7 +274,9 @@ namespace __debug
_Base::resize(__sz, __c);
if (__realloc)
this->_M_invalidate_all();
+ _M_update_guaranteed_capacity();
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
using _Base::shrink_to_fit;
@@ -424,7 +465,8 @@ namespace __debug
punt here by checking if it did occur. */
typename _Base::iterator __old_begin = _M_base().begin();
difference_type __offset = __position - begin();
- _Base::insert(__position.base(), __first, __last);
+ _Base::insert(__position.base(), __gnu_debug::__base(__first),
+ __gnu_debug::__base(__last));
if (_M_base().begin() != __old_begin)
this->_M_invalidate_all();
diff --git a/libstdc++-v3/include/ext/algorithm b/libstdc++-v3/include/ext/algorithm
index 5956e24bcd0..cac4ff70e8e 100644
--- a/libstdc++-v3/include/ext/algorithm
+++ b/libstdc++-v3/include/ext/algorithm
@@ -123,8 +123,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
typename iterator_traits<_InputIterator>::value_type>)
- return __copy_n(__first, __count, __result,
- std::__iterator_category(__first));
+ return __gnu_cxx::__copy_n(__first, __count, __result,
+ std::__iterator_category(__first));
}
template<typename _InputIterator1, typename _InputIterator2>
diff --git a/libstdc++-v3/include/ext/array_allocator.h b/libstdc++-v3/include/ext/array_allocator.h
index f36f273d1fe..ca4d0d19b01 100644
--- a/libstdc++-v3/include/ext/array_allocator.h
+++ b/libstdc++-v3/include/ext/array_allocator.h
@@ -1,6 +1,6 @@
// array allocator -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -30,7 +30,7 @@
#ifndef _ARRAY_ALLOCATOR_H
#define _ARRAY_ALLOCATOR_H 1
-#include <cstddef>
+#include <bits/c++config.h>
#include <new>
#include <bits/functexcept.h>
#include <tr1/array>
@@ -55,10 +55,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
typedef _Tp value_type;
pointer
- address(reference __x) const { return &__x; }
+ address(reference __x) const { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return &__x; }
+ address(const_reference __x) const { return std::__addressof(__x); }
void
deallocate(pointer, size_type)
@@ -114,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
struct rebind
{ typedef array_allocator<_Tp1, _Array1> other; };
- array_allocator(array_type* __array = NULL) throw()
+ array_allocator(array_type* __array = 0) throw()
: _M_array(__array), _M_used(size_type()) { }
array_allocator(const array_allocator& __o) throw()
@@ -122,7 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
template<typename _Tp1, typename _Array1>
array_allocator(const array_allocator<_Tp1, _Array1>&) throw()
- : _M_array(NULL), _M_used(size_type()) { }
+ : _M_array(0), _M_used(size_type()) { }
~array_allocator() throw() { }
diff --git a/libstdc++-v3/include/ext/bitmap_allocator.h b/libstdc++-v3/include/ext/bitmap_allocator.h
index d91d9aa5cc6..2aa08706c9d 100644
--- a/libstdc++-v3/include/ext/bitmap_allocator.h
+++ b/libstdc++-v3/include/ext/bitmap_allocator.h
@@ -1,6 +1,6 @@
// Bitmap Allocator. -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -30,9 +30,8 @@
#ifndef _BITMAP_ALLOCATOR_H
#define _BITMAP_ALLOCATOR_H 1
-#include <cstddef> // For std::size_t, and ptrdiff_t.
-#include <bits/functexcept.h> // For __throw_bad_alloc().
#include <utility> // For std::pair.
+#include <bits/functexcept.h> // For __throw_bad_alloc().
#include <functional> // For greater_equal, and less_equal.
#include <new> // For operator new.
#include <debug/debug.h> // _GLIBCXX_DEBUG_ASSERT
@@ -1039,11 +1038,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
pointer
address(reference __r) const
- { return &__r; }
+ { return std::__addressof(__r); }
const_pointer
address(const_reference __r) const
- { return &__r; }
+ { return std::__addressof(__r); }
size_type
max_size() const throw()
diff --git a/libstdc++-v3/include/ext/codecvt_specializations.h b/libstdc++-v3/include/ext/codecvt_specializations.h
index 89adb3f20d4..53295891bac 100644
--- a/libstdc++-v3/include/ext/codecvt_specializations.h
+++ b/libstdc++-v3/include/ext/codecvt_specializations.h
@@ -1,7 +1,8 @@
// Locale support (codecvt) -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+// 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -381,7 +382,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Argument list for iconv specifies a byte sequence. Thus,
// all to/from arrays must be brutally casted to char*.
char* __cto = reinterpret_cast<char*>(__to);
- size_t __conv = __iconv_adaptor(iconv,__desc, NULL, NULL,
+ size_t __conv = __iconv_adaptor(iconv,__desc, 0, 0,
&__cto, &__tlen);
if (__conv != size_t(-1))
diff --git a/libstdc++-v3/include/ext/concurrence.h b/libstdc++-v3/include/ext/concurrence.h
index 71f8cd0a707..6f8e10bfeef 100644
--- a/libstdc++-v3/include/ext/concurrence.h
+++ b/libstdc++-v3/include/ext/concurrence.h
@@ -1,6 +1,6 @@
// Support for concurrent programing -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -31,6 +31,8 @@
#ifndef _CONCURRENCE_H
#define _CONCURRENCE_H 1
+#pragma GCC system_header
+
#include <exception>
#include <bits/gthr.h>
#include <bits/functexcept.h>
diff --git a/libstdc++-v3/include/ext/extptr_allocator.h b/libstdc++-v3/include/ext/extptr_allocator.h
index fab6b1d85ed..d9e8cda440d 100644
--- a/libstdc++-v3/include/ext/extptr_allocator.h
+++ b/libstdc++-v3/include/ext/extptr_allocator.h
@@ -1,6 +1,6 @@
// <extptr_allocator.h> -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -82,10 +82,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
{ }
pointer address(reference __x) const
- { return &__x; }
+ { return std::__addressof(__x); }
const_pointer address(const_reference __x) const
- { return &__x; }
+ { return std::__addressof(__x); }
pointer allocate(size_type __n, void* __hint = 0)
{ return _M_real_alloc.allocate(__n,__hint); }
diff --git a/libstdc++-v3/include/ext/functional b/libstdc++-v3/include/ext/functional
index 546b9c68d6c..7cf6a45a0a3 100644
--- a/libstdc++-v3/include/ext/functional
+++ b/libstdc++-v3/include/ext/functional
@@ -1,6 +1,6 @@
// Functional extensions -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -60,7 +60,6 @@
#pragma GCC system_header
#include <functional>
-#include <cstddef>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/ext/malloc_allocator.h b/libstdc++-v3/include/ext/malloc_allocator.h
index b432c63a61e..ed3c3b2b0ac 100644
--- a/libstdc++-v3/include/ext/malloc_allocator.h
+++ b/libstdc++-v3/include/ext/malloc_allocator.h
@@ -1,6 +1,6 @@
// Allocator that wraps "C" malloc -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -74,10 +74,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
~malloc_allocator() throw() { }
pointer
- address(reference __x) const { return &__x; }
+ address(reference __x) const { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return &__x; }
+ address(const_reference __x) const { return std::__addressof(__x); }
// NB: __n is permitted to be 0. The C++ standard says nothing
// about what the return value is when __n == 0.
diff --git a/libstdc++-v3/include/ext/mt_allocator.h b/libstdc++-v3/include/ext/mt_allocator.h
index 0e675133296..1f6561db464 100644
--- a/libstdc++-v3/include/ext/mt_allocator.h
+++ b/libstdc++-v3/include/ext/mt_allocator.h
@@ -154,11 +154,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
explicit
__pool_base()
- : _M_options(_Tune()), _M_binmap(NULL), _M_init(false) { }
+ : _M_options(_Tune()), _M_binmap(0), _M_init(false) { }
explicit
__pool_base(const _Tune& __options)
- : _M_options(__options), _M_binmap(NULL), _M_init(false) { }
+ : _M_options(__options), _M_binmap(0), _M_init(false) { }
private:
explicit
@@ -235,10 +235,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
{ }
explicit __pool()
- : _M_bin(NULL), _M_bin_size(1) { }
+ : _M_bin(0), _M_bin_size(1) { }
explicit __pool(const __pool_base::_Tune& __tune)
- : __pool_base(__tune), _M_bin(NULL), _M_bin_size(1) { }
+ : __pool_base(__tune), _M_bin(0), _M_bin_size(1) { }
private:
// An "array" of bin_records each of which represents a specific
@@ -358,12 +358,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
_M_get_thread_id();
explicit __pool()
- : _M_bin(NULL), _M_bin_size(1), _M_thread_freelist(NULL)
+ : _M_bin(0), _M_bin_size(1), _M_thread_freelist(0)
{ }
explicit __pool(const __pool_base::_Tune& __tune)
- : __pool_base(__tune), _M_bin(NULL), _M_bin_size(1),
- _M_thread_freelist(NULL)
+ : __pool_base(__tune), _M_bin(0), _M_bin_size(1),
+ _M_thread_freelist(0)
{ }
private:
@@ -576,11 +576,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
pointer
address(reference __x) const
- { return &__x; }
+ { return std::__addressof(__x); }
const_pointer
address(const_reference __x) const
- { return &__x; }
+ { return std::__addressof(__x); }
size_type
max_size() const throw()
diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h
index 51666c3c7fd..54505654207 100644
--- a/libstdc++-v3/include/ext/new_allocator.h
+++ b/libstdc++-v3/include/ext/new_allocator.h
@@ -1,6 +1,6 @@
// Allocator that wraps operator new -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -30,6 +30,7 @@
#ifndef _NEW_ALLOCATOR_H
#define _NEW_ALLOCATOR_H 1
+#include <bits/c++config.h>
#include <new>
#include <bits/functexcept.h>
#include <bits/move.h>
@@ -73,10 +74,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
~new_allocator() throw() { }
pointer
- address(reference __x) const { return &__x; }
+ address(reference __x) const { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return &__x; }
+ address(const_reference __x) const { return std::__addressof(__x); }
// NB: __n is permitted to be 0. The C++ standard says nothing
// about what the return value is when __n == 0.
diff --git a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
index dca953b4911..9cec3b72c54 100644
--- a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
@@ -41,6 +41,7 @@
#ifndef PB_DS_ASSOC_CNTNR_HPP
#define PB_DS_ASSOC_CNTNR_HPP
+#include <bits/c++config.h>
#include <ext/typelist.h>
#include <ext/pb_ds/tag_and_trait.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
index 757b90956de..d9cc2dbfc44 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
@@ -38,8 +38,8 @@
* Contains an implementation class for tree-like classes.
*/
-#ifndef PB_DS_NULL_NODE_METADATA_HPP
-#define PB_DS_NULL_NODE_METADATA_HPP
+#ifndef PB_DS_0_NODE_METADATA_HPP
+#define PB_DS_0_NODE_METADATA_HPP
#include <ext/pb_ds/detail/types_traits.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
index 925d204dc6b..b9f80e960aa 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
@@ -92,7 +92,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
__try
{
m_p_head->m_p_parent = recursive_copy_node(other.m_p_head->m_p_parent);
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
m_p_head->m_p_parent->m_p_parent = m_p_head;
m_size = other.m_size;
initialize_min_max();
@@ -142,7 +142,7 @@ void
PB_DS_CLASS_C_DEC::
initialize()
{
- m_p_head->m_p_parent = NULL;
+ m_p_head->m_p_parent = 0;
m_p_head->m_p_left = m_p_head;
m_p_head->m_p_right = m_p_head;
m_size = 0;
@@ -153,8 +153,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
recursive_copy_node(const node_pointer p_nd)
{
- if (p_nd == NULL)
- return (NULL);
+ if (p_nd == 0)
+ return (0);
node_pointer p_ret = s_node_allocator.allocate(1);
__try
@@ -167,7 +167,7 @@ recursive_copy_node(const node_pointer p_nd)
__throw_exception_again;
}
- p_ret->m_p_left = p_ret->m_p_right = NULL;
+ p_ret->m_p_left = p_ret->m_p_right = 0;
__try
{
@@ -180,10 +180,10 @@ recursive_copy_node(const node_pointer p_nd)
__throw_exception_again;
}
- if (p_ret->m_p_left != NULL)
+ if (p_ret->m_p_left != 0)
p_ret->m_p_left->m_p_parent = p_ret;
- if (p_ret->m_p_right != NULL)
+ if (p_ret->m_p_right != 0)
p_ret->m_p_right->m_p_parent = p_ret;
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_ret);)
@@ -195,7 +195,7 @@ void
PB_DS_CLASS_C_DEC::
initialize_min_max()
{
- if (m_p_head->m_p_parent == NULL)
+ if (m_p_head->m_p_parent == 0)
{
m_p_head->m_p_left = m_p_head->m_p_right = m_p_head;
return;
@@ -203,14 +203,14 @@ initialize_min_max()
{
node_pointer p_min = m_p_head->m_p_parent;
- while (p_min->m_p_left != NULL)
+ while (p_min->m_p_left != 0)
p_min = p_min->m_p_left;
m_p_head->m_p_left = p_min;
}
{
node_pointer p_max = m_p_head->m_p_parent;
- while (p_max->m_p_right != NULL)
+ while (p_max->m_p_right != 0)
p_max = p_max->m_p_right;
m_p_head->m_p_right = p_max;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
index e3447bd4bec..e1013e78f1b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
@@ -49,7 +49,7 @@ assert_valid() const
assert_consistent_with_debug_base();
assert_size();
assert_iterators();
- if (m_p_head->m_p_parent == NULL)
+ if (m_p_head->m_p_parent == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_size == 0);
}
@@ -64,8 +64,8 @@ void
PB_DS_CLASS_C_DEC::
structure_only_assert_valid() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head != NULL);
- if (m_p_head->m_p_parent == NULL)
+ _GLIBCXX_DEBUG_ASSERT(m_p_head != 0);
+ if (m_p_head->m_p_parent == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_left == m_p_head);
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right == m_p_head);
@@ -77,7 +77,7 @@ structure_only_assert_valid() const
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right != m_p_head);
}
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
assert_node_consistent(m_p_head->m_p_parent);
assert_min();
assert_max();
@@ -96,8 +96,8 @@ typename PB_DS_CLASS_C_DEC::node_consistent_t
PB_DS_CLASS_C_DEC::
assert_node_consistent_(const node_pointer p_nd) const
{
- if (p_nd == NULL)
- return (std::make_pair((const_pointer)NULL,(const_pointer)NULL));
+ if (p_nd == 0)
+ return (std::make_pair((const_pointer)0,(const_pointer)0));
assert_node_consistent_with_left(p_nd);
assert_node_consistent_with_right(p_nd);
@@ -105,18 +105,18 @@ assert_node_consistent_(const node_pointer p_nd) const
const std::pair<const_pointer, const_pointer>
l_range = assert_node_consistent_(p_nd->m_p_left);
- if (l_range.second != NULL)
+ if (l_range.second != 0)
_GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(*l_range.second),
PB_DS_V2F(p_nd->m_value)));
const std::pair<const_pointer, const_pointer>
r_range = assert_node_consistent_(p_nd->m_p_right);
- if (r_range.first != NULL)
+ if (r_range.first != 0)
_GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
PB_DS_V2F(*r_range.first)));
- return (std::make_pair((l_range.first != NULL)? l_range.first :& p_nd->m_value,(r_range.second != NULL)? r_range.second :& p_nd->m_value));
+ return (std::make_pair((l_range.first != 0)? l_range.first :& p_nd->m_value,(r_range.second != 0)? r_range.second :& p_nd->m_value));
}
PB_DS_CLASS_T_DEC
@@ -124,7 +124,7 @@ void
PB_DS_CLASS_C_DEC::
assert_node_consistent_with_left(const node_pointer p_nd) const
{
- if (p_nd->m_p_left == NULL)
+ if (p_nd->m_p_left == 0)
return;
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left->m_p_parent == p_nd);
_GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value),
@@ -136,7 +136,7 @@ void
PB_DS_CLASS_C_DEC::
assert_node_consistent_with_right(const node_pointer p_nd) const
{
- if (p_nd->m_p_right == NULL)
+ if (p_nd->m_p_right == 0)
return;
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right->m_p_parent == p_nd);
_GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_p_right->m_value),
@@ -156,13 +156,13 @@ void
PB_DS_CLASS_C_DEC::
assert_min_imp(const node_pointer p_nd) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_left == m_p_head);
return;
}
- if (p_nd->m_p_left == NULL)
+ if (p_nd->m_p_left == 0)
{
_GLIBCXX_DEBUG_ASSERT(p_nd == m_p_head->m_p_left);
return;
@@ -183,13 +183,13 @@ void
PB_DS_CLASS_C_DEC::
assert_max_imp(const node_pointer p_nd) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_right == m_p_head);
return;
}
- if (p_nd->m_p_right == NULL)
+ if (p_nd->m_p_right == 0)
{
_GLIBCXX_DEBUG_ASSERT(p_nd == m_p_head->m_p_right);
return;
@@ -254,7 +254,7 @@ void
PB_DS_CLASS_C_DEC::
assert_consistent_with_debug_base(const node_pointer p_nd) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
debug_base::check_key_exists(PB_DS_V2F(p_nd->m_value));
assert_consistent_with_debug_base(p_nd->m_p_left);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
index a000c744cc3..a050a4be7b1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
@@ -106,7 +106,7 @@ void
PB_DS_CLASS_C_DEC::
clear_imp(node_pointer p_nd)
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
clear_imp(p_nd->m_p_left);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
index 413304b80a0..74af48a7327 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
@@ -46,7 +46,7 @@ lower_bound(const_key_reference r_key) const
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (Cmp_Fn::operator()(
PB_DS_V2F(p_nd->m_value),
r_key))
@@ -69,7 +69,7 @@ lower_bound(const_key_reference r_key)
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (Cmp_Fn::operator()(
PB_DS_V2F(p_nd->m_value),
r_key))
@@ -92,7 +92,7 @@ upper_bound(const_key_reference r_key) const
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (Cmp_Fn::operator()(r_key,
PB_DS_V2F(p_nd->m_value)))
{
@@ -114,7 +114,7 @@ upper_bound(const_key_reference r_key)
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (Cmp_Fn::operator()(r_key,
PB_DS_V2F(p_nd->m_value)))
{
@@ -138,7 +138,7 @@ find(const_key_reference r_key)
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
p_pot = p_nd;
@@ -164,7 +164,7 @@ find(const_key_reference r_key) const
node_pointer p_pot = m_p_head;
node_pointer p_nd = m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
p_pot = p_nd;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
index 3abf0a08d3c..6714c6f10be 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
@@ -53,7 +53,7 @@ insert_leaf(const_reference r_value)
node_pointer p_nd = m_p_head->m_p_parent;
node_pointer p_pot = m_p_head;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(
PB_DS_V2F(p_nd->m_value),
PB_DS_V2F(r_value)))
@@ -86,12 +86,12 @@ insert_leaf(const_reference r_value)
PB_DS_V2F(r_value)));
p_nd = p_pot->m_p_left;
- if (p_nd == NULL)
+ if (p_nd == 0)
return (std::make_pair(
insert_leaf_new(r_value, p_pot, true),
true));
- while (p_nd->m_p_right != NULL)
+ while (p_nd->m_p_right != 0)
p_nd = p_nd->m_p_right;
return (std::make_pair(
@@ -109,7 +109,7 @@ insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd)
if (left_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left == 0);
_GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(
PB_DS_V2F(r_value),
PB_DS_V2F(p_nd->m_value)));
@@ -121,7 +121,7 @@ insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd)
}
else
{
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right == 0);
_GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(
PB_DS_V2F(p_nd->m_value),
PB_DS_V2F(r_value)));
@@ -134,7 +134,7 @@ insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd)
p_new_nd->m_p_parent = p_nd;
- p_new_nd->m_p_left = p_new_nd->m_p_right = NULL;
+ p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_nd));
@@ -159,7 +159,7 @@ insert_imp_empty(const_reference r_value)
p_new_node->m_p_parent = m_p_head;
- p_new_node->m_p_left = p_new_node->m_p_right = NULL;
+ p_new_node->m_p_left = p_new_node->m_p_right = 0;
_GLIBCXX_DEBUG_ONLY(debug_base::insert_new(
PB_DS_V2F(r_value)));
@@ -184,7 +184,7 @@ get_new_node_for_leaf_insert(const_reference r_val, false_type)
cond.set_no_action();
- p_new_nd->m_p_left = p_new_nd->m_p_right = NULL;
+ p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
++m_size;
@@ -202,7 +202,7 @@ get_new_node_for_leaf_insert(const_reference r_val, true_type)
static_cast<const void* >(&p_new_nd->m_value)))
typename node::value_type(r_val);
- p_new_nd->m_p_left = p_new_nd->m_p_right = NULL;
+ p_new_nd->m_p_left = p_new_nd->m_p_right = 0;
++m_size;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
index ed7f1b172c8..e20a4134a8b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
@@ -123,7 +123,7 @@ inline typename PB_DS_CLASS_C_DEC::const_node_iterator
PB_DS_CLASS_C_DEC::
node_end() const
{
- return (const_node_iterator(NULL));
+ return (const_node_iterator(0));
}
PB_DS_CLASS_T_DEC
@@ -131,6 +131,6 @@ inline typename PB_DS_CLASS_C_DEC::node_iterator
PB_DS_CLASS_C_DEC::
node_end()
{
- return (node_iterator(NULL));
+ return (node_iterator(0));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
index 365f02b6ef8..284c0e9bcc9 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
@@ -105,7 +105,7 @@ namespace __gnu_pbds
*/
inline
- bin_search_tree_const_node_it_(const node_pointer p_nd = NULL) : m_p_nd(const_cast<node_pointer>(p_nd))
+ bin_search_tree_const_node_it_(const node_pointer p_nd = 0) : m_p_nd(const_cast<node_pointer>(p_nd))
{ }
// Access.
@@ -197,7 +197,7 @@ namespace __gnu_pbds
*/
inline
- bin_search_tree_node_it_(const node_pointer p_nd = NULL) : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(
+ bin_search_tree_node_it_(const node_pointer p_nd = 0) : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(
const_cast<node_pointer>(p_nd))
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
index bb249e07057..5bf3f229f5d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
@@ -124,7 +124,7 @@ namespace __gnu_pbds
public:
inline
- bin_search_tree_const_it_(const Node_Pointer p_nd = NULL)
+ bin_search_tree_const_it_(const Node_Pointer p_nd = 0)
: m_p_nd(const_cast<Node_Pointer>(p_nd))
{ }
@@ -152,14 +152,14 @@ namespace __gnu_pbds
inline const_pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
return &m_p_nd->m_value;
}
inline const_reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
return m_p_nd->m_value;
}
@@ -182,7 +182,7 @@ namespace __gnu_pbds
inline PB_DS_TREE_CONST_IT_C_DEC&
operator++()
{
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
inc(integral_constant<int,Is_Forward_Iterator>());
return *this;
}
@@ -225,10 +225,10 @@ namespace __gnu_pbds
return;
}
- if (m_p_nd->m_p_right != NULL)
+ if (m_p_nd->m_p_right != 0)
{
m_p_nd = m_p_nd->m_p_right;
- while (m_p_nd->m_p_left != NULL)
+ while (m_p_nd->m_p_left != 0)
m_p_nd = m_p_nd->m_p_left;
return;
}
@@ -257,10 +257,10 @@ namespace __gnu_pbds
return;
}
- if (m_p_nd->m_p_left != NULL)
+ if (m_p_nd->m_p_left != 0)
{
Node_Pointer p_y = m_p_nd->m_p_left;
- while (p_y->m_p_right != NULL)
+ while (p_y->m_p_right != 0)
p_y = p_y->m_p_right;
m_p_nd = p_y;
return;
@@ -297,7 +297,7 @@ namespace __gnu_pbds
public:
inline
- bin_search_tree_it_(const Node_Pointer p_nd = NULL)
+ bin_search_tree_it_(const Node_Pointer p_nd = 0)
: PB_DS_TREE_CONST_IT_C_DEC((Node_Pointer)p_nd)
{ }
@@ -325,14 +325,14 @@ namespace __gnu_pbds
inline typename PB_DS_TREE_CONST_IT_C_DEC::pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd != 0);
return &base_it_type::m_p_nd->m_value;
}
inline typename PB_DS_TREE_CONST_IT_C_DEC::reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd != 0);
return base_it_type::m_p_nd->m_value;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
index 667ef84704f..76c543f149a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
@@ -106,7 +106,7 @@ void
PB_DS_CLASS_C_DEC::
clear_imp(node_pointer p_nd)
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
clear_imp(p_nd->m_p_left);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
index 0598657fe04..b21e98102df 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
@@ -47,7 +47,7 @@ rotate_left(node_pointer p_x)
p_x->m_p_right = p_y->m_p_left;
- if (p_y->m_p_left != NULL)
+ if (p_y->m_p_left != 0)
p_y->m_p_left->m_p_parent = p_x;
p_y->m_p_parent = p_x->m_p_parent;
@@ -78,7 +78,7 @@ rotate_right(node_pointer p_x)
p_x->m_p_left = p_y->m_p_right;
- if (p_y->m_p_right != NULL)
+ if (p_y->m_p_right != 0)
p_y->m_p_right->m_p_parent = p_x;
p_y->m_p_parent = p_x->m_p_parent;
@@ -131,7 +131,7 @@ apply_update(node_pointer p_nd, Node_Update_* /*p_update*/)
{
node_update::operator()(
node_iterator(p_nd),
- const_node_iterator(static_cast<node_pointer>(NULL)));
+ const_node_iterator(static_cast<node_pointer>(0)));
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
index 9d2bd6d742d..2c027f6ab98 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
@@ -139,7 +139,7 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
recursive_count(node_pointer p) const
{
- if (p == NULL)
+ if (p == 0)
return 0;
return 1 + recursive_count(p->m_p_left) + recursive_count(p->m_p_right);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
index 9cb13f99cca..76cf80bd544 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
@@ -125,7 +125,7 @@ namespace __gnu_pbds
inline PB_DS_CLASS_C_DEC&
operator++()
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_e != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_e != 0);
inc();
return *this;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
index d4013db16fe..ab5efe2bb64 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
@@ -92,7 +92,7 @@ namespace __gnu_pbds
// Default constructor.
inline
- binary_heap_const_point_iterator_() : m_p_e(NULL) { }
+ binary_heap_const_point_iterator_() : m_p_e(0) { }
// Copy constructor.
inline
@@ -104,7 +104,7 @@ namespace __gnu_pbds
inline const_pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_e != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
return to_ptr(integral_constant<int, Simple>());
}
@@ -112,7 +112,7 @@ namespace __gnu_pbds
inline const_reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_e != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_e != 0);
return *to_ptr(integral_constant<int, Simple>());
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
index 04b7d548f2e..dfceb689132 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
@@ -68,8 +68,8 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
const size_type other_actual_size =
other.get_new_size_for_arbitrary(ersd);
- entry_pointer a_entries = NULL;
- entry_pointer a_other_entries = NULL;
+ entry_pointer a_entries = 0;
+ entry_pointer a_other_entries = 0;
__try
{
@@ -79,10 +79,10 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
}
__catch(...)
{
- if (a_entries != NULL)
+ if (a_entries != 0)
s_entry_allocator.deallocate(a_entries, actual_size);
- if (a_other_entries != NULL)
+ if (a_other_entries != 0)
s_entry_allocator.deallocate(a_other_entries, other_actual_size);
__throw_exception_again;
@@ -128,8 +128,8 @@ join(PB_DS_CLASS_C_DEC& other)
const size_type len = m_size + other.m_size;
const size_type actual_size = resize_policy::get_new_size_for_arbitrary(len);
- entry_pointer a_entries = NULL;
- entry_pointer a_other_entries = NULL;
+ entry_pointer a_entries = 0;
+ entry_pointer a_other_entries = 0;
__try
{
@@ -138,10 +138,10 @@ join(PB_DS_CLASS_C_DEC& other)
}
__catch(...)
{
- if (a_entries != NULL)
+ if (a_entries != 0)
s_entry_allocator.deallocate(a_entries, actual_size);
- if (a_other_entries != NULL)
+ if (a_other_entries != 0)
s_entry_allocator.deallocate(a_other_entries, resize_policy::min_size);
__throw_exception_again;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
index 274c93378fd..983df099dd7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
@@ -53,7 +53,7 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
binomial_heap_base_() :
- m_p_max(NULL)
+ m_p_max(0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid(false);)
}
@@ -62,7 +62,7 @@ PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
binomial_heap_base_(const Cmp_Fn& r_cmp_fn) :
PB_DS_BASE_C_DEC(r_cmp_fn),
- m_p_max(NULL)
+ m_p_max(0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid(false);)
}
@@ -71,7 +71,7 @@ PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
binomial_heap_base_(const PB_DS_CLASS_C_DEC& other) :
PB_DS_BASE_C_DEC(other),
- m_p_max(NULL)
+ m_p_max(0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid(false);)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
index 9a07f0e7d51..1ccee551402 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
@@ -55,9 +55,9 @@ void
PB_DS_CLASS_C_DEC::
assert_max() const
{
- if (m_p_max == NULL)
+ if (m_p_max == 0)
return;
- _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == 0);
for (const_iterator it = base_type::begin(); it != base_type::end(); ++it)
_GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(m_p_max->m_value,
it.m_p_nd->m_value));
@@ -71,14 +71,14 @@ assert_node_consistent(const_node_pointer p_nd, bool strictly_binomial,
{
_GLIBCXX_DEBUG_ASSERT(increasing || strictly_binomial);
base_type::assert_node_consistent(p_nd, false);
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == base_type::degree(p_nd));
_GLIBCXX_DEBUG_ASSERT(base_type::size_under_node(p_nd) ==
static_cast<size_type>(1 << p_nd->m_metadata));
assert_node_consistent(p_nd->m_p_next_sibling, strictly_binomial, increasing);
assert_node_consistent(p_nd->m_p_l_child, true, false);
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
{
if (increasing)
{
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
index a4cf90c20f1..d6ead1e51c3 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
@@ -46,10 +46,10 @@ pop()
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- if (m_p_max == NULL)
+ if (m_p_max == 0)
find_max();
- _GLIBCXX_DEBUG_ASSERT(m_p_max != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
node_pointer p_nd = m_p_max;
@@ -57,7 +57,7 @@ pop()
base_type::actual_erase_node(p_nd);
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
}
@@ -67,33 +67,33 @@ void
PB_DS_CLASS_C_DEC::
remove_parentless_node(node_pointer p_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- _GLIBCXX_DEBUG_ASSERT(base_type::parent(p_nd) == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ _GLIBCXX_DEBUG_ASSERT(base_type::parent(p_nd) == 0);
node_pointer p_cur_root = p_nd == base_type::m_p_root?
p_nd->m_p_next_sibling :
base_type::m_p_root;
- if (p_cur_root != NULL)
- p_cur_root->m_p_prev_or_parent = NULL;
+ if (p_cur_root != 0)
+ p_cur_root->m_p_prev_or_parent = 0;
- if (p_nd->m_p_prev_or_parent != NULL)
+ if (p_nd->m_p_prev_or_parent != 0)
p_nd->m_p_prev_or_parent->m_p_next_sibling = p_nd->m_p_next_sibling;
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
node_pointer p_child = p_nd->m_p_l_child;
- if (p_child != NULL)
+ if (p_child != 0)
{
- p_child->m_p_prev_or_parent = NULL;
+ p_child->m_p_prev_or_parent = 0;
- while (p_child->m_p_next_sibling != NULL)
+ while (p_child->m_p_next_sibling != 0)
p_child = p_child->m_p_next_sibling;
}
- m_p_max = NULL;
+ m_p_max = 0;
base_type::m_p_root = join(p_cur_root, p_child);
}
@@ -105,7 +105,7 @@ clear()
{
base_type::clear();
- m_p_max = NULL;
+ m_p_max = 0;
}
PB_DS_CLASS_T_DEC
@@ -122,7 +122,7 @@ erase(point_iterator it)
base_type::actual_erase_node(it.m_p_nd);
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
}
@@ -148,7 +148,7 @@ erase_if(Pred pred)
size_type ersd = 0;
- while (p_out != NULL)
+ while (p_out != 0)
{
++ersd;
@@ -161,19 +161,19 @@ erase_if(Pred pred)
node_pointer p_cur = base_type::m_p_root;
- base_type::m_p_root = NULL;
+ base_type::m_p_root = 0;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
- p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = NULL;
+ p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
p_cur->m_metadata = 0;
p_cur->m_p_next_sibling = base_type::m_p_root;
- if (base_type::m_p_root != NULL)
+ if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = p_cur;
base_type::m_p_root = p_cur;
@@ -183,7 +183,7 @@ erase_if(Pred pred)
p_cur = p_next;
}
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
index ad7f65129ba..3c8ff109def 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
@@ -46,10 +46,10 @@ top() const
_GLIBCXX_DEBUG_ONLY(assert_valid(false);)
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- if (m_p_max == NULL)
+ if (m_p_max == 0)
const_cast<PB_DS_CLASS_C_DEC* >(this)->find_max();
- _GLIBCXX_DEBUG_ASSERT(m_p_max != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
return m_p_max->m_value;
}
@@ -62,7 +62,7 @@ find_max()
m_p_max = p_cur;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
if (Cmp_Fn::operator()(m_p_max->m_value, p_cur->m_value))
m_p_max = p_cur;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
index e67d0df148f..735bddbb71a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
@@ -49,7 +49,7 @@ push(const_reference r_val)
insert_node(p_nd);
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
@@ -61,10 +61,10 @@ inline void
PB_DS_CLASS_C_DEC::
insert_node(node_pointer p_nd)
{
- if (base_type::m_p_root == NULL)
+ if (base_type::m_p_root == 0)
{
p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent =
- p_nd->m_p_l_child = NULL;
+ p_nd->m_p_l_child = 0;
p_nd->m_metadata = 0;
@@ -75,7 +75,7 @@ insert_node(node_pointer p_nd)
if (base_type::m_p_root->m_metadata > 0)
{
- p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = NULL;
+ p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0;
p_nd->m_p_next_sibling = base_type::m_p_root;
@@ -92,7 +92,7 @@ insert_node(node_pointer p_nd)
{
p_nd->m_p_next_sibling = base_type::m_p_root->m_p_next_sibling;
- p_nd->m_p_prev_or_parent = NULL;
+ p_nd->m_p_prev_or_parent = 0;
p_nd->m_metadata = 1;
@@ -100,15 +100,15 @@ insert_node(node_pointer p_nd)
base_type::m_p_root->m_p_prev_or_parent = p_nd;
- base_type::m_p_root->m_p_next_sibling = NULL;
+ base_type::m_p_root->m_p_next_sibling = 0;
base_type::m_p_root = p_nd;
}
else
{
- p_nd->m_p_next_sibling = NULL;
+ p_nd->m_p_next_sibling = 0;
- p_nd->m_p_l_child = NULL;
+ p_nd->m_p_l_child = 0;
p_nd->m_p_prev_or_parent = base_type::m_p_root;
@@ -128,7 +128,7 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
fix(node_pointer p_nd) const
{
- while (p_nd->m_p_next_sibling != NULL&&
+ while (p_nd->m_p_next_sibling != 0&&
p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata)
{
node_pointer p_next = p_nd->m_p_next_sibling;
@@ -138,7 +138,7 @@ fix(node_pointer p_nd) const
p_next->m_p_prev_or_parent =
p_nd->m_p_prev_or_parent;
- if (p_nd->m_p_prev_or_parent != NULL)
+ if (p_nd->m_p_prev_or_parent != 0)
p_nd->m_p_prev_or_parent->m_p_next_sibling = p_next;
base_type::make_child_of(p_nd, p_next);
@@ -151,8 +151,8 @@ fix(node_pointer p_nd) const
{
p_nd->m_p_next_sibling = p_next->m_p_next_sibling;
- if (p_nd->m_p_next_sibling != NULL)
- p_next->m_p_next_sibling = NULL;
+ if (p_nd->m_p_next_sibling != 0)
+ p_next->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
@@ -160,7 +160,7 @@ fix(node_pointer p_nd) const
}
}
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd;
return p_nd;
@@ -174,7 +174,7 @@ modify(point_iterator it, const_reference r_new_val)
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
node_pointer p_nd = it.m_p_nd;
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false);)
const bool bubble_up = Cmp_Fn::operator()(p_nd->m_value, r_new_val);
@@ -185,7 +185,7 @@ modify(point_iterator it, const_reference r_new_val)
{
node_pointer p_parent = base_type::parent(p_nd);
- while (p_parent != NULL&&
+ while (p_parent != 0&&
Cmp_Fn::operator()(p_parent->m_value, p_nd->m_value))
{
base_type::swap_with_parent(p_nd, p_parent);
@@ -193,10 +193,10 @@ modify(point_iterator it, const_reference r_new_val)
p_parent = base_type::parent(p_nd);
}
- if (p_nd->m_p_prev_or_parent == NULL)
+ if (p_nd->m_p_prev_or_parent == 0)
base_type::m_p_root = p_nd;
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
@@ -209,7 +209,7 @@ modify(point_iterator it, const_reference r_new_val)
insert_node(p_nd);
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
index a701937cb99..2a96236fb9e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
@@ -61,7 +61,7 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_out = base_type::prune(pred);
- while (p_out != NULL)
+ while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
@@ -70,13 +70,13 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_next = p_out->m_p_next_sibling;
- p_out->m_p_l_child = p_out->m_p_prev_or_parent = NULL;
+ p_out->m_p_l_child = p_out->m_p_prev_or_parent = 0;
p_out->m_metadata = 0;
p_out->m_p_next_sibling = other.m_p_root;
- if (other.m_p_root != NULL)
+ if (other.m_p_root != 0)
other.m_p_root->m_p_prev_or_parent = p_out;
other.m_p_root = p_out;
@@ -90,19 +90,19 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_cur = base_type::m_p_root;
- base_type::m_p_root = NULL;
+ base_type::m_p_root = 0;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
- p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = NULL;
+ p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
p_cur->m_metadata = 0;
p_cur->m_p_next_sibling = base_type::m_p_root;
- if (base_type::m_p_root != NULL)
+ if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = p_cur;
base_type::m_p_root = p_cur;
@@ -112,7 +112,7 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
p_cur = p_next;
}
- m_p_max = NULL;
+ m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
_GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
@@ -128,7 +128,7 @@ join(PB_DS_CLASS_C_DEC& other)
node_pointer p_other = other.m_p_root;
- if (p_other != NULL)
+ if (p_other != 0)
do
{
node_pointer p_next = p_other->m_p_next_sibling;
@@ -137,15 +137,15 @@ join(PB_DS_CLASS_C_DEC& other)
p_other = p_next;
}
- while (p_other != NULL);
+ while (p_other != 0);
base_type::m_p_root = join(base_type::m_p_root, other.m_p_root);
base_type::m_size += other.m_size;
- m_p_max = NULL;
+ m_p_max = 0;
- other.m_p_root = NULL;
+ other.m_p_root = 0;
other.m_size = 0;
- other.m_p_max = NULL;
+ other.m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid(true);)
_GLIBCXX_DEBUG_ONLY(other.assert_valid(true);)
@@ -156,15 +156,15 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
join(node_pointer p_lhs, node_pointer p_rhs) const
{
- node_pointer p_ret = NULL;
+ node_pointer p_ret = 0;
- node_pointer p_cur = NULL;
+ node_pointer p_cur = 0;
- while (p_lhs != NULL || p_rhs != NULL)
+ while (p_lhs != 0 || p_rhs != 0)
{
- if (p_rhs == NULL)
+ if (p_rhs == 0)
{
- if (p_cur == NULL)
+ if (p_cur == 0)
p_ret = p_cur = p_lhs;
else
{
@@ -173,11 +173,11 @@ join(node_pointer p_lhs, node_pointer p_rhs) const
p_lhs->m_p_prev_or_parent = p_cur;
}
- p_cur = p_lhs = NULL;
+ p_cur = p_lhs = 0;
}
- else if (p_lhs == NULL || p_rhs->m_metadata < p_lhs->m_metadata)
+ else if (p_lhs == 0 || p_rhs->m_metadata < p_lhs->m_metadata)
{
- if (p_cur == NULL)
+ if (p_cur == 0)
{
p_ret = p_cur = p_rhs;
@@ -196,7 +196,7 @@ join(node_pointer p_lhs, node_pointer p_rhs) const
}
else if (p_lhs->m_metadata < p_rhs->m_metadata)
{
- if (p_cur == NULL)
+ if (p_cur == 0)
p_ret = p_cur = p_lhs;
else
{
@@ -221,11 +221,11 @@ join(node_pointer p_lhs, node_pointer p_rhs) const
}
}
- if (p_cur != NULL)
- p_cur->m_p_next_sibling = NULL;
+ if (p_cur != 0)
+ p_cur->m_p_next_sibling = 0;
- if (p_ret != NULL)
- p_ret->m_p_prev_or_parent = NULL;
+ if (p_ret != 0)
+ p_ret->m_p_prev_or_parent = 0;
return p_ret;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
index f5efabe0840..2bace9c5ebd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
@@ -374,7 +374,7 @@ namespace __gnu_pbds
entry_pointer p_e = m_entries[pos];
resize_base::notify_insert_search_start();
- while (p_e != NULL
+ while (p_e != 0
&& !hash_eq_fn_base::operator()(p_e->m_value.first, r_key))
{
resize_base::notify_insert_search_collision();
@@ -382,7 +382,7 @@ namespace __gnu_pbds
}
resize_base::notify_insert_search_end();
- if (p_e != NULL)
+ if (p_e != 0)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
return (p_e->m_value.second);
@@ -399,7 +399,7 @@ namespace __gnu_pbds
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_insert_search_start();
- while (p_e != NULL &&
+ while (p_e != 0 &&
!hash_eq_fn_base::operator()(p_e->m_value.first, p_e->m_hash, r_key, pos_hash_pair.second))
{
resize_base::notify_insert_search_collision();
@@ -407,7 +407,7 @@ namespace __gnu_pbds
}
resize_base::notify_insert_search_end();
- if (p_e != NULL)
+ if (p_e != 0)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
return p_e->m_value.second;
@@ -468,7 +468,7 @@ namespace __gnu_pbds
{
entry_pointer p_e = m_entries[ranged_hash_fn_base::operator()(r_key)];
resize_base::notify_find_search_start();
- while (p_e != NULL &&
+ while (p_e != 0 &&
!hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), r_key))
{
resize_base::notify_find_search_collision();
@@ -478,7 +478,7 @@ namespace __gnu_pbds
resize_base::notify_find_search_end();
#ifdef _GLIBCXX_DEBUG
- if (p_e == NULL)
+ if (p_e == 0)
debug_base::check_key_does_not_exist(r_key);
else
debug_base::check_key_exists(r_key);
@@ -492,7 +492,7 @@ namespace __gnu_pbds
comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key);
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_find_search_start();
- while (p_e != NULL &&
+ while (p_e != 0 &&
!hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
p_e->m_hash,
r_key, pos_hash_pair.second))
@@ -504,7 +504,7 @@ namespace __gnu_pbds
resize_base::notify_find_search_end();
#ifdef _GLIBCXX_DEBUG
- if (p_e == NULL)
+ if (p_e == 0)
debug_base::check_key_does_not_exist(r_key);
else
debug_base::check_key_exists(r_key);
@@ -534,22 +534,22 @@ namespace __gnu_pbds
inc_it_state(const_pointer& r_p_value,
std::pair<entry_pointer, size_type>& r_pos) const
{
- _GLIBCXX_DEBUG_ASSERT(r_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(r_p_value != 0);
r_pos.first = r_pos.first->m_p_next;
- if (r_pos.first != NULL)
+ if (r_pos.first != 0)
{
r_p_value = &r_pos.first->m_value;
return;
}
for (++r_pos.second; r_pos.second < m_num_e; ++r_pos.second)
- if (m_entries[r_pos.second] != NULL)
+ if (m_entries[r_pos.second] != 0)
{
r_pos.first = m_entries[r_pos.second];
r_p_value = &r_pos.first->m_value;
return;
}
- r_p_value = NULL;
+ r_p_value = 0;
}
void
@@ -557,13 +557,13 @@ namespace __gnu_pbds
std::pair<entry_pointer, size_type>& r_pos) const
{
for (r_pos.second = 0; r_pos.second < m_num_e; ++r_pos.second)
- if (m_entries[r_pos.second] != NULL)
+ if (m_entries[r_pos.second] != 0)
{
r_pos.first = m_entries[r_pos.second];
r_p_value = &r_pos.first->m_value;
return;
}
- r_p_value = NULL;
+ r_p_value = 0;
}
#ifdef _GLIBCXX_DEBUG
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
index 1a61893d105..c5268447232 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
@@ -64,7 +64,7 @@ cmp_with_other(const Other_Map_Type& other) const
const_cast<PB_DS_CLASS_C_DEC& >(*this).
find_key_pointer(r_key, traits_base::m_store_extra_indicator);
- if (p_mapped_value == NULL)
+ if (p_mapped_value == 0)
return false;
#ifdef PB_DS_DATA_TRUE_INDICATOR
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
index 24294ad9135..f67254169b7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
@@ -87,7 +87,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) :
m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0),
m_entries(s_entry_pointer_allocator.allocate(m_num_e))
{
- std::fill(m_entries, m_entries + m_num_e, (entry_pointer)NULL);
+ std::fill(m_entries, m_entries + m_num_e, (entry_pointer)0);
Resize_Policy::notify_cleared();
ranged_hash_fn_base::notify_resized(m_num_e);
_GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
@@ -184,7 +184,7 @@ void
PB_DS_CLASS_C_DEC::
initialize()
{
- std::fill(m_entries, m_entries + m_num_e, entry_pointer(NULL));
+ std::fill(m_entries, m_entries + m_num_e, entry_pointer(0));
Resize_Policy::notify_resized(m_num_e);
Resize_Policy::notify_cleared();
ranged_hash_fn_base::notify_resized(m_num_e);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
index 4219eef3885..81d68e3311e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
@@ -58,7 +58,7 @@ assert_entry_pointer_array_valid(const entry_pointer_array a_p_entries) const
for (size_type pos = 0; pos < m_num_e; ++pos)
{
entry_pointer p_e = a_p_entries[pos];
- while (p_e != NULL)
+ while (p_e != 0)
{
++iterated_num_used_e;
assert_entry_pointer_valid(p_e, traits_base::m_store_extra_indicator);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
index fa09f734843..912535f9390 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
@@ -43,7 +43,7 @@ void
PB_DS_CLASS_C_DEC::
deallocate_links_in_list(entry_pointer p_e)
{
- while (p_e != NULL)
+ while (p_e != 0)
{
entry_pointer p_dealloc_e = p_e;
p_e = p_e->m_p_next;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
index 9f9178bc911..e1260c0d9bd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
@@ -61,7 +61,7 @@ erase_if(Pred pred)
size_type num_ersd = 0;
for (size_type pos = 0; pos < m_num_e; ++pos)
{
- while (m_entries[pos] != NULL && pred(m_entries[pos]->m_value))
+ while (m_entries[pos] != 0 && pred(m_entries[pos]->m_value))
{
++num_ersd;
entry_pointer p_next_e = m_entries[pos]->m_p_next;
@@ -70,7 +70,7 @@ erase_if(Pred pred)
}
entry_pointer p_e = m_entries[pos];
- while (p_e != NULL && p_e->m_p_next != NULL)
+ while (p_e != 0 && p_e->m_p_next != 0)
{
if (pred(p_e->m_p_next->m_value))
{
@@ -92,7 +92,7 @@ PB_DS_CLASS_C_DEC::
clear()
{
for (size_type pos = 0; pos < m_num_e; ++pos)
- while (m_entries[pos] != NULL)
+ while (m_entries[pos] != 0)
erase_entry_pointer(m_entries[pos]);
do_resize_if_needed_no_throw();
resize_base::notify_cleared();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
index d24fc31f9dc..1f8fa06bda3 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
@@ -56,7 +56,7 @@ erase_in_pos_imp(const_key_reference r_key, size_type pos)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
entry_pointer p_e = m_entries[pos];
resize_base::notify_erase_search_start();
- if (p_e == NULL)
+ if (p_e == 0)
{
resize_base::notify_erase_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
@@ -77,7 +77,7 @@ erase_in_pos_imp(const_key_reference r_key, size_type pos)
while (true)
{
entry_pointer p_next_e = p_e->m_p_next;
- if (p_next_e == NULL)
+ if (p_next_e == 0)
{
resize_base::notify_erase_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
index d72df696221..01192b4cefd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
@@ -47,7 +47,7 @@ erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
entry_pointer p_e = m_entries[r_pos_hash_pair.first];
resize_base::notify_erase_search_start();
- if (p_e == NULL)
+ if (p_e == 0)
{
resize_base::notify_erase_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base:: check_key_does_not_exist(r_key);)
@@ -69,7 +69,7 @@ erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair)
while (true)
{
entry_pointer p_next_e = p_e->m_p_next;
- if (p_next_e == NULL)
+ if (p_next_e == 0)
{
resize_base::notify_erase_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
index 6ca9a03b4fa..03db9f84f28 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
@@ -61,11 +61,11 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
find_end()
-{ return NULL; }
+{ return 0; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_point_iterator
PB_DS_CLASS_C_DEC::
find_end() const
-{ return NULL; }
+{ return 0; }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
index dc1519df7b3..5722c775def 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
@@ -81,7 +81,7 @@ cmp_with_other(const Other_Map_Type& other) const
const_cast<PB_DS_CLASS_C_DEC& >(*this).
find_key_pointer(r_key, traits_base::m_store_extra_indicator);
- if (p_mapped_value == NULL)
+ if (p_mapped_value == 0)
return false;
#ifdef PB_DS_DATA_TRUE_INDICATOR
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
index 7215ccd86bc..3d23eab5c35 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
@@ -50,7 +50,7 @@ insert_imp(const_reference r_val, false_type)
entry_pointer p_e = m_entries[pos];
resize_base::notify_insert_search_start();
- while (p_e != NULL && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
+ while (p_e != 0 && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
r_key))
{
resize_base::notify_insert_search_collision();
@@ -58,7 +58,7 @@ insert_imp(const_reference r_val, false_type)
}
resize_base::notify_insert_search_end();
- if (p_e != NULL)
+ if (p_e != 0)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(r_key);)
return std::make_pair(&p_e->m_value, false);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
index fbc284f80b9..b35570690af 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
@@ -50,7 +50,7 @@ insert_imp(const_reference r_val, true_type)
entry_pointer p_e = m_entries[pos_hash_pair.first];
resize_base::notify_insert_search_start();
- while (p_e != NULL && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
+ while (p_e != 0 && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value),
p_e->m_hash,
key, pos_hash_pair.second))
{
@@ -59,7 +59,7 @@ insert_imp(const_reference r_val, true_type)
}
resize_base::notify_insert_search_end();
- if (p_e != NULL)
+ if (p_e != 0)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(key);)
return std::make_pair(&p_e->m_value, false);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
index 66333ec85c2..11e2583bc47 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
@@ -112,12 +112,12 @@ PB_DS_CLASS_C_DEC::
resize_imp_no_exceptions(size_type new_size, entry_pointer_array a_p_entries_resized, size_type old_size)
{
std::fill(a_p_entries_resized, a_p_entries_resized + m_num_e,
- entry_pointer(NULL));
+ entry_pointer(0));
for (size_type pos = 0; pos < old_size; ++pos)
{
entry_pointer p_e = m_entries[pos];
- while (p_e != NULL)
+ while (p_e != 0)
p_e = resize_imp_no_exceptions_reassign_pointer(p_e, a_p_entries_resized, traits_base::m_store_extra_indicator);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
index 6fa5676b9df..77735aeafdd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
@@ -62,7 +62,7 @@ PB_DS_CLASS_C_DEC::
trace_list(const_entry_pointer p_l) const
{
size_type iterated_num_used_e = 0;
- while (p_l != NULL)
+ while (p_l != 0)
{
std::cerr << PB_DS_V2F(p_l->m_value) << " ";
p_l = p_l->m_p_next;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
index 69d53763ad5..d39735c5632 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
@@ -60,11 +60,11 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::point_iterator
PB_DS_CLASS_C_DEC::
find_end()
-{ return NULL; }
+{ return 0; }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_point_iterator
PB_DS_CLASS_C_DEC::
find_end() const
-{ return NULL; }
+{ return 0; }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
index 4741afec090..5b2df85a8c2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
@@ -490,7 +490,7 @@ namespace __gnu_pbds
resize_base::notify_find_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
- return NULL;
+ return 0;
}
break;
case valid_entry_status:
@@ -513,7 +513,7 @@ namespace __gnu_pbds
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
resize_base::notify_find_search_end();
- return NULL;
+ return 0;
}
inline pointer
@@ -538,7 +538,7 @@ namespace __gnu_pbds
resize_base::notify_find_search_end();
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
- return NULL;
+ return 0;
}
break;
case valid_entry_status:
@@ -562,7 +562,7 @@ namespace __gnu_pbds
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(key);)
resize_base::notify_find_search_end();
- return NULL;
+ return 0;
}
inline bool
@@ -583,7 +583,7 @@ namespace __gnu_pbds
void
inc_it_state(const_pointer& r_p_value, size_type& r_pos) const
{
- _GLIBCXX_DEBUG_ASSERT(r_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(r_p_value != 0);
for (++r_pos; r_pos < m_num_e; ++r_pos)
{
const_entry_pointer p_e =& m_entries[r_pos];
@@ -593,7 +593,7 @@ namespace __gnu_pbds
return;
}
}
- r_p_value = NULL;
+ r_p_value = 0;
}
void
@@ -608,7 +608,7 @@ namespace __gnu_pbds
return;
}
}
- r_p_value = NULL;
+ r_p_value = 0;
}
void
@@ -623,7 +623,7 @@ namespace __gnu_pbds
return;
}
}
- r_p_value = NULL;
+ r_p_value = 0;
}
#ifdef _GLIBCXX_DEBUG
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
index 0492a47928b..115a8bf0dda 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
@@ -87,7 +87,7 @@ resize_imp(size_type new_size)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
const size_type old_size = m_num_e;
- entry_array a_entries_resized = NULL;
+ entry_array a_entries_resized = 0;
// Following line might throw an exception.
a_entries_resized = s_entry_allocator.allocate(new_size);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
index 479725fd51b..dac063927f6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -60,7 +60,7 @@ namespace __gnu_pbds
typedef
typename __conditional_type<
is_same<
- __gnu_pbds::direct_mask_range_hashing<size_t>,
+ __gnu_pbds::direct_mask_range_hashing<std::size_t>,
Comb_Probe_Fn>::value,
__gnu_pbds::linear_probe_fn<size_type>,
__gnu_pbds::quadratic_probe_fn<size_type> >::__type
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
index dad6451d06f..7dcd82588c1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,7 +48,7 @@ class sample_probe_fn
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
public:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
index 0912e7f27e8..988f111ea20 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,7 +48,7 @@ class sample_range_hashing
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
public:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
index 6120231e2e2..8fa04d140e5 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,7 +48,7 @@ class sample_ranged_hash_fn
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
public:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
index 915f108df83..2bcfdf51a54 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,7 +48,7 @@ class sample_ranged_probe_fn
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
public:
@@ -70,7 +70,7 @@ protected:
// Transforms the const key reference r_key into the i-th position within the table. This method is called for each collision within the probe sequence.
inline size_type
- operator()(const_key_reference r_key, size_t hash, size_type i) const;
+ operator()(const_key_reference r_key, std::size_t hash, size_type i) const;
};
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
index 5955df16164..4c085d4c69d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
@@ -118,7 +118,7 @@ namespace __gnu_pbds
inline PB_DS_CLASS_C_DEC&
operator++()
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd != 0);
inc();
return (*this);
}
@@ -135,10 +135,10 @@ namespace __gnu_pbds
void
inc()
{
- if (base_type::m_p_nd->m_p_next_sibling != NULL)
+ if (base_type::m_p_nd->m_p_next_sibling != 0)
{
base_type::m_p_nd = base_type::m_p_nd->m_p_next_sibling;
- while (base_type::m_p_nd->m_p_l_child != NULL)
+ while (base_type::m_p_nd->m_p_l_child != 0)
base_type::m_p_nd = base_type::m_p_nd->m_p_l_child;
return;
}
@@ -147,7 +147,7 @@ namespace __gnu_pbds
{
node_pointer p_next = base_type::m_p_nd;
base_type::m_p_nd = base_type::m_p_nd->m_p_prev_or_parent;
- if (base_type::m_p_nd == NULL || base_type::m_p_nd->m_p_l_child == p_next)
+ if (base_type::m_p_nd == 0 || base_type::m_p_nd->m_p_l_child == p_next)
return;
}
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
index 7d682526b4c..8eb1574446b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
@@ -107,7 +107,7 @@ namespace __gnu_pbds
// Default constructor.
inline
- left_child_next_sibling_heap_node_const_point_iterator_() : m_p_nd(NULL)
+ left_child_next_sibling_heap_node_const_point_iterator_() : m_p_nd(0)
{ }
// Copy constructor.
@@ -119,7 +119,7 @@ namespace __gnu_pbds
inline const_pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
return &m_p_nd->m_value;
}
@@ -127,7 +127,7 @@ namespace __gnu_pbds
inline const_reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_nd != 0);
return m_p_nd->m_value;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
index ea0572527c2..536ac66ea4b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
@@ -49,7 +49,7 @@ PB_DS_CLASS_C_DEC::s_no_throw_copies_ind;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
left_child_next_sibling_heap_() :
- m_p_root(NULL),
+ m_p_root(0),
m_size(0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -59,7 +59,7 @@ PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn) :
Cmp_Fn(r_cmp_fn),
- m_p_root(NULL),
+ m_p_root(0),
m_size(0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -68,7 +68,7 @@ left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn) :
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
left_child_next_sibling_heap_(const PB_DS_CLASS_C_DEC& other)
-: Cmp_Fn(other), m_p_root(NULL), m_size(0)
+: Cmp_Fn(other), m_p_root(0), m_size(0)
{
m_size = other.m_size;
_GLIBCXX_DEBUG_ONLY(other.assert_valid();)
@@ -111,8 +111,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
recursive_copy_node(const_node_pointer p_nd)
{
- if (p_nd == NULL)
- return (NULL);
+ if (p_nd == 0)
+ return (0);
node_pointer p_ret = s_node_allocator.allocate(1);
@@ -127,7 +127,7 @@ recursive_copy_node(const_node_pointer p_nd)
}
p_ret->m_p_l_child = p_ret->m_p_next_sibling =
- p_ret->m_p_prev_or_parent = NULL;
+ p_ret->m_p_prev_or_parent = 0;
__try
{
@@ -140,12 +140,12 @@ recursive_copy_node(const_node_pointer p_nd)
__throw_exception_again;
}
- if (p_ret->m_p_l_child != NULL)
+ if (p_ret->m_p_l_child != 0)
p_ret->m_p_l_child->m_p_prev_or_parent = p_ret;
- if (p_ret->m_p_next_sibling != NULL)
+ if (p_ret->m_p_next_sibling != 0)
p_ret->m_p_next_sibling->m_p_prev_or_parent =
- p_nd->m_p_next_sibling->m_p_prev_or_parent == p_nd ? p_ret : NULL;
+ p_nd->m_p_next_sibling->m_p_prev_or_parent == p_nd ? p_ret : 0;
return p_ret;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
index 86871ac3817..16b8217bd61 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
@@ -45,9 +45,9 @@ void
PB_DS_CLASS_C_DEC::
assert_valid() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_root == NULL || m_p_root->m_p_prev_or_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_root == 0 || m_p_root->m_p_prev_or_parent == 0);
- if (m_p_root != NULL)
+ if (m_p_root != 0)
assert_node_consistent(m_p_root, Single_Link_Roots);
assert_size();
assert_iterators();
@@ -58,22 +58,22 @@ void
PB_DS_CLASS_C_DEC::
assert_node_consistent(const_node_pointer p_nd, bool single_link) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
assert_node_consistent(p_nd->m_p_l_child, false);
assert_node_consistent(p_nd->m_p_next_sibling, single_link);
if (single_link)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_prev_or_parent == NULL);
- else if (p_nd->m_p_next_sibling != NULL)
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_prev_or_parent == 0);
+ else if (p_nd->m_p_next_sibling != 0)
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling->m_p_prev_or_parent == p_nd);
- if (p_nd->m_p_l_child == NULL)
+ if (p_nd->m_p_l_child == 0)
return;
const_node_pointer p_child = p_nd->m_p_l_child;
- while (p_child != NULL)
+ while (p_child != 0)
{
const_node_pointer p_next_child = p_child->m_p_next_sibling;
_GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(p_nd->m_value, p_child->m_value));
@@ -115,7 +115,7 @@ PB_DS_CLASS_C_DEC::
size_from_node(const_node_pointer p_nd)
{
size_type ret = 0;
- while (p_nd != NULL)
+ while (p_nd != 0)
{
ret += 1 + size_from_node(p_nd->m_p_l_child);
p_nd = p_nd->m_p_next_sibling;
@@ -130,7 +130,7 @@ degree(const_node_pointer p_nd)
{
size_type ret = 0;
const_node_pointer p_child = p_nd->m_p_l_child;
- while (p_child != NULL)
+ while (p_child != 0)
{
++ret;
p_child = p_child->m_p_next_sibling;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
index 9fa09f49bbb..605457fd4cb 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
@@ -45,7 +45,7 @@ clear()
{
clear_imp(m_p_root);
_GLIBCXX_DEBUG_ASSERT(m_size == 0);
- m_p_root = NULL;
+ m_p_root = 0;
}
PB_DS_CLASS_T_DEC
@@ -64,7 +64,7 @@ void
PB_DS_CLASS_C_DEC::
clear_imp(node_pointer p_nd)
{
- while (p_nd != NULL)
+ while (p_nd != 0)
{
clear_imp(p_nd->m_p_l_child);
node_pointer p_next = p_nd->m_p_next_sibling;
@@ -80,8 +80,8 @@ to_linked_list()
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
node_pointer p_cur = m_p_root;
- while (p_cur != NULL)
- if (p_cur->m_p_l_child != NULL)
+ while (p_cur != 0)
+ if (p_cur->m_p_l_child != 0)
{
node_pointer p_child_next = p_cur->m_p_l_child->m_p_next_sibling;
p_cur->m_p_l_child->m_p_next_sibling = p_cur->m_p_next_sibling;
@@ -94,10 +94,10 @@ to_linked_list()
#ifdef _GLIBCXX_DEBUG
const_node_pointer p_counter = m_p_root;
size_type count = 0;
- while (p_counter != NULL)
+ while (p_counter != 0)
{
++count;
- _GLIBCXX_DEBUG_ASSERT(p_counter->m_p_l_child == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_counter->m_p_l_child == 0);
p_counter = p_counter->m_p_next_sibling;
}
_GLIBCXX_DEBUG_ASSERT(count == m_size);
@@ -111,22 +111,22 @@ PB_DS_CLASS_C_DEC::
prune(Pred pred)
{
node_pointer p_cur = m_p_root;
- m_p_root = NULL;
- node_pointer p_out = NULL;
- while (p_cur != NULL)
+ m_p_root = 0;
+ node_pointer p_out = 0;
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
if (pred(p_cur->m_value))
{
p_cur->m_p_next_sibling = p_out;
- if (p_out != NULL)
+ if (p_out != 0)
p_out->m_p_prev_or_parent = p_cur;
p_out = p_cur;
}
else
{
p_cur->m_p_next_sibling = m_p_root;
- if (m_p_root != NULL)
+ if (m_p_root != 0)
m_p_root->m_p_prev_or_parent = p_cur;
m_p_root = p_cur;
}
@@ -141,7 +141,7 @@ PB_DS_CLASS_C_DEC::
bubble_to_top(node_pointer p_nd)
{
node_pointer p_parent = parent(p_nd);
- while (p_parent != NULL)
+ while (p_parent != 0)
{
swap_with_parent(p_nd, p_parent);
p_parent = parent(p_nd);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
index 926ccd39c22..478abe018b0 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
@@ -87,12 +87,12 @@ inline void
PB_DS_CLASS_C_DEC::
make_child_of(node_pointer p_nd, node_pointer p_new_parent)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_new_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_new_parent != 0);
p_nd->m_p_next_sibling = p_new_parent->m_p_l_child;
- if (p_new_parent->m_p_l_child != NULL)
+ if (p_new_parent->m_p_l_child != 0)
p_new_parent->m_p_l_child->m_p_prev_or_parent = p_nd;
p_nd->m_p_prev_or_parent = p_new_parent;
@@ -109,7 +109,7 @@ parent(node_pointer p_nd)
{
node_pointer p_pot = p_nd->m_p_prev_or_parent;
- if (p_pot == NULL || p_pot->m_p_l_child == p_nd)
+ if (p_pot == 0 || p_pot->m_p_l_child == p_nd)
return p_pot;
p_nd = p_pot;
@@ -124,12 +124,12 @@ swap_with_parent(node_pointer p_nd, node_pointer p_parent)
if (p_parent == m_p_root)
m_p_root = p_nd;
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_parent != 0);
_GLIBCXX_DEBUG_ASSERT(parent(p_nd) == p_parent);
const bool nd_direct_child = p_parent->m_p_l_child == p_nd;
- const bool parent_root = p_parent->m_p_prev_or_parent == NULL;
+ const bool parent_root = p_parent->m_p_prev_or_parent == 0;
const bool parent_direct_child =
!parent_root&& p_parent->m_p_prev_or_parent->m_p_l_child == p_parent;
@@ -138,16 +138,16 @@ swap_with_parent(node_pointer p_nd, node_pointer p_parent)
std::swap(p_parent->m_p_l_child, p_nd->m_p_l_child);
std::swap(p_parent->m_metadata, p_nd->m_metadata);
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_l_child != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_l_child != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_prev_or_parent != 0);
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd;
- if (p_parent->m_p_next_sibling != NULL)
+ if (p_parent->m_p_next_sibling != 0)
p_parent->m_p_next_sibling->m_p_prev_or_parent = p_parent;
- if (p_parent->m_p_l_child != NULL)
+ if (p_parent->m_p_l_child != 0)
p_parent->m_p_l_child->m_p_prev_or_parent = p_parent;
if (parent_direct_child)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
index dca70fdd509..b6587e229f2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
@@ -45,10 +45,10 @@ begin()
{
node_pointer p_nd = m_p_root;
- if (p_nd == NULL)
- return (iterator(NULL));
+ if (p_nd == 0)
+ return (iterator(0));
- while (p_nd->m_p_l_child != NULL)
+ while (p_nd->m_p_l_child != 0)
p_nd = p_nd->m_p_l_child;
return (iterator(p_nd));
@@ -61,10 +61,10 @@ begin() const
{
node_pointer p_nd = m_p_root;
- if (p_nd == NULL)
- return (const_iterator(NULL));
+ if (p_nd == 0)
+ return (const_iterator(0));
- while (p_nd->m_p_l_child != NULL)
+ while (p_nd->m_p_l_child != 0)
p_nd = p_nd->m_p_l_child;
return (const_iterator(p_nd));
@@ -75,7 +75,7 @@ inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
end()
{
- return (iterator(NULL));
+ return (iterator(0));
}
PB_DS_CLASS_T_DEC
@@ -83,6 +83,6 @@ inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
end() const
{
- return (const_iterator(NULL));
+ return (const_iterator(0));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
index 040466e8e84..7ba4bf6ee8b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
@@ -38,8 +38,8 @@
* Contains an implementation struct for this type of heap's node.
*/
-#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NULL_METADATA_HPP
-#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NULL_METADATA_HPP
+#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
+#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
namespace __gnu_pbds
{
@@ -52,4 +52,4 @@ namespace __gnu_pbds
} // namespace detail
} // namespace __gnu_pbds
-#endif // #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NULL_METADATA_HPP
+#endif // #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
index 2b90cfa1dc0..8d33baa10ac 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
@@ -57,7 +57,7 @@ void
PB_DS_CLASS_C_DEC::
trace_node(const_node_pointer p_nd, size_type level)
{
- while (p_nd != NULL)
+ while (p_nd != 0)
{
for (size_type i = 0; i < level; ++i)
std::cerr << ' ';
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
index c998c3e67c1..662f40f34e8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
@@ -67,13 +67,13 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME() : m_p_l(NULL)
+PB_DS_CLASS_NAME() : m_p_l(0)
{ _GLIBCXX_DEBUG_ONLY(assert_valid();) }
PB_DS_CLASS_T_DEC
template<typename It>
PB_DS_CLASS_C_DEC::
-PB_DS_CLASS_NAME(It first_it, It last_it) : m_p_l(NULL)
+PB_DS_CLASS_NAME(It first_it, It last_it) : m_p_l(0)
{
copy_from_range(first_it, last_it);
_GLIBCXX_DEBUG_ONLY(assert_valid(););
@@ -85,7 +85,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
#ifdef _GLIBCXX_DEBUG
debug_base(),
#endif
-m_p_l(NULL)
+m_p_l(0)
{
__try
{
@@ -125,13 +125,13 @@ PB_DS_CLASS_C_DEC::
deallocate_all()
{
entry_pointer p_l = m_p_l;
- while (p_l != NULL)
+ while (p_l != 0)
{
entry_pointer p_next_l = p_l->m_p_next;
actual_erase_entry(p_l);
p_l = p_next_l;
}
- m_p_l = NULL;
+ m_p_l = 0;
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
index cdc59208fa3..a7d0fbadf89 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
@@ -44,7 +44,7 @@ PB_DS_CLASS_C_DEC::
erase(const_key_reference r_key)
{
_GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
- if (m_p_l == NULL)
+ if (m_p_l == 0)
return false;
if (s_eq_fn(r_key, PB_DS_V2F(m_p_l->m_value)))
@@ -56,7 +56,7 @@ erase(const_key_reference r_key)
}
entry_pointer p_l = m_p_l;
- while (p_l->m_p_next != NULL)
+ while (p_l->m_p_next != 0)
if (s_eq_fn(r_key, PB_DS_V2F(p_l->m_p_next->m_value)))
{
erase_next(p_l);
@@ -83,7 +83,7 @@ erase_if(Pred pred)
{
_GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();)
size_type num_ersd = 0;
- while (m_p_l != NULL && pred(m_p_l->m_value))
+ while (m_p_l != 0 && pred(m_p_l->m_value))
{
entry_pointer p_next = m_p_l->m_p_next;
++num_ersd;
@@ -91,11 +91,11 @@ erase_if(Pred pred)
m_p_l = p_next;
}
- if (m_p_l == NULL)
+ if (m_p_l == 0)
return num_ersd;
entry_pointer p_l = m_p_l;
- while (p_l->m_p_next != NULL)
+ while (p_l->m_p_next != 0)
{
if (pred(p_l->m_p_next->m_value))
{
@@ -115,9 +115,9 @@ void
PB_DS_CLASS_C_DEC::
erase_next(entry_pointer p_l)
{
- _GLIBCXX_DEBUG_ASSERT(p_l != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_l != 0);
_GLIBCXX_DEBUG_ASSERT(p_l != m_p_l);
- _GLIBCXX_DEBUG_ASSERT(p_l->m_p_next != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_l->m_p_next != 0);
entry_pointer p_next_l = p_l->m_p_next->m_p_next;
actual_erase_entry(p_l->m_p_next);
p_l->m_p_next = p_next_l;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
index 50347ac5fca..e7f5ed1d3f8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
@@ -43,8 +43,8 @@ inline typename PB_DS_CLASS_C_DEC::entry_pointer
PB_DS_CLASS_C_DEC::
find_imp(const_key_reference r_key) const
{
- if (m_p_l == NULL)
- return NULL;
+ if (m_p_l == 0)
+ return 0;
if (s_eq_fn(r_key, PB_DS_V2F(m_p_l->m_value)))
{
apply_update(m_p_l, s_metadata_type_indicator);
@@ -53,7 +53,7 @@ find_imp(const_key_reference r_key) const
}
entry_pointer p_l = m_p_l;
- while (p_l->m_p_next != NULL)
+ while (p_l->m_p_next != 0)
{
entry_pointer p_next = p_l->m_p_next;
if (s_eq_fn(r_key, PB_DS_V2F(p_next->m_value)))
@@ -72,7 +72,7 @@ find_imp(const_key_reference r_key) const
}
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
- return NULL;
+ return 0;
}
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
index 5ad39709d5d..1aaaf1edd92 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
@@ -54,4 +54,4 @@ PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
empty() const
-{ return (m_p_l == NULL); }
+{ return (m_p_l == 0); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
index 5efe2a13a66..197cfbc6d18 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
@@ -48,7 +48,7 @@ insert(const_reference r_val)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
entry_pointer p_l = find_imp(PB_DS_V2F(r_val));
- if (p_l != NULL)
+ if (p_l != 0)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(PB_DS_V2F(r_val));)
return std::make_pair(point_iterator(&p_l->m_value), false);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
index e3247c5b080..4d4e0b417c2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
@@ -43,7 +43,7 @@ inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
begin()
{
- if (m_p_l == NULL)
+ if (m_p_l == 0)
{
_GLIBCXX_DEBUG_ASSERT(empty());
return end();
@@ -56,7 +56,7 @@ inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
begin() const
{
- if (m_p_l == NULL)
+ if (m_p_l == 0)
{
_GLIBCXX_DEBUG_ASSERT(empty());
return end();
@@ -68,13 +68,13 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::iterator
PB_DS_CLASS_C_DEC::
end()
-{ return iterator(NULL, NULL, this); }
+{ return iterator(0, 0, this); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_iterator
PB_DS_CLASS_C_DEC::
end() const
{
- return const_iterator(NULL, NULL, const_cast<PB_DS_CLASS_C_DEC* const>(this));
+ return const_iterator(0, 0, const_cast<PB_DS_CLASS_C_DEC* const>(this));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
index 0e9336b57ca..cf43064e504 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
@@ -233,7 +233,7 @@ namespace __gnu_pbds
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
entry_pointer p_e = find_imp(r_key);
- return point_iterator(p_e == NULL ? NULL: &p_e->m_value);
+ return point_iterator(p_e == 0 ? 0: &p_e->m_value);
}
inline const_point_iterator
@@ -241,7 +241,7 @@ namespace __gnu_pbds
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
entry_pointer p_e = find_imp(r_key);
- return const_point_iterator(p_e == NULL ? NULL: &p_e->m_value);
+ return const_point_iterator(p_e == 0 ? 0: &p_e->m_value);
}
inline bool
@@ -315,7 +315,7 @@ namespace __gnu_pbds
inc_it_state(const_pointer& r_p_value, entry_pointer& r_pos) const
{
r_pos = r_pos->m_p_next;
- r_p_value = (r_pos == NULL) ? NULL : &r_pos->m_value;
+ r_p_value = (r_pos == 0) ? 0 : &r_pos->m_value;
}
template<typename Metadata>
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
index 908aacc19cd..7c8defcdf06 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
@@ -47,7 +47,7 @@ trace() const
{
std::cerr << m_p_l << std::endl << std::endl;
const_entry_pointer p_l = m_p_l;
- while (p_l != NULL)
+ while (p_l != 0)
{
std::cerr << PB_DS_V2F(p_l->m_value) << std::endl;
p_l = p_l->m_p_next;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
index 4ef7fe48a82..8e476cb91b9 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,7 +47,7 @@ namespace __gnu_pbds
// A list-update metadata type that moves elements to the front of
// the list based on the counter algorithm.
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class counter_lu_metadata
{
public:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
index 545b9816293..3245566e39a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
@@ -49,9 +49,9 @@ PB_DS_CLASS_C_DEC::s_metadata_alloc;
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
PB_DS_OV_TREE_CLASS_NAME() :
- m_a_values(NULL),
- m_a_metadata(NULL),
- m_end_it(NULL),
+ m_a_values(0),
+ m_a_metadata(0),
+ m_end_it(0),
m_size(0)
{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
@@ -59,9 +59,9 @@ PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn) :
cmp_fn_base(r_cmp_fn),
- m_a_values(NULL),
- m_a_metadata(NULL),
- m_end_it(NULL),
+ m_a_values(0),
+ m_a_metadata(0),
+ m_end_it(0),
m_size(0)
{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
@@ -70,9 +70,9 @@ PB_DS_CLASS_C_DEC::
PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) :
cmp_fn_base(r_cmp_fn),
node_update(r_node_update),
- m_a_values(NULL),
- m_a_metadata(NULL),
- m_end_it(NULL),
+ m_a_values(0),
+ m_a_metadata(0),
+ m_end_it(0),
m_size(0)
{ _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid();) }
@@ -87,9 +87,9 @@ PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
#endif
cmp_fn_base(other),
node_update(other),
- m_a_values(NULL),
- m_a_metadata(NULL),
- m_end_it(NULL),
+ m_a_values(0),
+ m_a_metadata(0),
+ m_end_it(0),
m_size(0)
{
copy_from_ordered_range(other.begin(), other.end());
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
index c32a8af48c7..9b7011b1ff6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
@@ -47,8 +47,8 @@ assert_valid() const
{
std::cout << "av1" << std::endl;
- if (m_a_values == NULL || m_end_it == NULL || m_size == 0)
- _GLIBCXX_DEBUG_ASSERT(m_a_values == NULL && m_end_it == NULL && m_size == 0);
+ if (m_a_values == 0 || m_end_it == 0 || m_size == 0)
+ _GLIBCXX_DEBUG_ASSERT(m_a_values == 0 && m_end_it == 0 && m_size == 0);
std::cout << "av2" << std::endl;
assert_iterators();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
index 05e7d1a1107..dd24114f490 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
@@ -56,7 +56,7 @@ clear()
}
_GLIBCXX_DEBUG_ONLY(debug_base::clear();)
- m_a_values = NULL;
+ m_a_values = 0;
m_size = 0;
m_end_it = m_a_values;
_GLIBCXX_DEBUG_ONLY(assert_valid();)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
index 91d277b0cae..08d6bfc2293 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
@@ -50,9 +50,9 @@ void
PB_DS_CLASS_C_DEC::
reallocate_metadata(Node_Update_* , size_type new_size)
{
- metadata_pointer a_new_metadata_vec =(new_size == 0) ? NULL : s_metadata_alloc.allocate(new_size);
+ metadata_pointer a_new_metadata_vec =(new_size == 0) ? 0 : s_metadata_alloc.allocate(new_size);
- if (m_a_metadata != NULL)
+ if (m_a_metadata != 0)
{
for (size_type i = 0; i < m_size; ++i)
m_a_metadata[i].~metadata_type();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
index 7652c4c2ea2..0417ae1dd9e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
@@ -69,8 +69,8 @@ PB_DS_node_begin_imp() const
{
return const_node_iterator(const_cast<pointer>(mid_pointer(begin(), end())),
const_cast<pointer>(begin()),
- const_cast<pointer>(end()),(m_a_metadata == NULL)?
- NULL :
+ const_cast<pointer>(end()),(m_a_metadata == 0)?
+ 0 :
mid_pointer(m_a_metadata, m_a_metadata + m_size));
}
@@ -80,7 +80,7 @@ PB_DS_CLASS_C_DEC::
PB_DS_node_end_imp() const
{
return const_node_iterator(end(), end(), end(),
- (m_a_metadata == NULL) ? NULL : m_a_metadata + m_size);
+ (m_a_metadata == 0) ? 0 : m_a_metadata + m_size);
}
PB_DS_CLASS_T_DEC
@@ -89,7 +89,7 @@ PB_DS_CLASS_C_DEC::
PB_DS_node_begin_imp()
{
return node_iterator(mid_pointer(begin(), end()), begin(), end(),
- (m_a_metadata == NULL) ? NULL : mid_pointer(m_a_metadata, m_a_metadata + m_size));
+ (m_a_metadata == 0) ? 0 : mid_pointer(m_a_metadata, m_a_metadata + m_size));
}
PB_DS_CLASS_T_DEC
@@ -98,6 +98,6 @@ PB_DS_CLASS_C_DEC::
PB_DS_node_end_imp()
{
return node_iterator(end(), end(),
- end(),(m_a_metadata == NULL) ? NULL : m_a_metadata + m_size);
+ end(),(m_a_metadata == 0) ? 0 : m_a_metadata + m_size);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
index 68fedc0eb05..1c45c51c1d8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
@@ -118,7 +118,7 @@ namespace __gnu_pbds
public:
inline
- ov_tree_node_const_it_(const_pointer p_nd = NULL, const_pointer p_begin_nd = NULL, const_pointer p_end_nd = NULL, const_metadata_pointer p_metadata = NULL) : m_p_value(const_cast<pointer>(p_nd)), m_p_begin_value(const_cast<pointer>(p_begin_nd)), m_p_end_value(const_cast<pointer>(p_end_nd)), m_p_metadata(p_metadata)
+ ov_tree_node_const_it_(const_pointer p_nd = 0, const_pointer p_begin_nd = 0, const_pointer p_end_nd = 0, const_metadata_pointer p_metadata = 0) : m_p_value(const_cast<pointer>(p_nd)), m_p_begin_value(const_cast<pointer>(p_begin_nd)), m_p_end_value(const_cast<pointer>(p_end_nd)), m_p_metadata(p_metadata)
{ }
inline const_reference
@@ -134,7 +134,7 @@ namespace __gnu_pbds
};
PB_DS_STATIC_ASSERT(should_have_metadata, has_metadata);
- _GLIBCXX_DEBUG_ASSERT(m_p_metadata != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_metadata != 0);
return *m_p_metadata;
}
@@ -164,8 +164,8 @@ namespace __gnu_pbds
return (this_type(mid_pointer(m_p_value + 1, m_p_end_value),
m_p_value + 1,
- m_p_end_value,(m_p_metadata == NULL) ?
- NULL : mid_pointer(m_p_metadata + 1, p_end_metadata)));
+ m_p_end_value,(m_p_metadata == 0) ?
+ 0 : mid_pointer(m_p_metadata + 1, p_end_metadata)));
}
inline bool
@@ -241,7 +241,7 @@ namespace __gnu_pbds
public:
inline
- ov_tree_node_it_(const_pointer p_nd = NULL, const_pointer p_begin_nd = NULL, const_pointer p_end_nd = NULL, const_metadata_pointer p_metadata = NULL) : base_type(p_nd, p_begin_nd, p_end_nd, p_metadata)
+ ov_tree_node_it_(const_pointer p_nd = 0, const_pointer p_begin_nd = 0, const_pointer p_end_nd = 0, const_metadata_pointer p_metadata = 0) : base_type(p_nd, p_begin_nd, p_end_nd, p_metadata)
{ }
// Access.
@@ -277,8 +277,8 @@ namespace __gnu_pbds
return (this_type(base_type::mid_pointer(base_type::m_p_value + 1, base_type::m_p_end_value),
base_type::m_p_value + 1,
- base_type::m_p_end_value,(base_type::m_p_metadata == NULL)?
- NULL : base_type::mid_pointer(base_type::m_p_metadata + 1, p_end_metadata)));
+ base_type::m_p_end_value,(base_type::m_p_metadata == 0)?
+ 0 : base_type::mid_pointer(base_type::m_p_metadata + 1, p_end_metadata)));
}
};
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
index 7c9fc13456a..51afa4fab92 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
@@ -45,8 +45,8 @@ void
PB_DS_CLASS_C_DEC::
assert_valid() const
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_root == NULL
- || base_type::m_p_root->m_p_next_sibling == NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_root == 0
+ || base_type::m_p_root->m_p_next_sibling == 0);
base_type::assert_valid();
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
index 905be1098cf..226e9531ada 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
@@ -48,8 +48,8 @@ pop()
node_pointer p_new_root = join_node_children(base_type::m_p_root);
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_new_root, false);)
- if (p_new_root != NULL)
- p_new_root->m_p_prev_or_parent = NULL;
+ if (p_new_root != 0)
+ p_new_root->m_p_prev_or_parent = 0;
base_type::actual_erase_node(base_type::m_p_root);
base_type::m_p_root = p_new_root;
@@ -78,27 +78,27 @@ remove_node(node_pointer p_nd)
node_pointer p_new_child = join_node_children(p_nd);
#ifdef _GLIBCXX_DEBUG
- if (p_new_child != NULL)
+ if (p_new_child != 0)
base_type::assert_node_consistent(p_new_child, false);
#endif
if (p_nd == base_type::m_p_root)
{
- if (p_new_child != NULL)
- p_new_child->m_p_prev_or_parent = NULL;
+ if (p_new_child != 0)
+ p_new_child->m_p_prev_or_parent = 0;
base_type::m_p_root = p_new_child;
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(base_type::m_p_root, false);)
return;
}
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_prev_or_parent != 0);
if (p_nd->m_p_prev_or_parent->m_p_l_child == p_nd)
{
- if (p_new_child != NULL)
+ if (p_new_child != 0)
{
p_new_child->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
p_new_child->m_p_next_sibling = p_nd->m_p_next_sibling;
- if (p_new_child->m_p_next_sibling != NULL)
+ if (p_new_child->m_p_next_sibling != 0)
p_new_child->m_p_next_sibling->m_p_prev_or_parent = p_new_child;
p_nd->m_p_prev_or_parent->m_p_l_child = p_new_child;
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
@@ -106,17 +106,17 @@ remove_node(node_pointer p_nd)
}
p_nd->m_p_prev_or_parent->m_p_l_child = p_nd->m_p_next_sibling;
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
return;
}
- if (p_new_child != NULL)
+ if (p_new_child != 0)
{
p_new_child->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
p_new_child->m_p_next_sibling = p_nd->m_p_next_sibling;
- if (p_new_child->m_p_next_sibling != NULL)
+ if (p_new_child->m_p_next_sibling != 0)
p_new_child->m_p_next_sibling->m_p_prev_or_parent = p_new_child;
p_new_child->m_p_prev_or_parent->m_p_next_sibling = p_new_child;
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
@@ -124,7 +124,7 @@ remove_node(node_pointer p_nd)
}
p_nd->m_p_prev_or_parent->m_p_next_sibling = p_nd->m_p_next_sibling;
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd->m_p_prev_or_parent, false);)
}
@@ -134,11 +134,11 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
join_node_children(node_pointer p_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
node_pointer p_ret = p_nd->m_p_l_child;
- if (p_ret == NULL)
- return NULL;
- while (p_ret->m_p_next_sibling != NULL)
+ if (p_ret == 0)
+ return 0;
+ while (p_ret->m_p_next_sibling != 0)
p_ret = forward_join(p_ret, p_ret->m_p_next_sibling);
while (p_ret->m_p_prev_or_parent != p_nd)
p_ret = back_join(p_ret->m_p_prev_or_parent, p_ret);
@@ -151,17 +151,17 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
forward_join(node_pointer p_nd, node_pointer p_next)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling == p_next);
if (Cmp_Fn::operator()(p_nd->m_value, p_next->m_value))
{
p_next->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
base_type::make_child_of(p_nd, p_next);
- return p_next->m_p_next_sibling == NULL
+ return p_next->m_p_next_sibling == 0
? p_next : p_next->m_p_next_sibling;
}
- if (p_next->m_p_next_sibling != NULL)
+ if (p_next->m_p_next_sibling != 0)
{
p_next->m_p_next_sibling->m_p_prev_or_parent = p_nd;
p_nd->m_p_next_sibling = p_next->m_p_next_sibling;
@@ -169,7 +169,7 @@ forward_join(node_pointer p_nd, node_pointer p_next)
return p_nd->m_p_next_sibling;
}
- p_nd->m_p_next_sibling = NULL;
+ p_nd->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
return p_nd;
@@ -180,8 +180,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
back_join(node_pointer p_nd, node_pointer p_next)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_next->m_p_next_sibling == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_next->m_p_next_sibling == 0);
if (Cmp_Fn::operator()(p_nd->m_value, p_next->m_value))
{
@@ -191,7 +191,7 @@ back_join(node_pointer p_nd, node_pointer p_next)
return p_next;
}
- p_nd->m_p_next_sibling = NULL;
+ p_nd->m_p_next_sibling = 0;
base_type::make_child_of(p_next, p_nd);
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
return p_nd;
@@ -212,7 +212,7 @@ erase_if(Pred pred)
base_type::to_linked_list();
node_pointer p_out = base_type::prune(pred);
size_type ersd = 0;
- while (p_out != NULL)
+ while (p_out != 0)
{
++ersd;
node_pointer p_next = p_out->m_p_next_sibling;
@@ -221,11 +221,11 @@ erase_if(Pred pred)
}
node_pointer p_cur = base_type::m_p_root;
- base_type::m_p_root = NULL;
- while (p_cur != NULL)
+ base_type::m_p_root = 0;
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
- p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = NULL;
+ p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = 0;
push_imp(p_cur);
p_cur = p_next;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
index b00e9d13cdf..af929e58131 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
@@ -59,17 +59,17 @@ inline void
PB_DS_CLASS_C_DEC::
push_imp(node_pointer p_nd)
{
- p_nd->m_p_l_child = NULL;
+ p_nd->m_p_l_child = 0;
- if (base_type::m_p_root == NULL)
+ if (base_type::m_p_root == 0)
{
- p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = NULL;
+ p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0;
base_type::m_p_root = p_nd;
}
else if (Cmp_Fn::operator()(base_type::m_p_root->m_value, p_nd->m_value))
{
- p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = NULL;
+ p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0;
base_type::make_child_of(base_type::m_p_root, p_nd);
_GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(p_nd, false));
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
index 85d4ddf074a..12032734f4e 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
@@ -61,7 +61,7 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_out = base_type::prune(pred);
- while (p_out != NULL)
+ while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
@@ -70,7 +70,7 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_next = p_out->m_p_next_sibling;
- p_out->m_p_l_child = p_out->m_p_next_sibling = p_out->m_p_prev_or_parent = NULL;
+ p_out->m_p_l_child = p_out->m_p_next_sibling = p_out->m_p_prev_or_parent = 0;
other.push_imp(p_out);
@@ -81,13 +81,13 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_cur = base_type::m_p_root;
- base_type::m_p_root = NULL;
+ base_type::m_p_root = 0;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
- p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = NULL;
+ p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = 0;
push_imp(p_cur);
@@ -106,7 +106,7 @@ join(PB_DS_CLASS_C_DEC& other)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
_GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- if (other.m_p_root == NULL)
+ if (other.m_p_root == 0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
_GLIBCXX_DEBUG_ONLY(other.assert_valid();)
@@ -114,7 +114,7 @@ join(PB_DS_CLASS_C_DEC& other)
return;
}
- if (base_type::m_p_root == NULL)
+ if (base_type::m_p_root == 0)
base_type::m_p_root = other.m_p_root;
else if (Cmp_Fn::operator()(base_type::m_p_root->m_value, other.m_p_root->m_value))
{
@@ -131,7 +131,7 @@ join(PB_DS_CLASS_C_DEC& other)
base_type::m_size += other.m_size;
- other.m_p_root = NULL;
+ other.m_p_root = 0;
other.m_size = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid();)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
index 15f349efbed..8decad5a7f0 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
@@ -48,8 +48,8 @@ public:
typedef node_pointer_reference reference;
inline
- iterator(node_pointer_pointer p_p_cur = NULL,
- node_pointer_pointer p_p_end = NULL)
+ iterator(node_pointer_pointer p_p_cur = 0,
+ node_pointer_pointer p_p_end = 0)
: const_iterator(p_p_cur, p_p_end)
{ }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
index bc349cf2dbd..5cc9c2234c6 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
@@ -53,8 +53,8 @@ public:
public:
inline
- const_iterator(node_pointer_pointer p_p_cur = NULL,
- node_pointer_pointer p_p_end = NULL)
+ const_iterator(node_pointer_pointer p_p_cur = 0,
+ node_pointer_pointer p_p_end = 0)
: m_p_p_cur(p_p_cur), m_p_p_end(p_p_end)
{ }
@@ -71,7 +71,7 @@ public:
{
do
++m_p_p_cur;
- while (m_p_p_cur != m_p_p_end&& * m_p_p_cur == NULL);
+ while (m_p_p_cur != m_p_p_end&& * m_p_p_cur == 0);
return *this;
}
@@ -101,7 +101,7 @@ protected:
#ifdef _GLIBCXX_DEBUG
void
assert_referencible() const
- { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end&& * m_p_p_cur != NULL); }
+ { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end&& * m_p_p_cur != 0); }
#endif
public:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
index ca38f932a62..4d4b52a55eb 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
@@ -85,7 +85,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) :
initialize();
m_size = other.m_size;
_GLIBCXX_DEBUG_ONLY(other.assert_valid();)
- if (other.m_p_head->m_p_parent == NULL)
+ if (other.m_p_head->m_p_parent == 0)
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
return;
@@ -143,7 +143,7 @@ PB_DS_CLASS_C_DEC::
initialize()
{
new (m_p_head) head();
- m_p_head->m_p_parent = NULL;
+ m_p_head->m_p_parent = 0;
m_p_head->m_p_min = m_p_head;
m_p_head->m_p_max = m_p_head;
m_size = 0;
@@ -164,7 +164,7 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
recursive_copy_node(const_node_pointer p_other_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_other_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_other_nd != 0);
if (p_other_nd->m_type == pat_trie_leaf_node_type)
{
const_leaf_pointer p_other_leaf = static_cast<const_leaf_pointer>(p_other_nd);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
index de75657881b..664206499b2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
@@ -45,11 +45,11 @@ void
PB_DS_CLASS_C_DEC::
assert_valid() const
{
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
m_p_head->m_p_parent->assert_valid(this);
assert_iterators();
assert_reverse_iterators();
- if (m_p_head->m_p_parent == NULL)
+ if (m_p_head->m_p_parent == 0)
{
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_min == m_p_head);
_GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_max == m_p_head);
@@ -99,7 +99,7 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
recursive_count_leafs(const_node_pointer p_nd)
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return (0);
if (p_nd->m_type == pat_trie_leaf_node_type)
return (1);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
index 90988184a8d..57e998981a8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
@@ -44,7 +44,7 @@ PB_DS_CLASS_C_DEC::
erase(const_key_reference r_key)
{
node_pointer p_nd = find_imp(r_key);
- if (p_nd == NULL || p_nd->m_type == pat_trie_internal_node_type)
+ if (p_nd == 0 || p_nd->m_type == pat_trie_internal_node_type)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key));
return false;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
index 2552ead8bc5..f53af256339 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
@@ -46,7 +46,7 @@ find(const_key_reference r_key)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
node_pointer p_nd = find_imp(r_key);
- if (p_nd == NULL || p_nd->m_type != pat_trie_leaf_node_type)
+ if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
return end();
@@ -71,7 +71,7 @@ find(const_key_reference r_key) const
const_node_pointer p_nd = const_cast<PB_DS_CLASS_C_DEC* >(this)->find_imp(r_key);
- if (p_nd == NULL || p_nd->m_type != pat_trie_leaf_node_type)
+ if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type)
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(r_key);)
return end();
@@ -93,7 +93,7 @@ PB_DS_CLASS_C_DEC::
find_imp(const_key_reference r_key)
{
if (empty())
- return (NULL);
+ return (0);
typename synth_e_access_traits::const_iterator b_it =
synth_e_access_traits::begin(r_key);
@@ -101,14 +101,14 @@ find_imp(const_key_reference r_key)
synth_e_access_traits::end(r_key);
node_pointer p_nd = m_p_head->m_p_parent;
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
while (p_nd->m_type != pat_trie_leaf_node_type)
{
_GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type);
node_pointer p_next_nd = static_cast<internal_node_pointer>(p_nd)->get_child_node(b_it, e_it, this);
- if (p_next_nd == NULL)
+ if (p_next_nd == 0)
return p_nd;
p_nd = p_next_nd;
}
@@ -124,7 +124,7 @@ lower_bound_imp(const_key_reference r_key)
return (m_p_head);
node_pointer p_nd = m_p_head->m_p_parent;
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
typename PB_DS_CLASS_C_DEC::const_e_iterator b_it =
synth_e_access_traits::begin(r_key);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
index e6049743f61..de3cb35276b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
@@ -165,7 +165,7 @@ rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r,
it != p_r->end(); ++ it)
{
const_node_pointer p_l_join_child = p_l->get_join_child(*it, this);
- if (p_l_join_child != NULL)
+ if (p_l_join_child != 0)
rec_join_prep(p_l_join_child, * it, r_bag);
}
return;
@@ -175,7 +175,7 @@ rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r,
p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this))
{
const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this);
- if (p_r_join_child != NULL)
+ if (p_r_join_child != 0)
rec_join_prep(p_r_join_child, p_l, r_bag);
return;
}
@@ -184,7 +184,7 @@ rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r,
p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this))
{
const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this);
- if (p_r_join_child != NULL)
+ if (p_r_join_child != 0)
rec_join_prep(p_r_join_child, p_l, r_bag);
return;
}
@@ -196,8 +196,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
rec_join(node_pointer p_l, node_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag)
{
- _GLIBCXX_DEBUG_ASSERT(p_r != NULL);
- if (p_l == NULL)
+ _GLIBCXX_DEBUG_ASSERT(p_r != 0);
+ if (p_l == 0)
{
apply_update(p_r, (node_update* )this);
return (p_r);
@@ -245,8 +245,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
rec_join(leaf_pointer p_l, leaf_pointer p_r, split_join_branch_bag& r_bag)
{
- _GLIBCXX_DEBUG_ASSERT(p_r != NULL);
- if (p_l == NULL)
+ _GLIBCXX_DEBUG_ASSERT(p_r != 0);
+ if (p_l == 0)
return (p_r);
node_pointer p_ret = insert_branch(p_l, p_r, r_bag);
_GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) == 2);
@@ -264,7 +264,7 @@ rec_join(leaf_pointer p_l, internal_node_pointer p_r, size_type checked_ind,
const size_type rhs_leafs = recursive_count_leafs(p_r);
#endif
- _GLIBCXX_DEBUG_ASSERT(p_r != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_r != 0);
node_pointer p_ret = rec_join(p_r, p_l, checked_ind, r_bag);
_GLIBCXX_DEBUG_ASSERT(recursive_count_leafs(p_ret) == lhs_leafs + rhs_leafs);
return p_ret;
@@ -275,8 +275,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag)
{
- _GLIBCXX_DEBUG_ASSERT(p_l != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_r != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_l != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_r != 0);
#ifdef _GLIBCXX_DEBUG
const size_type lhs_leafs = recursive_count_leafs(p_l);
@@ -313,8 +313,8 @@ typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
rec_join(internal_node_pointer p_l, internal_node_pointer p_r, split_join_branch_bag& r_bag)
{
- _GLIBCXX_DEBUG_ASSERT(p_l != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_r != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_l != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_r != 0);
#ifdef _GLIBCXX_DEBUG
const size_type lhs_leafs = recursive_count_leafs(p_l);
@@ -378,7 +378,7 @@ PB_DS_CLASS_C_DEC::
insert(const_reference r_val)
{
node_pointer p_lf = find_imp(PB_DS_V2F(r_val));
- if (p_lf != NULL && p_lf->m_type == pat_trie_leaf_node_type &&
+ if (p_lf != 0 && p_lf->m_type == pat_trie_leaf_node_type &&
synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast<leaf_pointer>(p_lf)->value()), PB_DS_V2F(r_val)))
{
_GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(PB_DS_V2F(r_val)));
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp
index bf2f42916dd..56cf1330497 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -226,7 +226,7 @@ namespace __gnu_pbds
get_pref_pos(const_e_iterator b_it, const_e_iterator e_it,
const_e_access_traits_pointer p_traits) const
{
- if (static_cast<size_t>(std::distance(b_it, e_it)) <= m_e_ind)
+ if (static_cast<std::size_t>(std::distance(b_it, e_it)) <= m_e_ind)
return 0;
std::advance(b_it, m_e_ind);
return 1 + p_traits->e_pos(*b_it);
@@ -240,7 +240,7 @@ namespace __gnu_pbds
{
std::advance(m_pref_e_it, m_e_ind);
std::fill(m_a_p_children, m_a_p_children + arr_size,
- static_cast<node_pointer>(NULL));
+ static_cast<node_pointer>(0));
}
PB_DS_CLASS_T_DEC
@@ -317,7 +317,7 @@ namespace __gnu_pbds
{
const size_type i = get_pref_pos(b_it, e_it, p_traits);
_GLIBCXX_DEBUG_ASSERT(i < arr_size);
- _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != 0);
return iterator(m_a_p_children + i, m_a_p_children + i);
}
@@ -345,11 +345,11 @@ namespace __gnu_pbds
size_type i = get_pref_pos(b_it, e_it, p_traits);
_GLIBCXX_DEBUG_ASSERT(i < arr_size);
- if (m_a_p_children[i] != NULL)
+ if (m_a_p_children[i] != 0)
return m_a_p_children[i];
while (++i < arr_size)
- if (m_a_p_children[i] != NULL)
+ if (m_a_p_children[i] != 0)
{
if (m_a_p_children[i]->m_type == pat_trie_leaf_node_type)
return m_a_p_children[i];
@@ -370,7 +370,7 @@ namespace __gnu_pbds
{
const size_type i = get_pref_pos(b_it, e_it, p_traits);
_GLIBCXX_DEBUG_ASSERT(i < arr_size);
- if (m_a_p_children[i] == NULL)
+ if (m_a_p_children[i] == 0)
{
m_a_p_children[i] = p_nd;
p_nd->m_p_parent = this;
@@ -423,7 +423,7 @@ namespace __gnu_pbds
for (; i < arr_size; ++i)
if (m_a_p_children[i] == p_nd)
{
- m_a_p_children[i] = NULL;
+ m_a_p_children[i] = 0;
return;
}
_GLIBCXX_DEBUG_ASSERT(i != arr_size);
@@ -436,7 +436,7 @@ namespace __gnu_pbds
{
iterator ret = it;
++ret;
- * it.m_p_p_cur = NULL;
+ * it.m_p_p_cur = 0;
return ret;
}
@@ -558,7 +558,7 @@ namespace __gnu_pbds
get_begin_pos() const
{
size_type i;
- for (i = 0; i < arr_size && m_a_p_children[i] == NULL; ++i)
+ for (i = 0; i < arr_size && m_a_p_children[i] == 0; ++i)
;
return i;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
index 9902d96dbb1..893a762056d 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
@@ -110,11 +110,11 @@ PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::const_node_iterator
PB_DS_CLASS_C_DEC::
node_end() const
-{ return const_node_iterator(NULL, this); }
+{ return const_node_iterator(0, this); }
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::node_iterator
PB_DS_CLASS_C_DEC::
node_end()
-{ return node_iterator(NULL, this); }
+{ return node_iterator(0, this); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
index 37250091d00..eb5e0002b9f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
@@ -180,8 +180,8 @@ namespace __gnu_pbds
pat_trie_const_node_it_()
*/
inline
- pat_trie_const_node_it_(node_pointer p_nd = NULL,
- const_e_access_traits_pointer p_traits = NULL)
+ pat_trie_const_node_it_(node_pointer p_nd = 0,
+ const_e_access_traits_pointer p_traits = 0)
: m_p_nd(const_cast<node_pointer>(p_nd)), m_p_traits(p_traits)
{ }
@@ -299,7 +299,7 @@ namespace __gnu_pbds
*/
inline
- pat_trie_node_it_(node_pointer p_nd = NULL, const_e_access_traits_pointer p_traits = NULL) : base_type(p_nd, p_traits)
+ pat_trie_node_it_(node_pointer p_nd = 0, const_e_access_traits_pointer p_traits = 0) : base_type(p_nd, p_traits)
{ }
// Access; returns the iterator* associated with the current leaf.
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
index cada9071c51..0a142478eb8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
@@ -145,7 +145,7 @@ namespace __gnu_pbds
public:
inline
- pat_trie_const_it_(node_pointer p_nd = NULL) : m_p_nd(p_nd)
+ pat_trie_const_it_(node_pointer p_nd = 0) : m_p_nd(p_nd)
{ }
inline
@@ -245,7 +245,7 @@ namespace __gnu_pbds
node_pointer p_y = m_p_nd->m_p_parent;
while (p_y->m_type != pat_trie_head_node_type &&
- get_larger_sibling(m_p_nd) == NULL)
+ get_larger_sibling(m_p_nd) == 0)
{
m_p_nd = p_y;
p_y = p_y->m_p_parent;
@@ -274,7 +274,7 @@ namespace __gnu_pbds
node_pointer p_y = m_p_nd->m_p_parent;
while (p_y->m_type != pat_trie_head_node_type &&
- get_smaller_sibling(m_p_nd) == NULL)
+ get_smaller_sibling(m_p_nd) == 0)
{
m_p_nd = p_y;
p_y = p_y->m_p_parent;
@@ -300,7 +300,7 @@ namespace __gnu_pbds
typename Internal_Node::iterator next_it = it;
++next_it;
- return ((next_it == p_parent->end())? NULL :* next_it);
+ return ((next_it == p_parent->end())? 0 :* next_it);
}
inline static node_pointer
@@ -312,7 +312,7 @@ namespace __gnu_pbds
typename Internal_Node::iterator it = p_parent->begin();
if (*it == p_nd)
- return (NULL);
+ return (0);
typename Internal_Node::iterator prev_it;
do
{
@@ -324,7 +324,7 @@ namespace __gnu_pbds
while (true);
_GLIBCXX_DEBUG_ASSERT(false);
- return (NULL);
+ return (0);
}
inline static leaf_pointer
@@ -397,7 +397,7 @@ namespace __gnu_pbds
typedef typename Type_Traits::reference reference;
inline
- pat_trie_it_(node_pointer p_nd = NULL) : PB_DS_CONST_IT_C_DEC((node_pointer)p_nd)
+ pat_trie_it_(node_pointer p_nd = 0) : PB_DS_CONST_IT_C_DEC((node_pointer)p_nd)
{ }
inline
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
index 52edf250635..bfb456392b2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
@@ -93,7 +93,7 @@ void
PB_DS_CLASS_C_DEC::
clear_imp(node_pointer p_nd)
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
clear_imp(p_nd->m_p_left);
clear_imp(p_nd->m_p_right);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
index c0809fa48bc..40dc38c71b4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
@@ -46,7 +46,7 @@ rotate_left(node_pointer p_x)
node_pointer p_y = p_x->m_p_right;
p_x->m_p_right = p_y->m_p_left;
- if (p_y->m_p_left != NULL)
+ if (p_y->m_p_left != 0)
p_y->m_p_left->m_p_parent = p_x;
p_y->m_p_parent = p_x->m_p_parent;
@@ -75,7 +75,7 @@ rotate_right(node_pointer p_x)
node_pointer p_y = p_x->m_p_left;
p_x->m_p_left = p_y->m_p_right;
- if (p_y->m_p_right != NULL)
+ if (p_y->m_p_right != 0)
p_y->m_p_right->m_p_parent = p_x;
p_y->m_p_parent = p_x->m_p_parent;
@@ -122,10 +122,10 @@ inline void
PB_DS_CLASS_C_DEC::
apply_update(node_pointer p_nd, Node_Update_* p_update)
{
- p_update->operator()(& PB_DS_V2F(p_nd->m_value),(p_nd->m_p_left == NULL) ?
- NULL :
- & PB_DS_V2F(p_nd->m_p_left->m_value),(p_nd->m_p_right == NULL) ?
- NULL :
+ p_update->operator()(& PB_DS_V2F(p_nd->m_value),(p_nd->m_p_left == 0) ?
+ 0 :
+ & PB_DS_V2F(p_nd->m_p_left->m_value),(p_nd->m_p_right == 0) ?
+ 0 :
& PB_DS_V2F(p_nd->m_p_right->m_value));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
index 9779a4bcd22..320d32c0667 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
@@ -47,7 +47,7 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
_GLIBCXX_DEBUG_ONLY(other.assert_valid(););
split_join_branch_bag bag;
leaf_pointer p_split_lf = split_prep(r_key, other, bag);
- if (p_split_lf == NULL)
+ if (p_split_lf == 0)
{
_GLIBCXX_DEBUG_ASSERT(bag.empty());
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -88,7 +88,7 @@ split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branc
other.clear();
_GLIBCXX_DEBUG_ONLY(assert_valid(););
_GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (NULL);
+ return (0);
}
if (synth_e_access_traits::cmp_keys(r_key,
@@ -98,7 +98,7 @@ split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branc
value_swap(other);
_GLIBCXX_DEBUG_ONLY(assert_valid(););
_GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (NULL);
+ return (0);
}
if (!synth_e_access_traits::cmp_keys(r_key,
@@ -106,7 +106,7 @@ split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branc
{
_GLIBCXX_DEBUG_ONLY(assert_valid(););
_GLIBCXX_DEBUG_ONLY(other.assert_valid(););
- return (NULL);
+ return (0);
}
iterator it = lower_bound(r_key);
@@ -134,7 +134,7 @@ rec_split(node_pointer p_nd, const_e_iterator b_it, const_e_iterator e_it, PB_DS
{
if (p_nd->m_type == pat_trie_leaf_node_type)
{
- _GLIBCXX_DEBUG_ASSERT(other.m_p_head->m_p_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(other.m_p_head->m_p_parent == 0);
return (p_nd);
}
@@ -202,27 +202,27 @@ PB_DS_CLASS_C_DEC::
split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_node::iterator child_b_it, size_type num_children, split_join_branch_bag& r_bag)
{
#ifdef _GLIBCXX_DEBUG
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
m_p_head->m_p_parent->assert_valid(this);
#endif
- const size_type total_num_children =((m_p_head->m_p_parent == NULL)? 0 : 1) + num_children;
+ const size_type total_num_children =((m_p_head->m_p_parent == 0)? 0 : 1) + num_children;
if (total_num_children == 0)
{
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0);
return;
}
if (total_num_children == 1)
{
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
{
_GLIBCXX_DEBUG_ONLY(m_p_head->m_p_parent->assert_valid(this);)
return;
}
- _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0);
m_p_head->m_p_parent =* child_b_it;
m_p_head->m_p_parent->m_p_parent = m_p_head;
apply_update(m_p_head->m_p_parent, (node_update* )this);
@@ -242,7 +242,7 @@ split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_no
++child_b_it;
}
- if (m_p_head->m_p_parent != NULL)
+ if (m_p_head->m_p_parent != 0)
p_new_root->add_child(m_p_head->m_p_parent,
pref_begin(m_p_head->m_p_parent),
pref_end(m_p_head->m_p_parent), this);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
index e4b20943be6..e6af80413a4 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
@@ -46,7 +46,7 @@ PB_DS_CLASS_C_DEC::
trace() const
{
std::cerr << std::endl;
- if (m_p_head->m_p_parent == NULL)
+ if (m_p_head->m_p_parent == 0)
return;
trace_node(m_p_head->m_p_parent, 0);
std::cerr << std::endl;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
index 6d275e731d1..1eecdc10990 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
@@ -51,5 +51,5 @@ PB_DS_CLASS_C_DEC::
apply_update(node_pointer p_nd, Node_Update_* /*p_update*/)
{
Node_Update_::operator()(node_iterator(p_nd, this),
- const_node_iterator(NULL, this));
+ const_node_iterator(0, this));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
index 18ecc4230ed..7cdadfc5f83 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
@@ -45,7 +45,7 @@ typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
assert_node_consistent(const node_pointer p_nd) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return 1;
const size_type l_height = assert_node_consistent(p_nd->m_p_left);
@@ -67,7 +67,7 @@ assert_valid() const
base_type::assert_valid();
const node_pointer p_head = base_type::m_p_head;
_GLIBCXX_DEBUG_ASSERT(p_head->m_red);
- if (p_head->m_p_parent != NULL)
+ if (p_head->m_p_parent != 0)
{
_GLIBCXX_DEBUG_ASSERT(!p_head->m_p_parent->m_red);
assert_node_consistent(p_head->m_p_parent);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
index 685b8a51b6b..2ae4cef072c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
@@ -123,17 +123,17 @@ remove_node(node_pointer p_z)
{
update_min_max_for_erased_node(p_z);
node_pointer p_y = p_z;
- node_pointer p_x = NULL;
- node_pointer p_new_x_parent = NULL;
+ node_pointer p_x = 0;
+ node_pointer p_new_x_parent = 0;
- if (p_y->m_p_left == NULL)
+ if (p_y->m_p_left == 0)
p_x = p_y->m_p_right;
- else if (p_y->m_p_right == NULL)
+ else if (p_y->m_p_right == 0)
p_x = p_y->m_p_left;
else
{
p_y = p_y->m_p_right;
- while (p_y->m_p_left != NULL)
+ while (p_y->m_p_left != 0)
p_y = p_y->m_p_left;
p_x = p_y->m_p_right;
}
@@ -141,7 +141,7 @@ remove_node(node_pointer p_z)
if (p_y == p_z)
{
p_new_x_parent = p_y->m_p_parent;
- if (p_x != NULL)
+ if (p_x != 0)
p_x->m_p_parent = p_y->m_p_parent;
if (base_type::m_p_head->m_p_parent == p_z)
@@ -153,7 +153,7 @@ remove_node(node_pointer p_z)
}
else
{
- p_y->m_p_left = NULL;
+ p_y->m_p_left = 0;
p_z->m_p_parent->m_p_right = p_x;
}
}
@@ -164,7 +164,7 @@ remove_node(node_pointer p_z)
if (p_y != p_z->m_p_right)
{
p_new_x_parent = p_y->m_p_parent;
- if (p_x != NULL)
+ if (p_x != 0)
p_x->m_p_parent = p_y->m_p_parent;
p_y->m_p_parent->m_p_left = p_x;
p_y->m_p_right = p_z->m_p_right;
@@ -198,7 +198,7 @@ void
PB_DS_CLASS_C_DEC::
remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
{
- _GLIBCXX_DEBUG_ASSERT(p_x == NULL || p_x->m_p_parent == p_new_x_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_x == 0 || p_x->m_p_parent == p_new_x_parent);
while (p_x != base_type::m_p_head->m_p_parent && is_effectively_black(p_x))
if (p_x == p_new_x_parent->m_p_left)
@@ -223,7 +223,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
{
if (is_effectively_black(p_w->m_p_right))
{
- if (p_w->m_p_left != NULL)
+ if (p_w->m_p_left != 0)
p_w->m_p_left->m_red = false;
p_w->m_red = true;
@@ -234,7 +234,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
p_w->m_red = p_new_x_parent->m_red;
p_new_x_parent->m_red = false;
- if (p_w->m_p_right != NULL)
+ if (p_w->m_p_right != 0)
p_w->m_p_right->m_red = false;
base_type::rotate_left(p_new_x_parent);
@@ -264,7 +264,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
{
if (is_effectively_black(p_w->m_p_left))
{
- if (p_w->m_p_right != NULL)
+ if (p_w->m_p_right != 0)
p_w->m_p_right->m_red = false;
p_w->m_red = true;
@@ -275,7 +275,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
p_w->m_red = p_new_x_parent->m_red;
p_new_x_parent->m_red = false;
- if (p_w->m_p_left != NULL)
+ if (p_w->m_p_left != 0)
p_w->m_p_left->m_red = false;
base_type::rotate_right(p_new_x_parent);
@@ -284,6 +284,6 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
}
}
- if (p_x != NULL)
+ if (p_x != 0)
p_x->m_red = false;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
index 6b43b1a994c..97eba22f6f8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
@@ -42,5 +42,5 @@ PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
is_effectively_black(const node_pointer p_nd)
-{ return (p_nd == NULL || !p_nd->m_red); }
+{ return (p_nd == 0 || !p_nd->m_red); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
index 16a5d1edb29..a6a60160cca 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
@@ -67,7 +67,7 @@ insert_fixup(node_pointer p_nd)
if (p_nd->m_p_parent == p_nd->m_p_parent->m_p_parent->m_p_left)
{
node_pointer p_y = p_nd->m_p_parent->m_p_parent->m_p_right;
- if (p_y != NULL && p_y->m_red)
+ if (p_y != 0 && p_y->m_red)
{
p_nd->m_p_parent->m_red = false;
p_y->m_red = false;
@@ -89,7 +89,7 @@ insert_fixup(node_pointer p_nd)
else
{
node_pointer p_y = p_nd->m_p_parent->m_p_parent->m_p_left;
- if (p_y != NULL && p_y->m_red)
+ if (p_y != 0 && p_y->m_red)
{
p_nd->m_p_parent->m_red = false;
p_y->m_red = false;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
index 9776a8d9a34..96280564dd2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
@@ -67,8 +67,8 @@ void
PB_DS_CLASS_C_DEC::
join_imp(node_pointer p_x, node_pointer p_r)
{
- _GLIBCXX_DEBUG_ASSERT(p_x != NULL);
- if (p_r != NULL)
+ _GLIBCXX_DEBUG_ASSERT(p_x != 0);
+ if (p_r != 0)
p_r->m_red = false;
const size_type h = black_height(base_type::m_p_head->m_p_parent);
@@ -88,7 +88,7 @@ join_imp(node_pointer p_x, node_pointer p_r)
{
p_x_l = base_type::m_p_head->m_p_parent;
base_type::m_p_head->m_p_parent = p_r;
- if (p_r != NULL)
+ if (p_r != 0)
p_r->m_p_parent = base_type::m_p_head;
join_pos = find_join_pos_left(base_type::m_p_head->m_p_parent,
@@ -112,11 +112,11 @@ join_imp(node_pointer p_x, node_pointer p_r)
}
p_x->m_p_left = p_x_l;
- if (p_x_l != NULL)
+ if (p_x_l != 0)
p_x_l->m_p_parent = p_x;
p_x->m_p_right = p_x_r;
- if (p_x_r != NULL)
+ if (p_x_r != 0)
p_x_r->m_p_parent = p_x;
p_x->m_red = true;
@@ -153,8 +153,8 @@ find_join_pos_right(node_pointer p_l, size_type h_l, size_type h_r)
{
_GLIBCXX_DEBUG_ASSERT(h_l >= h_r);
- if (base_type::m_p_head->m_p_parent == NULL)
- return (std::make_pair((node_pointer)NULL, base_type::m_p_head));
+ if (base_type::m_p_head->m_p_parent == 0)
+ return (std::make_pair((node_pointer)0, base_type::m_p_head));
node_pointer p_l_parent = base_type::m_p_head;
while (h_l > h_r)
@@ -177,7 +177,7 @@ find_join_pos_right(node_pointer p_l, size_type h_l, size_type h_r)
_GLIBCXX_DEBUG_ASSERT(is_effectively_black(p_l));
_GLIBCXX_DEBUG_ASSERT(black_height(p_l) == h_r);
- _GLIBCXX_DEBUG_ASSERT(p_l == NULL || p_l->m_p_parent == p_l_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_l == 0 || p_l->m_p_parent == p_l_parent);
return std::make_pair(p_l, p_l_parent);
}
@@ -189,8 +189,8 @@ PB_DS_CLASS_C_DEC::
find_join_pos_left(node_pointer p_r, size_type h_l, size_type h_r)
{
_GLIBCXX_DEBUG_ASSERT(h_r > h_l);
- if (base_type::m_p_head->m_p_parent == NULL)
- return (std::make_pair((node_pointer)NULL,
+ if (base_type::m_p_head->m_p_parent == 0)
+ return (std::make_pair((node_pointer)0,
base_type::m_p_head));
node_pointer p_r_parent = base_type::m_p_head;
while (h_r > h_l)
@@ -213,7 +213,7 @@ find_join_pos_left(node_pointer p_r, size_type h_l, size_type h_r)
_GLIBCXX_DEBUG_ASSERT(is_effectively_black(p_r));
_GLIBCXX_DEBUG_ASSERT(black_height(p_r) == h_l);
- _GLIBCXX_DEBUG_ASSERT(p_r == NULL || p_r->m_p_parent == p_r_parent);
+ _GLIBCXX_DEBUG_ASSERT(p_r == 0 || p_r->m_p_parent == p_r_parent);
return std::make_pair(p_r, p_r_parent);
}
@@ -223,7 +223,7 @@ PB_DS_CLASS_C_DEC::
black_height(node_pointer p_nd)
{
size_type h = 1;
- while (p_nd != NULL)
+ while (p_nd != 0)
{
if (p_nd->m_red == false)
++h;
@@ -275,7 +275,7 @@ void
PB_DS_CLASS_C_DEC::
split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
node_pointer p_l = p_nd->m_p_left;
node_pointer p_r = p_nd->m_p_right;
@@ -283,7 +283,7 @@ split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
if (p_parent == base_type::m_p_head)
{
base_type::m_p_head->m_p_parent = p_l;
- if (p_l != NULL)
+ if (p_l != 0)
{
p_l->m_p_parent = base_type::m_p_head;
p_l->m_red = false;
@@ -296,7 +296,7 @@ split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
else
p_parent->m_p_right = p_l;
- if (p_l != NULL)
+ if (p_l != 0)
p_l->m_p_parent = p_parent;
update_to_top(p_parent, (node_update* )this);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
index 0194905c4c7..4b8878ee84c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
@@ -48,7 +48,7 @@ assert_valid() const
base_type::assert_valid(false);
if (!base_type::empty())
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_max != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_max != 0);
base_type::assert_max();
}
@@ -57,7 +57,7 @@ assert_valid() const
if (m_rc.empty())
{
base_type::assert_valid(true);
- _GLIBCXX_DEBUG_ASSERT(next_2_pointer(base_type::m_p_root) == NULL);
+ _GLIBCXX_DEBUG_ASSERT(next_2_pointer(base_type::m_p_root) == 0);
return;
}
@@ -65,13 +65,13 @@ assert_valid() const
typename rc_t::const_iterator it = m_rc.end();
--it;
- while (p_nd != NULL)
+ while (p_nd != 0)
{
_GLIBCXX_DEBUG_ASSERT(*it == p_nd);
const_node_pointer p_next = p_nd->m_p_next_sibling;
- _GLIBCXX_DEBUG_ASSERT(p_next != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_next != 0);
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == p_next->m_metadata);
- _GLIBCXX_DEBUG_ASSERT(p_next->m_p_next_sibling == NULL ||
+ _GLIBCXX_DEBUG_ASSERT(p_next->m_p_next_sibling == 0 ||
p_next->m_metadata < p_next->m_p_next_sibling->m_metadata);
--it;
@@ -85,13 +85,13 @@ typename PB_DS_CLASS_C_DEC::const_node_pointer
PB_DS_CLASS_C_DEC::
next_2_pointer(const_node_pointer p_nd)
{
- if (p_nd == NULL)
- return NULL;
+ if (p_nd == 0)
+ return 0;
node_pointer p_next = p_nd->m_p_next_sibling;
- if (p_next == NULL)
- return NULL;
+ if (p_next == 0)
+ return 0;
if (p_nd->m_metadata == p_next->m_metadata)
return p_nd;
@@ -104,13 +104,13 @@ typename PB_DS_CLASS_C_DEC::const_node_pointer
PB_DS_CLASS_C_DEC::
next_after_0_pointer(const_node_pointer p_nd)
{
- if (p_nd == NULL)
- return NULL;
+ if (p_nd == 0)
+ return 0;
node_pointer p_next = p_nd->m_p_next_sibling;
- if (p_next == NULL)
- return NULL;
+ if (p_next == 0)
+ return 0;
if (p_nd->m_metadata < p_next->m_metadata)
return p_next;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
index 1113ffa6669..1f187a55749 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
@@ -64,10 +64,10 @@ PB_DS_CLASS_C_DEC::
make_binomial_heap()
{
node_pointer p_nd = base_type::m_p_root;
- while (p_nd != NULL)
+ while (p_nd != 0)
{
node_pointer p_next = p_nd->m_p_next_sibling;
- if (p_next == NULL)
+ if (p_next == 0)
p_nd = p_next;
else if (p_nd->m_metadata == p_next->m_metadata)
p_nd = link_with_next_sibling(p_nd);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
index aef4b928e16..2a3badccb5b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
@@ -51,20 +51,20 @@ push(const_reference r_val)
node_pointer p_nd = base_type::get_new_node_for_insert(r_val);
- p_nd->m_p_l_child = p_nd->m_p_prev_or_parent = NULL;
+ p_nd->m_p_l_child = p_nd->m_p_prev_or_parent = 0;
p_nd->m_metadata = 0;
- if (base_type::m_p_max == NULL || Cmp_Fn::operator()(base_type::m_p_max->m_value, r_val))
+ if (base_type::m_p_max == 0 || Cmp_Fn::operator()(base_type::m_p_max->m_value, r_val))
base_type::m_p_max = p_nd;
p_nd->m_p_next_sibling = base_type::m_p_root;
- if (base_type::m_p_root != NULL)
+ if (base_type::m_p_root != 0)
base_type::m_p_root->m_p_prev_or_parent = p_nd;
base_type::m_p_root = p_nd;
- if (p_nd->m_p_next_sibling != NULL&& p_nd->m_p_next_sibling->m_metadata == 0)
+ if (p_nd->m_p_next_sibling != 0&& p_nd->m_p_next_sibling->m_metadata == 0)
m_rc.push(p_nd);
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -95,14 +95,14 @@ link_with_next_sibling(node_pointer p_nd)
{
node_pointer p_next = p_nd->m_p_next_sibling;
- _GLIBCXX_DEBUG_ASSERT(p_next != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_next != 0);
_GLIBCXX_DEBUG_ASSERT(p_next->m_p_prev_or_parent == p_nd);
if (Cmp_Fn::operator()(p_nd->m_value, p_next->m_value))
{
p_next->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
- if (p_next->m_p_prev_or_parent == NULL)
+ if (p_next->m_p_prev_or_parent == 0)
base_type::m_p_root = p_next;
else
p_next->m_p_prev_or_parent->m_p_next_sibling = p_next;
@@ -119,7 +119,7 @@ link_with_next_sibling(node_pointer p_nd)
p_nd->m_p_next_sibling = p_next->m_p_next_sibling;
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd;
if (base_type::m_p_max == p_next)
@@ -144,11 +144,11 @@ make_0_exposed()
m_rc.pop();
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling != 0);
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata);
node_pointer p_res = link_with_next_sibling(p_nd);
- if (p_res->m_p_next_sibling != NULL&& p_res->m_metadata == p_res->m_p_next_sibling->m_metadata)
+ if (p_res->m_p_next_sibling != 0&& p_res->m_metadata == p_res->m_p_next_sibling->m_metadata)
m_rc.push(p_res);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
index a28f5ede5e6..c816cfdeac8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -150,7 +150,7 @@ inline PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
get_nearest_smaller_size(size_type n) const
{
- const size_t* p_lower = std::lower_bound(detail::g_a_sizes,
+ const std::size_t* p_lower = std::lower_bound(detail::g_a_sizes,
detail::g_a_sizes + detail::num_distinct_sizes, n);
if (*p_lower >= n && p_lower != detail::g_a_sizes)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
index ed70b951121..33aecdf5fcc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,7 +47,7 @@ class sample_resize_policy
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
// Default constructor.
sample_resize_policy();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
index a27dd942702..963c5530a46 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,7 +48,7 @@ class sample_resize_trigger
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
// Default constructor.
sample_resize_trigger();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
index 1f2d3a9c125..9b3ba031c4b 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,7 +47,7 @@ class sample_size_policy
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
// Default constructor.
sample_size_policy();
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
index 084e25d26de..f673877aed2 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
@@ -55,7 +55,7 @@ void
PB_DS_CLASS_C_DEC::
assert_special_imp(const node_pointer p_nd) const
{
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
if (p_nd == base_type::m_p_head)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
index 508f586d78d..507b8ba407c 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
@@ -108,7 +108,7 @@ void
PB_DS_CLASS_C_DEC::
erase_node(node_pointer p_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
splay(p_nd);
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -119,27 +119,27 @@ erase_node(node_pointer p_nd)
base_type::update_min_max_for_erased_node(p_nd);
base_type::actual_erase_node(p_nd);
- if (p_r == NULL)
+ if (p_r == 0)
{
base_type::m_p_head->m_p_parent = p_l;
- if (p_l != NULL)
+ if (p_l != 0)
p_l->m_p_parent = base_type::m_p_head;
_GLIBCXX_DEBUG_ONLY(assert_valid();)
return;
}
node_pointer p_target_r = leftmost(p_r);
- _GLIBCXX_DEBUG_ASSERT(p_target_r != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_target_r != 0);
p_r->m_p_parent = base_type::m_p_head;
base_type::m_p_head->m_p_parent = p_r;
splay(p_target_r);
- _GLIBCXX_DEBUG_ONLY(p_target_r->m_p_left = NULL);
+ _GLIBCXX_DEBUG_ONLY(p_target_r->m_p_left = 0);
_GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_parent == this->m_p_head);
_GLIBCXX_DEBUG_ASSERT(this->m_p_head->m_p_parent == p_target_r);
p_target_r->m_p_left = p_l;
- if (p_l != NULL)
+ if (p_l != 0)
p_l->m_p_parent = p_target_r;
_GLIBCXX_DEBUG_ONLY(assert_valid();)
apply_update(p_target_r, (node_update* )this);
@@ -150,8 +150,8 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer
PB_DS_CLASS_C_DEC::
leftmost(node_pointer p_nd)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- while (p_nd->m_p_left != NULL)
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ while (p_nd->m_p_left != 0)
p_nd = p_nd->m_p_left;
return p_nd;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
index 182425a8f30..e27142c17ec 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
@@ -67,7 +67,7 @@ find_imp(const_key_reference r_key)
{
_GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid();)
node_pointer p_nd = base_type::m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
if (!Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value)))
@@ -86,7 +86,7 @@ find_imp(const_key_reference r_key) const
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
node_pointer p_nd = base_type::m_p_head->m_p_parent;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key))
{
if (!Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value)))
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
index e9ae987b09d..8381174d29f 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
@@ -64,7 +64,7 @@ insert_leaf_imp(const_reference r_value)
node_pointer p_nd = base_type::m_p_head->m_p_parent;
node_pointer p_pot = base_type::m_p_head;
- while (p_nd != NULL)
+ while (p_nd != 0)
if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), PB_DS_V2F(r_value)))
{
if (!Cmp_Fn::operator()(PB_DS_V2F(r_value), PB_DS_V2F(p_nd->m_value)))
@@ -83,10 +83,10 @@ insert_leaf_imp(const_reference r_value)
_GLIBCXX_DEBUG_ONLY(base_type::check_key_does_not_exist(PB_DS_V2F(r_value)));
p_nd = p_pot->m_p_left;
- if (p_nd == NULL)
+ if (p_nd == 0)
return (std::make_pair(base_type::insert_leaf_new(r_value, p_pot, true), true));
- while (p_nd->m_p_right != NULL)
+ while (p_nd->m_p_right != 0)
p_nd = p_nd->m_p_right;
return std::make_pair(insert_leaf_new(r_value, p_nd, false), true);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
index e4f3556a5f0..b6993590acb 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
@@ -114,11 +114,11 @@ splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent,
p_grandparent->m_p_parent = p_nd;
p_parent->m_p_left = p_b;
- if (p_b != NULL)
+ if (p_b != 0)
p_b->m_p_parent = p_parent;
p_grandparent->m_p_right = p_c;
- if (p_c != NULL)
+ if (p_c != 0)
p_c->m_p_parent = p_grandparent;
splay_zz_end(p_nd, p_parent, p_grandparent);
@@ -150,11 +150,11 @@ splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent,
p_grandparent->m_p_parent = p_nd;
p_parent->m_p_right = p_b;
- if (p_b != NULL)
+ if (p_b != 0)
p_b->m_p_parent = p_parent;
p_grandparent->m_p_left = p_c;
- if (p_c != NULL)
+ if (p_c != 0)
p_c->m_p_parent = p_grandparent;
splay_zz_end(p_nd, p_parent, p_grandparent);
@@ -186,11 +186,11 @@ splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent,
p_grandparent->m_p_parent = p_parent;
p_parent->m_p_left = p_b;
- if (p_b != NULL)
+ if (p_b != 0)
p_b->m_p_parent = p_parent;
p_grandparent->m_p_left = p_c;
- if (p_c != NULL)
+ if (p_c != 0)
p_c->m_p_parent = p_grandparent;
splay_zz_end(p_nd, p_parent, p_grandparent);
@@ -220,11 +220,11 @@ splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent,
p_grandparent->m_p_parent = p_parent;
p_parent->m_p_right = p_b;
- if (p_b != NULL)
+ if (p_b != 0)
p_b->m_p_parent = p_parent;
p_grandparent->m_p_right = p_c;
- if (p_c != NULL)
+ if (p_c != 0)
p_c->m_p_parent = p_grandparent;
base_type::update_to_top(p_grandparent, (node_update* )this);
@@ -242,9 +242,9 @@ splay_zz_start(node_pointer p_nd,
#endif
node_pointer p_grandparent)
{
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_parent != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_grandparent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_parent != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_grandparent != 0);
const bool grandparent_head = p_grandparent->m_p_parent == base_type::m_p_head;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
index 7f0b2cb205d..401f22c0369 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
@@ -53,15 +53,15 @@ join(PB_DS_CLASS_C_DEC& other)
}
node_pointer p_target_r = other.leftmost(other.m_p_head);
- _GLIBCXX_DEBUG_ASSERT(p_target_r != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_target_r != 0);
other.splay(p_target_r);
_GLIBCXX_DEBUG_ASSERT(p_target_r == other.m_p_head->m_p_parent);
- _GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_left == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_left == 0);
p_target_r->m_p_left = base_type::m_p_head->m_p_parent;
- _GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_left != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_left != 0);
p_target_r->m_p_left->m_p_parent = p_target_r;
base_type::m_p_head->m_p_parent = p_target_r;
@@ -90,19 +90,19 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
}
node_pointer p_upper_bound = upper_bound(r_key).m_p_nd;
- _GLIBCXX_DEBUG_ASSERT(p_upper_bound != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_upper_bound != 0);
splay(p_upper_bound);
_GLIBCXX_DEBUG_ASSERT(p_upper_bound->m_p_parent == this->m_p_head);
node_pointer p_new_root = p_upper_bound->m_p_left;
- _GLIBCXX_DEBUG_ASSERT(p_new_root != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_new_root != 0);
base_type::m_p_head->m_p_parent = p_new_root;
p_new_root->m_p_parent = base_type::m_p_head;
other.m_p_head->m_p_parent = p_upper_bound;
p_upper_bound->m_p_parent = other.m_p_head;
- p_upper_bound->m_p_left = NULL;
+ p_upper_bound->m_p_left = 0;
apply_update(p_upper_bound, (node_update* )this);
base_type::split_finish(other);
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
index 4d2c45ce047..5a09f7c4020 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
@@ -52,7 +52,7 @@ copy_from_range(It first_it, It last_it)
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
thin_heap_() :
- m_p_max(NULL)
+ m_p_max(0)
{
initialize();
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -62,7 +62,7 @@ PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
thin_heap_(const Cmp_Fn& r_cmp_fn) :
PB_DS_BASE_C_DEC(r_cmp_fn),
- m_p_max(NULL)
+ m_p_max(0)
{
initialize();
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -75,7 +75,7 @@ thin_heap_(const PB_DS_CLASS_C_DEC& other) :
{
initialize();
m_p_max = base_type::m_p_root;
- for (node_pointer p_nd = base_type::m_p_root; p_nd != NULL; p_nd = p_nd->m_p_next_sibling)
+ for (node_pointer p_nd = base_type::m_p_root; p_nd != 0; p_nd = p_nd->m_p_next_sibling)
if (Cmp_Fn::operator()(m_p_max->m_value, p_nd->m_value))
m_p_max = p_nd;
@@ -102,5 +102,5 @@ PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
initialize()
-{ std::fill(m_a_aux, m_a_aux + max_rank, static_cast<node_pointer>(NULL)); }
+{ std::fill(m_a_aux, m_a_aux + max_rank, static_cast<node_pointer>(0)); }
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
index f7abe35279c..0aedadb9f84 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
@@ -57,7 +57,7 @@ PB_DS_CLASS_C_DEC::
assert_aux_null() const
{
for (size_type i = 0; i < max_rank; ++i)
- _GLIBCXX_DEBUG_ASSERT(m_a_aux[i] == NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_a_aux[i] == 0);
}
PB_DS_CLASS_T_DEC
@@ -65,15 +65,15 @@ void
PB_DS_CLASS_C_DEC::
assert_max() const
{
- if (m_p_max == NULL)
+ if (m_p_max == 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::empty());
return;
}
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == NULL);
- _GLIBCXX_DEBUG_ASSERT(m_p_max->m_p_prev_or_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::parent(m_p_max) == 0);
+ _GLIBCXX_DEBUG_ASSERT(m_p_max->m_p_prev_or_parent == 0);
for (const_iterator it = base_type::begin(); it != base_type::end(); ++it)
_GLIBCXX_DEBUG_ASSERT(!Cmp_Fn::operator()(m_p_max->m_value, it.m_p_nd->m_value));
}
@@ -84,7 +84,7 @@ PB_DS_CLASS_C_DEC::
assert_node_consistent(const_node_pointer p_nd, bool root) const
{
base_type::assert_node_consistent(p_nd, root);
- if (p_nd == NULL)
+ if (p_nd == 0)
return;
assert_node_consistent(p_nd->m_p_next_sibling, root);
@@ -92,17 +92,17 @@ assert_node_consistent(const_node_pointer p_nd, bool root) const
if (!root)
{
if (p_nd->m_metadata == 0)
- _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_next_sibling == 0);
else
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata + 1);
}
- if (p_nd->m_p_l_child != NULL)
+ if (p_nd->m_p_l_child != 0)
_GLIBCXX_DEBUG_ASSERT(p_nd->m_p_l_child->m_metadata + 1 == base_type::degree(p_nd));
- const bool unmarked_valid =(p_nd->m_p_l_child == NULL&& p_nd->m_metadata == 0) ||(p_nd->m_p_l_child != NULL&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 1);
+ const bool unmarked_valid =(p_nd->m_p_l_child == 0&& p_nd->m_metadata == 0) ||(p_nd->m_p_l_child != 0&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 1);
- const bool marked_valid =(p_nd->m_p_l_child == NULL&& p_nd->m_metadata == 1) ||(p_nd->m_p_l_child != NULL&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 2);
+ const bool marked_valid =(p_nd->m_p_l_child == 0&& p_nd->m_metadata == 1) ||(p_nd->m_p_l_child != 0&& p_nd->m_metadata == p_nd->m_p_l_child->m_metadata + 2);
_GLIBCXX_DEBUG_ASSERT(unmarked_valid || marked_valid);
if (root)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
index 69afcd39f15..6f1b20b441a 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
@@ -46,7 +46,7 @@ pop()
_GLIBCXX_DEBUG_ONLY(assert_valid();)
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- _GLIBCXX_DEBUG_ASSERT(m_p_max != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
node_pointer p_nd = m_p_max;
@@ -85,11 +85,11 @@ to_aux_except_max()
p_add = m_p_max->m_p_l_child;
- while (p_add != NULL)
+ while (p_add != 0)
{
node_pointer p_next_add = p_add->m_p_next_sibling;
- p_add->m_metadata = p_add->m_p_l_child == NULL?
+ p_add->m_metadata = p_add->m_p_l_child == 0?
0 :
p_add->m_p_l_child->m_metadata + 1;
@@ -100,7 +100,7 @@ to_aux_except_max()
p_add = m_p_max->m_p_next_sibling;
- while (p_add != NULL)
+ while (p_add != 0)
{
node_pointer p_next_add = p_add->m_p_next_sibling;
@@ -117,7 +117,7 @@ add_to_aux(node_pointer p_nd)
{
size_type r = p_nd->m_metadata;
- while (m_a_aux[r] != NULL)
+ while (m_a_aux[r] != 0)
{
_GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata < rank_bound());
@@ -130,7 +130,7 @@ add_to_aux(node_pointer p_nd)
p_nd = m_a_aux[r];
}
- m_a_aux[r] = NULL;
+ m_a_aux[r] = 0;
++r;
}
@@ -159,7 +159,7 @@ inline void
PB_DS_CLASS_C_DEC::
make_from_aux()
{
- base_type::m_p_root = m_p_max = NULL;
+ base_type::m_p_root = m_p_max = 0;
const size_type rnk_bnd = rank_bound();
@@ -167,11 +167,11 @@ make_from_aux()
while (i < rnk_bnd)
{
- if (m_a_aux[i] != NULL)
+ if (m_a_aux[i] != 0)
{
make_root_and_link(m_a_aux[i]);
- m_a_aux[i] = NULL;
+ m_a_aux[i] = 0;
}
++i;
@@ -186,7 +186,7 @@ PB_DS_CLASS_C_DEC::
remove_node(node_pointer p_nd)
{
node_pointer p_parent = p_nd;
- while (base_type::parent(p_parent) != NULL)
+ while (base_type::parent(p_parent) != 0)
p_parent = base_type::parent(p_parent);
base_type::bubble_to_top(p_nd);
@@ -194,10 +194,10 @@ remove_node(node_pointer p_nd)
m_p_max = p_nd;
node_pointer p_fix = base_type::m_p_root;
- while (p_fix != NULL&& p_fix->m_p_next_sibling != p_parent)
+ while (p_fix != 0&& p_fix->m_p_next_sibling != p_parent)
p_fix = p_fix->m_p_next_sibling;
- if (p_fix != NULL)
+ if (p_fix != 0)
p_fix->m_p_next_sibling = p_nd;
remove_max_node();
@@ -210,7 +210,7 @@ clear()
{
base_type::clear();
- m_p_max = NULL;
+ m_p_max = 0;
}
PB_DS_CLASS_T_DEC
@@ -251,7 +251,7 @@ erase_if(Pred pred)
size_type ersd = 0;
- while (p_out != NULL)
+ while (p_out != 0)
{
++ersd;
@@ -264,9 +264,9 @@ erase_if(Pred pred)
node_pointer p_cur = base_type::m_p_root;
- m_p_max = base_type::m_p_root = NULL;
+ m_p_max = base_type::m_p_root = 0;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
index 52407e6d0ae..700486a60d7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
@@ -46,6 +46,6 @@ top() const
_GLIBCXX_DEBUG_ONLY(assert_valid();)
_GLIBCXX_DEBUG_ASSERT(!base_type::empty());
- _GLIBCXX_DEBUG_ASSERT(m_p_max != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
return m_p_max->m_value;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
index 7a6952fdad4..4e8a1c2d8cc 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
@@ -49,11 +49,11 @@ push(const_reference r_val)
p_nd->m_metadata = 0;
- p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = NULL;
+ p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0;
- if (base_type::m_p_root == NULL)
+ if (base_type::m_p_root == 0)
{
- p_nd->m_p_next_sibling = NULL;
+ p_nd->m_p_next_sibling = 0;
m_p_max = base_type::m_p_root = p_nd;
@@ -64,7 +64,7 @@ push(const_reference r_val)
p_nd->m_p_next_sibling = base_type::m_p_root;
- base_type::m_p_root->m_p_prev_or_parent = NULL;
+ base_type::m_p_root->m_p_prev_or_parent = 0;
base_type::m_p_root = p_nd;
@@ -81,7 +81,7 @@ PB_DS_CLASS_C_DEC::
make_root(node_pointer p_nd)
{
p_nd->m_metadata =
- p_nd->m_p_l_child == NULL?
+ p_nd->m_p_l_child == 0?
0 :
1 + p_nd->m_p_l_child->m_metadata;
}
@@ -93,12 +93,12 @@ make_root_and_link(node_pointer p_nd)
{
make_root(p_nd);
- p_nd->m_p_prev_or_parent = NULL;
+ p_nd->m_p_prev_or_parent = 0;
p_nd->m_p_next_sibling = base_type::m_p_root;
- if (base_type::m_p_root != NULL)
- base_type::m_p_root->m_p_prev_or_parent = NULL;
+ if (base_type::m_p_root != 0)
+ base_type::m_p_root->m_p_prev_or_parent = 0;
base_type::m_p_root = p_nd;
@@ -112,15 +112,15 @@ fix(node_pointer p_y)
{
while (true)
{
- if (p_y->m_p_prev_or_parent == NULL)
+ if (p_y->m_p_prev_or_parent == 0)
{
fix_root(p_y);
return;
}
- else if (p_y->m_metadata == 1&& p_y->m_p_next_sibling == NULL)
+ else if (p_y->m_metadata == 1&& p_y->m_p_next_sibling == 0)
{
- if (p_y->m_p_l_child != NULL)
+ if (p_y->m_p_l_child != 0)
{
fix_sibling_rank_1_unmarked(p_y);
@@ -133,7 +133,7 @@ fix(node_pointer p_y)
}
else if (p_y->m_metadata > p_y->m_p_next_sibling->m_metadata + 1)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child != 0);
if (p_y->m_metadata != p_y->m_p_l_child->m_metadata + 2)
{
@@ -146,8 +146,8 @@ fix(node_pointer p_y)
p_y = p_y->m_p_prev_or_parent;
}
- else if ((p_y->m_p_l_child == NULL&&
- p_y->m_metadata == 2) ||(p_y->m_p_l_child != NULL&&
+ else if ((p_y->m_p_l_child == 0&&
+ p_y->m_metadata == 2) ||(p_y->m_p_l_child != 0&&
p_y->m_metadata == p_y->m_p_l_child->m_metadata + 3))
{
node_pointer p_z = p_y->m_p_prev_or_parent;
@@ -166,7 +166,7 @@ inline void
PB_DS_CLASS_C_DEC::
fix_root(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent == 0);
make_root(p_y);
@@ -178,18 +178,18 @@ inline void
PB_DS_CLASS_C_DEC::
fix_sibling_rank_1_unmarked(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
_GLIBCXX_DEBUG_ONLY(node_pointer p_w = p_y->m_p_l_child;)
- _GLIBCXX_DEBUG_ASSERT(p_w != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling == NULL);
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_next_sibling == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_w != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling == 0);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_next_sibling == 0);
p_y->m_p_next_sibling = p_y->m_p_l_child;
p_y->m_p_next_sibling->m_p_prev_or_parent = p_y;
- p_y->m_p_l_child = NULL;
+ p_y->m_p_l_child = 0;
_GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y, false);)
}
@@ -199,8 +199,8 @@ inline void
PB_DS_CLASS_C_DEC::
fix_sibling_rank_1_marked(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child == NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child == 0);
p_y->m_metadata = 0;
@@ -212,17 +212,17 @@ inline void
PB_DS_CLASS_C_DEC::
fix_sibling_general_unmarked(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
node_pointer p_w = p_y->m_p_l_child;
- _GLIBCXX_DEBUG_ASSERT(p_w != NULL);
- _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_w != 0);
+ _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling != 0);
p_y->m_p_l_child = p_w->m_p_next_sibling;
p_w->m_p_next_sibling->m_p_prev_or_parent = p_y;
p_w->m_p_next_sibling = p_y->m_p_next_sibling;
- _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_w->m_p_next_sibling != 0);
p_w->m_p_next_sibling->m_p_prev_or_parent = p_w;
p_y->m_p_next_sibling = p_w;
@@ -236,7 +236,7 @@ inline void
PB_DS_CLASS_C_DEC::
fix_sibling_general_marked(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
--p_y->m_metadata;
@@ -248,9 +248,9 @@ inline void
PB_DS_CLASS_C_DEC::
fix_child(node_pointer p_y)
{
- _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0);
- if (p_y->m_p_next_sibling != NULL)
+ if (p_y->m_p_next_sibling != 0)
p_y->m_p_next_sibling->m_p_prev_or_parent = p_y->m_p_prev_or_parent;
if (p_y->m_p_prev_or_parent->m_p_l_child == p_y)
@@ -269,7 +269,7 @@ modify(point_iterator it, const_reference r_new_val)
_GLIBCXX_DEBUG_ONLY(assert_valid();)
node_pointer p_nd = it.m_p_nd;
- _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
const bool smaller = Cmp_Fn::operator()(r_new_val, p_nd->m_value);
@@ -279,7 +279,7 @@ modify(point_iterator it, const_reference r_new_val)
{
remove_node(p_nd);
- p_nd->m_p_l_child = NULL;
+ p_nd->m_p_l_child = 0;
make_root_and_link(p_nd);
@@ -288,7 +288,7 @@ modify(point_iterator it, const_reference r_new_val)
return;
}
- if (p_nd->m_p_prev_or_parent == NULL)
+ if (p_nd->m_p_prev_or_parent == 0)
{
update_max(p_nd);
@@ -298,9 +298,9 @@ modify(point_iterator it, const_reference r_new_val)
}
node_pointer p_y = p_nd->m_p_prev_or_parent;
- _GLIBCXX_DEBUG_ASSERT(p_y != NULL);
+ _GLIBCXX_DEBUG_ASSERT(p_y != 0);
- if (p_nd->m_p_next_sibling != NULL)
+ if (p_nd->m_p_next_sibling != 0)
p_nd->m_p_next_sibling->m_p_prev_or_parent = p_y;
if (p_y->m_p_l_child == p_nd)
@@ -320,7 +320,7 @@ inline void
PB_DS_CLASS_C_DEC::
update_max(node_pointer p_nd)
{
- if (m_p_max == NULL || Cmp_Fn::operator()(m_p_max->m_value, p_nd->m_value))
+ if (m_p_max == 0 || Cmp_Fn::operator()(m_p_max->m_value, p_nd->m_value))
m_p_max = p_nd;
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
index 6acb7bd7571..85ebe4cb400 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
@@ -61,7 +61,7 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_out = base_type::prune(pred);
- while (p_out != NULL)
+ while (p_out != 0)
{
_GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0);
--base_type::m_size;
@@ -79,11 +79,11 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other)
node_pointer p_cur = base_type::m_p_root;
- m_p_max = NULL;
+ m_p_max = 0;
- base_type::m_p_root = NULL;
+ base_type::m_p_root = 0;
- while (p_cur != NULL)
+ while (p_cur != 0)
{
node_pointer p_next = p_cur->m_p_next_sibling;
@@ -106,7 +106,7 @@ join(PB_DS_CLASS_C_DEC& other)
node_pointer p_other = other.m_p_root;
- while (p_other != NULL)
+ while (p_other != 0)
{
node_pointer p_next = p_other->m_p_next_sibling;
@@ -117,9 +117,9 @@ join(PB_DS_CLASS_C_DEC& other)
base_type::m_size += other.m_size;
- other.m_p_root = NULL;
+ other.m_p_root = 0;
other.m_size = 0;
- other.m_p_max = NULL;
+ other.m_p_max = 0;
_GLIBCXX_DEBUG_ONLY(assert_valid();)
_GLIBCXX_DEBUG_ONLY(other.assert_valid();)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
index 6ea68995e53..b8c19a587f8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -56,7 +56,7 @@ class sample_tree_node_update
public:
// Metadata type.
- typedef size_t metadata_type;
+ typedef std::size_t metadata_type;
protected:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
index 4e27ac21e62..cb8e2474121 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -50,8 +50,6 @@ find_by_order(size_type order)
node_iterator nd_it = node_begin();
- node_iterator end_nd_it = node_end();
-
while (true)
{
if (order > nd_it.get_metadata())
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
index 34fbe0cc3e2..2ecad89c9a7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,7 +48,7 @@ class sample_trie_e_access_traits
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
// Key type.
typedef std::string key_type;
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
index 55fd99787fb..8b2c6b591f7 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -56,7 +56,7 @@ class sample_trie_node_update
public:
// Metadata type.
- typedef size_t metadata_type;
+ typedef std::size_t metadata_type;
protected:
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
index 38d4eb1cfbc..71e26261794 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
@@ -74,7 +74,7 @@ public:
inline
const_iterator_()
- : m_p_tbl(NULL)
+ : m_p_tbl(0)
{ }
// Increments.
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
index bc0b2ad624a..5574b28e1e1 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
@@ -78,7 +78,7 @@ public:
inline
const_point_iterator_()
- : m_p_value(NULL)
+ : m_p_value(0)
{ }
// Copy constructor.
@@ -99,7 +99,7 @@ public:
inline const_pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
return (m_p_value);
}
@@ -108,7 +108,7 @@ public:
inline const_reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
return (*m_p_value);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
index 3e21aba8bad..2836c17bea5 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
@@ -74,7 +74,7 @@ public:
inline
iterator_()
- : const_iterator_(NULL, PB_DS_GEN_POS(), NULL)
+ : const_iterator_(0, PB_DS_GEN_POS(), 0)
{ }
// Conversion to a point-type iterator.
@@ -97,7 +97,7 @@ public:
inline pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != 0);
return (const_cast<pointer>(base_type::m_p_value));
}
@@ -106,7 +106,7 @@ public:
inline reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(base_type::m_p_value != 0);
return (const_cast<reference>(*base_type::m_p_value));
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
index 37ce90069cf..c009106e0dd 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
@@ -72,7 +72,7 @@ public:
inline
point_iterator_()
- : m_p_value(NULL)
+ : m_p_value(0)
{ }
// Copy constructor.
@@ -86,7 +86,7 @@ public:
inline pointer
operator->() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
return (m_p_value);
}
@@ -95,7 +95,7 @@ public:
inline reference
operator*() const
{
- _GLIBCXX_DEBUG_ASSERT(m_p_value != NULL);
+ _GLIBCXX_DEBUG_ASSERT(m_p_value != 0);
return (*m_p_value);
}
diff --git a/libstdc++-v3/include/ext/pb_ds/exception.hpp b/libstdc++-v3/include/ext/pb_ds/exception.hpp
index 4f796b1ef33..b34e3ed26f2 100644
--- a/libstdc++-v3/include/ext/pb_ds/exception.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/exception.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +42,7 @@
#ifndef PB_DS_EXCEPTION_HPP
#define PB_DS_EXCEPTION_HPP
+#include <bits/c++config.h>
#include <stdexcept>
#include <cstdlib>
diff --git a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
index 24c0c4562cc..f3bc86e9731 100644
--- a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,7 @@
#ifndef PB_DS_HASH_POLICY_HPP
#define PB_DS_HASH_POLICY_HPP
+#include <bits/c++config.h>
#include <algorithm>
#include <vector>
#include <cmath>
@@ -66,7 +67,7 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC linear_probe_fn<Size_Type>
// A probe sequence policy using fixed increments.
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class linear_probe_fn
{
public:
@@ -90,7 +91,7 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC quadratic_probe_fn<Size_Type>
// A probe sequence policy using square increments.
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class quadratic_probe_fn
{
public:
@@ -114,7 +115,7 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC direct_mask_range_hashing<Size_Type>
// A mask range-hashing class (uses a bit-mask).
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class direct_mask_range_hashing
: public detail::mask_based_range_hashing<Size_Type>
{
@@ -146,7 +147,7 @@ namespace __gnu_pbds
#define PB_DS_CLASS_C_DEC direct_mod_range_hashing<Size_Type>
// A mod range-hashing class (uses the modulo function).
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class direct_mod_range_hashing
: public detail::mod_based_range_hashing<Size_Type>
{
@@ -180,7 +181,7 @@ namespace __gnu_pbds
// A resize trigger policy based on a load check. It keeps the
// load factor between some load factors load_min and load_max.
- template<bool External_Load_Access = false, typename Size_Type = size_t>
+ template<bool External_Load_Access = false, typename Size_Type = std::size_t>
class hash_load_check_resize_trigger : private PB_DS_SIZE_BASE_C_DEC
{
public:
@@ -295,7 +296,7 @@ namespace __gnu_pbds
// A resize trigger policy based on collision checks. It keeps the
// simulated load factor lower than some given load factor.
- template<bool External_Load_Access = false, typename Size_Type = size_t>
+ template<bool External_Load_Access = false, typename Size_Type = std::size_t>
class cc_hash_max_collision_check_resize_trigger
{
public:
@@ -396,7 +397,7 @@ namespace __gnu_pbds
// A size policy whose sequence of sizes form an exponential
// sequence (typically powers of 2.
- template<typename Size_Type = size_t>
+ template<typename Size_Type = std::size_t>
class hash_exponential_size_policy
{
public:
@@ -438,7 +439,7 @@ namespace __gnu_pbds
{
public:
// Size type.
- typedef size_t size_type;
+ typedef std::size_t size_type;
// Default constructor, or onstructor taking a start_size The
// policy will use the sequence of sizes approximately
@@ -472,7 +473,7 @@ namespace __gnu_pbds
template<typename Size_Policy = hash_exponential_size_policy<>,
typename Trigger_Policy = hash_load_check_resize_trigger<>,
bool External_Size_Access = false,
- typename Size_Type = size_t>
+ typename Size_Type = std::size_t>
class hash_standard_resize_policy
: public Size_Policy, public Trigger_Policy
{
diff --git a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
index ec05b69c7e6..54a67c6e563 100644
--- a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +42,7 @@
#ifndef PB_DS_LU_POLICY_HPP
#define PB_DS_LU_POLICY_HPP
+#include <bits/c++config.h>
#include <cstdlib>
#include <ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp>
@@ -87,12 +89,13 @@ namespace __gnu_pbds
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
-#define PB_DS_CLASS_T_DEC template<size_t Max_Count, class Allocator>
+#define PB_DS_CLASS_T_DEC template<std::size_t Max_Count, class Allocator>
#define PB_DS_CLASS_C_DEC counter_lu_policy<Max_Count, Allocator>
// A list-update policy that moves elements to the front of the list
// based on the counter algorithm.
- template<size_t Max_Count = 5, typename Allocator = std::allocator<char> >
+ template<std::size_t Max_Count = 5,
+ typename Allocator = std::allocator<char> >
class counter_lu_policy
: private detail::counter_lu_policy_base<typename Allocator::size_type>
{
diff --git a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
index 531f70c65ce..b6088e7d73a 100644
--- a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,7 @@
#ifndef PB_DS_PRIORITY_QUEUE_HPP
#define PB_DS_PRIORITY_QUEUE_HPP
+#include <bits/c++config.h>
#include <ext/pb_ds/tag_and_trait.hpp>
#include <ext/pb_ds/detail/priority_queue_base_dispatch.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
@@ -53,10 +54,13 @@ namespace __gnu_pbds
typename Tag = pairing_heap_tag,
typename Allocator = std::allocator<char> >
class priority_queue
- : public detail::priority_queue_base_dispatch<Value_Type,Cmp_Fn,Tag,Allocator>::type
+ : public detail::priority_queue_base_dispatch<Value_Type,
+ Cmp_Fn,Tag,Allocator>::type
{
private:
- typedef typename detail::priority_queue_base_dispatch<Value_Type,Cmp_Fn,Tag,Allocator>::type base_type;
+ typedef typename
+ detail::priority_queue_base_dispatch<Value_Type, Cmp_Fn,
+ Tag, Allocator>::type base_type;
public:
typedef Value_Type value_type;
diff --git a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
index ccd2533cc4f..ef445336137 100644
--- a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -42,6 +42,7 @@
#ifndef PB_DS_TAG_AND_TRAIT_HPP
#define PB_DS_TAG_AND_TRAIT_HPP
+#include <bits/c++config.h>
#include <ext/pb_ds/detail/type_utils.hpp>
/**
diff --git a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
index 990860ec020..4af1adbde70 100644
--- a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,7 @@
#ifndef PB_DS_TREE_POLICY_HPP
#define PB_DS_TREE_POLICY_HPP
+#include <bits/c++config.h>
#include <iterator>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp>
diff --git a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
index c10591bb7f3..fc452104f75 100644
--- a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,7 @@
#ifndef PB_DS_TRIE_POLICY_HPP
#define PB_DS_TRIE_POLICY_HPP
+#include <bits/c++config.h>
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/trie_policy/trie_policy_base.hpp>
diff --git a/libstdc++-v3/include/ext/pointer.h b/libstdc++-v3/include/ext/pointer.h
index ddb5f3c84a8..8055df226f2 100644
--- a/libstdc++-v3/include/ext/pointer.h
+++ b/libstdc++-v3/include/ext/pointer.h
@@ -1,6 +1,6 @@
// Custom pointer adapter and sample storage policies
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -447,7 +447,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
}
inline _Pointer_adapter
- operator++(int __unused)
+ operator++(int)
{
_Pointer_adapter tmp(*this);
_Storage_policy::set(_Storage_policy::get() + 1);
diff --git a/libstdc++-v3/include/ext/pool_allocator.h b/libstdc++-v3/include/ext/pool_allocator.h
index b1e61841c0a..66cda84b42d 100644
--- a/libstdc++-v3/include/ext/pool_allocator.h
+++ b/libstdc++-v3/include/ext/pool_allocator.h
@@ -1,6 +1,6 @@
// Allocators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -147,10 +147,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
~__pool_alloc() throw() { }
pointer
- address(reference __x) const { return &__x; }
+ address(reference __x) const { return std::__addressof(__x); }
const_pointer
- address(const_reference __x) const { return &__x; }
+ address(const_reference __x) const { return std::__addressof(__x); }
size_type
max_size() const throw()
diff --git a/libstdc++-v3/include/ext/rc_string_base.h b/libstdc++-v3/include/ext/rc_string_base.h
index a18b274fa88..9831037bb15 100644
--- a/libstdc++-v3/include/ext/rc_string_base.h
+++ b/libstdc++-v3/include/ext/rc_string_base.h
@@ -199,9 +199,16 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
void
_M_dispose()
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_rep()->_M_info.
+ _M_refcount);
if (__exchange_and_add_dispatch(&_M_rep()->_M_info._M_refcount,
-1) <= 0)
- _M_rep()->_M_destroy(_M_get_allocator());
+ {
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_rep()->_M_info.
+ _M_refcount);
+ _M_rep()->_M_destroy(_M_get_allocator());
+ }
} // XXX MT
bool
@@ -554,7 +561,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// NB: Not required, but considered best practice.
if (__is_null_pointer(__beg) && __beg != __end)
std::__throw_logic_error(__N("__rc_string_base::"
- "_S_construct NULL not valid"));
+ "_S_construct null not valid"));
const size_type __dnew = static_cast<size_type>(std::distance(__beg,
__end));
diff --git a/libstdc++-v3/include/ext/sso_string_base.h b/libstdc++-v3/include/ext/sso_string_base.h
index b0500cf17e0..43d44528999 100644
--- a/libstdc++-v3/include/ext/sso_string_base.h
+++ b/libstdc++-v3/include/ext/sso_string_base.h
@@ -434,7 +434,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// NB: Not required, but considered best practice.
if (__is_null_pointer(__beg) && __beg != __end)
std::__throw_logic_error(__N("__sso_string_base::"
- "_M_construct NULL not valid"));
+ "_M_construct null not valid"));
size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
diff --git a/libstdc++-v3/include/ext/string_conversions.h b/libstdc++-v3/include/ext/string_conversions.h
index 36c19e0a97a..a4276f30ba2 100644
--- a/libstdc++-v3/include/ext/string_conversions.h
+++ b/libstdc++-v3/include/ext/string_conversions.h
@@ -1,6 +1,6 @@
// String Conversions -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,9 +27,9 @@
#pragma GCC system_header
+#include <bits/c++config.h>
#include <ext/numeric_traits.h>
#include <bits/functexcept.h>
-#include <cstddef>
#include <cstdlib>
#include <cwchar>
#include <cstdio>
diff --git a/libstdc++-v3/include/ext/throw_allocator.h b/libstdc++-v3/include/ext/throw_allocator.h
index 48089bd7dd0..669d433e272 100644
--- a/libstdc++-v3/include/ext/throw_allocator.h
+++ b/libstdc++-v3/include/ext/throw_allocator.h
@@ -110,7 +110,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
void
insert(void* p, size_t size)
{
- if (p == NULL)
+ if (!p)
{
std::string error("annotate_base::insert null insert!\n");
log_to_string(error, make_entry(p, size));
@@ -620,6 +620,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
{ return _M_allocator.max_size(); }
pointer
+ address(reference __x) const { return std::__addressof(__x); }
+
+ const_pointer
+ address(const_reference __x) const { return std::__addressof(__x); }
+
+ pointer
allocate(size_type __n, std::allocator<void>::const_pointer hint = 0)
{
if (__n > this->max_size())
diff --git a/libstdc++-v3/include/ext/vstring.h b/libstdc++-v3/include/ext/vstring.h
index fc469cbdc04..fab546dfdf5 100644
--- a/libstdc++-v3/include/ext/vstring.h
+++ b/libstdc++-v3/include/ext/vstring.h
@@ -62,8 +62,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
typedef _Alloc allocator_type;
typedef typename _CharT_alloc_type::size_type size_type;
typedef typename _CharT_alloc_type::difference_type difference_type;
- typedef typename _CharT_alloc_type::reference reference;
- typedef typename _CharT_alloc_type::const_reference const_reference;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
typedef typename _CharT_alloc_type::pointer pointer;
typedef typename _CharT_alloc_type::const_pointer const_pointer;
typedef __gnu_cxx::__normal_iterator<pointer, __versa_string> iterator;
@@ -155,7 +155,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
* string.
*/
__versa_string(__versa_string&& __str)
- : __vstring_base(std::forward<__vstring_base>(__str)) { }
+ : __vstring_base(std::move(__str)) { }
/**
* @brief Construct string from an initializer list.
@@ -598,7 +598,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
*/
reference
front()
- { return *begin(); }
+ { return operator[](0); }
/**
* Returns a read-only (constant) reference to the data at the first
@@ -606,7 +606,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
*/
const_reference
front() const
- { return *begin(); }
+ { return operator[](0); }
/**
* Returns a read/write reference to the data at the last
@@ -614,7 +614,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
*/
reference
back()
- { return *(end() - 1); }
+ { return operator[](this->size() - 1); }
/**
* Returns a read-only (constant) reference to the data at the
@@ -622,7 +622,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
*/
const_reference
back() const
- { return *(end() - 1); }
+ { return operator[](this->size() - 1); }
#endif
// Modifiers:
diff --git a/libstdc++-v3/include/ext/vstring_util.h b/libstdc++-v3/include/ext/vstring_util.h
index 4042f70692e..6779f4dc9f0 100644
--- a/libstdc++-v3/include/ext/vstring_util.h
+++ b/libstdc++-v3/include/ext/vstring_util.h
@@ -1,6 +1,7 @@
// Versatile string utility -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,6 +43,7 @@
#include <bits/stl_iterator.h>
#include <ext/numeric_traits.h>
#include <bits/move.h>
+#include <bits/range_access.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/parallel/base.h b/libstdc++-v3/include/parallel/base.h
index 1a8c3cb60a8..3e3041d27df 100644
--- a/libstdc++-v3/include/parallel/base.h
+++ b/libstdc++-v3/include/parallel/base.h
@@ -140,13 +140,13 @@ namespace __gnu_parallel
/** @brief Equivalent to std::min. */
template<typename _Tp>
- const _Tp&
+ inline const _Tp&
min(const _Tp& __a, const _Tp& __b)
{ return (__a < __b) ? __a : __b; }
/** @brief Equivalent to std::max. */
template<typename _Tp>
- const _Tp&
+ inline const _Tp&
max(const _Tp& __a, const _Tp& __b)
{ return (__a > __b) ? __a : __b; }
@@ -267,8 +267,8 @@ namespace __gnu_parallel
/** @brief Similar to std::plus, but allows two different types. */
template<typename _Tp1, typename _Tp2, typename _Result
- = __typeof__(*static_cast<_Tp1*>(NULL)
- + *static_cast<_Tp2*>(NULL))>
+ = __typeof__(*static_cast<_Tp1*>(0)
+ + *static_cast<_Tp2*>(0))>
struct _Plus : public std::binary_function<_Tp1, _Tp2, _Result>
{
_Result
@@ -283,8 +283,8 @@ namespace __gnu_parallel
/** @brief Similar to std::multiplies, but allows two different types. */
template<typename _Tp1, typename _Tp2, typename _Result
- = __typeof__(*static_cast<_Tp1*>(NULL)
- * *static_cast<_Tp2*>(NULL))>
+ = __typeof__(*static_cast<_Tp1*>(0)
+ * *static_cast<_Tp2*>(0))>
struct _Multiplies : public std::binary_function<_Tp1, _Tp2, _Result>
{
_Result
@@ -300,7 +300,7 @@ namespace __gnu_parallel
/** @brief _Iterator associated with __gnu_parallel::_PseudoSequence.
* If features the usual random-access iterator functionality.
* @param _Tp Sequence _M_value type.
- * @param _DifferenceType Sequence difference type.
+ * @param _DifferenceTp Sequence difference type.
*/
template<typename _Tp, typename _DifferenceTp>
class _PseudoSequenceIterator
@@ -353,7 +353,7 @@ namespace __gnu_parallel
the same element.
* The copies are not stored explicitly, of course.
* @param _Tp Sequence _M_value type.
- * @param _DifferenceType Sequence difference type.
+ * @param _DifferenceTp Sequence difference type.
*/
template<typename _Tp, typename _DifferenceTp>
class _PseudoSequence
diff --git a/libstdc++-v3/include/parallel/basic_iterator.h b/libstdc++-v3/include/parallel/basic_iterator.h
index c5c067a0b0d..a624edc1a3b 100644
--- a/libstdc++-v3/include/parallel/basic_iterator.h
+++ b/libstdc++-v3/include/parallel/basic_iterator.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -34,7 +34,6 @@
#define _GLIBCXX_PARALLEL_BASIC_ITERATOR_H 1
#include <bits/c++config.h>
-#include <cstddef>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
#include <bits/stl_iterator.h>
diff --git a/libstdc++-v3/include/parallel/find.h b/libstdc++-v3/include/parallel/find.h
index b4e581488ae..eb37d8aace1 100644
--- a/libstdc++-v3/include/parallel/find.h
+++ b/libstdc++-v3/include/parallel/find.h
@@ -168,9 +168,7 @@ namespace __gnu_parallel
* @param __selector _Functionality (e. g. std::find_if(), std::equal(),...)
* @return Place of finding in both sequences.
* @see __gnu_parallel::_Settings::find_sequential_search_size
- * @see __gnu_parallel::_Settings::find_initial_block_size
- * @see __gnu_parallel::_Settings::find_maximum_block_size
- * @see __gnu_parallel::_Settings::find_increasing_factor
+ * @see __gnu_parallel::_Settings::find_scale_factor
*
* There are two main differences between the growing blocks and
* the constant-size blocks variants.
@@ -218,6 +216,8 @@ namespace __gnu_parallel
omp_lock_t __result_lock;
omp_init_lock(&__result_lock);
+ const float __scale_factor = __s.find_scale_factor;
+
_ThreadIndex __num_threads = __get_max_threads();
# pragma omp parallel shared(__result) num_threads(__num_threads)
{
@@ -227,7 +227,8 @@ namespace __gnu_parallel
// Not within first __k elements -> start parallel.
_ThreadIndex __iam = omp_get_thread_num();
- _DifferenceType __block_size = __s.find_initial_block_size;
+ _DifferenceType __block_size =
+ std::max<_DifferenceType>(1, __scale_factor * __next_block_start);
_DifferenceType __start = __fetch_and_add<_DifferenceType>
(&__next_block_start, __block_size);
@@ -265,15 +266,14 @@ namespace __gnu_parallel
omp_unset_lock(&__result_lock);
}
- __block_size = std::min<_DifferenceType>
- (__block_size * __s.find_increasing_factor,
- __s.find_maximum_block_size);
+ _DifferenceType __block_size =
+ std::max<_DifferenceType>(1, __scale_factor * __next_block_start);
// Get new block, update pointer to next block.
__start = __fetch_and_add<_DifferenceType>(&__next_block_start,
__block_size);
- __stop = (__length < (__start + __block_size)
- ? __length : (__start + __block_size));
+ __stop =
+ std::min<_DifferenceType>(__length, __start + __block_size);
}
} //parallel
diff --git a/libstdc++-v3/include/parallel/multiseq_selection.h b/libstdc++-v3/include/parallel/multiseq_selection.h
index 1fab257ccdd..e77653aeefa 100644
--- a/libstdc++-v3/include/parallel/multiseq_selection.h
+++ b/libstdc++-v3/include/parallel/multiseq_selection.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -230,7 +230,7 @@ namespace __gnu_parallel
__n /= 2;
_SeqNumber __lmax_seq = -1; // to avoid warning
- const _ValueType* __lmax = NULL; // impossible to avoid the warning?
+ const _ValueType* __lmax = 0; // impossible to avoid the warning?
for (_SeqNumber __i = 0; __i < __m; __i++)
{
if (__a[__i] > 0)
@@ -332,8 +332,8 @@ namespace __gnu_parallel
// Compare the keys on both edges of the border.
// Maximum of left edge, minimum of right edge.
- _ValueType* __maxleft = NULL;
- _ValueType* __minright = NULL;
+ _ValueType* __maxleft = 0;
+ _ValueType* __minright = 0;
for (_SeqNumber __i = 0; __i < __m; __i++)
{
if (__a[__i] > 0)
@@ -482,7 +482,7 @@ namespace __gnu_parallel
{
__n /= 2;
- const _Tp* __lmax = NULL;
+ const _Tp* __lmax = 0;
for (_SeqNumber __i = 0; __i < __m; ++__i)
{
if (__a[__i] > 0)
diff --git a/libstdc++-v3/include/parallel/multiway_merge.h b/libstdc++-v3/include/parallel/multiway_merge.h
index 445184ae5ec..1baf76beb9c 100644
--- a/libstdc++-v3/include/parallel/multiway_merge.h
+++ b/libstdc++-v3/include/parallel/multiway_merge.h
@@ -502,11 +502,11 @@ namespace __gnu_parallel
_LT __lt(__k, __comp);
// Default value for potentially non-default-constructible types.
- _ValueType* __arbitrary_element = NULL;
+ _ValueType* __arbitrary_element = 0;
for (_SeqNumber __t = 0; __t < __k; ++__t)
{
- if(__arbitrary_element == NULL
+ if(!__arbitrary_element
&& _GLIBCXX_PARALLEL_LENGTH(__seqs_begin[__t]) > 0)
__arbitrary_element = &(*__seqs_begin[__t].first);
}
diff --git a/libstdc++-v3/include/parallel/multiway_mergesort.h b/libstdc++-v3/include/parallel/multiway_mergesort.h
index 85894719dc0..8e2c53ec661 100644
--- a/libstdc++-v3/include/parallel/multiway_mergesort.h
+++ b/libstdc++-v3/include/parallel/multiway_mergesort.h
@@ -434,7 +434,7 @@ namespace __gnu_parallel
(::operator new(__size * sizeof(_ValueType)));
}
else
- __sd._M_samples = NULL;
+ __sd._M_samples = 0;
__sd._M_offsets = new _DifferenceType[__num_threads - 1];
__sd._M_pieces
diff --git a/libstdc++-v3/include/parallel/partial_sum.h b/libstdc++-v3/include/parallel/partial_sum.h
index 966d9db0572..d398c4585a2 100644
--- a/libstdc++-v3/include/parallel/partial_sum.h
+++ b/libstdc++-v3/include/parallel/partial_sum.h
@@ -127,10 +127,13 @@ namespace __gnu_parallel
equally_split(__n, __num_threads + 1, __borders);
else
{
+ _DifferenceType __first_part_length =
+ std::max<_DifferenceType>(1,
+ __n / (1.0f + __s.partial_sum_dilation * __num_threads));
_DifferenceType __chunk_length =
- ((double)__n
- / ((double)__num_threads + __s.partial_sum_dilation)),
- __borderstart = __n - __num_threads * __chunk_length;
+ (__n - __first_part_length) / __num_threads;
+ _DifferenceType __borderstart =
+ __n - __num_threads * __chunk_length;
__borders[0] = 0;
for (_ThreadIndex __i = 1; __i < (__num_threads + 1); ++__i)
{
diff --git a/libstdc++-v3/include/parallel/partition.h b/libstdc++-v3/include/parallel/partition.h
index 6a9c4aceaa6..27b3871f41b 100644
--- a/libstdc++-v3/include/parallel/partition.h
+++ b/libstdc++-v3/include/parallel/partition.h
@@ -66,27 +66,26 @@ namespace __gnu_parallel
const _Settings& __s = _Settings::get();
- // Shared.
- _GLIBCXX_VOLATILE _DifferenceType __left = 0, __right = __n - 1;
- _GLIBCXX_VOLATILE _DifferenceType __leftover_left, __leftover_right;
- _GLIBCXX_VOLATILE _DifferenceType __leftnew, __rightnew;
+ // shared
+ _GLIBCXX_VOLATILE _DifferenceType __left = 0, __right = __n - 1,
+ __dist = __n,
+ __leftover_left, __leftover_right,
+ __leftnew, __rightnew;
- bool* __reserved_left = NULL, * __reserved_right = NULL;
+ // just 0 or 1, but int to allow atomic operations
+ int* __reserved_left = 0, * __reserved_right = 0;
_DifferenceType __chunk_size = __s.partition_chunk_size;
- omp_lock_t __result_lock;
- omp_init_lock(&__result_lock);
-
//at least two chunks per thread
- if (__right - __left + 1 >= 2 * __num_threads * __chunk_size)
+ if (__dist >= 2 * __num_threads * __chunk_size)
# pragma omp parallel num_threads(__num_threads)
{
# pragma omp single
{
__num_threads = omp_get_num_threads();
- __reserved_left = new bool[__num_threads];
- __reserved_right = new bool[__num_threads];
+ __reserved_left = new int[__num_threads];
+ __reserved_right = new int[__num_threads];
if (__s.partition_chunk_share > 0.0)
__chunk_size = std::max<_DifferenceType>
@@ -96,17 +95,16 @@ namespace __gnu_parallel
__chunk_size = __s.partition_chunk_size;
}
- while (__right - __left + 1 >= 2 * __num_threads * __chunk_size)
+ while (__dist >= 2 * __num_threads * __chunk_size)
{
# pragma omp single
{
- _DifferenceType __num_chunks = ((__right - __left + 1)
- / __chunk_size);
+ _DifferenceType __num_chunks = __dist / __chunk_size;
for (_ThreadIndex __r = 0; __r < __num_threads; ++__r)
{
- __reserved_left[__r] = false;
- __reserved_right[__r] = false;
+ __reserved_left [__r] = 0; // false
+ __reserved_right[__r] = 0; // false
}
__leftover_left = 0;
__leftover_right = 0;
@@ -115,11 +113,13 @@ namespace __gnu_parallel
// Private.
_DifferenceType __thread_left, __thread_left_border,
__thread_right, __thread_right_border;
- __thread_left = __left + 1;
+ __thread_left = __left + 1;
// Just to satisfy the condition below.
__thread_left_border = __thread_left - 1;
+
__thread_right = __n - 1;
+ // Just to satisfy the condition below.
__thread_right_border = __thread_right + 1;
bool __iam_finished = false;
@@ -127,35 +127,42 @@ namespace __gnu_parallel
{
if (__thread_left > __thread_left_border)
{
- omp_set_lock(&__result_lock);
- if (__left + (__chunk_size - 1) > __right)
- __iam_finished = true;
- else
- {
- __thread_left = __left;
- __thread_left_border = __left + (__chunk_size - 1);
- __left += __chunk_size;
- }
- omp_unset_lock(&__result_lock);
+ _DifferenceType __former_dist =
+ __fetch_and_add(&__dist, -__chunk_size);
+ if (__former_dist < __chunk_size)
+ {
+ __fetch_and_add(&__dist, __chunk_size);
+ __iam_finished = true;
+ break;
+ }
+ else
+ {
+ __thread_left =
+ __fetch_and_add(&__left, __chunk_size);
+ __thread_left_border =
+ __thread_left + (__chunk_size - 1);
+ }
}
if (__thread_right < __thread_right_border)
{
- omp_set_lock(&__result_lock);
- if (__left > __right - (__chunk_size - 1))
- __iam_finished = true;
- else
- {
- __thread_right = __right;
- __thread_right_border = __right - (__chunk_size - 1);
- __right -= __chunk_size;
- }
- omp_unset_lock(&__result_lock);
+ _DifferenceType __former_dist =
+ __fetch_and_add(&__dist, -__chunk_size);
+ if (__former_dist < __chunk_size)
+ {
+ __fetch_and_add(&__dist, __chunk_size);
+ __iam_finished = true;
+ break;
+ }
+ else
+ {
+ __thread_right =
+ __fetch_and_add(&__right, -__chunk_size);
+ __thread_right_border =
+ __thread_right - (__chunk_size - 1);
+ }
}
- if (__iam_finished)
- break;
-
// Swap as usual.
while (__thread_left < __thread_right)
{
@@ -188,13 +195,11 @@ namespace __gnu_parallel
# pragma omp barrier
-# pragma omp single
- {
- __leftnew = __left - __leftover_left * __chunk_size;
- __rightnew = __right + __leftover_right * __chunk_size;
- }
-
-# pragma omp barrier
+ _DifferenceType
+ __leftold = __left,
+ __leftnew = __left - __leftover_left * __chunk_size,
+ __rightold = __right,
+ __rightnew = __right + __leftover_right * __chunk_size;
// <=> __thread_left_border + (__chunk_size - 1) >= __leftnew
if (__thread_left <= __thread_left_border
@@ -202,7 +207,7 @@ namespace __gnu_parallel
{
// Chunk already in place, reserve spot.
__reserved_left[(__left - (__thread_left_border + 1))
- / __chunk_size] = true;
+ / __chunk_size] = 1;
}
// <=> __thread_right_border - (__chunk_size - 1) <= __rightnew
@@ -211,7 +216,7 @@ namespace __gnu_parallel
{
// Chunk already in place, reserve spot.
__reserved_right[((__thread_right_border - 1) - __right)
- / __chunk_size] = true;
+ / __chunk_size] = 1;
}
# pragma omp barrier
@@ -221,15 +226,13 @@ namespace __gnu_parallel
{
// Find spot and swap.
_DifferenceType __swapstart = -1;
- omp_set_lock(&__result_lock);
- for (_DifferenceType __r = 0; __r < __leftover_left; ++__r)
- if (!__reserved_left[__r])
- {
- __reserved_left[__r] = true;
- __swapstart = __left - (__r + 1) * __chunk_size;
- break;
- }
- omp_unset_lock(&__result_lock);
+ for (int __r = 0; __r < __leftover_left; ++__r)
+ if (__reserved_left[__r] == 0
+ && __compare_and_swap(&(__reserved_left[__r]), 0, 1))
+ {
+ __swapstart = __leftold - (__r + 1) * __chunk_size;
+ break;
+ }
#if _GLIBCXX_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__swapstart != -1);
@@ -246,15 +249,13 @@ namespace __gnu_parallel
{
// Find spot and swap
_DifferenceType __swapstart = -1;
- omp_set_lock(&__result_lock);
- for (_DifferenceType __r = 0; __r < __leftover_right; ++__r)
- if (!__reserved_right[__r])
- {
- __reserved_right[__r] = true;
- __swapstart = __right + __r * __chunk_size + 1;
- break;
- }
- omp_unset_lock(&__result_lock);
+ for (int __r = 0; __r < __leftover_right; ++__r)
+ if (__reserved_right[__r] == 0
+ && __compare_and_swap(&(__reserved_right[__r]), 0, 1))
+ {
+ __swapstart = __rightold + __r * __chunk_size + 1;
+ break;
+ }
#if _GLIBCXX_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__swapstart != -1);
@@ -270,18 +271,15 @@ namespace __gnu_parallel
# pragma omp single
{
for (_DifferenceType __r = 0; __r < __leftover_left; ++__r)
- _GLIBCXX_PARALLEL_ASSERT(__reserved_left[__r]);
+ _GLIBCXX_PARALLEL_ASSERT(__reserved_left[__r] == 1);
for (_DifferenceType __r = 0; __r < __leftover_right; ++__r)
- _GLIBCXX_PARALLEL_ASSERT(__reserved_right[__r]);
+ _GLIBCXX_PARALLEL_ASSERT(__reserved_right[__r] == 1);
}
-
-# pragma omp barrier
#endif
-# pragma omp barrier
-
__left = __leftnew;
__right = __rightnew;
+ __dist = __right - __left + 1;
}
# pragma omp flush(__left, __right)
@@ -313,8 +311,6 @@ namespace __gnu_parallel
delete[] __reserved_left;
delete[] __reserved_right;
- omp_destroy_lock(&__result_lock);
-
// Element "between" __final_left and __final_right might not have
// been regarded yet
if (__final_left < __n && !__pred(__begin[__final_left]))
diff --git a/libstdc++-v3/include/parallel/set_operations.h b/libstdc++-v3/include/parallel/set_operations.h
index 346fb97775d..f6b076f0655 100644
--- a/libstdc++-v3/include/parallel/set_operations.h
+++ b/libstdc++-v3/include/parallel/set_operations.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -345,11 +345,11 @@ namespace __gnu_parallel
template<typename _IIter,
typename _OutputIterator,
- typename Operation>
+ typename _Operation>
_OutputIterator
__parallel_set_operation(_IIter __begin1, _IIter __end1,
_IIter __begin2, _IIter __end2,
- _OutputIterator __result, Operation __op)
+ _OutputIterator __result, _Operation __op)
{
_GLIBCXX_CALL((__end1 - __begin1) + (__end2 - __begin2))
diff --git a/libstdc++-v3/include/parallel/settings.h b/libstdc++-v3/include/parallel/settings.h
index 3b326ff8e47..5d00b026944 100644
--- a/libstdc++-v3/include/parallel/settings.h
+++ b/libstdc++-v3/include/parallel/settings.h
@@ -272,6 +272,9 @@ namespace __gnu_parallel
/// Minimal input size for search and search_n.
_SequenceIndex search_minimal_n;
+ /// Block size scale-down factor with respect to current position.
+ float find_scale_factor;
+
/// Get the global settings.
_GLIBCXX_CONST static const _Settings&
get() throw();
@@ -331,7 +334,8 @@ namespace __gnu_parallel
TLB_size(128),
cache_line_size(64),
qsb_steals(0),
- search_minimal_n(1000)
+ search_minimal_n(1000),
+ find_scale_factor(0.01f)
{ }
};
}
diff --git a/libstdc++-v3/include/profile/base.h b/libstdc++-v3/include/profile/base.h
index de7bfe9a56f..88dd0b1f197 100644
--- a/libstdc++-v3/include/profile/base.h
+++ b/libstdc++-v3/include/profile/base.h
@@ -38,9 +38,7 @@
#ifndef _GLIBCXX_PROFILE_BASE_H
#define _GLIBCXX_PROFILE_BASE_H 1
-#include <cstdio>
#include <functional>
-#include <bits/c++config.h>
#include <profile/impl/profiler.h>
// Profiling mode namespaces.
diff --git a/libstdc++-v3/include/profile/deque b/libstdc++-v3/include/profile/deque
index 55e8d49d686..b404d972f8f 100644
--- a/libstdc++-v3/include/profile/deque
+++ b/libstdc++-v3/include/profile/deque
@@ -60,12 +60,24 @@ namespace __profile
typedef typename _Base::const_pointer const_pointer;
// 23.2.1.1 construct/copy/destroy:
- explicit deque(const _Allocator& __a = _Allocator())
+ explicit
+ deque(const _Allocator& __a = _Allocator())
: _Base(__a) { }
- explicit deque(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ deque(size_type __n)
+ : _Base(__n) { }
+
+ deque(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a) { }
+#else
+ explicit
+ deque(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a) { }
+#endif
template<class _InputIterator>
deque(_InputIterator __first, _InputIterator __last,
@@ -81,7 +93,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
deque(deque&& __x)
- : _Base(std::forward<deque>(__x))
+ : _Base(std::move(__x))
{ }
deque(initializer_list<value_type> __l,
@@ -195,11 +207,25 @@ namespace __profile
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ {
+ _Base::resize(__sz);
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ _Base::resize(__sz, __c);
+ }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{
_Base::resize(__sz, __c);
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
using _Base::shrink_to_fit;
diff --git a/libstdc++-v3/include/profile/impl/profiler.h b/libstdc++-v3/include/profile/impl/profiler.h
index b5ac409bb46..ab9cd903030 100644
--- a/libstdc++-v3/include/profile/impl/profiler.h
+++ b/libstdc++-v3/include/profile/impl/profiler.h
@@ -37,13 +37,16 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_H
#define _GLIBCXX_PROFILE_PROFILER_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstddef>
-#else
-#include <stddef.h>
-#endif
+#include <bits/c++config.h>
// Mechanism to define data with inline linkage.
+#define _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__type, __name) \
+ inline __type& \
+ __get_##__name() \
+ { \
+ static __type __name; \
+ return __name; \
+ }
#define _GLIBCXX_PROFILE_DEFINE_DATA(__type, __name, __initial_value...) \
inline __type& __get_##__name() { \
static __type __name(__initial_value); \
@@ -102,47 +105,50 @@ namespace __gnu_profile
bool __is_on();
bool __is_off();
void __report(void);
- void __trace_hashtable_size_resize(const void*, size_t, size_t);
- void __trace_hashtable_size_destruct(const void*, size_t, size_t);
- void __trace_hashtable_size_construct(const void*, size_t);
- void __trace_vector_size_resize(const void*, size_t, size_t);
- void __trace_vector_size_destruct(const void*, size_t, size_t);
- void __trace_vector_size_construct(const void*, size_t);
- void __trace_hash_func_destruct(const void*, size_t, size_t, size_t);
+ void __trace_hashtable_size_resize(const void*, std::size_t, std::size_t);
+ void __trace_hashtable_size_destruct(const void*, std::size_t, std::size_t);
+ void __trace_hashtable_size_construct(const void*, std::size_t);
+ void __trace_vector_size_resize(const void*, std::size_t, std::size_t);
+ void __trace_vector_size_destruct(const void*, std::size_t, std::size_t);
+ void __trace_vector_size_construct(const void*, std::size_t);
+ void __trace_hash_func_destruct(const void*, std::size_t, std::size_t,
+ std::size_t);
void __trace_hash_func_construct(const void*);
void __trace_vector_to_list_destruct(const void*);
void __trace_vector_to_list_construct(const void*);
- void __trace_vector_to_list_insert(const void*, size_t, size_t);
- void __trace_vector_to_list_iterate(const void*, size_t);
+ void __trace_vector_to_list_insert(const void*, std::size_t, std::size_t);
+ void __trace_vector_to_list_iterate(const void*, std::size_t);
void __trace_vector_to_list_invalid_operator(const void*);
- void __trace_vector_to_list_resize(const void*, size_t, size_t);
- void __trace_vector_to_list_find(const void*, size_t);
+ void __trace_vector_to_list_resize(const void*, std::size_t, std::size_t);
+ void __trace_vector_to_list_find(const void*, std::size_t);
void __trace_list_to_slist_destruct(const void*);
void __trace_list_to_slist_construct(const void*);
- void __trace_list_to_slist_rewind(const void*);
+ void __trace_list_to_slist_rewind(const void*);
void __trace_list_to_slist_operation(const void*);
void __trace_list_to_vector_destruct(const void*);
void __trace_list_to_vector_construct(const void*);
- void __trace_list_to_vector_insert(const void*, size_t, size_t);
- void __trace_list_to_vector_iterate(const void*, size_t);
+ void __trace_list_to_vector_insert(const void*, std::size_t, std::size_t);
+ void __trace_list_to_vector_iterate(const void*, std::size_t);
void __trace_list_to_vector_invalid_operator(const void*);
- void __trace_list_to_vector_resize(const void*, size_t, size_t);
+ void __trace_list_to_vector_resize(const void*, std::size_t, std::size_t);
void __trace_list_to_set_destruct(const void*);
void __trace_list_to_set_construct(const void*);
- void __trace_list_to_set_insert(const void*, size_t, size_t);
- void __trace_list_to_set_iterate(const void*, size_t);
+ void __trace_list_to_set_insert(const void*, std::size_t, std::size_t);
+ void __trace_list_to_set_iterate(const void*, std::size_t);
void __trace_list_to_set_invalid_operator(const void*);
- void __trace_list_to_set_find(const void*, size_t);
+ void __trace_list_to_set_find(const void*, std::size_t);
void __trace_map_to_unordered_map_construct(const void*);
void __trace_map_to_unordered_map_invalidate(const void*);
- void __trace_map_to_unordered_map_insert(const void*, size_t, size_t);
- void __trace_map_to_unordered_map_erase(const void*, size_t, size_t);
- void __trace_map_to_unordered_map_iterate(const void*, size_t);
- void __trace_map_to_unordered_map_find(const void*, size_t);
+ void __trace_map_to_unordered_map_insert(const void*, std::size_t,
+ std::size_t);
+ void __trace_map_to_unordered_map_erase(const void*, std::size_t,
+ std::size_t);
+ void __trace_map_to_unordered_map_iterate(const void*, std::size_t);
+ void __trace_map_to_unordered_map_find(const void*, std::size_t);
void __trace_map_to_unordered_map_destruct(const void*);
} // namespace __gnu_profile
@@ -362,11 +368,6 @@ namespace __gnu_profile
#define __profcxx_map_to_unordered_map_find(__x...)
#endif
-// Run multithreaded unless instructed not to do so.
-#ifndef _GLIBCXX_PROFILE_NO_THREADS
-#define _GLIBCXX_PROFILE_THREADS
-#endif
-
// Set default values for compile-time customizable variables.
#ifndef _GLIBCXX_PROFILE_TRACE_PATH_ROOT
#define _GLIBCXX_PROFILE_TRACE_PATH_ROOT "libstdcxx-profile"
@@ -389,7 +390,7 @@ namespace __gnu_profile
"_GLIBCXX_PROFILE_MAX_STACK_DEPTH"
#endif
#ifndef _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC
-#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC 2 << 27
+#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC (1 << 28)
#endif
#ifndef _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR
#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR \
diff --git a/libstdc++-v3/include/profile/impl/profiler_algos.h b/libstdc++-v3/include/profile/impl/profiler_algos.h
new file mode 100644
index 00000000000..d4de43e9ee0
--- /dev/null
+++ b/libstdc++-v3/include/profile/impl/profiler_algos.h
@@ -0,0 +1,118 @@
+// -*- C++ -*-
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 2, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/** @file profile/impl/profiler_algos.h
+ * @brief Algorithms used by the profile extension.
+ *
+ * This file is needed to avoid including <algorithm> or <bits/stl_algo.h>.
+ * Including those files would result in recursive includes.
+ * These implementations are oversimplified. In general, efficiency may be
+ * sacrificed to minimize maintenance overhead.
+ */
+
+#ifndef _GLIBCXX_PROFILE_PROFILER_ALGOS_H
+#define _GLIBCXX_PROFILE_PROFILER_ALGOS_H 1
+
+namespace __gnu_profile
+{
+ /* Helper for __top_n. Insert in sorted vector, but not beyond Nth elem. */
+ template<typename _Container>
+ void
+ __insert_top_n(_Container& __output,
+ const typename _Container::value_type& __value,
+ typename _Container::size_type __n)
+ {
+ typename _Container::iterator __it = __output.begin();
+ typename _Container::size_type __count = 0;
+
+ // Skip up to N - 1 elements larger than VALUE.
+ // XXX: Could do binary search for random iterators.
+ while (true)
+ {
+ if (__count >= __n)
+ // VALUE is not in top N.
+ return;
+
+ if (__it == __output.end())
+ break;
+
+ if (*__it < __value)
+ break;
+
+ ++__it;
+ ++__count;
+ }
+
+ __output.insert(__it, __value);
+ }
+
+ /* Copy the top N elements in INPUT, sorted in reverse order, to OUTPUT. */
+ template<typename _Container>
+ void
+ __top_n(const _Container& __input, _Container& __output,
+ typename _Container::size_type __n)
+ {
+ __output.clear();
+ typename _Container::const_iterator __it;
+ for (__it = __input.begin(); __it != __input.end(); ++__it)
+ __insert_top_n(__output, *__it, __n);
+ }
+
+ /* Simplified clone of std::for_each. */
+ template<typename _InputIterator, typename _Function>
+ _Function
+ __for_each(_InputIterator __first, _InputIterator __last, _Function __f)
+ {
+ for (; __first != __last; ++__first)
+ __f(*__first);
+ return __f;
+ }
+
+ /* Simplified clone of std::remove. */
+ template<typename _ForwardIterator, typename _Tp>
+ _ForwardIterator
+ __remove(_ForwardIterator __first, _ForwardIterator __last,
+ const _Tp& __value)
+ {
+ if(__first == __last)
+ return __first;
+ _ForwardIterator __result = __first;
+ ++__first;
+ for(; __first != __last; ++__first)
+ if(!(*__first == __value))
+ {
+ *__result = *__first;
+ ++__result;
+ }
+ return __result;
+ }
+} // namespace __gnu_profile
+
+#endif /* _GLIBCXX_PROFILE_PROFILER_ALGOS_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_container_size.h b/libstdc++-v3/include/profile/impl/profiler_container_size.h
index bfbab85199b..5c7d08b92b9 100644
--- a/libstdc++-v3/include/profile/impl/profiler_container_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_container_size.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,16 +37,6 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H
#define _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
-
#include <sstream>
#include "profile/impl/profiler.h"
@@ -55,188 +45,178 @@
namespace __gnu_profile
{
-
-/** @brief A container size instrumentation line in the object table. */
-class __container_size_info: public __object_info_base
-{
- public:
- __container_size_info();
- __container_size_info(const __container_size_info& __o);
- __container_size_info(__stack_t __stack, size_t __num);
- virtual ~__container_size_info() {}
-
- void __write(FILE* f) const;
- float __magnitude() const { return static_cast<float>(_M_cost); }
- const char* __advice() const;
-
- void __merge(const __container_size_info& __o);
- // Call if a container is destructed or cleaned.
- void __destruct(size_t __num, size_t __inum);
- // Estimate the cost of resize/rehash.
- float __resize_cost(size_t __from, size_t __to) { return __from; }
- // Call if container is resized.
- void __resize(size_t __from, size_t __to);
-
- private:
- size_t _M_init;
- size_t _M_max; // range of # buckets
- size_t _M_min;
- size_t _M_total;
- size_t _M_item_min; // range of # items
- size_t _M_item_max;
- size_t _M_item_total;
- size_t _M_count;
- size_t _M_resize;
- size_t _M_cost;
-};
-
-inline const char* __container_size_info::__advice() const
-{
- std::stringstream __message;
- if (_M_init < _M_item_max)
- __message << "change initial container size from " << _M_init
- << " to " << _M_item_max;
-
- return strdup(__message.str().c_str());
-}
-
-inline void __container_size_info::__destruct(size_t __num, size_t __inum)
-{
- _M_max = __max(_M_max, __num);
- _M_item_max = __max(_M_item_max, __inum);
- if (_M_min == 0) {
- _M_min = __num;
- _M_item_min = __inum;
- } else {
- _M_min = __min(_M_min, __num);
- _M_item_min = __min(_M_item_min, __inum);
- }
- _M_total += __num;
- _M_item_total += __inum;
- _M_count += 1;
-}
-
-inline void __container_size_info::__resize(size_t __from, size_t __to)
-{
- _M_cost += this->__resize_cost(__from, __to);
- _M_resize += 1;
- _M_max = __max(_M_max, __to);
-}
-
-inline __container_size_info::__container_size_info(__stack_t __stack,
- size_t __num)
- : __object_info_base(__stack), _M_init(0), _M_max(0), _M_item_max(0),
- _M_min(0), _M_item_min(0), _M_total(0), _M_item_total(0), _M_cost(0),
- _M_count(0), _M_resize(0)
-{
- _M_init = _M_max = __num;
- _M_item_min = _M_item_max = _M_item_total = _M_total = 0;
- _M_min = 0;
- _M_count = 0;
- _M_resize = 0;
-}
-
-inline void __container_size_info::__merge(const __container_size_info& __o)
-{
- _M_init = __max(_M_init, __o._M_init);
- _M_max = __max(_M_max, __o._M_max);
- _M_item_max = __max(_M_item_max, __o._M_item_max);
- _M_min = __min(_M_min, __o._M_min);
- _M_item_min = __min(_M_item_min, __o._M_item_min);
- _M_total += __o._M_total;
- _M_item_total += __o._M_item_total;
- _M_count += __o._M_count;
- _M_cost += __o._M_cost;
- _M_resize += __o._M_resize;
-}
-
-inline __container_size_info::__container_size_info()
- : _M_init(0), _M_max(0), _M_item_max(0), _M_min(0), _M_item_min(0),
- _M_total(0), _M_item_total(0), _M_cost(0), _M_count(0), _M_resize(0)
-{
-}
-
-inline __container_size_info::__container_size_info(
- const __container_size_info& __o)
- : __object_info_base(__o)
-{
- _M_init = __o._M_init;
- _M_max = __o._M_max;
- _M_item_max = __o._M_item_max;
- _M_min = __o._M_min;
- _M_item_min = __o._M_item_min;
- _M_total = __o._M_total;
- _M_item_total = __o._M_item_total;
- _M_cost = __o._M_cost;
- _M_count = __o._M_count;
- _M_resize = __o._M_resize;
-}
-
-/** @brief A container size instrumentation line in the stack table. */
-class __container_size_stack_info: public __container_size_info
-{
- public:
- __container_size_stack_info(const __container_size_info& __o)
- : __container_size_info(__o) {}
-};
-
-/** @brief Container size instrumentation trace producer. */
-class __trace_container_size
- : public __trace_base<__container_size_info, __container_size_stack_info>
-{
- public:
- ~__trace_container_size() {}
- __trace_container_size()
- : __trace_base<__container_size_info, __container_size_stack_info>() {};
-
- // Insert a new node at construct with object, callstack and initial size.
- void __insert(const __object_t __obj, __stack_t __stack, size_t __num);
- // Call at destruction/clean to set container final size.
- void __destruct(const void* __obj, size_t __num, size_t __inum);
- void __construct(const void* __obj, size_t __inum);
- // Call at resize to set resize/cost information.
- void __resize(const void* __obj, int __from, int __to);
-};
-
-inline void __trace_container_size::__insert(const __object_t __obj,
- __stack_t __stack, size_t __num)
-{
- __add_object(__obj, __container_size_info(__stack, __num));
-}
-
-inline void __container_size_info::__write(FILE* __f) const
-{
- fprintf(__f, "%Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu\n",
- _M_init, _M_count, _M_cost, _M_resize, _M_min, _M_max, _M_total,
- _M_item_min, _M_item_max, _M_item_total);
-}
-
-inline void __trace_container_size::__destruct(const void* __obj,
- size_t __num, size_t __inum)
-{
- if (!__is_on()) return;
-
- __object_t __obj_handle = static_cast<__object_t>(__obj);
-
- __container_size_info* __object_info = __get_object_info(__obj_handle);
- if (!__object_info)
- return;
-
- __object_info->__destruct(__num, __inum);
- __retire_object(__obj_handle);
-}
-
-inline void __trace_container_size::__resize(const void* __obj, int __from,
- int __to)
-{
- if (!__is_on()) return;
-
- __container_size_info* __object_info = __get_object_info(__obj);
- if (!__object_info)
- return;
-
- __object_info->__resize(__from, __to);
-}
+ /** @brief A container size instrumentation line in the object table. */
+ class __container_size_info
+ : public __object_info_base
+ {
+ public:
+ __container_size_info()
+ : _M_init(0), _M_max(0), _M_min(0), _M_total(0), _M_item_min(0),
+ _M_item_max(0), _M_item_total(0), _M_count(0), _M_resize(0), _M_cost(0)
+ { }
+
+ __container_size_info(const __container_size_info& __o)
+ : __object_info_base(__o), _M_init(__o._M_init), _M_max(__o._M_max),
+ _M_min(__o._M_min), _M_total(__o._M_total),
+ _M_item_min(__o._M_item_min), _M_item_max(__o._M_item_max),
+ _M_item_total(__o._M_item_total), _M_count(__o._M_count),
+ _M_resize(__o._M_resize), _M_cost(__o._M_cost)
+ { }
+
+ __container_size_info(__stack_t __stack, std::size_t __num)
+ : __object_info_base(__stack), _M_init(__num), _M_max(__num),
+ _M_min(0), _M_total(0), _M_item_min(0), _M_item_max(0),
+ _M_item_total(0), _M_count(0), _M_resize(0), _M_cost(0)
+ { }
+
+ virtual ~__container_size_info() { }
+
+ void
+ __write(FILE* __f) const
+ {
+ std::fprintf(__f, "%Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu %Zu\n",
+ _M_init, _M_count, _M_cost, _M_resize, _M_min, _M_max,
+ _M_total, _M_item_min, _M_item_max, _M_item_total);
+ }
+
+ float
+ __magnitude() const
+ { return static_cast<float>(_M_cost); }
+
+ std::string
+ __advice() const
+ {
+ std::stringstream __message;
+ if (_M_init < _M_item_max)
+ __message << "change initial container size from " << _M_init
+ << " to " << _M_item_max;
+ return __message.str();
+ }
+
+ void
+ __merge(const __container_size_info& __o)
+ {
+ _M_init = std::max(_M_init, __o._M_init);
+ _M_max = std::max(_M_max, __o._M_max);
+ _M_item_max = std::max(_M_item_max, __o._M_item_max);
+ _M_min = std::min(_M_min, __o._M_min);
+ _M_item_min = std::min(_M_item_min, __o._M_item_min);
+ _M_total += __o._M_total;
+ _M_item_total += __o._M_item_total;
+ _M_count += __o._M_count;
+ _M_cost += __o._M_cost;
+ _M_resize += __o._M_resize;
+ }
+
+ // Call if a container is destructed or cleaned.
+ void
+ __destruct(std::size_t __num, std::size_t __inum)
+ {
+ _M_max = std::max(_M_max, __num);
+ _M_item_max = std::max(_M_item_max, __inum);
+ if (_M_min == 0)
+ {
+ _M_min = __num;
+ _M_item_min = __inum;
+ }
+ else
+ {
+ _M_min = std::min(_M_min, __num);
+ _M_item_min = std::min(_M_item_min, __inum);
+ }
+ _M_total += __num;
+ _M_item_total += __inum;
+ _M_count += 1;
+ }
+
+ // Estimate the cost of resize/rehash.
+ float
+ __resize_cost(std::size_t __from, std::size_t)
+ { return __from; }
+
+ // Call if container is resized.
+ void
+ __resize(std::size_t __from, std::size_t __to)
+ {
+ _M_cost += this->__resize_cost(__from, __to);
+ _M_resize += 1;
+ _M_max = std::max(_M_max, __to);
+ }
+
+ private:
+ std::size_t _M_init;
+ std::size_t _M_max; // range of # buckets
+ std::size_t _M_min;
+ std::size_t _M_total;
+ std::size_t _M_item_min; // range of # items
+ std::size_t _M_item_max;
+ std::size_t _M_item_total;
+ std::size_t _M_count;
+ std::size_t _M_resize;
+ std::size_t _M_cost;
+ };
+
+
+ /** @brief A container size instrumentation line in the stack table. */
+ class __container_size_stack_info
+ : public __container_size_info
+ {
+ public:
+ __container_size_stack_info(const __container_size_info& __o)
+ : __container_size_info(__o) { }
+ };
+
+
+ /** @brief Container size instrumentation trace producer. */
+ class __trace_container_size
+ : public __trace_base<__container_size_info, __container_size_stack_info>
+ {
+ public:
+ ~__trace_container_size() { }
+
+ __trace_container_size()
+ : __trace_base<__container_size_info, __container_size_stack_info>() { };
+
+ // Insert a new node at construct with object, callstack and initial size.
+ void
+ __insert(const __object_t __obj, __stack_t __stack, std::size_t __num)
+ { __add_object(__obj, __container_size_info(__stack, __num)); }
+
+ // XXX Undefined?
+ void
+ __construct(const void* __obj, std::size_t __inum);
+
+ // Call at destruction/clean to set container final size.
+ void
+ __destruct(const void* __obj, std::size_t __num, std::size_t __inum)
+ {
+ if (!__is_on())
+ return;
+
+ __object_t __obj_handle = static_cast<__object_t>(__obj);
+
+ __container_size_info* __object_info = __get_object_info(__obj_handle);
+ if (!__object_info)
+ return;
+
+ __object_info->__destruct(__num, __inum);
+ __retire_object(__obj_handle);
+ }
+
+ // Call at resize to set resize/cost information.
+ void
+ __resize(const void* __obj, int __from, int __to)
+ {
+ if (!__is_on())
+ return;
+
+ __container_size_info* __object_info = __get_object_info(__obj);
+ if (!__object_info)
+ return;
+
+ __object_info->__resize(__from, __to);
+ }
+ };
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_CONTAINER_SIZE_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_hash_func.h b/libstdc++-v3/include/profile/impl/profiler_hash_func.h
index 95fad192590..3e01760afba 100644
--- a/libstdc++-v3/include/profile/impl/profiler_hash_func.h
+++ b/libstdc++-v3/include/profile/impl/profiler_hash_func.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,149 +37,145 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H
#define _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
namespace __gnu_profile
{
-
-/** @brief A hash performance instrumentation line in the object table. */
-class __hashfunc_info: public __object_info_base
-{
- public:
- __hashfunc_info()
- :_M_longest_chain(0), _M_accesses(0), _M_hops(0) {}
- __hashfunc_info(const __hashfunc_info& o);
- __hashfunc_info(__stack_t __stack)
- : __object_info_base(__stack),
- _M_longest_chain(0), _M_accesses(0), _M_hops(0){}
- virtual ~__hashfunc_info() {}
-
- void __merge(const __hashfunc_info& __o);
- void __destruct(size_t __chain, size_t __accesses, size_t __hops);
- void __write(FILE* __f) const;
- float __magnitude() const { return static_cast<float>(_M_hops); }
- const char* __advice() const { return strdup("change hash function"); }
-
-private:
- size_t _M_longest_chain;
- size_t _M_accesses;
- size_t _M_hops;
-};
-
-inline __hashfunc_info::__hashfunc_info(const __hashfunc_info& __o)
- : __object_info_base(__o)
-{
- _M_longest_chain = __o._M_longest_chain;
- _M_accesses = __o._M_accesses;
- _M_hops = __o._M_hops;
-}
-
-inline void __hashfunc_info::__merge(const __hashfunc_info& __o)
-{
- _M_longest_chain = __max(_M_longest_chain, __o._M_longest_chain);
- _M_accesses += __o._M_accesses;
- _M_hops += __o._M_hops;
-}
-
-inline void __hashfunc_info::__destruct(size_t __chain, size_t __accesses,
- size_t __hops)
-{
- _M_longest_chain = __max(_M_longest_chain, __chain);
- _M_accesses += __accesses;
- _M_hops += __hops;
-}
-
-/** @brief A hash performance instrumentation line in the stack table. */
-class __hashfunc_stack_info: public __hashfunc_info {
- public:
- __hashfunc_stack_info(const __hashfunc_info& __o) : __hashfunc_info(__o) {}
-};
-
-/** @brief Hash performance instrumentation producer. */
-class __trace_hash_func
- : public __trace_base<__hashfunc_info, __hashfunc_stack_info>
-{
- public:
- __trace_hash_func();
- ~__trace_hash_func() {}
-
- // Insert a new node at construct with object, callstack and initial size.
- void __insert(__object_t __obj, __stack_t __stack);
- // Call at destruction/clean to set container final size.
- void __destruct(const void* __obj, size_t __chain,
- size_t __accesses, size_t __hops);
-};
-
-inline __trace_hash_func::__trace_hash_func()
+ /** @brief A hash performance instrumentation line in the object table. */
+ class __hashfunc_info
+ : public __object_info_base
+ {
+ public:
+ __hashfunc_info()
+ : _M_longest_chain(0), _M_accesses(0), _M_hops(0) { }
+
+ __hashfunc_info(const __hashfunc_info& __o)
+ : __object_info_base(__o), _M_longest_chain(__o._M_longest_chain),
+ _M_accesses(__o._M_accesses), _M_hops(__o._M_hops) { }
+
+ __hashfunc_info(__stack_t __stack)
+ : __object_info_base(__stack), _M_longest_chain(0),
+ _M_accesses(0), _M_hops(0) { }
+
+ virtual ~__hashfunc_info() { }
+
+ void
+ __merge(const __hashfunc_info& __o)
+ {
+ _M_longest_chain = std::max(_M_longest_chain, __o._M_longest_chain);
+ _M_accesses += __o._M_accesses;
+ _M_hops += __o._M_hops;
+ }
+
+ void
+ __destruct(std::size_t __chain, std::size_t __accesses,
+ std::size_t __hops)
+ {
+ _M_longest_chain = std::max(_M_longest_chain, __chain);
+ _M_accesses += __accesses;
+ _M_hops += __hops;
+ }
+
+ void
+ __write(FILE* __f) const
+ { std::fprintf(__f, "%Zu %Zu %Zu\n", _M_hops,
+ _M_accesses, _M_longest_chain); }
+
+ float
+ __magnitude() const
+ { return static_cast<float>(_M_hops); }
+
+ std::string
+ __advice() const
+ { return "change hash function"; }
+
+ private:
+ std::size_t _M_longest_chain;
+ std::size_t _M_accesses;
+ std::size_t _M_hops;
+ };
+
+
+ /** @brief A hash performance instrumentation line in the stack table. */
+ class __hashfunc_stack_info
+ : public __hashfunc_info
+ {
+ public:
+ __hashfunc_stack_info(const __hashfunc_info& __o)
+ : __hashfunc_info(__o) { }
+ };
+
+
+ /** @brief Hash performance instrumentation producer. */
+ class __trace_hash_func
+ : public __trace_base<__hashfunc_info, __hashfunc_stack_info>
+ {
+ public:
+ __trace_hash_func()
: __trace_base<__hashfunc_info, __hashfunc_stack_info>()
-{
- __id = "hash-distr";
-}
-
-inline void __trace_hash_func::__insert(__object_t __obj, __stack_t __stack)
-{
- __add_object(__obj, __hashfunc_info(__stack));
-}
-
-inline void __hashfunc_info::__write(FILE* __f) const
-{
- fprintf(__f, "%Zu %Zu %Zu\n", _M_hops, _M_accesses, _M_longest_chain);
-}
-
-inline void __trace_hash_func::__destruct(const void* __obj, size_t __chain,
- size_t __accesses, size_t __hops)
-{
- if (!__is_on()) return;
-
- // First find the item from the live objects and update the informations.
- __hashfunc_info* __objs = __get_object_info(__obj);
- if (!__objs)
- return;
-
- __objs->__destruct(__chain, __accesses, __hops);
- __retire_object(__obj);
-}
-
-inline void __trace_hash_func_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_hash_func) = new __trace_hash_func();
-}
-
-inline void __trace_hash_func_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_hash_func)) {
- _GLIBCXX_PROFILE_DATA(_S_hash_func)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_hash_func)->__write(__f);
+ { __id = "hash-distr"; }
+
+ ~__trace_hash_func() {}
+
+ // Insert a new node at construct with object, callstack and initial size.
+ void
+ __insert(__object_t __obj, __stack_t __stack)
+ { __add_object(__obj, __hashfunc_info(__stack)); }
+
+ // Call at destruction/clean to set container final size.
+ void
+ __destruct(const void* __obj, std::size_t __chain,
+ std::size_t __accesses, std::size_t __hops)
+ {
+ if (!__is_on())
+ return;
+
+ // First find the item from the live objects and update the informations.
+ __hashfunc_info* __objs = __get_object_info(__obj);
+ if (!__objs)
+ return;
+
+ __objs->__destruct(__chain, __accesses, __hops);
+ __retire_object(__obj);
+ }
+ };
+
+
+ inline void
+ __trace_hash_func_init()
+ { _GLIBCXX_PROFILE_DATA(_S_hash_func) = new __trace_hash_func(); }
+
+ inline void
+ __trace_hash_func_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_hash_func))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_hash_func)->__collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_hash_func)->__write(__f);
+ }
}
-}
-inline void __trace_hash_func_construct(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_hash_func_construct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_hash_func)->__insert(__obj, __get_stack());
-}
+ _GLIBCXX_PROFILE_DATA(_S_hash_func)->__insert(__obj, __get_stack());
+ }
-inline void __trace_hash_func_destruct(const void* __obj, size_t __chain,
- size_t __accesses, size_t __hops)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_hash_func_destruct(const void* __obj, std::size_t __chain,
+ std::size_t __accesses, std::size_t __hops)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_hash_func)->__destruct(__obj, __chain, __accesses,
- __hops);
-}
+ _GLIBCXX_PROFILE_DATA(_S_hash_func)->__destruct(__obj, __chain,
+ __accesses, __hops);
+ }
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_HASH_FUNC_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
index 8248f47e75d..9d5cbc793ef 100644
--- a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,15 +37,6 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_HASHTABLE_SIZE_H
#define _GLIBCXX_PROFILE_PROFILER_HASHTABLE_SIZE_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
@@ -54,54 +45,60 @@
namespace __gnu_profile
{
-
-/** @brief Hashtable size instrumentation trace producer. */
-class __trace_hashtable_size : public __trace_container_size
-{
- public:
- __trace_hashtable_size() : __trace_container_size()
+ /** @brief Hashtable size instrumentation trace producer. */
+ class __trace_hashtable_size
+ : public __trace_container_size
{
- __id = "hashtable-size";
- }
-};
-
-inline void __trace_hashtable_size_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size) = new __trace_hashtable_size();
-}
-
-inline void __trace_hashtable_size_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_hashtable_size)) {
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__write(__f);
+ public:
+ __trace_hashtable_size()
+ : __trace_container_size()
+ { __id = "hashtable-size"; }
+ };
+
+ inline void
+ __trace_hashtable_size_init()
+ { _GLIBCXX_PROFILE_DATA(_S_hashtable_size) = new __trace_hashtable_size(); }
+
+ inline void
+ __trace_hashtable_size_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_hashtable_size))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->
+ __collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__write(__f);
+ }
}
-}
-inline void __trace_hashtable_size_construct(const void* __obj, size_t __num)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_hashtable_size_construct(const void* __obj, std::size_t __num)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__insert(__obj, __get_stack(),
- __num);
-}
+ _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__insert(__obj, __get_stack(),
+ __num);
+ }
-inline void __trace_hashtable_size_destruct(const void* __obj, size_t __num,
- size_t __inum)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_hashtable_size_destruct(const void* __obj, std::size_t __num,
+ std::size_t __inum)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__destruct(__obj, __num, __inum);
-}
+ _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__destruct(__obj, __num, __inum);
+ }
-inline void __trace_hashtable_size_resize(const void* __obj, size_t __from,
- size_t __to)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_hashtable_size_resize(const void* __obj, std::size_t __from,
+ std::size_t __to)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__resize(__obj, __from, __to);
-}
+ _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__resize(__obj, __from, __to);
+ }
} // namespace __gnu_profile
diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
index 073bdf27587..299a17d5af6 100644
--- a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
+++ b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,146 +37,179 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H
#define _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
namespace __gnu_profile
{
-
-class __list2slist_info: public __object_info_base
-{
- public:
- __list2slist_info() : _M_rewind(false), _M_operations(0) {}
- __list2slist_info(__stack_t __stack)
- : _M_rewind(false), _M_operations(0),__object_info_base(__stack) {}
- virtual ~__list2slist_info() {}
- __list2slist_info(const __list2slist_info& __o) : __object_info_base(__o)
- { _M_rewind = __o._M_rewind; _M_operations = __o._M_operations; }
- // XXX: the magnitude should be multiplied with a constant factor F,
- // where F is 1 when the malloc size class of list nodes is different
- // from the malloc size class of slist nodes. When they fall into the same
- // class, the only slist benefit is from having to set fewer links, so
- // the factor F should be much smaller, closer to 0 than to 1.
- // This could be implemented by passing the size classes in the config file.
- // For now, we always assume F to be 1.
- float __magnitude() const
- { if (!_M_rewind) return _M_operations; else return 0; }
- void __merge(const __list2slist_info& __o) {};
- void __write(FILE* __f) const;
- const char* __advice() const
- { return strdup("change std::list to std::forward_list"); }
- void __opr_rewind() { _M_rewind = true; _M_valid = false;}
- void __record_operation() { _M_operations++; }
- bool __has_rewind() { return _M_rewind; }
-
-private:
- bool _M_rewind;
- size_t _M_operations;
-};
-
-class __list2slist_stack_info: public __list2slist_info {
- public:
- __list2slist_stack_info(const __list2slist_info& __o)
- : __list2slist_info(__o) {}
-};
-
-class __trace_list_to_slist
- : public __trace_base<__list2slist_info, __list2slist_stack_info>
-{
- public:
- ~__trace_list_to_slist() {}
- __trace_list_to_slist()
- : __trace_base<__list2slist_info, __list2slist_stack_info>()
- { __id = "list-to-slist"; }
- void __opr_rewind(const void* __obj);
- void __record_operation(const void* __obj);
- void __insert(const __object_t __obj, __stack_t __stack)
- { __add_object(__obj, __list2slist_info(__stack)); }
- void __destruct(const void* __obj);
-};
-
-inline void __list2slist_info::__write(FILE* __f) const
-{
- fprintf(__f, "%s\n", _M_rewind ? "invalid" : "valid");
-}
-
-inline void __trace_list_to_slist::__destruct(const void* __obj)
-{
- if (!__is_on())
- return;
-
- __list2slist_info* __res = __get_object_info(__obj);
- if (!__res)
- return;
-
- __retire_object(__obj);
-}
-
-inline void __trace_list_to_slist_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist) = new __trace_list_to_slist();
-}
-
-inline void __trace_list_to_slist_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_list_to_slist)) {
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__write(__f);
+ class __list2slist_info
+ : public __object_info_base
+ {
+ public:
+ __list2slist_info()
+ : _M_rewind(false), _M_operations(0) { }
+
+ __list2slist_info(__stack_t __stack)
+ : __object_info_base(__stack), _M_rewind(false), _M_operations(0) { }
+
+ virtual ~__list2slist_info() { }
+
+ __list2slist_info(const __list2slist_info& __o)
+ : __object_info_base(__o), _M_rewind(__o._M_rewind),
+ _M_operations(__o._M_operations) { }
+
+ // XXX: the magnitude should be multiplied with a constant factor F,
+ // where F is 1 when the malloc size class of list nodes is different
+ // from the malloc size class of slist nodes. When they fall into the same
+ // class, the only slist benefit is from having to set fewer links, so
+ // the factor F should be much smaller, closer to 0 than to 1.
+ // This could be implemented by passing the size classes in the config
+ // file. For now, we always assume F to be 1.
+
+ float
+ __magnitude() const
+ {
+ if (!_M_rewind)
+ return _M_operations;
+ else
+ return 0;
+ }
+
+ void
+ __merge(const __list2slist_info&) { }
+
+ void
+ __write(FILE* __f) const
+ { std::fprintf(__f, "%s\n", _M_rewind ? "invalid" : "valid"); }
+
+ std::string
+ __advice() const
+ { return "change std::list to std::forward_list"; }
+
+ void
+ __opr_rewind()
+ {
+ _M_rewind = true;
+ _M_valid = false;
+ }
+
+ void
+ __record_operation()
+ { ++_M_operations; }
+
+ bool
+ __has_rewind()
+ { return _M_rewind; }
+
+ private:
+ bool _M_rewind;
+ std::size_t _M_operations;
+ };
+
+ class __list2slist_stack_info
+ : public __list2slist_info
+ {
+ public:
+ __list2slist_stack_info(const __list2slist_info& __o)
+ : __list2slist_info(__o) { }
+ };
+
+ class __trace_list_to_slist
+ : public __trace_base<__list2slist_info, __list2slist_stack_info>
+ {
+ public:
+ ~__trace_list_to_slist() { }
+
+ __trace_list_to_slist()
+ : __trace_base<__list2slist_info, __list2slist_stack_info>()
+ { __id = "list-to-slist"; }
+
+ void
+ __opr_rewind(const void* __obj)
+ {
+ __list2slist_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_rewind();
+ }
+
+ void
+ __record_operation(const void* __obj)
+ {
+ __list2slist_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__record_operation();
+ }
+
+ void
+ __insert(const __object_t __obj, __stack_t __stack)
+ { __add_object(__obj, __list2slist_info(__stack)); }
+
+ void
+ __destruct(const void* __obj)
+ {
+ if (!__is_on())
+ return;
+
+ __list2slist_info* __res = __get_object_info(__obj);
+ if (!__res)
+ return;
+
+ __retire_object(__obj);
+ }
+ };
+
+
+ inline void
+ __trace_list_to_slist_init()
+ { _GLIBCXX_PROFILE_DATA(_S_list_to_slist) = new __trace_list_to_slist(); }
+
+ inline void
+ __trace_list_to_slist_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_list_to_slist))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->
+ __collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__write(__f);
+ }
}
-}
-inline void __trace_list_to_slist::__opr_rewind(const void* __obj)
-{
- __list2slist_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__opr_rewind();
-}
-
-inline void __trace_list_to_slist::__record_operation(const void* __obj)
-{
- __list2slist_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__record_operation();
-}
+ inline void
+ __trace_list_to_slist_rewind(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_list_to_slist_rewind(const void* __obj)
-{
- if (!__profcxx_init()) return;
-
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__opr_rewind(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__opr_rewind(__obj);
+ }
-inline void __trace_list_to_slist_operation(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_slist_operation(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__record_operation(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__record_operation(__obj);
+ }
-inline void __trace_list_to_slist_construct(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_slist_construct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__insert(__obj, __get_stack());
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__insert(__obj, __get_stack());
+ }
-inline void __trace_list_to_slist_destruct(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_slist_destruct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__destruct(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__destruct(__obj);
+ }
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_LIST_TO_SLIST_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
index d3a3713954c..df03267bd44 100644
--- a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
+++ b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,277 +37,295 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H
#define _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#else
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#endif
-#include <string>
#include <sstream>
+
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
namespace __gnu_profile
{
-
-/** @brief A list-to-vector instrumentation line in the object table. */
-class __list2vector_info: public __object_info_base
-{
- public:
- __list2vector_info()
- :_M_shift_count(0), _M_iterate(0), _M_resize(0), _M_list_cost(0),
- _M_vector_cost(0), _M_valid(true), _M_max_size(0) {}
- __list2vector_info(__stack_t __stack)
- : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0),
- _M_resize(0), _M_list_cost(0), _M_vector_cost(0), _M_valid(true),
- _M_max_size(0) {}
- virtual ~__list2vector_info() {}
- __list2vector_info(const __list2vector_info& __o);
- void __merge(const __list2vector_info& __o);
- void __write(FILE* __f) const;
- float __magnitude() const { return _M_list_cost - _M_vector_cost; }
- const char* __advice() const;
- size_t __shift_count() { return _M_shift_count; }
- size_t __iterate() { return _M_iterate; }
- float __list_cost() { return _M_list_cost; }
- size_t __resize() { return _M_resize; }
- void __set_list_cost(float __lc) { _M_list_cost = __lc; }
- void __set_vector_cost(float __vc) { _M_vector_cost = __vc; }
- bool __is_valid() { return _M_valid; }
- void __set_invalid() { _M_valid = false; }
-
- void __opr_insert(size_t __shift, size_t __size);
- void __opr_iterate(size_t __num) { _M_iterate += __num;}
-
- void __resize(size_t __from, size_t __to);
-
-private:
- size_t _M_shift_count;
- size_t _M_iterate;
- size_t _M_resize;
- float _M_list_cost;
- float _M_vector_cost;
- bool _M_valid;
- size_t _M_max_size;
-};
-
-inline __list2vector_info::__list2vector_info(const __list2vector_info& __o)
- : __object_info_base(__o)
-{
- _M_shift_count = __o._M_shift_count;
- _M_iterate = __o._M_iterate;
- _M_vector_cost = __o._M_vector_cost;
- _M_list_cost = __o._M_list_cost;
- _M_valid = __o._M_valid;
- _M_resize = __o._M_resize;
- _M_max_size = __o._M_max_size;
-}
-
-inline const char* __list2vector_info::__advice() const {
- std::stringstream __sstream;
- __sstream
- << "change std::list to std::vector and its initial size from 0 to "
- << _M_max_size;
- return strdup(__sstream.str().c_str());
-}
-
-inline void __list2vector_info::__merge(const __list2vector_info& __o)
-{
- _M_shift_count += __o._M_shift_count;
- _M_iterate += __o._M_iterate;
- _M_vector_cost += __o._M_vector_cost;
- _M_list_cost += __o._M_list_cost;
- _M_valid &= __o._M_valid;
- _M_resize += __o._M_resize;
- _M_max_size = __max( _M_max_size, __o._M_max_size);
-}
-
-inline void __list2vector_info::__opr_insert(size_t __shift, size_t __size)
-{
- _M_shift_count += __shift;
- _M_max_size = __max(_M_max_size, __size);
-}
-
-inline void __list2vector_info::__resize(size_t __from, size_t __to)
-{
- _M_resize += __from;
-}
-
-class __list2vector_stack_info: public __list2vector_info {
- public:
- __list2vector_stack_info(const __list2vector_info& __o)
- : __list2vector_info(__o) {}
-};
-
-class __trace_list_to_vector
- : public __trace_base<__list2vector_info, __list2vector_stack_info>
-{
- public:
- __trace_list_to_vector();
- ~__trace_list_to_vector() {}
-
- // Insert a new node at construct with object, callstack and initial size.
- void __insert(__object_t __obj, __stack_t __stack);
- // Call at destruction/clean to set container final size.
- void __destruct(const void* __obj);
-
- // Find the node in the live map.
- __list2vector_info* __find(const void* __obj);
-
- // Collect cost of operations.
- void __opr_insert(const void* __obj, size_t __shift, size_t __size);
- void __opr_iterate(const void* __obj, size_t __num);
- void __invalid_operator(const void* __obj);
- void __resize(const void* __obj, size_t __from, size_t __to);
- float __vector_cost(size_t __shift, size_t __iterate);
- float __list_cost(size_t __shift, size_t __iterate);
-};
-
-inline __trace_list_to_vector::__trace_list_to_vector()
+ /** @brief A list-to-vector instrumentation line in the object table. */
+ class __list2vector_info
+ : public __object_info_base
+ {
+ public:
+ __list2vector_info()
+ : _M_shift_count(0), _M_iterate(0), _M_resize(0), _M_list_cost(0),
+ _M_vector_cost(0), _M_valid(true), _M_max_size(0) { }
+
+ __list2vector_info(__stack_t __stack)
+ : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0),
+ _M_resize(0), _M_list_cost(0), _M_vector_cost(0), _M_valid(true),
+ _M_max_size(0) { }
+
+ virtual ~__list2vector_info() { }
+
+ __list2vector_info(const __list2vector_info& __o)
+ : __object_info_base(__o), _M_shift_count(__o._M_shift_count),
+ _M_iterate(__o._M_iterate), _M_resize(__o._M_resize),
+ _M_list_cost(__o._M_list_cost), _M_vector_cost(__o._M_vector_cost),
+ _M_valid(__o._M_valid), _M_max_size(__o._M_max_size) { }
+
+ void
+ __merge(const __list2vector_info& __o)
+ {
+ _M_shift_count += __o._M_shift_count;
+ _M_iterate += __o._M_iterate;
+ _M_vector_cost += __o._M_vector_cost;
+ _M_list_cost += __o._M_list_cost;
+ _M_valid &= __o._M_valid;
+ _M_resize += __o._M_resize;
+ _M_max_size = std::max( _M_max_size, __o._M_max_size);
+ }
+
+ void
+ __write(FILE* __f) const
+ {
+ std::fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n", _M_shift_count,
+ _M_resize, _M_iterate, _M_vector_cost, _M_list_cost);
+ }
+
+ float
+ __magnitude() const
+ { return _M_list_cost - _M_vector_cost; }
+
+ std::string
+ __advice() const
+ {
+ std::stringstream __sstream;
+ __sstream
+ << "change std::list to std::vector and its initial size from 0 to "
+ << _M_max_size;
+ return __sstream.str();
+ }
+
+ std::size_t
+ __shift_count()
+ { return _M_shift_count; }
+
+ std::size_t
+ __iterate()
+ { return _M_iterate; }
+
+ float
+ __list_cost()
+ { return _M_list_cost; }
+
+ std::size_t
+ __resize()
+ { return _M_resize; }
+
+ void
+ __set_list_cost(float __lc)
+ { _M_list_cost = __lc; }
+
+ void
+ __set_vector_cost(float __vc)
+ { _M_vector_cost = __vc; }
+
+ bool
+ __is_valid()
+ { return _M_valid; }
+
+ void
+ __set_invalid()
+ { _M_valid = false; }
+
+ void
+ __opr_insert(std::size_t __shift, std::size_t __size)
+ {
+ _M_shift_count += __shift;
+ _M_max_size = std::max(_M_max_size, __size);
+ }
+
+ void
+ __opr_iterate(std::size_t __num)
+ { _M_iterate += __num;}
+
+ void
+ __resize(std::size_t __from, std::size_t)
+ { _M_resize += __from; }
+
+ private:
+ std::size_t _M_shift_count;
+ std::size_t _M_iterate;
+ std::size_t _M_resize;
+ float _M_list_cost;
+ float _M_vector_cost;
+ bool _M_valid;
+ std::size_t _M_max_size;
+ };
+
+ class __list2vector_stack_info
+ : public __list2vector_info
+ {
+ public:
+ __list2vector_stack_info(const __list2vector_info& __o)
+ : __list2vector_info(__o) {}
+ };
+
+ class __trace_list_to_vector
+ : public __trace_base<__list2vector_info, __list2vector_stack_info>
+ {
+ public:
+ __trace_list_to_vector()
: __trace_base<__list2vector_info, __list2vector_stack_info>()
-{
- __id = "list-to-vector";
-}
-
-inline void __trace_list_to_vector::__insert(__object_t __obj,
- __stack_t __stack)
-{
- __add_object(__obj, __list2vector_info(__stack));
-}
-
-inline void __list2vector_info::__write(FILE* __f) const
-{
- fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n",
- _M_shift_count, _M_resize, _M_iterate, _M_vector_cost, _M_list_cost);
-}
-
-inline float __trace_list_to_vector::__vector_cost(size_t __shift,
- size_t __iterate)
-{
- // The resulting vector will use a 'reserve' method.
- return __shift * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value +
- __iterate * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value;
-}
-
-inline float __trace_list_to_vector::__list_cost(size_t __shift,
- size_t __iterate)
-{
- return __shift * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value +
- __iterate * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value;
-}
-
-inline void __trace_list_to_vector::__destruct(const void* __obj)
-{
- if (!__is_on())
- return;
-
- __list2vector_info* __res = __get_object_info(__obj);
- if (!__res)
- return;
-
- float __vc = __vector_cost(__res->__shift_count(), __res->__iterate());
- float __lc = __list_cost(__res->__shift_count(), __res->__iterate());
- __res->__set_vector_cost(__vc);
- __res->__set_list_cost(__lc);
- __retire_object(__obj);
-}
-
-inline void __trace_list_to_vector::__opr_insert(const void* __obj,
- size_t __shift, size_t __size)
-{
- __list2vector_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__opr_insert(__shift, __size);
-}
-
-inline void __trace_list_to_vector::__opr_iterate(const void* __obj,
- size_t __num)
-{
- __list2vector_info* __res = __get_object_info(__obj);
- if (__res) {
- __res->__opr_iterate(__num);
+ { __id = "list-to-vector"; }
+
+ ~__trace_list_to_vector() { }
+
+ // Insert a new node at construct with object, callstack and initial size.
+ void
+ __insert(__object_t __obj, __stack_t __stack)
+ { __add_object(__obj, __list2vector_info(__stack)); }
+
+ // Call at destruction/clean to set container final size.
+ void
+ __destruct(const void* __obj)
+ {
+ if (!__is_on())
+ return;
+
+ __list2vector_info* __res = __get_object_info(__obj);
+ if (!__res)
+ return;
+
+ float __vc = __vector_cost(__res->__shift_count(), __res->__iterate());
+ float __lc = __list_cost(__res->__shift_count(), __res->__iterate());
+ __res->__set_vector_cost(__vc);
+ __res->__set_list_cost(__lc);
+ __retire_object(__obj);
+ }
+
+ // Find the node in the live map.
+ __list2vector_info* __find(const void* __obj);
+
+ // Collect cost of operations.
+ void
+ __opr_insert(const void* __obj, std::size_t __shift, std::size_t __size)
+ {
+ __list2vector_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_insert(__shift, __size);
+ }
+
+ void
+ __opr_iterate(const void* __obj, std::size_t __num)
+ {
+ __list2vector_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_iterate(__num);
+ }
+
+ void
+ __invalid_operator(const void* __obj)
+ {
+ __list2vector_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__set_invalid();
+ }
+
+ void
+ __resize(const void* __obj, std::size_t __from, std::size_t __to)
+ {
+ __list2vector_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__resize(__from, __to);
+ }
+
+ float
+ __vector_cost(std::size_t __shift, std::size_t __iterate)
+ {
+ // The resulting vector will use a 'reserve' method.
+ return (__shift
+ * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value
+ + __iterate
+ * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value);
+ }
+
+ float
+ __list_cost(std::size_t __shift, std::size_t __iterate)
+ {
+ return (__shift
+ * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value
+ + __iterate
+ * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value);
+ }
+ };
+
+
+ inline void
+ __trace_list_to_vector_init()
+ { _GLIBCXX_PROFILE_DATA(_S_list_to_vector) = new __trace_list_to_vector(); }
+
+ inline void
+ __trace_list_to_vector_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_list_to_vector))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->
+ __collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__write(__f);
+ }
}
-}
-
-inline void __trace_list_to_vector::__invalid_operator(const void* __obj)
-{
- __list2vector_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__set_invalid();
-}
-inline void __trace_list_to_vector::__resize(const void* __obj, size_t __from,
- size_t __to)
-{
- __list2vector_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__resize(__from, __to);
-}
+ inline void
+ __trace_list_to_vector_construct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_list_to_vector_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector) = new __trace_list_to_vector();
-}
-
-inline void __trace_list_to_vector_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_list_to_vector)) {
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__write(__f);
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__insert(__obj, __get_stack());
}
-}
-
-inline void __trace_list_to_vector_construct(const void* __obj)
-{
- if (!__profcxx_init()) return;
-
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__insert(__obj, __get_stack());
-}
-inline void __trace_list_to_vector_destruct(const void* __obj)
-{
- if (!__profcxx_init()) return;
-
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__destruct(__obj);
-}
+ inline void
+ __trace_list_to_vector_destruct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_list_to_vector_insert(const void* __obj,
- size_t __shift, size_t __size)
-{
- if (!__profcxx_init()) return;
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__destruct(__obj);
+ }
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_insert(__obj, __shift,
- __size);
-}
+ inline void
+ __trace_list_to_vector_insert(const void* __obj,
+ std::size_t __shift, std::size_t __size)
+ {
+ if (!__profcxx_init())
+ return;
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_insert(__obj, __shift,
+ __size);
+ }
-inline void __trace_list_to_vector_iterate(const void* __obj, size_t __num = 1)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_vector_iterate(const void* __obj, std::size_t __num = 1)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_iterate(__obj, __num);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_iterate(__obj, __num);
+ }
-inline void __trace_list_to_vector_invalid_operator(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_vector_invalid_operator(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__invalid_operator(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__invalid_operator(__obj);
+ }
-inline void __trace_list_to_vector_resize(const void* __obj,
- size_t __from, size_t __to)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_list_to_vector_resize(const void* __obj,
+ std::size_t __from, std::size_t __to)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__resize(__obj, __from, __to);
-}
+ _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__resize(__obj, __from, __to);
+ }
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_LIST_TO_VECTOR_H__ */
diff --git a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
index e715e4cd467..cc7c849a422 100644
--- a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
+++ b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,256 +37,261 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H
#define _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
namespace __gnu_profile
{
-
-inline int __log2(size_t __size)
-{
- for (int __bit_count = sizeof(size_t) - 1; __bit_count >= 0; -- __bit_count)
+ inline int
+ __log2(std::size_t __size)
{
- if ((2 << __bit_count) & __size) {
- return __bit_count;
- }
+ for (int __bit_count = sizeof(std::size_t) - 1; __bit_count >= 0;
+ -- __bit_count)
+ if ((2 << __bit_count) & __size)
+ return __bit_count;
+ return 0;
}
- return 0;
-}
-
-inline float __map_insert_cost(size_t __size)
-{
- return (_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor).__value
- * static_cast<float>(__log2(__size)));
-}
-
-inline float __map_erase_cost(size_t __size)
-{
- return (_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor).__value
- * static_cast<float>(__log2(__size)));
-}
-inline float __map_find_cost(size_t __size)
-{
- return (_GLIBCXX_PROFILE_DATA(__map_find_cost_factor).__value
- * static_cast<float>(__log2(__size)));
-}
-
-/** @brief A map-to-unordered_map instrumentation line in the object table. */
-class __map2umap_info: public __object_info_base
-{
- public:
- __map2umap_info()
- : _M_insert(0), _M_erase(0), _M_find(0), _M_iterate(0),
- _M_map_cost(0.0), _M_umap_cost(0.0), _M_valid(true) {}
- __map2umap_info(__stack_t __stack)
- : __object_info_base(__stack), _M_insert(0), _M_erase(0), _M_find(0),
- _M_iterate(0), _M_map_cost(0.0), _M_umap_cost(0.0), _M_valid(true) {}
- virtual ~__map2umap_info() {}
- __map2umap_info(const __map2umap_info& o);
- void __merge(const __map2umap_info& o);
- void __write(FILE* __f) const;
- float __magnitude() const { return _M_map_cost - _M_umap_cost; }
- const char* __advice() const;
-
- void __record_insert(size_t __size, size_t __count);
- void __record_erase(size_t __size, size_t __count);
- void __record_find(size_t __size);
- void __record_iterate(size_t __count);
- void __record_invalidate();
-
- private:
- size_t _M_insert;
- size_t _M_erase;
- size_t _M_find;
- size_t _M_iterate;
- float _M_umap_cost;
- float _M_map_cost;
- bool _M_valid;
-};
-
-inline const char* __map2umap_info::__advice() const
-{
- return strdup("change std::map to std::unordered_map");
-}
-
-inline __map2umap_info::__map2umap_info(const __map2umap_info& __o)
- : __object_info_base(__o),
- _M_insert(__o._M_insert),
- _M_erase(__o._M_erase),
- _M_find(__o._M_find),
- _M_iterate(__o._M_iterate),
- _M_map_cost(__o._M_map_cost),
- _M_umap_cost(__o._M_umap_cost),
- _M_valid(__o._M_valid)
-{}
-
-inline void __map2umap_info::__merge(const __map2umap_info& __o)
-{
- _M_insert += __o._M_insert;
- _M_erase += __o._M_erase;
- _M_find += __o._M_find;
- _M_map_cost += __o._M_map_cost;
- _M_umap_cost += __o._M_umap_cost;
- _M_valid &= __o._M_valid;
-}
-
-inline void __map2umap_info:: __record_insert(size_t __size, size_t __count)
-{
- _M_insert += __count;
- _M_map_cost += __count * __map_insert_cost(__size);
- _M_umap_cost += (__count
- * _GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor).__value);
-}
-
-inline void __map2umap_info:: __record_erase(size_t __size, size_t __count)
-{
- _M_erase += __count;
- _M_map_cost += __count * __map_erase_cost(__size);
- _M_umap_cost += (__count
- * _GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor).__value);
-}
+ inline float
+ __map_insert_cost(std::size_t __size)
+ { return (_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor).__value
+ * static_cast<float>(__log2(__size))); }
+
+ inline float
+ __map_erase_cost(std::size_t __size)
+ { return (_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor).__value
+ * static_cast<float>(__log2(__size))); }
+
+ inline float
+ __map_find_cost(std::size_t __size)
+ { return (_GLIBCXX_PROFILE_DATA(__map_find_cost_factor).__value
+ * static_cast<float>(__log2(__size))); }
+
+ /** @brief A map-to-unordered_map instrumentation line in the
+ object table. */
+ class __map2umap_info
+ : public __object_info_base
+ {
+ public:
+ __map2umap_info()
+ : _M_insert(0), _M_erase(0), _M_find(0), _M_iterate(0),
+ _M_umap_cost(0.0), _M_map_cost(0.0), _M_valid(true) { }
+
+ __map2umap_info(__stack_t __stack)
+ : __object_info_base(__stack), _M_insert(0), _M_erase(0), _M_find(0),
+ _M_iterate(0), _M_umap_cost(0.0), _M_map_cost(0.0), _M_valid(true) { }
+
+ virtual ~__map2umap_info() { }
+
+ __map2umap_info(const __map2umap_info& __o)
+ : __object_info_base(__o), _M_insert(__o._M_insert),
+ _M_erase(__o._M_erase), _M_find(__o._M_find),
+ _M_iterate(__o._M_iterate), _M_umap_cost(__o._M_umap_cost),
+ _M_map_cost(__o._M_map_cost), _M_valid(__o._M_valid) { }
+
+ void
+ __merge(const __map2umap_info& __o)
+ {
+ _M_insert += __o._M_insert;
+ _M_erase += __o._M_erase;
+ _M_find += __o._M_find;
+ _M_umap_cost += __o._M_umap_cost;
+ _M_map_cost += __o._M_map_cost;
+ _M_valid &= __o._M_valid;
+ }
-inline void __map2umap_info:: __record_find(size_t __size)
-{
- _M_find += 1;
- _M_map_cost += __map_find_cost(__size);
- _M_umap_cost += _GLIBCXX_PROFILE_DATA(__umap_find_cost_factor).__value;
-}
+ void
+ __write(FILE* __f) const
+ {
+ std::fprintf(__f, "%Zu %Zu %Zu %Zu %.0f %.0f %s\n",
+ _M_insert, _M_erase, _M_find, _M_iterate, _M_map_cost,
+ _M_umap_cost, _M_valid ? "valid" : "invalid");
+ }
-inline void __map2umap_info:: __record_iterate(size_t __count)
-{
- _M_iterate += __count;
- _M_map_cost += (__count
- * _GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor).__value);
- _M_umap_cost += (
- __count * _GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor).__value);
-}
-
-inline void __map2umap_info:: __record_invalidate()
-{
- _M_valid = false;
-}
+ float
+ __magnitude() const
+ { return _M_map_cost - _M_umap_cost; }
+
+ std::string
+ __advice() const
+ { return "change std::map to std::unordered_map"; }
+
+ void
+ __record_insert(std::size_t __size, std::size_t __count)
+ {
+ _M_insert += __count;
+ _M_map_cost += __count * __map_insert_cost(__size);
+ _M_umap_cost
+ += (__count
+ * _GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor).__value);
+ }
-inline void __map2umap_info::__write(FILE* __f) const
-{
- fprintf(__f, "%Zu %Zu %Zu %Zu %.0f %.0f %s\n",
- _M_insert, _M_erase, _M_find, _M_iterate, _M_map_cost, _M_umap_cost,
- _M_valid ? "valid" : "invalid");
-}
+ void
+ __record_erase(std::size_t __size, std::size_t __count)
+ {
+ _M_erase += __count;
+ _M_map_cost += __count * __map_erase_cost(__size);
+ _M_umap_cost
+ += (__count
+ * _GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor).__value);
+ }
-/** @brief A map-to-unordered_map instrumentation line in the stack table. */
-class __map2umap_stack_info: public __map2umap_info
-{
- public:
- __map2umap_stack_info(const __map2umap_info& o) : __map2umap_info(o) {}
-};
+ void
+ __record_find(std::size_t __size)
+ {
+ _M_find += 1;
+ _M_map_cost += __map_find_cost(__size);
+ _M_umap_cost += _GLIBCXX_PROFILE_DATA(__umap_find_cost_factor).__value;
+ }
-/** @brief Map-to-unordered_map instrumentation producer. */
-class __trace_map2umap
- : public __trace_base<__map2umap_info, __map2umap_stack_info>
-{
- public:
- __trace_map2umap();
-};
+ void
+ __record_iterate(std::size_t __count)
+ {
+ _M_iterate += __count;
+ _M_map_cost
+ += (__count
+ * _GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor).__value);
+ _M_umap_cost
+ += (__count
+ * _GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor).__value);
+ }
-inline __trace_map2umap::__trace_map2umap()
+ void
+ __record_invalidate()
+ { _M_valid = false; }
+
+ private:
+ std::size_t _M_insert;
+ std::size_t _M_erase;
+ std::size_t _M_find;
+ std::size_t _M_iterate;
+ float _M_umap_cost;
+ float _M_map_cost;
+ bool _M_valid;
+ };
+
+
+ /** @brief A map-to-unordered_map instrumentation line in the
+ stack table. */
+ class __map2umap_stack_info
+ : public __map2umap_info
+ {
+ public:
+ __map2umap_stack_info(const __map2umap_info& __o)
+ : __map2umap_info(__o) { }
+ };
+
+ /** @brief Map-to-unordered_map instrumentation producer. */
+ class __trace_map2umap
+ : public __trace_base<__map2umap_info, __map2umap_stack_info>
+ {
+ public:
+ __trace_map2umap()
: __trace_base<__map2umap_info, __map2umap_stack_info>()
-{
- __id = "map-to-unordered-map";
-}
+ { __id = "map-to-unordered-map"; }
+ };
-inline void __trace_map_to_unordered_map_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_map2umap) = new __trace_map2umap();
-}
+ inline void
+ __trace_map_to_unordered_map_init()
+ { _GLIBCXX_PROFILE_DATA(_S_map2umap) = new __trace_map2umap(); }
-inline void __trace_map_to_unordered_map_report(
- FILE* __f, __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_map2umap)) {
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__write(__f);
+ inline void
+ __trace_map_to_unordered_map_report(FILE* __f,
+ __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_map2umap))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_map2umap)->__collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_map2umap)->__write(__f);
+ }
}
-}
-
-inline void __trace_map_to_unordered_map_construct(const void* __obj)
-{
- if (!__profcxx_init()) return;
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__add_object(
- __obj, __map2umap_info(__get_stack()));
-}
-
-inline void __trace_map_to_unordered_map_destruct(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_map_to_unordered_map_construct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__retire_object(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_map2umap)->
+ __add_object(__obj, __map2umap_info(__get_stack()));
+ }
-inline void __trace_map_to_unordered_map_insert(const void* __obj,
- size_t __size, size_t __count)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_map_to_unordered_map_destruct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- __map2umap_info* __info =
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+ _GLIBCXX_PROFILE_DATA(_S_map2umap)->__retire_object(__obj);
+ }
- if (__info) __info->__record_insert(__size, __count);
-}
+ inline void
+ __trace_map_to_unordered_map_insert(const void* __obj,
+ std::size_t __size, std::size_t __count)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_map_to_unordered_map_erase(const void* __obj,
- size_t __size, size_t __count)
-{
- if (!__profcxx_init()) return;
+ __map2umap_info* __info
+ = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
- __map2umap_info* __info =
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+ if (__info)
+ __info->__record_insert(__size, __count);
+ }
- if (__info) __info->__record_erase(__size, __count);
-}
+ inline void
+ __trace_map_to_unordered_map_erase(const void* __obj,
+ std::size_t __size, std::size_t __count)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_map_to_unordered_map_find(const void* __obj, size_t __size)
-{
- if (!__profcxx_init()) return;
+ __map2umap_info* __info
+ = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
- __map2umap_info* __info =
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+ if (__info)
+ __info->__record_erase(__size, __count);
+ }
- if (__info) __info->__record_find(__size);
-}
+ inline void
+ __trace_map_to_unordered_map_find(const void* __obj, std::size_t __size)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_map_to_unordered_map_iterate(const void* __obj,
- size_t __count)
-{
- if (!__profcxx_init()) return;
+ __map2umap_info* __info
+ = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
- __map2umap_info* __info =
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+ if (__info)
+ __info->__record_find(__size);
+ }
- if (__info) __info->__record_iterate(__count);
-}
+ inline void
+ __trace_map_to_unordered_map_iterate(const void* __obj, std::size_t __count)
+ {
+ if (!__profcxx_init())
+ return;
+
+ __map2umap_info* __info
+ = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+
+ if (__info)
+ __info->__record_iterate(__count);
+ }
-inline void __trace_map_to_unordered_map_invalidate(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_map_to_unordered_map_invalidate(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- __map2umap_info* __info =
- _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
+ __map2umap_info* __info
+ = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
- if (__info) __info->__record_invalidate();
-}
+ if (__info)
+ __info->__record_invalidate();
+ }
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_MAP_TO_UNORDERED_MAP_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_node.h b/libstdc++-v3/include/profile/impl/profiler_node.h
index 77654a8f813..d22a3e16b48 100644
--- a/libstdc++-v3/include/profile/impl/profiler_node.h
+++ b/libstdc++-v3/include/profile/impl/profiler_node.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,15 +37,8 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_NODE_H
#define _GLIBCXX_PROFILE_PROFILER_NODE_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdio>
-#include <cstdint>
-#include <cstring>
-#else
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#endif
+#include <cstdio> // FILE, fprintf
+
#include <vector>
#if defined _GLIBCXX_HAVE_EXECINFO_H
#include <execinfo.h>
@@ -53,120 +46,128 @@
namespace __gnu_profile
{
-typedef const void* __object_t;
-typedef void* __instruction_address_t;
-typedef std::_GLIBCXX_STD_PR::vector<__instruction_address_t> __stack_npt;
-typedef __stack_npt* __stack_t;
+ typedef const void* __object_t;
+ typedef void* __instruction_address_t;
+ typedef std::_GLIBCXX_STD_PR::vector<__instruction_address_t> __stack_npt;
+ typedef __stack_npt* __stack_t;
-size_t __stack_max_depth();
+ std::size_t __stack_max_depth();
-inline __stack_t __get_stack()
-{
+ inline __stack_t
+ __get_stack()
+ {
#if defined _GLIBCXX_HAVE_EXECINFO_H
- size_t __max_depth = __stack_max_depth();
- if (__max_depth == 0)
- return NULL;
- __stack_npt __buffer(__max_depth);
- int __depth = backtrace(&__buffer[0], __max_depth);
- __stack_t __stack = new __stack_npt(__depth);
- memcpy(&(*__stack)[0], &__buffer[0], __depth * sizeof(__object_t));
- return __stack;
+ std::size_t __max_depth = __stack_max_depth();
+ if (__max_depth == 0)
+ return 0;
+ __stack_npt __buffer(__max_depth);
+ int __depth = backtrace(&__buffer[0], __max_depth);
+ __stack_t __stack = new __stack_npt(__depth);
+ __builtin_memcpy(&(*__stack)[0], &__buffer[0],
+ __depth * sizeof(__object_t));
+ return __stack;
#else
- return NULL;
-#endif
-}
-
-inline __size(const __stack_t& __stack)
-{
- if (!__stack) {
return 0;
- } else {
- return __stack->size();
- }
-}
-
-inline void __write(FILE* __f, const __stack_t __stack)
-{
- if (!__stack) {
- return;
- }
-
- __stack_npt::const_iterator __it;
- for (__it = __stack->begin(); __it != __stack->end(); ++__it) {
- fprintf(__f, "%p ", *__it);
+#endif
}
-}
-/** @brief Hash function for summary trace using call stack as index. */
-class __stack_hash
-{
- public:
- size_t operator()(const __stack_t __s) const
+ inline std::size_t
+ __size(__stack_t __stack)
{
- if (!__s) {
+ if (!__stack)
return 0;
- }
+ else
+ return __stack->size();
+ }
- uintptr_t __index = 0;
+ // XXX
+ inline void
+ __write(FILE* __f, __stack_t __stack)
+ {
+ if (!__stack)
+ return;
+
__stack_npt::const_iterator __it;
- for (__it = __s->begin(); __it != __s->end(); ++__it) {
- __index += reinterpret_cast<uintptr_t>(*__it);
- }
- return __index;
+ for (__it = __stack->begin(); __it != __stack->end(); ++__it)
+ std::fprintf(__f, "%p ", *__it);
}
- bool operator() (const __stack_t __stack1, const __stack_t __stack2) const
+ /** @brief Hash function for summary trace using call stack as index. */
+ class __stack_hash
{
- if (!__stack1 && !__stack2) return true;
- if (!__stack1 || !__stack2) return false;
- if (__stack1->size() != __stack2->size()) return false;
-
- size_t __byte_size = __stack1->size() * sizeof(__stack_npt::value_type);
- return memcmp(&(*__stack1)[0], &(*__stack2)[0], __byte_size) == 0;
- }
-};
+ public:
+ std::size_t
+ operator()(__stack_t __s) const
+ {
+ if (!__s)
+ return 0;
+
+ __UINTPTR_TYPE__ __index = 0;
+ __stack_npt::const_iterator __it;
+ for (__it = __s->begin(); __it != __s->end(); ++__it)
+ __index += reinterpret_cast<__UINTPTR_TYPE__>(*__it);
+ return __index;
+ }
-/** @brief Base class for a line in the object table. */
-class __object_info_base
-{
- public:
- __object_info_base() {}
- __object_info_base(__stack_t __stack);
- __object_info_base(const __object_info_base& o);
- virtual ~__object_info_base() {}
- bool __is_valid() const { return _M_valid; }
- __stack_t __stack() const { return _M_stack; }
- virtual void __write(FILE* f) const = 0;
-
- protected:
- __stack_t _M_stack;
- bool _M_valid;
-};
-
-inline __object_info_base::__object_info_base(__stack_t __stack)
-{
- _M_stack = __stack;
- _M_valid = true;
-}
+ bool operator() (__stack_t __stack1, __stack_t __stack2) const
+ {
+ if (!__stack1 && !__stack2)
+ return true;
+ if (!__stack1 || !__stack2)
+ return false;
+ if (__stack1->size() != __stack2->size())
+ return false;
+
+ std::size_t __byte_size
+ = __stack1->size() * sizeof(__stack_npt::value_type);
+ return __builtin_memcmp(&(*__stack1)[0], &(*__stack2)[0],
+ __byte_size) == 0;
+ }
+ };
-inline __object_info_base::__object_info_base(const __object_info_base& __o)
-{
- _M_stack = __o._M_stack;
- _M_valid = __o._M_valid;
-}
-/** @brief Base class for a line in the stack table. */
-template<typename __object_info>
-class __stack_info_base
-{
- public:
- __stack_info_base() {}
- __stack_info_base(const __object_info& __info) = 0;
- virtual ~__stack_info_base() {}
- void __merge(const __object_info& __info) = 0;
- virtual float __magnitude() const = 0;
- virtual const char* __get_id() const = 0;
-};
+ /** @brief Base class for a line in the object table. */
+ class __object_info_base
+ {
+ public:
+ __object_info_base() { }
+
+ __object_info_base(__stack_t __stack)
+ : _M_stack(__stack), _M_valid(true) { }
+
+ __object_info_base(const __object_info_base& __o)
+ : _M_stack(__o._M_stack), _M_valid(__o._M_valid) { }
+
+ virtual ~__object_info_base() { }
+
+ bool
+ __is_valid() const
+ { return _M_valid; }
+
+ __stack_t
+ __stack() const
+ { return _M_stack; }
+
+ virtual void __write(FILE* f) const = 0;
+
+ protected:
+ __stack_t _M_stack;
+ bool _M_valid;
+ };
+
+
+ /** @brief Base class for a line in the stack table. */
+ template<typename __object_info>
+ class __stack_info_base
+ {
+ public:
+ __stack_info_base() { }
+ __stack_info_base(const __object_info& __info) = 0;
+ virtual ~__stack_info_base() {}
+ void __merge(const __object_info& __info) = 0;
+ virtual float __magnitude() const = 0;
+ virtual const char* __get_id() const = 0;
+ };
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_NODE_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_state.h b/libstdc++-v3/include/profile/impl/profiler_state.h
index 540c3e4bf0c..111b97e0eca 100644
--- a/libstdc++-v3/include/profile/impl/profiler_state.h
+++ b/libstdc++-v3/include/profile/impl/profiler_state.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -39,32 +39,35 @@
namespace __gnu_profile
{
+ enum __state_type { __ON, __OFF, __INVALID };
-enum __state_type { __ON, __OFF, __INVALID };
+ _GLIBCXX_PROFILE_DEFINE_DATA(__state_type, __state, __INVALID);
-_GLIBCXX_PROFILE_DEFINE_DATA(__state_type, __state, __INVALID);
+ inline bool
+ __turn(__state_type __s)
+ { return (_GLIBCXX_PROFILE_DATA(__state)
+ == __sync_val_compare_and_swap(&_GLIBCXX_PROFILE_DATA(__state),
+ __INVALID, __s)); }
-inline bool __turn(__state_type __s)
-{
- return (_GLIBCXX_PROFILE_DATA(__state)
- == __sync_val_compare_and_swap(&_GLIBCXX_PROFILE_DATA(__state),
- __INVALID, __s));
-}
-
-inline bool __turn_on()
-{ return __turn(__ON); }
+ inline bool
+ __turn_on()
+ { return __turn(__ON); }
-inline bool __turn_off()
-{ return __turn(__OFF); }
+ inline bool
+ __turn_off()
+ { return __turn(__OFF); }
-inline bool __is_on()
-{ return _GLIBCXX_PROFILE_DATA(__state) == __ON; }
+ inline bool
+ __is_on()
+ { return _GLIBCXX_PROFILE_DATA(__state) == __ON; }
-inline bool __is_off()
-{ return _GLIBCXX_PROFILE_DATA(__state) == __OFF; }
+ inline bool
+ __is_off()
+ { return _GLIBCXX_PROFILE_DATA(__state) == __OFF; }
-inline bool __is_invalid()
-{ return _GLIBCXX_PROFILE_DATA(__state) == __INVALID; }
+ inline bool
+ __is_invalid()
+ { return _GLIBCXX_PROFILE_DATA(__state) == __INVALID; }
} // end namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_STATE_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_trace.h b/libstdc++-v3/include/profile/impl/profiler_trace.h
index c6ddfe774a8..1dfdd013b08 100644
--- a/libstdc++-v3/include/profile/impl/profiler_trace.h
+++ b/libstdc++-v3/include/profile/impl/profiler_trace.h
@@ -37,647 +37,630 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_TRACE_H
#define _GLIBCXX_PROFILE_PROFILER_TRACE_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#include <cstdio> // fopen, fclose, fprintf, FILE
#include <cerrno>
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
+#include <cstdlib> // atof, atoi, strtol, getenv, atexit, abort
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
#define _GLIBCXX_IMPL_UNORDERED_MAP std::_GLIBCXX_STD_PR::unordered_map
#include <unordered_map>
#else
-#include <errno.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
#include <tr1/unordered_map>
#define _GLIBCXX_IMPL_UNORDERED_MAP std::tr1::unordered_map
#endif
-#include <algorithm>
+#include <ext/concurrence.h>
#include <fstream>
#include <string>
#include <utility>
+#include <vector>
-#if (defined _GLIBCXX_PROFILE_THREADS) && !(defined _GLIBCXX_HAVE_TLS)
-#error You do not seem to have TLS support, which is required by the profile \
- mode. If your program is not multithreaded, recompile with \
- -D_GLIBCXX_PROFILE_NO_THREADS
-#endif
-
-#if defined _GLIBCXX_PROFILE_THREADS && defined _GLIBCXX_HAVE_TLS
-#include <pthread.h>
-#endif
-
+#include "profile/impl/profiler_algos.h"
#include "profile/impl/profiler_state.h"
#include "profile/impl/profiler_node.h"
namespace __gnu_profile
{
+ /** @brief Internal environment. Values can be set one of two ways:
+ 1. In config file "var = value". The default config file path is
+ libstdcxx-profile.conf.
+ 2. By setting process environment variables. For instance, in a Bash
+ shell you can set the unit cost of iterating through a map like this:
+ export __map_iterate_cost_factor=5.0.
+ If a value is set both in the input file and through an environment
+ variable, the environment value takes precedence. */
+ typedef _GLIBCXX_IMPL_UNORDERED_MAP<std::string, std::string> __env_t;
-#if defined _GLIBCXX_PROFILE_THREADS && defined _GLIBCXX_HAVE_TLS
-#define _GLIBCXX_IMPL_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
-typedef pthread_mutex_t __mutex_t;
-/** @brief Pthread mutex wrapper. */
-_GLIBCXX_PROFILE_DEFINE_DATA(__mutex_t, __global_lock,
- PTHREAD_MUTEX_INITIALIZER);
-inline void __lock(__mutex_t& __m) { pthread_mutex_lock(&__m); }
-inline void __unlock(__mutex_t& __m) { pthread_mutex_unlock(&__m); }
-#else
-typedef int __mutex_t;
-/** @brief Mock mutex interface. */
-#define _GLIBCXX_IMPL_MUTEX_INITIALIZER 0
-_GLIBCXX_PROFILE_DEFINE_DATA(__mutex_t, __global_lock, 0);
-inline void __lock(__mutex_t& __m) {}
-inline void __unlock(__mutex_t& __m) {}
-#endif
+ _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__env_t, __env);
-/** @brief Representation of a warning. */
-struct __warning_data
-{
- float __magnitude;
- __stack_t __context;
- const char* __warning_id;
- const char* __warning_message;
- __warning_data();
- __warning_data(float __m, __stack_t __c, const char* __id,
- const char* __msg);
- bool operator>(const struct __warning_data& other) const;
-};
-
-inline __warning_data::__warning_data()
- : __magnitude(0.0), __context(NULL), __warning_id(NULL),
- __warning_message(NULL)
-{
-}
+ /** @brief Master lock. */
+ _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA(__gnu_cxx::__mutex, __global_lock);
-inline __warning_data::__warning_data(float __m, __stack_t __c,
- const char* __id, const char* __msg)
- : __magnitude(__m), __context(__c), __warning_id(__id),
- __warning_message(__msg)
-{
-}
+ /** @brief Representation of a warning. */
+ struct __warning_data
+ {
+ float __magnitude;
+ __stack_t __context;
+ const char* __warning_id;
+ std::string __warning_message;
+
+ __warning_data()
+ : __magnitude(0.0), __context(0), __warning_id(0) { }
+
+ __warning_data(float __m, __stack_t __c, const char* __id,
+ const std::string& __msg)
+ : __magnitude(__m), __context(__c), __warning_id(__id),
+ __warning_message(__msg) { }
+
+ bool
+ operator<(const __warning_data& __other) const
+ { return __magnitude < __other.__magnitude; }
+ };
+
+ typedef std::_GLIBCXX_STD_PR::vector<__warning_data> __warning_vector_t;
+
+ // Defined in profiler_<diagnostic name>.h.
+ class __trace_hash_func;
+ class __trace_hashtable_size;
+ class __trace_map2umap;
+ class __trace_vector_size;
+ class __trace_vector_to_list;
+ class __trace_list_to_slist;
+ class __trace_list_to_vector;
+ void __trace_vector_size_init();
+ void __trace_hashtable_size_init();
+ void __trace_hash_func_init();
+ void __trace_vector_to_list_init();
+ void __trace_list_to_slist_init();
+ void __trace_list_to_vector_init();
+ void __trace_map_to_unordered_map_init();
+ void __trace_vector_size_report(FILE*, __warning_vector_t&);
+ void __trace_hashtable_size_report(FILE*, __warning_vector_t&);
+ void __trace_hash_func_report(FILE*, __warning_vector_t&);
+ void __trace_vector_to_list_report(FILE*, __warning_vector_t&);
+ void __trace_list_to_slist_report(FILE*, __warning_vector_t&);
+ void __trace_list_to_vector_report(FILE*, __warning_vector_t&);
+ void __trace_map_to_unordered_map_report(FILE*, __warning_vector_t&);
+
+ struct __cost_factor
+ {
+ const char* __env_var;
+ float __value;
+ };
+
+ typedef std::_GLIBCXX_STD_PR::vector<__cost_factor*> __cost_factor_vector;
+
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_hash_func*, _S_hash_func, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_hashtable_size*, _S_hashtable_size, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_map2umap*, _S_map2umap, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_size*, _S_vector_size, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_to_list*, _S_vector_to_list, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_slist*, _S_list_to_slist, 0);
+ _GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_vector*, _S_list_to_vector, 0);
+
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_shift_cost_factor,
+ {"__vector_shift_cost_factor", 1.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_iterate_cost_factor,
+ {"__vector_iterate_cost_factor", 1.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_resize_cost_factor,
+ {"__vector_resize_cost_factor", 1.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_shift_cost_factor,
+ {"__list_shift_cost_factor", 0.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_iterate_cost_factor,
+ {"__list_iterate_cost_factor", 10.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_resize_cost_factor,
+ {"__list_resize_cost_factor", 0.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_insert_cost_factor,
+ {"__map_insert_cost_factor", 1.5});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_erase_cost_factor,
+ {"__map_erase_cost_factor", 1.5});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_find_cost_factor,
+ {"__map_find_cost_factor", 1});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_iterate_cost_factor,
+ {"__map_iterate_cost_factor", 2.3});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_insert_cost_factor,
+ {"__umap_insert_cost_factor", 12.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_erase_cost_factor,
+ {"__umap_erase_cost_factor", 12.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_find_cost_factor,
+ {"__umap_find_cost_factor", 10.0});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_iterate_cost_factor,
+ {"__umap_iterate_cost_factor", 1.7});
+ _GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor_vector*, __cost_factors, 0);
+
+ _GLIBCXX_PROFILE_DEFINE_DATA(const char*, _S_trace_file_name,
+ _GLIBCXX_PROFILE_TRACE_PATH_ROOT);
+ _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_warn_count,
+ _GLIBCXX_PROFILE_MAX_WARN_COUNT);
+ _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_stack_depth,
+ _GLIBCXX_PROFILE_MAX_STACK_DEPTH);
+ _GLIBCXX_PROFILE_DEFINE_DATA(std::size_t, _S_max_mem,
+ _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC);
+
+ inline std::size_t
+ __stack_max_depth()
+ { return _GLIBCXX_PROFILE_DATA(_S_max_stack_depth); }
+
+ inline std::size_t
+ __max_mem()
+ { return _GLIBCXX_PROFILE_DATA(_S_max_mem); }
+
+ /** @brief Base class for all trace producers. */
+ template<typename __object_info, typename __stack_info>
+ class __trace_base
+ {
+ public:
+ // Do not pick the initial size too large, as we don't know which
+ // diagnostics are more active.
+ __trace_base()
+ : __object_table(10000), __stack_table(10000),
+ __stack_table_byte_size(0), __id(0) { }
+
+ virtual ~__trace_base() { }
+
+ void __add_object(__object_t object, __object_info __info);
+ __object_info* __get_object_info(__object_t __object);
+ void __retire_object(__object_t __object);
+ void __write(FILE* __f);
+ void __collect_warnings(__warning_vector_t& __warnings);
+
+ private:
+ __gnu_cxx::__mutex __object_table_lock;
+ __gnu_cxx::__mutex __stack_table_lock;
+ typedef _GLIBCXX_IMPL_UNORDERED_MAP<__object_t,
+ __object_info> __object_table_t;
+ typedef _GLIBCXX_IMPL_UNORDERED_MAP<__stack_t, __stack_info,
+ __stack_hash,
+ __stack_hash> __stack_table_t;
+ __object_table_t __object_table;
+ __stack_table_t __stack_table;
+ std::size_t __stack_table_byte_size;
+
+ protected:
+ const char* __id;
+ };
+
+ template<typename __object_info, typename __stack_info>
+ void
+ __trace_base<__object_info, __stack_info>::
+ __collect_warnings(__warning_vector_t& __warnings)
+ {
+ for (typename __stack_table_t::iterator __it
+ = __stack_table.begin(); __it != __stack_table.end(); ++__it)
+ __warnings.push_back(__warning_data((*__it).second.__magnitude(),
+ (*__it).first, __id,
+ (*__it).second.__advice()));
+ }
-inline bool __warning_data::operator>(const struct __warning_data& other) const
-{
- return __magnitude > other.__magnitude;
-}
-
-typedef std::_GLIBCXX_STD_PR::vector<__warning_data> __warning_vector_t;
-
-// Defined in profiler_<diagnostic name>.h.
-class __trace_hash_func;
-class __trace_hashtable_size;
-class __trace_map2umap;
-class __trace_vector_size;
-class __trace_vector_to_list;
-class __trace_list_to_slist;
-class __trace_list_to_vector;
-void __trace_vector_size_init();
-void __trace_hashtable_size_init();
-void __trace_hash_func_init();
-void __trace_vector_to_list_init();
-void __trace_list_to_slist_init();
-void __trace_list_to_vector_init();
-void __trace_map_to_unordered_map_init();
-void __trace_vector_size_report(FILE*, __warning_vector_t&);
-void __trace_hashtable_size_report(FILE*, __warning_vector_t&);
-void __trace_hash_func_report(FILE*, __warning_vector_t&);
-void __trace_vector_to_list_report(FILE*, __warning_vector_t&);
-void __trace_list_to_slist_report(FILE*, __warning_vector_t&);
-void __trace_list_to_vector_report(FILE*, __warning_vector_t&);
-void __trace_map_to_unordered_map_report(FILE*, __warning_vector_t&);
-
-// Utility functions.
-inline size_t __max(size_t __a, size_t __b)
-{
- return __a >= __b ? __a : __b;
-}
+ template<typename __object_info, typename __stack_info>
+ void
+ __trace_base<__object_info, __stack_info>::
+ __add_object(__object_t __object, __object_info __info)
+ {
+ if (__max_mem() == 0
+ || __object_table.size() * sizeof(__object_info) <= __max_mem())
+ {
+ this->__object_table_lock.lock();
+ __object_table.insert(typename __object_table_t::
+ value_type(__object, __info));
+ this->__object_table_lock.unlock();
+ }
+ }
-inline size_t __min(size_t __a, size_t __b)
-{
- return __a <= __b ? __a : __b;
-}
+ template<typename __object_info, typename __stack_info>
+ __object_info*
+ __trace_base<__object_info, __stack_info>::
+ __get_object_info(__object_t __object)
+ {
+ // XXX: Revisit this to see if we can decrease mutex spans.
+ // Without this mutex, the object table could be rehashed during an
+ // insertion on another thread, which could result in a segfault.
+ this->__object_table_lock.lock();
+ typename __object_table_t::iterator __object_it
+ = __object_table.find(__object);
+
+ if (__object_it == __object_table.end())
+ {
+ this->__object_table_lock.unlock();
+ return 0;
+ }
+ else
+ {
+ this->__object_table_lock.unlock();
+ return &__object_it->second;
+ }
+ }
-struct __cost_factor
-{
- const char* __env_var;
- float __value;
-};
-
-typedef std::_GLIBCXX_STD_PR::vector<__cost_factor*> __cost_factor_vector;
-
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_hash_func*, _S_hash_func, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_hashtable_size*, _S_hashtable_size, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_map2umap*, _S_map2umap, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_size*, _S_vector_size, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_vector_to_list*, _S_vector_to_list, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_slist*, _S_list_to_slist, NULL);
-_GLIBCXX_PROFILE_DEFINE_DATA(__trace_list_to_vector*, _S_list_to_vector, NULL);
-
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_shift_cost_factor,
- {"__vector_shift_cost_factor", 1.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_iterate_cost_factor,
- {"__vector_iterate_cost_factor", 1.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __vector_resize_cost_factor,
- {"__vector_resize_cost_factor", 1.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_shift_cost_factor,
- {"__list_shift_cost_factor", 0.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_iterate_cost_factor,
- {"__list_iterate_cost_factor", 10.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __list_resize_cost_factor,
- {"__list_resize_cost_factor", 0.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_insert_cost_factor,
- {"__map_insert_cost_factor", 1.5});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_erase_cost_factor,
- {"__map_erase_cost_factor", 1.5});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_find_cost_factor,
- {"__map_find_cost_factor", 1});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __map_iterate_cost_factor,
- {"__map_iterate_cost_factor", 2.3});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_insert_cost_factor,
- {"__umap_insert_cost_factor", 12.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_erase_cost_factor,
- {"__umap_erase_cost_factor", 12.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_find_cost_factor,
- {"__umap_find_cost_factor", 10.0});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor, __umap_iterate_cost_factor,
- {"__umap_iterate_cost_factor", 1.7});
-_GLIBCXX_PROFILE_DEFINE_DATA(__cost_factor_vector*, __cost_factors, NULL);
-
-_GLIBCXX_PROFILE_DEFINE_DATA(const char*, _S_trace_file_name,
- _GLIBCXX_PROFILE_TRACE_PATH_ROOT);
-_GLIBCXX_PROFILE_DEFINE_DATA(size_t, _S_max_warn_count,
- _GLIBCXX_PROFILE_MAX_WARN_COUNT);
-_GLIBCXX_PROFILE_DEFINE_DATA(size_t, _S_max_stack_depth,
- _GLIBCXX_PROFILE_MAX_STACK_DEPTH);
-_GLIBCXX_PROFILE_DEFINE_DATA(size_t, _S_max_mem,
- _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC);
-
-inline size_t __stack_max_depth()
-{
- return _GLIBCXX_PROFILE_DATA(_S_max_stack_depth);
-}
+ template<typename __object_info, typename __stack_info>
+ void
+ __trace_base<__object_info, __stack_info>::
+ __retire_object(__object_t __object)
+ {
+ this->__object_table_lock.lock();
+ this->__stack_table_lock.lock();
+ typename __object_table_t::iterator __object_it
+ = __object_table.find(__object);
+
+ if (__object_it != __object_table.end())
+ {
+ const __object_info& __info = __object_it->second;
+ const __stack_t& __stack = __info.__stack();
+ typename __stack_table_t::iterator __stack_it
+ = __stack_table.find(__stack);
+
+ if (__stack_it == __stack_table.end())
+ {
+ // First occurence of this call context.
+ if (__max_mem() == 0 || __stack_table_byte_size < __max_mem())
+ {
+ __stack_table_byte_size
+ += (sizeof(__instruction_address_t) * __size(__stack)
+ + sizeof(__stack) + sizeof(__stack_info));
+ __stack_table.insert(make_pair(__stack,
+ __stack_info(__info)));
+ }
+ }
+ else
+ {
+ // Merge object info into info summary for this call context.
+ __stack_it->second.__merge(__info);
+ delete __stack;
+ }
+ __object_table.erase(__object);
+ }
+
+ this->__object_table_lock.unlock();
+ this->__stack_table_lock.unlock();
+ }
-inline size_t __max_mem()
-{
- return _GLIBCXX_PROFILE_DATA(_S_max_mem);
-}
+ template<typename __object_info, typename __stack_info>
+ void
+ __trace_base<__object_info, __stack_info>::
+ __write(FILE* __f)
+ {
+ for (typename __stack_table_t::iterator __it
+ = __stack_table.begin(); __it != __stack_table.end(); ++__it)
+ if (__it->second.__is_valid())
+ {
+ std::fprintf(__f, __id);
+ std::fprintf(__f, "|");
+ __gnu_profile::__write(__f, __it->first);
+ std::fprintf(__f, "|");
+ __it->second.__write(__f);
+ }
+ }
-/** @brief Base class for all trace producers. */
-template <typename __object_info, typename __stack_info>
-class __trace_base
-{
- public:
- __trace_base();
- virtual ~__trace_base() {}
-
- void __add_object(__object_t object, __object_info __info);
- __object_info* __get_object_info(__object_t __object);
- void __retire_object(__object_t __object);
- void __write(FILE* f);
- void __collect_warnings(__warning_vector_t& __warnings);
-
- void __lock_object_table();
- void __lock_stack_table();
- void __unlock_object_table();
- void __unlock_stack_table();
-
- private:
- __mutex_t __object_table_lock;
- __mutex_t __stack_table_lock;
- typedef _GLIBCXX_IMPL_UNORDERED_MAP<__object_t,
- __object_info> __object_table_t;
- typedef _GLIBCXX_IMPL_UNORDERED_MAP<__stack_t, __stack_info, __stack_hash,
- __stack_hash> __stack_table_t;
- __object_table_t __object_table;
- __stack_table_t __stack_table;
- size_t __stack_table_byte_size;
-
- protected:
- const char* __id;
-};
-
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__collect_warnings(
- __warning_vector_t& __warnings)
-{
- typename __stack_table_t::iterator __i = __stack_table.begin();
- for ( ; __i != __stack_table.end(); ++__i )
+ inline std::size_t
+ __env_to_size_t(const char* __env_var, std::size_t __default_value)
{
- __warnings.push_back(__warning_data((*__i).second.__magnitude(),
- (*__i).first,
- __id,
- (*__i).second.__advice()));
+ char* __env_value = std::getenv(__env_var);
+ if (__env_value)
+ {
+ errno = 0;
+ long __converted_value = std::strtol(__env_value, 0, 10);
+ if (errno || __converted_value < 0)
+ {
+ std::fprintf(stderr,
+ "Bad value for environment variable '%s'.\n",
+ __env_var);
+ std::abort();
+ }
+ else
+ return static_cast<std::size_t>(__converted_value);
+ }
+ else
+ return __default_value;
}
-}
-
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__lock_object_table()
-{
- __lock(this->__object_table_lock);
-}
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__lock_stack_table()
-{
- __lock(this->__stack_table_lock);
-}
-
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__unlock_object_table()
-{
- __unlock(this->__object_table_lock);
-}
-
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__unlock_stack_table()
-{
- __unlock(this->__stack_table_lock);
-}
-
-template <typename __object_info, typename __stack_info>
-__trace_base<__object_info, __stack_info>::__trace_base()
-{
- // Do not pick the initial size too large, as we don't know which diagnostics
- // are more active.
- __object_table.rehash(10000);
- __stack_table.rehash(10000);
- __stack_table_byte_size = 0;
- __id = NULL;
- __object_table_lock = __stack_table_lock = _GLIBCXX_IMPL_MUTEX_INITIALIZER;
-}
-
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__add_object(
- __object_t __object, __object_info __info)
-{
- if (__max_mem() == 0
- || __object_table.size() * sizeof(__object_info) <= __max_mem()) {
- __lock_object_table();
- __object_table.insert(
- typename __object_table_t::value_type(__object, __info));
- __unlock_object_table();
+ inline void
+ __set_max_stack_trace_depth()
+ {
+ _GLIBCXX_PROFILE_DATA(_S_max_stack_depth)
+ = __env_to_size_t(_GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR,
+ _GLIBCXX_PROFILE_DATA(_S_max_stack_depth));
}
-}
-template <typename __object_info, typename __stack_info>
-__object_info* __trace_base<__object_info, __stack_info>::__get_object_info(
- __object_t __object)
-{
- // XXX: Revisit this to see if we can decrease mutex spans.
- // Without this mutex, the object table could be rehashed during an
- // insertion on another thread, which could result in a segfault.
- __lock_object_table();
- typename __object_table_t::iterator __object_it =
- __object_table.find(__object);
- if (__object_it == __object_table.end()){
- __unlock_object_table();
- return NULL;
- } else {
- __unlock_object_table();
- return &__object_it->second;
+ inline void
+ __set_max_mem()
+ {
+ _GLIBCXX_PROFILE_DATA(_S_max_mem)
+ = __env_to_size_t(_GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR,
+ _GLIBCXX_PROFILE_DATA(_S_max_mem));
}
-}
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__retire_object(
- __object_t __object)
-{
- __lock_object_table();
- __lock_stack_table();
- typename __object_table_t::iterator __object_it =
- __object_table.find(__object);
- if (__object_it != __object_table.end()){
- const __object_info& __info = __object_it->second;
- const __stack_t& __stack = __info.__stack();
- typename __stack_table_t::iterator __stack_it =
- __stack_table.find(__stack);
- if (__stack_it == __stack_table.end()) {
- // First occurence of this call context.
- if (__max_mem() == 0 || __stack_table_byte_size < __max_mem()) {
- __stack_table_byte_size +=
- (sizeof(__instruction_address_t) * __size(__stack)
- + sizeof(__stack) + sizeof(__stack_info));
- __stack_table.insert(make_pair(__stack, __stack_info(__info)));
+ inline int
+ __log_magnitude(float __f)
+ {
+ const float __log_base = 10.0;
+ int __result = 0;
+ int __sign = 1;
+
+ if (__f < 0)
+ {
+ __f = -__f;
+ __sign = -1;
}
- } else {
- // Merge object info into info summary for this call context.
- __stack_it->second.__merge(__info);
- delete __stack;
- }
- __object_table.erase(__object);
+
+ while (__f > __log_base)
+ {
+ ++__result;
+ __f /= 10.0;
+ }
+ return __sign * __result;
}
- __unlock_stack_table();
- __unlock_object_table();
-}
-template <typename __object_info, typename __stack_info>
-void __trace_base<__object_info, __stack_info>::__write(FILE* __f)
-{
- typename __stack_table_t::iterator __it;
-
- for (__it = __stack_table.begin(); __it != __stack_table.end(); __it++) {
- if (__it->second.__is_valid()) {
- fprintf(__f, __id);
- fprintf(__f, "|");
- __gnu_profile::__write(__f, __it->first);
- fprintf(__f, "|");
- __it->second.__write(__f);
- }
+ inline FILE*
+ __open_output_file(const char* __extension)
+ {
+ // The path is made of _S_trace_file_name + "." + extension.
+ std::size_t __root_len
+ = __builtin_strlen(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
+ std::size_t __ext_len = __builtin_strlen(__extension);
+ char* __file_name = new char[__root_len + 1 + __ext_len + 1];
+ __builtin_memcpy(__file_name,
+ _GLIBCXX_PROFILE_DATA(_S_trace_file_name),
+ __root_len);
+ *(__file_name + __root_len) = '.';
+ __builtin_memcpy(__file_name + __root_len + 1,
+ __extension, __ext_len + 1);
+
+ FILE* __out_file = std::fopen(__file_name, "w");
+ if (!__out_file)
+ {
+ std::fprintf(stderr, "Could not open trace file '%s'.\n",
+ __file_name);
+ std::abort();
+ }
+
+ delete[] __file_name;
+ return __out_file;
}
-}
-inline size_t __env_to_size_t(const char* __env_var, size_t __default_value)
-{
- char* __env_value = getenv(__env_var);
- if (__env_value) {
- long int __converted_value = strtol(__env_value, NULL, 10);
- if (errno || __converted_value < 0) {
- fprintf(stderr, "Bad value for environment variable '%s'.\n", __env_var);
- abort();
- } else {
- return static_cast<size_t>(__converted_value);
+ struct __warn
+ {
+ FILE* __file;
+
+ __warn(FILE* __f)
+ { __file = __f; }
+
+ void
+ operator()(const __warning_data& __info)
+ {
+ std::fprintf(__file, __info.__warning_id);
+ std::fprintf(__file, ": improvement = %d",
+ __log_magnitude(__info.__magnitude));
+ std::fprintf(__file, ": call stack = ");
+ __gnu_profile::__write(__file, __info.__context);
+ std::fprintf(__file, ": advice = %s\n",
+ __info.__warning_message.c_str());
}
- } else {
- return __default_value;
+ };
+
+ /** @brief Final report method, registered with @b atexit.
+ *
+ * This can also be called directly by user code, including signal handlers.
+ * It is protected against deadlocks by the reentrance guard in profiler.h.
+ * However, when called from a signal handler that triggers while within
+ * __gnu_profile (under the guarded zone), no output will be produced.
+ */
+ inline void
+ __report(void)
+ {
+ _GLIBCXX_PROFILE_DATA(__global_lock).lock();
+
+ __warning_vector_t __warnings, __top_warnings;
+
+ FILE* __raw_file = __open_output_file("raw");
+ __trace_vector_size_report(__raw_file, __warnings);
+ __trace_hashtable_size_report(__raw_file, __warnings);
+ __trace_hash_func_report(__raw_file, __warnings);
+ __trace_vector_to_list_report(__raw_file, __warnings);
+ __trace_list_to_slist_report(__raw_file, __warnings);
+ __trace_list_to_vector_report(__raw_file, __warnings);
+ __trace_map_to_unordered_map_report(__raw_file, __warnings);
+ std::fclose(__raw_file);
+
+ // Sort data by magnitude, keeping just top N.
+ std::size_t __cutoff = std::min(_GLIBCXX_PROFILE_DATA(_S_max_warn_count),
+ __warnings.size());
+ __top_n(__warnings, __top_warnings, __cutoff);
+
+ FILE* __warn_file = __open_output_file("txt");
+ __for_each(__top_warnings.begin(), __top_warnings.end(),
+ __warn(__warn_file));
+ std::fclose(__warn_file);
+
+ _GLIBCXX_PROFILE_DATA(__global_lock).unlock();
}
-}
-inline void __set_max_stack_trace_depth()
-{
- _GLIBCXX_PROFILE_DATA(_S_max_stack_depth) = __env_to_size_t(
- _GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR,
- _GLIBCXX_PROFILE_DATA(_S_max_stack_depth));
-}
+ inline void
+ __set_trace_path()
+ {
+ char* __env_trace_file_name = std::getenv(_GLIBCXX_PROFILE_TRACE_ENV_VAR);
-inline void __set_max_mem()
-{
- _GLIBCXX_PROFILE_DATA(_S_max_mem) = __env_to_size_t(
- _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR,
- _GLIBCXX_PROFILE_DATA(_S_max_mem));
-}
+ if (__env_trace_file_name)
+ _GLIBCXX_PROFILE_DATA(_S_trace_file_name) = __env_trace_file_name;
-inline int __log_magnitude(float f)
-{
- const float log_base = 10.0;
- int result = 0;
- int sign = 1;
- if (f < 0) {
- f = -f;
- sign = -1;
- }
- while (f > log_base) {
- ++result;
- f /= 10.0;
+ // Make sure early that we can create the trace file.
+ std::fclose(__open_output_file("txt"));
}
- return sign * result;
-}
-struct __warn
-{
- FILE* __file;
- __warn(FILE* __f) { __file = __f; }
- void operator() (const __warning_data& __info)
+ inline void
+ __set_max_warn_count()
{
- fprintf(__file, __info.__warning_id);
- fprintf(__file, ": improvement = %d", __log_magnitude(__info.__magnitude));
- fprintf(__file, ": call stack = ");
- __gnu_profile::__write(__file, __info.__context);
- fprintf(__file, ": advice = %s\n", __info.__warning_message);
- free(
- const_cast<void*>(
- reinterpret_cast<const void*>(__info.__warning_message)));
- }
-};
+ char* __env_max_warn_count_str
+ = std::getenv(_GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR);
-inline FILE* __open_output_file(const char* extension)
-{
- // The path is made of _S_trace_file_name + "." + extension.
- size_t root_len = strlen(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
- size_t ext_len = strlen(extension);
- char* file_name = new char[root_len + 1 + ext_len + 1];
- memcpy(file_name, _GLIBCXX_PROFILE_DATA(_S_trace_file_name), root_len);
- *(file_name + root_len) = '.';
- memcpy(file_name + root_len + 1, extension, ext_len + 1);
- FILE* out_file = fopen(file_name, "w");
- if (out_file) {
- return out_file;
- } else {
- fprintf(stderr, "Could not open trace file '%s'.\n", file_name);
- abort();
+ if (__env_max_warn_count_str)
+ _GLIBCXX_PROFILE_DATA(_S_max_warn_count)
+ = static_cast<std::size_t>(std::atoi(__env_max_warn_count_str));
}
-}
-
-/** @brief Final report method, registered with @b atexit.
- *
- * This can also be called directly by user code, including signal handlers.
- * It is protected against deadlocks by the reentrance guard in profiler.h.
- * However, when called from a signal handler that triggers while within
- * __gnu_profile (under the guarded zone), no output will be produced.
- */
-inline void __report(void)
-{
- __lock(_GLIBCXX_PROFILE_DATA(__global_lock));
-
- __warning_vector_t __warnings;
- FILE* __raw_file = __open_output_file("raw");
- __trace_vector_size_report(__raw_file, __warnings);
- __trace_hashtable_size_report(__raw_file, __warnings);
- __trace_hash_func_report(__raw_file, __warnings);
- __trace_vector_to_list_report(__raw_file, __warnings);
- __trace_list_to_slist_report(__raw_file, __warnings);
- __trace_list_to_vector_report(__raw_file, __warnings);
- __trace_map_to_unordered_map_report(__raw_file, __warnings);
- fclose(__raw_file);
-
- // Sort data by magnitude.
- // XXX: instead of sorting, should collect only top N for better performance.
- size_t __cutoff = __min(_GLIBCXX_PROFILE_DATA(_S_max_warn_count),
- __warnings.size());
+ inline void
+ __read_cost_factors()
+ {
+ std::string __conf_file_name(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
+ __conf_file_name += ".conf";
- std::sort(__warnings.begin(), __warnings.end(),
- std::greater<__warning_vector_t::value_type>());
- __warnings.resize(__cutoff);
+ std::ifstream __conf_file(__conf_file_name.c_str());
- FILE* __warn_file = __open_output_file("txt");
- std::for_each(__warnings.begin(), __warnings.end(), __warn(__warn_file));
- fclose(__warn_file);
+ if (__conf_file.is_open())
+ {
+ std::string __line;
- __unlock(_GLIBCXX_PROFILE_DATA(__global_lock));
-}
+ while (std::getline(__conf_file, __line))
+ {
+ std::string::size_type __i = __line.find_first_not_of(" \t\n\v");
-inline void __set_trace_path()
-{
- char* __env_trace_file_name = getenv(_GLIBCXX_PROFILE_TRACE_ENV_VAR);
+ if (__line.length() <= 0 || __line[__i] == '#')
+ // Skip empty lines or comments.
+ continue;
+ }
- if (__env_trace_file_name) {
- _GLIBCXX_PROFILE_DATA(_S_trace_file_name) = __env_trace_file_name;
- }
-
- // Make sure early that we can create the trace file.
- fclose(__open_output_file("txt"));
-}
-
-inline void __set_max_warn_count()
-{
- char* __env_max_warn_count_str = getenv(
- _GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR);
+ // Trim.
+ __line.erase(__remove(__line.begin(), __line.end(), ' '),
+ __line.end());
+ std::string::size_type __pos = __line.find("=");
+ std::string __factor_name = __line.substr(0, __pos);
+ std::string::size_type __end = __line.find_first_of(";\n");
+ std::string __factor_value = __line.substr(__pos + 1, __end - __pos);
- if (__env_max_warn_count_str) {
- _GLIBCXX_PROFILE_DATA(_S_max_warn_count) = static_cast<size_t>(
- atoi(__env_max_warn_count_str));
+ _GLIBCXX_PROFILE_DATA(__env)[__factor_name] = __factor_value;
+ }
}
-}
-
-inline void __read_cost_factors()
-{
- std::string __conf_file_name(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
- __conf_file_name += ".conf";
- std::ifstream __conf_file(__conf_file_name.c_str());
-
- if (__conf_file.is_open()) {
- std::string __line;
+ struct __cost_factor_writer
+ {
+ FILE* __file;
- while (getline(__conf_file, __line)) {
- std::string::size_type __i = __line.find_first_not_of(" \t\n\v");
+ __cost_factor_writer(FILE* __f)
+ : __file(__f) { }
- if (__line.length() <= 0 || __line[__i] == '#') {
- // Skip empty lines or comments.
- continue;
- }
+ void
+ operator() (const __cost_factor* __factor)
+ { std::fprintf(__file, "%s = %f\n", __factor->__env_var,
+ __factor->__value); }
+ };
- // Trim.
- __line.erase(std::remove(__line.begin(), __line.end(), ' '),
- __line.end());
- std::string::size_type __pos = __line.find("=");
- std::string __factor_name = __line.substr(0, __pos);
- std::string::size_type __end = __line.find_first_of(";\n");
- std::string __factor_value = __line.substr(__pos + 1, __end - __pos);
+ inline void
+ __write_cost_factors()
+ {
+ FILE* __file = __open_output_file("conf.out");
+ __for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
+ __cost_factor_writer(__file));
+ std::fclose(__file);
+ }
- setenv(__factor_name.c_str(), __factor_value.c_str(), 0);
+ struct __cost_factor_setter
+ {
+ void
+ operator()(__cost_factor* __factor)
+ {
+ // Look it up in the process environment first.
+ const char* __env_value = std::getenv(__factor->__env_var);
+
+ if (!__env_value)
+ {
+ // Look it up in the config file.
+ __env_t::iterator __it
+ = _GLIBCXX_PROFILE_DATA(__env).find(__factor->__env_var);
+ if (__it != _GLIBCXX_PROFILE_DATA(__env).end())
+ __env_value = (*__it).second.c_str();
+ }
+
+ if (__env_value)
+ __factor->__value = std::atof(__env_value);
}
- }
-}
+ };
-struct __cost_factor_writer
-{
- FILE* __file;
- __cost_factor_writer(FILE* __f) : __file(__f) {}
- void operator() (const __cost_factor* __factor)
+ inline void
+ __set_cost_factors()
{
- fprintf(__file, "%s = %f\n", __factor->__env_var, __factor->__value);
+ _GLIBCXX_PROFILE_DATA(__cost_factors) = new __cost_factor_vector;
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__list_shift_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__list_resize_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__map_find_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__umap_find_cost_factor));
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->
+ push_back(&_GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor));
+ __for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
+ _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
+ __cost_factor_setter());
}
-};
-inline void __write_cost_factors()
-{
- FILE* __file = __open_output_file("conf.out");
- std::for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
- _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
- __cost_factor_writer(__file));
- fclose(__file);
-}
-
-struct __cost_factor_setter
-{
- void operator() (__cost_factor* __factor)
+ inline void
+ __profcxx_init_unconditional()
{
- char* __env_cost_factor;
- if (__env_cost_factor = getenv(__factor->__env_var))
- __factor->__value = atof(__env_cost_factor);
- }
-};
-
-inline void __set_cost_factors()
-{
- _GLIBCXX_PROFILE_DATA(__cost_factors) = new __cost_factor_vector;
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__list_shift_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__list_resize_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__map_find_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__umap_find_cost_factor));
- _GLIBCXX_PROFILE_DATA(__cost_factors)->push_back(
- &_GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor));
- std::for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
- _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
- __cost_factor_setter());
-}
-
-inline void __profcxx_init_unconditional()
-{
- __lock(_GLIBCXX_PROFILE_DATA(__global_lock));
-
- if (__is_invalid()) {
-
- __set_max_warn_count();
-
- if (_GLIBCXX_PROFILE_DATA(_S_max_warn_count) == 0) {
-
- __turn_off();
-
- } else {
-
- __set_max_stack_trace_depth();
- __set_max_mem();
- __set_trace_path();
- __read_cost_factors();
- __set_cost_factors();
- __write_cost_factors();
-
- __trace_vector_size_init();
- __trace_hashtable_size_init();
- __trace_hash_func_init();
- __trace_vector_to_list_init();
- __trace_list_to_slist_init();
- __trace_list_to_vector_init();
- __trace_map_to_unordered_map_init();
-
- atexit(__report);
-
- __turn_on();
+ _GLIBCXX_PROFILE_DATA(__global_lock).lock();
+
+ if (__is_invalid())
+ {
+ __set_max_warn_count();
+
+ if (_GLIBCXX_PROFILE_DATA(_S_max_warn_count) == 0)
+ __turn_off();
+ else
+ {
+ __set_max_stack_trace_depth();
+ __set_max_mem();
+ __set_trace_path();
+ __read_cost_factors();
+ __set_cost_factors();
+ __write_cost_factors();
+
+ __trace_vector_size_init();
+ __trace_hashtable_size_init();
+ __trace_hash_func_init();
+ __trace_vector_to_list_init();
+ __trace_list_to_slist_init();
+ __trace_list_to_vector_init();
+ __trace_map_to_unordered_map_init();
+
+ std::atexit(__report);
+
+ __turn_on();
+ }
+ }
- }
+ _GLIBCXX_PROFILE_DATA(__global_lock).unlock();
}
- __unlock(_GLIBCXX_PROFILE_DATA(__global_lock));
-}
+ /** @brief This function must be called by each instrumentation point.
+ *
+ * The common path is inlined fully.
+ */
+ inline bool
+ __profcxx_init()
+ {
+ if (__is_invalid())
+ __profcxx_init_unconditional();
-/** @brief This function must be called by each instrumentation point.
- *
- * The common path is inlined fully.
- */
-inline bool __profcxx_init(void)
-{
- if (__is_invalid()) {
- __profcxx_init_unconditional();
+ return __is_on();
}
- return __is_on();
-}
-
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_TRACE_H */
diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_size.h b/libstdc++-v3/include/profile/impl/profiler_vector_size.h
index 8d630e4d90b..0af384f4ecb 100644
--- a/libstdc++-v3/include/profile/impl/profiler_vector_size.h
+++ b/libstdc++-v3/include/profile/impl/profiler_vector_size.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,15 +37,6 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H
#define _GLIBCXX_PROFILE_PROFILER_VECTOR_SIZE_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
@@ -54,50 +45,59 @@
namespace __gnu_profile
{
-
-/** @brief Hashtable size instrumentation trace producer. */
-class __trace_vector_size : public __trace_container_size
-{
- public:
- __trace_vector_size() : __trace_container_size() { __id = "vector-size"; }
-};
-
-inline void __trace_vector_size_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_vector_size) = new __trace_vector_size();
-}
-
-inline void __trace_vector_size_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_vector_size)) {
- _GLIBCXX_PROFILE_DATA(_S_vector_size)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_vector_size)->__write(__f);
+ /** @brief Hashtable size instrumentation trace producer. */
+ class __trace_vector_size
+ : public __trace_container_size
+ {
+ public:
+ __trace_vector_size()
+ : __trace_container_size()
+ { __id = "vector-size"; }
+ };
+
+ inline void
+ __trace_vector_size_init()
+ { _GLIBCXX_PROFILE_DATA(_S_vector_size) = new __trace_vector_size(); }
+
+ inline void
+ __trace_vector_size_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_vector_size))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_vector_size)->__collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_vector_size)->__write(__f);
+ }
}
-}
-inline void __trace_vector_size_construct(const void* __obj, size_t __num)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_size_construct(const void* __obj, std::size_t __num)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_size)->__insert(__obj, __get_stack(), __num);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_size)->__insert(__obj, __get_stack(),
+ __num);
+ }
-inline void __trace_vector_size_destruct(const void* __obj, size_t __num,
- size_t __inum)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_size_destruct(const void* __obj, std::size_t __num,
+ std::size_t __inum)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_size)->__destruct(__obj, __num, __inum);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_size)->__destruct(__obj, __num, __inum);
+ }
-inline void __trace_vector_size_resize(const void* __obj, size_t __from,
- size_t __to)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_size_resize(const void* __obj, std::size_t __from,
+ std::size_t __to)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_size)->__resize(__obj, __from, __to);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_size)->__resize(__obj, __from, __to);
+ }
} // namespace __gnu_profile
diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
index d4113da8b4e..91963139bd8 100644
--- a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
+++ b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,300 +37,318 @@
#ifndef _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H
#define _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H 1
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#else
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#endif
#include "profile/impl/profiler.h"
#include "profile/impl/profiler_node.h"
#include "profile/impl/profiler_trace.h"
namespace __gnu_profile
{
-
-/** @brief A vector-to-list instrumentation line in the object table. */
-class __vector2list_info: public __object_info_base
-{
- public:
- __vector2list_info()
- :_M_shift_count(0), _M_iterate(0), _M_resize(0), _M_list_cost(0),
- _M_vector_cost(0), _M_valid(true) {}
- __vector2list_info(__stack_t __stack)
- : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0),
- _M_resize(0), _M_list_cost(0), _M_vector_cost(0), _M_valid(true) {}
- virtual ~__vector2list_info() {}
- __vector2list_info(const __vector2list_info& __o);
- void __merge(const __vector2list_info& __o);
- void __write(FILE* __f) const;
- float __magnitude() const { return _M_vector_cost - _M_list_cost; }
- const char* __advice() const
- { return strdup("change std::vector to std::list"); }
-
- size_t __shift_count() { return _M_shift_count; }
- size_t __iterate() { return _M_iterate; }
- float __list_cost() { return _M_list_cost; }
- size_t __resize() { return _M_resize; }
- void __set_list_cost(float __lc) { _M_list_cost = __lc; }
- void __set_vector_cost(float __vc) { _M_vector_cost = __vc; }
- bool __is_valid() { return _M_valid; }
- void __set_invalid() { _M_valid = false; }
-
- void __opr_insert(size_t __pos, size_t __num);
- void __opr_iterate(size_t __num);
- void __resize(size_t __from, size_t __to);
- void __opr_find(size_t __size);
-
-private:
- size_t _M_shift_count;
- size_t _M_iterate;
- size_t _M_resize;
- float _M_list_cost;
- float _M_vector_cost;
- bool _M_valid;
-};
-
-inline __vector2list_info::__vector2list_info(const __vector2list_info& __o)
- : __object_info_base(__o)
-{
- _M_shift_count = __o._M_shift_count;
- _M_iterate = __o._M_iterate;
- _M_vector_cost = __o._M_vector_cost;
- _M_list_cost = __o._M_list_cost;
- _M_valid = __o._M_valid;
- _M_resize = __o._M_resize;
-}
-
-inline void __vector2list_info::__merge(const __vector2list_info& __o)
-{
- _M_shift_count += __o._M_shift_count;
- _M_iterate += __o._M_iterate;
- _M_vector_cost += __o._M_vector_cost;
- _M_list_cost += __o._M_list_cost;
- _M_valid &= __o._M_valid;
- _M_resize += __o._M_resize;
-}
-
-inline void __vector2list_info::__opr_insert(size_t __pos, size_t __num)
-{
- _M_shift_count += __num - __pos;
-}
-
-inline void __vector2list_info::__resize(size_t __from, size_t __to)
-{
- _M_resize += __from;
-}
-
-inline void __vector2list_info::__opr_iterate(size_t __num)
-{
- _M_iterate += __num;
-}
-
-inline void __vector2list_info::__opr_find(size_t __size)
-{
- // Use average case complexity.
- _M_iterate += 3.0 / 4.0 * __size;
-}
-
-/** @brief A vector-to-list instrumentation line in the stack table. */
-class __vector2list_stack_info: public __vector2list_info {
- public:
- __vector2list_stack_info(const __vector2list_info& __o)
- : __vector2list_info(__o) {}
-};
-
-/** @brief Vector-to-list instrumentation producer. */
-class __trace_vector_to_list
- : public __trace_base<__vector2list_info, __vector2list_stack_info>
-{
- public:
- __trace_vector_to_list();
- ~__trace_vector_to_list() {}
-
- // Insert a new node at construct with object, callstack and initial size.
- void __insert(__object_t __obj, __stack_t __stack);
- // Call at destruction/clean to set container final size.
- void __destruct(const void* __obj);
-
- // Find the node in the live map.
- __vector2list_info* __find(const void* __obj);
-
- // Collect cost of operations.
- void __opr_insert(const void* __obj, size_t __pos, size_t __num);
- void __opr_iterate(const void* __obj, size_t __num);
- void __invalid_operator(const void* __obj);
- void __resize(const void* __obj, size_t __from, size_t __to);
- float __vector_cost(size_t __shift, size_t __iterate, size_t __resize);
- float __list_cost(size_t __shift, size_t __iterate, size_t __resize);
- void __opr_find(const void* __obj, size_t __size);
-};
-
-inline __trace_vector_to_list::__trace_vector_to_list()
+ /** @brief A vector-to-list instrumentation line in the object table. */
+ class __vector2list_info
+ : public __object_info_base
+ {
+ public:
+ __vector2list_info()
+ : _M_shift_count(0), _M_iterate(0), _M_resize(0), _M_list_cost(0),
+ _M_vector_cost(0), _M_valid(true) { }
+
+ __vector2list_info(__stack_t __stack)
+ : __object_info_base(__stack), _M_shift_count(0), _M_iterate(0),
+ _M_resize(0), _M_list_cost(0), _M_vector_cost(0), _M_valid(true) { }
+
+ virtual ~__vector2list_info() { }
+
+ __vector2list_info(const __vector2list_info& __o)
+ : __object_info_base(__o), _M_shift_count(__o._M_shift_count),
+ _M_iterate(__o._M_iterate), _M_resize(__o._M_resize),
+ _M_list_cost(__o._M_list_cost), _M_vector_cost(__o._M_vector_cost),
+ _M_valid(__o._M_valid) { }
+
+ void
+ __merge(const __vector2list_info& __o)
+ {
+ _M_shift_count += __o._M_shift_count;
+ _M_iterate += __o._M_iterate;
+ _M_vector_cost += __o._M_vector_cost;
+ _M_list_cost += __o._M_list_cost;
+ _M_valid &= __o._M_valid;
+ _M_resize += __o._M_resize;
+ }
+
+ void
+ __write(FILE* __f) const
+ {
+ std::fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n", _M_shift_count,
+ _M_resize, _M_iterate, _M_vector_cost, _M_list_cost);
+ }
+
+ float
+ __magnitude() const
+ { return _M_vector_cost - _M_list_cost; }
+
+ std::string
+ __advice() const
+ { return "change std::vector to std::list"; }
+
+ std::size_t
+ __shift_count()
+ { return _M_shift_count; }
+
+ std::size_t
+ __iterate()
+ { return _M_iterate; }
+
+ float
+ __list_cost()
+ { return _M_list_cost; }
+
+ std::size_t
+ __resize()
+ { return _M_resize; }
+
+ void
+ __set_list_cost(float __lc)
+ { _M_list_cost = __lc; }
+
+ void
+ __set_vector_cost(float __vc)
+ { _M_vector_cost = __vc; }
+
+ bool
+ __is_valid()
+ { return _M_valid; }
+
+ void
+ __set_invalid()
+ { _M_valid = false; }
+
+ void
+ __opr_insert(std::size_t __pos, std::size_t __num)
+ { _M_shift_count += __num - __pos; }
+
+ void
+ __opr_iterate(std::size_t __num)
+ { _M_iterate += __num; }
+
+ void
+ __resize(std::size_t __from, std::size_t)
+ { _M_resize += __from; }
+
+ void
+ __opr_find(std::size_t __size)
+ {
+ // Use average case complexity.
+ _M_iterate += 3.0 / 4.0 * __size;
+ }
+
+ private:
+ std::size_t _M_shift_count;
+ std::size_t _M_iterate;
+ std::size_t _M_resize;
+ float _M_list_cost;
+ float _M_vector_cost;
+ bool _M_valid;
+ };
+
+
+ /** @brief A vector-to-list instrumentation line in the stack table. */
+ class __vector2list_stack_info
+ : public __vector2list_info
+ {
+ public:
+ __vector2list_stack_info(const __vector2list_info& __o)
+ : __vector2list_info(__o) { }
+ };
+
+
+ /** @brief Vector-to-list instrumentation producer. */
+ class __trace_vector_to_list
+ : public __trace_base<__vector2list_info, __vector2list_stack_info>
+ {
+ public:
+ __trace_vector_to_list()
: __trace_base<__vector2list_info, __vector2list_stack_info>()
-{
- __id = "vector-to-list";
-}
-
-inline void __trace_vector_to_list::__insert(__object_t __obj,
- __stack_t __stack)
-{
- __add_object(__obj, __vector2list_info(__stack));
-}
-
-inline void __vector2list_info::__write(FILE* __f) const
-{
- fprintf(__f, "%Zu %Zu %Zu %.0f %.0f\n",
- _M_shift_count, _M_resize, _M_iterate, _M_vector_cost, _M_list_cost);
-}
-
-inline float __trace_vector_to_list::__vector_cost(size_t __shift,
- size_t __iterate,
- size_t __resize)
-{
- return (
- __shift * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value
- + __iterate * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value
- + __resize * _GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor).__value
- );
-}
-
-inline float __trace_vector_to_list::__list_cost(size_t __shift,
- size_t __iterate,
- size_t __resize)
-{
- return (
- __shift * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value
- + __iterate * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value
- + __resize * _GLIBCXX_PROFILE_DATA(__list_resize_cost_factor).__value);
-}
-
-inline void __trace_vector_to_list::__destruct(const void* __obj)
-{
- if (!__is_on())
- return;
-
- __vector2list_info* __res = __get_object_info(__obj);
- if (!__res)
- return;
-
- float __vc = __vector_cost(__res->__shift_count(), __res->__iterate(),
- __res->__resize());
- float __lc = __list_cost(__res->__shift_count(), __res->__iterate(),
- __res->__resize());
- __res->__set_vector_cost(__vc);
- __res->__set_list_cost(__lc);
-
- __retire_object(__obj);
-}
-
-inline void __trace_vector_to_list::__opr_insert(const void* __obj,
- size_t __pos, size_t __num)
-{
- __vector2list_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__opr_insert(__pos, __num);
-}
-
-inline void __trace_vector_to_list::__opr_iterate(const void* __obj,
- size_t __num)
-{
- __vector2list_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__opr_iterate(__num);
-}
-
-inline void __trace_vector_to_list::__invalid_operator(const void* __obj)
-{
- __vector2list_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__set_invalid();
-}
-
-inline void __trace_vector_to_list::__resize(const void* __obj, size_t __from,
- size_t __to)
-{
- __vector2list_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__resize(__from, __to);
-}
-
-inline void __trace_vector_to_list::__opr_find(const void* __obj,
- size_t __size)
-{
- __vector2list_info* __res = __get_object_info(__obj);
- if (__res)
- __res->__opr_find(__size);
-}
-
-inline void __trace_vector_to_list_init()
-{
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list) = new __trace_vector_to_list();
-}
-
-inline void __trace_vector_to_list_report(FILE* __f,
- __warning_vector_t& __warnings)
-{
- if (_GLIBCXX_PROFILE_DATA(_S_vector_to_list)) {
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__collect_warnings(__warnings);
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__write(__f);
+ { __id = "vector-to-list"; }
+
+ ~__trace_vector_to_list() { }
+
+ // Insert a new node at construct with object, callstack and initial size.
+ void
+ __insert(__object_t __obj, __stack_t __stack)
+ { __add_object(__obj, __vector2list_info(__stack)); }
+
+ // Call at destruction/clean to set container final size.
+ void
+ __destruct(const void* __obj)
+ {
+ if (!__is_on())
+ return;
+
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (!__res)
+ return;
+
+ float __vc = __vector_cost(__res->__shift_count(), __res->__iterate(),
+ __res->__resize());
+ float __lc = __list_cost(__res->__shift_count(), __res->__iterate(),
+ __res->__resize());
+ __res->__set_vector_cost(__vc);
+ __res->__set_list_cost(__lc);
+
+ __retire_object(__obj);
+ }
+
+ // Find the node in the live map.
+ // XXX Undefined?!?
+ __vector2list_info* __find(const void* __obj);
+
+ // Collect cost of operations.
+ void
+ __opr_insert(const void* __obj, std::size_t __pos, std::size_t __num)
+ {
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_insert(__pos, __num);
+ }
+
+ void
+ __opr_iterate(const void* __obj, std::size_t __num)
+ {
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_iterate(__num);
+ }
+
+ void
+ __invalid_operator(const void* __obj)
+ {
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__set_invalid();
+ }
+
+ void
+ __resize(const void* __obj, std::size_t __from, std::size_t __to)
+ {
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__resize(__from, __to);
+ }
+
+ float
+ __vector_cost(std::size_t __shift, std::size_t __iterate,
+ std::size_t __resize)
+ {
+ return (__shift
+ * _GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor).__value
+ + __iterate
+ * _GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor).__value
+ + __resize
+ * _GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor).__value);
+ }
+
+ float
+ __list_cost(std::size_t __shift, std::size_t __iterate,
+ std::size_t __resize)
+ {
+ return (__shift
+ * _GLIBCXX_PROFILE_DATA(__list_shift_cost_factor).__value
+ + __iterate
+ * _GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor).__value
+ + __resize
+ * _GLIBCXX_PROFILE_DATA(__list_resize_cost_factor).__value);
+ }
+
+ void
+ __opr_find(const void* __obj, std::size_t __size)
+ {
+ __vector2list_info* __res = __get_object_info(__obj);
+ if (__res)
+ __res->__opr_find(__size);
+ }
+ };
+
+
+ inline void
+ __trace_vector_to_list_init()
+ { _GLIBCXX_PROFILE_DATA(_S_vector_to_list) = new __trace_vector_to_list(); }
+
+ inline void
+ __trace_vector_to_list_report(FILE* __f, __warning_vector_t& __warnings)
+ {
+ if (_GLIBCXX_PROFILE_DATA(_S_vector_to_list))
+ {
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->
+ __collect_warnings(__warnings);
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__write(__f);
+ }
}
-}
-
-inline void __trace_vector_to_list_construct(const void* __obj)
-{
- if (!__profcxx_init()) return;
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__insert(__obj, __get_stack());
-}
+ inline void
+ __trace_vector_to_list_construct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_vector_to_list_destruct(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__insert(__obj, __get_stack());
+ }
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__destruct(__obj);
-}
+ inline void
+ __trace_vector_to_list_destruct(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
-inline void __trace_vector_to_list_insert(const void* __obj,
- size_t __pos, size_t __num)
-{
- if (!__profcxx_init()) return;
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__destruct(__obj);
+ }
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_insert(__obj, __pos, __num);
-}
+ inline void
+ __trace_vector_to_list_insert(const void* __obj, std::size_t __pos,
+ std::size_t __num)
+ {
+ if (!__profcxx_init())
+ return;
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_insert(__obj, __pos,
+ __num);
+ }
-inline void __trace_vector_to_list_iterate(const void* __obj, size_t __num = 1)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_to_list_iterate(const void* __obj, std::size_t __num = 1)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_iterate(__obj, __num);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_iterate(__obj, __num);
+ }
-inline void __trace_vector_to_list_invalid_operator(const void* __obj)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_to_list_invalid_operator(const void* __obj)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__invalid_operator(__obj);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__invalid_operator(__obj);
+ }
-inline void __trace_vector_to_list_resize(const void* __obj,
- size_t __from, size_t __to)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_to_list_resize(const void* __obj, std::size_t __from,
+ std::size_t __to)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__resize(__obj, __from, __to);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__resize(__obj, __from, __to);
+ }
-inline void __trace_vector_to_list_find(const void* __obj, size_t __size)
-{
- if (!__profcxx_init()) return;
+ inline void
+ __trace_vector_to_list_find(const void* __obj, std::size_t __size)
+ {
+ if (!__profcxx_init())
+ return;
- _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_find(__obj, __size);
-}
+ _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_find(__obj, __size);
+ }
} // namespace __gnu_profile
#endif /* _GLIBCXX_PROFILE_PROFILER_VECTOR_TO_LIST_H */
diff --git a/libstdc++-v3/include/profile/iterator_tracker.h b/libstdc++-v3/include/profile/iterator_tracker.h
index 0febb9babae..faad9e57279 100644
--- a/libstdc++-v3/include/profile/iterator_tracker.h
+++ b/libstdc++-v3/include/profile/iterator_tracker.h
@@ -36,266 +36,239 @@ namespace std
namespace __profile
{
-template<typename _Iterator, typename _Sequence>
-class __iterator_tracker
-{
- typedef __iterator_tracker _Self;
- // The underlying iterator
- _Iterator _M_current;
- // The underlying data structure
- const _Sequence* _M_ds;
- typedef std::iterator_traits<_Iterator> _Traits;
-
- public:
- typedef _Iterator _Base_iterator;
- typedef typename _Traits::iterator_category iterator_category;
- typedef typename _Traits::value_type value_type;
- typedef typename _Traits::difference_type difference_type;
- typedef typename _Traits::reference reference;
- typedef typename _Traits::pointer pointer;
-
- __iterator_tracker() : _M_current(), _M_ds(0) { }
- __iterator_tracker(const _Iterator& __i, const _Sequence* seq)
- : _M_current(__i), _M_ds(seq) { }
- __iterator_tracker(const __iterator_tracker& __x)
- : _M_current(__x._M_current), _M_ds(__x._M_ds) { }
- template<typename _MutableIterator>
- __iterator_tracker(const __iterator_tracker<_MutableIterator, typename __gnu_cxx::__enable_if<(std::__are_same<_MutableIterator, typename _Sequence::iterator::_Base_iterator>::__value), _Sequence>::__type>& __x)
- : _M_current(__x.base()), _M_ds(__x._M_get_sequence()) { }
-
- _Iterator
- base() const { return _M_current; }
- /**
- * @brief Conversion to underlying non-debug iterator to allow
- * better interaction with non-profile containers.
- */
- operator _Iterator() const { return _M_current; }
-
- pointer
- operator->() const { return &*_M_current; }
-
- __iterator_tracker&
- operator++()
- {
- _M_ds->_M_profile_iterate();
- ++_M_current;
- return *this;
- }
-
- __iterator_tracker&
- operator++(int)
- {
- _M_ds->_M_profile_iterate();
- __iterator_tracker __tmp(*this);
- ++_M_current;
- return __tmp;
- }
-
- __iterator_tracker&
- operator--()
- {
- _M_ds->_M_profile_iterate(1);
- --_M_current;
- return *this;
- }
-
- __iterator_tracker&
- operator--(int)
- {
- _M_ds->_M_profile_iterate(1);
- __iterator_tracker __tmp(*this);
- --_M_current;
- return __tmp;
- }
-
- __iterator_tracker&
- operator=(const __iterator_tracker& __x)
- {
- _M_current = __x._M_current;
- return *this;
- }
-
- reference
- operator*() const
- {
- return *_M_current;
- }
-
- // ------ Random access iterator requirements ------
- reference
- operator[](const difference_type& __n) const
- {
- return _M_current[__n];
- }
-
- __iterator_tracker&
- operator+=(const difference_type& __n)
- {
- _M_current += __n;
- return *this;
- }
-
- __iterator_tracker
- operator+(const difference_type& __n) const
- {
- __iterator_tracker __tmp(*this);
- __tmp += __n;
- return __tmp;
- }
-
- __iterator_tracker&
- operator-=(const difference_type& __n)
- {
- _M_current += -__n;
- return *this;
- }
-
- __iterator_tracker
- operator-(const difference_type& __n) const
- {
- __iterator_tracker __tmp(*this);
- __tmp -= __n;
- return __tmp;
- }
-
- void
- _M_find()
- {
- _M_ds->_M_profile_find();
- }
-
- const _Sequence*
- _M_get_sequence() const
- {
- return static_cast<const _Sequence*>(_M_ds);
- }
-};
-
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator==(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() == __rhs.base();
-}
+ template<typename _Iterator, typename _Sequence>
+ class __iterator_tracker
+ {
+ typedef __iterator_tracker _Self;
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator==(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() == __rhs.base();
-}
+ // The underlying iterator
+ _Iterator _M_current;
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator!=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() != __rhs.base();
-}
+ // The underlying data structure
+ const _Sequence* _M_ds;
+ typedef std::iterator_traits<_Iterator> _Traits;
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator!=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() != __rhs.base();
-}
+ public:
+ typedef _Iterator _Base_iterator;
+ typedef typename _Traits::iterator_category iterator_category;
+ typedef typename _Traits::value_type value_type;
+ typedef typename _Traits::difference_type difference_type;
+ typedef typename _Traits::reference reference;
+ typedef typename _Traits::pointer pointer;
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator<(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() < __rhs.base();
-}
+ __iterator_tracker()
+ : _M_current(), _M_ds(0) { }
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator<(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() < __rhs.base();
-}
+ __iterator_tracker(const _Iterator& __i, const _Sequence* __seq)
+ : _M_current(__i), _M_ds(__seq) { }
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator<=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() <= __rhs.base();
-}
+ __iterator_tracker(const __iterator_tracker& __x)
+ : _M_current(__x._M_current), _M_ds(__x._M_ds) { }
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator<=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() <= __rhs.base();
-}
+ template<typename _MutableIterator>
+ __iterator_tracker(const __iterator_tracker<_MutableIterator,
+ typename __gnu_cxx::__enable_if
+ <(std::__are_same<_MutableIterator, typename
+ _Sequence::iterator::_Base_iterator>::__value),
+ _Sequence>::__type>& __x)
+ : _M_current(__x.base()), _M_ds(__x._M_get_sequence()) { }
+
+ _Iterator
+ base() const { return _M_current; }
+
+ /**
+ * @brief Conversion to underlying non-debug iterator to allow
+ * better interaction with non-profile containers.
+ */
+ operator _Iterator() const { return _M_current; }
+
+ pointer
+ operator->() const { return &*_M_current; }
+
+ __iterator_tracker&
+ operator++()
+ {
+ _M_ds->_M_profile_iterate();
+ ++_M_current;
+ return *this;
+ }
+
+ __iterator_tracker&
+ operator++(int)
+ {
+ _M_ds->_M_profile_iterate();
+ __iterator_tracker __tmp(*this);
+ ++_M_current;
+ return __tmp;
+ }
+
+ __iterator_tracker&
+ operator--()
+ {
+ _M_ds->_M_profile_iterate(1);
+ --_M_current;
+ return *this;
+ }
+
+ __iterator_tracker&
+ operator--(int)
+ {
+ _M_ds->_M_profile_iterate(1);
+ __iterator_tracker __tmp(*this);
+ --_M_current;
+ return __tmp;
+ }
+
+ __iterator_tracker&
+ operator=(const __iterator_tracker& __x)
+ {
+ _M_current = __x._M_current;
+ return *this;
+ }
+
+ reference
+ operator*() const
+ { return *_M_current; }
+
+ // ------ Random access iterator requirements ------
+ reference
+ operator[](const difference_type& __n) const
+ { return _M_current[__n]; }
+
+ __iterator_tracker&
+ operator+=(const difference_type& __n)
+ {
+ _M_current += __n;
+ return *this;
+ }
+
+ __iterator_tracker
+ operator+(const difference_type& __n) const
+ {
+ __iterator_tracker __tmp(*this);
+ __tmp += __n;
+ return __tmp;
+ }
+
+ __iterator_tracker&
+ operator-=(const difference_type& __n)
+ {
+ _M_current += -__n;
+ return *this;
+ }
+
+ __iterator_tracker
+ operator-(const difference_type& __n) const
+ {
+ __iterator_tracker __tmp(*this);
+ __tmp -= __n;
+ return __tmp;
+ }
+
+ void
+ _M_find()
+ { _M_ds->_M_profile_find(); }
+
+ const _Sequence*
+ _M_get_sequence() const
+ { return static_cast<const _Sequence*>(_M_ds); }
+ };
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator>(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() > __rhs.base();
-}
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator==(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() == __rhs.base(); }
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator>(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() > __rhs.base();
-}
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator==(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() == __rhs.base(); }
-template<typename _IteratorL, typename _IteratorR, typename _Sequence>
-inline bool
-operator>=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() >= __rhs.base();
-}
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator!=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() != __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator!=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() != __rhs.base(); }
-template<typename _Iterator, typename _Sequence>
-inline bool
-operator>=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() >= __rhs.base();
-}
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator<(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() < __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator<(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() < __rhs.base(); }
-// _GLIBCXX_RESOLVE_LIB_DEFECTS
-// According to the resolution of DR179 not only the various comparison
-// operators but also operator- must accept mixed iterator/const_iterator
-// parameters.
template<typename _IteratorL, typename _IteratorR, typename _Sequence>
- inline typename __iterator_tracker<_IteratorL, _Sequence>::difference_type
- operator-(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
- const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
-{
- return __lhs.base() - __rhs.base();
-}
+ inline bool
+ operator<=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() <= __rhs.base(); }
-template<typename _Iterator, typename _Sequence>
-inline typename __iterator_tracker<_Iterator, _Sequence>::difference_type
-operator-(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
- const __iterator_tracker<_Iterator, _Sequence>& __rhs)
-{
- return __lhs.base() - __rhs.base();
-}
-
-template<typename _Iterator, typename _Sequence>
-inline __iterator_tracker<_Iterator, _Sequence>
-operator+(typename __iterator_tracker<_Iterator,_Sequence>::difference_type
- __n,
- const __iterator_tracker<_Iterator, _Sequence>& __i)
-{
- return __i + __n;
-}
-
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator<=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() <= __rhs.base(); }
+
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator>(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() > __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator>(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() > __rhs.base(); }
+
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline bool
+ operator>=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() >= __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline bool
+ operator>=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() >= __rhs.base(); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // According to the resolution of DR179 not only the various comparison
+ // operators but also operator- must accept mixed iterator/const_iterator
+ // parameters.
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+ inline typename __iterator_tracker<_IteratorL, _Sequence>::difference_type
+ operator-(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
+ const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
+ { return __lhs.base() - __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline typename __iterator_tracker<_Iterator, _Sequence>::difference_type
+ operator-(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
+ const __iterator_tracker<_Iterator, _Sequence>& __rhs)
+ { return __lhs.base() - __rhs.base(); }
+
+ template<typename _Iterator, typename _Sequence>
+ inline __iterator_tracker<_Iterator, _Sequence>
+ operator+(typename __iterator_tracker<_Iterator,_Sequence>::difference_type
+ __n,
+ const __iterator_tracker<_Iterator, _Sequence>& __i)
+ { return __i + __n; }
+
} // namespace __profile
} // namespace std
#endif
diff --git a/libstdc++-v3/include/profile/list b/libstdc++-v3/include/profile/list
index 01edd2919f6..564fc8c16f1 100644
--- a/libstdc++-v3/include/profile/list
+++ b/libstdc++-v3/include/profile/list
@@ -64,20 +64,40 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// 23.2.2.1 construct/copy/destroy:
- explicit list(const _Allocator& __a = _Allocator())
+ explicit
+ list(const _Allocator& __a = _Allocator())
: _Base(__a)
{
__profcxx_list_construct(this); // list2slist
__profcxx_list_construct2(this); // list2vector
}
- explicit list(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ list(size_type __n)
+ : _Base(__n)
+ {
+ __profcxx_list_construct(this);
+ __profcxx_list_construct2(this);
+ }
+
+ list(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a)
+ {
+ __profcxx_list_construct(this);
+ __profcxx_list_construct2(this);
+ }
+#else
+ explicit
+ list(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a)
{
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
}
+#endif
template<class _InputIterator>
list(_InputIterator __first, _InputIterator __last,
@@ -104,7 +124,7 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
#ifdef __GXX_EXPERIMENTAL_CXX0X__
list(list&& __x)
- : _Base(std::forward<list>(__x))
+ : _Base(std::move(__x))
{
__profcxx_list_construct(this);
__profcxx_list_construct2(this);
@@ -229,9 +249,19 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ { _Base::resize(__sz); }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ { _Base::resize(__sz, __c); }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{ _Base::resize(__sz, __c); }
+#endif
// element access:
reference
diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h
index fc698a9fa84..3f668af176c 100644
--- a/libstdc++-v3/include/profile/map.h
+++ b/libstdc++-v3/include/profile/map.h
@@ -71,33 +71,30 @@ namespace __profile
using _Base::value_compare;
// 23.3.1.1 construct/copy/destroy:
- explicit map(const _Compare& __comp = _Compare(),
- const _Allocator& __a = _Allocator())
- : _Base(__comp, __a) {
- __profcxx_map_to_unordered_map_construct(this);
- }
+ explicit
+ map(const _Compare& __comp = _Compare(),
+ const _Allocator& __a = _Allocator())
+ : _Base(__comp, __a)
+ { __profcxx_map_to_unordered_map_construct(this); }
template<typename _InputIterator>
map(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
- : _Base(__first, __last, __comp, __a) {
- __profcxx_map_to_unordered_map_construct(this);
- }
+ : _Base(__first, __last, __comp, __a)
+ { __profcxx_map_to_unordered_map_construct(this); }
map(const map& __x)
- : _Base(__x) {
- __profcxx_map_to_unordered_map_construct(this);
- }
+ : _Base(__x)
+ { __profcxx_map_to_unordered_map_construct(this); }
map(const _Base& __x)
- : _Base(__x) {
- __profcxx_map_to_unordered_map_construct(this);
- }
+ : _Base(__x)
+ { __profcxx_map_to_unordered_map_construct(this); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
map(map&& __x)
- : _Base(std::forward<map>(__x))
+ : _Base(std::move(__x))
{ }
map(initializer_list<value_type> __l,
@@ -106,9 +103,8 @@ namespace __profile
: _Base(__l, __c, __a) { }
#endif
- ~map() {
- __profcxx_map_to_unordered_map_destruct(this);
- }
+ ~map()
+ { __profcxx_map_to_unordered_map_destruct(this); }
map&
operator=(const map& __x)
diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h
index d5627ad1d0a..2897614050c 100644
--- a/libstdc++-v3/include/profile/multimap.h
+++ b/libstdc++-v3/include/profile/multimap.h
@@ -84,7 +84,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multimap(multimap&& __x)
- : _Base(std::forward<multimap>(__x))
+ : _Base(std::move(__x))
{ }
multimap(initializer_list<value_type> __l,
diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h
index 653ba5b4653..3c113ef88d5 100644
--- a/libstdc++-v3/include/profile/multiset.h
+++ b/libstdc++-v3/include/profile/multiset.h
@@ -82,7 +82,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
multiset(multiset&& __x)
- : _Base(std::forward<multiset>(__x))
+ : _Base(std::move(__x))
{ }
multiset(initializer_list<value_type> __l,
diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h
index e2e357339dc..42acf72699a 100644
--- a/libstdc++-v3/include/profile/set.h
+++ b/libstdc++-v3/include/profile/set.h
@@ -82,7 +82,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
set(set&& __x)
- : _Base(std::forward<set>(__x))
+ : _Base(std::move(__x))
{ }
set(initializer_list<value_type> __l,
diff --git a/libstdc++-v3/include/profile/unordered_map b/libstdc++-v3/include/profile/unordered_map
index 929a72d0e4c..2dec1f2a268 100644
--- a/libstdc++-v3/include/profile/unordered_map
+++ b/libstdc++-v3/include/profile/unordered_map
@@ -86,10 +86,10 @@ namespace __profile
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
@@ -104,14 +104,14 @@ namespace __profile
}
unordered_map(unordered_map&& __x)
- : _Base(std::forward<_Base>(__x))
+ : _Base(std::move(__x))
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
__profcxx_hashtable_construct2(this);
}
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -196,7 +196,7 @@ namespace __profile
insert(_InputIter __first, _InputIter __last)
{
size_type __old_size = _Base::bucket_count();
- _Base::insert(__first.base(), __last.base());
+ _Base::insert(__first, __last);
_M_profile_resize(__old_size, _Base::bucket_count());
}
@@ -314,19 +314,19 @@ namespace __profile
explicit
unordered_multimap(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
@@ -339,13 +339,13 @@ namespace __profile
}
unordered_multimap(unordered_multimap&& __x)
- : _Base(std::forward<_Base>(__x))
+ : _Base(std::move(__x))
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -430,7 +430,7 @@ namespace __profile
insert(_InputIter __first, _InputIter __last)
{
size_type __old_size = _Base::bucket_count();
- _Base::insert(__first.base(), __last.base());
+ _Base::insert(__first, __last);
_M_profile_resize(__old_size, _Base::bucket_count());
}
diff --git a/libstdc++-v3/include/profile/unordered_set b/libstdc++-v3/include/profile/unordered_set
index 453157cf941..2dade092024 100644
--- a/libstdc++-v3/include/profile/unordered_set
+++ b/libstdc++-v3/include/profile/unordered_set
@@ -85,10 +85,10 @@ namespace __profile
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
@@ -103,14 +103,14 @@ namespace __profile
}
unordered_set(unordered_set&& __x)
- : _Base(std::forward<_Base>(__x))
+ : _Base(std::move(__x))
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
__profcxx_hashtable_construct2(this);
}
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
@@ -302,9 +302,9 @@ namespace __profile
explicit
unordered_multiset(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
@@ -312,10 +312,10 @@ namespace __profile
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
@@ -328,13 +328,13 @@ namespace __profile
}
unordered_multiset(unordered_multiset&& __x)
- : _Base(std::forward<_Base>(__x))
+ : _Base(std::move(__x))
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector
index ad74137583c..1bd4346ec67 100644
--- a/libstdc++-v3/include/profile/vector
+++ b/libstdc++-v3/include/profile/vector
@@ -76,20 +76,40 @@ namespace __profile
_M_base() const { return *this; }
// 23.2.4.1 construct/copy/destroy:
- explicit vector(const _Allocator& __a = _Allocator())
+ explicit
+ vector(const _Allocator& __a = _Allocator())
: _Base(__a)
{
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
- explicit vector(size_type __n, const _Tp& __value = _Tp(),
- const _Allocator& __a = _Allocator())
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit
+ vector(size_type __n)
+ : _Base(__n)
+ {
+ __profcxx_vector_construct(this, this->capacity());
+ __profcxx_vector_construct2(this);
+ }
+
+ vector(size_type __n, const _Tp& __value,
+ const _Allocator& __a = _Allocator())
: _Base(__n, __value, __a)
{
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
}
+#else
+ explicit
+ vector(size_type __n, const _Tp& __value = _Tp(),
+ const _Allocator& __a = _Allocator())
+ : _Base(__n, __value, __a)
+ {
+ __profcxx_vector_construct(this, this->capacity());
+ __profcxx_vector_construct2(this);
+ }
+#endif
template<class _InputIterator>
vector(_InputIterator __first, _InputIterator __last,
@@ -117,7 +137,7 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
vector(vector&& __x)
- : _Base(std::forward<vector>(__x))
+ : _Base(std::move(__x))
{
__profcxx_vector_construct(this, this->capacity());
__profcxx_vector_construct2(this);
@@ -218,6 +238,23 @@ namespace __profile
using _Base::size;
using _Base::max_size;
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ resize(size_type __sz)
+ {
+ __profcxx_vector_invalid_operator(this);
+ _M_profile_resize(this, this->capacity(), __sz);
+ _Base::resize(__sz);
+ }
+
+ void
+ resize(size_type __sz, const _Tp& __c)
+ {
+ __profcxx_vector_invalid_operator(this);
+ _M_profile_resize(this, this->capacity(), __sz);
+ _Base::resize(__sz, __c);
+ }
+#else
void
resize(size_type __sz, _Tp __c = _Tp())
{
@@ -225,6 +262,7 @@ namespace __profile
_M_profile_resize(this, this->capacity(), __sz);
_Base::resize(__sz, __c);
}
+#endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
using _Base::shrink_to_fit;
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index d374c88a2b1..26e762de339 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -40,6 +40,7 @@
#endif
#include <bits/stl_algobase.h>
+#include <bits/range_access.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/array>
diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic
index 5ef52f3763f..c94597db6f3 100644
--- a/libstdc++-v3/include/std/atomic
+++ b/libstdc++-v3/include/std/atomic
@@ -38,8 +38,8 @@
# include <bits/c++0x_warning.h>
#endif
+#include <bits/c++config.h>
#include <bits/atomic_base.h>
-#include <cstddef>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -141,13 +141,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
atomic(_Tp* __v) : atomic_address(__v) { }
void
- store(_Tp*, memory_order = memory_order_seq_cst);
+ store(_Tp* __v, memory_order __m = memory_order_seq_cst)
+ { atomic_address::store(__v, __m); }
_Tp*
- load(memory_order = memory_order_seq_cst) const;
+ load(memory_order __m = memory_order_seq_cst) const
+ { return static_cast<_Tp*>(atomic_address::load(__m)); }
_Tp*
- exchange(_Tp*, memory_order = memory_order_seq_cst);
+ exchange(_Tp* __v, memory_order __m = memory_order_seq_cst)
+ { return static_cast<_Tp*>(atomic_address::exchange(__v, __m)); }
bool
compare_exchange_weak(_Tp*&, _Tp*, memory_order, memory_order);
@@ -487,17 +490,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
using __base_type::operator=;
};
-
- template<typename _Tp>
- _Tp*
- atomic<_Tp*>::load(memory_order __m) const
- { return static_cast<_Tp*>(atomic_address::load(__m)); }
-
- template<typename _Tp>
- _Tp*
- atomic<_Tp*>::exchange(_Tp* __v, memory_order __m)
- { return static_cast<_Tp*>(atomic_address::exchange(__v, __m)); }
-
template<typename _Tp>
bool
atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v, memory_order __m1,
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index b23b51a78fe..909ed770735 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -45,7 +45,6 @@
#pragma GCC system_header
-#include <cstddef> // For size_t
#include <string>
#include <bits/functexcept.h> // For invalid_argument, out_of_range,
// overflow_error
@@ -1502,7 +1501,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
operator()(const _GLIBCXX_STD_D::bitset<_Nb>& __b) const
{
const size_t __clength = (_Nb + __CHAR_BIT__ - 1) / __CHAR_BIT__;
- return std::_Fnv_hash::hash(__b._M_getdata(), __clength);
+ return std::_Hash_impl::hash(__b._M_getdata(), __clength);
}
};
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index 6d3097e0a1e..31c44363137 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -1062,36 +1062,35 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void imag(float __val)
{ __imag__ _M_value = __val; }
- complex<float>&
+ complex&
operator=(float __f)
{
- __real__ _M_value = __f;
- __imag__ _M_value = 0.0f;
+ _M_value = __f;
return *this;
}
- complex<float>&
+ complex&
operator+=(float __f)
{
- __real__ _M_value += __f;
+ _M_value += __f;
return *this;
}
- complex<float>&
+ complex&
operator-=(float __f)
{
- __real__ _M_value -= __f;
+ _M_value -= __f;
return *this;
}
- complex<float>&
+ complex&
operator*=(float __f)
{
_M_value *= __f;
return *this;
}
- complex<float>&
+ complex&
operator/=(float __f)
{
_M_value /= __f;
@@ -1103,7 +1102,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// complex& operator=(const complex&);
template<typename _Tp>
- complex<float>&
+ complex&
operator=(const complex<_Tp>& __z)
{
__real__ _M_value = __z.real();
@@ -1112,7 +1111,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<float>&
+ complex&
operator+=(const complex<_Tp>& __z)
{
__real__ _M_value += __z.real();
@@ -1121,7 +1120,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<class _Tp>
- complex<float>&
+ complex&
operator-=(const complex<_Tp>& __z)
{
__real__ _M_value -= __z.real();
@@ -1130,7 +1129,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<class _Tp>
- complex<float>&
+ complex&
operator*=(const complex<_Tp>& __z)
{
_ComplexT __t;
@@ -1141,7 +1140,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<class _Tp>
- complex<float>&
+ complex&
operator/=(const complex<_Tp>& __z)
{
_ComplexT __t;
@@ -1208,36 +1207,35 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void imag(double __val)
{ __imag__ _M_value = __val; }
- complex<double>&
+ complex&
operator=(double __d)
{
- __real__ _M_value = __d;
- __imag__ _M_value = 0.0;
+ _M_value = __d;
return *this;
}
- complex<double>&
+ complex&
operator+=(double __d)
{
- __real__ _M_value += __d;
+ _M_value += __d;
return *this;
}
- complex<double>&
+ complex&
operator-=(double __d)
{
- __real__ _M_value -= __d;
+ _M_value -= __d;
return *this;
}
- complex<double>&
+ complex&
operator*=(double __d)
{
_M_value *= __d;
return *this;
}
- complex<double>&
+ complex&
operator/=(double __d)
{
_M_value /= __d;
@@ -1248,7 +1246,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// complex& operator=(const complex&);
template<typename _Tp>
- complex<double>&
+ complex&
operator=(const complex<_Tp>& __z)
{
__real__ _M_value = __z.real();
@@ -1257,7 +1255,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<double>&
+ complex&
operator+=(const complex<_Tp>& __z)
{
__real__ _M_value += __z.real();
@@ -1266,7 +1264,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<double>&
+ complex&
operator-=(const complex<_Tp>& __z)
{
__real__ _M_value -= __z.real();
@@ -1275,7 +1273,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<double>&
+ complex&
operator*=(const complex<_Tp>& __z)
{
_ComplexT __t;
@@ -1286,7 +1284,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<double>&
+ complex&
operator/=(const complex<_Tp>& __z)
{
_ComplexT __t;
@@ -1354,36 +1352,35 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void imag(long double __val)
{ __imag__ _M_value = __val; }
- complex<long double>&
+ complex&
operator=(long double __r)
{
- __real__ _M_value = __r;
- __imag__ _M_value = 0.0L;
+ _M_value = __r;
return *this;
}
- complex<long double>&
+ complex&
operator+=(long double __r)
{
- __real__ _M_value += __r;
+ _M_value += __r;
return *this;
}
- complex<long double>&
+ complex&
operator-=(long double __r)
{
- __real__ _M_value -= __r;
+ _M_value -= __r;
return *this;
}
- complex<long double>&
+ complex&
operator*=(long double __r)
{
_M_value *= __r;
return *this;
}
- complex<long double>&
+ complex&
operator/=(long double __r)
{
_M_value /= __r;
@@ -1394,7 +1391,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// complex& operator=(const complex&);
template<typename _Tp>
- complex<long double>&
+ complex&
operator=(const complex<_Tp>& __z)
{
__real__ _M_value = __z.real();
@@ -1403,7 +1400,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<long double>&
+ complex&
operator+=(const complex<_Tp>& __z)
{
__real__ _M_value += __z.real();
@@ -1412,7 +1409,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<long double>&
+ complex&
operator-=(const complex<_Tp>& __z)
{
__real__ _M_value -= __z.real();
@@ -1421,7 +1418,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<long double>&
+ complex&
operator*=(const complex<_Tp>& __z)
{
_ComplexT __t;
@@ -1432,7 +1429,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _Tp>
- complex<long double>&
+ complex&
operator/=(const complex<_Tp>& __z)
{
_ComplexT __t;
diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque
index f8a55f72165..b7f4b0acdaf 100644
--- a/libstdc++-v3/include/std/deque
+++ b/libstdc++-v3/include/std/deque
@@ -63,6 +63,7 @@
#include <bits/stl_construct.h>
#include <bits/stl_uninitialized.h>
#include <bits/stl_deque.h>
+#include <bits/range_access.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
# include <bits/deque.tcc>
diff --git a/libstdc++-v3/include/std/forward_list b/libstdc++-v3/include/std/forward_list
index 16fdcc283ff..8b11db765b4 100644
--- a/libstdc++-v3/include/std/forward_list
+++ b/libstdc++-v3/include/std/forward_list
@@ -36,6 +36,7 @@
#else
#include <bits/forward_list.h>
+#include <bits/range_access.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
# include <bits/forward_list.tcc>
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index 9aa4f1ab10f..00690bee938 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -397,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (__testout && __off == 0 && _M_buf_size > 1 )
this->setp(_M_buf, _M_buf + _M_buf_size - 1);
else
- this->setp(NULL, NULL);
+ this->setp(0, 0);
}
};
@@ -795,7 +795,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
explicit
basic_fstream(const char* __s,
ios_base::openmode __mode = ios_base::in | ios_base::out)
- : __iostream_type(NULL), _M_filebuf()
+ : __iostream_type(0), _M_filebuf()
{
this->init(&_M_filebuf);
this->open(__s, __mode);
@@ -810,7 +810,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
explicit
basic_fstream(const std::string& __s,
ios_base::openmode __mode = ios_base::in | ios_base::out)
- : __iostream_type(NULL), _M_filebuf()
+ : __iostream_type(0), _M_filebuf()
{
this->init(&_M_filebuf);
this->open(__s, __mode);
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 2ba7243837a..d137f47eb09 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -169,17 +169,6 @@ namespace std
: _Weak_result_type_impl<typename remove_cv<_Functor>::type>
{ };
- template<typename _Signature>
- class result_of;
-
- template<typename _Functor, typename... _ArgTypes>
- struct result_of<_Functor(_ArgTypes...)>
- {
- typedef
- decltype( std::declval<_Functor>()(std::declval<_ArgTypes>()...) )
- type;
- };
-
/// Determines if the type _Tp derives from unary_function.
template<typename _Tp>
struct _Derives_from_unary_function : __sfinae_types
@@ -401,7 +390,8 @@ namespace std
public:
typedef _Tp type;
- reference_wrapper(_Tp& __indata): _M_data(&__indata)
+ reference_wrapper(_Tp& __indata)
+ : _M_data(std::__addressof(__indata))
{ }
reference_wrapper(_Tp&&) = delete;
@@ -857,29 +847,6 @@ namespace std
: public integral_constant<int, _Num>
{ };
- /**
- * Stores a tuple of indices. Used by bind() to extract the elements
- * in a tuple.
- */
- template<int... _Indexes>
- struct _Index_tuple
- {
- typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
- };
-
- /// Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
- template<std::size_t _Num>
- struct _Build_index_tuple
- {
- typedef typename _Build_index_tuple<_Num-1>::__type::__next __type;
- };
-
- template<>
- struct _Build_index_tuple<0>
- {
- typedef _Index_tuple<> __type;
- };
-
/**
* Used by _Safe_tuple_element to indicate that there is no tuple
* element at this position.
@@ -1417,13 +1384,6 @@ namespace std
class bad_function_call : public std::exception { };
/**
- * The integral constant expression 0 can be converted into a
- * pointer to this type. It is used by the function template to
- * accept NULL pointers.
- */
- struct _M_clear_type;
-
- /**
* Trait identifying "location-invariant" types, meaning that the
* address of the object (or any of its members) will not escape.
* Also implies a trivial copy constructor and assignment operator.
@@ -1826,14 +1786,13 @@ namespace std
* @brief Default construct creates an empty function call wrapper.
* @post @c !(bool)*this
*/
- explicit
function() : _Function_base() { }
/**
- * @brief Default construct creates an empty function call wrapper.
+ * @brief Creates an empty function call wrapper.
* @post @c !(bool)*this
*/
- function(_M_clear_type*) : _Function_base() { }
+ function(nullptr_t) : _Function_base() { }
/**
* @brief %Function copy constructor.
@@ -1926,7 +1885,7 @@ namespace std
* The target of @c *this is deallocated, leaving it empty.
*/
function&
- operator=(_M_clear_type*)
+ operator=(nullptr_t)
{
if (_M_manager)
{
@@ -1981,16 +1940,9 @@ namespace std
*/
void swap(function& __x)
{
- /* We cannot perform direct assignments of the _M_functor
- parts as they are of type _Any_data and have a different
- dynamic type. Doing so would violate type-based aliasing
- rules and lead to spurious miscompilations.
- Instead perform a bytewise exchange of the memory of
- both POD objects.
- ??? A wordwise exchange honoring alignment of _M_functor
- would be more efficient. See PR42845. */
- for (unsigned i = 0; i < sizeof (_M_functor._M_pod_data); ++i)
- std::swap (_M_functor._M_pod_data[i], __x._M_functor._M_pod_data[i]);
+ _Any_data __old_functor = _M_functor;
+ _M_functor = __x._M_functor;
+ __x._M_functor = __old_functor;
_Manager_type __old_manager = _M_manager;
_M_manager = __x._M_manager;
__x._M_manager = __old_manager;
@@ -2179,13 +2131,13 @@ namespace std
*/
template<typename _Res, typename... _Args>
inline bool
- operator==(const function<_Res(_Args...)>& __f, _M_clear_type*)
+ operator==(const function<_Res(_Args...)>& __f, nullptr_t)
{ return !static_cast<bool>(__f); }
/// @overload
template<typename _Res, typename... _Args>
inline bool
- operator==(_M_clear_type*, const function<_Res(_Args...)>& __f)
+ operator==(nullptr_t, const function<_Res(_Args...)>& __f)
{ return !static_cast<bool>(__f); }
/**
@@ -2197,13 +2149,13 @@ namespace std
*/
template<typename _Res, typename... _Args>
inline bool
- operator!=(const function<_Res(_Args...)>& __f, _M_clear_type*)
+ operator!=(const function<_Res(_Args...)>& __f, nullptr_t)
{ return static_cast<bool>(__f); }
/// @overload
template<typename _Res, typename... _Args>
inline bool
- operator!=(_M_clear_type*, const function<_Res(_Args...)>& __f)
+ operator!=(nullptr_t, const function<_Res(_Args...)>& __f)
{ return static_cast<bool>(__f); }
// [20.7.15.2.7] specialized algorithms
diff --git a/libstdc++-v3/include/std/iterator b/libstdc++-v3/include/std/iterator
index a15bdf9744c..90152b7cb28 100644
--- a/libstdc++-v3/include/std/iterator
+++ b/libstdc++-v3/include/std/iterator
@@ -1,6 +1,6 @@
// <iterator> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,7 +58,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
#include <bits/stl_iterator.h>
@@ -66,5 +65,6 @@
#include <istream>
#include <bits/stream_iterator.h>
#include <bits/streambuf_iterator.h>
+#include <bits/range_access.h>
#endif /* _GLIBCXX_ITERATOR */
diff --git a/libstdc++-v3/include/std/list b/libstdc++-v3/include/std/list
index fcf164b4bd5..566bd89ca8e 100644
--- a/libstdc++-v3/include/std/list
+++ b/libstdc++-v3/include/std/list
@@ -61,6 +61,7 @@
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_list.h>
+#include <bits/range_access.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
# include <bits/list.tcc>
diff --git a/libstdc++-v3/include/std/map b/libstdc++-v3/include/std/map
index 25f86df6976..0ff8bdd94a2 100644
--- a/libstdc++-v3/include/std/map
+++ b/libstdc++-v3/include/std/map
@@ -60,6 +60,7 @@
#include <bits/stl_tree.h>
#include <bits/stl_map.h>
#include <bits/stl_multimap.h>
+#include <bits/range_access.h>
#ifdef _GLIBCXX_DEBUG
# include <debug/map>
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index 3e7d4e8466b..42e948a30d0 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -1,6 +1,7 @@
// <memory> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -81,10 +82,10 @@
# include <type_traits>
# include <functional>
# include <debug/debug.h>
-# include <bits/unique_ptr.h>
# if _GLIBCXX_DEPRECATED
# include <backward/auto_ptr.h>
# endif
+# include <bits/unique_ptr.h>
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/boost_sp_counted_base.h>
# else
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index be435cd38e5..b236f0db91d 100644
--- a/libstdc++-v3/include/std/mutex
+++ b/libstdc++-v3/include/std/mutex
@@ -37,7 +37,6 @@
#else
#include <tuple>
-#include <cstddef>
#include <chrono>
#include <exception>
#include <type_traits>
diff --git a/libstdc++-v3/include/std/ratio b/libstdc++-v3/include/std/ratio
index e169d79e8a5..74806c41d5a 100644
--- a/libstdc++-v3/include/std/ratio
+++ b/libstdc++-v3/include/std/ratio
@@ -233,23 +233,30 @@ namespace std
struct ratio_not_equal
: integral_constant<bool, !ratio_equal<_R1, _R2>::value>
{ };
-
+
+ template<typename _R1>
+ struct __ratio_less_impl_1
+ : integral_constant<bool, _R1::num < _R1::den>
+ { };
+
+ template<typename _R1, typename _R2,
+ bool = (_R1::num == 0 || _R2::num == 0
+ || (__static_sign<_R1::num>::value
+ != __static_sign<_R2::num>::value)),
+ bool = (__static_sign<_R1::num>::value == -1
+ && __static_sign<_R2::num>::value == -1)>
+ struct __ratio_less_impl
+ : __ratio_less_impl_1<typename ratio_divide<_R1, _R2>::type>::type
+ { };
+
template<typename _R1, typename _R2>
- struct __ratio_less_simple_impl
- : integral_constant<bool,
- (__safe_multiply<_R1::num, _R2::den>::value
- < __safe_multiply<_R2::num, _R1::den>::value)>
+ struct __ratio_less_impl<_R1, _R2, true, false>
+ : integral_constant<bool, _R1::num < _R2::num>
{ };
- // If the denominators are equal or the signs differ, we can just compare
- // numerators, otherwise fallback to the simple cross-multiply method.
template<typename _R1, typename _R2>
- struct __ratio_less_impl
- : conditional<(_R1::den == _R2::den
- || (__static_sign<_R1::num>::value
- != __static_sign<_R2::num>::value)),
- integral_constant<bool, (_R1::num < _R2::num)>,
- __ratio_less_simple_impl<_R1, _R2>>::type
+ struct __ratio_less_impl<_R1, _R2, false, true>
+ : __ratio_less_impl_1<typename ratio_divide<_R2, _R1>::type>::type
{ };
/// ratio_less
diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex
index e8238299b22..eabb843078e 100644
--- a/libstdc++-v3/include/std/regex
+++ b/libstdc++-v3/include/std/regex
@@ -35,33 +35,31 @@
# include <bits/c++0x_warning.h>
#else
-#if defined(_GLIBCXX_INCLUDE_AS_TR1)
-# error C++0x header cannot be included from TR1 header
-#endif
-
#include <algorithm>
#include <bitset>
+#include <functional>
+#ifdef _GLIBCXX_DEBUG
+# include <iosfwd>
+#endif
#include <iterator>
#include <locale>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <stack>
#include <stdexcept>
#include <string>
-#include <vector>
#include <utility>
-#include <sstream>
+#include <vector>
-#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
-# include <tr1_impl/regex>
-#else
-# define _GLIBCXX_INCLUDE_AS_CXX0X
-# define _GLIBCXX_BEGIN_NAMESPACE_TR1
-# define _GLIBCXX_END_NAMESPACE_TR1
-# define _GLIBCXX_TR1
-# include <tr1_impl/regex>
-# undef _GLIBCXX_TR1
-# undef _GLIBCXX_END_NAMESPACE_TR1
-# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
-# undef _GLIBCXX_INCLUDE_AS_CXX0X
-#endif
+#include <bits/range_access.h>
+#include <bits/regex_constants.h>
+#include <bits/regex_error.h>
+#include <bits/regex_cursor.h>
+#include <bits/regex_nfa.h>
+#include <bits/regex_compiler.h>
+#include <bits/regex_grep_matcher.h>
+#include <bits/regex.h>
#endif // __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/std/set b/libstdc++-v3/include/std/set
index 0b7805cabec..47d0c971a32 100644
--- a/libstdc++-v3/include/std/set
+++ b/libstdc++-v3/include/std/set
@@ -60,6 +60,7 @@
#include <bits/stl_tree.h>
#include <bits/stl_set.h>
#include <bits/stl_multiset.h>
+#include <bits/range_access.h>
#ifdef _GLIBCXX_DEBUG
# include <debug/set>
diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string
index 8c5949fd09c..439557fe169 100644
--- a/libstdc++-v3/include/std/string
+++ b/libstdc++-v3/include/std/string
@@ -51,6 +51,7 @@
#include <ext/numeric_traits.h>
#include <bits/stl_algobase.h>
#include <bits/basic_string.h>
+#include <bits/range_access.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
# include <bits/basic_string.tcc>
diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error
index 920b9dee37b..2c968e92e90 100644
--- a/libstdc++-v3/include/std/system_error
+++ b/libstdc++-v3/include/std/system_error
@@ -311,26 +311,29 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
public:
system_error(error_code __ec = error_code())
- : runtime_error(""), _M_code(__ec) { }
+ : runtime_error(__ec.message()), _M_code(__ec) { }
system_error(error_code __ec, const string& __what)
- : runtime_error(__what), _M_code(__ec) { }
-
+ : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
+
/*
* TODO: Add const char* ctors to all exceptions.
*
* system_error(error_code __ec, const char* __what)
- * : runtime_error(__what), _M_code(__ec) { }
+ * : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
*
* system_error(int __v, const error_category& __ecat, const char* __what)
- * : runtime_error(__what), _M_code(error_code(__v, __ecat)) { }
+ * : runtime_error(__what + (": " + __ec.message())),
+ * _M_code(error_code(__v, __ecat)) { }
*/
system_error(int __v, const error_category& __ecat)
- : runtime_error(""), _M_code(error_code(__v, __ecat)) { }
+ : runtime_error(error_code(__v, __ecat).message()),
+ _M_code(__v, __ecat) { }
system_error(int __v, const error_category& __ecat, const string& __what)
- : runtime_error(__what), _M_code(error_code(__v, __ecat)) { }
+ : runtime_error(__what + ": " + error_code(__v, __ecat).message()),
+ _M_code(__v, __ecat) { }
virtual ~system_error() throw();
@@ -355,8 +358,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
size_t
operator()(const error_code& __e) const
{
- const size_t __tmp = std::_Fnv_hash::hash(__e._M_value);
- return std::_Fnv_hash::__hash_combine(__e._M_cat, __tmp);
+ const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
+ return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
}
};
@@ -367,4 +370,3 @@ _GLIBCXX_END_NAMESPACE
#endif // __GXX_EXPERIMENTAL_CXX0X__
#endif // _GLIBCXX_SYSTEM_ERROR
-
diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread
index 470f2c0f35c..38e9d45a46d 100644
--- a/libstdc++-v3/include/std/thread
+++ b/libstdc++-v3/include/std/thread
@@ -40,7 +40,6 @@
#include <memory>
#include <mutex>
#include <condition_variable>
-#include <cstddef>
#include <bits/functexcept.h>
#include <bits/functional_hash.h>
#include <bits/gthr.h>
@@ -124,6 +123,7 @@ namespace std
public:
thread() = default;
+ thread(thread&) = delete;
thread(const thread&) = delete;
thread(thread&& __t)
@@ -228,7 +228,7 @@ namespace std
{
size_t
operator()(const thread::id& __id) const
- { return std::_Fnv_hash::hash(__id._M_thread); }
+ { return std::_Hash_impl::hash(__id._M_thread); }
};
template<class _CharT, class _Traits>
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index bba7ba7bd08..67a6eb79e94 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -160,8 +160,7 @@ namespace std
: _Inherited(std::forward<_UTail>(__tail)...),
_Base(std::forward<_UHead>(__head)) { }
- _Tuple_impl(const _Tuple_impl& __in)
- : _Inherited(__in._M_tail()), _Base(__in._M_head()) { }
+ _Tuple_impl(const _Tuple_impl&) = default;
_Tuple_impl(_Tuple_impl&& __in)
: _Inherited(std::move(__in._M_tail())),
@@ -233,31 +232,30 @@ namespace std
tuple(const _Elements&... __elements)
: _Inherited(__elements...) { }
- template<typename... _UElements>
+ template<typename... _UElements, typename = typename
+ std::enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
explicit
tuple(_UElements&&... __elements)
: _Inherited(std::forward<_UElements>(__elements)...) { }
- tuple(const tuple& __in)
- : _Inherited(static_cast<const _Inherited&>(__in)) { }
+ tuple(const tuple&) = default;
tuple(tuple&& __in)
: _Inherited(static_cast<_Inherited&&>(__in)) { }
- template<typename... _UElements>
+ template<typename... _UElements, typename = typename
+ std::enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple(const tuple<_UElements...>& __in)
- : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
- { }
+ : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+ { }
- template<typename... _UElements>
+ template<typename... _UElements, typename = typename
+ std::enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple(tuple<_UElements...>&& __in)
- : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
-
- // XXX http://gcc.gnu.org/ml/libstdc++/2008-02/msg00047.html
- template<typename... _UElements>
- tuple(tuple<_UElements...>& __in)
- : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
- { }
+ : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
tuple&
operator=(const tuple& __in)
@@ -273,7 +271,9 @@ namespace std
return *this;
}
- template<typename... _UElements>
+ template<typename... _UElements, typename = typename
+ std::enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple&
operator=(const tuple<_UElements...>& __in)
{
@@ -281,7 +281,9 @@ namespace std
return *this;
}
- template<typename... _UElements>
+ template<typename... _UElements, typename = typename
+ std::enable_if<sizeof...(_UElements)
+ == sizeof...(_Elements)>::type>
tuple&
operator=(tuple<_UElements...>&& __in)
{
@@ -294,7 +296,6 @@ namespace std
{ _Inherited::_M_swap_impl(__in); }
};
-
template<>
class tuple<>
{
@@ -321,8 +322,7 @@ namespace std
tuple(_U1&& __a1, _U2&& __a2)
: _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
- tuple(const tuple& __in)
- : _Inherited(static_cast<const _Inherited&>(__in)) { }
+ tuple(const tuple&) = default;
tuple(tuple&& __in)
: _Inherited(static_cast<_Inherited&&>(__in)) { }
@@ -341,7 +341,8 @@ namespace std
template<typename _U1, typename _U2>
tuple(pair<_U1, _U2>&& __in)
- : _Inherited(std::move(__in.first), std::move(__in.second)) { }
+ : _Inherited(std::forward<_U1>(__in.first),
+ std::forward<_U2>(__in.second)) { }
tuple&
operator=(const tuple& __in)
@@ -386,8 +387,8 @@ namespace std
tuple&
operator=(pair<_U1, _U2>&& __in)
{
- this->_M_head() = std::move(__in.first);
- this->_M_tail()._M_head() = std::move(__in.second);
+ this->_M_head() = std::forward<_U1>(__in.first);
+ this->_M_tail()._M_head() = std::forward<_U2>(__in.second);
return *this;
}
@@ -400,6 +401,74 @@ namespace std
}
};
+ /// tuple (1-element).
+ template<typename _T1>
+ class tuple<_T1> : public _Tuple_impl<0, _T1>
+ {
+ typedef _Tuple_impl<0, _T1> _Inherited;
+
+ public:
+ tuple()
+ : _Inherited() { }
+
+ explicit
+ tuple(const _T1& __a1)
+ : _Inherited(__a1) { }
+
+ template<typename _U1, typename = typename
+ std::enable_if<std::is_convertible<_U1, _T1>::value>::type>
+ explicit
+ tuple(_U1&& __a1)
+ : _Inherited(std::forward<_U1>(__a1)) { }
+
+ tuple(const tuple&) = default;
+
+ tuple(tuple&& __in)
+ : _Inherited(static_cast<_Inherited&&>(__in)) { }
+
+ template<typename _U1>
+ tuple(const tuple<_U1>& __in)
+ : _Inherited(static_cast<const _Tuple_impl<0, _U1>&>(__in)) { }
+
+ template<typename _U1>
+ tuple(tuple<_U1>&& __in)
+ : _Inherited(static_cast<_Tuple_impl<0, _U1>&&>(__in)) { }
+
+ tuple&
+ operator=(const tuple& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
+
+ tuple&
+ operator=(tuple&& __in)
+ {
+ static_cast<_Inherited&>(*this) = std::move(__in);
+ return *this;
+ }
+
+ template<typename _U1>
+ tuple&
+ operator=(const tuple<_U1>& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
+
+ template<typename _U1>
+ tuple&
+ operator=(tuple<_U1>&& __in)
+ {
+ static_cast<_Inherited&>(*this) = std::move(__in);
+ return *this;
+ }
+
+ void
+ swap(tuple& __in)
+ { _Inherited::_M_swap_impl(__in); }
+ };
+
/// Gives the type of the ith element of a given tuple type.
template<std::size_t __i, typename _Tp>
@@ -550,6 +619,11 @@ namespace std
return __result_type(std::forward<_Elements>(__args)...);
}
+ template<typename... _Elements>
+ inline tuple<_Elements&&...>
+ forward_as_tuple(_Elements&&... __args)
+ { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
+
template<std::size_t...> struct __index_holder { };
template<std::size_t __i, typename _IdxHolder, typename... _Elements>
@@ -668,16 +742,55 @@ namespace std
struct _Swallow_assign
{
template<class _Tp>
- _Swallow_assign&
- operator=(const _Tp&)
+ const _Swallow_assign&
+ operator=(const _Tp&) const
{ return *this; }
};
- // TODO: Put this in some kind of shared file.
- namespace
- {
- _Swallow_assign ignore;
- }; // anonymous namespace
+ const _Swallow_assign ignore{};
+
+ /**
+ * Stores a tuple of indices. Used by bind() to extract the elements
+ * in a tuple.
+ */
+ template<int... _Indexes>
+ struct _Index_tuple
+ {
+ typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
+ };
+
+ /// Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
+ template<std::size_t _Num>
+ struct _Build_index_tuple
+ {
+ typedef typename _Build_index_tuple<_Num-1>::__type::__next __type;
+ };
+
+ template<>
+ struct _Build_index_tuple<0>
+ {
+ typedef _Index_tuple<> __type;
+ };
+
+ // See stl_pair.h...
+ template<class _T1, class _T2>
+ template<typename _Tp, typename... _Args>
+ inline _Tp
+ pair<_T1, _T2>::
+ __cons(tuple<_Args...>&& __tuple)
+ {
+ typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
+ _Indexes;
+ return __do_cons<_Tp>(std::move(__tuple), _Indexes());
+ }
+
+ template<class _T1, class _T2>
+ template<typename _Tp, typename... _Args, int... _Indexes>
+ inline _Tp
+ pair<_T1, _T2>::
+ __do_cons(tuple<_Args...>&& __tuple,
+ const _Index_tuple<_Indexes...>&)
+ { return _Tp(std::forward<_Args>(get<_Indexes>(__tuple))...); }
}
#endif // __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index c8166198805..f4d0b267759 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -39,7 +39,7 @@
# error C++0x header cannot be included from TR1 header
#endif
-#include <cstddef>
+#include <bits/c++config.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/type_traits>
@@ -193,7 +193,7 @@ namespace std
{ };
template<typename _Tp>
- typename add_rvalue_reference<_Tp>::type declval();
+ typename add_rvalue_reference<_Tp>::type declval() noexcept;
template<typename _Tp, typename... _Args>
class __is_constructible_helper
@@ -234,6 +234,28 @@ namespace std
_Args...>::__value>
{ };
+ template<bool, typename _Tp, typename... _Args>
+ struct __is_nt_constructible_helper
+ { static const bool __value = false; };
+
+ template<typename _Tp, typename... _Args>
+ struct __is_nt_constructible_helper<true, _Tp, _Args...>
+ { static const bool __value = noexcept(_Tp(declval<_Args>()...)); };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_nt_constructible_helper<true, _Tp, _Arg>
+ {
+ static const bool __value = noexcept(static_cast<_Tp>(declval<_Arg>()));
+ };
+
+ /// is_nothrow_constructible
+ template<typename _Tp, typename... _Args>
+ struct is_nothrow_constructible
+ : public integral_constant<bool,
+ __is_nt_constructible_helper<is_constructible<_Tp, _Args...>::value,
+ _Tp, _Args...>::__value>
+ { };
+
/// has_trivial_default_constructor
template<typename _Tp>
struct has_trivial_default_constructor
@@ -246,9 +268,9 @@ namespace std
: public integral_constant<bool, __has_trivial_copy(_Tp)>
{ };
- /// has_trivial_assign
+ /// has_trivial_copy_assign
template<typename _Tp>
- struct has_trivial_assign
+ struct has_trivial_copy_assign
: public integral_constant<bool, __has_trivial_assign(_Tp)>
{ };
@@ -270,9 +292,9 @@ namespace std
: public integral_constant<bool, __has_nothrow_copy(_Tp)>
{ };
- /// has_nothrow_assign
+ /// has_nothrow_copy_assign
template<typename _Tp>
- struct has_nothrow_assign
+ struct has_nothrow_copy_assign
: public integral_constant<bool, __has_nothrow_assign(_Tp)>
{ };
@@ -285,21 +307,27 @@ namespace std
{ };
template<typename _From, typename _To,
- bool = (is_void<_From>::value || is_void<_To>::value
- || is_function<_To>::value || is_array<_To>::value)>
+ bool = (is_void<_From>::value || is_function<_To>::value
+ || is_array<_To>::value)>
struct __is_convertible_helper
- { static const bool __value = (is_void<_From>::value
- && is_void<_To>::value); };
+ { static const bool __value = is_void<_To>::value; };
template<typename _From, typename _To>
class __is_convertible_helper<_From, _To, false>
: public __sfinae_types
{
- static __one __test(_To);
- static __two __test(...);
+ template<typename _To1>
+ static void __test_aux(_To1);
+
+ template<typename _From1, typename _To1>
+ static decltype(__test_aux<_To1>(std::declval<_From1>()), __one())
+ __test(int);
+
+ template<typename, typename>
+ static __two __test(...);
public:
- static const bool __value = sizeof(__test(declval<_From>())) == 1;
+ static const bool __value = sizeof(__test<_From, _To>(0)) == 1;
};
/// is_convertible
@@ -405,6 +433,35 @@ namespace std
typedef typename __decay_selector<__remove_type>::__type type;
};
+ template<typename _Tp>
+ class reference_wrapper;
+
+ // Helper which adds a reference to a type when given a reference_wrapper
+ template<typename _Tp>
+ struct __strip_reference_wrapper
+ {
+ typedef _Tp __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename _Tp>
+ struct __decay_and_strip
+ {
+ typedef typename __strip_reference_wrapper<
+ typename decay<_Tp>::type>::__type __type;
+ };
+
// Utility for constructing identically cv-qualified types.
template<typename _Unqualified, bool _IsConst, bool _IsVol>
@@ -609,7 +666,6 @@ namespace std
typedef typename
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};
- // @} group metaprogramming
/// declval
template<typename _Tp>
@@ -621,12 +677,26 @@ namespace std
template<typename _Tp>
inline typename add_rvalue_reference<_Tp>::type
- declval()
+ declval() noexcept
{
static_assert(__declval_protector<_Tp>::__stop,
"declval() must not be used!");
return __declval_protector<_Tp>::__delegate();
}
+
+ /// result_of
+ template<typename _Signature>
+ class result_of;
+
+ template<typename _Functor, typename... _ArgTypes>
+ struct result_of<_Functor(_ArgTypes...)>
+ {
+ typedef
+ decltype( std::declval<_Functor>()(std::declval<_ArgTypes>()...) )
+ type;
+ };
+
+ // @} group metaprogramming
}
#endif // __GXX_EXPERIMENTAL_CXX0X__
diff --git a/libstdc++-v3/include/std/unordered_map b/libstdc++-v3/include/std/unordered_map
index 8b664e8fc78..e77a2972af8 100644
--- a/libstdc++-v3/include/std/unordered_map
+++ b/libstdc++-v3/include/std/unordered_map
@@ -44,6 +44,7 @@
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
#include <bits/unordered_map.h>
+#include <bits/range_access.h>
#ifdef _GLIBCXX_DEBUG
# include <debug/unordered_map>
diff --git a/libstdc++-v3/include/std/unordered_set b/libstdc++-v3/include/std/unordered_set
index edbf8f11d8b..739e0a4a449 100644
--- a/libstdc++-v3/include/std/unordered_set
+++ b/libstdc++-v3/include/std/unordered_set
@@ -44,6 +44,7 @@
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
#include <bits/unordered_set.h>
+#include <bits/range_access.h>
#ifdef _GLIBCXX_DEBUG
# include <debug/unordered_set>
diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray
index fa92751791d..d67eae26ef7 100644
--- a/libstdc++-v3/include/std/valarray
+++ b/libstdc++-v3/include/std/valarray
@@ -1,7 +1,7 @@
// The template and inlines for the -*- C++ -*- valarray class.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -36,7 +36,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <cmath>
#include <algorithm>
#include <debug/debug.h>
@@ -1108,6 +1107,48 @@ _DEFINE_BINARY_OPERATOR(>=, __greater_equal)
#undef _DEFINE_BINARY_OPERATOR
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
+ * @brief Return an iterator pointing to the first element of
+ * the valarray.
+ * @param va valarray.
+ */
+ template<class _Tp>
+ inline _Tp*
+ begin(valarray<_Tp>& __va)
+ { return std::__addressof(__va[0]); }
+
+ /**
+ * @brief Return an iterator pointing to the first element of
+ * the const valarray.
+ * @param va valarray.
+ */
+ template<class _Tp>
+ inline const _Tp*
+ begin(const valarray<_Tp>& __va)
+ { return std::__addressof(__va[0]); }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element of
+ * the valarray.
+ * @param va valarray.
+ */
+ template<class _Tp>
+ inline _Tp*
+ end(valarray<_Tp>& __va)
+ { return std::__addressof(__va[0]) + __va.size(); }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element of
+ * the const valarray.
+ * @param va valarray.
+ */
+ template<class _Tp>
+ inline const _Tp*
+ end(const valarray<_Tp>& __va)
+ { return std::__addressof(__va[0]) + __va.size(); }
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
// @} group numeric_arrays
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector
index 41ecdde6c7b..ca44aaccf66 100644
--- a/libstdc++-v3/include/std/vector
+++ b/libstdc++-v3/include/std/vector
@@ -64,6 +64,7 @@
#include <bits/stl_uninitialized.h>
#include <bits/stl_vector.h>
#include <bits/stl_bvector.h>
+#include <bits/range_access.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
# include <bits/vector.tcc>
diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional
index 7bc0d5e5f75..3340de6fffc 100644
--- a/libstdc++-v3/include/tr1/functional
+++ b/libstdc++-v3/include/tr1/functional
@@ -42,6 +42,7 @@
#include <bits/stringfwd.h>
#include <tr1/functional_hash.h>
#include <ext/type_traits.h>
+#include <bits/move.h> // for std::__addressof
namespace std
{
@@ -452,7 +453,8 @@ namespace tr1
typedef _Tp type;
explicit
- reference_wrapper(_Tp& __indata): _M_data(&__indata)
+ reference_wrapper(_Tp& __indata)
+ : _M_data(std::__addressof(__indata))
{ }
reference_wrapper(const reference_wrapper<_Tp>& __inref):
@@ -1905,16 +1907,9 @@ namespace tr1
*/
void swap(function& __x)
{
- /* We cannot perform direct assignments of the _M_functor
- parts as they are of type _Any_data and have a different
- dynamic type. Doing so would violate type-based aliasing
- rules and lead to spurious miscompilations.
- Instead perform a bytewise exchange of the memory of
- both POD objects.
- ??? A wordwise exchange honoring alignment of _M_functor
- would be more efficient. See PR42845. */
- for (unsigned i = 0; i < sizeof (_M_functor._M_pod_data); ++i)
- std::swap (_M_functor._M_pod_data[i], __x._M_functor._M_pod_data[i]);
+ _Any_data __old_functor = _M_functor;
+ _M_functor = __x._M_functor;
+ __x._M_functor = __old_functor;
_Manager_type __old_manager = _M_manager;
_M_manager = __x._M_manager;
__x._M_manager = __old_manager;
diff --git a/libstdc++-v3/include/tr1/hashtable_policy.h b/libstdc++-v3/include/tr1/hashtable_policy.h
index 2a0e0ed4e1a..514fdb0983e 100644
--- a/libstdc++-v3/include/tr1/hashtable_policy.h
+++ b/libstdc++-v3/include/tr1/hashtable_policy.h
@@ -136,7 +136,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur->_M_v; }
+ { return std::__addressof(this->_M_cur->_M_v); }
_Node_iterator&
operator++()
@@ -181,7 +181,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur->_M_v; }
+ { return std::__addressof(this->_M_cur->_M_v); }
_Node_const_iterator&
operator++()
@@ -281,7 +281,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur_node->_M_v; }
+ { return std::__addressof(this->_M_cur_node->_M_v); }
_Hashtable_iterator&
operator++()
@@ -331,7 +331,7 @@ namespace __detail
pointer
operator->() const
- { return &this->_M_cur_node->_M_v; }
+ { return std::__addressof(this->_M_cur_node->_M_v); }
_Hashtable_const_iterator&
operator++()
diff --git a/libstdc++-v3/include/tr1/random.tcc b/libstdc++-v3/include/tr1/random.tcc
index f458cc74748..1bc8f1f8fbb 100644
--- a/libstdc++-v3/include/tr1/random.tcc
+++ b/libstdc++-v3/include/tr1/random.tcc
@@ -28,6 +28,9 @@
* You should not attempt to use it directly.
*/
+#ifndef _GLIBCXX_TR1_RANDOM_TCC
+#define _GLIBCXX_TR1_RANDOM_TCC 1
+
namespace std
{
namespace tr1
@@ -1708,3 +1711,5 @@ namespace tr1
}
}
}
+
+#endif
diff --git a/libstdc++-v3/include/tr1/shared_ptr.h b/libstdc++-v3/include/tr1/shared_ptr.h
index 6176b5e4814..f504e083c52 100644
--- a/libstdc++-v3/include/tr1/shared_ptr.h
+++ b/libstdc++-v3/include/tr1/shared_ptr.h
@@ -1,6 +1,6 @@
// <tr1/shared_ptr.h> -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -367,7 +367,7 @@ namespace tr1
: _M_ptr(__p), _M_refcount(__p)
{
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- // __glibcxx_function_requires(_CompleteConcept<_Tp1*>)
+ typedef int _IsComplete[sizeof(_Tp1)];
__enable_shared_from_this_helper(_M_refcount, __p, __p);
}
@@ -404,9 +404,9 @@ namespace tr1
explicit
__shared_ptr(std::auto_ptr<_Tp1>& __r)
: _M_ptr(__r.get()), _M_refcount()
- {
+ { // TODO requries delete __r.release() well-formed
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
- // TODO requires _Tp1 is complete, delete __r.release() well-formed
+ typedef int _IsComplete[sizeof(_Tp1)];
_Tp1* __tmp = __r.get();
_M_refcount = __shared_count<_Lp>(__r);
__enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index fe28f84785a..33083ff9c73 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -1,6 +1,7 @@
// TR1 type_traits -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,7 +36,7 @@
# error TR1 header cannot be included from C++0x header
#endif
-#include <cstddef>
+#include <bits/c++config.h>
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/type_traits>
diff --git a/libstdc++-v3/include/tr1_impl/array b/libstdc++-v3/include/tr1_impl/array
index edc4aec90b4..db0364e5357 100644
--- a/libstdc++-v3/include/tr1_impl/array
+++ b/libstdc++-v3/include/tr1_impl/array
@@ -83,19 +83,19 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
// Iterators.
iterator
begin()
- { return iterator(&_M_instance[0]); }
+ { return iterator(std::__addressof(_M_instance[0])); }
const_iterator
begin() const
- { return const_iterator(&_M_instance[0]); }
+ { return const_iterator(std::__addressof(_M_instance[0])); }
iterator
end()
- { return iterator(&_M_instance[_Nm]); }
+ { return iterator(std::__addressof(_M_instance[_Nm])); }
const_iterator
end() const
- { return const_iterator(&_M_instance[_Nm]); }
+ { return const_iterator(std::__addressof(_M_instance[_Nm])); }
reverse_iterator
rbegin()
@@ -116,11 +116,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
const_iterator
cbegin() const
- { return const_iterator(&_M_instance[0]); }
+ { return const_iterator(std::__addressof(_M_instance[0])); }
const_iterator
cend() const
- { return const_iterator(&_M_instance[_Nm]); }
+ { return const_iterator(std::__addressof(_M_instance[_Nm])); }
const_reverse_iterator
crbegin() const
@@ -182,13 +182,13 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
back() const
{ return _Nm ? *(end() - 1) : *end(); }
- _Tp*
+ _Tp*
data()
- { return &_M_instance[0]; }
+ { return std::__addressof(_M_instance[0]); }
- const _Tp*
+ const _Tp*
data() const
- { return &_M_instance[0]; }
+ { return std::__addressof(_M_instance[0]); }
};
// Array comparisons.
diff --git a/libstdc++-v3/include/tr1_impl/boost_sp_counted_base.h b/libstdc++-v3/include/tr1_impl/boost_sp_counted_base.h
index 56030856dca..11a2d052dfc 100644
--- a/libstdc++-v3/include/tr1_impl/boost_sp_counted_base.h
+++ b/libstdc++-v3/include/tr1_impl/boost_sp_counted_base.h
@@ -1,6 +1,6 @@
// <tr1_impl/boost_sp_counted_base.h> -*- C++ -*-
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -139,8 +139,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
void
_M_release() // nothrow
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
{
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
_M_dispose();
// There must be a memory barrier between dispose() and destroy()
// to ensure that the effects of dispose() are observed in the
@@ -152,9 +155,14 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
_GLIBCXX_WRITE_MEM_BARRIER;
}
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
-1) == 1)
- _M_destroy();
+ {
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
+ _M_destroy();
+ }
}
}
@@ -165,8 +173,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
void
_M_weak_release() // nothrow
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
{
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
if (_Mutex_base<_Lp>::_S_need_barriers)
{
// See _M_release(),
diff --git a/libstdc++-v3/include/tr1_impl/cmath b/libstdc++-v3/include/tr1_impl/cmath
index 5807380f193..cf460dd7c95 100644
--- a/libstdc++-v3/include/tr1_impl/cmath
+++ b/libstdc++-v3/include/tr1_impl/cmath
@@ -1,6 +1,6 @@
// TR1 cmath -*- C++ -*-
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -294,21 +294,115 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
/// Function template definitions [8.16.3].
- using std::signbit;
-
- using std::fpclassify;
-
- using std::isfinite;
- using std::isinf;
- using std::isnan;
- using std::isnormal;
-
- using std::isgreater;
- using std::isgreaterequal;
- using std::isless;
- using std::islessequal;
- using std::islessgreater;
- using std::isunordered;
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ fpclassify(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+ FP_SUBNORMAL, FP_ZERO, __type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isfinite(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isfinite(__type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isinf(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isinf(__type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isnan(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isnan(__type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isnormal(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isnormal(__type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ signbit(_Tp __f)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_signbit(__type(__f));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isgreater(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isgreater(__type(__f1), __type(__f2));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isgreaterequal(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isgreaterequal(__type(__f1), __type(__f2));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isless(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isless(__type(__f1), __type(__f2));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ islessequal(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_islessequal(__type(__f1), __type(__f2));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ islessgreater(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_islessgreater(__type(__f1), __type(__f2));
+ }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+ int>::__type
+ isunordered(_Tp __f1, _Tp __f2)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return __builtin_isunordered(__type(__f1), __type(__f2));
+ }
+
#endif
#endif
diff --git a/libstdc++-v3/include/tr1_impl/utility b/libstdc++-v3/include/tr1_impl/utility
index a31c4da8794..71b8719f5ff 100644
--- a/libstdc++-v3/include/tr1_impl/utility
+++ b/libstdc++-v3/include/tr1_impl/utility
@@ -1,6 +1,6 @@
// TR1 utility -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index a535d49cd51..7c00b672608 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -36,8 +36,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(glibcxxinstall_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(glibcxxinstall_HEADERS)
subdir = libsupc++
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -56,6 +56,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -87,18 +88,6 @@ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
"$(DESTDIR)$(glibcxxinstalldir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
libsupc___la_LIBADD =
-am__libsupc___la_SOURCES_DIST = array_type_info.cc atexit_arm.cc \
- bad_cast.cc bad_typeid.cc class_type_info.cc del_op.cc \
- del_opnt.cc del_opv.cc del_opvnt.cc dyncast.cc eh_alloc.cc \
- eh_arm.cc eh_aux_runtime.cc eh_call.cc eh_catch.cc \
- eh_exception.cc eh_globals.cc eh_personality.cc eh_ptr.cc \
- eh_term_handler.cc eh_terminate.cc eh_throw.cc eh_type.cc \
- eh_unex_handler.cc enum_type_info.cc function_type_info.cc \
- fundamental_type_info.cc guard.cc new_handler.cc new_op.cc \
- new_opnt.cc new_opv.cc new_opvnt.cc pbase_type_info.cc \
- pmem_type_info.cc pointer_type_info.cc pure.cc \
- si_class_type_info.cc tinfo.cc tinfo2.cc vec.cc \
- vmi_class_type_info.cc vterminate.cc cp-demangle.c
am__objects_1 = array_type_info.lo atexit_arm.lo bad_cast.lo \
bad_typeid.lo class_type_info.lo del_op.lo del_opnt.lo \
del_opv.lo del_opvnt.lo dyncast.lo eh_alloc.lo eh_arm.lo \
@@ -115,18 +104,6 @@ am__objects_1 = array_type_info.lo atexit_arm.lo bad_cast.lo \
am_libsupc___la_OBJECTS = $(am__objects_1) $(am__objects_2)
libsupc___la_OBJECTS = $(am_libsupc___la_OBJECTS)
libsupc__convenience_la_LIBADD =
-am__libsupc__convenience_la_SOURCES_DIST = array_type_info.cc \
- atexit_arm.cc bad_cast.cc bad_typeid.cc class_type_info.cc \
- del_op.cc del_opnt.cc del_opv.cc del_opvnt.cc dyncast.cc \
- eh_alloc.cc eh_arm.cc eh_aux_runtime.cc eh_call.cc eh_catch.cc \
- eh_exception.cc eh_globals.cc eh_personality.cc eh_ptr.cc \
- eh_term_handler.cc eh_terminate.cc eh_throw.cc eh_type.cc \
- eh_unex_handler.cc enum_type_info.cc function_type_info.cc \
- fundamental_type_info.cc guard.cc new_handler.cc new_op.cc \
- new_opnt.cc new_opv.cc new_opvnt.cc pbase_type_info.cc \
- pmem_type_info.cc pointer_type_info.cc pure.cc \
- si_class_type_info.cc tinfo.cc tinfo2.cc vec.cc \
- vmi_class_type_info.cc vterminate.cc cp-demangle.c
am_libsupc__convenience_la_OBJECTS = $(am__objects_1) $(am__objects_2)
libsupc__convenience_la_OBJECTS = \
$(am_libsupc__convenience_la_OBJECTS)
@@ -143,12 +120,9 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
SOURCES = $(libsupc___la_SOURCES) $(libsupc__convenience_la_SOURCES)
-DIST_SOURCES = $(am__libsupc___la_SOURCES_DIST) \
- $(am__libsupc__convenience_la_SOURCES_DIST)
HEADERS = $(glibcxxinstall_HEADERS)
ETAGS = etags
CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -185,6 +159,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -638,37 +613,6 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
@@ -776,14 +720,14 @@ uninstall-am: uninstall-glibcxxinstallHEADERS \
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES \
clean-toolexeclibLTLIBRARIES ctags distclean distclean-compile \
- distclean-generic distclean-libtool distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-glibcxxinstallHEADERS \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip install-toolexeclibLTLIBRARIES \
- installcheck installcheck-am installdirs maintainer-clean \
+ distclean-generic distclean-libtool distclean-tags dvi dvi-am \
+ html html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-glibcxxinstallHEADERS install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip install-toolexeclibLTLIBRARIES installcheck \
+ installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-glibcxxinstallHEADERS \
diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxabi.h
index 3ee3b8dcace..be898d7811a 100644
--- a/libstdc++-v3/libsupc++/cxxabi.h
+++ b/libstdc++-v3/libsupc++/cxxabi.h
@@ -53,7 +53,7 @@
#ifdef __cplusplus
#define _GLIBCXX_NOTHROW throw()
#else
-#define _GLIBCXX_NOTHROW __attribute__((nothrow))
+#define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
#endif
#ifdef __cplusplus
@@ -68,55 +68,55 @@ namespace __cxxabiv1
// Allocate array.
void*
__cxa_vec_new(size_t __element_count, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type constructor,
- __cxa_cdtor_type destructor);
+ size_t __padding_size, __cxa_cdtor_type __constructor,
+ __cxa_cdtor_type __destructor);
void*
__cxa_vec_new2(size_t __element_count, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type constructor,
- __cxa_cdtor_type destructor, void *(*__alloc) (size_t),
+ size_t __padding_size, __cxa_cdtor_type __constructor,
+ __cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
void (*__dealloc) (void*));
void*
__cxa_vec_new3(size_t __element_count, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type constructor,
- __cxa_cdtor_type destructor, void *(*__alloc) (size_t),
+ size_t __padding_size, __cxa_cdtor_type __constructor,
+ __cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
void (*__dealloc) (void*, size_t));
// Construct array.
__cxa_vec_ctor_return_type
__cxa_vec_ctor(void* __array_address, size_t __element_count,
- size_t __element_size, __cxa_cdtor_type constructor,
- __cxa_cdtor_type destructor);
+ size_t __element_size, __cxa_cdtor_type __constructor,
+ __cxa_cdtor_type __destructor);
__cxa_vec_ctor_return_type
- __cxa_vec_cctor(void* dest_array, void* src_array, size_t element_count,
- size_t element_size,
- __cxa_cdtor_return_type (*constructor) (void*, void*),
- __cxa_cdtor_type destructor);
+ __cxa_vec_cctor(void* __dest_array, void* __src_array,
+ size_t __element_count, size_t __element_size,
+ __cxa_cdtor_return_type (*__constructor) (void*, void*),
+ __cxa_cdtor_type __destructor);
// Destruct array.
void
__cxa_vec_dtor(void* __array_address, size_t __element_count,
- size_t __element_size, __cxa_cdtor_type destructor);
+ size_t __element_size, __cxa_cdtor_type __destructor);
void
- __cxa_vec_cleanup(void* __array_address, size_t __element_count,
- size_t __s, __cxa_cdtor_type destructor) _GLIBCXX_NOTHROW;
+ __cxa_vec_cleanup(void* __array_address, size_t __element_count, size_t __s,
+ __cxa_cdtor_type __destructor) _GLIBCXX_NOTHROW;
// Destruct and release array.
void
__cxa_vec_delete(void* __array_address, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type destructor);
+ size_t __padding_size, __cxa_cdtor_type __destructor);
void
__cxa_vec_delete2(void* __array_address, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type destructor,
+ size_t __padding_size, __cxa_cdtor_type __destructor,
void (*__dealloc) (void*));
void
__cxa_vec_delete3(void* __array_address, size_t __element_size,
- size_t __padding_size, __cxa_cdtor_type destructor,
+ size_t __padding_size, __cxa_cdtor_type __destructor,
void (*__dealloc) (void*, size_t));
int
diff --git a/libstdc++-v3/libsupc++/eh_arm.cc b/libstdc++-v3/libsupc++/eh_arm.cc
index 58997cc1768..e508ada9e09 100644
--- a/libstdc++-v3/libsupc++/eh_arm.cc
+++ b/libstdc++-v3/libsupc++/eh_arm.cc
@@ -157,22 +157,26 @@ __gnu_end_cleanup(void)
// Assembly wrapper to call __gnu_end_cleanup without clobbering r1-r3.
// Also push r4 to preserve stack alignment.
#ifdef __thumb__
-asm (".global __cxa_end_cleanup\n"
+asm (" .pushsection .text.__cxa_end_cleanup\n"
+" .global __cxa_end_cleanup\n"
" .type __cxa_end_cleanup, \"function\"\n"
" .thumb_func\n"
"__cxa_end_cleanup:\n"
" push\t{r1, r2, r3, r4}\n"
" bl\t__gnu_end_cleanup\n"
" pop\t{r1, r2, r3, r4}\n"
-" bl\t_Unwind_Resume @ Never returns\n");
+" bl\t_Unwind_Resume @ Never returns\n"
+" .popsection\n");
#else
-asm (".global __cxa_end_cleanup\n"
+asm (" .pushsection .text.__cxa_end_cleanup\n"
+" .global __cxa_end_cleanup\n"
" .type __cxa_end_cleanup, \"function\"\n"
"__cxa_end_cleanup:\n"
" stmfd\tsp!, {r1, r2, r3, r4}\n"
" bl\t__gnu_end_cleanup\n"
" ldmfd\tsp!, {r1, r2, r3, r4}\n"
-" bl\t_Unwind_Resume @ Never returns\n");
+" bl\t_Unwind_Resume @ Never returns\n"
+" .popsection\n");
#endif
#endif
diff --git a/libstdc++-v3/libsupc++/eh_ptr.cc b/libstdc++-v3/libsupc++/eh_ptr.cc
index 8a0167d7510..abe59a214be 100644
--- a/libstdc++-v3/libsupc++/eh_ptr.cc
+++ b/libstdc++-v3/libsupc++/eh_ptr.cc
@@ -102,10 +102,6 @@ std::__exception_ptr::exception_ptr::_M_get() const throw()
void
-std::__exception_ptr::exception_ptr::_M_safe_bool_dummy() throw () { }
-
-
-void
std::__exception_ptr::exception_ptr::swap(exception_ptr &other) throw()
{
void *tmp = _M_exception_object;
@@ -115,6 +111,11 @@ std::__exception_ptr::exception_ptr::swap(exception_ptr &other) throw()
// Retained for compatibility with CXXABI_1.3.
+void
+std::__exception_ptr::exception_ptr::_M_safe_bool_dummy() throw () { }
+
+
+// Retained for compatibility with CXXABI_1.3.
bool
std::__exception_ptr::exception_ptr::operator!() const throw()
{ return _M_exception_object == 0; }
diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h
index 3ee4d8d327d..4ccb4fb2d6e 100644
--- a/libstdc++-v3/libsupc++/exception_ptr.h
+++ b/libstdc++-v3/libsupc++/exception_ptr.h
@@ -81,25 +81,27 @@ namespace std
void *_M_get() const throw() __attribute__ ((__pure__));
- void _M_safe_bool_dummy() throw() __attribute__ ((__const__));
-
friend exception_ptr std::current_exception() throw();
friend void std::rethrow_exception(exception_ptr);
public:
exception_ptr() throw();
- typedef void (exception_ptr::*__safe_bool)();
-
- // For construction from nullptr or 0.
- exception_ptr(__safe_bool) throw();
-
exception_ptr(const exception_ptr&) throw();
#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ exception_ptr(nullptr_t) throw()
+ : _M_exception_object(0)
+ { }
+
exception_ptr(exception_ptr&& __o) throw()
: _M_exception_object(__o._M_exception_object)
{ __o._M_exception_object = 0; }
+#else
+ typedef void (exception_ptr::*__safe_bool)();
+
+ // For construction from nullptr or 0.
+ exception_ptr(__safe_bool) throw();
#endif
exception_ptr&
@@ -121,10 +123,16 @@ namespace std
#ifdef _GLIBCXX_EH_PTR_COMPAT
// Retained for compatibility with CXXABI_1.3.
+ void _M_safe_bool_dummy() throw() __attribute__ ((__const__));
bool operator!() const throw() __attribute__ ((__pure__));
operator __safe_bool() const throw();
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ explicit operator bool() const
+ { return _M_exception_object; }
+#endif
+
friend bool
operator==(const exception_ptr&, const exception_ptr&) throw()
__attribute__ ((__pure__));
@@ -140,6 +148,11 @@ namespace std
bool
operator!=(const exception_ptr&, const exception_ptr&) throw()
__attribute__ ((__pure__));
+
+ inline void
+ swap(exception_ptr& __lhs, exception_ptr& __rhs)
+ { __lhs.swap(__rhs); }
+
} // namespace __exception_ptr
@@ -160,6 +173,14 @@ namespace std
}
}
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 1130. copy_exception name misleading
+ /// Obtain an exception_ptr pointing to a copy of the supplied object.
+ template<typename _Ex>
+ exception_ptr
+ make_exception_ptr(_Ex __ex) throw()
+ { return std::copy_exception<_Ex>(__ex); }
+
// @} group exceptions
} // namespace std
diff --git a/libstdc++-v3/libsupc++/initializer_list b/libstdc++-v3/libsupc++/initializer_list
index 3810706d47e..0006b70f40a 100644
--- a/libstdc++-v3/libsupc++/initializer_list
+++ b/libstdc++-v3/libsupc++/initializer_list
@@ -36,7 +36,7 @@
#pragma GCC visibility push(default)
-#include <cstddef>
+#include <bits/c++config.h>
namespace std
{
@@ -61,7 +61,7 @@ namespace std
: _M_array(__a), _M_len(__l) { }
public:
- initializer_list() : _M_array(NULL), _M_len(0) { }
+ initializer_list() : _M_array(0), _M_len(0) { }
// Number of elements.
size_type
@@ -75,6 +75,26 @@ namespace std
const_iterator
end() const { return begin() + size(); }
};
+
+ /**
+ * @brief Return an iterator pointing to the first element of
+ * the initilizer_list.
+ * @param il Initializer list.
+ */
+ template<class _Tp>
+ inline const _Tp*
+ begin(initializer_list<_Tp> __ils)
+ { return __ils.begin(); }
+
+ /**
+ * @brief Return an iterator pointing to one past the last element
+ * of the initilizer_list.
+ * @param il Initializer list.
+ */
+ template<class _Tp>
+ inline const _Tp*
+ end(initializer_list<_Tp> __ils)
+ { return __ils.end(); }
}
#pragma GCC visibility pop
diff --git a/libstdc++-v3/libsupc++/new b/libstdc++-v3/libsupc++/new
index 7b515311cab..80ee3ba0fd8 100644
--- a/libstdc++-v3/libsupc++/new
+++ b/libstdc++-v3/libsupc++/new
@@ -38,7 +38,7 @@
#pragma GCC system_header
-#include <cstddef>
+#include <bits/c++config.h>
#include <exception>
#pragma GCC visibility push(default)
diff --git a/libstdc++-v3/libsupc++/unwind-cxx.h b/libstdc++-v3/libsupc++/unwind-cxx.h
index 6033caf1705..e62ea7c38be 100644
--- a/libstdc++-v3/libsupc++/unwind-cxx.h
+++ b/libstdc++-v3/libsupc++/unwind-cxx.h
@@ -1,5 +1,5 @@
// -*- C++ -*- Exception handling and frame unwind runtime interface routines.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of GCC.
@@ -148,8 +148,10 @@ struct __cxa_eh_globals
// either of the following functions. The "fast" version assumes at least
// one prior call of __cxa_get_globals has been made from the current
// thread, so no initialization is necessary.
-extern "C" __cxa_eh_globals *__cxa_get_globals () throw() __attribute__ ((__const__));
-extern "C" __cxa_eh_globals *__cxa_get_globals_fast () throw() __attribute__ ((__const__));
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw()
+ __attribute__ ((__const__));
+extern "C" __cxa_eh_globals *__cxa_get_globals_fast () throw()
+ __attribute__ ((__const__));
// Allocate memory for the primary exception plus the thrown object.
extern "C" void *__cxa_allocate_exception(std::size_t thrown_size) throw();
@@ -169,13 +171,14 @@ __cxa_free_dependent_exception(__cxa_dependent_exception *ex) throw();
extern "C" void __cxa_throw (void *thrown_exception,
std::type_info *tinfo,
void (*dest) (void *))
- __attribute__((noreturn));
+ __attribute__((__noreturn__));
// Used to implement exception handlers.
-extern "C" void *__cxa_get_exception_ptr (void *) throw() __attribute__ ((__pure__));
+extern "C" void *__cxa_get_exception_ptr (void *) throw()
+ __attribute__ ((__pure__));
extern "C" void *__cxa_begin_catch (void *) throw();
extern "C" void __cxa_end_catch ();
-extern "C" void __cxa_rethrow () __attribute__((noreturn));
+extern "C" void __cxa_rethrow () __attribute__((__noreturn__));
// These facilitate code generation for recurring situations.
extern "C" void __cxa_bad_cast () __attribute__((__noreturn__));
@@ -186,8 +189,9 @@ extern "C" void __cxa_bad_typeid () __attribute__((__noreturn__));
// Handles re-checking the exception specification if unexpectedHandler
// throws, and if bad_exception needs to be thrown. Called from the
// compiler.
-extern "C" void __cxa_call_unexpected (void *) __attribute__((noreturn));
-extern "C" void __cxa_call_terminate (_Unwind_Exception*) throw () __attribute__((noreturn));
+extern "C" void __cxa_call_unexpected (void *) __attribute__((__noreturn__));
+extern "C" void __cxa_call_terminate (_Unwind_Exception*) throw ()
+ __attribute__((__noreturn__));
#ifdef __ARM_EABI_UNWINDER__
// Arm EABI specified routines.
@@ -196,16 +200,19 @@ typedef enum {
ctm_succeeded = 1,
ctm_succeeded_with_ptr_to_base = 2
} __cxa_type_match_result;
-extern "C" bool __cxa_type_match(_Unwind_Exception*, const std::type_info*,
- bool, void**);
-extern "C" void __cxa_begin_cleanup (_Unwind_Exception*);
+extern "C" __cxa_type_match_result __cxa_type_match(_Unwind_Exception*,
+ const std::type_info*,
+ bool, void**);
+extern "C" bool __cxa_begin_cleanup (_Unwind_Exception*);
extern "C" void __cxa_end_cleanup (void);
#endif
// Invokes given handler, dying appropriately if the user handler was
// so inconsiderate as to return.
-extern void __terminate(std::terminate_handler) throw () __attribute__((__noreturn__));
-extern void __unexpected(std::unexpected_handler) __attribute__((noreturn));
+extern void __terminate(std::terminate_handler) throw ()
+ __attribute__((__noreturn__));
+extern void __unexpected(std::unexpected_handler)
+ __attribute__((__noreturn__));
// The current installed user handlers.
extern std::terminate_handler __terminate_handler;
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index 871bb37527a..d70589472d3 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -34,8 +34,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = po
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -54,6 +54,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -63,8 +64,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -101,6 +100,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -324,37 +324,6 @@ TAGS:
ctags: CTAGS
CTAGS:
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile all-local
@@ -455,15 +424,15 @@ uninstall-am:
.PHONY: all all-am all-local check check-am clean clean-generic \
clean-libtool distclean distclean-generic distclean-libtool \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-data install-data-am install-data-local \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am uninstall uninstall-am
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am
.po.mo:
diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in
index 683d7986e7c..d42eccac31e 100644
--- a/libstdc++-v3/python/Makefile.in
+++ b/libstdc++-v3/python/Makefile.in
@@ -35,8 +35,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = python
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -55,6 +55,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -64,7 +65,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -88,7 +88,6 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pythondir)"
DATA = $(nobase_python_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -125,6 +124,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -360,37 +360,6 @@ TAGS:
ctags: CTAGS
CTAGS:
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile $(DATA) all-local
@@ -493,13 +462,13 @@ uninstall-am: uninstall-nobase_pythonDATA
.PHONY: all all-am all-local check check-am clean clean-generic \
clean-libtool distclean distclean-generic distclean-libtool \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-data install-data-am install-data-local \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-nobase_pythonDATA install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nobase_pythonDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-nobase_pythonDATA
diff --git a/libstdc++-v3/python/hook.in b/libstdc++-v3/python/hook.in
index d4c290f82cd..c76d4a3b3eb 100644
--- a/libstdc++-v3/python/hook.in
+++ b/libstdc++-v3/python/hook.in
@@ -50,10 +50,10 @@ if gdb.current_objfile () is not None:
dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
objfile = gdb.current_objfile ().filename
- dir = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
+ dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
- if not dir in sys.path:
- sys.path.insert(0, dir)
+ if not dir_ in sys.path:
+ sys.path.insert(0, dir_)
# Load the pretty-printers.
from libstdcxx.v6.printers import register_libstdcxx_printers
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py
index baa0824856b..5333c57634f 100644
--- a/libstdc++-v3/python/libstdcxx/v6/printers.py
+++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
@@ -77,7 +77,7 @@ class StdListPrinter:
elif self.typename == "std::__debug::list":
nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
else:
- raise "Cannot cast list node for list printer."
+ raise ValueError, "Cannot cast list node for list printer."
return self._iterator(nodetype, self.val['_M_impl']['_M_node'])
def to_string(self):
@@ -101,7 +101,7 @@ class StdListIteratorPrinter:
elif self.typename == "std::__norm::_List_iterator" or self.typename == "std::__norm::_List_const_iterator":
nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
else:
- raise "Cannot cast list node for list iterator printer."
+ raise ValueError, "Cannot cast list node for list iterator printer."
return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
class StdSlistPrinter:
@@ -153,37 +153,71 @@ class StdVectorPrinter:
"Print a std::vector"
class _iterator:
- def __init__ (self, start, finish):
- self.item = start
- self.finish = finish
+ def __init__ (self, start, finish, bitvec):
+ self.bitvec = bitvec
+ if bitvec:
+ self.item = start['_M_p']
+ self.so = start['_M_offset']
+ self.finish = finish['_M_p']
+ self.fo = finish['_M_offset']
+ itype = self.item.dereference().type
+ self.isize = 8 * itype.sizeof
+ else:
+ self.item = start
+ self.finish = finish
self.count = 0
def __iter__(self):
return self
def next(self):
- if self.item == self.finish:
- raise StopIteration
count = self.count
self.count = self.count + 1
- elt = self.item.dereference()
- self.item = self.item + 1
- return ('[%d]' % count, elt)
+ if self.bitvec:
+ if self.item == self.finish and self.so >= self.fo:
+ raise StopIteration
+ elt = self.item.dereference()
+ obit = 1 if elt & (1 << self.so) else 0
+ self.so = self.so + 1
+ if self.so >= self.isize:
+ self.item = self.item + 1
+ self.so = 0
+ return ('[%d]' % count, obit)
+ else:
+ if self.item == self.finish:
+ raise StopIteration
+ elt = self.item.dereference()
+ self.item = self.item + 1
+ return ('[%d]' % count, elt)
def __init__(self, typename, val):
self.typename = typename
self.val = val
+ self.is_bool = val.type.template_argument(0).code == gdb.TYPE_CODE_BOOL
def children(self):
return self._iterator(self.val['_M_impl']['_M_start'],
- self.val['_M_impl']['_M_finish'])
+ self.val['_M_impl']['_M_finish'],
+ self.is_bool)
def to_string(self):
start = self.val['_M_impl']['_M_start']
finish = self.val['_M_impl']['_M_finish']
end = self.val['_M_impl']['_M_end_of_storage']
- return ('%s of length %d, capacity %d'
- % (self.typename, int (finish - start), int (end - start)))
+ if self.is_bool:
+ start = self.val['_M_impl']['_M_start']['_M_p']
+ so = self.val['_M_impl']['_M_start']['_M_offset']
+ finish = self.val['_M_impl']['_M_finish']['_M_p']
+ fo = self.val['_M_impl']['_M_finish']['_M_offset']
+ itype = start.dereference().type
+ bl = 8 * itype.sizeof
+ length = (bl - so) + bl * ((finish - start) - 1) + fo
+ capacity = bl * (end - start)
+ return ('%s<bool> of length %d, capacity %d'
+ % (self.typename, int (length), int (capacity)))
+ else:
+ return ('%s of length %d, capacity %d'
+ % (self.typename, int (finish - start), int (end - start)))
def display_hint(self):
return 'array'
@@ -208,7 +242,7 @@ class StdTuplePrinter:
# tuple.
nodes = self.head.type.fields ()
if len (nodes) != 1:
- raise "Top of tuple tree does not consist of a single node."
+ raise ValueError, "Top of tuple tree does not consist of a single node."
# Set the actual head to the first pair.
self.head = self.head.cast (nodes[0].type)
@@ -224,7 +258,7 @@ class StdTuplePrinter:
raise StopIteration
# Check that this iteration has an expected structure.
if len (nodes) != 2:
- raise "Cannot parse more than 2 nodes in a tuple tree."
+ raise ValueError, "Cannot parse more than 2 nodes in a tuple tree."
# - Left node is the next recursion parent.
# - Right node is the actual class contained in the tuple.
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index 1cf9030d332..d5194c3366e 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -45,14 +45,38 @@ libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \
fi; \
fi
+CLEANFILES = libstdc++-symbols.ver
+
if ENABLE_SYMVERS_GNU
+if ENABLE_SYMVERS_SOL2
+version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2
+version_dep = libstdc++-symbols.ver-sol2
+libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver
+ sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \
+ > $@ || (rm -f $@ ; exit 1)
+else
version_arg = -Wl,--version-script=libstdc++-symbols.ver
version_dep = libstdc++-symbols.ver
endif
+endif
if ENABLE_SYMVERS_GNU_NAMESPACE
version_arg = -Wl,--version-script=libstdc++-symbols.ver
version_dep = libstdc++-symbols.ver
endif
+if ENABLE_SYMVERS_SUN
+version_arg = -Wl,-M,libstdc++-symbols.ver-sun
+version_dep = libstdc++-symbols.ver-sun
+libstdc++-symbols.ver-sun : libstdc++-symbols.ver \
+ $(toplevel_srcdir)/contrib/make_sunver.pl \
+ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
+ CXXFILT="$(CXXFILT)"; export CXXFILT; \
+ perl $(toplevel_srcdir)/contrib/make_sunver.pl \
+ libstdc++-symbols.ver \
+ $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
+ `echo $(libstdc___la_LIBADD) | \
+ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
+ > $@ || (rm -f $@ ; exit 1)
+endif
if ENABLE_SYMVERS_DARWIN
version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
version_dep = libstdc++-symbols.explist
@@ -66,6 +90,8 @@ libstdc++-symbols.explist : libstdc++-symbols.ver \
sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
> $@ || (rm -f $@ ; exit 1)
endif
+
+CLEANFILES += $(version_dep)
else
version_arg =
version_dep =
@@ -153,6 +179,7 @@ sources = \
hash_tr1.cc \
hashtable_c++0x.cc \
hashtable_tr1.cc \
+ hash_bytes.cc \
ios.cc \
ios_failure.cc \
ios_init.cc \
@@ -283,6 +310,11 @@ hashtable_c++0x.lo: hashtable_c++0x.cc
hashtable_c++0x.o: hashtable_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
+hash_bytes.lo: hash_bytes.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+hash_bytes.o: hash_bytes.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
limits.lo: limits.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
limits.o: limits.cc
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 39cb22c3d92..92390975740 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -35,8 +35,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -55,6 +55,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -85,27 +86,6 @@ am__base_list = \
am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-am__libstdc___la_SOURCES_DIST = atomic.cc bitmap_allocator.cc \
- pool_allocator.cc mt_allocator.cc codecvt.cc compatibility.cc \
- compatibility-c++0x.cc compatibility-debug_list.cc \
- compatibility-list.cc complex_io.cc ctype.cc debug.cc \
- functexcept.cc globals_io.cc hash_c++0x.cc hash_tr1.cc \
- hashtable_c++0x.cc hashtable_tr1.cc ios.cc ios_failure.cc \
- ios_init.cc ios_locale.cc limits.cc list.cc debug_list.cc \
- locale.cc locale_init.cc locale_facets.cc localename.cc \
- math_stubs_float.cc math_stubs_long_double.cc stdexcept.cc \
- strstream.cc system_error.cc tree.cc allocator-inst.cc \
- concept-inst.cc fstream-inst.cc ext-inst.cc ios-inst.cc \
- iostream-inst.cc istream-inst.cc istream.cc locale-inst.cc \
- misc-inst.cc ostream-inst.cc sstream-inst.cc streambuf-inst.cc \
- streambuf.cc string-inst.cc valarray-inst.cc wlocale-inst.cc \
- wstring-inst.cc mutex.cc condition_variable.cc chrono.cc \
- thread.cc future.cc atomicity.cc codecvt_members.cc \
- collate_members.cc ctype_members.cc messages_members.cc \
- monetary_members.cc numeric_members.cc time_members.cc \
- basic_file.cc c++locale.cc compatibility-ldbl.cc \
- parallel_list.cc parallel_settings.cc \
- compatibility-parallel_list.cc
am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
ctype_members.lo messages_members.lo monetary_members.lo \
numeric_members.lo time_members.lo
@@ -120,17 +100,18 @@ am__objects_5 = atomic.lo bitmap_allocator.lo pool_allocator.lo \
compatibility-c++0x.lo compatibility-debug_list.lo \
compatibility-list.lo complex_io.lo ctype.lo debug.lo \
functexcept.lo globals_io.lo hash_c++0x.lo hash_tr1.lo \
- hashtable_c++0x.lo hashtable_tr1.lo ios.lo ios_failure.lo \
- ios_init.lo ios_locale.lo limits.lo list.lo debug_list.lo \
- locale.lo locale_init.lo locale_facets.lo localename.lo \
- math_stubs_float.lo math_stubs_long_double.lo stdexcept.lo \
- strstream.lo system_error.lo tree.lo allocator-inst.lo \
- concept-inst.lo fstream-inst.lo ext-inst.lo ios-inst.lo \
- iostream-inst.lo istream-inst.lo istream.lo locale-inst.lo \
- misc-inst.lo ostream-inst.lo sstream-inst.lo streambuf-inst.lo \
- streambuf.lo string-inst.lo valarray-inst.lo wlocale-inst.lo \
- wstring-inst.lo mutex.lo condition_variable.lo chrono.lo \
- thread.lo future.lo $(am__objects_1) $(am__objects_4)
+ hashtable_c++0x.lo hashtable_tr1.lo hash_bytes.lo ios.lo \
+ ios_failure.lo ios_init.lo ios_locale.lo limits.lo list.lo \
+ debug_list.lo locale.lo locale_init.lo locale_facets.lo \
+ localename.lo math_stubs_float.lo math_stubs_long_double.lo \
+ stdexcept.lo strstream.lo system_error.lo tree.lo \
+ allocator-inst.lo concept-inst.lo fstream-inst.lo ext-inst.lo \
+ ios-inst.lo iostream-inst.lo istream-inst.lo istream.lo \
+ locale-inst.lo misc-inst.lo ostream-inst.lo sstream-inst.lo \
+ streambuf-inst.lo streambuf.lo string-inst.lo valarray-inst.lo \
+ wlocale-inst.lo wstring-inst.lo mutex.lo condition_variable.lo \
+ chrono.lo thread.lo future.lo $(am__objects_1) \
+ $(am__objects_4)
am_libstdc___la_OBJECTS = $(am__objects_5)
libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
@@ -140,10 +121,8 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
SOURCES = $(libstdc___la_SOURCES)
-DIST_SOURCES = $(am__libstdc___la_SOURCES_DIST)
ETAGS = etags
CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -180,6 +159,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -344,14 +324,19 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
# Cross compiler support.
toolexeclib_LTLIBRARIES = libstdc++.la
+@ENABLE_SYMVERS_TRUE@CLEANFILES = libstdc++-symbols.ver $(version_dep)
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist
@ENABLE_SYMVERS_FALSE@version_arg =
@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-M,libstdc++-symbols.ver-sun
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.explist
@ENABLE_SYMVERS_FALSE@version_dep =
@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
-@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sol2
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sun
# Source files linked in via configuration/make substitution for a
# particular host.
@@ -399,6 +384,7 @@ sources = \
hash_tr1.cc \
hashtable_c++0x.cc \
hashtable_tr1.cc \
+ hash_bytes.cc \
ios.cc \
ios_failure.cc \
ios_init.cc \
@@ -648,37 +634,6 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) all-local
@@ -703,6 +658,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -785,12 +741,12 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
clean-generic clean-libtool clean-toolexeclibLTLIBRARIES ctags \
distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-data-local install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
+ distclean-libtool distclean-tags dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip \
install-toolexeclibLTLIBRARIES installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
@@ -814,6 +770,19 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
@ENABLE_SYMVERS_TRUE@ rm tmp.top tmp.bottom; \
@ENABLE_SYMVERS_TRUE@ fi; \
@ENABLE_SYMVERS_TRUE@ fi
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \
+@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ > $@ || (rm -f $@ ; exit 1)
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sun : libstdc++-symbols.ver \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(toplevel_srcdir)/contrib/make_sunver.pl \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ CXXFILT="$(CXXFILT)"; export CXXFILT; \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ perl $(toplevel_srcdir)/contrib/make_sunver.pl \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ libstdc++-symbols.ver \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ `echo $(libstdc___la_LIBADD) | \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
+@ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ > $@ || (rm -f $@ ; exit 1)
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.explist : libstdc++-symbols.ver \
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@ ${glibcxx_srcdir}/scripts/make_exports.pl \
@ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD)
@@ -918,6 +887,11 @@ hashtable_c++0x.lo: hashtable_c++0x.cc
hashtable_c++0x.o: hashtable_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
+hash_bytes.lo: hash_bytes.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+hash_bytes.o: hash_bytes.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
limits.lo: limits.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
limits.o: limits.cc
diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc
index 7ec08c5d7c0..906b0884e2c 100644
--- a/libstdc++-v3/src/atomic.cc
+++ b/libstdc++-v3/src/atomic.cc
@@ -1,6 +1,6 @@
// Support for atomic operations -*- C++ -*-
-// Copyright (C) 2008, 2009
+// Copyright (C) 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -127,7 +127,8 @@ namespace std
// _GLIBCXX_*_SYMVER macros in this file.
#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
#define _GLIBCXX_ASM_SYMVER(cur, old, version) \
asm (".symver " #cur "," #old "@@" #version);
diff --git a/libstdc++-v3/src/chrono.cc b/libstdc++-v3/src/chrono.cc
index 422b97399ac..6d7a64d0080 100644
--- a/libstdc++-v3/src/chrono.cc
+++ b/libstdc++-v3/src/chrono.cc
@@ -1,6 +1,6 @@
// chrono -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -51,7 +51,7 @@ namespace std
#elif defined(_GLIBCXX_USE_GETTIMEOFDAY)
timeval tv;
// EINVAL, EFAULT
- gettimeofday(&tv, NULL);
+ gettimeofday(&tv, 0);
return time_point(duration(chrono::seconds(tv.tv_sec)
+ chrono::microseconds(tv.tv_usec)));
#else
diff --git a/libstdc++-v3/src/compatibility-c++0x.cc b/libstdc++-v3/src/compatibility-c++0x.cc
index 759267ab3a5..4941b17a3fd 100644
--- a/libstdc++-v3/src/compatibility-c++0x.cc
+++ b/libstdc++-v3/src/compatibility-c++0x.cc
@@ -50,13 +50,35 @@ namespace std
// We need these due to the symbols exported since GLIBCXX_3.4.10.
// See libstdc++/41662 for details.
-#include "hash-string-aux.cc"
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+ template<>
+ size_t
+ hash<string>::operator()(string __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length()); }
+
+ template<>
+ size_t
+ hash<const string&>::operator()(const string& __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ size_t
+ hash<wstring>::operator()(wstring __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+ template<>
+ size_t
+ hash<const wstring&>::operator()(const wstring& __s) const
+ { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
template<>
size_t
hash<error_code>::operator()(error_code __e) const
{
- const size_t __tmp = std::_Fnv_hash::hash(__e._M_value);
- return std::_Fnv_hash::__hash_combine(__e._M_cat, __tmp);
+ const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
+ return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
}
}
diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc
index dceebe1174c..7dcd95cb171 100644
--- a/libstdc++-v3/src/compatibility.cc
+++ b/libstdc++-v3/src/compatibility.cc
@@ -26,7 +26,8 @@
#include <bits/c++config.h>
#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)\
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
#define istreambuf_iterator istreambuf_iteratorXX
#define basic_fstream basic_fstreamXX
#define basic_ifstream basic_ifstreamXX
@@ -201,7 +202,8 @@ _GLIBCXX_END_NAMESPACE
// NB: These symbols renames should go into the shared library only,
// and only those shared libraries that support versioning.
#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
- && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)
+ && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
+ && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
/* gcc-3.4.4
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
@@ -410,7 +412,11 @@ GLIBCXX_3.4)
// gcc-4.1.0
// Long double versions of "C" math functions.
#if defined (_GLIBCXX_LONG_DOUBLE_COMPAT) \
- || (defined (__hppa__) && defined (__linux__))
+ || (defined (__arm__) && defined (__linux__) && defined (__ARM_EABI__)) \
+ || (defined (__hppa__) && defined (__linux__)) \
+ || (defined (__m68k__) && defined (__mcoldfire__) && defined (__linux__)) \
+ || (defined (__mips__) && defined (_ABIO32) && defined (__linux__)) \
+ || (defined (__sh__) && defined (__linux__) && __SIZEOF_SIZE_T__ == 4) \
#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
extern "C" double \
diff --git a/libstdc++-v3/src/condition_variable.cc b/libstdc++-v3/src/condition_variable.cc
index fdcb6a04b38..d3f29f657f4 100644
--- a/libstdc++-v3/src/condition_variable.cc
+++ b/libstdc++-v3/src/condition_variable.cc
@@ -1,6 +1,6 @@
// condition_variable -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,7 +34,7 @@ namespace std
__native_type __tmp = __GTHREAD_COND_INIT;
_M_cond = __tmp;
#else
- int __e = __gthread_cond_init(&_M_cond, NULL);
+ int __e = __gthread_cond_init(&_M_cond, 0);
if (__e)
__throw_system_error(__e);
diff --git a/libstdc++-v3/src/future.cc b/libstdc++-v3/src/future.cc
index 967012a8ca6..d9289487bab 100644
--- a/libstdc++-v3/src/future.cc
+++ b/libstdc++-v3/src/future.cc
@@ -1,6 +1,6 @@
// future -*- C++ -*-
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,6 +28,8 @@ namespace
{
struct future_error_category : public std::error_category
{
+ future_error_category() {}
+
virtual const char*
name() const
{ return "future"; }
diff --git a/libstdc++-v3/src/hash-string-aux.cc b/libstdc++-v3/src/hash-string-aux.cc
deleted file mode 100644
index 711d7f41c9d..00000000000
--- a/libstdc++-v3/src/hash-string-aux.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-// std::hash and std::tr1::hash definitions, string bits -*- C++ -*-
-
-// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
- template<>
- size_t
- hash<string>::operator()(string __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
- template<>
- size_t
- hash<const string&>::operator()(const string& __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- size_t
- hash<wstring>::operator()(wstring __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-
- template<>
- size_t
- hash<const wstring&>::operator()(const wstring& __s) const
- { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-#endif
-
-#endif
diff --git a/libstdc++-v3/src/hash_bytes.cc b/libstdc++-v3/src/hash_bytes.cc
new file mode 100644
index 00000000000..5dfa1eec1d6
--- /dev/null
+++ b/libstdc++-v3/src/hash_bytes.cc
@@ -0,0 +1,184 @@
+// Definition of _Hash_bytes. -*- C++ -*-
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// This file defines Hash_bytes, a primitive used for defining hash
+// functions. Based on public domain MurmurHashUnaligned2, by Austin
+// Appleby. http://murmurhash.googlepages.com/
+
+// This file also defines _Fnv_hash_bytes, another primitive with
+// exactly the same interface but using a different hash algorithm,
+// Fowler / Noll / Vo (FNV) Hash (type FNV-1a). The Murmur hash
+// function apears to be better in both speed and hash quality, and
+// FNV is provided primarily for backward compatibility.
+
+#include <cstring>
+#include <bits/functional_hash.h>
+
+namespace
+{
+ inline std::size_t
+ unaligned_load(const char* p)
+ {
+ std::size_t result;
+ std::memcpy(&result, p, sizeof(result));
+ return result;
+ }
+
+ // Loads n bytes, where 1 <= n < 8.
+ inline std::size_t
+ load_bytes(const char* p, int n)
+ {
+ size_t result = 0;
+ --n;
+ do
+ result = (result << 8) + static_cast<unsigned char>(p[n]);
+ while (--n >= 0);
+ return result;
+ }
+
+ inline std::size_t
+ shift_mix(std::size_t v)
+ { return v ^ (v >> 47);}
+}
+
+namespace std
+{
+#if __SIZEOF_SIZE_T__ == 4
+
+ // Implementation of Murmur hash for 32-bit size_t.
+ size_t
+ _Hash_bytes(const void* ptr, size_t len, size_t seed)
+ {
+ const size_t m = 0x5bd1e995;
+ size_t hash = seed ^ len;
+ const char* buf = static_cast<const char*>(ptr);
+
+ // Mix 4 bytes at a time into the hash.
+ while(len >= 4)
+ {
+ size_t k = unaligned_load(buf);
+ k *= m;
+ k ^= k >> 24;
+ k *= m;
+ hash *= m;
+ hash ^= k;
+ buf += 4;
+ len -= 4;
+ }
+
+ // Handle the last few bytes of the input array.
+ switch(len)
+ {
+ case 3:
+ hash ^= static_cast<unsigned char>(buf[2]) << 16;
+ case 2:
+ hash ^= static_cast<unsigned char>(buf[1]) << 8;
+ case 1:
+ hash ^= static_cast<unsigned char>(buf[0]);
+ hash *= m;
+ };
+
+ // Do a few final mixes of the hash.
+ hash ^= hash >> 13;
+ hash *= m;
+ hash ^= hash >> 15;
+ return hash;
+ }
+
+ // Implementation of FNV hash for 32-bit size_t.
+ size_t
+ _Fnv_hash_bytes(const void* ptr, size_t len, size_t hash)
+ {
+ const char* cptr = static_cast<const char*>(ptr);
+ for (; len; --len)
+ {
+ hash ^= static_cast<size_t>(*cptr++);
+ hash *= static_cast<size_t>(16777619UL);
+ }
+ return hash;
+ }
+
+#elif __SIZEOF_SIZE_T__ == 8
+
+ // Implementation of Murmur hash for 64-bit size_t.
+ size_t
+ _Hash_bytes(const void* ptr, size_t len, size_t seed)
+ {
+ static const size_t mul = (0xc6a4a793UL << 32UL) + 0x5bd1e995UL;
+ const char* const buf = static_cast<const char*>(ptr);
+
+ // Remove the bytes not divisible by the sizeof(size_t). This
+ // allows the main loop to process the data as 64-bit integers.
+ const int len_aligned = len & ~0x7;
+ const char* const end = buf + len_aligned;
+ size_t hash = seed ^ (len * mul);
+ for (const char* p = buf; p != end; p += 8)
+ {
+ const size_t data = shift_mix(unaligned_load(p) * mul) * mul;
+ hash ^= data;
+ hash *= mul;
+ }
+ if ((len & 0x7) != 0)
+ {
+ const size_t data = load_bytes(end, len & 0x7);
+ hash ^= data;
+ hash *= mul;
+ }
+ hash = shift_mix(hash) * mul;
+ hash = shift_mix(hash);
+ return hash;
+ }
+
+ // Implementation of FNV hash for 64-bit size_t.
+ size_t
+ _Fnv_hash_bytes(const void* ptr, size_t len, size_t hash)
+ {
+ const char* cptr = static_cast<const char*>(ptr);
+ for (; len; --len)
+ {
+ hash ^= static_cast<size_t>(*cptr++);
+ hash *= static_cast<size_t>(1099511628211ULL);
+ }
+ return hash;
+ }
+
+#else
+
+ // Dummy hash implementation for unusual sizeof(size_t).
+ size_t
+ _Hash_bytes(const void* ptr, size_t len, size_t seed)
+ {
+ size_t hash = seed;
+ const char* cptr = reinterpret_cast<const char*>(ptr);
+ for (; clength; --clength)
+ hash = (hash * 131) + *cptr++;
+ return hash;
+ }
+
+ size_t
+ _Fnv_hash_bytes(const void* ptr, size_t len, size_t seed)
+ { return _Hash_bytes(ptr, len, seed); }
+
+#endif /* __SIZEOF_SIZE_T__ */
+}
diff --git a/libstdc++-v3/src/hash_tr1.cc b/libstdc++-v3/src/hash_tr1.cc
index 0dca086b95c..03f3ad3c094 100644
--- a/libstdc++-v3/src/hash_tr1.cc
+++ b/libstdc++-v3/src/hash_tr1.cc
@@ -30,6 +30,29 @@ namespace std
namespace tr1
{
#include "hash-long-double-aux.cc"
-#include "hash-string-aux.cc"
+
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+ template<>
+ size_t
+ hash<string>::operator()(string __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+ template<>
+ size_t
+ hash<const string&>::operator()(const string& __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ size_t
+ hash<wstring>::operator()(wstring __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+ template<>
+ size_t
+ hash<const wstring&>::operator()(const wstring& __s) const
+ { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
}
}
diff --git a/libstdc++-v3/src/ios_init.cc b/libstdc++-v3/src/ios_init.cc
index 1885d825971..caf25ed8036 100644
--- a/libstdc++-v3/src/ios_init.cc
+++ b/libstdc++-v3/src/ios_init.cc
@@ -1,7 +1,7 @@
// Iostreams base classes -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -122,8 +122,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ios_base::Init::~Init()
{
+ // Be race-detector-friendly. For more info see bits/c++config.
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_S_refcount);
if (__gnu_cxx::__exchange_and_add_dispatch(&_S_refcount, -1) == 2)
{
+ _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_S_refcount);
// Catch any exceptions thrown by basic_ostream::flush()
__try
{
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index 5ee8258ccb8..1dc1d6891c6 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
}
else
- __throw_runtime_error(__N("locale::locale NULL not valid"));
+ __throw_runtime_error(__N("locale::locale null not valid"));
}
locale::locale(const locale& __base, const char* __s, category __cat)
diff --git a/libstdc++-v3/src/mt_allocator.cc b/libstdc++-v3/src/mt_allocator.cc
index 9c3af0e60d5..b04fe5b05e4 100644
--- a/libstdc++-v3/src/mt_allocator.cc
+++ b/libstdc++-v3/src/mt_allocator.cc
@@ -1,6 +1,6 @@
// Allocator details.
-// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -150,7 +150,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__block->_M_next = reinterpret_cast<_Block_record*>(__c);
__block = __block->_M_next;
}
- __block->_M_next = NULL;
+ __block->_M_next = 0;
__block = __bin._M_first[__thread_id];
__bin._M_first[__thread_id] = __block->_M_next;
@@ -206,8 +206,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
_Bin_record& __bin = _M_bin[__n];
__v = ::operator new(sizeof(_Block_record*));
__bin._M_first = static_cast<_Block_record**>(__v);
- __bin._M_first[0] = NULL;
- __bin._M_address = NULL;
+ __bin._M_first[0] = 0;
+ __bin._M_address = 0;
}
_M_init = true;
}
@@ -362,7 +362,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// blocks on global list (and if not add new ones) and
// get the first one.
_Bin_record& __bin = _M_bin[__which];
- _Block_record* __block = NULL;
+ _Block_record* __block = 0;
if (__gthread_active_p())
{
// Resync the _M_used counters.
@@ -374,7 +374,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__atomic_add(&__reclaimed_base[__thread_id], -__reclaimed);
__gthread_mutex_lock(__bin._M_mutex);
- if (__bin._M_first[0] == NULL)
+ if (__bin._M_first[0] == 0)
{
void* __v = ::operator new(__options._M_chunk_size);
_Block_address* __address = static_cast<_Block_address*>(__v);
@@ -395,7 +395,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__block->_M_next = reinterpret_cast<_Block_record*>(__c);
__block = __block->_M_next;
}
- __block->_M_next = NULL;
+ __block->_M_next = 0;
}
else
{
@@ -407,7 +407,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
{
__bin._M_free[__thread_id] = __bin._M_free[0];
__bin._M_free[0] = 0;
- __bin._M_first[0] = NULL;
+ __bin._M_first[0] = 0;
}
else
{
@@ -417,7 +417,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
while (--__block_count > 0)
__block = __block->_M_next;
__bin._M_first[0] = __block->_M_next;
- __block->_M_next = NULL;
+ __block->_M_next = 0;
}
__gthread_mutex_unlock(__bin._M_mutex);
}
@@ -439,7 +439,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__block->_M_next = reinterpret_cast<_Block_record*>(__c);
__block = __block->_M_next;
}
- __block->_M_next = NULL;
+ __block->_M_next = 0;
}
__block = __bin._M_first[__thread_id];
@@ -527,7 +527,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
}
// Set last record.
- _M_thread_freelist[__i - 1]._M_next = NULL;
+ _M_thread_freelist[__i - 1]._M_next = 0;
_M_thread_freelist[__i - 1]._M_id = __i;
if (!freelist._M_thread_freelist_array)
@@ -572,7 +572,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
std::memset(__v, 0, sizeof(_Block_record*) * __max_threads);
__bin._M_first = static_cast<_Block_record**>(__v);
- __bin._M_address = NULL;
+ __bin._M_address = 0;
__v = ::operator new(sizeof(size_t) * __max_threads);
std::memset(__v, 0, sizeof(size_t) * __max_threads);
@@ -606,8 +606,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
_Bin_record& __bin = _M_bin[__n];
__v = ::operator new(sizeof(_Block_record*));
__bin._M_first = static_cast<_Block_record**>(__v);
- __bin._M_first[0] = NULL;
- __bin._M_address = NULL;
+ __bin._M_first[0] = 0;
+ __bin._M_address = 0;
}
}
_M_init = true;
@@ -722,7 +722,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
}
// Set last record.
- _M_thread_freelist[__i - 1]._M_next = NULL;
+ _M_thread_freelist[__i - 1]._M_next = 0;
_M_thread_freelist[__i - 1]._M_id = __i;
if (!freelist._M_thread_freelist_array)
@@ -767,7 +767,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
std::memset(__v, 0, sizeof(_Block_record*) * __max_threads);
__bin._M_first = static_cast<_Block_record**>(__v);
- __bin._M_address = NULL;
+ __bin._M_address = 0;
__v = ::operator new(sizeof(size_t) * __max_threads);
std::memset(__v, 0, sizeof(size_t) * __max_threads);
@@ -800,8 +800,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
_Bin_record& __bin = _M_bin[__n];
__v = ::operator new(sizeof(_Block_record*));
__bin._M_first = static_cast<_Block_record**>(__v);
- __bin._M_first[0] = NULL;
- __bin._M_address = NULL;
+ __bin._M_first[0] = 0;
+ __bin._M_address = 0;
}
}
_M_init = true;
diff --git a/libstdc++-v3/src/system_error.cc b/libstdc++-v3/src/system_error.cc
index 21448018204..be6af3bced8 100644
--- a/libstdc++-v3/src/system_error.cc
+++ b/libstdc++-v3/src/system_error.cc
@@ -34,6 +34,8 @@ namespace
struct generic_error_category : public std::error_category
{
+ generic_error_category() {}
+
virtual const char*
name() const
{ return "generic"; }
@@ -49,6 +51,8 @@ namespace
struct system_error_category : public std::error_category
{
+ system_error_category() {}
+
virtual const char*
name() const
{ return "system"; }
diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc
index 879e864edd4..2ea6a490735 100644
--- a/libstdc++-v3/src/thread.cc
+++ b/libstdc++-v3/src/thread.cc
@@ -1,6 +1,6 @@
// thread -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,7 +58,7 @@ namespace std
int __e = EINVAL;
if (_M_id != id())
- __e = __gthread_join(_M_id._M_thread, NULL);
+ __e = __gthread_join(_M_id._M_thread, 0);
if (__e)
__throw_system_error(__e);
diff --git a/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
index 9e621c3f786..f6c623043cd 100644
--- a/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
+++ b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
@@ -1,7 +1,7 @@
// { dg-require-sharedlib "" }
// { dg-options "-g -O2 -pthread -ldl -x c" { target *-*-linux* } }
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,20 +32,20 @@ static void* run(void* arg)
void (*cb)();
lib = dlopen("./testsuite_shared.so", RTLD_NOW);
- if (lib == NULL)
+ if (!lib)
{
printf("dlopen failed: %s\n", strerror(errno));
- return NULL;
+ return 0;
}
cb = (function_type) dlsym(lib, "try_throw_exception");
- if (cb == NULL)
+ if (!cb)
{
printf("dlsym failed: %s\n", strerror(errno));
- return NULL;
+ return 0;
}
cb();
dlclose(lib);
- return NULL;
+ return 0;
}
// libstdc++/23591
@@ -53,9 +53,9 @@ int main(void)
{
pthread_t pt;
- if (pthread_create(&pt, NULL, &run, NULL) != 0)
+ if (pthread_create(&pt, 0, &run, 0) != 0)
return 1;
- if (pthread_join(pt, NULL) != 0)
+ if (pthread_join(pt, 0) != 0)
return 1;
return 0;
diff --git a/libstdc++-v3/testsuite/18_support/exception/38732.cc b/libstdc++-v3/testsuite/18_support/exception/38732.cc
index 43cf5b891ba..7c70f3a17b3 100644
--- a/libstdc++-v3/testsuite/18_support/exception/38732.cc
+++ b/libstdc++-v3/testsuite/18_support/exception/38732.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,7 +17,6 @@
#include <typeinfo>
#include <exception>
-#include <cstddef>
#include "unwind.h"
#include <testsuite_hooks.h>
@@ -67,21 +66,21 @@ void test01 ()
throw 0;
} catch(...) {
__cxa_exception *exc = __cxa_get_globals()->caughtExceptions;
- VERIFY ( exc != NULL );
+ VERIFY ( exc != 0 );
VERIFY ( typeid(int) == *exc->exceptionType );
}
try {
throw 0LL;
} catch(...) {
__cxa_exception *exc = __cxa_get_globals()->caughtExceptions;
- VERIFY ( exc != NULL );
+ VERIFY ( exc != 0 );
VERIFY ( typeid(long long int) == *exc->exceptionType );
}
try {
throw 0.0;
} catch(...) {
__cxa_exception *exc = __cxa_get_globals()->caughtExceptions;
- VERIFY ( exc != NULL );
+ VERIFY ( exc != 0 );
VERIFY ( typeid(double) == *exc->exceptionType );
}
}
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
new file mode 100644
index 00000000000..4a7283f67de
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <exception>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::exception_ptr p = std::make_exception_ptr(0);
+
+ VERIFY( !(p == 0) );
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc
new file mode 100644
index 00000000000..36e6375d9a9
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <exception>
+#include <testsuite_hooks.h>
+
+// test NullablePointer requirements
+void test01()
+{
+ std::exception_ptr p1; // DefaultConstructible
+ std::exception_ptr p2(p1); // CopyConstructible
+ p1 = p2; // CopyAssignable
+ VERIFY( p1 == p2 ); // EqualityComparable
+ VERIFY( !bool(p1) ); // contextually convertible to bool
+ swap(p1, p2); // Swappable
+
+ // Table 39 expressions
+ std::exception_ptr p3 = nullptr;
+ std::exception_ptr p4(nullptr);
+ VERIFY( std::exception_ptr() == nullptr );
+ p4 = nullptr;
+ VERIFY( p4 == nullptr );
+ VERIFY( nullptr == p4 );
+ VERIFY( (p4 != nullptr) == !(p4 == nullptr) );
+ VERIFY( (nullptr != p4) == !(p4 == nullptr) );
+
+ std::exception_ptr p5{}; // value initialized ...
+ VERIFY( p5 == nullptr ); // ... is equivalent to null
+}
+
+// additional exception_ptr requirements
+void test02()
+{
+ std::exception_ptr p1;
+ VERIFY( p1 == nullptr );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc
new file mode 100644
index 00000000000..b897b506dfe
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <exception>
+
+// test implicit conversions
+void test01()
+{
+ std::exception_ptr p;
+
+ int __attribute__((unused)) i = p; // { dg-error "cannot convert" }
+ bool __attribute__((unused)) b = p; // { dg-error "cannot convert" }
+ void* __attribute__((unused)) v = p; // { dg-error "cannot convert" }
+}
+
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
index e764fbb4a99..264e1a3692b 100644
--- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstdbool> // { dg-excess-errors "In file included from" }
+#include <cstdbool>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
index 569dc678223..fdbb1dae515 100644
--- a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstdint> // { dg-excess-errors "In file included from" }
+#include <cstdint>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
new file mode 100644
index 00000000000..f4bf96bb3ef
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 18.9.3 Initializer list range access [support.initlist.range]
+
+#include <initializer_list>
+
+void
+test01()
+{
+ std::begin({1, 2, 3});
+ std::end({1, 2, 3});
+}
diff --git a/libstdc++-v3/testsuite/18_support/new_delete_placement.cc b/libstdc++-v3/testsuite/18_support/new_delete_placement.cc
index ef845d3a391..866a89b79cb 100644
--- a/libstdc++-v3/testsuite/18_support/new_delete_placement.cc
+++ b/libstdc++-v3/testsuite/18_support/new_delete_placement.cc
@@ -1,6 +1,6 @@
// 2002-07-24 Benjamin Kosnik
-// Copyright (C) 2002, 2004, 2009 Free Software Foundation
+// Copyright (C) 2002, 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +27,7 @@ void test01()
{
void* pc = new char;
void* pa = new char[10];
- void* tmp = NULL;
+ void* tmp = 0;
operator delete(pc, tmp);
operator delete[](pa, tmp);
}
diff --git a/libstdc++-v3/testsuite/18_support/pthread_guard.cc b/libstdc++-v3/testsuite/18_support/pthread_guard.cc
index 965328ebcba..5389316bab0 100644
--- a/libstdc++-v3/testsuite/18_support/pthread_guard.cc
+++ b/libstdc++-v3/testsuite/18_support/pthread_guard.cc
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,7 +40,7 @@ void*
do_something (void *arg)
{
static int bar __attribute__((unused)) = get_bar ();
- return NULL;
+ return 0;
}
int
@@ -48,10 +48,10 @@ get_foo (void)
{
pthread_t new_thread;
- if (pthread_create (&new_thread, NULL, do_something, NULL) != 0)
+ if (pthread_create (&new_thread, 0, do_something, 0) != 0)
std::abort ();
- if (pthread_join (new_thread, NULL) != 0)
+ if (pthread_join (new_thread, 0) != 0)
std::abort ();
return 1;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
index a874814f42d..12258cac0e4 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
@@ -27,12 +27,10 @@ int main()
bool test __attribute__((unused)) = true;
__gnu_test::test_category c1;
- __gnu_test::test_category c2(c1);
+ __gnu_test::test_category c2(c1); // { dg-error "deleted" }
return 0;
}
-// { dg-error "deleted function" "" { target *-*-* } 72 }
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "first required here" "" { target *-*-* } 30 }
-// { dg-excess-errors "copy constructor" }
+// { dg-prune-output "testsuite_error" }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc b/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
index e9294bfd2b5..46f046d6570 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
@@ -17,7 +17,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <system_error> // { dg-excess-errors "In file included from" }
+#include <system_error>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
index 13438f0fbe6..0656d42f068 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2009
+// Copyright (C) 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,6 +32,9 @@ void allocate_on_stack(void)
__extension__ char array[num];
for (size_t i = 0; i < num; i++)
array[i]=0;
+ // Suppress unused warnings.
+ for (size_t i = 0; i < num; i++)
+ array[i]=array[i];
}
void test04()
diff --git a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
index d28fc8ea95e..b252cea3647 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
@@ -1,6 +1,6 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,6 +34,9 @@ void allocate_on_stack(void)
__extension__ char array[num];
for (size_t i = 0; i < num; i++)
array[i]=0;
+ // Suppress unused warnings.
+ for (size_t i = 0; i < num; i++)
+ array[i]=array[i];
}
void test04()
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
index 42f29798570..4a145a99349 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2007-06-05 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstring>
+#include <string>
#include <system_error>
#include <testsuite_hooks.h>
@@ -33,14 +33,14 @@ int main()
{
std::system_error err1(e, s);
VERIFY( err1.code() == e );
- VERIFY( std::strcmp(err1.runtime_error::what(), s.c_str()) == 0 );
+ VERIFY( std::string(err1.what()).find(s) != std::string::npos );
}
// 2
{
std::system_error err2(95, std::system_category(), s);
VERIFY( err2.code() == std::error_code(95, std::system_category()) );
- VERIFY( std::strcmp(err2.runtime_error::what(), s.c_str()) == 0 );
+ VERIFY( std::string((err2.what(), s)).find(s) != std::string::npos );
}
return 0;
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
index 213b196b5d0..9899dfb7ada 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2008, 2009
+// Copyright (C) 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -22,7 +22,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
using namespace std;
@@ -39,8 +38,8 @@ void test01()
// 2
system_error obj2(error_code(), s);
- VERIFY( strcmp(obj1.what(), s.data()) == 0 );
- VERIFY( strcmp(obj2.what(), s.data()) == 0 );
+ VERIFY( string(obj1.what()).find(s.data()) != string::npos );
+ VERIFY( string(obj2.what()).find(s.data()) != string::npos );
}
void test02()
@@ -49,7 +48,7 @@ void test02()
string s("lack of sunlight error");
system_error x(error_code(), s);
- VERIFY( strcmp(x.what(), s.data()) == 0 );
+ VERIFY( string(x.what()).find(s.data()) != string::npos );
}
int main(void)
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
index ff6641bd2b9..b5fe39cb234 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2008, 2009
+// Copyright (C) 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -22,7 +22,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/2089
@@ -38,7 +37,7 @@ void test03()
try
{ throw fuzzy_logic(); }
catch(const fuzzy_logic& obj)
- { VERIFY( std::strcmp("whoa", obj.what()) == 0 ); }
+ { VERIFY( std::string(obj.what()).find("whoa") != std::string::npos ); }
catch(...)
{ VERIFY( false ); }
}
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
index 9dc7010988a..d1d2ffee484 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2009
+// Copyright (C) 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -20,7 +20,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
// test copy ctors, assignment operators, and persistence of member string data
@@ -32,6 +31,9 @@ void allocate_on_stack(void)
__extension__ char array[num];
for (size_t i = 0; i < num; i++)
array[i]=0;
+ // Suppress unused warnings.
+ for (size_t i = 0; i < num; i++)
+ array[i]=array[i];
}
void test04()
@@ -49,7 +51,7 @@ void test04()
obj1 = obj2;
}
allocate_on_stack();
- VERIFY( std::strcmp(strlit1, obj1.what()) == 0 );
+ VERIFY( std::string(obj1.what()).find(strlit1) != std::string::npos );
// block 02
{
@@ -58,7 +60,7 @@ void test04()
obj1 = obj3;
}
allocate_on_stack();
- VERIFY( std::strcmp(strlit2, obj1.what()) == 0 );
+ VERIFY( std::string(obj1.what()).find(strlit2) != std::string::npos );
}
int main(void)
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
index 2b5d51c4571..7c729c7f117 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2008, 2009
+// Copyright (C) 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -20,7 +20,6 @@
// 19.1 Exception classes
-#include <cstring>
#include <string>
#include <system_error>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
index f3c1309f583..351fc2914d1 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,7 +17,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstring>
#include <string>
#include <system_error>
#include <testsuite_hooks.h>
@@ -30,7 +29,7 @@ void test01()
bool test __attribute__((unused)) = true;
const std::string xxx(10000, 'x');
test_type t(std::error_code(), xxx);
- VERIFY( std::strcmp(t.what(), xxx.c_str()) == 0 );
+ VERIFY( std::string(t.what()).find(xxx) != std::string::npos );
}
int main(void)
diff --git a/libstdc++-v3/testsuite/20_util/addressof/1.cc b/libstdc++-v3/testsuite/20_util/addressof/1.cc
new file mode 100644
index 00000000000..43009f3c833
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/addressof/1.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void f1(int) { }
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using namespace __gnu_test;
+
+ OverloadedAddress* ao1 = new OverloadedAddress();
+ OverloadedAddress& o1 = *ao1;
+
+ VERIFY( std::addressof(o1) == ao1 );
+
+ const OverloadedAddress* ao2 = new OverloadedAddress();
+ const OverloadedAddress& o2 = *ao2;
+
+ VERIFY( std::addressof(o2) == ao2 );
+
+ VERIFY( std::addressof(f1) == &f1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/addressof/requirements/explicit_instantiation.cc
index 691f81b9387..559cd20e2fe 100644
--- a/libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/20_util/addressof/requirements/explicit_instantiation.cc
@@ -1,9 +1,9 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// 2007-07-10 Paolo Carlini <pcarlini@suse.de>
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -20,13 +20,12 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
// NB: This file is for testing utility with NO OTHER INCLUDES.
-#include <utility>
+#include <memory>
namespace std
{
typedef short test_type;
- template struct decay<test_type>;
+ template short* addressof(short&);
}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
index b4b9eb910a6..1f6e67394e9 100644
--- a/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
@@ -47,4 +47,5 @@ main()
return 0;
}
// { dg-error "candidates" "" { target *-*-* } 134 }
+// { dg-error "note" "" { target *-*-* } 152 }
// { dg-error "::auto_ptr" "" { target *-*-* } 262 }
diff --git a/libstdc++-v3/testsuite/20_util/clocks/1.cc b/libstdc++-v3/testsuite/20_util/clocks/1.cc
index bcbe210d22f..aac12be6b2f 100644
--- a/libstdc++-v3/testsuite/20_util/clocks/1.cc
+++ b/libstdc++-v3/testsuite/20_util/clocks/1.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,6 +34,7 @@ main()
is_monotonic = is_monotonic; // suppress unused warning
std::time_t t2 = system_clock::to_time_t(t1);
system_clock::time_point t3 = system_clock::from_time_t(t2);
+ t3 = t3; // suppress unused warning
return 0;
}
diff --git a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
index d22a58ba038..f0c65468909 100644
--- a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// 2009-11-12 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,13 +19,11 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 587 }
-// { dg-error "instantiated from here" "" { target *-*-* } 30 }
-// { dg-excess-errors "In function" }
+// { dg-error "static assertion failed" "" { target *-*-* } 682 }
#include <utility>
void test01()
{
- std::declval<int>();
+ std::declval<int>(); // { dg-error "instantiated from here" }
}
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
index 297b5cb690d..98a35f10539 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
@@ -33,4 +33,3 @@ void test01()
// { dg-error "rep cannot be a duration" "" { target *-*-* } 203 }
// { dg-error "instantiated from here" "" { target *-*-* } 31 }
-// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
index b4224401d47..86f349319f0 100644
--- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
@@ -35,4 +35,3 @@ void test01()
// { dg-error "period must be positive" "" { target *-*-* } 206 }
// { dg-error "instantiated from here" "" { target *-*-* } 33 }
-// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
index a196ef64e2e..bb3c25d1cd9 100644
--- a/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
@@ -18,15 +18,16 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-prune-output "include" }
+
#include <functional>
void test01()
{
std::function<void()> f1;
std::function<void()> f2;
- f1 == f2; // { dg-error "here" }
- f1 != f2; // { dg-error "here" }
- // { dg-excess-errors "" }
+ f1 == f2; // { dg-error "deleted" }
+ f1 != f2; // { dg-error "deleted" }
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..0a4a6224b8a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_nothrow_copy_assign<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc
new file mode 100644
index 00000000000..3781d1f9bec
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_nothrow_copy_assign<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc
new file mode 100644
index 00000000000..0201c9cb91d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_nothrow_copy_assign/value.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_nothrow_copy_assign;
+ using namespace __gnu_test;
+
+ VERIFY( (test_property<has_nothrow_copy_assign, int>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, float>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, EnumType>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int*>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int(*)(int)>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int (ClassType::*)>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int[2]>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, float[][3]>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int*[3]>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign, int(*[][2])(int)>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign,
+ int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_property<has_nothrow_copy_assign,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<has_nothrow_copy_assign, void>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..6ec5c5a427e
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/explicit_instantiation.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct has_trivial_copy_assign<test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/typedefs.cc
new file mode 100644
index 00000000000..1c5f0fe7ab0
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+// { dg-do compile }
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::has_trivial_copy_assign<int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/value.cc b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/value.cc
new file mode 100644
index 00000000000..7663a688a68
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/has_trivial_copy_assign/value.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+// 2010-06-08 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::has_trivial_copy_assign;
+ using namespace __gnu_test;
+
+ VERIFY( (test_property<has_trivial_copy_assign, int>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, float>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, EnumType>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int*>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int(*)(int)>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int (ClassType::*)>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign,
+ int (ClassType::*) (int)>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int[2]>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, float[][3]>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, EnumType[2][3][4]>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int*[3]>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign, int(*[][2])(int)>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign,
+ int (ClassType::*[2][3])>(true)) );
+ VERIFY( (test_property<has_trivial_copy_assign,
+ int (ClassType::*[][2][3]) (int)>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<has_trivial_copy_assign, void>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
index 7d83fd9f994..e596b6ac6ee 100644
--- a/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <type_traits> // { dg-excess-errors "In file included from" }
+#include <type_traits>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/20_util/identity/value.cc b/libstdc++-v3/testsuite/20_util/identity/value.cc
deleted file mode 100644
index 80b444bf435..00000000000
--- a/libstdc++-v3/testsuite/20_util/identity/value.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// 2007-07-10 Paolo Carlini <pcarlini@suse.de>
-//
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <utility>
-#include <testsuite_hooks.h>
-#include <testsuite_tr1.h>
-
-void test01()
-{
- bool test __attribute__((unused)) = true;
- using std::identity;
- using std::is_same;
- using namespace __gnu_test;
-
- VERIFY( (is_same<identity<int>::type, int>::value) );
- VERIFY( (is_same<identity<int&>::type, int&>::value) );
- VERIFY( (is_same<identity<int&&>::type, int&&>::value) );
- VERIFY( (is_same<identity<int*>::type, int*>::value) );
- VERIFY( (is_same<identity<ClassType&&>::type, ClassType&&>::value) );
- VERIFY( (is_same<identity<ClassType>::type, ClassType>::value) );
- VERIFY( (is_same<identity<int(int)>::type, int(int)>::value) );
- VERIFY( (is_same<identity<void>::type, void>::value) );
- VERIFY( (is_same<identity<const void>::type, const void>::value) );
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..37ba9eb8bc1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+namespace std
+{
+ typedef short test_type;
+ template struct is_nothrow_constructible<test_type, test_type>;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc
new file mode 100644
index 00000000000..53a64a78f3f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+//
+// NB: This file is for testing type_traits with NO OTHER INCLUDES.
+
+#include <type_traits>
+
+void test01()
+{
+ // Check for required typedefs
+ typedef std::is_nothrow_constructible<int, int> test_type;
+ typedef test_type::value_type value_type;
+ typedef test_type::type type;
+ typedef test_type::type::value_type type_value_type;
+ typedef test_type::type::type type_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
new file mode 100644
index 00000000000..b3246fad119
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
@@ -0,0 +1,78 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <testsuite_hooks.h>
+#include <testsuite_tr1.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ using std::is_nothrow_constructible;
+ using namespace __gnu_test;
+
+ // Positive tests.
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
+ double&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
+ int&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
+ double&, int&, double&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
+ double&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
+ int&>(true)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
+ double&, int&, double&>(true)) );
+
+ // Negative tests.
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
+ void*>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass>
+ (false)) );
+ VERIFY( (test_property<is_nothrow_constructible, NoexceptExplicitClass,
+ int, double>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
+ void*>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass>
+ (false)) );
+ VERIFY( (test_property<is_nothrow_constructible, NothrowExplicitClass,
+ int, double>(false)) );
+
+ VERIFY( (test_property<is_nothrow_constructible, ExceptExplicitClass,
+ double&>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, ExceptExplicitClass,
+ int&>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, ExceptExplicitClass,
+ double&, int&, double&>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, ThrowExplicitClass,
+ double&>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, ThrowExplicitClass,
+ int&>(false)) );
+ VERIFY( (test_property<is_nothrow_constructible, ThrowExplicitClass,
+ double&, int&, double&>(false)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
index eec74c71593..8a09c65d84b 100644
--- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
@@ -3,7 +3,7 @@
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,8 +48,5 @@ void test01()
// { dg-error "instantiated from here" "" { target *-*-* } 40 }
// { dg-error "instantiated from here" "" { target *-*-* } 42 }
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 588 }
-// { dg-error "declaration of" "" { target *-*-* } 552 }
-
-// { dg-excess-errors "At global scope" }
-// { dg-excess-errors "In instantiation of" }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 645 }
+// { dg-error "declaration of" "" { target *-*-* } 609 }
diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
index 708482ef8a3..ba684144fc7 100644
--- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
@@ -3,7 +3,7 @@
// 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,8 +48,5 @@ void test01()
// { dg-error "instantiated from here" "" { target *-*-* } 40 }
// { dg-error "instantiated from here" "" { target *-*-* } 42 }
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 511 }
-// { dg-error "declaration of" "" { target *-*-* } 475 }
-
-// { dg-excess-errors "At global scope" }
-// { dg-excess-errors "In instantiation of" }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 568 }
+// { dg-error "declaration of" "" { target *-*-* } 532 }
diff --git a/libstdc++-v3/testsuite/20_util/pair/44487.cc b/libstdc++-v3/testsuite/20_util/pair/44487.cc
new file mode 100644
index 00000000000..833d9864534
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/44487.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+
+int x, y;
+
+std::pair<int&, int&>
+foo1()
+{
+ std::pair<int&, int&> blah(x, y);
+ return blah;
+}
+
+std::pair<int&, int&>
+foo2()
+{
+ const std::pair<int&, int&> blah(x, y);
+ return blah;
+}
+
+std::pair<int&, int&>
+foo3()
+{
+ std::pair<int&, int&> blah(x, y);
+ return std::pair<int&, int&>(std::move(blah));
+}
+
+std::pair<int&, int&>
+foo4()
+{
+ const std::pair<int&, int&> blah(x, y);
+ return std::pair<int&, int&>(std::move(blah));
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/piecewise.cc b/libstdc++-v3/testsuite/20_util/pair/piecewise.cc
new file mode 100644
index 00000000000..ef71473202d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/piecewise.cc
@@ -0,0 +1,98 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-04-30 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <utility>
+#include <tuple>
+#include <testsuite_hooks.h>
+
+struct type_zero
+{
+ type_zero() : n_(757) { }
+
+ type_zero(const type_zero&) = delete;
+ type_zero(type_zero&& other) : n_(other.n_) { }
+
+ int get() const { return n_; }
+
+private:
+ int n_;
+};
+
+struct type_one
+{
+ type_one(int n) : n_(n) { }
+
+ type_one(const type_one&) = delete;
+ type_one(type_one&& other) : n_(other.n_) { }
+
+ int get() const { return n_; }
+
+private:
+ int n_;
+};
+
+struct type_two
+{
+ type_two(int n1, int n2) : n1_(n1), n2_(n2) { }
+
+ type_two(const type_two&) = delete;
+ type_two(type_two&& other) : n1_(other.n1_), n2_(other.n2_) { }
+
+ int get1() const { return n1_; }
+ int get2() const { return n2_; }
+
+private:
+ int n1_, n2_;
+};
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::pair<type_one, type_zero> pp0(std::piecewise_construct_t(),
+ std::forward_as_tuple(-3),
+ std::forward_as_tuple());
+ VERIFY( pp0.first.get() == -3 );
+ VERIFY( pp0.second.get() == 757 );
+
+ std::pair<type_one, type_two> pp1(std::piecewise_construct_t(),
+ std::forward_as_tuple(6),
+ std::forward_as_tuple(5, 4));
+ VERIFY( pp1.first.get() == 6 );
+ VERIFY( pp1.second.get1() == 5 );
+ VERIFY( pp1.second.get2() == 4 );
+
+ std::pair<type_two, type_two> pp2(std::piecewise_construct_t(),
+ std::forward_as_tuple(2, 1),
+ std::forward_as_tuple(-1, -3));
+ VERIFY( pp2.first.get1() == 2 );
+ VERIFY( pp2.first.get2() == 1 );
+ VERIFY( pp2.second.get1() == -1 );
+ VERIFY( pp2.second.get2() == -3 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc b/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc
index f4354fe96bf..eb1bd212f5a 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008, 2009 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -45,7 +45,12 @@ test02()
VERIFY( (std::ratio_less<std::ratio<1,3>, std::ratio<1,4>>::value == 0) );
VERIFY( (std::ratio_less<std::ratio<1,3>, std::ratio<-1,3>>::value == 0) );
-
+
+ VERIFY( (std::ratio_less<std::ratio<-1,3>, std::ratio<-1,4>>::value == 1) );
+ VERIFY( (std::ratio_less<std::ratio<0,4>, std::ratio<0,3>>::value == 0) );
+ VERIFY( (std::ratio_less<std::ratio<1,3>, std::ratio<0,3>>::value == 0) );
+ VERIFY( (std::ratio_less<std::ratio<0,3>, std::ratio<-1,4>>::value == 0) );
+
VERIFY( (std::ratio_less_equal<std::ratio<-1,3>,
std::ratio<-1,3>>::value == 1) );
VERIFY( ( std::ratio_less_equal<std::ratio<1,4>,
diff --git a/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc b/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc
index e741c143510..151dc64450e 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008, 2009 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,6 +41,13 @@ test01()
VERIFY( (std::ratio_less<std::ratio<M - 1, M - 2>,
std::ratio<-M, M - 1>>::value == 0) );
+
+ // No overflow
+ VERIFY( (std::ratio_less<std::ratio<M, M - 1>,
+ std::ratio<M, M - 2>>::value == 1) );
+
+ VERIFY( (std::ratio_less<std::ratio<-M, M - 1>,
+ std::ratio<-M, M - 2>>::value == 0) );
}
int main()
diff --git a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
index 03c2c1f582d..252265c8d41 100644
--- a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
@@ -2,7 +2,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
-// Copyright (C) 2008, 2009 Free Software Foundation
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,26 +24,26 @@
void
test01()
{
- std::ratio<INTMAX_MAX, INTMAX_MAX> r1;
- std::ratio<-INTMAX_MAX, INTMAX_MAX> r2;
+ std::ratio<INTMAX_MAX, INTMAX_MAX> r1 __attribute__((unused));
+ std::ratio<-INTMAX_MAX, INTMAX_MAX> r2 __attribute__((unused));
}
void
test02()
{
- std::ratio<INTMAX_MIN, 1> r1;
+ std::ratio<INTMAX_MIN, 1> r1 __attribute__((unused));
}
void
test03()
{
- std::ratio<1, INTMAX_MIN> r1;
+ std::ratio<1, INTMAX_MIN> r1 __attribute__((unused));
}
void
test04()
{
- std::ratio<1,0> r1;
+ std::ratio<1,0> r1 __attribute__((unused));
}
// { dg-error "instantiated from here" "" { target *-*-* } 34 }
@@ -51,4 +51,3 @@ test04()
// { dg-error "instantiated from here" "" { target *-*-* } 46 }
// { dg-error "denominator cannot be zero" "" { target *-*-* } 153 }
// { dg-error "out of range" "" { target *-*-* } 154 }
-// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc
new file mode 100644
index 00000000000..b167d71224b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <functional>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// libstdc++/41792
+void test01()
+{
+ using namespace __gnu_test;
+
+ OverloadedAddress* ao1 = new OverloadedAddress();
+ std::reference_wrapper<OverloadedAddress> rw1(*ao1);
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
index 4d9d1a66657..e0d09dee900 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
@@ -20,7 +20,7 @@
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
-#include <memory> // { dg-excess-errors "In file included from" }
+#include <memory>
#include <testsuite_hooks.h>
struct A { };
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc
new file mode 100644
index 00000000000..41e09d666ae
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.11.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+
+// libstdc++/42925 (also see GB 99)
+void test01()
+{
+ std::shared_ptr<int> ptr;
+ if (ptr == 0)
+ { }
+ if (0 == ptr)
+ { }
+ if (ptr != 0)
+ { }
+ if (0 != ptr)
+ { }
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc
new file mode 100644
index 00000000000..adc005d0c50
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.11.2 Template class shared_ptr [util.smartptr.shared]
+
+#include <memory>
+
+// incomplete type
+struct X;
+
+// get an auto_ptr rvalue
+std::auto_ptr<X>&& ap();
+
+void test01()
+{
+ X* px = 0;
+ std::shared_ptr<X> p1(px); // { dg-error "here" }
+ // { dg-error "incomplete" "" { target *-*-* } 566 }
+
+ std::shared_ptr<X> p9(ap()); // { dg-error "here" }
+ // { dg-error "incomplete" "" { target *-*-* } 658 }
+
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
index e2ef60e3fbb..b078a7df798 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
@@ -21,28 +21,16 @@
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
#include <memory>
-#include <testsuite_hooks.h>
struct A { };
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.const]
// Construction from const auto_ptr
-int
+void
test01()
{
- bool test __attribute__((unused)) = true;
-
const std::auto_ptr<A> a;
std::shared_ptr<A> p(std::move(a)); // { dg-error "no match" }
-
- return 0;
-}
-
-int
-main()
-{
- test01();
- return 0;
}
// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
new file mode 100644
index 00000000000..82acaed3615
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
@@ -0,0 +1,93 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.11.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+#include <cstddef>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+// 20.9.11.2.1 shared_ptr constructors [util.smartptr.shared.const]
+
+// Construction from nullptr
+
+struct deleter
+{
+ int count;
+ deleter() : count(0) { }
+ void operator()(std::nullptr_t) { ++count; }
+ void operator()(int*) const { throw "wrong type passed to deleter"; }
+};
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::shared_ptr<int> p = nullptr;
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 0 );
+
+}
+
+void
+test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ deleter d;
+ std::shared_ptr<int> p(nullptr, std::ref(d));
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 1 );
+
+ p = nullptr;
+ VERIFY( p.use_count() == 0 );
+ VERIFY( d.count == 1 );
+}
+
+
+void
+test03()
+{
+ bool test __attribute__((unused)) = true;
+
+ deleter d;
+ __gnu_test::tracker_allocator<int> a;
+ std::shared_ptr<int> p(nullptr, std::ref(d), a);
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 1 );
+
+ p = nullptr;
+ VERIFY( p.use_count() == 0 );
+ VERIFY( d.count == 1 );
+
+ typedef __gnu_test::tracker_allocator_counter c;
+ VERIFY( c::get_destruct_count() == c::get_construct_count() );
+ VERIFY( c::get_deallocation_count() == c::get_allocation_count() );
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc
index 4bb528011a6..701f1243922 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation
+// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -75,6 +75,6 @@ main()
{
test01();
test02();
- test02();
+ test03();
return 0;
}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
new file mode 100644
index 00000000000..93f4739d782
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ struct T { };
+
+ std::shared_ptr<T> s0(new T);
+ std::hash<std::shared_ptr<T>> hs0;
+ std::hash<T*> hp0;
+
+ VERIFY( hs0(s0) == hp0(s0.get()) );
+
+ std::__shared_ptr<T> s1(new T);
+ std::hash<std::__shared_ptr<T>> hs1;
+ std::hash<T*> hp1;
+
+ VERIFY( hs1(s1) == hp1(s1.get()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc
new file mode 100644
index 00000000000..dade58de8bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+int x, y;
+
+std::tuple<int&, int&>
+foo1()
+{
+ std::pair<int&, int&> blah(x, y);
+ return blah;
+}
+
+std::tuple<int&, int&>
+foo2()
+{
+ const std::pair<int&, int&> blah(x, y);
+ return blah;
+}
+
+std::tuple<int&, int&>
+foo3()
+{
+ std::pair<int&, int&> blah(x, y);
+ return std::tuple<int&, int&>(std::move(blah));
+}
+
+std::tuple<int&, int&>
+foo4()
+{
+ const std::pair<int&, int&> blah(x, y);
+ return std::tuple<int&, int&>(std::move(blah));
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc
new file mode 100644
index 00000000000..863d7884779
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+typedef std::tuple<int> Tuple_1;
+typedef std::tuple<int, int> Tuple_2;
+typedef std::tuple<int, int, int> Tuple_3;
+
+ Tuple_1 A_1() { return Tuple_1(); }
+const Tuple_1 B_1() { return Tuple_1(); }
+
+ Tuple_2 A_2() { return Tuple_2(); }
+const Tuple_2 B_2() { return Tuple_2(); }
+
+ Tuple_3 A_3() { return Tuple_3(); }
+const Tuple_3 B_3() { return Tuple_3(); }
+
+Tuple_1 test_A_1(A_1());
+Tuple_1 test_B_1(B_1());
+
+Tuple_2 test_A_2(A_2());
+Tuple_2 test_B_2(B_2());
+
+Tuple_3 test_A_3(A_3());
+Tuple_3 test_B_3(B_3());
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc
index f979623e932..7bcb5177169 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -20,6 +20,7 @@
// Tuple
#include <tuple>
+#include <utility> // for pair
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc
index 3afb059ce76..9871f4959a6 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -20,6 +20,7 @@
// Tuple
#include <tuple>
+#include <utility> // for pair
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc
new file mode 100644
index 00000000000..def1b521dfd
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+// http://gcc.gnu.org/ml/libstdc++/2008-02/msg00047.html
+std::tuple<int> ts1;
+std::tuple<unsigned> tu1(ts1);
+
+std::tuple<int, int> ts2;
+std::tuple<unsigned, unsigned> tu2(ts2);
+
+std::tuple<int, int, int> ts3;
+std::tuple<unsigned, unsigned, unsigned> tu3(ts3);
+
+std::tuple<int, unsigned> tm2;
+std::tuple<unsigned, int> tm2_(tm2);
+
+std::tuple<int, unsigned, int> tm3;
+std::tuple<unsigned, int, unsigned> tm3_(tm3);
diff --git a/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
new file mode 100644
index 00000000000..bad4ad49c75
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
@@ -0,0 +1,72 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-04-30 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Tuple
+
+#include <tuple>
+#include <type_traits>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::forward_as_tuple();
+
+ VERIFY( std::get<0>(std::forward_as_tuple(-1)) == -1 );
+ VERIFY( (std::is_same<decltype(std::forward_as_tuple(-1)),
+ std::tuple<int&&>>::value) );
+
+ const int i1 = 1;
+ const int i2 = 2;
+ const double d1 = 4.0;
+ auto t1 = std::forward_as_tuple(i1, i2, d1);
+ VERIFY( (std::is_same<decltype(t1), std::tuple<const int&,
+ const int&, const double&>>::value) );
+ VERIFY( std::get<0>(t1) == i1 );
+ VERIFY( std::get<1>(t1) == i2 );
+ VERIFY( std::get<2>(t1) == d1 );
+
+ typedef const int a_type1[3];
+ a_type1 a1 = { -1, 1, 2 };
+ auto t2 = std::forward_as_tuple(a1);
+ VERIFY( (std::is_same<decltype(t2), std::tuple<a_type1&>>::value) );
+ VERIFY( std::get<0>(t2)[0] == a1[0] );
+ VERIFY( std::get<0>(t2)[1] == a1[1] );
+ VERIFY( std::get<0>(t2)[2] == a1[2] );
+
+ typedef int a_type2[2];
+ a_type2 a2 = { 2, -2 };
+ volatile int i4 = 1;
+ auto t3 = std::forward_as_tuple(a2, i4);
+ VERIFY( (std::is_same<decltype(t3), std::tuple<a_type2&,
+ volatile int&>>::value) );
+ VERIFY( std::get<0>(t3)[0] == a2[0] );
+ VERIFY( std::get<0>(t3)[1] == a2[1] );
+ VERIFY( std::get<1>(t3) == i4 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
index 4bf8e4b4349..95c1d5dc5ba 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
@@ -39,23 +39,14 @@ void
test02()
{
std::unique_ptr<int[]> p1(new int(420));
- std::unique_ptr<int[]> p2 = p1;
+ std::unique_ptr<int[]> p2 = p1; // { dg-error "deleted" }
}
void
test03()
{
- std::unique_ptr<int[2]> p1(new int[3]);
- std::unique_ptr<int[2]> p2 = p1;
+ std::unique_ptr<int[2]> p1(new int[3]); // { dg-error "no match" }
+ std::unique_ptr<int[2]> p2 = p1; // { dg-error "deleted" }
}
-// { dg-error "deleted function" "" { target *-*-* } 342 }
-// { dg-error "used here" "" { target *-*-* } 42 }
-// { dg-error "no matching" "" { target *-*-* } 48 }
-// { dg-warning "candidates are" "" { target *-*-* } 115 }
-// { dg-warning "note" "" { target *-*-* } 108 }
-// { dg-warning "note" "" { target *-*-* } 103 }
-// { dg-warning "note" "" { target *-*-* } 98 }
-// { dg-warning "note" "" { target *-*-* } 92 }
-// { dg-error "deleted function" "" { target *-*-* } 207 }
-// { dg-error "used here" "" { target *-*-* } 49 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc
new file mode 100644
index 00000000000..6f067ee4d6b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.10 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A { };
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unique_ptr<A> p(new A);
+ p = nullptr;
+
+ VERIFY( p.get() == nullptr );
+}
+
+void
+test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unique_ptr<A[]> p(new A[2]);
+ p = nullptr;
+
+ VERIFY( p.get() == nullptr );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc
new file mode 100644
index 00000000000..e3dfad46f88
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.10 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+
+// libstdc++/42925 (also see GB 99)
+void test01()
+{
+ std::unique_ptr<int> ptr;
+ if (ptr == 0)
+ { }
+ if (0 == ptr)
+ { }
+ if (ptr != 0)
+ { }
+ if (0 != ptr)
+ { }
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc
new file mode 100644
index 00000000000..f4b9838d040
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.10 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A { };
+
+// 20.9.10.2.1 unique_ptr constructors [unique.ptr.single.ctor]
+
+// Construction from auto_ptr
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::auto_ptr<A> a(new A);
+ std::unique_ptr<A> a2(std::move(a));
+ VERIFY( a.get() == nullptr );
+ VERIFY( a2.get() != 0 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
new file mode 100644
index 00000000000..76910c3c64a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.10 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+
+struct A { };
+
+// 20.9.10.2.1 unique_ptr constructors [unique.ptr.single.ctor]
+
+// Construction from const auto_ptr
+void
+test01()
+{
+ const std::auto_ptr<A> a(new A);
+ std::unique_ptr<A> a2(std::move(a)); // { dg-error "no match" }
+}
+// { dg-excess-errors "candidates are" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc
new file mode 100644
index 00000000000..1f515ea53cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.10 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A { };
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unique_ptr<A> p = nullptr;
+
+ VERIFY( p.get() == nullptr );
+}
+
+void
+test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::unique_ptr<A[]> p = nullptr;
+
+ VERIFY( p.get() == nullptr );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible.cc
index 7e0f30741f9..2a4a89b4037 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible.cc
@@ -37,4 +37,5 @@ test01()
{
std::unique_ptr<B[]> B_from_A(new A[3]); //{ dg-error "invalid conversion from" }
}
-//{ dg-excess-errors "initialization" }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
new file mode 100644
index 00000000000..53ece26ecff
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ struct T { };
+
+ std::unique_ptr<T> u0(new T);
+ std::hash<std::unique_ptr<T>> hu0;
+ std::hash<typename std::unique_ptr<T>::pointer> hp0;
+
+ VERIFY( hu0(u0) == hp0(u0.get()) );
+
+ std::unique_ptr<T[]> u1(new T[10]);
+ std::hash<std::unique_ptr<T[]>> hu1;
+ std::hash<typename std::unique_ptr<T[]>::pointer> hp1;
+
+ VERIFY( hu1(u1) == hp1(u1.get()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
index 3308fcbf81b..29bb57d22b2 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
@@ -32,8 +32,7 @@ struct B : A
void test01()
{
std::unique_ptr<B[]> up;
- up.reset(new A[3]);
+ up.reset(new A[3]); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 35 }
-// { dg-error "deleted function" "" { target *-*-* } 332 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
new file mode 100644
index 00000000000..5074844f42f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
@@ -0,0 +1,50 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.6.11 Template class unique_ptr [unique.ptr.single]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ void operator()(void* p) const { }
+};
+
+struct B
+{
+ typedef char* pointer;
+ void operator()(pointer p) const { }
+};
+
+int main()
+{
+ typedef std::unique_ptr<int> up;
+ typedef std::unique_ptr<int, A> upA;
+ typedef std::unique_ptr<int, B> upB;
+ typedef std::unique_ptr<int, A&> upAr;
+ typedef std::unique_ptr<int, B&> upBr;
+
+ static_assert( std::is_same< up::pointer, int*>::value, "" );
+ static_assert( std::is_same< upA::pointer, int*>::value, "" );
+ static_assert( std::is_same< upB::pointer, char*>::value, "" );
+ static_assert( std::is_same< upAr::pointer, int*>::value, "" );
+ static_assert( std::is_same< upBr::pointer, char*>::value, "" );
+}
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
index 93aceb305eb..f124718016e 100644
--- a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
@@ -40,3 +40,12 @@ main()
test01();
return 0;
}
+
+// { dg-warning "note" "" { target *-*-* } 347 }
+// { dg-warning "note" "" { target *-*-* } 466 }
+// { dg-warning "note" "" { target *-*-* } 883 }
+// { dg-warning "note" "" { target *-*-* } 580 }
+// { dg-warning "note" "" { target *-*-* } 1027 }
+// { dg-warning "note" "" { target *-*-* } 340 }
+// { dg-warning "note" "" { target *-*-* } 290 }
+// { dg-warning "note" "" { target *-*-* } 197 }
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
index 73839d26c22..5652478f42b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
@@ -1,6 +1,6 @@
// 1999-06-04 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,7 @@ void test05()
std::string empty2(empty.begin(), empty.end());
// libstdc++/8716 (same underlying situation, same fix)
- char const * s = NULL;
+ char const * s = 0;
std::string zero_length_built_with_NULL(s,0);
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
index 4fe58b6aced..e72377de66a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 1999-06-04 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,7 @@ void test05()
std::wstring empty2(empty.begin(), empty.end());
// libstdc++/8716 (same underlying situation, same fix)
- wchar_t const * s = NULL;
+ wchar_t const * s = 0;
std::wstring zero_length_built_with_NULL(s,0);
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc
index 03d54339fdd..c8a8b93472a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc
@@ -1,6 +1,6 @@
// { dg-do run { xfail *-*-* } }
+// { dg-options "-O0" }
// { dg-require-debug-mode "" }
-// { dg-options "-O0 -D_GLIBCXX_DEBUG" }
// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
@@ -19,7 +19,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <string>
// libstdc++/21674
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc
new file mode 100644
index 00000000000..a7c1386ae9d
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
+// 2010-05-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::string str("ramifications");
+ const std::string cstr("melodien");
+
+ VERIFY( str.front() == 'r' );
+ VERIFY( str.back() == 's' );
+ VERIFY( cstr.front() == 'm' );
+ VERIFY( cstr.back() == 'n' );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc
index fe4a2495118..95046463dae 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc
@@ -1,6 +1,6 @@
// { dg-do run { xfail *-*-* } }
+// { dg-options "-O0" }
// { dg-require-debug-mode "" }
-// { dg-options "-O0 -D_GLIBCXX_DEBUG" }
// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
@@ -19,7 +19,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <string>
// libstdc++/21674
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc
new file mode 100644
index 00000000000..60b09606fe1
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
+// 2010-05-31 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::wstring str(L"ramifications");
+ const std::wstring cstr(L"melodien");
+
+ VERIFY( str.front() == L'r' );
+ VERIFY( str.back() == L's' );
+ VERIFY( cstr.front() == L'm' );
+ VERIFY( cstr.back() == L'n' );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc
index c39f6b416f7..de0fe168e98 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/char/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ int test01(void)
// data() for size == 0 is non-NULL.
VERIFY( empty.size() == 0 );
const std::string::value_type* p = empty.data();
- VERIFY( p != NULL );
+ VERIFY( p );
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc
index 1ddde927227..a57464aa5b5 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ int test01(void)
// data() for size == 0 is non-NULL.
VERIFY( empty.size() == 0 );
const std::wstring::value_type* p = empty.data();
- VERIFY( p != NULL );
+ VERIFY( p );
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
index fb48898d696..b3dc9b20e7c 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
@@ -2,7 +2,7 @@
// Adapted from http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00679.html
// which was adapted from pthread1.cc by Mike Lu <MLu@dynamicsoft.com>
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -95,12 +95,12 @@ main (void)
#endif
pthread_t prod;
- pthread_create (&prod, NULL, produce, NULL);
+ pthread_create (&prod, 0, produce, 0);
pthread_t cons;
- pthread_create (&cons, NULL, consume, NULL);
+ pthread_create (&cons, 0, consume, 0);
- pthread_join (prod, NULL);
- pthread_join (cons, NULL);
+ pthread_join (prod, 0);
+ pthread_join (cons, 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc
new file mode 100644
index 00000000000..1ce386cbe96
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <string>
+
+void
+test01()
+{
+ std::string s("Hello, World!");
+ std::begin(s);
+ std::end(s);
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ std::wstring ws(L"Hello, World!");
+ std::begin(ws);
+ std::end(ws);
+#endif
+}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc b/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
index 67bcac39645..9142018d0de 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
@@ -1,6 +1,6 @@
// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -60,6 +60,9 @@ void test01()
// void* memchr( void* s, int c, size_t n);
cv = std::memchr(cv, 'a', 3);
v = std::memchr(v, 'a', 3);
+
+ cc1 = cc1; // Suppress unused warnings.
+ c1 = c1;
}
int main()
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc b/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
index 464713bed32..5d751900473 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
@@ -1,6 +1,6 @@
// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,6 +40,10 @@ void test02()
cc = strrchr(ccarray1, 'c');
cc = strpbrk(ccarray1, ccarray2);
c = strstr(carray, carray);
+
+ cv1 = cv1; // Suppress unused warnings.
+ cc = cc;
+ c = c;
}
int main()
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
index 2e7a6c35d7c..4702581d90f 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,6 +59,9 @@ void test01()
// wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
cc1 = std::wmemchr(ccarray1, L'a', 3);
c1 = std::wmemchr(carray, L'a', 3);
+
+ cc1 = cc1; // Suppress unused warnings.
+ c1 = c1;
}
int main()
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
index aea01b0f16b..7637ecddf26 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
@@ -1,6 +1,6 @@
// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,6 +39,9 @@ void test02()
cw = wcspbrk(ccarray1, ccarray2);
cw = wcsrchr(ccarray1, L'c');
w = wcsstr(carray, carray);
+
+ cw = cw; // Suppress unused warnings.
+ w = w;
}
int main()
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
index 4ec8c873825..2c8d77ff19d 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
index 5123514090f..dcb961ddd0e 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
index 2fa2c6885cd..c99b3ee26ec 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
index 80375ad410e..c5c0344b39e 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
index 98bfcea41f1..6b003d0bc20 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc
index f40ec7091f8..d79ccfe1ce4 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
index 360ef14b1da..64a2c21c297 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
index 95d2151388d..ead5c4e747e 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
index 70690ab7f4e..46f6fed9618 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
index b3eaf91e925..9a172d9a726 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
index d9cb8c2466e..2fc9b2800b4 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
index 94f4f16ec84..3e81ccf0a34 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
index 1a097406927..3002a9e6659 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
index 64e54139f12..9f2b925cdba 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
index bed2deec85c..8c201076f70 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc
index 5cd6ee21bb5..10aca4b0413 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
index 09af13ac133..872a3855335 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
index 2d520880ab4..85514e7e7e5 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
index d871f7e9698..69feb151aad 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
index a0f1a1e9d87..05aa145db65 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
index d6159fd4aec..e12e0f624f5 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
index 395b6c9a4ae..75ff3aabce8 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
index cdfea2cc87d..2c8a529754f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc
index ba417af0e6d..363b72e27ff 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc
@@ -35,7 +35,7 @@ void test01()
bool test __attribute__((unused)) = true;
const char* c_lit = "black pearl jasmine tea";
const char* from_next;
- int size = 23;
+ int size = std::strlen(c_lit);
char* c_arr = new char[size];
char* c_ref = new char[size];
char* to_next;
@@ -68,10 +68,10 @@ void test01()
VERIFY( to_next == c_arr );
// unshift
- strcpy(c_arr, c_lit);
+ memcpy(c_arr, c_lit, size);
result r3 = cvt->unshift(state, c_arr, c_arr + size, to_next);
VERIFY( r3 == codecvt_base::noconv );
- VERIFY( !strcmp(c_arr, c_lit) );
+ VERIFY( !memcmp(c_arr, c_lit, size) );
VERIFY( to_next == c_arr );
delete [] c_arr;
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
index 860dbc886c2..15aaf1d994f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
index 9ae14cb8353..915b8240e6b 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
index 9cbd2245b34..72c252f8abf 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
index 43de2250b81..ce8ffb3a1d4 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
index bf8592c0d9e..4537e486bf2 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc
index 7bb49d88130..a513f868561 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-02-24 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
index 779ee61a8d6..6aa8d2e0978 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
index e59d7eb7120..fc630a86dd9 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
index f26a6769d25..9451f2c59a5 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
index 210ed470638..9fa3d12e012 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
index 13e80b66b43..27ae7d7febb 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-02-24 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
index 0e84a2d2771..d357db0edaf 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
index 6c3248577cf..263c6b43684 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
@@ -2,7 +2,10 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
index d8f1622343e..e0bc0f4715c 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
index e59d7eb7120..3ae613f84dc 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
index 493256cf7e6..1cf478dc342 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
index 0e84a2d2771..d357db0edaf 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
index 6c3248577cf..263c6b43684 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
@@ -2,7 +2,10 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
index e6ff596c396..e040413b86e 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
index 437d83f2122..56ad0ffdc24 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-02-24 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
index 28538b4b402..d3eaeed08dd 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
index 4b92b11ff37..267b0299c94 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
index 459c0709de9..fb632627653 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
index 1cba0f759b4..499061dc2cb 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-02-24 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
index 6f4d1830aff..d4af0c6a762 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
@@ -2,7 +2,9 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
index 534cd40cab0..e8b09e454ec 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
@@ -2,7 +2,10 @@
// { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
// { dg-options "-finput-charset=ISO8859-1" }
// { dg-require-iconv "ISO8859-1" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
index 6c32f9bcdb3..ef41c219ac8 100644
--- a/libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc
index 4a96797bf52..2df9553a35d 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -84,8 +85,8 @@ void test01()
std::ctype_base::mask m01[3];
std::ctype_base::mask m02[13];
const char_type* cc0 = strlit00;
- const char_type* cc1 = NULL;
- const char_type* cc2 = NULL;
+ const char_type* cc1 = 0;
+ const char_type* cc2 = 0;
cc0 = strlit00;
for (std::size_t i = 0; i < 3; ++i)
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
index da269cc9ddd..f466fd01cb6 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
@@ -1,5 +1,5 @@
// { dg-do run { xfail { ! { *-*-linux* } } } }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2009
// Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc
index cff6064c43d..9a1aaad2e5b 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
index f4f92d37919..4ca4984926a 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc
index cf2f845ca3b..0b989cbe729 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -84,8 +85,8 @@ void test01()
std::ctype_base::mask m01[3];
std::ctype_base::mask m02[13];
const char_type* cc0 = strlit00;
- const char_type* cc1 = NULL;
- const char_type* cc2 = NULL;
+ const char_type* cc1 = 0;
+ const char_type* cc2 = 0;
cc0 = strlit00;
for (std::size_t i = 0; i < 3; ++i)
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
index 6cbbafb6656..c4a82ae2c67 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
@@ -1,5 +1,5 @@
// { dg-do run { xfail *-*-![linux]* } }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2009
// Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
index e59d7eb7120..d4ff1a41eb5 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
index 20cd7c2e915..303275c9bee 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
index 28d18226ad4..5bd6e07d6ff 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-03-12 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
index e59d7eb7120..3ae613f84dc 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
index 7be5d5d94d8..d6c5c6def7c 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.ISO-8859-1" }
// 2003-03-12 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
index 4a4213aa78d..1d1fd696084 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-03-12 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc b/libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc
index aec9f31607b..f503ce7f41e 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// 1999-08-24 bkoz
-// Copyright (C) 1999, 2000, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,6 +43,8 @@ test01()
res = m01 | m02;
res = m01 ^ m02;
res = ~m01;
+ res = res; // Suppress unused warning.
+
m01 &= m02;
m01 |= m02;
m01 ^= m02;
diff --git a/libstdc++-v3/testsuite/22_locale/facet/2.cc b/libstdc++-v3/testsuite/22_locale/facet/2.cc
index 1b9b1dfdc9e..b211f5a9255 100644
--- a/libstdc++-v3/testsuite/22_locale/facet/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/facet/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "es_MX" }
// 2000-08-31 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
index d7ad84137da..86b4216d1c3 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
@@ -1,9 +1,10 @@
// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options "-pthreads" { target *-*-solaris* } }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
-// Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2007, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,10 +60,10 @@ main()
pthread_t tid[max_thread_count];
for (int i = 0; i < max_thread_count; i++)
- pthread_create (&tid[i], NULL, thread_main, 0);
+ pthread_create (&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join (tid[i], NULL);
+ pthread_join (tid[i], 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
index 2d92afcad39..40c8c66742b 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
@@ -1,9 +1,10 @@
// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options "-pthreads" { target *-*-solaris* } }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
-// Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2007, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -55,10 +56,10 @@ main()
loc[j] = std::locale(j % 2 ? "en_US" : "fr_FR");
for (int i = 0; i < max_thread_count; i++)
- pthread_create(&tid[i], NULL, thread_main, 0);
+ pthread_create(&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join(tid[i], NULL);
+ pthread_join(tid[i], 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
index c5c70dcc9d7..e859b57460a 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+// 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -96,7 +97,7 @@ void test01()
VERIFY( loc07 != loc02 );
VERIFY( loc07.name() != "" );
try
- { locale loc08(static_cast<const char*>(NULL)); }
+ { locale loc08(static_cast<const char*>(0)); }
catch(runtime_error& obj)
{ VERIFY( true ); }
catch(...)
@@ -130,7 +131,7 @@ void test01()
VERIFY( loc11 == loc01 );
try
- { locale loc12(loc01, static_cast<const char*>(NULL), locale::ctype); }
+ { locale loc12(loc01, static_cast<const char*>(0), locale::ctype); }
catch(runtime_error& obj)
{ VERIFY( true ); }
catch(...)
@@ -178,7 +179,7 @@ void test01()
VERIFY( loc11 == loc01 );
try
- { locale loc12(loc01, static_cast<const char*>(NULL), locale::ctype); }
+ { locale loc12(loc01, static_cast<const char*>(0), locale::ctype); }
catch(runtime_error& obj)
{ VERIFY( true ); }
catch(...)
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
index 428efc952b6..dca6948742b 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
@@ -1,6 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,7 +36,7 @@ void test01()
"LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;"
"LC_MEASUREMENT=C;LC_IDENTIFICATION=C" );
- VERIFY( locale().name() == setlocale(LC_ALL, NULL) );
+ VERIFY( locale().name() == setlocale(LC_ALL, 0) );
locale loc1 = locale(locale::classic(), "en_US.UTF-8", locale::time);
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc
index 44bda78f04e..fa33254ed38 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2008, 2009 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
index be731a4c9c9..a02d7e25790 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2008, 2009 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
index 6f9ede81418..07f02f15214 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "it_IT" }
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
index d7e30eba1c3..2445e43ebb3 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// Copyright (C) 2009 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
index a1d103ec73e..812f469b324 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_PH" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "it_IT" }
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
index b78f42a1720..02e4aee84aa 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS" }
// 2001-01-19 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
index 4927e5647a1..f0035cbfbcb 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS" }
+// { dg-require-namedlocale "en_US" }
// 2004-02-09 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,7 +40,7 @@ void test01()
if (loc.name() != "*")
{
locale::global(loc);
- VERIFY( loc.name() == setlocale(LC_ALL, NULL) );
+ VERIFY( loc.name() == setlocale(LC_ALL, 0) );
}
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
index 21d52fd4b2e..98b7312588f 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_PH" }
+// { dg-require-namedlocale "es_MX" }
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2000, 2002, 2003, 2005, 2009 Free Software Foundation
+// Copyright (C) 2000, 2002, 2003, 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +34,7 @@ void test02()
const string ph("en_PH");
const string mx("es_MX");
- const char* orig = setlocale(LC_ALL, NULL);
+ const char* orig = setlocale(LC_ALL, 0);
const char* testph = setlocale(LC_ALL, ph.c_str());
const char* testmx = setlocale(LC_ALL, mx.c_str());
setlocale(LC_ALL, orig);
@@ -54,7 +55,7 @@ void test02()
// Change global locale.
locale global_orig = locale::global(loc_mx);
- const char* lc_all_mx = setlocale(LC_ALL, NULL);
+ const char* lc_all_mx = setlocale(LC_ALL, 0);
if (lc_all_mx)
{
VERIFY( mx == lc_all_mx );
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
index 2dc7c3749cf..c19d0eb64ae 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-07-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
index 9c76fef28d6..627d1a4897b 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
// 2001-07-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
index 491edf272eb..9fd9fb93682 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// 2001-07-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
index cff6064c43d..a5f639bd56a 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "en_US" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
index f4f92d37919..8e60edf7db3 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "en_US" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
index ab662a70ceb..c1f9b3e9bf3 100644
--- a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-07-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
index 01d523338f5..e76e0769426 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc
index 2be8f58f44e..5b4309d09e0 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// 2003-10-23 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc
index bb4d97b2afc..e447e778077 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2003-10-24 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc
index 06e57e38ad3..5354cda9f1e 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc
index 239d7d27ae4..a50393e2a7b 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-02-05 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc
index 48281037274..361e357ceb2 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-02-05 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc
index fa0742b358d..1d10cfd84e1 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-03-01 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
index 6d6d3ece78f..54c0934b09e 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2004-03-02 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc
index 1837bb714cb..530999e067d 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-03-08 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
index c7c15cc84d1..f903a75964f 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2004-03-15 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
index bcae58bffa2..c1b8e593b90 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
index fd67a3c72fa..507214dc9e8 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
index 18d94bdc977..f48cc0efba3 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
index 3e12e22ef9b..c0a769d7860 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
index 77b61e16309..795271f3f3f 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc
index 50455764da1..43957a5936a 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc
index 3396ff0b1de..51682b9c0a3 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// 2003-10-23 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc
index d4f83926cf2..bab3e53fd06 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2003-10-24 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc
index 55c3ef7e61a..3f552f59131 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc
index 77aa3596f70..c9e7c1857d9 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-02-05 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc
index 2b480aca0b6..99b895ee9e8 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-02-05 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc
index cc8f4239ab2..08fb6225e43 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-03-01 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
index ce5ddc39dbc..4736617fcd0 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2004-03-02 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc
index 4611789736a..857032e47de 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2004-03-08 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
index 6ffadeee675..c1226ad7a16 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2004-03-15 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
index 52f3976ef14..15bccc6ece7 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc
index 336e7dabe06..136369ed75d 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
index a4ef791171f..bfb803d7863 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
index 3e12e22ef9b..c0a769d7860 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
index 77b61e16309..795271f3f3f 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
index 0a76d4334d0..848dd141e5f 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -52,12 +53,12 @@ void test01()
oss.imbue(loc_de);
const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
string result1 = oss.str();
VERIFY( result1 == "7.200.000.000,00 ");
oss.str(empty);
- iterator_type os_it02 = mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
string result2 = oss.str();
VERIFY( result2 == "7.200.000.000,00 ");
@@ -68,12 +69,12 @@ void test01()
oss.setf(ios_base::showbase);
oss.str(empty);
- iterator_type os_it03 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
string result3 = oss.str();
VERIFY( result3 == "7.200.000.000,00 EUR ");
oss.str(empty);
- iterator_type os_it04 = mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
string result4 = oss.str();
VERIFY( result4 == "7.200.000.000,00 \244");
@@ -88,14 +89,14 @@ void test01()
// test various fill strategies
oss.str(empty);
oss.width(20);
- iterator_type os_it10 = mon_put.put(oss.rdbuf(), true, oss, '*', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, '*', digits2);
string result10 = oss.str();
VERIFY( result10 == "***************-,01*");
oss.str(empty);
oss.width(20);
oss.setf(ios_base::internal);
- iterator_type os_it11 = mon_put.put(oss.rdbuf(), true, oss, '*', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, '*', digits2);
string result11 = oss.str();
VERIFY( result11 == "-,01****************");
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc
index 15efd377e00..5ccb9ba4afc 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc
@@ -1,6 +1,6 @@
// 2003-11-09 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,7 +37,7 @@ void test01()
ostringstream oss;
const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, ' ', amount);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', amount);
string result = oss.str();
VERIFY( result == "11" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
index b3defe8b279..6d3136c5467 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -63,12 +64,12 @@ void test02()
// test sign of more than one digit, say hong kong.
oss.str(empty);
- iterator_type os_it05 = mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
string result5 = oss.str();
VERIFY( result5 == "HK$7,200,000,000.00");
oss.str(empty);
- iterator_type os_it06 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits2);
string result6 = oss.str();
VERIFY( result6 == "(HKD 100,000,000,000.00)");
@@ -76,7 +77,7 @@ void test02()
oss.imbue(loc_c);
oss.str(empty);
const money_put<char>& mon_put2 = use_facet<money_put<char> >(oss.getloc());
- iterator_type os_it07 = mon_put2.put(oss.rdbuf(), true, oss, ' ', digits4);
+ mon_put2.put(oss.rdbuf(), true, oss, ' ', digits4);
string result7 = oss.str();
VERIFY( result7 == "1");
@@ -84,7 +85,7 @@ void test02()
oss.imbue(loc_hk);
oss.str(empty);
const money_put<char>& mon_put3 = use_facet<money_put<char> >(oss.getloc());
- iterator_type os_it08 = mon_put3.put(oss.rdbuf(), true, oss, ' ', digits4);
+ mon_put3.put(oss.rdbuf(), true, oss, ' ', digits4);
string result8 = oss.str();
VERIFY( result8 == "(HKD .01)");
@@ -92,7 +93,7 @@ void test02()
// test bunk input
oss.str(empty);
- iterator_type os_it09 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits3);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits3);
string result9 = oss.str();
VERIFY( result9 == "");
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
index 6f571fda828..462666f8bf5 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,12 +50,12 @@ void test03()
oss.imbue(loc_de);
const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
string result1 = oss.str();
VERIFY( result1 == "7.200.000.000,00 ");
oss.str(empty);
- iterator_type os_it02 = mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
string result2 = oss.str();
VERIFY( result2 == "7.200.000.000,00 ");
@@ -65,12 +66,12 @@ void test03()
oss.setf(ios_base::showbase);
oss.str(empty);
- iterator_type os_it03 = mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, ' ', digits1);
string result3 = oss.str();
VERIFY( result3 == "7.200.000.000,00 EUR ");
oss.str(empty);
- iterator_type os_it04 = mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
string result4 = oss.str();
VERIFY( result4 == "7.200.000.000,00 \244");
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
index 1fac6ea40a5..e54035891c5 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "es_ES" }
// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
// Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
index 870359c0af3..3b13bdc28d3 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
index 9970f416802..b160fb72a92 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
index 1fceb279971..71f35abd181 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,12 +54,12 @@ void test01()
const money_put<wchar_t>& mon_put =
use_facet<money_put<wchar_t> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
wstring result1 = oss.str();
VERIFY( result1 == L"7.200.000.000,00 " );
oss.str(empty);
- iterator_type os_it02 = mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
wstring result2 = oss.str();
VERIFY( result2 == L"7.200.000.000,00 " );
@@ -69,12 +70,12 @@ void test01()
oss.setf(ios_base::showbase);
oss.str(empty);
- iterator_type os_it03 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
wstring result3 = oss.str();
VERIFY( result3 == L"7.200.000.000,00 EUR " );
oss.str(empty);
- iterator_type os_it04 = mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
wstring result4 = oss.str();
VERIFY( result4 == L"7.200.000.000,00 \x20ac" );
@@ -89,14 +90,14 @@ void test01()
// test various fill strategies
oss.str(empty);
oss.width(20);
- iterator_type os_it10 = mon_put.put(oss.rdbuf(), true, oss, L'*', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, L'*', digits2);
wstring result10 = oss.str();
VERIFY( result10 == L"***************-,01*" );
oss.str(empty);
oss.width(20);
oss.setf(ios_base::internal);
- iterator_type os_it11 = mon_put.put(oss.rdbuf(), true, oss, L'*', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, L'*', digits2);
wstring result11 = oss.str();
VERIFY( result11 == L"-,01****************" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
index fd8bcf517e1..cd430a9e1bd 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
@@ -1,6 +1,6 @@
// 2003-11-09 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2003, 2004, 2009 Free Software Foundation
+// Copyright (C) 2003, 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,7 +38,7 @@ void test01()
const money_put<wchar_t>& mon_put =
use_facet<money_put<wchar_t> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, L' ', amount);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', amount);
wstring result = oss.str();
VERIFY( result == L"11" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
index 33f7727458b..84331bd9254 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -64,12 +65,12 @@ void test02()
// test sign of more than one digit, say hong kong.
oss.str(empty);
- iterator_type os_it05 = mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
wstring result5 = oss.str();
VERIFY( result5 == L"HK$7,200,000,000.00" );
oss.str(empty);
- iterator_type os_it06 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits2);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits2);
wstring result6 = oss.str();
VERIFY( result6 == L"(HKD 100,000,000,000.00)" );
@@ -78,7 +79,7 @@ void test02()
oss.str(empty);
const money_put<wchar_t>& mon_put2 =
use_facet<money_put<wchar_t> >(oss.getloc());
- iterator_type os_it07 = mon_put2.put(oss.rdbuf(), true, oss, L' ', digits4);
+ mon_put2.put(oss.rdbuf(), true, oss, L' ', digits4);
wstring result7 = oss.str();
VERIFY( result7 == L"1" );
@@ -87,7 +88,7 @@ void test02()
oss.str(empty);
const money_put<wchar_t>& mon_put3 =
use_facet<money_put<wchar_t> >(oss.getloc());
- iterator_type os_it08 = mon_put3.put(oss.rdbuf(), true, oss, L' ', digits4);
+ mon_put3.put(oss.rdbuf(), true, oss, L' ', digits4);
wstring result8 = oss.str();
VERIFY( result8 == L"(HKD .01)" );
@@ -95,7 +96,7 @@ void test02()
// test bunk input
oss.str(empty);
- iterator_type os_it09 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits3);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits3);
wstring result9 = oss.str();
VERIFY( result9 == L"" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
index a0fbcda9e09..19921bf5d7e 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -50,12 +51,12 @@ void test03()
const money_put<wchar_t>& mon_put =
use_facet<money_put<wchar_t> >(oss.getloc());
- iterator_type os_it01 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
wstring result1 = oss.str();
VERIFY( result1 == L"7.200.000.000,00 " );
oss.str(empty);
- iterator_type os_it02 = mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
wstring result2 = oss.str();
VERIFY( result2 == L"7.200.000.000,00 " );
@@ -66,12 +67,12 @@ void test03()
oss.setf(ios_base::showbase);
oss.str(empty);
- iterator_type os_it03 = mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), true, oss, L' ', digits1);
wstring result3 = oss.str();
VERIFY( result3 == L"7.200.000.000,00 EUR " );
oss.str(empty);
- iterator_type os_it04 = mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
+ mon_put.put(oss.rdbuf(), false, oss, L' ', digits1);
wstring result4 = oss.str();
VERIFY( result4 == L"7.200.000.000,00 \x20ac" );
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
index 870359c0af3..3b13bdc28d3 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
index 9970f416802..b160fb72a92 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE@euro" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc
index 49eb21c0f92..7f567f5aa21 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// 2009-07-18 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc
index fac61ec3d58..fd28b63fbeb 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc
@@ -1,6 +1,6 @@
// 2001-08-23 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,6 +59,8 @@ void test01()
pattern neg1 = monp_c_t.neg_format();
pattern pos2 = monp_c_f.pos_format();
pattern neg2 = monp_c_f.neg_format();
+ neg1 = neg1;
+ neg2 = neg2;
VERIFY( q1 == '.' );
VERIFY( q3 == '.' );
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
index 04ca53ffeb4..ed2aeda1ca5 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-23 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
index e59d7eb7120..2c456609f4e 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc
index bb862deda25..eb5e50684be 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 2001-08-23 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,6 +59,8 @@ void test01()
pattern neg1 = monp_c_t.neg_format();
pattern pos2 = monp_c_f.pos_format();
pattern neg2 = monp_c_f.neg_format();
+ neg1 = neg1;
+ neg2 = neg2;
VERIFY( q1 == L'.' );
VERIFY( q3 == L'.' );
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc
index e1a18fc45eb..52fd2d90732 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-23 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc
index 779ee61a8d6..b9961e49346 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
index e59d7eb7120..d4ff1a41eb5 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
index 70af8330382..e212889199d 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-24 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
index dd849c6fca8..7c89c5887ab 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -63,7 +63,7 @@ void test01()
// bool, simple
iss.str("1");
iterator_type os_it00 = iss.rdbuf();
- iterator_type os_it01 = ng.get(os_it00, 0, iss, err, b1);
+ ng.get(os_it00, 0, iss, err, b1);
VERIFY( b1 == true );
VERIFY( err & ios_base::eofbit );
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
index 20c9d1547a9..f3e9fc3231f 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
index c2e5a21fc83..d8c3fe55743 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
index ad9691dad77..1ebc0dd8470 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
index e9d9d852490..b0673ab03ab 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-12-19 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
index 870359c0af3..b8776a3285c 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
index 9970f416802..6f937a97216 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
index d36f5caf019..0c6f450cbd0 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -63,7 +63,7 @@ void test01()
// bool, simple
iss.str(L"1");
iterator_type os_it00 = iss.rdbuf();
- iterator_type os_it01 = ng.get(os_it00, 0, iss, err, b1);
+ ng.get(os_it00, 0, iss, err, b1);
VERIFY( b1 == true );
VERIFY( err & ios_base::eofbit );
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
index 16ab99e50da..387e31e8604 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
index 7873703077f..dd3a876e157 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
index 113b53039cc..e134f7ec47f 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc
index a3eb30f1fce..134349f0182 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-12-19 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
index 870359c0af3..b8776a3285c 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
index 9970f416802..6f937a97216 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
index 1398aeeaa72..602baf5d7ed 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -61,7 +62,7 @@ void test01()
// bool, simple
iterator_type os_it00 = oss.rdbuf();
- iterator_type os_it01 = np.put(os_it00, oss, '+', b1);
+ np.put(os_it00, oss, '+', b1);
result1 = oss.str();
VERIFY( result1 == "1" );
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
index 714a8e8d60c..fe649a7b03f 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
@@ -1,6 +1,6 @@
// 2004-04-30 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,11 +19,13 @@
// 22.2.2.2.1 num_put members
-// On Solaris 10 x86, this test crashes in libc. Inside libstdc++,
-// we call sprintf like so:
+// On Solaris 9/x86, 32-bit Solaris 10/x86 and 64-bit Solaris 10/SPARC, this
+// test crashes in libc. Inside libstdc++, we call sprintf like so:
// sprintf (buffer, "%.*f", 1000, 1.0)
// which crashes.
-// { dg-do run { xfail { i?86*-*-solaris2.10 } } }
+// { dg-xfail-run-if "" i?86-*-solaris2.9 }
+// { dg-xfail-run-if "" { i?86-*-solaris2.10 && ilp32 } }
+// { dg-xfail-run-if "" { sparc*-sun-solaris2.10 && lp64 } }
#include <locale>
#include <sstream>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
index 1bbfa48e1c8..e00655bfc77 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2005-04-08 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc
index c4f5399a306..667ff1a48be 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2005-04-17 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
index c12999f8cca..d8973fe8512 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
index bb31bc86ea3..d75a5edfbe7 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
index 50d75d018c8..7993691e916 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "es_ES" }
// Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
index 919810441c2..8ed81754e0d 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
index 2ddb54e9a1c..867992f7910 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
index 83da0d2802e..4b596d5b9e3 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -62,7 +62,7 @@ void test01()
// bool, simple
iterator_type os_it00 = oss.rdbuf();
- iterator_type os_it01 = np.put(os_it00, oss, L'+', b1);
+ np.put(os_it00, oss, L'+', b1);
result1 = oss.str();
VERIFY( result1 == L"1" );
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
index 552f049e61c..5b830154018 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
@@ -1,6 +1,6 @@
// 2004-04-30 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,11 +23,11 @@
#include <sstream>
#include <testsuite_hooks.h>
-// On Solaris 10 x86, this test crashes in libc. Inside libstdc++,
-// we call sprintf like so:
+// On Solaris 9 and 32-bit Solaris 10/x86, this test crashes in libc. Inside
+// libstdc++, we call sprintf like so:
// sprintf (buffer, "%.*f", 1000, 1.0)
// which crashes.
-// { dg-do run { xfail { i?86*-*-solaris2.10 } } }
+// { dg-do run { xfail { i?86-*-solaris2.9 || { i?86-*-solaris2.10 && ilp32 } } } }
// libstdc++/14220
void test01()
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
index c95b77715d8..61ac1a164d4 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2005-04-08 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc
index a04f581a6ca..2013986c80b 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2005-04-17 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
index 817088049d7..47ed26cd264 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
index eae420ae8c8..42fee14ba2a 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
index 919810441c2..bb6bec858be 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
index 2ddb54e9a1c..d85c72a974d 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
index 191ff3e6cf3..1b8e3ce2142 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
+// { dg-require-namedlocale "de_DE" }
// 2001-01-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
index 1c85cc0ca2c..b65134f5e85 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "it_IT" }
// 2001-01-24 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc
index 779ee61a8d6..cf1e4f850c6 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
index e59d7eb7120..4fb07877771 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
index 9901bba58bd..8b8d22ad60c 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
+// { dg-require-namedlocale "de_DE" }
// 2001-01-17 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc
index 779ee61a8d6..cf1e4f850c6 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
index e59d7eb7120..4fb07877771 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "is_IS" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
index 924d0820db6..168d0696263 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-01-24 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
index 8e6b02858c9..f8f6daa9e73 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
index be7fc089d18..ac0fccc321f 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
index 6d1c94e1fd6..191c11b165d 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS" }
// 2003-10-27 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
index 1446f6a156c..d0e5ca490d0 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc
index b02fefef596..5fbf074a4df 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_GB" }
// 2010-01-06 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc
index 5a31f33565a..f08cd6f0761 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const string str0 = "1";
- iter_type end0 = tg.get_date(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_date(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_year == 0 );
VERIFY( tm0.tm_mon == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
index 012b51ba842..74d637f5855 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS" }
// 2003-10-27 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
index 97ef5cac8fb..bb6d72b081b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc
index 2f4980a234c..35c21d4b14c 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_GB" }
// 2010-01-06 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
index f2a23e753f5..7346380cdfb 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "zh_TW" }
// 2003-12-17 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc
index 194e1505901..9110884fae9 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const wstring str0 = L"1";
- iter_type end0 = tg.get_date(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_date(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_year == 0 );
VERIFY( tm0.tm_mon == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
index c10bcbc9c50..dc117a37abb 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc
index 64b0a2e6b21..c1966fe4b95 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const string str0 = "S";
- iter_type end0 = tg.get_monthname(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_monthname(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_mon == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
index e52b2d0fb53..89ed391dd50 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc
index 5b48a30f88a..192d19c945b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const wstring str0 = L"S";
- iter_type end0 = tg.get_monthname(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_monthname(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_mon == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
index 9605e9990dd..69cf0d5dcaa 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
index 63b53a000a4..0df532247af 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc
index f0808bf8a88..b099b6e7ba4 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const string str0 = "1";
- iter_type end0 = tg.get_time(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_time(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_sec == 0 );
VERIFY( tm0.tm_min == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
index 089dff76271..ad8a468c545 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
index 2dc9b18bd7f..72946612bc3 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc
index b06ccf6ffb8..ffce43218cd 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const wstring str0 = L"1";
- iter_type end0 = tg.get_time(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_time(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_sec == 0 );
VERIFY( tm0.tm_min == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
index de99ac3eb35..1b1136987b6 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
index e237dcccbe9..7316cc454d0 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ru_RU.ISO-8859-5" }
// Copyright (C) 2010 Free Software Foundation
//
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
index cda8df142f3..1c079a40017 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ru_RU.UTF8" }
// 2010-01-05 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc
index 1583f107d6d..4157a08b560 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const string str0 = "T";
- iter_type end0 = tg.get_weekday(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_weekday(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm1.tm_wday == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
index cff6064c43d..8f116717b17 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
index f4f92d37919..a4edc45a82e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
index 4fa295f9a80..dbab614d165 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc
index 29de6a26d59..02664bf0b3d 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const wstring str0 = L"T";
- iter_type end0 = tg.get_weekday(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_weekday(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm1.tm_wday == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
index cff6064c43d..bcd8f51d608 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
index f4f92d37919..610c7dbf283 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc
index 0f6e5a92a04..f3a47bf87b5 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const string str0 = "1";
- iter_type end0 = tg.get_year(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_year(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_year == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
index 3e3f94c8066..872603ace32 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
index dc35946ebea..45dda12bd89 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc
index 6c5cbf194ce..c932bebdb64 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2006-06-16 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ void test01()
const time_get_type& tg = use_facet<time_get_type>(iss.getloc());
const wstring str0 = L"1";
- iter_type end0 = tg.get_year(str0.begin(), str0.end(), iss, err, &tm0);
+ tg.get_year(str0.begin(), str0.end(), iss, err, &tm0);
VERIFY( err == (failbit | eofbit) );
VERIFY( tm0.tm_year == 0 );
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
index 3e3f94c8066..872603ace32 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
index dc35946ebea..45dda12bd89 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
index 8fed3437a57..32388cc6f0b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
@@ -1,6 +1,6 @@
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,27 +48,27 @@ void test01()
// put(iter_type s, ios_base& str, char_type fill, const tm* t,
// char format, char modifier = 0) const;
oss.str(empty);
- iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
string result1 = oss.str();
VERIFY( result1 == "Sun" );
oss.str(empty);
- iterator_type os_it21 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
string result21 = oss.str(); // "04/04/71"
VERIFY( result21 == "04/04/71" );
oss.str(empty);
- iterator_type os_it22 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
string result22 = oss.str(); // "12:00:00"
VERIFY( result22 == "12:00:00" );
oss.str(empty);
- iterator_type os_it31 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
string result31 = oss.str(); // "04/04/71"
VERIFY( result31 == "04/04/71" );
oss.str(empty);
- iterator_type os_it32 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
string result32 = oss.str(); // "12:00:00"
VERIFY( result32 == "12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
index 7de5471495f..3c6ad92e483 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,7 +47,7 @@ void test01()
bool test __attribute__((unused)) = true;
ostringstream stream;
- time_t tt = time(NULL);
+ time_t tt = time(0);
const char* fmt = "%c";
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
index 54d4cde7cef..3d19d36c20b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,7 +46,7 @@ void test03()
bool test __attribute__((unused)) = true;
ostringstream stream;
- time_t tt = time(NULL);
+ time_t tt = time(0);
const char* fmt = "%c";
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
index 318c05dc2d3..a2043f10bb0 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ta_IN" }
// 2004-08-25 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,7 +47,7 @@ void test01()
const time_put<char>& tim_put =
use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'c');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'c');
string result1 = oss.str();
char time_buffer[128];
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
index 7c65ad9985b..fa5053fc159 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -47,27 +47,27 @@ void test02()
oss.imbue(loc_de);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it02 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
string result2 = oss.str();
VERIFY( result2 == "Son" || result2 == "So" );
oss.str(empty); // "%d.%m.%Y"
- iterator_type os_it23 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
string result23 = oss.str(); // "04.04.1971"
VERIFY( result23 == "04.04.1971" );
oss.str(empty); // "%T"
- iterator_type os_it24 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
string result24 = oss.str(); // "12:00:00"
VERIFY( result24 == "12:00:00" );
oss.str(empty);
- iterator_type os_it33 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
string result33 = oss.str(); // "04.04.1971"
VERIFY( result33 == "04.04.1971" );
oss.str(empty);
- iterator_type os_it34 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
string result34 = oss.str(); // "12:00:00"
VERIFY( result34 == "12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
index c71b5e46d26..d4f04c29af9 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -47,27 +47,27 @@ void test03()
oss.imbue(loc_hk);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it03 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
string result3 = oss.str();
VERIFY( result3 == "Sun" );
oss.str(empty); // "%A, %B %d, %Y"
- iterator_type os_it25 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
string result25 = oss.str(); // "Sunday, April 04, 1971"
VERIFY( result25 == "Sunday, April 04, 1971" );
oss.str(empty); // "%I:%M:%S %Z"
- iterator_type os_it26 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
string result26 = oss.str(); // "12:00:00 CET" or whatever timezone
VERIFY( result26.find("12:00:00") != string::npos );
oss.str(empty);
- iterator_type os_it35 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
string result35 = oss.str(); // "Sunday, April 04, 1971"
VERIFY( result35 == "Sunday, April 04, 1971" );
oss.str(empty);
- iterator_type os_it36 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
string result36 = oss.str(); // "12:00:00 CET"
VERIFY( result36.find("12:00:00") != string::npos );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
index 196c1aa9088..a433cda866d 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "es_ES" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,27 +47,27 @@ void test04()
ostringstream oss;
oss.imbue(loc_es);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it04 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
string result4 = oss.str();
VERIFY( result4 == "dom" );
oss.str(empty); // "%d/%m/%y"
- iterator_type os_it27 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
string result27 = oss.str(); // "04/04/71"
VERIFY( result27 == "04/04/71" );
oss.str(empty); // "%T"
- iterator_type os_it28 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
string result28 = oss.str(); // "12:00:00"
VERIFY( result28 == "12:00:00" );
oss.str(empty);
- iterator_type os_it37 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
string result37 = oss.str(); // "04/04/71"
VERIFY( result37 == "04/04/71" );
oss.str(empty);
- iterator_type os_it38 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
string result38 = oss.str(); // "12:00:00"
VERIFY( result38 == "12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
index 2f9c6a6bc64..96ce947c2af 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
@@ -1,6 +1,6 @@
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,13 +48,12 @@ void test05()
// 2
oss.str(empty);
- iterator_type os_it05 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
string result5 = oss.str();
VERIFY( result5 == "Sunday, the second of April");
- iterator_type os_it06 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date_ex,
- date_ex + traits::length(date_ex));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date_ex));
string result6 = oss.str();
VERIFY( result6 != result5 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
index ff3938cc9e4..1dc53e32725 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -50,13 +50,12 @@ void test06()
oss.imbue(loc_de);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it07 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
string result7 = oss.str();
VERIFY( result7 == "Sonntag, the second of April");
- iterator_type os_it08 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date_ex,
- date_ex + traits::length(date_ex));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date_ex));
string result8 = oss.str();
VERIFY( result8 != result7 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
index 93b139d95d1..595fadf785d 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -50,13 +50,12 @@ void test07()
oss.imbue(loc_hk);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it09 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
string result9 = oss.str();
VERIFY( result9 == "Sunday, the second of April");
- iterator_type os_it10 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date_ex,
- date_ex + traits::length(date_ex));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date_ex));
string result10 = oss.str();
VERIFY( result10 != result9 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
index 2834954616a..3274e3532fd 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR@euro" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -49,13 +49,12 @@ void test08()
ostringstream oss;
oss.imbue(loc_fr);
const time_put<char>& tim_put = use_facet<time_put<char> >(oss.getloc());
- iterator_type os_it11 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
string result11 = oss.str();
VERIFY( result11 == "dimanche, the second of avril");
- iterator_type os_it12 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
- date_ex,
- date_ex + traits::length(date_ex));
+ tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date_ex));
string result12 = oss.str();
VERIFY( result12 != result11 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
index ea40ae998e9..95c4b684490 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "es_ES" }
// Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
index 5c6a8f2a18c..495dcda9f47 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
+// { dg-require-namedlocale "fr_FR@euro" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
index 44776e518d8..4128ef40597 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
+// { dg-require-namedlocale "fr_FR@euro" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
index 2ed02a5daa9..23259753199 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,34 +43,35 @@ void test01()
const wstring empty;
wostringstream oss;
oss.imbue(loc_c);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
// 1
// iter_type
// put(iter_type s, ios_base& str, char_type fill, const tm* t,
// char format, char modifier = 0) const;
oss.str(empty);
- iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
wstring result1 = oss.str();
VERIFY( result1 == L"Sun" );
oss.str(empty);
- iterator_type os_it21 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
wstring result21 = oss.str(); // "04/04/71"
VERIFY( result21 == L"04/04/71" );
oss.str(empty);
- iterator_type os_it22 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
wstring result22 = oss.str(); // "12:00:00"
VERIFY( result22 == L"12:00:00" );
oss.str(empty);
- iterator_type os_it31 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
wstring result31 = oss.str(); // "04/04/71"
VERIFY( result31 == L"04/04/71" );
oss.str(empty);
- iterator_type os_it32 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
wstring result32 = oss.str(); // "12:00:00"
VERIFY( result32 == L"12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
index 159b8f193bd..1298fa9e5e9 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -45,7 +45,7 @@ void test01()
bool test __attribute__((unused)) = true;
wostringstream stream;
- time_t tt = time(NULL);
+ time_t tt = time(0);
const wchar_t* fmt = L"%c";
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
index 515c998c2b1..c231354743e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,7 +42,7 @@ void test02()
locale loc;
const tp_type& tp = use_facet<tp_type>(loc);
- time_t tt = time(NULL);
+ time_t tt = time(0);
wostringstream stream;
tp.put(tp_type::iter_type(stream), stream, stream.fill(),
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
index 8127c75ea47..2ec4225ba9c 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -44,7 +44,7 @@ void test03()
bool test __attribute__((unused)) = true;
wostringstream stream;
- time_t tt = time(NULL);
+ time_t tt = time(0);
const wchar_t* fmt = L"%c";
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
index d4f90468869..2690a0b3c88 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "ta_IN" }
// 2004-08-25 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,7 +47,7 @@ void test01()
const time_put<wchar_t>& tim_put =
use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'c');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'c');
wstring result1 = oss.str();
wchar_t time_buffer[128];
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
index c8cc42c2cf7..d185fc47517 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,29 +45,30 @@ void test02()
const wstring empty;
wostringstream oss;
oss.imbue(loc_de);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it02 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
wstring result2 = oss.str();
VERIFY( result2 == L"Son" || result2 == L"So" );
oss.str(empty); // "%d.%m.%Y"
- iterator_type os_it23 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
wstring result23 = oss.str(); // "04.04.1971"
VERIFY( result23 == L"04.04.1971" );
oss.str(empty); // "%T"
- iterator_type os_it24 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
wstring result24 = oss.str(); // "12:00:00"
VERIFY( result24 == L"12:00:00" );
oss.str(empty);
- iterator_type os_it33 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
wstring result33 = oss.str(); // "04.04.1971"
VERIFY( result33 == L"04.04.1971" );
oss.str(empty);
- iterator_type os_it34 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
wstring result34 = oss.str(); // "12:00:00"
VERIFY( result34 == L"12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
index eec2fa7a358..732b42a3dd6 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,32 +45,32 @@ void test03()
const wstring empty;
wostringstream oss;
oss.imbue(loc_hk);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it03 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
wstring result3 = oss.str();
VERIFY( result3 == L"Sun" );
oss.str(empty); // "%A, %B %d, %Y"
- iterator_type os_it25 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
wstring result25 = oss.str(); // "Sunday, April 04, 1971"
VERIFY( result25 == L"Sunday, April 04, 1971" );
oss.str(empty); // "%I:%M:%S %Z"
- iterator_type os_it26 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
wstring result26 = oss.str(); // "12:00:00 CET" or whatever timezone
VERIFY( result26.find(L"12:00:00") != wstring::npos );
oss.str(empty);
- iterator_type os_it35 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
wstring result35 = oss.str(); // "Sunday, April 04, 1971"
VERIFY( result35 == L"Sunday, April 04, 1971" );
oss.str(empty);
- iterator_type os_it36 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
wstring result36 = oss.str(); // "12:00:00 CET"
VERIFY( result36.find(L"12:00:00") != wstring::npos );
-
}
int main()
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
index e56f14ebbd5..51a0ccbb4cd 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
@@ -1,8 +1,9 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "es_ES" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,28 +46,30 @@ void test04()
const wstring empty;
wostringstream oss;
oss.imbue(loc_es);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it04 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
+
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'a');
wstring result4 = oss.str();
VERIFY( result4 == L"dom" );
oss.str(empty); // "%d/%m/%y"
- iterator_type os_it27 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x');
wstring result27 = oss.str(); // "04/04/71"
VERIFY( result27 == L"04/04/71" );
oss.str(empty); // "%T"
- iterator_type os_it28 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X');
wstring result28 = oss.str(); // "12:00:00"
VERIFY( result28 == L"12:00:00" );
oss.str(empty);
- iterator_type os_it37 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'x', 'E');
wstring result37 = oss.str(); // "04/04/71"
VERIFY( result37 == L"04/04/71" );
oss.str(empty);
- iterator_type os_it38 = tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1, 'X', 'E');
wstring result38 = oss.str(); // "12:00:00"
VERIFY( result38 == L"12:00:00" );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
index 77f7798abe4..1a355e0a514 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
@@ -1,6 +1,6 @@
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -46,17 +46,17 @@ void test05()
const wstring empty;
wostringstream oss;
oss.imbue(loc_c);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
// 2
oss.str(empty);
- iterator_type os_it05 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date, date + traits::length(date));
wstring result5 = oss.str();
VERIFY( result5 == L"Sunday, the second of April");
- iterator_type os_it06 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date_ex,
- date_ex + traits::length(date_ex));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date_ex, date_ex + traits::length(date_ex));
wstring result6 = oss.str();
VERIFY( result6 != result5 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
index 91a68a05c03..3b18f2d7254 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,14 +48,15 @@ void test06()
const wstring empty;
wostringstream oss;
oss.imbue(loc_de);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it07 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date, date + traits::length(date));
wstring result7 = oss.str();
VERIFY( result7 == L"Sonntag, the second of April");
- iterator_type os_it08 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date_ex, date_ex + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date_ex, date_ex + traits::length(date));
wstring result8 = oss.str();
VERIFY( result8 != result7 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
index 439d6086ca0..7f08c1ff3be 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_HK" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,14 +48,15 @@ void test07()
const wstring empty;
wostringstream oss;
oss.imbue(loc_hk);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it09 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date, date + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date, date + traits::length(date));
wstring result9 = oss.str();
VERIFY( result9 == L"Sunday, the second of April");
- iterator_type os_it10 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date_ex, date_ex + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date_ex, date_ex + traits::length(date));
wstring result10 = oss.str();
VERIFY( result10 != result9 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
index b073e8b9287..1042afb7cd7 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR@euro" }
// 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,13 +48,15 @@ void test08()
const wstring empty;
wostringstream oss;
oss.imbue(loc_fr);
- const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
- iterator_type os_it11 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date, date + traits::length(date));
+ const time_put<wchar_t>& tim_put
+ = use_facet<time_put<wchar_t> >(oss.getloc());
+
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date, date + traits::length(date));
wstring result11 = oss.str();
VERIFY( result11 == L"dimanche, the second of avril");
- iterator_type os_it12 = tim_put.put(oss.rdbuf(), oss, L'*', &time1,
- date_ex, date_ex + traits::length(date));
+ tim_put.put(oss.rdbuf(), oss, L'*', &time1,
+ date_ex, date_ex + traits::length(date));
wstring result12 = oss.str();
VERIFY( result12 != result11 );
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
index 5c6a8f2a18c..495dcda9f47 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
@@ -1,4 +1,7 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
+// { dg-require-namedlocale "fr_FR@euro" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
index 44776e518d8..a99899938b6 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
@@ -1,4 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
+// { dg-require-namedlocale "en_HK" }
+// { dg-require-namedlocale "es_ES" }
+// { dg-require-namedlocale "fr_FR@euro" }
+// { dg-require-namedlocale "ja_JP.eucjp" }
// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/23_containers/array/range_access.cc b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
new file mode 100644
index 00000000000..77d036276fb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <array>
+
+void
+test01()
+{
+ std::array<int, 3> a{{1, 2, 3}};
+ std::begin(a);
+ std::end(a);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc
new file mode 100644
index 00000000000..9bd5bc9c065
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc
@@ -0,0 +1,30 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <array>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// libstdc++/41792
+template class std::array<__gnu_test::OverloadedAddress, 3>;
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/bitset/debug/invalidation/1.cc
index c9ba4d41f0a..c9ba4d41f0a 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc
index 089b10b83a6..475880888cc 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,16 +17,12 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <deque>
#include <testsuite_hooks.h>
#include <testsuite_rvalref.h>
using namespace __gnu_test;
-// According to n1771, there should be two resizes, with and without
-// parameter. We only have one at present, whose second parameter defaults
-// to a default-constructed object.
void
test01()
{
@@ -38,30 +34,17 @@ test01()
a.resize(98);
a.resize(99);
a.resize(100);
-#if ! defined _GLIBCXX_DEBUG && ! defined _GLIBCXX_PROFILE
- VERIFY( copycounter::copycount == 100 );
-#else
- VERIFY( copycounter::copycount == 100 + 4 );
-#endif
+ VERIFY( copycounter::copycount == 0 );
+
a.resize(99);
a.resize(0);
-#if ! defined _GLIBCXX_DEBUG && ! defined _GLIBCXX_PROFILE
- VERIFY( copycounter::copycount == 100 );
-#else
- VERIFY( copycounter::copycount == 100 + 6 );
-#endif
+ VERIFY( copycounter::copycount == 0 );
+
a.resize(100);
-#if ! defined _GLIBCXX_DEBUG && ! defined _GLIBCXX_PROFILE
- VERIFY( copycounter::copycount == 200 );
-#else
- VERIFY( copycounter::copycount == 200 + 7 );
-#endif
+ VERIFY( copycounter::copycount == 0 );
+
a.clear();
-#if ! defined _GLIBCXX_DEBUG && ! defined _GLIBCXX_PROFILE
- VERIFY( copycounter::copycount == 200 );
-#else
- VERIFY( copycounter::copycount == 200 + 7 );
-#endif
+ VERIFY( copycounter::copycount == 0 );
}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc
new file mode 100644
index 00000000000..229a0eb60bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <deque>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::deque<__gnu_test::NonCopyConstructible> d;
+ VERIFY( std::distance(d.begin(), d.end()) == 0 );
+
+ d.resize(1000);
+ VERIFY( std::distance(d.begin(), d.end()) == 1000 );
+ for(auto it = d.begin(); it != d.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc b/libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc
new file mode 100644
index 00000000000..0207fd7174c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <deque>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::deque<__gnu_test::NonCopyConstructible> d(1000);
+ VERIFY( std::distance(d.begin(), d.end()) == 1000 );
+ for(auto it = d.begin(); it != d.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc
new file mode 100644
index 00000000000..9a4d7d4394e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc
new file mode 100644
index 00000000000..32eda8794dc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign2<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc
new file mode 100644
index 00000000000..3d2b15e9431
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign3<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc
new file mode 100644
index 00000000000..7b6204158ad
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<__gnu_debug::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc
new file mode 100644
index 00000000000..6268951d732
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc
new file mode 100644
index 00000000000..3b8d77547fa
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc
new file mode 100644
index 00000000000..1187cf8b1e1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc
new file mode 100644
index 00000000000..7d7906d0511
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc
new file mode 100644
index 00000000000..38b4f554a40
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc
new file mode 100644
index 00000000000..5aa7efae6dd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc
new file mode 100644
index 00000000000..bd854ad87dd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc
new file mode 100644
index 00000000000..ff88760ad44
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/deque>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::deque<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/1.cc
index 6af6697ea1b..6af6697ea1b 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/deque/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/2.cc
index abbf47e93f4..abbf47e93f4 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/deque/invalidation/3.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/3.cc
index c5a936a5b29..c5a936a5b29 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/invalidation/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/3.cc
diff --git a/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/4.cc
index 342f5ead7c3..342f5ead7c3 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/4.cc
diff --git a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
new file mode 100644
index 00000000000..d996ed6d1b0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <deque>
+
+void
+test01()
+{
+ std::deque<int> d{1, 2, 3};
+ std::begin(d);
+ std::end(d);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
index 96be31cb62a..bd6ee636305 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1577 }
+// { dg-error "no matching" "" { target *-*-* } 1659 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
index 59d4e2f4158..21c9d4e4f3c 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1516 }
+// { dg-error "no matching" "" { target *-*-* } 1592 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
index 6208581b877..08f54d68018 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1516 }
+// { dg-error "no matching" "" { target *-*-* } 1592 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
index 7fb2479d02c..a5bd6065c1c 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1661 }
+// { dg-error "no matching" "" { target *-*-* } 1743 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..4685ae14299
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,30 @@
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// This file tests explicit instantiation of library containers
+
+#include <deque>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::deque<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/10.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/resize_size.cc
index 4e599dab6bc..e22af3cbc19 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/10.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/resize_size.cc
@@ -21,24 +21,17 @@
#include <forward_list>
#include <testsuite_hooks.h>
-
-struct NoCopyConstructor
-{
- NoCopyConstructor() : num(-1) { }
- NoCopyConstructor(const NoCopyConstructor&) = delete;
-
- operator int() { return num; }
-
-private:
- int num;
-};
+#include <testsuite_api.h>
void test01()
{
bool test __attribute__((unused)) = true;
- std::forward_list<NoCopyConstructor> fl(5);
- VERIFY( std::distance(fl.begin(), fl.end()) == 5 );
+ std::forward_list<__gnu_test::NonCopyConstructible> fl;
+ VERIFY( std::distance(fl.begin(), fl.end()) == 0 );
+
+ fl.resize(1000);
+ VERIFY( std::distance(fl.begin(), fl.end()) == 1000 );
for(auto it = fl.begin(); it != fl.end(); ++it)
VERIFY( *it == -1 );
}
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/cons_size.cc
index 985f592e602..3d07f672089 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/cons_size.cc
@@ -21,27 +21,14 @@
#include <forward_list>
#include <testsuite_hooks.h>
-
-struct NoCopyConstructor
-{
- NoCopyConstructor() : num(-1) { }
- NoCopyConstructor(const NoCopyConstructor&) = delete;
-
- operator int() { return num; }
-
-private:
- int num;
-};
+#include <testsuite_api.h>
void test01()
{
bool test __attribute__((unused)) = true;
- std::forward_list<NoCopyConstructor> fl;
- VERIFY( std::distance(fl.begin(), fl.end()) == 0 );
-
- fl.resize(10);
- VERIFY( std::distance(fl.begin(), fl.end()) == 10 );
+ std::forward_list<__gnu_test::NonCopyConstructible> fl(1000);
+ VERIFY( std::distance(fl.begin(), fl.end()) == 1000 );
for(auto it = fl.begin(); it != fl.end(); ++it)
VERIFY( *it == -1 );
}
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc
new file mode 100644
index 00000000000..5b959209263
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc
@@ -0,0 +1,94 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-08-11 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <forward_list>
+#include <testsuite_hooks.h>
+
+// 23.3.3.5 forward_list operations [forwardlist.ops]
+
+// Used to cause many Valgrind errors: LWG 526-type situation.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::forward_list<int> fl1;
+
+ fl1.push_front(1);
+ fl1.push_front(2);
+ fl1.push_front(3);
+ fl1.push_front(4);
+ fl1.push_front(1);
+
+ fl1.remove(*fl1.begin());
+
+ VERIFY( std::distance(fl1.begin(), fl1.end()) == 3 );
+
+ auto it1 = fl1.begin();
+
+ VERIFY( *it1 == 4 );
+ ++it1;
+ VERIFY( *it1 == 3 );
+ ++it1;
+ VERIFY( *it1 == 2 );
+
+ std::forward_list<int> fl2;
+
+ fl2.push_front(3);
+ fl2.push_front(3);
+ fl2.push_front(3);
+ fl2.push_front(3);
+ fl2.push_front(3);
+
+ auto it2 = fl2.begin();
+ ++it2;
+ ++it2;
+
+ fl2.remove(*it2);
+
+ VERIFY( std::distance(fl2.begin(), fl2.end()) == 0 );
+
+ std::forward_list<int> fl3;
+
+ fl3.push_front(1);
+ fl3.push_front(2);
+ fl3.push_front(3);
+ fl3.push_front(3);
+ fl3.push_front(3);
+
+ auto it3 = fl3.begin();
+ ++it3;
+ ++it3;
+
+ fl3.remove(*it3);
+
+ VERIFY( std::distance(fl3.begin(), fl3.end()) == 2 );
+
+ it3 = fl3.begin();
+ VERIFY( *it3 == 2 );
+ ++it3;
+ VERIFY( *it3 == 1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
new file mode 100644
index 00000000000..378cd9f0b1e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <forward_list>
+
+void
+test01()
+{
+ std::forward_list<int> fl{1, 2, 3};
+ std::begin(fl);
+ std::end(fl);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
index 8d72db59c8b..aa0f3e07def 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1194 }
+// { dg-error "no matching" "" { target *-*-* } 1198 }
// { dg-excess-errors "" }
// Copyright (C) 2009, 2010 Free Software Foundation
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
index 5f5ac2c7713..3975b051611 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1194 }
+// { dg-error "no matching" "" { target *-*-* } 1198 }
// { dg-excess-errors "" }
// Copyright (C) 2009, 2010 Free Software Foundation
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
index 340a6be65e3..0b0471c8cc9 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1194 }
+// { dg-error "no matching" "" { target *-*-* } 1198 }
// { dg-excess-errors "" }
// Copyright (C) 2009, 2010 Free Software Foundation
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
index 1173dc1b697..849eb643e87 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// { dg-error "no matching" "" { target *-*-* } 1194 }
+// { dg-error "no matching" "" { target *-*-* } 1198 }
// { dg-excess-errors "" }
// Copyright (C) 2009, 2010 Free Software Foundation
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..11f15248f1a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// This file tests explicit instantiation of library containers
+
+#include <forward_list>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::forward_list<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
index 3c47ae204c1..5d9bf7e0a3f 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <array> // { dg-excess-errors "In file included from" }
+#include <array>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
index 89f850cc090..266874da23b 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <tuple> // { dg-excess-errors "In file included from" }
+#include <tuple>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
index 65f05e1e693..dc85bc50e92 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <unordered_map> // { dg-excess-errors "In file included from" }
+#include <unordered_map>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
index 3dabc3207be..ab22c39a6ba 100644
--- a/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <unordered_set> // { dg-excess-errors "In file included from" }
+#include <unordered_set>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/23_containers/list/23781.cc b/libstdc++-v3/testsuite/23_containers/list/23781.cc
index ca275bda5ad..7b291df798a 100644
--- a/libstdc++-v3/testsuite/23_containers/list/23781.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <list>
+#include <cstddef>
typedef std::list<int> list_type;
list_type::iterator it = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc
new file mode 100644
index 00000000000..06424c0a8c1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::list<__gnu_test::NonCopyConstructible> l;
+ VERIFY( std::distance(l.begin(), l.end()) == 0 );
+
+ l.resize(1000);
+ VERIFY( std::distance(l.begin(), l.end()) == 1000 );
+ for(auto it = l.begin(); it != l.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc b/libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc
new file mode 100644
index 00000000000..f59f520f928
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::list<__gnu_test::NonCopyConstructible> l(1000);
+ VERIFY( std::distance(l.begin(), l.end()) == 1000 );
+ for(auto it = l.begin(); it != l.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc
new file mode 100644
index 00000000000..e7b0e5cfe14
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc
new file mode 100644
index 00000000000..1bd6c2f9076
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign2<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc
new file mode 100644
index 00000000000..7a40d318911
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign3<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc
new file mode 100644
index 00000000000..bde7b923ee7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<__gnu_debug::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc
new file mode 100644
index 00000000000..cbd045571a1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc
new file mode 100644
index 00000000000..40fdf43b8b2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc
new file mode 100644
index 00000000000..5000f5a0793
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc
new file mode 100644
index 00000000000..29843ea43b5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc
new file mode 100644
index 00000000000..aa35b46cf85
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc
new file mode 100644
index 00000000000..dc84fdd584f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc
new file mode 100644
index 00000000000..aa49108386e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc
new file mode 100644
index 00000000000..ade2806881f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/list>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::list<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/1.cc
index 7198e2402f0..7198e2402f0 100644
--- a/libstdc++-v3/testsuite/23_containers/list/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/list/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
index 5872936bba9..5872936bba9 100644
--- a/libstdc++-v3/testsuite/23_containers/list/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/list/invalidation/3.cc b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
index 0d4844793b8..0d4844793b8 100644
--- a/libstdc++-v3/testsuite/23_containers/list/invalidation/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
diff --git a/libstdc++-v3/testsuite/23_containers/list/invalidation/4.cc b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
index a5c9219a2be..a5c9219a2be 100644
--- a/libstdc++-v3/testsuite/23_containers/list/invalidation/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
diff --git a/libstdc++-v3/testsuite/23_containers/list/pthread1.cc b/libstdc++-v3/testsuite/23_containers/list/pthread1.cc
index fcbb039dce3..00dc817b152 100644
--- a/libstdc++-v3/testsuite/23_containers/list/pthread1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/pthread1.cc
@@ -1,6 +1,6 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,9 +45,9 @@ class task_queue
public:
task_queue ()
{
- pthread_mutex_init (&fooLock, NULL);
- pthread_cond_init (&fooCond1, NULL);
- pthread_cond_init (&fooCond2, NULL);
+ pthread_mutex_init (&fooLock, 0);
+ pthread_cond_init (&fooCond1, 0);
+ pthread_cond_init (&fooCond2, 0);
}
~task_queue ()
{
@@ -115,14 +115,14 @@ main()
for (int i = 0; i < thread_pairs; i++)
{
tq[i] = new task_queue;
- pthread_create (&prod[i], NULL, produce, static_cast<void*> (tq[i]));
- pthread_create (&cons[i], NULL, consume, static_cast<void*> (tq[i]));
+ pthread_create (&prod[i], 0, produce, static_cast<void*> (tq[i]));
+ pthread_create (&cons[i], 0, consume, static_cast<void*> (tq[i]));
}
for (int i = 0; i < thread_pairs; i++)
{
- pthread_join (prod[i], NULL);
- pthread_join (cons[i], NULL);
+ pthread_join (prod[i], 0);
+ pthread_join (cons[i], 0);
delete tq[i];
}
}
diff --git a/libstdc++-v3/testsuite/23_containers/list/pthread5.cc b/libstdc++-v3/testsuite/23_containers/list/pthread5.cc
index 57411eef3f0..4f464372124 100644
--- a/libstdc++-v3/testsuite/23_containers/list/pthread5.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/pthread5.cc
@@ -2,7 +2,7 @@
// Adpated from libstdc++/5464 submitted by jjessel@amadeus.net
// Jean-Francois JESSEL (Amadeus SAS Development)
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -99,7 +99,7 @@ main ()
#endif
pthread_attr_t tattr;
- int ret = pthread_attr_init (&tattr);
+ int ret __attribute__((unused)) = pthread_attr_init (&tattr);
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
ret = pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);
#endif
diff --git a/libstdc++-v3/testsuite/23_containers/list/range_access.cc b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
new file mode 100644
index 00000000000..afe148d9e66
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <list>
+
+void
+test01()
+{
+ std::list<int> l{1, 2, 3};
+ std::begin(l);
+ std::end(l);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
index d41e1498069..2446157597f 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1410 }
+// { dg-error "no matching" "" { target *-*-* } 1478 }
// { dg-excess-errors "" }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
index 01d9135c860..cbac8e80cbf 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
@@ -1,6 +1,6 @@
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1379 }
+// { dg-error "no matching" "" { target *-*-* } 1434 }
// { dg-excess-errors "" }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
index c13f6565df4..232bd042ddb 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1379 }
+// { dg-error "no matching" "" { target *-*-* } 1434 }
// { dg-excess-errors "" }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
index 262a7a15f94..aefb1f583fd 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1379 }
+// { dg-error "no matching" "" { target *-*-* } 1434 }
// { dg-excess-errors "" }
#include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..7ad82a365c0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::list<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/map/23781.cc b/libstdc++-v3/testsuite/23_containers/map/23781.cc
index f7967693f79..e282c754667 100644
--- a/libstdc++-v3/testsuite/23_containers/map/23781.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <map>
+#include <cstddef>
std::map<int, int>::iterator it = NULL; // { dg-error "conversion" }
std::map<int, int>::const_iterator cit = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc
new file mode 100644
index 00000000000..72adcf42e38
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc
new file mode 100644
index 00000000000..a9cb0e300c3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc
new file mode 100644
index 00000000000..7f88827db77
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc
new file mode 100644
index 00000000000..ce2eccc3839
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc
new file mode 100644
index 00000000000..7b868a7aff6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc
new file mode 100644
index 00000000000..93c6c7ef51a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc
new file mode 100644
index 00000000000..2802a0de5bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc
new file mode 100644
index 00000000000..a68d601089b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/map/debug/invalidation/1.cc
index a421125278e..a421125278e 100644
--- a/libstdc++-v3/testsuite/23_containers/map/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/map/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc
index 85351da9ffb..85351da9ffb 100644
--- a/libstdc++-v3/testsuite/23_containers/map/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/map/dr130.cc b/libstdc++-v3/testsuite/23_containers/map/dr130.cc
index d7f3c2b0856..9186a621ea7 100644
--- a/libstdc++-v3/testsuite/23_containers/map/dr130.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/dr130.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2008-07-22 Edward Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,7 +34,7 @@ test01()
typedef map<int, int>::value_type value_type;
typedef pair<iterator, bool> insert_return_type;
- insert_return_type irt0 = m0.insert(value_type(1, 1));
+ m0.insert(value_type(1, 1));
insert_return_type irt1 = m0.insert(value_type(2, 2));
insert_return_type irt2 = m0.insert(value_type(3, 3));
@@ -58,7 +58,7 @@ test02()
typedef pair<iterator, bool> insert_return_type;
insert_return_type irt0 = m0.insert(value_type(1, 1));
- insert_return_type irt1 = m0.insert(value_type(2, 2));
+ m0.insert(value_type(2, 2));
insert_return_type irt2 = m0.insert(value_type(3, 3));
insert_return_type irt3 = m0.insert(value_type(4, 4));
diff --git a/libstdc++-v3/testsuite/23_containers/map/pthread6.cc b/libstdc++-v3/testsuite/23_containers/map/pthread6.cc
index 608527e8f08..38c20ed647f 100644
--- a/libstdc++-v3/testsuite/23_containers/map/pthread6.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/pthread6.cc
@@ -1,7 +1,7 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5444 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -78,10 +78,10 @@ main (void)
#endif
for (int i = 0; i < max_thread_count; i++)
- pthread_create (&tid[i], NULL, thread_main, 0);
+ pthread_create (&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join (tid[i], NULL);
+ pthread_join (tid[i], 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/23_containers/map/range_access.cc b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
new file mode 100644
index 00000000000..2fb7f4ac943
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <map>
+
+void
+test01()
+{
+ std::map<int, double> m{{1, 1.0}, {2, 2.0}, {3, 3.0}};
+ std::begin(m);
+ std::end(m);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..2a3700adde8
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,30 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::map<__gnu_test::OverloadedAddress,
+ __gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/23781.cc b/libstdc++-v3/testsuite/23_containers/multimap/23781.cc
index 912bb926b98..50ec929064e 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/23781.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <map>
+#include <cstddef>
std::multimap<int, int>::iterator it = NULL; // { dg-error "conversion" }
std::multimap<int, int>::const_iterator cit = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc
new file mode 100644
index 00000000000..13f5763fb84
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc
new file mode 100644
index 00000000000..9c389e199fb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc
new file mode 100644
index 00000000000..b5a5288f530
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc
new file mode 100644
index 00000000000..7c267f41831
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc
new file mode 100644
index 00000000000..879af771c82
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc
new file mode 100644
index 00000000000..883ff148a46
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc
new file mode 100644
index 00000000000..f75efb58b56
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc
new file mode 100644
index 00000000000..0e5102b74b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/1.cc
index 2ea2aabc979..2ea2aabc979 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc
index 756c951a00c..756c951a00c 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
new file mode 100644
index 00000000000..da4c77b4aca
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <map>
+
+void
+test01()
+{
+ std::multimap<int, double> mm{{1, 1.0}, {2, 2.0}, {3, 3.0}};
+ std::begin(mm);
+ std::end(mm);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..82bd4cda87b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,30 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::multimap<__gnu_test::OverloadedAddress,
+ __gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/23781.cc b/libstdc++-v3/testsuite/23_containers/multiset/23781.cc
index 80d13370345..6b0bacf955b 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/23781.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <set>
+#include <cstddef>
std::multiset<int>::iterator it = NULL; // { dg-error "conversion" }
std::multiset<int>::const_iterator cit = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc
new file mode 100644
index 00000000000..04b0e33f9de
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc
new file mode 100644
index 00000000000..d7dd965d30d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc
new file mode 100644
index 00000000000..cc3e1471d11
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc
new file mode 100644
index 00000000000..181f4f902fc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc
new file mode 100644
index 00000000000..32f20a90b76
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc
new file mode 100644
index 00000000000..699f0dd4710
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc
new file mode 100644
index 00000000000..92f864d6071
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc
new file mode 100644
index 00000000000..a0881075fdb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/1.cc
index 5b81b1eead2..5b81b1eead2 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc
index be4eeb42df2..be4eeb42df2 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
new file mode 100644
index 00000000000..b8e3accce6c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <set>
+
+void
+test01()
+{
+ std::multiset<int> ms{1, 2, 3};
+ std::begin(ms);
+ std::end(ms);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..d55064cd1d3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::multiset<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc b/libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc
index 416468617f1..0c21b25f900 100644
--- a/libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc
+++ b/libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc
@@ -1,6 +1,6 @@
// 2002-06-28 pme
-// Copyright (C) 2002, 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,12 +28,10 @@ test03()
{
int data[] = {1, 2, 3};
std::priority_queue<int> pq;
- std::size_t size = pq.size();
for (int i = 0; i < 3; ++i)
pq.push(data[i]);
- size = pq.size();
pq.top();
for (int i = 0; i < 2; ++i)
pq.pop();
diff --git a/libstdc++-v3/testsuite/23_containers/set/23781.cc b/libstdc++-v3/testsuite/23_containers/set/23781.cc
index 7a2a2bc7240..b47b748ec8d 100644
--- a/libstdc++-v3/testsuite/23_containers/set/23781.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <set>
+#include <cstddef>
std::set<int>::iterator it = NULL; // { dg-error "conversion" }
std::set<int>::const_iterator cit = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc
new file mode 100644
index 00000000000..424eb8be20e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc
new file mode 100644
index 00000000000..d5819925b50
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc
new file mode 100644
index 00000000000..1cc7dd2345d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc
new file mode 100644
index 00000000000..d464aabfbab
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc
new file mode 100644
index 00000000000..3192ff9594f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc
new file mode 100644
index 00000000000..d0d16cfb9dd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc
new file mode 100644
index 00000000000..9eaf6f82bed
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc
new file mode 100644
index 00000000000..c2424d2a370
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/set/debug/invalidation/1.cc
index 6d5a0f50bfb..6d5a0f50bfb 100644
--- a/libstdc++-v3/testsuite/23_containers/set/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/set/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc
index 2539b03dd18..2539b03dd18 100644
--- a/libstdc++-v3/testsuite/23_containers/set/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/set/dr130.cc b/libstdc++-v3/testsuite/23_containers/set/dr130.cc
index 1904dcdc0bd..1dac5628d37 100644
--- a/libstdc++-v3/testsuite/23_containers/set/dr130.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/dr130.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// 2008-07-22 Edward Smith-Rowland <3dw4rd@verizon.net>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +33,7 @@ test01()
typedef set<int>::const_iterator const_iterator;
typedef pair<iterator, bool> insert_return_type;
- insert_return_type irt0 = s0.insert(1);
+ s0.insert(1);
insert_return_type irt1 = s0.insert(2);
insert_return_type irt2 = s0.insert(3);
@@ -56,7 +56,7 @@ test02()
typedef pair<iterator, bool> insert_return_type;
insert_return_type irt0 = s0.insert(1);
- insert_return_type irt1 = s0.insert(2);
+ s0.insert(2);
insert_return_type irt2 = s0.insert(3);
insert_return_type irt3 = s0.insert(4);
diff --git a/libstdc++-v3/testsuite/23_containers/set/range_access.cc b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
new file mode 100644
index 00000000000..ffbda4e93fe
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <set>
+
+void
+test01()
+{
+ std::set<int> s{1, 2, 3};
+ std::begin(s);
+ std::end(s);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..2bbe9766722
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::set<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc
new file mode 100644
index 00000000000..31961f7ce94
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc
new file mode 100644
index 00000000000..560651a46cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc
new file mode 100644
index 00000000000..7d57272f1f0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc
new file mode 100644
index 00000000000..e37cab21aa9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc
new file mode 100644
index 00000000000..f3d06bf744b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc
new file mode 100644
index 00000000000..09d55e19056
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc
new file mode 100644
index 00000000000..41af7591772
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc
new file mode 100644
index 00000000000..6239431bbaf
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::unordered_map<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/dr1189.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc
index f89d5f19956..f89d5f19956 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/dr1189.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
new file mode 100644
index 00000000000..b41b6a5b3ee
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <unordered_map>
+
+void
+test01()
+{
+ std::unordered_map<int, double> um{{1, 1.0}, {2, 2.0}, {3, 3.0}};
+ std::begin(um);
+ std::end(um);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..37b57b3717a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+typedef __gnu_test::OverloadedAddress inst_type;
+typedef __gnu_test::OverloadedAddress_hash hash_type;
+
+// libstdc++/41792
+template class std::unordered_map<inst_type, inst_type, hash_type>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc
new file mode 100644
index 00000000000..7a17e4c0e92
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc
new file mode 100644
index 00000000000..8f2c1a6d95e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc
new file mode 100644
index 00000000000..3fb4be737b3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc
new file mode 100644
index 00000000000..000745e75d5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc
new file mode 100644
index 00000000000..e36a0a17033
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc
new file mode 100644
index 00000000000..04a488be112
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc
new file mode 100644
index 00000000000..1c7f60f93cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc
new file mode 100644
index 00000000000..988c3129354
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_map>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::unordered_multimap<int, int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/dr1189.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc
index 57e5f7da725..57e5f7da725 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/dr1189.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
new file mode 100644
index 00000000000..f95a6681b1b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <unordered_map>
+
+void
+test01()
+{
+ std::unordered_multimap<int, double> umm{{1, 1.0}, {2, 2.0}, {3, 3.0}};
+ std::begin(umm);
+ std::end(umm);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..d92fdc5b3bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+typedef __gnu_test::OverloadedAddress inst_type;
+typedef __gnu_test::OverloadedAddress_hash hash_type;
+
+// libstdc++/41792
+template class std::unordered_multimap<inst_type, inst_type, hash_type>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc
new file mode 100644
index 00000000000..7d8989074f3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc
new file mode 100644
index 00000000000..ea6857aa212
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc
new file mode 100644
index 00000000000..20a4659629d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc
new file mode 100644
index 00000000000..4fbb4fad6c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc
new file mode 100644
index 00000000000..c65c6083d75
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc
new file mode 100644
index 00000000000..6496624ee66
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc
new file mode 100644
index 00000000000..b12fe5764cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc
new file mode 100644
index 00000000000..0f2acea40e2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::unordered_multiset<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/dr1189.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc
index 59232a35a53..59232a35a53 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/dr1189.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
new file mode 100644
index 00000000000..137b0d6d2e9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <unordered_set>
+
+void
+test01()
+{
+ std::unordered_multiset<int> ums{1, 2, 3};
+ std::begin(ums);
+ std::end(ums);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..618402643fa
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+typedef __gnu_test::OverloadedAddress inst_type;
+typedef __gnu_test::OverloadedAddress_hash hash_type;
+
+// libstdc++/41792
+template class std::unordered_multiset<inst_type, hash_type>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc
new file mode 100644
index 00000000000..e37e5209d7f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc
new file mode 100644
index 00000000000..90e5d55a4fb
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc
new file mode 100644
index 00000000000..e7222a9c275
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc
new file mode 100644
index 00000000000..8eb0304292c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc
new file mode 100644
index 00000000000..ab6942ccaf3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc
new file mode 100644
index 00000000000..81be39da9d9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc
new file mode 100644
index 00000000000..2d3b7e472c6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc
new file mode 100644
index 00000000000..96d6a2a05a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-options "-std=gnu++0x" }
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/unordered_set>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::unordered_set<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc
new file mode 100644
index 00000000000..afa1ddd5d80
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+// libstdc++/26132
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ for (float lf = 1.0; lf < 101.0; lf *= 10.0)
+ for (int size = 1; size <= 6561; size *= 3)
+ {
+ std::unordered_set<int> us1;
+ typedef std::unordered_set<int>::size_type size_type;
+
+ us1.max_load_factor(10.0);
+
+ for (int i = 0; i < size; ++i)
+ us1.insert(i);
+
+ us1.max_load_factor(lf);
+
+ for (int i = 1; i <= 6561; i *= 81)
+ {
+ const size_type n = size * 81 / i;
+ us1.rehash(n);
+ VERIFY( us1.bucket_count() > us1.size() / us1.max_load_factor() );
+ VERIFY( us1.bucket_count() >= n );
+ }
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/dr1189.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/dr1189.cc
index e7047dbddc0..e7047dbddc0 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/dr1189.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/dr1189.cc
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
new file mode 100644
index 00000000000..ea116c364af
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <unordered_set>
+
+void
+test01()
+{
+ std::unordered_set<int> us{1, 2, 3};
+ std::begin(us);
+ std::end(us);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..3f619b71cd6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+typedef __gnu_test::OverloadedAddress inst_type;
+typedef __gnu_test::OverloadedAddress_hash hash_type;
+
+// libstdc++/41792
+template class std::unordered_set<inst_type, hash_type>;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
index 22b1c76d7f3..4b45d79fc1c 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,10 +29,12 @@ void test01()
using std::vector;
using std::numeric_limits;
-#ifndef _GLIBCXX_DEBUG
- using std::_S_word_bit;
-#else
+#ifdef _GLIBCXX_DEBUG
using std::_GLIBCXX_STD_D::_S_word_bit;
+#elif defined(_GLIBCXX_PROFILE)
+ using std::_GLIBCXX_STD_PR::_S_word_bit;
+#else
+ using std::_S_word_bit;
#endif
// Actually, vector<bool> is special, see libstdc++/31370.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
index 571c6ecc1a6..40d09dbf752 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,10 +23,12 @@
#include <stdexcept>
#include <testsuite_hooks.h>
-#ifndef _GLIBCXX_DEBUG
- using std::_S_word_bit;
-#else
+#ifdef _GLIBCXX_DEBUG
using std::_GLIBCXX_STD_D::_S_word_bit;
+#elif defined(_GLIBCXX_PROFILE)
+ using std::_GLIBCXX_STD_PR::_S_word_bit;
+#else
+ using std::_S_word_bit;
#endif
inline void
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc
new file mode 100644
index 00000000000..737108b49d6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-D_GLIBCXX_DEBUG_PEDANTIC" }
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+// libstdc++/44190
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::vector<int> v;
+ v.resize(10);
+ VERIFY( v.size() <= v.capacity() );
+}
+
+int main()
+{
+
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/resize/1.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/1.cc
index 168df7a4a97..168df7a4a97 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/resize/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc
new file mode 100644
index 00000000000..5ba026dbeb5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc
@@ -0,0 +1,56 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_rvalref.h>
+
+using namespace __gnu_test;
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::vector<copycounter> a;
+ copycounter::copycount = 0;
+ a.resize(10);
+ a.resize(98);
+ a.resize(99);
+ a.resize(100);
+ VERIFY( copycounter::copycount == 0 );
+
+ a.resize(99);
+ a.resize(0);
+ VERIFY( copycounter::copycount == 0 );
+
+ a.resize(100);
+ VERIFY( copycounter::copycount == 0 );
+
+ a.clear();
+ VERIFY( copycounter::copycount == 0 );
+}
+
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc
new file mode 100644
index 00000000000..d181168acf7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::vector<__gnu_test::NonCopyConstructible> v;
+ VERIFY( std::distance(v.begin(), v.end()) == 0 );
+
+ v.resize(1000);
+ VERIFY( std::distance(v.begin(), v.end()) == 1000 );
+ for(auto it = v.begin(); it != v.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc
new file mode 100644
index 00000000000..a33ba1ad69e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::vector<__gnu_test::NonCopyConstructible> v(1000);
+ VERIFY( std::distance(v.begin(), v.end()) == 1000 );
+ for(auto it = v.begin(); it != v.end(); ++it)
+ VERIFY( *it == -1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc
new file mode 100644
index 00000000000..ff9c5a24b18
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc
new file mode 100644
index 00000000000..4384a97bd26
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign2<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc
new file mode 100644
index 00000000000..9cb7ea6f9bc
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign3<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc
new file mode 100644
index 00000000000..8e3d3be9c01
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_assign1<__gnu_debug::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc
new file mode 100644
index 00000000000..dc0b4a22eb7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc
new file mode 100644
index 00000000000..13757a1fa5e
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct2<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc
new file mode 100644
index 00000000000..661af4382d8
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct3<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc
new file mode 100644
index 00000000000..ec33a581340
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_construct1<__gnu_debug::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc
new file mode 100644
index 00000000000..2ec0d9e02a9
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc
new file mode 100644
index 00000000000..011ad4c0c31
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert2<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc
new file mode 100644
index 00000000000..4dab133b571
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-do run { xfail *-*-* } }
+
+#include <vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert3<std::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc
new file mode 100644
index 00000000000..684ebb598c1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-do run { xfail *-*-* } }
+
+#include <debug/vector>
+#include <debug/checks.h>
+
+void test01()
+{
+ __gnu_test::check_insert1<__gnu_debug::vector<int> >();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/1.cc
index 0111efe4875..0111efe4875 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/invalidation/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/1.cc
diff --git a/libstdc++-v3/testsuite/23_containers/vector/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/2.cc
index 9652ffb537a..9652ffb537a 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/invalidation/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/2.cc
diff --git a/libstdc++-v3/testsuite/23_containers/vector/invalidation/3.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/3.cc
index df8759c52e4..df8759c52e4 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/invalidation/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/3.cc
diff --git a/libstdc++-v3/testsuite/23_containers/vector/invalidation/4.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/4.cc
index 569530693c8..569530693c8 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/invalidation/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/4.cc
diff --git a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
new file mode 100644
index 00000000000..0a10959b240
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <vector>
+
+void
+test01()
+{
+ std::vector<double> v{1.0, 2.0, 3.0};
+ std::begin(v);
+ std::end(v);
+
+ std::vector<bool> vb{true, false, true};
+ std::begin(vb);
+ std::end(vb);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
index f0fae0083ba..6925c1776a4 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1055 }
+// { dg-error "no matching" "" { target *-*-* } 1148 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
index ea0acfb5a91..662bf169b23 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 995 }
+// { dg-error "no matching" "" { target *-*-* } 1078 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
index 67dd1f33e11..fe2a2b25475 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 995 }
+// { dg-error "no matching" "" { target *-*-* } 1078 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
index 9eb0ab15acf..9869af131df 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1096 }
+// { dg-error "no matching" "" { target *-*-* } 1189 }
// { dg-excess-errors "" }
#include <vector>
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc
new file mode 100644
index 00000000000..9305e3c87c5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc
@@ -0,0 +1,29 @@
+// 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <vector>
+#include <testsuite_hooks.h>
+#include <testsuite_api.h>
+
+// { dg-do compile }
+
+// libstdc++/41792
+template class std::vector<__gnu_test::OverloadedAddress>;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/resize/moveable.cc b/libstdc++-v3/testsuite/23_containers/vector/resize/moveable.cc
deleted file mode 100644
index 47fdf8fcafa..00000000000
--- a/libstdc++-v3/testsuite/23_containers/vector/resize/moveable.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-
-#include <vector>
-#include <testsuite_hooks.h>
-#include <testsuite_rvalref.h>
-
-using namespace __gnu_test;
-
-// According to n1771, there should be two resizes, with and without
-// parameter. We only have one at present, whose second parameter defaults
-// to a default-constructed object.
-// Also, the values are one higher than might be expected because internally
-// resize calls fill, which copies its input value in case it is already in
-// the vector when the vector isn't moved.
-void
-test01()
-{
- bool test __attribute__((unused)) = true;
-
- std::vector<copycounter> a;
- copycounter::copycount = 0;
- a.resize(10);
- a.resize(98);
- a.resize(99);
- a.resize(100);
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PROFILE)
- VERIFY( copycounter::copycount == 100 + 1 );
-#else
- VERIFY( copycounter::copycount == 100 + 1 + 4 );
-#endif
- a.resize(99);
- a.resize(0);
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PROFILE)
- VERIFY( copycounter::copycount == 100 + 1 );
-#else
- VERIFY( copycounter::copycount == 100 + 1 + 6 );
-#endif
- a.resize(100);
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PROFILE)
- VERIFY( copycounter::copycount == 200 + 2 );
-#else
- VERIFY( copycounter::copycount == 200 + 2 + 7 );
-#endif
- a.clear();
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PROFILE)
- VERIFY( copycounter::copycount == 200 + 2 );
-#else
- VERIFY( copycounter::copycount == 200 + 2 + 7 );
-#endif
-}
-
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc
index d69155893ac..2c967ac2778 100644
--- a/libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc
+++ b/libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc
@@ -1,6 +1,7 @@
// 2001-06-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2004, 2005, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +28,7 @@ void test02()
typedef std::back_insert_iterator<std::list<int> > iterator_type;
std::list<int> li;
iterator_type it = std::back_inserter(li);
+ it = it; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc
index 69aefe869e3..e72723764cb 100644
--- a/libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc
+++ b/libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc
@@ -1,6 +1,6 @@
// 2001-06-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@ void test02()
typedef std::front_insert_iterator<std::list<int> > iterator_type;
std::list<int> li;
iterator_type it = std::front_inserter(li);
+ it = it; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc
new file mode 100644
index 00000000000..8082e0d0631
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <iterator>
+
+namespace std
+{
+ template<class C> auto begin(C& c) -> decltype(c.begin());
+ template<class C> auto begin(const C& c) -> decltype(c.begin());
+
+ template<class C> auto end(C& c) -> decltype(c.end());
+ template<class C> auto end(const C& c) -> decltype(c.end());
+
+ template<class T, size_t N> T* begin(T (&array)[N]);
+ template<class T, size_t N> T* end(T (&array)[N]);
+}
diff --git a/libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc
index a5961211a37..ac949307e09 100644
--- a/libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc
+++ b/libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc
@@ -1,6 +1,6 @@
// 2001-06-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,6 +30,8 @@ void test02()
std::list<int>::iterator liit = li.begin();
iterator_type it01(li, liit);
iterator_type it02 = std::inserter(li, liit);
+ it01 = it01; // Suppress unused warnings.
+ it02 = it02;
}
int main()
diff --git a/libstdc++-v3/testsuite/24_iterators/operations/40497.cc b/libstdc++-v3/testsuite/24_iterators/operations/40497.cc
new file mode 100644
index 00000000000..59a64fbb099
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/operations/40497.cc
@@ -0,0 +1,41 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+namespace X
+{
+ class C { };
+
+ template<class T> void next(T) { }
+ template<class T> void prev(T) { }
+}
+
+using namespace X;
+
+#include <iterator>
+
+using namespace std;
+
+// libstdc++/40497
+void test01()
+{
+ C c;
+ next(c);
+ prev(c);
+}
diff --git a/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
index 36d8adde348..0b86efacb92 100644
--- a/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
+++ b/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
@@ -1,6 +1,6 @@
// 2001-04-30 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,7 +49,7 @@ bool test02(void)
*ostrb_it01;
VERIFY( !ostrb_it01.failed() );
- costreambuf_iter ostrb_it02(NULL);
+ costreambuf_iter ostrb_it02(0);
VERIFY( ostrb_it02.failed() );
ostrb_it02++;
++ostrb_it02;
diff --git a/libstdc++-v3/testsuite/24_iterators/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access.cc
new file mode 100644
index 00000000000..3bd1d2e5da3
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <iterator>
+
+void
+test01()
+{
+ int arr[3] = {1, 2, 3};
+ std::begin(arr);
+ std::end(arr);
+}
diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc
new file mode 100644
index 00000000000..37ccd7c36e8
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <algorithm>
+
+struct Size
+{
+ operator int() { return 0; }
+private:
+ void operator=(Size&);
+};
+
+// libstdc++/25306
+template int* std::fill_n(int*, Size, const int&);
diff --git a/libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc b/libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc
new file mode 100644
index 00000000000..f73ff3d778e
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc
@@ -0,0 +1,30 @@
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <algorithm>
+
+struct Size
+{
+ operator int() { return 0; }
+private:
+ void operator=(Size&);
+};
+
+// libstdc++/25306
+template int* std::generate_n(int*, Size, int (*)());
diff --git a/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc b/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
index f0944b0bfde..0e99d51d210 100644
--- a/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
@@ -2,7 +2,7 @@
// 2008-09-16 Chris Fairles <chris.fairles@gmail.com>
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,8 +41,7 @@ void test01()
{
bool test __attribute__((unused)) = true;
- std::pair<int, int> z = std::minmax({1, 2, 3, 4, 5, 6, 7, 8},
- compare_counter());
+ std::minmax({1, 2, 3, 4, 5, 6, 7, 8}, compare_counter());
// If N is the number of arguments in the minmax function call,
// 25.3.7 specifies that at most 3N/2 comparisons are allowed.
diff --git a/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc b/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
index 6941bd08779..84031024823 100644
--- a/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
@@ -21,7 +21,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
#include <algorithm>
#include <random>
#include <testsuite_api.h>
@@ -34,5 +33,5 @@ namespace std
typedef value_type* iterator_type;
typedef std::mt19937_64 ugenerator_type;
- template void shuffle(iterator_type, iterator_type, ugenerator_type&);
+ template void shuffle(iterator_type, iterator_type, ugenerator_type&&);
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc b/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc
index a33ddd46bf9..0f0a1e19ea4 100644
--- a/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc
@@ -33,5 +33,5 @@ namespace std
typedef value_type* iterator_type;
typedef std::mt19937_64 ugenerator_type;
- template void shuffle(iterator_type, iterator_type, ugenerator_type&);
+ template void shuffle(iterator_type, iterator_type, ugenerator_type&&);
}
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc b/libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc
index 9dd25077c38..dc05a2b19b4 100644
--- a/libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc
+++ b/libstdc++-v3/testsuite/26_numerics/complex/complex_value.cc
@@ -3,7 +3,7 @@
// 2000-11-20
// Benjamin Kosnik bkoz@redhat.com
-// Copyright (C) 2000, 2003, 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,27 +34,27 @@ void test01()
complex_type a(cd1, cd2);
double d;
d = a.real();
- VERIFY( d == cd1);
+ VERIFY( d == cd1 );
d = a.imag();
- VERIFY(d == cd2);
+ VERIFY( d == cd2 );
complex_type c(cd1, cd2);
double d6 = abs(c);
- VERIFY( d6 >= 0);
+ VERIFY( d6 >= 0 );
double d7 = arg(c);
double d8 = atan2(c.imag(), c.real());
- VERIFY( d7 == d8);
+ VERIFY( d7 == d8 );
double d9 = norm(c);
double d10 = d6 * d6;
- VERIFY(d9 - d10 == 0);
+ VERIFY( d9 - d10 == 0 );
- complex_type e = conj(c);
+ complex_type e __attribute__((unused)) = conj(c);
complex_type f = polar(c.imag(), 0.0);
- VERIFY(f.real() != 0);
+ VERIFY( f.real() != 0 );
}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
index f44757851e0..d81271ab07a 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <ccomplex> // { dg-excess-errors "In file included from" }
+#include <ccomplex>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
index c4573758adc..a353da9e820 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cfenv> // { dg-excess-errors "In file included from" }
+#include <cfenv>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc
index e85ecab818a..3f4b8ba26e1 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++.cc
@@ -70,6 +70,7 @@ template <typename _Tp>
res = std::islessequal(f1,f2);
res = std::islessgreater(f1, f2);
res = std::isunordered(f1, f2);
+ res = res; // Suppress unused warning.
}
#endif
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc
new file mode 100644
index 00000000000..413fe69259a
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++0x.cc
@@ -0,0 +1,92 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile { xfail uclibc } }
+// { dg-excess-errors "" { target uclibc } }
+
+#include <cmath>
+
+void fpclassify() { }
+
+void isfinite() { }
+
+void isinf() { }
+
+void isnan() { }
+
+void isnormal() { }
+
+void signbit() { }
+
+void isgreater() { }
+
+void isgreaterequal() { }
+
+void isless() { }
+
+void islessequal() { }
+
+void islessgreater() { }
+
+void isunordered() { }
+
+#if _GLIBCXX_USE_C99_MATH
+template <typename _Tp, typename _Up = _Tp>
+ void test_c99_classify()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp fp_type_one;
+ typedef _Up fp_type_two;
+ fp_type_one f1 = 1.0;
+ fp_type_two f2 = 3.0;
+ int resi;
+ bool res;
+
+ resi = std::fpclassify(f1);
+ res = std::isfinite(f2);
+ res = std::isinf(f1);
+ res = std::isnan(f2);
+ res = std::isnormal(f1);
+ res = std::signbit(f2);
+ res = std::isgreater(f1, f2);
+ res = std::isgreaterequal(f1, f2);
+ res = std::isless(f1, f2);
+ res = std::islessequal(f1,f2);
+ res = std::islessgreater(f1, f2);
+ res = std::isunordered(f1, f2);
+ resi = resi; // Suppress unused warning.
+ res = res;
+ }
+#endif
+
+int main()
+{
+#if _GLIBCXX_USE_C99_MATH
+ test_c99_classify<float>();
+ test_c99_classify<double>();
+ test_c99_classify<long double>();
+ test_c99_classify<float, double>();
+ test_c99_classify<float, long double>();
+ test_c99_classify<double, float>();
+ test_c99_classify<double, long double>();
+ test_c99_classify<long double, float>();
+ test_c99_classify<long double, double>();
+#endif
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
index 142e1da38bd..716dda51b1e 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
@@ -20,8 +20,8 @@
// { dg-do compile }
// { dg-add-options no_pch }
-// { dg-xfail-if "" { { *-*-linux* *-*-darwin* hppa*-*-hpux* } || { uclibc || newlib } } { "*" } { "" } }
-// { dg-excess-errors "" { target { { *-*-linux* *-*-darwin* hppa*-*-hpux* } || { uclibc || newlib } } } }
+// { dg-xfail-if "" { { *-*-linux* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* } || { uclibc || newlib } } { "*" } { "" } }
+// { dg-excess-errors "" { target { { *-*-linux* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* } || { uclibc || newlib } } } }
#include <math.h>
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc
index 4418bc31b20..5819e1a18a7 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,4 +43,5 @@ int main()
ans = std::sinh(j);
ans = std::tan(i);
ans = std::tanh(i);
+ ans = ans; // Suppress unused warnings.
}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
index f1f2a77224a..15175885cb4 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <ctgmath> // { dg-excess-errors "In file included from" }
+#include <ctgmath>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
index 6463f520db5..41311965aff 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <random> // { dg-excess-errors "In file included from" }
+#include <random>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc
index d244c769162..6010c536cef 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc
@@ -33,6 +33,7 @@ test01()
const auto f(e);
auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc
index 1e88b89efe8..111af1964e4 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc
@@ -34,6 +34,7 @@ test01()
const auto f(e);
auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc
index 06360aa0678..6f5b8d29754 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc
@@ -28,7 +28,8 @@ test01()
std::linear_congruential_engine<unsigned long, 48271, 0, 2147483647> e(1);
const auto f(e);
- auto g(f);
+ auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc
index af0c4b1e356..2b48164fb83 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc
@@ -4,7 +4,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,6 +31,7 @@ void test01()
p = &lc.increment;
p = &lc.modulus;
p = &lc.default_seed;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc
index 3da72cbf5fd..98ea4fe0387 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc
@@ -36,6 +36,7 @@ test01()
const auto f(e);
auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc
index 2abc5ab9b64..ad38bec01c0 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc
@@ -4,7 +4,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,6 +41,7 @@ void test01()
p = &mt.tempering_l;
p = &mt.initialization_multiplier;
p = &mt.default_seed;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc
index c589a4edc8a..55e38e22f80 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc
@@ -33,6 +33,7 @@ test01()
const auto f(e);
auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc
index c1d5b3a2e45..2a96488cd3d 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc
@@ -4,7 +4,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,6 +29,7 @@ void test01()
const void* p = &so.table_size;
p = &so.table_size;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc
index 21df0a07e3c..2639e87dd4c 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc
@@ -29,6 +29,7 @@ test01()
const auto f(e);
auto g(f);
+ g = g; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc
index 2ab13a30309..8c033cd26e3 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc
@@ -4,7 +4,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,6 +31,7 @@ void test01()
p = &swc.short_lag;
p = &swc.long_lag;
p = &swc.default_seed;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc b/libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
index 59bf014a475..0357e5de71e 100644
--- a/libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
+++ b/libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
@@ -1,6 +1,6 @@
// 20010613 gdr
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,8 +17,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
-
// This is DR-253. Test for accessible assignment-operators.
#include <valarray>
#include <testsuite_hooks.h>
@@ -36,7 +34,7 @@ int main()
VERIFY(v[3] == 1 && w[3] == 1);
VERIFY(v[6] == 1 && w[6] == 1);
- std::slice_array<int> t = v[slice(0, 10, 1)];
+ std::slice_array<int> t __attribute__((unused)) = v[slice(0, 10, 1)];
return 0;
}
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
new file mode 100644
index 00000000000..be08d0298d3
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 26.6.10 valarray range access: [valarray.range]
+
+#include <valarray>
+
+void
+test01()
+{
+ std::valarray<double> va{1.0, 2.0, 3.0};
+ std::begin(va);
+ std::end(va);
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
index 6dc56f9b154..0a12e722450 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -61,19 +61,19 @@ void test_01()
// filebuf_type* close()
std::filebuf* f;
f = fb_01.close();
- VERIFY( f != NULL );
+ VERIFY( f );
VERIFY( !fb_01.is_open() );
f = fb_02.close();
- VERIFY( f != NULL );
+ VERIFY( f );
VERIFY( !fb_02.is_open() );
f = fb_03.close();
- VERIFY( f != NULL );
+ VERIFY( f );
VERIFY( !fb_03.is_open() );
f = fb_03.close();
- VERIFY( f == NULL );
+ VERIFY( !f );
VERIFY( !fb_03.is_open() );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
index 2074ee78a0b..fe0624d109e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -71,7 +71,7 @@ void test01()
VERIFY( !cvt->unshift_called );
filebuf* ret = fb.close();
VERIFY( cvt->unshift_called );
- VERIFY( ret == NULL );
+ VERIFY( !ret );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
index 9d0cb0f7499..c1a0f79c8e2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -48,7 +48,7 @@ void test_02()
// read (ext)
FILE* f2 = fopen(name_01, "r");
- VERIFY( f2 != NULL );
+ VERIFY( f2 );
if (f2)
{
__gnu_cxx::stdio_filebuf<char> fb(f2, std::ios_base::in, 512);
@@ -58,7 +58,7 @@ void test_02()
// read (standard)
FILE* f = fopen(name_01, "r");
- VERIFY( f != NULL );
+ VERIFY( f );
if (f)
{
std::ifstream ifstream1(name_01);
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
index e520682b112..f2c5abc3eb3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
@@ -1,7 +1,7 @@
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -69,14 +69,14 @@ bool test_07()
filebuf fb;
filebuf* ret = fb.open(name, ios_base::in | ios_base::out);
- VERIFY( ret != NULL );
+ VERIFY( ret != 0 );
VERIFY( fb.is_open() );
s1.signal();
s2.wait();
fb.sputc('a');
ret = fb.close();
- VERIFY( ret != NULL );
+ VERIFY( ret != 0 );
VERIFY( !fb.is_open() );
return test;
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
index baa4ed31eb8..417fbc2ce39 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -69,7 +69,7 @@ void test01()
VERIFY( !cvt->unshift_called );
wfilebuf* ret = fb.close();
VERIFY( cvt->unshift_called );
- VERIFY( ret == NULL );
+ VERIFY( !ret );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
index 9f805a020ad..326aa1fd818 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
index e25e8e50b1e..9fbf67aef7f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
index 8f14ab07729..fa0bf15c058 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "en_US" }
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
index ba49bd23108..1ac9557cee7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
index abcab50c9af..fdcc0302211 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
index 30b013c3033..5007b085e71 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// 2004-04-16 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
index 5f188c20367..f4d574c2170 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-05-13 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc
index 044563d7903..8a611e0dc5e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc
index b308cd0f5d6..bc7c3c1bdcd 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc
index 63e162fa9db..9bb1f40358d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
index 60f9095e659..ec11237d032 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
@@ -1,4 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "fr_FR" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
index 26ed4f1aa93..7a997739f98 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
index 07d4d6c7b3f..246ae8c6eb5 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "fr_FR" }
// 2004-01-11 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
index a3a78120e78..dc1314556d1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
@@ -1,10 +1,11 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
// 2004-04-16 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -68,7 +69,7 @@ bool test01()
wfilebuf fb;
fb.pubimbue(loc_us);
wfilebuf* ret = fb.open(name, ios_base::out);
- VERIFY( ret != NULL );
+ VERIFY( ret != 0 );
VERIFY( fb.is_open() );
s1.wait();
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
index d8445c0c8e7..52941a5fc22 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 2003-05-13 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
index a240a0f75e4..f69d9f0d687 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
index e10bd9153f2..1a40da155cf 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,11 +53,11 @@ void test_01()
// Should keep the old file attached, and disregard attempt to overthrow.
std::filebuf* f = fb_02.open(name_02, std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
- VERIFY( f != NULL );
+ VERIFY( f );
VERIFY( fb_02.is_open() );
f = fb_02.open(name_03, std::ios_base::in | std::ios_base::out);
- VERIFY( f == NULL );
+ VERIFY( !f );
VERIFY( fb_02.is_open() );
fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc);
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
index 1bd81ee14d9..755784fb9ae 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test_03()
int first_fd = ::open(name_01, O_RDONLY);
VERIFY( first_fd != -1 );
FILE* first_file = ::fdopen(first_fd, "r");
- VERIFY( first_file != NULL );
+ VERIFY( first_file );
__gnu_cxx::stdio_filebuf<char> fb(first_file, std::ios_base::in);
int second_fd = fb.fd();
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
index cfec76b310b..5b404375e63 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
@@ -1,6 +1,7 @@
// { dg-require-mkfifo "" }
-// Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2005, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -55,7 +56,7 @@ void test_06()
std::ios_base::in
| std::ios_base::out
| std::ios_base::ate);
- if (r == NULL)
+ if (!r)
VERIFY( !fbuf.is_open() );
else
VERIFY( fbuf.is_open() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
index db02187dece..7faa0501a12 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
@@ -1,6 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,7 +37,7 @@ void test01()
wfilebuf* f = fb.close();
VERIFY( n1 != wfilebuf::traits_type::eof() );
- VERIFY( f != NULL );
+ VERIFY( f );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
index 9ea64cc3e93..e4a726a0d13 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
@@ -1,6 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,7 +39,7 @@ void test02()
VERIFY( n1 != wfilebuf::traits_type::eof() );
VERIFY( n2 != wfilebuf::traits_type::eof() );
- VERIFY( f != NULL );
+ VERIFY( f );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
index 2f10e0dec42..5d49ed0df9f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
@@ -1,6 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,7 +36,7 @@ void test03()
wfilebuf* f = fb.close();
VERIFY( n1 != wfilebuf::traits_type::eof() );
- VERIFY( f != NULL );
+ VERIFY( f );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
index a03d9e8d1ab..3076a177745 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
@@ -1,6 +1,6 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,7 +38,7 @@ void test04()
VERIFY( n1 != wfilebuf::traits_type::eof() );
VERIFY( n2 != wfilebuf::traits_type::eof() );
- VERIFY( f != NULL );
+ VERIFY( f );
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
index 53ee751ed44..3bf4353d7e6 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -47,7 +47,7 @@ void test01()
fb.sputc(pod_uchar::from<char>(0xff));
// Check that seekoff sets the current state during output
- traits_type::pos_type pos = fb.pubseekoff(0, ios_base::cur);
+ fb.pubseekoff(0, ios_base::cur);
fb.sputc(pod_uchar::from<char>('a'));
fb.sputc(pod_uchar::from<char>(0xff));
fb.sputc(pod_uchar::from<char>(0));
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
index 3d26c1cfc57..24887461719 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::traits_type traits_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -65,7 +65,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
index bb175150556..4dc6d8648be 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::off_type off_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -66,7 +66,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
index f786504984d..8d7ab1dfc11 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::traits_type traits_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -66,7 +66,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
index f8385b25a8a..3a8809da2f6 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::traits_type traits_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -66,7 +66,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
index 67a376e67c4..89fab2aed90 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::off_type off_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -66,7 +66,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
index e1e98261f22..b1ad66e8933 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test05()
typedef filebuf::traits_type traits_type;
bool test __attribute__((unused)) = true;
- streamsize strmsz_1, strmsz_2;
+ streamsize strmsz_1;
int_type c1;
int_type c2;
@@ -66,7 +66,7 @@ void test05()
//beg
strmsz_1 = fb.in_avail();
pt_1 = fb.pubseekoff(2, ios_base::beg);
- strmsz_2 = fb.in_avail();
+ fb.in_avail();
off_1 = off_type(pt_1);
VERIFY( off_1 > 0 );
c1 = fb.snextc(); //current in pointer +1
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc
new file mode 100644
index 00000000000..9422f29f0d9
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc
@@ -0,0 +1,85 @@
+// { dg-require-fileio "" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <cstring>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ typedef filebuf::pos_type pos_type;
+ const char name[] = "tmp_seekoff-4.tst";
+
+ const size_t size = 10;
+ char buf[size];
+ streamsize n;
+
+ filebuf fb;
+ fb.open(name, ios_base::in | ios_base::out | ios_base::trunc);
+
+ n = fb.sputn("abcd", 4);
+ VERIFY( n == 4 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, 3);
+ VERIFY( n == 3 );
+ VERIFY( !memcmp(buf, "abc", 3) );
+
+ fb.pubseekoff(0, ios_base::cur);
+
+ n = fb.sputn("ef", 2);
+ VERIFY( n == 2 );
+
+ fb.pubseekoff(0, ios_base::beg);
+
+ n = fb.sgetn(buf, size);
+ VERIFY( n == 5 );
+ VERIFY( !memcmp(buf, "abcef", 5) );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sputn("ghijkl", 6);
+ VERIFY( n == 6 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, 2);
+ VERIFY( n == 2 );
+ VERIFY( !memcmp(buf, "gh", 2) );
+
+ fb.pubseekoff(0, ios_base::end);
+ n = fb.sputn("mno", 3);
+ VERIFY( n == 3 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, size);
+ VERIFY( n == 9 );
+ VERIFY( !memcmp(buf, "ghijklmno", 9) );
+
+ fb.close();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
index 7148e2f1832..c6f13dcd08b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-08 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
index 16d4dcec28f..cc9c4e22a65 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-08 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
new file mode 100644
index 00000000000..95338cfde89
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
@@ -0,0 +1,85 @@
+// { dg-require-fileio "" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <cwchar>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ typedef wfilebuf::pos_type pos_type;
+ const char name[] = "tmp_seekoff-4.tst";
+
+ const size_t size = 10;
+ wchar_t buf[size];
+ streamsize n;
+
+ wfilebuf fb;
+ fb.open(name, ios_base::in | ios_base::out | ios_base::trunc);
+
+ n = fb.sputn(L"abcd", 4);
+ VERIFY( n == 4 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, 3);
+ VERIFY( n == 3 );
+ VERIFY( !wmemcmp(buf, L"abc", 3) );
+
+ fb.pubseekoff(0, ios_base::cur);
+
+ n = fb.sputn(L"ef", 2);
+ VERIFY( n == 2 );
+
+ fb.pubseekoff(0, ios_base::beg);
+
+ n = fb.sgetn(buf, size);
+ VERIFY( n == 5 );
+ VERIFY( !wmemcmp(buf, L"abcef", 5) );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sputn(L"ghijkl", 6);
+ VERIFY( n == 6 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, 2);
+ VERIFY( n == 2 );
+ VERIFY( !wmemcmp(buf, L"gh", 2) );
+
+ fb.pubseekoff(0, ios_base::end);
+ n = fb.sputn(L"mno", 3);
+ VERIFY( n == 3 );
+
+ fb.pubseekoff(0, ios_base::beg);
+ n = fb.sgetn(buf, size);
+ VERIFY( n == 9 );
+ VERIFY( !wmemcmp(buf, L"ghijklmno", 9) );
+
+ fb.close();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
index 4513df095a5..e011f875d6b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-10-07 Petur Runolfsson <peturr02@ru.is>
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
index 3b434ba7a52..42688e825e0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,8 +40,8 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- test = (this->pbase() == NULL);
- test &= (this->pptr() == NULL);
+ test = (!this->pbase());
+ test &= (!this->pptr());
return test;
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
index ff22967600e..b736b146070 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
@@ -44,7 +44,7 @@ void test02()
FILE* in = fopen(name, "r");
char str[256];
- fgets(str, 256, in);
+ VERIFY( fgets(str, 256, in) );
VERIFY( !strcmp(str, "Hello, world") );
fclose(in);
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
index e24941e06af..fd332b68365 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,7 +40,7 @@ void test05()
streamsize strmsz_1, strmsz_2;
char carray2[8192] = "";
- int_type c2, c4;
+ int_type c2;
// streamsize sgetn(char_type *s, streamsize n)
// streamsize xsgetn(char_type *s, streamsize n)
@@ -63,7 +63,7 @@ void test05()
strmsz_2 = fb_02.sgetn(carray2, strmsz_1 + 5);
VERIFY( strmsz_1 == -1 );
VERIFY( strmsz_2 == 0 );
- c4 = fb_02.sgetc();
+ fb_02.sgetc();
VERIFY( fb_02.unbuffered() );
VERIFY( !fb_02.read_position() );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc
index 4fd2d47130e..a2368f93203 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc
index 89ec0e53d1f..c84a079d298 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
index 07b971ec5c4..54a1372b467 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test01()
bool test __attribute__((unused)) = true;
streamsize strmsz_1, strmsz_2;
- int_type c1, c2, c3;
+ int_type c1, c2;
// int_type sungetc()
// if in_cur not avail, return pbackfail(), else decrement and
@@ -56,7 +56,7 @@ void test01()
fb_01.sputc('u');
fb_01.sputc('v');
fb_01.pubseekoff(-1, std::ios_base::end);
- c3 = fb_01.sbumpc();
+ fb_01.sbumpc();
strmsz_1 = fb_01.in_avail();
c2 = fb_01.sungetc();
strmsz_2 = fb_01.in_avail();
@@ -68,7 +68,7 @@ void test01()
c1 = fb_01.sgetc();
c2 = fb_01.sungetc();
strmsz_2 = fb_01.in_avail(); // 1
- c3 = fb_01.sgetc();
+ fb_01.sgetc();
VERIFY( c1 != c2 );
VERIFY( strmsz_2 != strmsz_1 );
VERIFY( strmsz_2 == 1 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
index 753154ea0ae..782a83db91d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
@@ -1,6 +1,6 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ void test01()
bool test __attribute__((unused)) = true;
streamsize strmsz_1, strmsz_2;
- int_type c1, c2, c3;
+ int_type c1, c2;
// int_type sungetc()
// if in_cur not avail, return pbackfail(), else decrement and
@@ -56,7 +56,7 @@ void test01()
fb_01.sputc('u');
fb_01.sputc('v');
fb_01.pubseekoff(-1, std::ios_base::end);
- c3 = fb_01.sbumpc();
+ fb_01.sbumpc();
strmsz_1 = fb_01.in_avail();
c2 = fb_01.sungetc();
strmsz_2 = fb_01.in_avail();
@@ -68,7 +68,7 @@ void test01()
c1 = fb_01.sgetc();
c2 = fb_01.sungetc();
strmsz_2 = fb_01.in_avail(); // 1
- c3 = fb_01.sgetc();
+ fb_01.sgetc();
VERIFY( c1 != c2 );
VERIFY( strmsz_2 != strmsz_1 );
VERIFY( strmsz_2 == 1 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
index 6f8e4ed8872..72c3ecb0ad2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc
index 21251312fe9..55e22670557 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc
index 4b9aeb318f9..e4527ee697b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc
index c61f0eed99f..45bb4bdf5ef 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
index 2696fa2e0e9..637f89806b8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
index ff1cc405bd3..f6a2eaca94b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
@@ -161,7 +161,7 @@ void test02()
const char* name = "tmp_11544-2";
FILE* f = fopen(name, "w");
- fwrite("aaaab", 1, 5, f);
+ VERIFY( fwrite("aaaab", 1, 5, f) == 5 );
fclose(f);
wifstream in;
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
index 457d5bf0086..c6f30442c77 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
index 71532e80ca4..42892e4ac82 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
index 6ec72d2945b..6e63db09dfb 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
// Adapted from 27_io/basic_filebuf/underflow/char/2.cc
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
index 8814f8da369..4c4b8d3b42f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
index 55a48fd715c..f791b86aa10 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE.ISO-8859-15@euro" }
// 2003-05-03 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc
index 5ac2cc08ccb..b65d0890064 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,7 +35,7 @@ void test01()
iostate iostate02, iostate03;
const iostate iostate01 = std::ios_base::badbit | std::ios_base::eofbit;
- std::ios ios_01(NULL);
+ std::ios ios_01(0);
// bool fail() const
VERIFY( ios_01.fail() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
index 9150d1126bd..0cf07f212b8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,8 +35,8 @@ void test02()
// basic_ios& copyfmt(const basic_ios& rhs)
{
- std::ios ios_01(NULL);
- std::ios ios_02(NULL);
+ std::ios ios_01(0);
+ std::ios ios_02(0);
ios_01.exceptions(std::ios_base::eofbit);
ios_02.exceptions(std::ios_base::eofbit);
@@ -49,8 +49,8 @@ void test02()
}
{
- std::ios ios_01(NULL);
- std::ios ios_02(NULL);
+ std::ios ios_01(0);
+ std::ios ios_02(0);
ios_01.clear(std::ios_base::eofbit);
ios_02.exceptions(std::ios_base::eofbit);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
index 0a171a6fc54..2f3fa49da23 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
@@ -1,8 +1,8 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,8 +37,8 @@ void test03()
typedef std::ios_base::iostate iostate;
locale loc_c = locale::classic();
locale loc_de = locale("de_DE");
- std::ios ios_01(NULL);
- std::ios ios_02(NULL);
+ std::ios ios_01(0);
+ std::ios ios_02(0);
ios_01.imbue(loc_c);
ios_02.imbue(loc_de);
ios_02.setstate(ios_base::badbit);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
index 03f70c89458..f0494bd458d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,13 +35,13 @@ void test01()
// iostate exceptions() const
iostate iostate02;
{
- std::ios ios_01(NULL);
+ std::ios ios_01(0);
VERIFY( ios_01.exceptions() == std::ios_base::goodbit );
}
// void exceptions(iostate except)
{
- std::ios ios_01(NULL);
+ std::ios ios_01(0);
try {
ios_01.exceptions(std::ios_base::eofbit);
}
@@ -53,7 +53,7 @@ void test01()
}
{
- std::ios ios_01(NULL);
+ std::ios ios_01(0);
ios_01.clear(std::ios_base::eofbit);
try {
ios_01.exceptions(std::ios_base::eofbit);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
index 3d5bf772434..20de8a95708 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ void test01()
bool test __attribute__((unused)) = true;
const std::locale c_loc = std::locale::classic();
- std::ios ios_01(NULL);
+ std::ios ios_01(0);
std::ios::char_type ct01;
std::ios::char_type ct02('x');;
diff --git a/libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc b/libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc
index 4aec0e3cad3..44fe41323c7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc
@@ -1,7 +1,7 @@
// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
+// 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,7 @@ void test07()
try
{
- gnu_iostr obj(NULL);
+ gnu_iostr obj(0);
}
catch(std::exception& obj)
{
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc
index 4162f9e68aa..3b2cb845e08 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc
@@ -1,6 +1,7 @@
// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+// 2005, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +34,7 @@ void test07()
typedef std::basic_istream<__gnu_test::pod_ushort> gnu_istr;
try
- { gnu_istr obj(NULL); }
+ { gnu_istr obj(0); }
catch(std::exception& obj)
{
test = false;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
index 619751506ab..a8d91695b07 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
@@ -1,6 +1,7 @@
// 1999-04-12 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2002, 2003, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,7 +36,7 @@ std::stringbuf isbuf_02(str_02, std::ios_base::in);
std::stringbuf isbuf_03(str_03, std::ios_base::in);
std::stringbuf isbuf_04(str_04, std::ios_base::in);
-std::istream is_01(NULL);
+std::istream is_01(0);
std::istream is_02(&isbuf_02);
std::istream is_03(&isbuf_03);
std::istream is_04(&isbuf_04);
@@ -61,11 +62,8 @@ bool test01() {
long double ld1 = 0;
// process alphanumeric versions of bool values
- std::ios_base::fmtflags fmt = is_02.flags();
- bool testfmt = fmt & std::ios_base::boolalpha;
is_02.setf(std::ios_base::boolalpha);
- fmt = is_02.flags();
- testfmt = fmt & std::ios_base::boolalpha;
+ is_02.flags();
is_02 >> b1;
VERIFY( b1 == 1 );
is_02 >> b1;
@@ -73,8 +71,7 @@ bool test01() {
// process numeric versions of of bool values
is_02.unsetf(std::ios_base::boolalpha);
- fmt = is_02.flags();
- testfmt = fmt & std::ios_base::boolalpha;
+ is_02.flags();
is_02 >> b1;
VERIFY( b1 == 0 );
is_02 >> b1;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
index 8bf9bd35396..70f74fd7a91 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
@@ -1,6 +1,7 @@
// 1999-04-12 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009,
+// 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -20,10 +21,10 @@
// 27.6.1.2.2 arithmetic extractors
-// XXX This test fails on sparc-solaris2 because of a bug in libc
+// XXX This test fails on Solaris 8 and 9 because of a bug in libc
// XXX sscanf for very long input. See:
// XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
-// { dg-do run { xfail { { sparc*-*-solaris2* } || lax_strtofp } } }
+// { dg-do run { xfail { { *-*-solaris2.[89] } || lax_strtofp } } }
#include <istream>
#include <sstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
index f0d1635da1b..5d7ec97a59b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +33,7 @@ std::wstringbuf isbuf_02(str_02, std::ios_base::in);
std::wstringbuf isbuf_03(str_03, std::ios_base::in);
std::wstringbuf isbuf_04(str_04, std::ios_base::in);
-std::wistream is_01(NULL);
+std::wistream is_01(0);
std::wistream is_02(&isbuf_02);
std::wistream is_03(&isbuf_03);
std::wistream is_04(&isbuf_04);
@@ -59,11 +59,8 @@ bool test01() {
long double ld1 = 0;
// process alphanumeric versions of bool values
- std::ios_base::fmtflags fmt = is_02.flags();
- bool testfmt = fmt & std::ios_base::boolalpha;
is_02.setf(std::ios_base::boolalpha);
- fmt = is_02.flags();
- testfmt = fmt & std::ios_base::boolalpha;
+ is_02.flags();
is_02 >> b1;
VERIFY( b1 == 1 );
is_02 >> b1;
@@ -71,8 +68,7 @@ bool test01() {
// process numeric versions of of bool values
is_02.unsetf(std::ios_base::boolalpha);
- fmt = is_02.flags();
- testfmt = fmt & std::ios_base::boolalpha;
+ is_02.flags();
is_02 >> b1;
VERIFY( b1 == 0 );
is_02 >> b1;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
index 6e3b0888e73..dcadf8669a2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -17,10 +18,10 @@
// 27.6.1.2.2 arithmetic extractors
-// XXX This test fails on sparc-solaris2 because of a bug in libc
+// XXX This test fails on Solaris 8 and 9 because of a bug in libc
// XXX sscanf for very long input. See:
// XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
-// { dg-do run { xfail { { sparc*-*-solaris2* } || lax_strtofp } } }
+// { dg-do run { xfail { { *-*-solaris2.[89] } || lax_strtofp } } }
#include <istream>
#include <sstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
index c6fba2f2001..7e4387d315d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
@@ -1,6 +1,6 @@
// 1999-07-26 bkoz
-// Copyright (C) 1999, 2003, 2005, 2009 Free Software Foundation
+// Copyright (C) 1999, 2003, 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,7 +32,7 @@ void test01()
std::stringbuf isbuf_01(std::ios_base::in);
std::stringbuf isbuf_02(str_02, std::ios_base::in);
- std::istream is_01(NULL);
+ std::istream is_01(0);
std::istream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
index edff0307194..812d5413412 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
@@ -1,6 +1,6 @@
// 1999-07-26 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,7 +34,7 @@ void test02()
std::stringbuf isbuf_01(std::ios_base::in);
std::stringbuf isbuf_02(str_02, std::ios_base::in);
- std::istream is_01(NULL);
+ std::istream is_01(0);
std::istream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
statefail = std::ios_base::failbit;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
index cfaf5b11b61..551cb111a49 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
@@ -1,6 +1,6 @@
// 1999-07-26 bkoz
-// Copyright (C) 1999, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,7 +32,7 @@ void test01()
std::stringbuf isbuf_01(std::ios_base::in);
std::stringbuf isbuf_02(str_02, std::ios_base::in);
- std::istream is_01(NULL);
+ std::istream is_01(0);
std::istream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
index 224d0565f3a..a2e480ebce6 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
@@ -1,6 +1,6 @@
// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,7 +39,7 @@ void test02()
sstr >> str;
// 2
- pod_char* chr = NULL;
+ pod_char* chr = 0;
sstr >> chr;
// 3
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
index 2b428037f6b..f7b749a5df0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2005, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,7 +30,7 @@ void test01()
std::wstringbuf isbuf_01(std::ios_base::in);
std::wstringbuf isbuf_02(str_02, std::ios_base::in);
- std::wistream is_01(NULL);
+ std::wistream is_01(0);
std::wistream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
index a6841198d83..a697ef2b256 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,7 +30,7 @@ void test02()
std::wstringbuf isbuf_01(std::ios_base::in);
std::wstringbuf isbuf_02(str_02, std::ios_base::in);
- std::wistream is_01(NULL);
+ std::wistream is_01(0);
std::wistream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
statefail = std::ios_base::failbit;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
index 3ba355d6452..6ea22e395de 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,7 +30,7 @@ void test01()
std::wstringbuf isbuf_01(std::ios_base::in);
std::wstringbuf isbuf_02(str_02, std::ios_base::in);
- std::wistream is_01(NULL);
+ std::wistream is_01(0);
std::wistream is_02(&isbuf_02);
std::ios_base::iostate state1, state2, statefail;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
index ecc50826f9e..854dc7c8565 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
@@ -1,6 +1,7 @@
// 1999-07-28 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -41,7 +42,7 @@ void test01()
std::stringbuf isbuf_04(str_02, std::ios_base::in);
std::stringbuf isbuf_05(str_02, std::ios_base::in | std::ios_base::out);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_01(&isbuf_01);
std::istream is_02(&isbuf_02);
std::istream is_03(&isbuf_03);
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
index beab22c0a21..96ba7193021 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,7 @@ void test2()
{
bool test __attribute__((unused)) = true;
istringstream stream;
- stream >> static_cast<streambuf*>(NULL);
+ stream >> static_cast<streambuf*>(0);
VERIFY(stream.rdstate() & ios_base::failbit);
}
@@ -40,7 +40,7 @@ void test4()
try
{
- stream >> static_cast<streambuf*>(NULL);
+ stream >> static_cast<streambuf*>(0);
VERIFY(false);
}
catch (ios_base::failure&)
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
index 809c0083502..eab6650b1ac 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,7 +38,7 @@ void test01()
std::wstringbuf isbuf_04(str_02, std::ios_base::in);
std::wstringbuf isbuf_05(str_02, std::ios_base::in | std::ios_base::out);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_01(&isbuf_01);
std::wistream is_02(&isbuf_02);
std::wistream is_03(&isbuf_03);
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
index eddef0ae43e..bc04b7d9b22 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,7 @@ void test2()
{
bool test __attribute__((unused)) = true;
wistringstream stream;
- stream >> static_cast<wstreambuf*>(NULL);
+ stream >> static_cast<wstreambuf*>(0);
VERIFY( stream.rdstate() & ios_base::failbit );
}
@@ -40,7 +40,7 @@ void test4()
try
{
- stream >> static_cast<wstreambuf*>(NULL);
+ stream >> static_cast<wstreambuf*>(0);
VERIFY( false );
}
catch (ios_base::failure&)
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
index 19169d97934..f7957d8a51c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
@@ -1,6 +1,7 @@
// 1999-08-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +42,7 @@ test03()
std::stringbuf sbuf_04(str01, std::ios_base::in);
std::stringbuf sbuf_05(str01, std::ios_base::in);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_04(&sbuf_04);
std::istream is_05(&sbuf_05);
std::ios_base::iostate statefail, stateeof;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
index 7168aefcdbb..b3027c3af95 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,7 +39,7 @@ test03()
std::wstringbuf sbuf_04(str01, std::ios_base::in);
std::wstringbuf sbuf_05(str01, std::ios_base::in);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_04(&sbuf_04);
std::wistream is_05(&sbuf_05);
std::ios_base::iostate statefail, stateeof;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
index 67b1955fcd6..48b245f9b96 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
@@ -1,6 +1,7 @@
// 1999-08-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +42,7 @@ test02()
std::stringbuf sbuf_04(str01, std::ios_base::in);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_04(&sbuf_04);
std::ios_base::iostate state1, state2, statefail, stateeof;
statefail = std::ios_base::failbit;
@@ -54,7 +55,7 @@ test02()
is_00.getline(carray1, 20, '*');
state2 = is_00.rdstate();
// make sure failbit was set, since we couldn't extract
- // from the NULL streambuf...
+ // from the null streambuf...
VERIFY( state1 != state2 );
VERIFY( static_cast<bool>(state2 & statefail) );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
index 49305a33171..2445dd4f749 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,7 +39,7 @@ test02()
std::wstringbuf sbuf_04(str01, std::ios_base::in);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_04(&sbuf_04);
std::ios_base::iostate state1, state2, statefail, stateeof;
statefail = std::ios_base::failbit;
@@ -52,7 +52,7 @@ test02()
is_00.getline(carray1, 20, L'*');
state2 = is_00.rdstate();
// make sure failbit was set, since we couldn't extract
- // from the NULL streambuf...
+ // from the null streambuf...
VERIFY( state1 != state2 );
VERIFY( static_cast<bool>(state2 & statefail) );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
index e70c1ab5fb2..4e0ce25aa32 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
@@ -1,6 +1,7 @@
// 1999-08-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,12 +37,10 @@ test01()
std::stringbuf isbuf_03(str_02, std::ios_base::in);
std::stringbuf isbuf_04(str_02, std::ios_base::in);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_03(&isbuf_03);
std::istream is_04(&isbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
+ std::ios_base::iostate state1, state2;
// istream& read(char_type* s, streamsize n)
char carray[60] = "";
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
index 6254428d368..c4a7a33d002 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,12 +34,10 @@ test01()
std::wstringbuf isbuf_03(str_02, std::ios_base::in);
std::wstringbuf isbuf_04(str_02, std::ios_base::in);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_03(&isbuf_03);
std::wistream is_04(&isbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
+ std::ios_base::iostate state1, state2;
// istream& read(char_type* s, streamsize n)
wchar_t carray[60] = L"";
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
index 6d501646ad6..39a3fdff396 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
@@ -1,6 +1,7 @@
// 1999-08-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,12 +37,10 @@ test01()
std::stringbuf isbuf_03(str_02, std::ios_base::in);
std::stringbuf isbuf_04(str_02, std::ios_base::in);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_03(&isbuf_03);
std::istream is_04(&isbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
+ std::ios_base::iostate state1, state2;
char carray[60] = "";
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
index b4c0e32c46f..612e60600ff 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,12 +34,10 @@ test01()
std::wstringbuf isbuf_03(str_02, std::ios_base::in);
std::wstringbuf isbuf_04(str_02, std::ios_base::in);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_03(&isbuf_03);
std::wistream is_04(&isbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
+ std::ios_base::iostate state1, state2;
wchar_t carray[60] = L"";
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
index b9ebe7dfe9a..3879f7b422d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
@@ -1,6 +1,6 @@
// 1999-08-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,7 @@ test01()
std::stringbuf isbuf_03(str_02, std::ios_base::in);
std::stringbuf isbuf_04(str_02, std::ios_base::in);
- std::istream is_00(NULL);
+ std::istream is_00(0);
std::istream is_03(&isbuf_03);
std::istream is_04(&isbuf_04);
std::ios_base::iostate state1, state2, statefail, stateeof;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
index 1485aa1abf0..508e0c8cb4d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +31,7 @@ test01()
std::wstringbuf isbuf_03(str_02, std::ios_base::in);
std::wstringbuf isbuf_04(str_02, std::ios_base::in);
- std::wistream is_00(NULL);
+ std::wistream is_00(0);
std::wistream is_03(&isbuf_03);
std::wistream is_04(&isbuf_04);
std::ios_base::iostate state1, state2, statefail, stateeof;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
index 0fea44568d0..899a48d7842 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
@@ -1,6 +1,6 @@
// 2000-06-29 bkoz
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@ void test06(void)
// seekg
{
istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
index ec09e45c96d..d428a88ba41 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,7 +32,7 @@ void test06(void)
// seekg
{
wistringstream iss(num1);
- wistream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
index 1b8f18d72b1..e4b4914ef48 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
@@ -1,6 +1,6 @@
// 2000-06-29 bkoz
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,7 +35,7 @@ void test06(void)
// tellg
{
istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
@@ -47,7 +47,7 @@ void test06(void)
// seekg
{
istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
index cdbbd0cc6d1..61613817b4d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
@@ -32,7 +32,7 @@ void test06(void)
// tellg
{
wistringstream iss(num1);
- wistream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
@@ -44,7 +44,7 @@ void test06(void)
// seekg
{
wistringstream iss(num1);
- wistream::pos_type pos1 = iss.tellg();
+ iss.tellg();
int asNum = 0;
iss >> asNum;
VERIFY( test = iss.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
index 703ccedac6d..b59d08839db 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
@@ -1,6 +1,7 @@
// 1999-07-22 bkoz
-// Copyright (C) 1994, 1999, 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1994, 1999, 2001, 2003, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +34,6 @@ void test01(void)
std::string str02(str_lit01);
std::string str04;
std::string str05;
- std::ios_base::iostate flag3, flag4, flag5;
// template<_CharT, _Traits>
// basic_istream<_CharT, _Traits>& ws(basic_istream<_Char, _Traits>& is)
@@ -60,9 +60,6 @@ void test01(void)
VERIFY( str05 == "barbara" );
VERIFY( str05 == str04 );
- flag3 = std::ios_base::eofbit;
- flag4 = std::ios_base::badbit;
- flag5 = std::ios_base::failbit;
VERIFY( !iss01.fail() );
VERIFY( !iss02.fail() );
VERIFY( !iss01.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
index d00dce70e3e..8e60163c148 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -31,7 +31,6 @@ void test01(void)
std::wstring str02(str_lit01);
std::wstring str04;
std::wstring str05;
- std::ios_base::iostate flag3, flag4, flag5;
// template<_CharT, _Traits>
// basic_istream<_CharT, _Traits>& ws(basic_istream<_Char, _Traits>& is)
@@ -58,9 +57,6 @@ void test01(void)
VERIFY( str05 == L"barbara" );
VERIFY( str05 == str04 );
- flag3 = std::ios_base::eofbit;
- flag4 = std::ios_base::badbit;
- flag5 = std::ios_base::failbit;
VERIFY( !iss01.fail() );
VERIFY( !iss02.fail() );
VERIFY( !iss01.eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
index 04df562ffda..cb683666ccc 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
@@ -1,7 +1,7 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5347 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -51,10 +51,10 @@ main()
#endif
for (int i = 0; i < max_thread_count; i++)
- pthread_create (&tid[i], NULL, thread_main, 0);
+ pthread_create (&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join (tid[i], NULL);
+ pthread_join (tid[i], 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc
index 125440b0b20..07fb7b82eb2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc
@@ -1,6 +1,7 @@
// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +35,7 @@ void test07()
try
{
- gnu_ostr obj(NULL);
+ gnu_ostr obj(0);
}
catch(std::exception& obj)
{
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
index d3c968cf61d..d0ffa2c2a4a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// 1999-11-15 Kevin Ediger <kediger@licor.com>
// test the floating point inserters (facet num_put)
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
index 66d5873ca86..e786f7589f3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE" }
// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
index 8b85ca21cea..5ec21367b08 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
@@ -1,6 +1,7 @@
// 1999-08-16 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003, 2005, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2002, 2003, 2005, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,9 +36,6 @@ test04()
std::ostringstream oss_02(str_01, std::ios_base::out);
- std::ios_base::iostate statefail;
- statefail = std::ios_base::failbit;
-
// template<_CharT, _Traits>
// basic_ostream& operator<<(ostream&, const char*)
for (int i = 0; i < i_max; ++i)
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
index 85af3666a3b..f38e2e703db 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
@@ -1,6 +1,6 @@
// 1999-08-16 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +27,7 @@
void test08()
{
bool test __attribute__((unused)) = true;
- char* pt = NULL;
+ char* pt = 0;
// 1
std::ostringstream oss;
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
index cdcb3545c43..902539e8c20 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
@@ -1,6 +1,6 @@
// 1999-08-16 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,9 +35,6 @@ test04()
std::wostringstream oss_02(str_01, std::ios_base::out);
- std::ios_base::iostate statefail;
- statefail = std::ios_base::failbit;
-
// template<_CharT, _Traits>
// basic_ostream& operator<<(ostream&, const wchar_t*)
for (int i = 0; i < i_max; ++i)
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
index a414076b20a..76490b3c590 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
@@ -1,6 +1,6 @@
// 1999-08-16 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +27,7 @@
void test08()
{
bool test __attribute__((unused)) = true;
- char* pt = NULL;
+ char* pt = 0;
// 2
std::wostringstream woss;
@@ -40,7 +40,7 @@ void test08()
VERIFY( woss.good() );
// 3
- wchar_t* wt = NULL;
+ wchar_t* wt = 0;
woss.clear();
woss << wt;
VERIFY( woss.bad() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
index c53c160f736..0c94c68156f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
@@ -1,7 +1,8 @@
// 1999-08-16 bkoz
// 1999-11-01 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,7 +47,7 @@ test02()
// filebuf-> NULL
std::ifstream f_in1(name_01);
std::ofstream f_out1(name_02);
- std::stringbuf* strbuf01 = NULL;
+ std::stringbuf* strbuf01 = 0;
iostate state01 = f_in1.rdstate();
f_in1 >> strbuf01;
iostate state02 = f_in1.rdstate();
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
index 3e5dddc16e4..6d28c5f0459 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,7 @@ void test1()
bool test __attribute__((unused)) = true;
ostringstream stream;
- stream << static_cast<streambuf*>(NULL);
+ stream << static_cast<streambuf*>(0);
VERIFY( stream.rdstate() & ios_base::badbit );
}
@@ -42,7 +42,7 @@ void test3()
try
{
- stream << static_cast<streambuf*>(NULL);
+ stream << static_cast<streambuf*>(0);
VERIFY( false );
}
catch (ios_base::failure&)
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
index bde6ba5985c..6e12a65bfbe 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005, 2009 Free Software Foundation
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -41,7 +41,7 @@ test02()
// filebuf-> NULL
std::wifstream f_in1(name_01);
std::wofstream f_out1(name_02);
- std::wstringbuf* strbuf01 = NULL;
+ std::wstringbuf* strbuf01 = 0;
iostate state01 = f_in1.rdstate();
f_in1 >> strbuf01;
iostate state02 = f_in1.rdstate();
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
index 5df2990fc5a..16f9108a332 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-require-swprintf "" }
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,7 +22,7 @@
#include <sstream>
#include <system_error>
#include <algorithm>
-#include <wchar.h>
+#include <cwchar>
#include <testsuite_hooks.h>
// Effects: os << ec.category().name() << ':' << ec.value();
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
index 7e5cd6ddb65..076aece6475 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,7 @@ void test1()
bool test __attribute__((unused)) = true;
wostringstream stream;
- stream << static_cast<wstreambuf*>(NULL);
+ stream << static_cast<wstreambuf*>(0);
VERIFY( stream.rdstate() & ios_base::badbit );
}
@@ -42,7 +42,7 @@ void test3()
try
{
- stream << static_cast<wstreambuf*>(NULL);
+ stream << static_cast<wstreambuf*>(0);
VERIFY( false );
}
catch (ios_base::failure&)
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
index 8a4088c95ba..00becef2587 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
@@ -1,6 +1,7 @@
// 1999-10-14 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,7 +41,7 @@ void test01()
const string_type str01;
- stringbuf_type* strbuf01 = NULL;
+ stringbuf_type* strbuf01 = 0;
stringbuf_type strbuf02(str01);
ostream_type ostr01(strbuf01);
ostream_type ostr02(&strbuf02);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
index 81a8c96652d..5b87d84c022 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
@@ -1,7 +1,7 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5347 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,10 +48,10 @@ main()
#endif
for (int i = 0; i < max_thread_count; i++)
- pthread_create (&tid[i], NULL, thread_main, 0);
+ pthread_create (&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join (tid[i], NULL);
+ pthread_join (tid[i], 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
index 08ff1d2b9a1..5fe71886897 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
@@ -1,6 +1,6 @@
// 2001-05-23 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,10 +30,6 @@ void test01()
const std::string str01 = "123";
std::string str02;
- std::ios_base::iostate statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
// string str() const
str02 = os01.str();
VERIFY( str00 == str02 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
index ca8a69a5e3d..b66d8fa2524 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,10 +28,6 @@ void test01()
const std::wstring str01 = L"123";
std::wstring str02;
- std::ios_base::iostate statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
// string str() const
str02 = os01.str();
VERIFY( str00 == str02 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
index a53be93fb70..5b54ebc3637 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
index b30ae62ab5e..4b3c903c1a7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
index 9d31e2e6373..dcc42ee7a5d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 1999-10-11 bkoz
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
index 6aa85a6a4ad..b0e7a61b6be 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS.UTF-8" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
index c088694bdd3..15007de2aea 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
index 26b09e3e7e3..1d4d494c415 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 1999-10-11 bkoz
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
index 918726c8778..65aff09ec27 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
@@ -1,6 +1,7 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +41,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
index 384ea29afb0..30b67e4e6d1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +40,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
index 37d729c92ad..cbf17820f38 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
@@ -1,6 +1,7 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +41,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
index 16df0994dde..0c5c63f337d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +40,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
index be6145c6e6a..d1530b18f3f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
@@ -1,6 +1,7 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +41,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
index 948865c5a64..66b4af5d3e6 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +40,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
index 11cda23da15..440d82b5abe 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
index d04be240824..5e7166fdd3d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
index 0fe945eec61..2874b0eea4e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
@@ -1,6 +1,7 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,12 +41,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
index 227a1c7a54a..dda78bde457 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
index b03ab172927..09b263b6c7b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
@@ -1,6 +1,7 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -41,12 +42,12 @@ public:
check_pointers()
{
bool test __attribute__((unused)) = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
+ VERIFY( !this->eback() );
+ VERIFY( !this->gptr() );
+ VERIFY( !this->egptr() );
+ VERIFY( !this->pbase() );
+ VERIFY( !this->pptr() );
+ VERIFY( !this->epptr() );
return test;
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
index b40e24ce8a3..9b148bab93f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
index c7677349592..bfc8643510f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
index dedd93dbd48..7182fd912ba 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
@@ -1,4 +1,5 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "en_US" }
+// { dg-require-namedlocale "de_DE" }
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
index 2763a01c3fc..f60911bdc43 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
@@ -1,7 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2009
+// 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,14 +33,13 @@ std::stringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
// int_type sbumpc()
// if read_cur not avail, return uflow(), else return *read_cur & increment
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
index 5b0f9862bfd..3ec279a19ef 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,14 +32,13 @@ std::wstringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
// int_type sbumpc()
// if read_cur not avail, return uflow(), else return *read_cur & increment
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
index ee983c256cc..142cde9c7f2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -36,7 +36,7 @@ void test04()
typedef std::stringbuf::off_type off_type;
int_type c1 = strb_01.sbumpc();
- int_type c2, c3;
+ int_type c2;
// BUFFER MANAGEMENT & POSITIONING
@@ -84,7 +84,7 @@ void test04()
c1 = strb_01.sgetc();
c2 = strb_01.sungetc();
strmsz_2 = strb_01.in_avail(); // 1
- c3 = strb_01.sgetc();
+ strb_01.sgetc();
VERIFY( c1 != c2 );
VERIFY( strmsz_2 != strmsz_1 );
VERIFY( strmsz_2 == 1 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
index 288e76cae8a..1b0ee5fe58f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -36,7 +36,7 @@ void test04()
typedef std::wstringbuf::off_type off_type;
int_type c1 = strb_01.sbumpc();
- int_type c2, c3;
+ int_type c2;
// BUFFER MANAGEMENT & POSITIONING
@@ -84,7 +84,7 @@ void test04()
c1 = strb_01.sgetc();
c2 = strb_01.sungetc();
strmsz_2 = strb_01.in_avail(); // 1
- c3 = strb_01.sgetc();
+ strb_01.sgetc();
VERIFY( c1 != c2 );
VERIFY( strmsz_2 != strmsz_1 );
VERIFY( strmsz_2 == 1 );
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
index 4cdca1afc6e..53f98bf98c3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,6 @@ void test04()
typedef std::stringbuf::off_type off_type;
int_type c1 = strb_01.sbumpc();
- int_type c2;
int_type c3 = strb_01.sbumpc();
pos_type pt_1(off_type(-1));
@@ -58,7 +57,7 @@ void test04()
off_1 = off_type(pt_1);
c1 = strb_01.snextc(); //current in pointer +1
VERIFY( c1 == 'o' );
- c2 = strb_01.sputc('x'); //test current out pointer
+ strb_01.sputc('x'); //test current out pointer
str_tmp = std::string("myxonos. . . or what?");
VERIFY( strb_01.str() == str_tmp );
strb_01.pubsync(); //resets pointers
@@ -67,7 +66,7 @@ void test04()
VERIFY( off_1 == off_2 );
c3 = strb_01.snextc(); //current in pointer +1
VERIFY( c1 == c3 );
- c2 = strb_01.sputc('x'); //test current out pointer
+ strb_01.sputc('x'); //test current out pointer
str_tmp = std::string("myxonos. . . or what?");
VERIFY( strb_01.str() == str_tmp );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
index 47414b9d0fd..bc01ea64064 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,7 +34,6 @@ void test04()
typedef std::wstringbuf::off_type off_type;
int_type c1 = strb_01.sbumpc();
- int_type c2;
int_type c3 = strb_01.sbumpc();
pos_type pt_1(off_type(-1));
@@ -58,7 +57,7 @@ void test04()
off_1 = off_type(pt_1);
c1 = strb_01.snextc(); //current in pointer +1
VERIFY( c1 == L'o' );
- c2 = strb_01.sputc(L'x'); //test current out pointer
+ strb_01.sputc(L'x'); //test current out pointer
str_tmp = std::wstring(L"myxonos. . . or what?");
VERIFY( strb_01.str() == str_tmp );
strb_01.pubsync(); //resets pointers
@@ -67,7 +66,7 @@ void test04()
VERIFY( off_1 == off_2 );
c3 = strb_01.snextc(); //current in pointer +1
VERIFY( c1 == c3 );
- c2 = strb_01.sputc(L'x'); //test current out pointer
+ strb_01.sputc(L'x'); //test current out pointer
str_tmp = std::wstring(L"myxonos. . . or what?");
VERIFY( strb_01.str() == str_tmp );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
index e686ba24960..f26ec85c565 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,14 +32,13 @@ std::stringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
int_type c3 = strb_01.sbumpc();
int_type c4 = strb_02.sbumpc();
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
index 181dba9fe56..98ca73d75fa 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,14 +32,13 @@ std::wstringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
int_type c3 = strb_01.sbumpc();
int_type c4 = strb_02.sbumpc();
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
index 4348f74692f..2f077a508a9 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
@@ -1,7 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-// 2006, 2007, 2009
+// 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,20 +34,19 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::streamsize strmsz_1, strmsz_2;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
int_type c1 = strb_01.sbumpc();
int_type c2 = strb_02.sbumpc();
strb_01.sbumpc();
int_type c4 = strb_02.sbumpc();
- int_type c5 = strb_03.sbumpc();
+ strb_03.sbumpc();
// int_type sgetc()
// if read_cur not avail, return uflow(), else return *read_cur
@@ -55,13 +54,13 @@ void test04()
int_type c7 = strb_02.sgetc();
strb_01.sgetc();
strb_02.sgetc();
- c5 = strb_03.sgetc();
+ strb_03.sgetc();
// int_type snextc()
// calls sbumpc and if sbumpc != eof, return sgetc
c6 = strb_01.snextc();
c7 = strb_02.snextc();
- c5 = strb_03.snextc();
+ strb_03.snextc();
// streamsize sgetn(char_type *s, streamsize n)
// streamsize xsgetn(char_type *s, streamsize n)
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
index 01a149eda45..5c917e10950 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
@@ -1,7 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2009
+// 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,20 +34,19 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::streamsize strmsz_1, strmsz_2;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
int_type c1 = strb_01.sbumpc();
int_type c2 = strb_02.sbumpc();
strb_01.sbumpc();
int_type c4 = strb_02.sbumpc();
- int_type c5 = strb_03.sbumpc();
+ strb_03.sbumpc();
// int_type sgetc()
// if read_cur not avail, return uflow(), else return *read_cur
@@ -55,13 +54,13 @@ void test04()
int_type c7 = strb_02.sgetc();
strb_01.sgetc();
strb_02.sgetc();
- c5 = strb_03.sgetc();
+ strb_03.sgetc();
// int_type snextc()
// calls sbumpc and if sbumpc != eof, return sgetc
c6 = strb_01.snextc();
c7 = strb_02.snextc();
- c5 = strb_03.snextc();
+ strb_03.snextc();
// streamsize sgetn(char_type *s, streamsize n)
// streamsize xsgetn(char_type *s, streamsize n)
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
index 960e6e9b17f..afe1dfa5750 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
@@ -1,7 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2009
+// 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,14 +33,13 @@ std::stringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
strb_01.sbumpc();
strb_02.sbumpc();
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
index 62d21a7dc81..0154594b689 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
@@ -1,7 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-// 2006, 2007, 2009
+// 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,14 +33,13 @@ std::wstringbuf strb_03(str_03, std::ios_base::out);
void test04()
{
bool test __attribute__((unused)) = true;
- std::streamoff strmof_1(-1), strmof_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
// GET
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- strmof_1 = strb_03.in_avail();
+ strb_01.in_avail();
+ strb_02.in_avail();
+ strb_03.in_avail();
strb_01.sbumpc();
strb_02.sbumpc();
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
index c99c2aa1283..67358a3b911 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,6 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::string str_tmp, str_tmp2;
- std::streamsize strmsz_1, strmsz_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
@@ -44,27 +43,27 @@ void test04()
// PUT
strb_03.str(str_01); //reset
- std::string::size_type sz1 = strb_03.str().length();
- std::string::size_type sz2 = strb_03.str().length();
+ strb_03.str().length();
+ strb_03.str().length();
// streamsize sputn(const char_typs* s, streamsize n)
// write up to n chars to out_cur from s, returning number assigned
// NB *sputn will happily put '\0' into your stream if you give it a chance*
str_tmp = strb_03.str();
- sz1 = str_tmp.length();
- strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
- sz2 = strb_03.str().length();
- strmsz_2 = strb_03.sputn(", i wanna reach out and", 10);
- sz2 = strb_03.str().length();
+ str_tmp.length();
+ strb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ strb_03.str().length();
+ strb_03.sputn(", i wanna reach out and", 10);
+ strb_03.str().length();
str_tmp = strb_02.str();
- strmsz_1 = strb_02.sputn("racadabra", 10);
+ strb_02.sputn("racadabra", 10);
// PUTBACK
// int_type sputbackc(char_type c)
// if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
// otherwise decrements in_cur and returns *gptr()
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
@@ -76,7 +75,7 @@ void test04()
VERIFY( str_tmp.size() == str_tmp2.size() );
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sputbackc('z');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
@@ -88,7 +87,7 @@ void test04()
VERIFY( str_tmp.size() == strb_01.str().size() );
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
@@ -100,7 +99,7 @@ void test04()
VERIFY( strb_01.str() == str_01 );
VERIFY( str_01.size() == strb_01.str().size() );
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sputbackc('x');
VERIFY( c4 == traits_type::eof() );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
index f95a695dd00..e0c91a3b2c0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,6 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::wstring str_tmp, str_tmp2;
- std::streamsize strmsz_1, strmsz_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
@@ -44,27 +43,27 @@ void test04()
// PUT
strb_03.str(str_01); //reset
- std::wstring::size_type sz1 = strb_03.str().length();
- std::wstring::size_type sz2 = strb_03.str().length();
+ strb_03.str().length();
+ strb_03.str().length();
// streamsize sputn(const char_typs* s, streamsize n)
// write up to n chars to out_cur from s, returning number assigned
// NB *sputn will happily put '\0' into your stream if you give it a chance*
str_tmp = strb_03.str();
- sz1 = str_tmp.length();
- strmsz_1 = strb_03.sputn(L"racadabras", 10);//"abracadabras or what?"
- sz2 = strb_03.str().length();
- strmsz_2 = strb_03.sputn(L", i wanna reach out and", 10);
- sz2 = strb_03.str().length();
+ str_tmp.length();
+ strb_03.sputn(L"racadabras", 10);//"abracadabras or what?"
+ strb_03.str().length();
+ strb_03.sputn(L", i wanna reach out and", 10);
+ strb_03.str().length();
str_tmp = strb_02.str();
- strmsz_1 = strb_02.sputn(L"racadabra", 10);
+ strb_02.sputn(L"racadabra", 10);
// PUTBACK
// int_type sputbackc(char_type c)
// if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
// otherwise decrements in_cur and returns *gptr()
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sputbackc(L'z');//"mykonos. . .zor what?"
@@ -76,7 +75,7 @@ void test04()
VERIFY( str_tmp.size() == str_tmp2.size() );
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sputbackc(L'z');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
@@ -88,7 +87,7 @@ void test04()
VERIFY( str_tmp.size() == strb_01.str().size() );
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
@@ -100,7 +99,7 @@ void test04()
VERIFY( strb_01.str() == str_01 );
VERIFY( str_01.size() == strb_01.str().size() );
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sputbackc(L'x');
VERIFY( c4 == traits_type::eof() );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
index 06957dd1926..f88f28e39a1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
index 4b4216b883d..ae07ebf30ed 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
index c05d289846d..c51f47a8d34 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
index 33d1ad79afe..99f7a550993 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
@@ -1,6 +1,6 @@
// 1999-10-11 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ public:
nullsetpbuf()
{
setp(foo, foo + 64);
- setp(NULL, NULL);
+ setp(0, 0);
}
};
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
index 5b1fcfca1d1..ae038e518c3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,6 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::string str_tmp;
- std::streamsize strmsz_1, strmsz_2;
typedef std::stringbuf::int_type int_type;
typedef std::stringbuf::traits_type traits_type;
@@ -44,47 +43,47 @@ void test04()
// PUT
strb_03.str(str_01); //reset
- std::string::size_type sz1 = strb_03.str().length();
- std::string::size_type sz2 = strb_03.str().length();
+ strb_03.str().length();
+ strb_03.str().length();
// streamsize sputn(const char_typs* s, streamsize n)
// write up to n chars to out_cur from s, returning number assigned
// NB *sputn will happily put '\0' into your stream if you give it a chance*
str_tmp = strb_03.str();
- sz1 = str_tmp.length();
- strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
- sz2 = strb_03.str().length();
- strmsz_2 = strb_03.sputn(", i wanna reach out and", 10);
- sz2 = strb_03.str().length();
+ str_tmp.length();
+ strb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ strb_03.str().length();
+ strb_03.sputn(", i wanna reach out and", 10);
+ strb_03.str().length();
str_tmp = strb_02.str();
- strmsz_1 = strb_02.sputn("racadabra", 10);
+ strb_02.sputn("racadabra", 10);
// PUTBACK
// int_type sputbackc(char_type c)
// if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
// otherwise decrements in_cur and returns *gptr()
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
c3 = strb_01.sgetc();
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sputbackc('z');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
c2 = strb_01.sputbackc('y');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sputbackc('x');
// int_type sungetc()
@@ -92,7 +91,7 @@ void test04()
// return to_int_type(*gptr())
for (int i = 0; i<12; ++i)
strb_01.sbumpc();
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sungetc();//"mykonos. . . or what?"
@@ -105,7 +104,7 @@ void test04()
VERIFY( str_01.size() == strb_01.str().size() );
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sungetc();//"mykonos. . . or what?"
c3 = strb_01.sgetc();
@@ -117,7 +116,7 @@ void test04()
VERIFY( str_01.size() == strb_01.str().size() );
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
@@ -129,7 +128,7 @@ void test04()
VERIFY( strb_01.str() == str_01 );
VERIFY( str_01.size() == strb_01.str().size() );
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sungetc();
VERIFY( c4 == traits_type::eof() );
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
index 360a1abb2d0..767b7eac50d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
@@ -1,6 +1,6 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == wchar_t
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,7 +33,6 @@ void test04()
{
bool test __attribute__((unused)) = true;
std::wstring str_tmp;
- std::streamsize strmsz_1, strmsz_2;
typedef std::wstringbuf::int_type int_type;
typedef std::wstringbuf::traits_type traits_type;
@@ -44,47 +43,47 @@ void test04()
// PUT
strb_03.str(str_01); //reset
- std::wstring::size_type sz1 = strb_03.str().length();
- std::wstring::size_type sz2 = strb_03.str().length();
+ strb_03.str().length();
+ strb_03.str().length();
// streamsize sputn(const char_typs* s, streamsize n)
// write up to n chars to out_cur from s, returning number assigned
// NB *sputn will happily put '\0' into your stream if you give it a chance*
str_tmp = strb_03.str();
- sz1 = str_tmp.length();
- strmsz_1 = strb_03.sputn(L"racadabras", 10);//"abracadabras or what?"
- sz2 = strb_03.str().length();
- strmsz_2 = strb_03.sputn(L", i wanna reach out and", 10);
- sz2 = strb_03.str().length();
+ str_tmp.length();
+ strb_03.sputn(L"racadabras", 10);//"abracadabras or what?"
+ strb_03.str().length();
+ strb_03.sputn(L", i wanna reach out and", 10);
+ strb_03.str().length();
str_tmp = strb_02.str();
- strmsz_1 = strb_02.sputn(L"racadabra", 10);
+ strb_02.sputn(L"racadabra", 10);
// PUTBACK
// int_type sputbackc(char_type c)
// if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
// otherwise decrements in_cur and returns *gptr()
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
c3 = strb_01.sgetc();
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sputbackc(L'z');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
c2 = strb_01.sputbackc(L'y');//"mykonos. . . or what?"
c3 = strb_01.sgetc();
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sputbackc(L'x');
// int_type sungetc()
@@ -92,7 +91,7 @@ void test04()
// return to_int_type(*gptr())
for (int i = 0; i<12; ++i)
strb_01.sbumpc();
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
str_tmp = strb_01.str();
c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
c2 = strb_01.sungetc();//"mykonos. . . or what?"
@@ -105,7 +104,7 @@ void test04()
VERIFY( str_01.size() == strb_01.str().size() );
//test for _in_cur == _in_beg
strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
c2 = strb_01.sungetc();//"mykonos. . . or what?"
c3 = strb_01.sgetc();
@@ -117,7 +116,7 @@ void test04()
VERIFY( str_01.size() == strb_01.str().size() );
// test for replacing char with identical one
strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
+ strb_01.in_avail();
strb_01.sbumpc();
strb_01.sbumpc();
c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
@@ -129,7 +128,7 @@ void test04()
VERIFY( strb_01.str() == str_01 );
VERIFY( str_01.size() == strb_01.str().size() );
//test for ios_base::out
- strmsz_2 = strb_03.in_avail();
+ strb_03.in_avail();
c4 = strb_03.sungetc();
VERIFY( c4 == traits_type::eof() );
}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
index 46f0d1276fe..accb5653503 100644
--- a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -60,7 +60,6 @@ void test02()
pos04 += off02;
VERIFY( pos03 == pos04 );
std::streampos pos05 = pos03;
- std::streampos pos06 = pos03 + off02;
VERIFY ( pos05 == pos03 );
// q = p - o
@@ -69,7 +68,6 @@ void test02()
pos04 -= off02;
VERIFY( pos03 == pos04 );
std::streampos pos07 = pos03;
- std::streampos pos08 = pos03 - off02;
VERIFY ( pos07 == pos03 );
// o = p - q
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
index abef0074ac6..34c557bfb16 100644
--- a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
@@ -1,6 +1,6 @@
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2001, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,6 +34,7 @@ void test03()
// casts to const streamoff
const std::streampos pos01 = 0;
off01 = std::streamoff(pos01);
+ off01 = off01; // Suppress unused warning.
// equality/inequality with const args
const std::streampos pos02(54);
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
index 5c89aa5a361..9e3cad5d59e 100644
--- a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2009
+// Copyright (C) 2003, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,6 +32,8 @@ void test04()
// Explicit conversion
n = static_cast<long>(pos); // { dg-error "invalid static_cast" "" { xfail *-*-* } }
+
+ n = n; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
index 831bfd453fc..a32e34adfac 100644
--- a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
@@ -2,7 +2,7 @@
// 2006-03-13 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,7 +32,9 @@ void test01()
test01 = pos01 == -1;
test01 = -1 == pos01;
+ test01 = test01; // Suppress unused warning.
test02 = pos02 != -1;
test02 = -1 != pos02;
+ test02 = test02; // Suppress unused warning.
}
diff --git a/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
index 8ba12fb7ea6..b59638fc341 100644
--- a/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cinttypes> // { dg-excess-errors "In file included from" }
+#include <cinttypes>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
index f569a7bce82..a7adff4d3f4 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
@@ -34,5 +34,5 @@ void test01()
}
// { dg-error "synthesized" "" { target *-*-* } 33 }
// { dg-error "within this context" "" { target *-*-* } 26 }
-// { dg-error "is private" "" { target *-*-* } 788 }
+// { dg-error "is private" "" { target *-*-* } 788 }
// { dg-error "operator=" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
index 012482299e8..44f7af87da8 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
// Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,7 @@ void test02()
test_base io1;
test_base io2 = io1;
}
-// { dg-error "within this context" "" { target *-*-* } 27 }
+// { dg-error "within this context" "" { target *-*-* } 26 }
// { dg-error "synthesized" "" { target *-*-* } 33 }
// { dg-error "is private" "" { target *-*-* } 785 }
// { dg-error "copy constructor" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc b/libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc
index 7b3ee83df91..ddb29c5efc7 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc
@@ -1,6 +1,6 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -34,6 +34,8 @@ void allocate_on_stack(void)
__extension__ char array[num];
for (size_t i = 0; i < num; i++)
array[i]=0;
+ for (size_t i = 0; i < num; i++)
+ array[i]=array[i]; // Suppress unused warning.
}
void test04()
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc b/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
index 7ed97c2b81b..29ec9754870 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
@@ -41,7 +41,7 @@ void
test01()
{
std::ios_base::sync_with_stdio();
- std::freopen("ios_base_members_static-1.txt", "w", stderr);
+ VERIFY( std::freopen("ios_base_members_static-1.txt", "w", stderr) );
for (int i = 0; i < 2; i++)
{
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc
index 4e52f9a69e3..681bac56f48 100644
--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc
@@ -1,5 +1,5 @@
// { dg-options "-std=gnu++0x" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2010-03-01 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc
index e4f6074c08d..a288f2e2b77 100644
--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc
@@ -1,5 +1,5 @@
// { dg-options "-std=gnu++0x" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2010-03-01 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc
index 4a49ca1ce31..2e67753643d 100644
--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc
@@ -1,5 +1,5 @@
// { dg-options "-std=gnu++0x" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2010-03-01 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc
index bfb03efcf8b..38348687ae2 100644
--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc
@@ -1,5 +1,5 @@
// { dg-options "-std=gnu++0x" }
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE@euro" }
// 2010-03-01 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/10.cc b/libstdc++-v3/testsuite/27_io/objects/char/10.cc
index a744e787ac6..eebebc20e30 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/10.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/10.cc
@@ -1,6 +1,6 @@
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,7 +32,7 @@ void test10()
const char* name = "filebuf_virtuals-1.txt";
FILE* ret = freopen(name, "r", stdin);
- VERIFY( ret != NULL );
+ VERIFY( ret );
streampos p1 = cin.tellg();
VERIFY( p1 != streampos(-1) );
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
index 2c6bbd60403..e4982c5e768 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
@@ -28,7 +28,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
char c1;
char c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
index 23ab8eea888..f18e5d393c7 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
@@ -24,7 +24,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
char c1;
int c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
index 5158003410e..3b83ef176cd 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
@@ -25,7 +25,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
char buf[2];
VERIFY( std::cin.rdbuf()->sgetn(buf, 2) == 2 );
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
index 02f73b6211c..0f8600dbb40 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
@@ -24,7 +24,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
char buf[2];
VERIFY( std::cin.rdbuf()->sgetn(buf, 2) == 2 );
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
index 0a0159f82c2..dd544b7370e 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
@@ -33,7 +33,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
char c1;
int c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/5268.cc b/libstdc++-v3/testsuite/27_io/objects/char/5268.cc
index 44f569c85e6..b7c0ac1df3d 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/5268.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/5268.cc
@@ -1,6 +1,6 @@
// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +27,7 @@ void test04()
std::stringbuf b1;
std::cout.rdbuf( &b1 );
std::cout << "hello\n";
- std::cout.rdbuf(NULL);
+ std::cout.rdbuf(0);
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/9.cc b/libstdc++-v3/testsuite/27_io/objects/char/9.cc
index 1ba5bd12d53..e4905bb46f2 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/9.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/9.cc
@@ -34,7 +34,7 @@ void test09()
fputs("abc\n", fout);
fclose(fout);
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
// basic_streambuf::showmanyc returns 0.
VERIFY( 0 == std::cin.rdbuf()->in_avail() );
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc b/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
index 59b8f4d09c5..8ca77c76e75 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
@@ -3,7 +3,7 @@
// 2003-04-30 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -58,7 +58,7 @@ bool test01()
if (child == 0)
{
FILE* file = fopen(name, "r+");
- VERIFY( file != NULL );
+ VERIFY( file != 0 );
fputs("Whatever\n", file);
fflush(file);
s1.signal();
@@ -68,7 +68,7 @@ bool test01()
exit(0);
}
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
s1.wait();
int c1 = fgetc(stdin);
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
index 672f0c15439..1030e75be0a 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
@@ -95,7 +95,7 @@ void test10()
VERIFY( n == e_size );
fclose(file);
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
wchar_t* wbuf = new wchar_t[i_size + 10];
wcin.read(wbuf, i_size + 10);
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
index c9c386f4707..7799591f4c1 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
@@ -90,7 +90,7 @@ void test11()
};
size_t i_size = wcslen(i_lit);
- freopen(name, "w", stdout);
+ VERIFY( freopen(name, "w", stdout) );
wcout.write(i_lit, i_size);
wcout.flush();
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
index b910fa1cd2d..e94abdd624d 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
index 8489dbb47df..58a40ce91c0 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
@@ -26,7 +26,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
wchar_t c1;
wchar_t c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
index 82c1ba2b3a3..7eaef212f07 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
@@ -23,7 +23,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
wchar_t c1;
std::wint_t c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
index 67f3a5b8b5b..8e236ab30cf 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
@@ -27,7 +27,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
wchar_t buf[2];
VERIFY( std::wcin.rdbuf()->sgetn(buf, 2) == 2 );
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
index fc1191f9f2e..3649e7e2259 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
@@ -23,7 +23,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
wchar_t buf[2];
VERIFY( std::wcin.rdbuf()->sgetn(buf, 2) == 2 );
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
index 1672a0ee925..49486e3c450 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
@@ -29,7 +29,7 @@
void
test01()
{
- std::freopen("cin_unget-1.txt", "r", stdin);
+ VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
wchar_t c1;
std::wint_t c2;
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
index 4f8d038979b..43b660246c2 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "se_NO.UTF-8" }
// 2003-09-04 Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc
index 918d4c5d7d6..04571cc63ed 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc
@@ -1,6 +1,6 @@
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,7 +27,7 @@ void test04()
std::wstringbuf b1;
std::wcout.rdbuf( &b1 );
std::wcout << L"hello\n";
- std::wcout.rdbuf(NULL);
+ std::wcout.rdbuf(0);
}
int main()
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
index dcaf9bc2540..717bbc12a0e 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "de_DE.ISO-8859-15@euro" }
// 2003-04-30 Petur Runolfsson <peturr02@ru.is>
@@ -38,7 +38,7 @@ void test01()
locale loc (locale("de_DE.ISO-8859-15@euro"));
locale::global(loc); // Set locale for stdin
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
wcin.imbue(loc);
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
index 08d544ef6b3..ca470dac9eb 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
@@ -67,7 +67,7 @@ bool test01()
exit(0);
}
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
s1.wait();
wint_t c1 = fgetwc(stdin);
diff --git a/libstdc++-v3/testsuite/27_io/types/2.cc b/libstdc++-v3/testsuite/27_io/types/2.cc
index 009e6f6af8d..33db5fed156 100644
--- a/libstdc++-v3/testsuite/27_io/types/2.cc
+++ b/libstdc++-v3/testsuite/27_io/types/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003, 2004, 2009 Free Software Foundation
+// Copyright (C) 2003, 2004, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,6 +30,7 @@ void test01()
// Wrapped in pos_type is EOF.
soff = -1;
+ soff = soff; // Suppress unused warning.
}
int main(void)
diff --git a/libstdc++-v3/testsuite/28_regex/03_requirements/typedefs.cc b/libstdc++-v3/testsuite/28_regex/03_requirements/typedefs.cc
new file mode 100644
index 00000000000..072d5d07f40
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/03_requirements/typedefs.cc
@@ -0,0 +1,38 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+
+#include <regex>
+
+void
+test01()
+{
+ typedef std::regex_traits<char> traits;
+
+ typedef traits::char_type char_type;
+ typedef traits::string_type string_type;
+ typedef traits::locale_type locale_type;
+ typedef traits::char_class_type char_class_type;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/04_header/regex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/28_regex/04_header/regex/std_c++0x_neg.cc
new file mode 100644
index 00000000000..e8ddb77bbb3
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/04_header/regex/std_c++0x_neg.cc
@@ -0,0 +1,23 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++98" }
+
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <regex> // { dg-excess-errors "In file included from" }
+
+
diff --git a/libstdc++-v3/testsuite/28_regex/05_constants/error_type.cc b/libstdc++-v3/testsuite/28_regex/05_constants/error_type.cc
new file mode 100644
index 00000000000..1841a462688
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/05_constants/error_type.cc
@@ -0,0 +1,54 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+//
+// 2009-06-17 Stephen M. Webb <stephen.webb@xandros.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.5.3
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex_constants::error_type err __attribute__((unused));
+
+ err = std::regex_constants::error_collate;
+ err = std::regex_constants::error_ctype;
+ err = std::regex_constants::error_escape;
+ err = std::regex_constants::error_backref;
+ err = std::regex_constants::error_brack;
+ err = std::regex_constants::error_paren;
+ err = std::regex_constants::error_brace;
+ err = std::regex_constants::error_badbrace;
+ err = std::regex_constants::error_range;
+ err = std::regex_constants::error_space;
+ err = std::regex_constants::error_badrepeat;
+ err = std::regex_constants::error_complexity;
+ err = std::regex_constants::error_stack;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/05_constants/match_flag_type.cc b/libstdc++-v3/testsuite/28_regex/05_constants/match_flag_type.cc
new file mode 100644
index 00000000000..10635ff5f7f
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/05_constants/match_flag_type.cc
@@ -0,0 +1,53 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+//
+// 2009-06-17 Stephen M. Webb <stephen.webb@xandros.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.5.1
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex_constants::match_flag_type flag = std::regex_constants::match_default;
+
+ flag |= std::regex_constants::match_not_bol;
+ flag |= std::regex_constants::match_not_eol;
+ flag |= std::regex_constants::match_not_bow;
+ flag |= std::regex_constants::match_not_eow;
+ flag |= std::regex_constants::match_any;
+ flag |= std::regex_constants::match_not_null;
+ flag |= std::regex_constants::match_continuous;
+ flag |= std::regex_constants::match_prev_avail;
+ flag |= std::regex_constants::format_default;
+ flag |= std::regex_constants::format_sed;
+ flag |= std::regex_constants::format_no_copy;
+ flag |= std::regex_constants::format_first_only;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/05_constants/syntax_option_type.cc b/libstdc++-v3/testsuite/28_regex/05_constants/syntax_option_type.cc
new file mode 100644
index 00000000000..2aebf46d19e
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/05_constants/syntax_option_type.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+//
+// 2009-06-17 Stephen M. Webb <stephen.webb@xandros.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.5.1
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex_constants::syntax_option_type option = 0;
+
+ option |= std::regex_constants::icase;
+ option |= std::regex_constants::nosubs;
+ option |= std::regex_constants::optimize;
+ option |= std::regex_constants::collate;
+ option |= std::regex_constants::ECMAScript;
+ option |= std::regex_constants::basic;
+ option |= std::regex_constants::extended;
+ option |= std::regex_constants::awk;
+ option |= std::regex_constants::grep;
+ option |= std::regex_constants::egrep;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/06_exception_type/regex_error.cc b/libstdc++-v3/testsuite/28_regex/06_exception_type/regex_error.cc
new file mode 100644
index 00000000000..04fd7124277
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/06_exception_type/regex_error.cc
@@ -0,0 +1,49 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+//
+// 2009-06-17 Stephen M. Webb <stephen.webb@xandros.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.6 [re.badexp]
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex_error error(std::regex_constants::error_collate);
+ VERIFY(error.code() == std::regex_constants::error_collate);
+
+ try
+ {
+ throw error;
+ }
+ catch (std::runtime_error& ex)
+ {
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/ctor.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/ctor.cc
new file mode 100644
index 00000000000..6f5a2f3ab8d
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/ctor.cc
@@ -0,0 +1,50 @@
+// { dg-do link }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::regex_traits<char> test_type;
+
+ // required default constructor
+ test_type t;
+
+ // Check for required typedefs
+ typedef test_type::char_type char_type;
+ typedef test_type::string_type string_type;
+ typedef test_type::locale_type locale_type;
+ typedef test_type::char_class_type char_class_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/isctype.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/isctype.cc
new file mode 100644
index 00000000000..cb8664ca8bf
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/isctype.cc
@@ -0,0 +1,48 @@
+// { dg-do run { xfail *-*-* } }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-23 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2(4) Table 127 - Regular expression traits class requirements
+// 28.7(11) Class template regex_traits [re.traits]
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ char name[] = "lower";
+ traits t;
+
+ VERIFY( t.isctype('e', t.lookup_classname(name, name+sizeof(name)-1)) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/length.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/length.cc
new file mode 100644
index 00000000000..55406dd0ded
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/length.cc
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+// 28.7 (3) static std::size_t length(const char_type* p);
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+ bool test __attribute__((unused)) = true;
+ const CharT* p = "";
+
+ std::size_t i = traits::length(p);
+
+ VERIFY( i == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_classname.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_classname.cc
new file mode 100644
index 00000000000..49ffb511add
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_classname.cc
@@ -0,0 +1,54 @@
+// { dg-do run { xfail *-*-* } }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-23 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2(4) Table 127 - Regular expression traits class requirements
+// 28.7(9) Class template regex_traits [re.traits]
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ char n1[] = "lower";
+ char n2[] = "alpha";
+ traits t;
+
+ traits::char_class_type c1 = t.lookup_classname(n1, n1+sizeof(n1)-1);
+ VERIFY( c1 != 0 );
+
+ traits::char_class_type c2 = t.lookup_classname(n1, n1+sizeof(n1)-1, true);
+ traits::char_class_type c3 = t.lookup_classname(n2, n2+sizeof(n2)-1, true);
+ VERIFY( c2 == c3 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_collatename.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_collatename.cc
new file mode 100644
index 00000000000..58eb5878de5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/lookup_collatename.cc
@@ -0,0 +1,50 @@
+// { dg-do run { xfail *-*-* } }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-23 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 (8) Class template regex_traits [re.traits]
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ char name[] = "ll";
+ traits t;
+
+ traits::string_type sname = t.lookup_collatename(name, name+sizeof(name)-1);
+
+ VERIFY( !sname.empty() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/transform.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/transform.cc
new file mode 100644
index 00000000000..1481dcfbb8c
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/transform.cc
@@ -0,0 +1,51 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+
+#include <regex>
+#include <string>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ traits t;
+ traits::string_type G = "abc";
+ traits::string_type H = "def";
+
+ VERIFY( G < H );
+ VERIFY( t.transform(G.begin(), G.end()) < t.transform(H.begin(), H.end()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/transform_primary.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/transform_primary.cc
new file mode 100644
index 00000000000..7de8904b49a
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/transform_primary.cc
@@ -0,0 +1,55 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+
+#include <regex>
+#include <string>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ traits t;
+ traits::string_type G = "abc";
+ traits::string_type H = "def";
+ traits::string_type J = "ABC";
+
+ VERIFY( G < H );
+ VERIFY( t.transform_primary(G.begin(), G.end()) < t.transform_primary(H.begin(), H.end()) );
+
+ VERIFY( G == H );
+ VERIFY( t.transform_primary(G.begin(), G.end()) == t.transform_primary(J.begin(), J.end()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/translate.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/translate.cc
new file mode 100644
index 00000000000..2dbbba39637
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/translate.cc
@@ -0,0 +1,49 @@
+// { dg_do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+// 28.7 (3) static std::size_t length(const char_type* p);
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+
+ std::regex_traits<CharT> t;
+ CharT c = 'a';
+ CharT d = 'a';
+
+ VERIFY( t.translate(c) == t.translate(d) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/translate_nocase.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/translate_nocase.cc
new file mode 100644
index 00000000000..4c963ddd3a5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/translate_nocase.cc
@@ -0,0 +1,46 @@
+// { dg-do run }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits (5) translate_nocase
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Verifies the workings of the regex_traits translate_nocase function.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef char CharT;
+
+ std::regex_traits<CharT> t;
+ CharT c = 'a';
+ CharT C = 'A';
+
+ VERIFY( t.translate_nocase(c) == t.translate_nocase(C) );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/char/value.cc b/libstdc++-v3/testsuite/28_regex/07_traits/char/value.cc
new file mode 100644
index 00000000000..f0535acb2cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/char/value.cc
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=gnu++0x" }
+
+// 2008-08-11 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits value() function
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests the value() function of the regex_traits<char> class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_traits<char> t;
+ VERIFY( t.value('7', 8) == 7 );
+ VERIFY( t.value('7', 10) == 7 );
+ VERIFY( t.value('7', 16) == 7 );
+ VERIFY( t.value('9', 8) == -1 );
+ VERIFY( t.value('9', 10) == 9 );
+ VERIFY( t.value('9', 16) == 9 );
+ VERIFY( t.value('d', 8) == -1 );
+ VERIFY( t.value('d', 10) == -1 );
+ VERIFY( t.value('d', 16) == 13 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/ctor.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/ctor.cc
new file mode 100644
index 00000000000..39caf432d32
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/ctor.cc
@@ -0,0 +1,49 @@
+// { dg-do link }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ typedef std::regex_traits<wchar_t> test_type;
+
+ // required default constructor
+ test_type t;
+
+ // Check for required typedefs
+ typedef test_type::char_type char_type;
+ typedef test_type::string_type string_type;
+ typedef test_type::locale_type locale_type;
+ typedef test_type::char_class_type char_class_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/length.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/length.cc
new file mode 100644
index 00000000000..c3cd7b60d0c
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/length.cc
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+// 28.7 (3) static std::size_t length(const char_type* p);
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef wchar_t CharT;
+ typedef std::regex_traits<CharT> traits;
+ bool test __attribute__((unused)) = true;
+ const CharT* p = L"";
+
+ std::size_t i = traits::length(p);
+
+ VERIFY( i == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/transform.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/transform.cc
new file mode 100644
index 00000000000..c1f7af44d71
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/transform.cc
@@ -0,0 +1,51 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+
+#include <regex>
+#include <string>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef wchar_t CharT;
+ typedef std::regex_traits<CharT> traits;
+
+ traits t;
+ traits::string_type G = L"abc";
+ traits::string_type H = L"def";
+
+ VERIFY( G < H );
+ VERIFY( t.transform(G.begin(), G.end()) < t.transform(H.begin(), H.end()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate.cc
new file mode 100644
index 00000000000..962c381520c
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate.cc
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-02-17 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.3 Requirements [re.req]
+// 28.2 (4) Table 127 - Regular expression traits class requirements
+// 28.7 Class template regex_traits [re.traits]
+// 28.7 (3) static std::size_t length(const char_type* p);
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef wchar_t CharT;
+
+ std::regex_traits<CharT> t;
+ CharT c = L'a';
+ CharT d = L'a';
+
+ VERIFY( t.translate(c) == t.translate(d) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate_nocase.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate_nocase.cc
new file mode 100644
index 00000000000..5602cf00117
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/translate_nocase.cc
@@ -0,0 +1,46 @@
+// { dg-do run }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits (5) translate_nocase
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Verifies the workings of the regex_traits translate_nocase function.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef wchar_t CharT;
+
+ std::regex_traits<CharT> t;
+ CharT c = L'a';
+ CharT C = L'A';
+
+ VERIFY( t.translate_nocase(c) == t.translate_nocase(C) );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/value.cc b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/value.cc
new file mode 100644
index 00000000000..f0535acb2cc
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/07_traits/wchar_t/value.cc
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=gnu++0x" }
+
+// 2008-08-11 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.7] class template regex_traits value() function
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests the value() function of the regex_traits<char> class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_traits<char> t;
+ VERIFY( t.value('7', 8) == 7 );
+ VERIFY( t.value('7', 10) == 7 );
+ VERIFY( t.value('7', 16) == 7 );
+ VERIFY( t.value('9', 8) == -1 );
+ VERIFY( t.value('9', 10) == 9 );
+ VERIFY( t.value('9', 16) == 9 );
+ VERIFY( t.value('d', 8) == -1 );
+ VERIFY( t.value('d', 10) == -1 );
+ VERIFY( t.value('d', 16) == 13 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring.cc
new file mode 100644
index 00000000000..1552818e987
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2009-06-05 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++0X [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a C-style null-terminated-string.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::basic_regex<char> re;
+
+ const char* cs = "aab";
+ re.assign(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring_op.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring_op.cc
new file mode 100644
index 00000000000..12353023b38
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/cstring_op.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assign operator from a C-style null-terminated-string.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re;
+ re = cs;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/moveable.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/moveable.cc
new file mode 100644
index 00000000000..64f5bcac570
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/moveable.cc
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-07-07 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3](9-11) class template basic_regex assign
+
+#include <regex>
+#include <testsuite_hooks.h>
+#include <utility>
+
+// Tests assign operator of the basic_regex class for moveable rvalues.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex src_re("aaba");
+ const unsigned mark_count = src_re.mark_count();
+ const std::regex::flag_type flags = src_re.flags();
+
+ std::regex target_re;
+
+ target_re.assign(std::move(src_re));
+
+ VERIFY( target_re.flags() == flags );
+ VERIFY( target_re.mark_count() == mark_count );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/pstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/pstring.cc
new file mode 100644
index 00000000000..398b66c6063
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/pstring.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a Pascal-style counted-string.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ const char cs[] = "aab";
+ test_type re;
+ re.assign(cs, sizeof(cs)-1, std::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/range.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/range.cc
new file mode 100644
index 00000000000..cd741d5fff2
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/range.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests range assign of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ char s[] = "a+b|c";
+ test_type re;
+ re.assign(s, s + 5);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string.cc
new file mode 100644
index 00000000000..afa071eb312
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string assignment of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re;
+ re.assign(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string_op.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string_op.cc
new file mode 100644
index 00000000000..724872decd5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/char/string_op.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assignment operator from a C++ string;
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re;
+ re = s;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring.cc
new file mode 100644
index 00000000000..20ccab01244
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a C-style null-terminated-string.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re;
+ re.assign(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring_op.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring_op.cc
new file mode 100644
index 00000000000..8d8e9656d9e
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/cstring_op.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assign operator from a C-style null-terminated-string.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re;
+ re = cs;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/pstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/pstring.cc
new file mode 100644
index 00000000000..9034a542c01
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/pstring.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a Pascal-style counted-string.
+void test01()
+{
+ typedef std::basic_regex<wchar_t> test_type;
+
+ const wchar_t cs[] = L"aab";
+ test_type re;
+ re.assign(cs, sizeof(cs)-1, std::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/range.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/range.cc
new file mode 100644
index 00000000000..2e31a708417
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/range.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests range assign of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<wchar_t> test_type;
+ bool test __attribute__((unused)) = true;
+
+ wchar_t s[] = L"a+b|c";
+ test_type re;
+ re.assign(s, s + 5);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string.cc
new file mode 100644
index 00000000000..156374ac1a7
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string.cc
@@ -0,0 +1,45 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string assignment of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re;
+ re.assign(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string_op.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string_op.cc
new file mode 100644
index 00000000000..43704af2bd1
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/assign/wchar_t/string_op.cc
@@ -0,0 +1,45 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.3] class template basic_regex assign()
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assignment operator from a C++ string;
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re;
+ re = s;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/cstring.cc
index c170818d9e2..b91453c0e77 100644
--- a/libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/cstring.cc
@@ -1,5 +1,7 @@
-// { dg-options "-std=gnu++0x" }
-// 2007-07-10 Paolo Carlini <pcarlini@suse.de>
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
//
// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
//
@@ -18,16 +20,18 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-//
-// NB: This file is for testing utility with NO OTHER INCLUDES.
+// 7.8.2 basic_regex constructors
-#include <utility>
+#include <regex>
-// { dg-do compile }
+void
+test01()
+{
+ std::regex re("(a|b)*abb", std::regex::basic);
+}
-void test01()
+int main()
{
- // Check for required typedefs
- typedef std::identity<int> test_type;
- typedef test_type::type type;
+ test01();
+ return 0;
}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_char.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_char.cc
new file mode 100644
index 00000000000..2f011fe52c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_char.cc
@@ -0,0 +1,42 @@
+// { dg-do run }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests Pascal-style counted-string constructor of the basic_regex class.
+void test01()
+{
+ const char* cs = "aab";
+ std::regex re(cs, 3, std::regex::basic);
+
+ VERIFY( re.flags() & std::regex_constants::basic );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_wchar_t.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_wchar_t.cc
new file mode 100644
index 00000000000..89deef6f19f
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/pstring_wchar_t.cc
@@ -0,0 +1,44 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests Pascal-style counted-string constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ const wchar_t* cs = L"aab";
+ std::wregex re(cs, 3, std::wregex::basic);
+
+ VERIFY( re.flags() & std::regex_constants::basic );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/string_range_01_02_03.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/string_range_01_02_03.cc
new file mode 100644
index 00000000000..471c89c9024
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/basic/string_range_01_02_03.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.8.2 basic_regex ctor
+// Tests for invalid range expression
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ try
+ {
+ std::regex re("a\\{1,2,3\\}", std::regex::basic);
+ }
+ catch (std::regex_error& ex)
+ {
+ VERIFY( ex.code() == std::regex_constants::error_badbrace );
+ }
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring.cc
new file mode 100644
index 00000000000..ac87e4d69a0
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests C-style null-terminated-string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_awk.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_awk.cc
new file mode 100644
index 00000000000..8b93fe7a721
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_awk.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.8.2 basic_regex constructors
+
+#include <regex>
+
+void
+test01()
+{
+ std::regex re("(a|b)*abb", std::regex::awk);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_ecma.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_ecma.cc
new file mode 100644
index 00000000000..6c72736c5cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_ecma.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.8.2 basic_regex constructors
+
+#include <regex>
+
+void
+test01()
+{
+ std::regex re("(a|b)*abb");
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_egrep.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_egrep.cc
new file mode 100644
index 00000000000..f38a9b8704e
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_egrep.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.8.2 basic_regex constructors
+
+#include <regex>
+
+void
+test01()
+{
+ std::regex re("(a|b)*abb", std::regex::egrep);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_grep.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_grep.cc
new file mode 100644
index 00000000000..458f6d21cc5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/cstring_grep.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.8.2 basic_regex constructors
+
+#include <regex>
+
+void
+test01()
+{
+ using std::regex;
+
+ regex re("(a|b)*abb", regex::grep);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/default.cc
new file mode 100644
index 00000000000..b7c6f410cde
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/default.cc
@@ -0,0 +1,47 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ // default constructor
+ test_type re;
+
+ // Check for required typedefs
+ typedef test_type::value_type value_type;
+ typedef test_type::flag_type flag_type;
+ typedef test_type::locale_type locale_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/range.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/range.cc
new file mode 100644
index 00000000000..027a927849e
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/char/range.cc
@@ -0,0 +1,42 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests range constructor of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ char s[] = "a+b|c";
+ test_type re(s, s + 5);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/copy_char.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/copy_char.cc
new file mode 100644
index 00000000000..4ed5f92c8b0
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/copy_char.cc
@@ -0,0 +1,45 @@
+// { dg-options "-std=c++0x" }
+
+// 2010-07-07 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2](11) class template basic_regex constructors
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests copy constructor of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ test_type src_re("aaba");
+
+ test_type target_re(src_re);
+
+ VERIFY( target_re.flags() == src_re.flags() );
+ VERIFY( target_re.mark_count() == src_re.mark_count() );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/cstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/cstring.cc
new file mode 100644
index 00000000000..691b8c7f5f1
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/cstring.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.8.2 basic_regex constructors
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("(wee|week)(knights|night)", std::regex::extended);
+
+ VERIFY( re.flags() == std::regex::extended );
+ VERIFY( re.mark_count() == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/string_range_01_02_03.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/string_range_01_02_03.cc
new file mode 100644
index 00000000000..036321face5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/extended/string_range_01_02_03.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.8.2 basic_regex ctor
+// Tests for invalid range expression
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ try
+ {
+ std::regex re("a{1,2,3}", std::regex::extended);
+ }
+ catch (std::regex_error& ex)
+ {
+ VERIFY( ex.code() == std::regex_constants::error_badbrace );
+ }
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/move_char.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/move_char.cc
new file mode 100644
index 00000000000..ba056969c5c
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/move_char.cc
@@ -0,0 +1,49 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-07-07 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2](12-14) class template basic_regex constructors
+
+#include <regex>
+#include <testsuite_hooks.h>
+#include <utility>
+
+// Tests move constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<char> test_type;
+
+ test_type src_re("aaba");
+ const unsigned mark_count = src_re.mark_count();
+ const test_type::flag_type flags = src_re.flags();
+
+ test_type target_re = std::move(src_re);
+
+ VERIFY( target_re.flags() == flags );
+ VERIFY( target_re.mark_count() == mark_count );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_char.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_char.cc
new file mode 100644
index 00000000000..f65d783a735
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_char.cc
@@ -0,0 +1,54 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+// Tests C++ string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re(s);
+}
+
+void test02()
+{
+ typedef std::basic_regex<char> test_type;
+ typedef __gnu_test::tracker_allocator<char> alloc_type;
+
+ std::basic_string<char, std::char_traits<char>, alloc_type> s("a*b");
+ test_type re(s);
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_wchar_t.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_wchar_t.cc
new file mode 100644
index 00000000000..b715195c383
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/string_wchar_t.cc
@@ -0,0 +1,56 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+// Tests C++ string constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re(s);
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+ typedef __gnu_test::tracker_allocator<wchar_t> alloc_type;
+
+ std::basic_string<wchar_t, std::char_traits<wchar_t>, alloc_type> s(L"a*b");
+ test_type re(s);
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/cstring.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/cstring.cc
new file mode 100644
index 00000000000..4dabf399677
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/cstring.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests C-style null-terminated-string constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/default.cc
new file mode 100644
index 00000000000..a0f41740229
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/default.cc
@@ -0,0 +1,48 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ // default constructor
+ test_type re;
+
+ // Check for required typedefs
+ typedef test_type::value_type value_type;
+ typedef test_type::flag_type flag_type;
+ typedef test_type::locale_type locale_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/range.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/range.cc
new file mode 100644
index 00000000000..efc0597cc1d
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/ctors/wchar_t/range.cc
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.2] class template basic_regex constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests range constructor of the basic_regex class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::basic_regex<wchar_t> test_type;
+
+ wchar_t s[] = L"a+b|c";
+ test_type re(s, s + 5);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/08_basic_regex/regex.cc b/libstdc++-v3/testsuite/28_regex/08_basic_regex/regex.cc
new file mode 100644
index 00000000000..8a803ede81f
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/08_basic_regex/regex.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 7.4 typedef std::regex
+
+#include <regex>
+
+void
+test01()
+{
+ std::regex re;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_char.cc b/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_char.cc
new file mode 100644
index 00000000000..6beb9c5cdb2
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_char.cc
@@ -0,0 +1,49 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-09 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.9.1 [re.submatch.members] sub_match members
+
+#include <regex>
+#include <string>
+#include <testsuite_hooks.h>
+
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef char value_type;
+ typedef std::basic_string<value_type> string_type;
+ typedef std::sub_match<value_type*> sub_match_type;
+ value_type test_data[] = "cabbage";
+
+ sub_match_type sm;
+ sm.first = test_data + 0;
+ sm.second = test_data + sizeof(test_data)/sizeof(value_type);
+ sm.matched = true;
+
+ string_type sm_string = sm;
+
+ VERIFY( sm_string == string_type(test_data) );
+}
diff --git a/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_wchar_t.cc b/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_wchar_t.cc
new file mode 100644
index 00000000000..6e29ac88c09
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/09_sub_match/cast_wchar_t.cc
@@ -0,0 +1,49 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-09 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.9.1 [re.submatch.members] sub_match members
+
+#include <regex>
+#include <string>
+#include <testsuite_hooks.h>
+
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef wchar_t value_type;
+ typedef std::basic_string<value_type> string_type;
+ typedef std::sub_match<value_type*> sub_match_type;
+ value_type test_data[] = L"cabbage";
+
+ sub_match_type sm;
+ sm.first = test_data + 0;
+ sm.second = test_data + sizeof(test_data)/sizeof(value_type);
+ sm.matched = true;
+
+ string_type sm_string = sm;
+
+ VERIFY( sm_string == string_type(test_data) );
+}
diff --git a/libstdc++-v3/testsuite/28_regex/09_sub_match/length.cc b/libstdc++-v3/testsuite/28_regex/09_sub_match/length.cc
new file mode 100644
index 00000000000..fc12b920ad9
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/09_sub_match/length.cc
@@ -0,0 +1,49 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-09 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.9.1 [re.submatch.members] sub_match members
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::sub_match<const char*> sm_t;
+ const char* test_data = "cabbage";
+ sm_t::difference_type test_len = 3;
+
+ sm_t sm1;
+ sm1.first = test_data + 0;
+ sm1.second = test_data + test_len;
+ sm1.matched = true;
+
+ sm_t sm2;
+ sm2.matched = false;
+
+ VERIFY( sm1.length() == test_len );
+ VERIFY( sm2.length() == 0 );
+}
diff --git a/libstdc++-v3/testsuite/28_regex/09_sub_match/typedefs.cc b/libstdc++-v3/testsuite/28_regex/09_sub_match/typedefs.cc
new file mode 100644
index 00000000000..c150da02dac
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/09_sub_match/typedefs.cc
@@ -0,0 +1,38 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-07 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.9 Class template sub_match
+
+#include <regex>
+
+
+void
+test01()
+{
+ typedef std::sub_match<char*> sm;
+
+ typedef sm::value_type value_type;
+ typedef sm::difference_type difference_type;
+ typedef sm::iterator iterator;
+ typedef sm::string_type string_type;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/char/default.cc
new file mode 100644
index 00000000000..4c897d7a4a0
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/char/default.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=c++0x" }
+
+// 2009-06-10 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++0X [28.10.1] class template match_results constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the match_result class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::cmatch cm;
+ VERIFY( cm.size() == 0 );
+ VERIFY( cm.str() == std::cmatch::string_type() );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::smatch sm;
+ VERIFY( sm.size() == 0 );
+ VERIFY( sm.str() == std::smatch::string_type() );
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/wchar_t/default.cc
new file mode 100644
index 00000000000..f8b3d45e867
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/10_match_results/ctors/wchar_t/default.cc
@@ -0,0 +1,52 @@
+// { dg-options "-std=c++0x" }
+
+// 2009-06-05 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++0X [28.10.1] class template match_results constructor
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the match_result class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::wcmatch cm;
+ VERIFY( cm.size() == 0 );
+ VERIFY( cm.str() == std::wcmatch::string_type() );
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::wsmatch sm;
+ VERIFY( sm.size() == 0 );
+ VERIFY( sm.str() == std::wsmatch::string_type() );
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/28_regex/10_match_results/typedefs.cc b/libstdc++-v3/testsuite/28_regex/10_match_results/typedefs.cc
new file mode 100644
index 00000000000..02bdcdadb71
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/10_match_results/typedefs.cc
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.10 Class template sub_match
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::match_results<char*> mr;
+
+ typedef mr::value_type value_type;
+ typedef mr::const_reference const_reference;
+ typedef mr::reference reference;
+ typedef mr::const_iterator const_iterator;
+ typedef mr::iterator iterator;
+ typedef mr::difference_type difference_type;
+ typedef mr::size_type size_type;
+ typedef mr::allocator_type allocator_type;
+ typedef mr::char_type char_type;
+ typedef mr::string_type string_type;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_01.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_01.cc
new file mode 100644
index 00000000000..4a7161a7967
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_01.cc
@@ -0,0 +1,63 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-11 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests BRE against a std::string target.
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("\\(a\\).*", std::regex::basic);
+ std::string target("aaba");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+ VERIFY( m[1].first == target.begin() );
+ VERIFY( m[1].second == target.begin()+1 );
+ VERIFY( m[1].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_00_03.cc
new file mode 100644
index 00000000000..6c0fdd76f2c
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_00_03.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests BRE against a std::string target, exercising range {0,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a\\{0,3\\}", std::regex::basic);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_01_03.cc
new file mode 100644
index 00000000000..3439b544b63
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_01_03.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests BRE against a std::string target, exercising range {1,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a\\{1,3\\}", std::regex::basic);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_02_03.cc
new file mode 100644
index 00000000000..dfd00a0f3d7
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/basic/string_range_02_03.cc
@@ -0,0 +1,61 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests BRE against a std::string target, exercising range {2,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a\\{2,3\\}", std::regex::basic);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_plus.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_plus.cc
new file mode 100644
index 00000000000..ad0f57e221d
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_plus.cc
@@ -0,0 +1,65 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-21 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a C-string target, plus-sign match.
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("(a+)", std::regex::extended);
+ const char target[] = "aa";
+ std::cmatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( re.mark_count() == 1 );
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target );
+ VERIFY( m.prefix().second == target );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target+sizeof(target) );
+ VERIFY( m.suffix().second == target+sizeof(target) );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target );
+ VERIFY( m[0].second == target+sizeof(target) );
+ VERIFY( m[0].matched == true );
+ VERIFY( m[1].first == target );
+ VERIFY( m[1].second == target+sizeof(target) );
+ VERIFY( m[1].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_questionmark.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_questionmark.cc
new file mode 100644
index 00000000000..21abea456a9
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/cstring_questionmark.cc
@@ -0,0 +1,65 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-21 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a C-string target, question-mark match.
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("(aa?)", std::regex::extended);
+ char target[] = "a";
+ std::cmatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( re.mark_count() == 1 );
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target );
+ VERIFY( m.prefix().second == target );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target+sizeof(target) );
+ VERIFY( m.suffix().second == target+sizeof(target) );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target );
+ VERIFY( m[0].second == target+sizeof(target) );
+ VERIFY( m[0].matched == true );
+ VERIFY( m[1].first == target );
+ VERIFY( m[1].second == target+sizeof(target) );
+ VERIFY( m[1].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_any.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_any.cc
new file mode 100644
index 00000000000..8d3716b1edf
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_any.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-11 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a std::string target.
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re(".*", std::regex::extended);
+ std::string target("aaba");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_00_03.cc
new file mode 100644
index 00000000000..a0a2e1fa9d8
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_00_03.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a std::string target, exercising range {0,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a{0,3}", std::regex::extended);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_01_03.cc
new file mode 100644
index 00000000000..b50e07645ab
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_01_03.cc
@@ -0,0 +1,60 @@
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a std::string target, exercising range {1,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a{1,3}", std::regex::extended);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_02_03.cc
new file mode 100644
index 00000000000..ca322a8d4cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/11_algorithms/02_match/extended/string_range_02_03.cc
@@ -0,0 +1,61 @@
+// { dg-options "-std=c++0x" }
+// { dg-do run { xfail *-*-* } }
+
+//
+// 2010-06-16 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+// Tests ERE against a std::string target, exercising range {2,3}
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::regex re("a{2,3}", std::regex::extended);
+ std::string target("aa");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+
+ VERIFY( m.size() == re.mark_count()+1 );
+ VERIFY( m.empty() == false );
+ VERIFY( m.prefix().first == target.begin() );
+ VERIFY( m.prefix().second == target.begin() );
+ VERIFY( m.prefix().matched == false );
+ VERIFY( m.suffix().first == target.end() );
+ VERIFY( m.suffix().second == target.end() );
+ VERIFY( m.suffix().matched == false );
+ VERIFY( m[0].first == target.begin() );
+ VERIFY( m[0].second == target.end() );
+ VERIFY( m[0].matched == true );
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/char/default.cc
new file mode 100644
index 00000000000..2de4a0d09b8
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/char/default.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.1 Class template regex_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_iterator<char*> it;
+ std::cregex_iterator cit;
+ std::sregex_iterator sit;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t/default.cc
new file mode 100644
index 00000000000..33fb5baa808
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/ctors/wchar_t/default.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.1 Class template regex_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_iterator<wchar_t*> it;
+ std::wcregex_iterator cit;
+ std::wsregex_iterator sit;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/typedefs.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/typedefs.cc
new file mode 100644
index 00000000000..8ad88995078
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_iterator/typedefs.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.1 Class template regex_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::regex_iterator<char*> it;
+
+ typedef it::regex_type regex_type;
+ typedef it::value_type value_type;
+ typedef it::difference_type difference_type;
+ typedef it::pointer pointer;
+ typedef it::reference reference;
+ typedef it::iterator_category iterator_category;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char/default.cc
new file mode 100644
index 00000000000..5105c7d8732
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/char/default.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.2 Class template regex_token_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_token_iterator<char*> it;
+ std::cregex_token_iterator cit;
+ std::sregex_token_iterator sit;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/wchar_t/default.cc
new file mode 100644
index 00000000000..fe918c80d71
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/ctors/wchar_t/default.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.2 Class template regex_token_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::regex_token_iterator<wchar_t*> it;
+ std::wcregex_token_iterator cit;
+ std::wsregex_token_iterator sit;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/typedefs.cc b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/typedefs.cc
new file mode 100644
index 00000000000..d765ab2f403
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/12_iterators/regex_token_iterator/typedefs.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//
+// 2010-06-10 Stephen M. Webb <stephen.webb@bregmasoft.ca>
+//
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.2 Class template regex_token_iterator
+
+#include <regex>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::regex_token_iterator<char*> it;
+
+ typedef it::regex_type regex_type;
+ typedef it::value_type value_type;
+ typedef it::difference_type difference_type;
+ typedef it::pointer pointer;
+ typedef it::reference reference;
+ typedef it::iterator_category iterator_category;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
index cf4e4d82db2..3afec89b710 100644
--- a/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <regex> // { dg-excess-errors "In file included from" }
+#include <regex>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/28_regex/range_access.cc b/libstdc++-v3/testsuite/28_regex/range_access.cc
new file mode 100644
index 00000000000..0bd620f0bd5
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/range_access.cc
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <regex>
+
+void
+test01()
+{
+ std::smatch sm;
+ std::begin(sm);
+ std::end(sm);
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index 380540a20a7..66f5a81a5e5 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -28,20 +28,5 @@ int main()
return 0;
}
-// { dg-error "used here" "" { target *-*-* } 521 }
-// { dg-error "deleted function" "" { target *-*-* } 230 }
-// { dg-error "deleted function" "" { target *-*-* } 248 }
-// { dg-error "deleted function" "" { target *-*-* } 266 }
-// { dg-error "deleted function" "" { target *-*-* } 284 }
-// { dg-error "deleted function" "" { target *-*-* } 302 }
-// { dg-error "deleted function" "" { target *-*-* } 320 }
-// { dg-error "deleted function" "" { target *-*-* } 338 }
-// { dg-error "deleted function" "" { target *-*-* } 356 }
-// { dg-error "deleted function" "" { target *-*-* } 374 }
-// { dg-error "deleted function" "" { target *-*-* } 392 }
-// { dg-error "deleted function" "" { target *-*-* } 410 }
-// { dg-error "deleted function" "" { target *-*-* } 428 }
-// { dg-error "deleted function" "" { target *-*-* } 446 }
-// { dg-error "deleted function" "" { target *-*-* } 464 }
-// { dg-error "deleted function" "" { target *-*-* } 482 }
-// { dg-excess-errors "In member function" }
+// { dg-error "ambiguous" "" { target *-*-* } 522 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index 21f77f4c21b..69b1eff1297 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -28,20 +28,5 @@ int main()
return 0;
}
-// { dg-error "used here" "" { target *-*-* } 560 }
-// { dg-error "deleted function" "" { target *-*-* } 229 }
-// { dg-error "deleted function" "" { target *-*-* } 247 }
-// { dg-error "deleted function" "" { target *-*-* } 265 }
-// { dg-error "deleted function" "" { target *-*-* } 283 }
-// { dg-error "deleted function" "" { target *-*-* } 301 }
-// { dg-error "deleted function" "" { target *-*-* } 319 }
-// { dg-error "deleted function" "" { target *-*-* } 337 }
-// { dg-error "deleted function" "" { target *-*-* } 355 }
-// { dg-error "deleted function" "" { target *-*-* } 373 }
-// { dg-error "deleted function" "" { target *-*-* } 391 }
-// { dg-error "deleted function" "" { target *-*-* } 409 }
-// { dg-error "deleted function" "" { target *-*-* } 427 }
-// { dg-error "deleted function" "" { target *-*-* } 445 }
-// { dg-error "deleted function" "" { target *-*-* } 463 }
-// { dg-error "deleted function" "" { target *-*-* } 481 }
-// { dg-excess-errors "In member function" }
+// { dg-error "deleted" "" { target *-*-* } 561 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
index fa35b9cb208..5cd2ef9fc4e 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,9 +19,10 @@
// <http://www.gnu.org/licenses/>.
#include <atomic>
+#include <cstddef>
int main()
{
- std::atomic_address a = { { NULL } };
+ std::atomic_address a __attribute__((unused)) = { { NULL } };
return 0;
}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
index 0ec1321e116..9405e459bf8 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
@@ -26,7 +26,6 @@ void test01()
typedef std::atomic_address test_type;
test_type t1;
test_type t2;
- t1 = t2;
+ t1 = t2; // { dg-error "ambiguous" }
}
-// { dg-error "used here" "" { target *-*-* } 29 }
-// { dg-excess-errors "deleted function" }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
index 4ede58ff8bd..69f78eed101 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
@@ -25,7 +25,7 @@ void test01()
// Copy.
typedef std::atomic_address test_type;
test_type t1;
- test_type t2(t1);
+ test_type t2(t1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 28 }
-// { dg-excess-errors "deleted function" }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
index 7a2e94977a7..b7e524a38f5 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
@@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,7 +22,7 @@
int main()
{
// Single value constructor.
- void* v = NULL;
+ void* v = 0;
std::atomic_address a(v);
return 0;
}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
index cfb0c1bbb7a..b7724403412 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,5 +23,5 @@
void test01()
{
using namespace std;
- atomic_flag af = ATOMIC_FLAG_INIT;
+ atomic_flag af __attribute__((unused)) = ATOMIC_FLAG_INIT;
}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
index 924add880cf..27c60ca2dc1 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
@@ -26,7 +26,7 @@ void test01()
typedef std::atomic_flag test_type;
test_type t1;
test_type t2;
- t1 = t2;
+ t1 = t2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 29 }
-// { dg-excess-errors "deleted function" }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
index 22cea6a3916..9244f683d1f 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
@@ -25,7 +25,7 @@ void test01()
// Copy.
typedef std::atomic_flag test_type;
test_type t1;
- test_type t2(t1);
+ test_type t2(t1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 28 }
-// { dg-excess-errors "deleted function" }
+
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index d21e30c3310..751c6cdc696 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,12 +29,5 @@ int main()
return 0;
}
-// { dg-error "used here" "" { target *-*-* } 521 }
-// { dg-excess-errors "deleted function" }
-// { dg-excess-errors "deleted function" }
-// { dg-error "instantiated from" "" { target *-*-* } 28 }
-// { dg-error "instantiated from" "" { target *-*-* } 528 }
-// { dg-error "instantiated from" "" { target *-*-* } 170 }
-// { dg-error "instantiated from" "" { target *-*-* } 399 }
-// { dg-error "instantiated from" "" { target *-*-* } 168 }
-// { dg-excess-errors "In member function" }
+// { dg-error "ambiguous" "" { target *-*-* } 522 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index be0580a46b2..976a6991d43 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,12 +29,5 @@ int main()
return 0;
}
-// { dg-error "used here" "" { target *-*-* } 560 }
-// { dg-excess-errors "deleted function" }
-// { dg-excess-errors "deleted function" }
-// { dg-error "instantiated from" "" { target *-*-* } 28 }
-// { dg-error "instantiated from" "" { target *-*-* } 566 }
-// { dg-error "instantiated from" "" { target *-*-* } 170 }
-// { dg-error "instantiated from" "" { target *-*-* } 399 }
-// { dg-error "instantiated from" "" { target *-*-* } 168 }
-// { dg-excess-errors "In member function" }
+// { dg-error "deleted" "" { target *-*-* } 561 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index c7a5dc3098e..2a112c95838 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -27,7 +27,7 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 404 }
// { dg-error "operator" "" { target *-*-* } 405 }
// { dg-error "operator" "" { target *-*-* } 406 }
+// { dg-error "operator" "" { target *-*-* } 407 }
// { dg-excess-errors "In file included from" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
index 59598283df1..974c947e664 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -28,7 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 375 }
// { dg-error "operator" "" { target *-*-* } 376 }
// { dg-error "operator" "" { target *-*-* } 377 }
-// { dg-excess-errors "In file included from" }
+// { dg-error "operator" "" { target *-*-* } 378 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
index 9cff37774ec..4927fcf1854 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -28,7 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 353 }
// { dg-error "operator" "" { target *-*-* } 354 }
// { dg-error "operator" "" { target *-*-* } 355 }
-// { dg-excess-errors "In file included from" }
+// { dg-error "operator" "" { target *-*-* } 356 }
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
index 9e9ad8a7b03..90648207e73 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
@@ -28,8 +28,7 @@ void test01()
// assign
std::condition_variable c1;
std::condition_variable c2;
- c1 = c2;
+ c1 = c2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 70 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
index 5765351554e..588e4f3c954 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
@@ -27,8 +27,7 @@ void test01()
{
// copy
std::condition_variable c1;
- std::condition_variable c2(c1);
+ std::condition_variable c2(c1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 30 }
-// { dg-error "deleted function" "" { target *-*-* } 69 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc
index 8fa79a2cf1a..dac106c2ec4 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc
@@ -28,8 +28,7 @@ void test01()
// assign
std::condition_variable_any c1;
std::condition_variable_any c2;
- c1 = c2;
+ c1 = c2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 179 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc
index 344f90c961c..157f60f0335 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc
@@ -27,8 +27,7 @@ void test01()
{
// copy
std::condition_variable_any c1;
- std::condition_variable_any c2(c1);
+ std::condition_variable_any c2(c1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 30 }
-// { dg-error "deleted function" "" { target *-*-* } 178 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc
index eef41497055..2aad5e9aa0f 100644
--- a/libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc
@@ -31,8 +31,7 @@ void test01()
// assign
std::future<int>& p1 = get();
std::future<int>& p2 = get();
- p1 = p2;
+ p1 = p2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 34 }
-// { dg-error "deleted function" "" { target *-*-* } 581 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc
index 14d7046bed5..5e6bccad82b 100644
--- a/libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc
@@ -30,8 +30,7 @@ void test01()
{
// copy
std::future<int>& p1 = get();
- std::future<int> p2(p1);
+ std::future<int> p2(p1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 33 }
-// { dg-error "deleted function" "" { target *-*-* } 580 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/wait.cc b/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
index 94a431f8183..d1b44dbffc6 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/wait.cc
@@ -31,7 +31,7 @@
#include <testsuite_hooks.h>
-void wait(std::future<void>& f)
+void fut_wait(std::future<void>& f)
{
f.wait();
}
@@ -41,7 +41,7 @@ void test01()
std::promise<void> p1;
std::future<void> f1(p1.get_future());
- std::thread t1(wait, std::ref(f1));
+ std::thread t1(fut_wait, std::ref(f1));
p1.set_value();
t1.join();
diff --git a/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
index d1e72310901..e31e91fa214 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <condition_variable> // { dg-excess-errors "In file included from" }
+#include <condition_variable>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
index 5f021b8e5ac..b9fb18d9dad 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <future> // { dg-excess-errors "In file included from" }
+#include <future>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
index 5d2a70b3add..ed993d5f83b 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <mutex> // { dg-excess-errors "In file included from" }
+#include <mutex>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc b/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
index 9d86cce2fcc..d056c023f0f 100644
--- a/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
@@ -20,6 +20,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <thread> // { dg-excess-errors "In file included from" }
+#include <thread>
// { dg-error "upcoming ISO" "" { target *-*-* } 31 }
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc
index 078cffceab8..20122348e6d 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +29,7 @@ void test01()
typedef std::mutex mutex_type;
mutex_type m1;
mutex_type m2;
- m1 = m2;
+ m1 = m2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 83 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc
index e13a0f6cfba..3fd1cd97784 100644
--- a/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,8 +28,7 @@ void test01()
// assign
typedef std::mutex mutex_type;
mutex_type m1;
- mutex_type m2(m1);
+ mutex_type m2(m1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 82 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
index 2b57a1c5b2f..414c861cc44 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
@@ -29,8 +29,7 @@ void test01()
// assign
std::packaged_task<int()> p1;
std::packaged_task<int()> p2;
- p1 = p2;
+ p1 = p2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 1228 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
index baf718354e5..93b0821943c 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
@@ -28,8 +28,7 @@ void test01()
{
// copy
std::packaged_task<int()> p1;
- std::packaged_task<int()> p2(p1);
+ std::packaged_task<int()> p2(p1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 1227 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
index 80b5e06e1d0..50b1c6e17bf 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
@@ -29,8 +29,7 @@ void test01()
// assign
std::promise<int> p1;
std::promise<int> p2;
- p1 = p2;
+ p1 = p2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 871 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
index 27884b0bd1a..5e43d0b1fda 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
@@ -28,8 +28,7 @@ void test01()
{
// copy
std::promise<int> p1;
- std::promise<int> p2(p1);
+ std::promise<int> p2(p1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 855 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc
index 6c6cefa177a..2eeefd32c32 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +29,7 @@ void test01()
typedef std::recursive_mutex mutex_type;
mutex_type m1;
mutex_type m2;
- m1 = m2;
+ m1 = m2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 135 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc
index b62011b8b56..232a70103a4 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,8 +28,7 @@ void test01()
// assign
typedef std::recursive_mutex mutex_type;
mutex_type m1;
- mutex_type m2(m1);
+ mutex_type m2(m1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 134 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
index 2e092bedd11..1694423cb1f 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +29,7 @@ void test01()
typedef std::recursive_timed_mutex mutex_type;
mutex_type m1;
mutex_type m2;
- m1 = m2;
+ m1 = m2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 298 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
index 9d10a7dac55..c729d5b76a2 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,8 +28,7 @@ void test01()
// assign
typedef std::recursive_timed_mutex mutex_type;
mutex_type m1;
- mutex_type m2(m1);
+ mutex_type m2(m1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 297 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
index a4e325b0d96..e690878b48d 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
@@ -29,7 +29,7 @@
#include <mutex>
#include <testsuite_hooks.h>
-void wait(std::shared_future<void> f)
+void fut_wait(std::shared_future<void> f)
{
f.wait();
}
@@ -39,9 +39,9 @@ void test01()
std::promise<void> p1;
std::shared_future<void> f1(p1.get_future());
- std::thread t1(wait, f1);
- std::thread t2(wait, f1);
- std::thread t3(wait, f1);
+ std::thread t1(fut_wait, f1);
+ std::thread t2(fut_wait, f1);
+ std::thread t3(fut_wait, f1);
p1.set_value();
t1.join();
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc
index f45b9f203ae..406d16085a3 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc
@@ -28,8 +28,7 @@ void test01()
typedef std::thread test_type;
test_type t1;
test_type t2;
- t1 = t2;
+ t1 = t2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 149 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc
index ce5034bf502..9d8681d471f 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc
@@ -27,9 +27,7 @@ void test01()
// copy
typedef std::thread test_type;
test_type t1;
- test_type t2(t1); // XXX this is failing for the wrong reason
+ test_type t2(t1); // { dg-error "deleted" }
}
-// { dg-error "here" "" { target *-*-* } 30 }
-// { dg-error "deleted function" "" { target *-*-* } 127 }
-// { dg-excess-errors "In file included from" }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
index 4648196966d..7c9199f321b 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,8 +29,7 @@ void test01()
typedef std::timed_mutex mutex_type;
mutex_type m1;
mutex_type m2;
- m1 = m2;
+ m1 = m2; // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 193 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
index 716b0562a42..2c388962e45 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
@@ -3,7 +3,7 @@
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,8 +28,7 @@ void test01()
// assign
typedef std::timed_mutex mutex_type;
mutex_type m1;
- mutex_type m2(m1);
+ mutex_type m2(m1); // { dg-error "deleted" }
}
-// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 192 }
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am
index f13f51d2e1b..43d0ed39557 100644
--- a/libstdc++-v3/testsuite/Makefile.am
+++ b/libstdc++-v3/testsuite/Makefile.am
@@ -69,8 +69,10 @@ site.exp: Makefile
extract_symvers = $(glibcxx_srcdir)/scripts/extract_symvers
+baseline_subdir := $(shell $(CXX) --print-multi-dir)
+
baseline_symbols:
- -@(output=${baseline_dir}/baseline_symbols.txt; \
+ -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
if test ! -f $${output}; then \
echo "Baseline file doesn't exist."; \
echo "Try 'make new-abi-baseline' to create it."; \
@@ -78,8 +80,8 @@ baseline_symbols:
fi; true)
new-abi-baseline:
- -@$(mkinstalldirs) ${baseline_dir}
- -@(output=${baseline_dir}/baseline_symbols.txt; \
+ -@$(mkinstalldirs) ${baseline_dir}${baseline_subdir}
+ -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
if test -f $${output}; then \
output=$${output}.new; \
t=`echo $${output} | sed 's=.*config/abi/=='`; \
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index 72a40c8ff05..ef177f6ebdb 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -34,8 +34,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/fragment.am
+DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am
subdir = testsuite
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
@@ -54,6 +54,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
$(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/crossconfig.m4 \
$(top_srcdir)/linkage.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../config/gc++filt.m4 \
$(top_srcdir)/../config/tls.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -63,8 +64,6 @@ CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@@ -101,6 +100,7 @@ CTIME_CC = @CTIME_CC@
CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
+CXXFILT = @CXXFILT@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
C_INCLUDE_DIR = @C_INCLUDE_DIR@
@@ -274,6 +274,7 @@ lists_of_files = \
testsuite_files_performance
extract_symvers = $(glibcxx_srcdir)/scripts/extract_symvers
+baseline_subdir := $(shell $(CXX) --print-multi-dir)
check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
# Runs the testsuite, but in compile only mode.
@@ -354,37 +355,6 @@ TAGS:
ctags: CTAGS
CTAGS:
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
check-am: all-am
check: check-am
all-am: Makefile
@@ -484,16 +454,15 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- clean-local distclean distclean-generic distclean-libtool \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am
+ clean-local distclean distclean-generic distclean-libtool dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# This rule generates all of the testsuite_files* lists at once.
@@ -529,7 +498,7 @@ site.exp: Makefile
@mv site.tmp site.exp
baseline_symbols:
- -@(output=${baseline_dir}/baseline_symbols.txt; \
+ -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
if test ! -f $${output}; then \
echo "Baseline file doesn't exist."; \
echo "Try 'make new-abi-baseline' to create it."; \
@@ -537,8 +506,8 @@ baseline_symbols:
fi; true)
new-abi-baseline:
- -@$(mkinstalldirs) ${baseline_dir}
- -@(output=${baseline_dir}/baseline_symbols.txt; \
+ -@$(mkinstalldirs) ${baseline_dir}${baseline_subdir}
+ -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
if test -f $${output}; then \
output=$${output}.new; \
t=`echo $${output} | sed 's=.*config/abi/=='`; \
diff --git a/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc b/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
index 3e503df4710..0030000f7b6 100644
--- a/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
+++ b/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
@@ -1,6 +1,10 @@
+// Before Solaris 11, iconv -f ISO-8859-1 -t ISO-8859-1 fails with
+// Not supported ISO-8859-1 to ISO-8859-1
+//
+// { dg-do run { xfail *-*-solaris2.[89] *-*-solaris2.10 } }
// { dg-require-iconv "ISO-8859-1" }
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc b/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
index bab32fa0049..0ceb9a6597a 100644
--- a/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
+++ b/libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
@@ -91,13 +91,4 @@ void test01(void) {
aptr5 = __const_pointer_cast<B_pointer>(cbptr); // ok
}
-// { dg-error "invalid conversion " "" { target *-*-* } 314 }
-// { dg-error "initializing argument 1 of" "" { target *-*-* } 314 }
-// { dg-error "invalid conversion " "" { target *-*-* } 308 }
-// { dg-error "initializing argument 1 of" "" { target *-*-* } 308 }
-// { dg-error "invalid conversion " "" { target *-*-* } 331 }
-// { dg-error "initializing argument 1 of" "" { target *-*-* } 331 }
-// { dg-error "invalid conversion " "" { target *-*-* } 339 }
-// { dg-error "initializing argument 1 of" "" { target *-*-* } 339 }
-// { dg-excess-errors "In constructor" }
-
+// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc b/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
index bd52fd34545..609f188aade 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
@@ -1,7 +1,7 @@
// { dg-require-sharedlib "" }
// { dg-options "-g -O2 -pthread -ldl" { target *-*-linux* } }
-// Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -93,7 +93,7 @@ int
main (void)
{
pthread_t th;
- pthread_create(&th, NULL, tf, NULL);
- pthread_join(th, NULL);
+ pthread_create(&th, 0, tf, 0);
+ pthread_join(th, 0);
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
index 8d93029c87d..9577dfbc033 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
@@ -61,4 +61,3 @@ int main()
}
// { dg-error "invalid" "" { target *-*-* } 187 }
-// { dg-excess-errors "member function" }
diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc b/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc
index 01c6714bb42..471c4482b2d 100644
--- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc
+++ b/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc
@@ -3,7 +3,7 @@
// -*- C++ -*-
-// Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,5 +22,4 @@
#include <vector>
-// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 167 }
-// { dg-excess-errors "In file included from" }
+// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 196 }
diff --git a/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc b/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc
new file mode 100644
index 00000000000..5963ceeefd8
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/profile/profiler_algos.cc
@@ -0,0 +1,147 @@
+// { dg-options "-D_GLIBCXX_PROFILE" }
+
+// -*- C++ -*-
+
+// Unit tests for profile/impl/profile_algos.h.
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <vector>
+#include <profile/impl/profiler.h>
+
+using std::__norm::vector;
+
+enum Failure
+{
+ NO_FAILURES = 0x0,
+ INSERT_AFTER_N = 0x1,
+ INSERT_AT_HEAD = 0x2,
+ INSERT_AT_TAIL = 0x4,
+ INSERT_IN_THE_MIDDLE = 0x8,
+ TOP_N = 0x10,
+ FOR_EACH = 0x20,
+ REMOVE = 0x40
+};
+
+
+static int
+test_insert_top_n()
+{
+ vector<int> v;
+
+ for (int i = 0; i < 10; i++)
+ v.push_back(10 - i);
+
+ // Inserting -5 should have no effect if size is limited to 10.
+ __gnu_profile::__insert_top_n(v, -5, 10);
+ for (int i = 0; i < 10; i++)
+ if (v[i] != 10 - i)
+ return INSERT_AFTER_N;
+
+ // Insert at head.
+ __gnu_profile::__insert_top_n(v, 11, 10);
+ for (int i = 0; i < 11; i++)
+ if (v[i] != 11 - i)
+ return INSERT_AT_HEAD;
+
+ // Insert at end.
+ __gnu_profile::__insert_top_n(v, 0, 100);
+ for (int i = 0; i < 12; i++)
+ if (v[i] != 11 - i)
+ return INSERT_AT_TAIL;
+
+ // Insert in the middle.
+ __gnu_profile::__insert_top_n(v, 6, 11);
+ for (int i = 0; i < 6; i++)
+ if (v[i] != 11 - i)
+ return INSERT_IN_THE_MIDDLE;
+ for (int i = 6; i < 13; i++)
+ if (v[i] != 12 - i)
+ return INSERT_IN_THE_MIDDLE;
+
+ return NO_FAILURES;
+}
+
+static int
+test_top_n()
+{
+ vector<int> v, out;
+
+ for (int i = 0; i < 100; i++)
+ {
+ v.push_back(100 + i);
+ v.push_back(100 - i);
+ }
+
+ __gnu_profile::__top_n(v, out, 10);
+
+ for (int i = 0; i < 10; i++)
+ if (out[i] != 199 - i)
+ return TOP_N;
+
+ return NO_FAILURES;
+}
+
+struct test_for_each_helper
+{
+ static int sum;
+ void operator ()(int i) {
+ sum += i;
+ }
+};
+
+int test_for_each_helper::sum = 0;
+
+static int
+test_for_each()
+{
+ vector<int> v;
+ test_for_each_helper helper;
+ int checksum = 0;
+
+ for (int i = 0; i < 10; i++)
+ {
+ v.push_back(i);
+ checksum += i;
+ }
+
+ __gnu_profile::__for_each(v.begin(), v.end(), helper);
+
+ return helper.sum == checksum ? NO_FAILURES : FOR_EACH;
+}
+
+static int
+test_remove()
+{
+ vector<char> v;
+
+ for (int i = 0; i < 10; i++)
+ v.push_back(' ');
+ v.push_back('x');
+ for (int i = 0; i < 10; i++)
+ v.push_back(' ');
+ v.push_back('x');
+
+ return __gnu_profile::__remove(v.begin(), v.end(), ' ') == v.begin() + 2
+ ? NO_FAILURES : REMOVE;
+}
+
+int main()
+{
+ return test_insert_top_n() | test_top_n() | test_for_each() | test_remove();
+}
diff --git a/libstdc++-v3/testsuite/ext/rope/44708.cc b/libstdc++-v3/testsuite/ext/rope/44708.cc
new file mode 100644
index 00000000000..ac2fa95c742
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/rope/44708.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <iostream>
+#include <ext/rope>
+
+using namespace std;
+
+// libstdc++/44708
+void test01()
+{
+ __gnu_cxx::crope line("test-test-test");
+ cout << line.c_str() << endl;
+}
diff --git a/libstdc++-v3/testsuite/ext/rope/44963.cc b/libstdc++-v3/testsuite/ext/rope/44963.cc
new file mode 100644
index 00000000000..32bd9ded612
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/rope/44963.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <ext/rope>
+
+// libstdc++/44963
+void test01()
+{
+ __gnu_cxx::crope line("test");
+ auto ii(std::back_inserter(line));
+
+ *ii++ = 'm';
+ *ii++ = 'e';
+}
diff --git a/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc b/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
index b1520be4a57..fd1ed09c6c3 100644
--- a/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
+++ b/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
@@ -1,6 +1,6 @@
// 2003-05-03 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
//
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -90,10 +90,10 @@ main()
foo4 += foo3;
for (int i = 0; i < max_thread_count; i++)
- pthread_create (&tid[i], NULL, thread_main, 0);
+ pthread_create (&tid[i], 0, thread_main, 0);
for (int i = 0; i < max_thread_count; i++)
- pthread_join (tid[i], NULL);
+ pthread_join (tid[i], 0);
}
VERIFY( !std::strcmp (data, "barbazbongle") );
diff --git a/libstdc++-v3/testsuite/ext/slist/23781.cc b/libstdc++-v3/testsuite/ext/slist/23781.cc
index 9b0e0a53e82..e1493c67558 100644
--- a/libstdc++-v3/testsuite/ext/slist/23781.cc
+++ b/libstdc++-v3/testsuite/ext/slist/23781.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <ext/slist>
+#include <cstddef>
__gnu_cxx::slist<int>::iterator it = NULL; // { dg-error "conversion" }
__gnu_cxx::slist<int>::const_iterator cit = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
index ce719e576f2..d0a1fcfc406 100644
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,7 +37,7 @@ void test2()
fbuf.close();
FILE* file = fopen("tmp_10063-2", "r");
- setbuf(file, NULL);
+ setbuf(file, 0);
int c = getc(file);
VERIFY(c == '0');
c = getc(file);
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
index 7eb4719a7c7..47b33721349 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
@@ -1,6 +1,7 @@
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,11 +30,11 @@ void test01()
bool test __attribute__((unused)) = true;
const char* c_lit = "black pearl jasmine tea";
- int size = strlen(c_lit);
+ unsigned size = strlen(c_lit);
const char* name = "stdiobuf-1.txt";
FILE* fout = fopen(name, "w");
- fwrite(c_lit, 1, size, fout);
+ VERIFY( fwrite(c_lit, 1, size, fout) == size );
fclose(fout);
FILE* fin = fopen(name, "r");
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
index 6b0cee4db92..2629ecb43b6 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
@@ -1,6 +1,7 @@
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,11 +30,11 @@ void test01()
bool test __attribute__((unused)) = true;
const char* c_lit = "black pearl jasmine tea";
const wchar_t* w_lit = L"black pearl jasmine tea";
- int size = strlen(c_lit);
+ unsigned size = strlen(c_lit);
const char* name = "stdiobuf-1.txt";
FILE* fout = fopen(name, "w");
- fwrite(c_lit, 1, size, fout);
+ VERIFY( fwrite(c_lit, 1, size, fout) == size );
fclose(fout);
FILE* fin = fopen(name, "r");
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
index aeb957618ae..7e4795f6892 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
@@ -1,4 +1,4 @@
-// { dg-require-namedlocale "" }
+// { dg-require-namedlocale "is_IS.UTF-8" }
// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation
//
@@ -64,7 +64,7 @@ void test01()
fputs(str, file);
fclose(file);
- freopen(name, "r", stdin);
+ VERIFY( freopen(name, "r", stdin) );
streamsize n = wcin.rdbuf()->in_avail();
while (n--)
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
index 36fb9729f00..de72e141c0c 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
@@ -36,4 +36,3 @@ int main()
// { dg-error "instantiated from" "" { target *-*-* } 28 }
// { dg-error "no type" "" { target *-*-* } 67 }
-// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
index cafaf39e515..ba3dd763bd5 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
@@ -36,4 +36,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 28 }
-// { dg-error "declaration of" "" { target *-*-* } 62 }
+// { dg-error "declaration of" "" { target *-*-* } 61 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
index 7c88b43c0df..847beda5bc7 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
@@ -36,4 +36,3 @@ int main()
// { dg-error "instantiated from" "" { target *-*-* } 28 }
// { dg-error "no type" "" { target *-*-* } 110 }
-// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
index 0b73904e4a7..2347a14c0e7 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
@@ -36,4 +36,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 28 }
-// { dg-error "declaration of" "" { target *-*-* } 105 }
+// { dg-error "declaration of" "" { target *-*-* } 104 }
diff --git a/libstdc++-v3/testsuite/ext/vstring/range_access.cc b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
new file mode 100644
index 00000000000..32322924709
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 24.6.5, range access [iterator.range]
+
+#include <ext/vstring.h>
+
+void
+test01()
+{
+ __gnu_cxx::__vstring s("Hello, World!");
+ std::begin(s);
+ std::end(s);
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ __gnu_cxx::__wvstring ws(L"Hello, World!");
+ std::begin(ws);
+ std::end(ws);
+#endif
+}
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 10848bcccf1..2fefb772bbe 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -54,7 +54,7 @@ proc dg-require-fileio { args } {
}
proc dg-require-namedlocale { args } {
- if { ![ check_v3_target_namedlocale ] } {
+ if { ![ check_v3_target_namedlocale [lindex $args 1] ] } {
upvar dg-do-what dg-do-what
set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
return
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 45a43dea5fd..41f593b6e25 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -374,7 +374,6 @@ proc libstdc++-dg-test { prog do_what extra_tool_flags } {
# There is a libstdc++_compile made for us by default (via the tool-
# and-target file), but the defaults are lacking in goodness.
set comp_output [$select_compile "$prog" "$output_file" "$compile_type" $options];
- set comp_output [ prune_g++_output $comp_output ];
return [list $comp_output $output_file]
}
@@ -386,13 +385,16 @@ if { [info procs saved-dg-test] == [list] } {
rename dg-test saved-dg-test
proc dg-test { args } {
+ global additional_prunes
global errorInfo
if { [ catch { eval saved-dg-test $args } errmsg ] } {
set saved_info $errorInfo
+ set additional_prunes ""
unset_timeout_vars
error $errmsg $saved_info
}
+ set additional_prunes ""
unset_timeout_vars
}
}
@@ -828,99 +830,60 @@ proc check_v3_target_time { } {
return $et_time_saved
}
-proc check_v3_target_namedlocale { } {
- global et_namedlocale_saved
- global et_namedlocale_target_name
+proc check_v3_target_namedlocale { args } {
+ global et_namedlocale
global tool
- if { ![info exists et_namedlocale_target_name] } {
- set et_namedlocale_target_name ""
+ set et_namedlocale 0
+
+ # Set up, compile, and execute a C++ test program that tries to use
+ # the required named locale.
+ set exe nlocale[pid].x
+
+ if ![file exists ./$exe] {
+ set src nlocale[pid].cc
+
+ set f [open $src "w"]
+ puts $f "#include <locale>"
+ puts $f "#include <cstdio>"
+ puts $f "using namespace std;"
+ puts $f "int main (int argc, char** argv)"
+ puts $f "{"
+ puts $f " try"
+ puts $f " {"
+ puts $f " locale(*(argv + 1));"
+ puts $f " return 0;"
+ puts $f " }"
+ puts $f " catch(...)"
+ puts $f " {"
+ puts $f " printf(\"locale '%s' not supported\\n\", *(argv + 1));"
+ puts $f " return 1;"
+ puts $f " }"
+ puts $f "}"
+ close $f
+
+ set lines [v3_target_compile $src $exe executable ""]
+ file delete $src
+
+ if ![string match "" $lines] {
+ verbose "check_v3_target_namedlocale: compilation failed" 2
+ return $et_namedlocale
+ }
+ # else No error message, compilation succeeded.
}
+
+ set result [${tool}_load "./$exe" "$args" ""]
+ set status [lindex $result 0]
- # If the target has changed since we set the cached value, clear it.
- set current_target [current_target_name]
- if { $current_target != $et_namedlocale_target_name } {
- verbose "check_v3_target_namedlocale: `$et_namedlocale_target_name'" 2
- set et_namedlocale_target_name $current_target
- if [info exists et_namedlocale_saved] {
- verbose "check_v3_target_namedlocale: removing cached result" 2
- unset et_namedlocale_saved
- }
- }
-
- if [info exists et_namedlocale_saved] {
- verbose "check_v3_target_namedlocale: using cached result" 2
- } else {
- set et_namedlocale_saved 0
-
- # Set up, compile, and execute a C++ test program that tries to use
- # all the required named locales.
- set src nlocale[pid].cc
- set exe nlocale[pid].x
-
- set f [open $src "w"]
- puts $f "#include <locale>"
- puts $f "using namespace std;"
- puts $f "int main ()"
- puts $f "{"
- puts $f " try"
- puts $f " {"
- puts $f " locale(\"\");"
- puts $f " locale(\"de_DE\");"
- puts $f " locale(\"de_DE.ISO-8859-15@euro\");"
- puts $f " locale(\"de_DE@euro\");"
- puts $f " locale(\"en_GB\");"
- puts $f " locale(\"en_HK\");"
- puts $f " locale(\"en_PH\");"
- puts $f " locale(\"en_US\");"
- puts $f " locale(\"en_US.ISO-8859-1\");"
- puts $f " locale(\"en_US.ISO-8859-15\");"
- puts $f " locale(\"en_US.UTF-8\");"
- puts $f " locale(\"es_ES\");"
- puts $f " locale(\"es_MX\");"
- puts $f " locale(\"fr_FR\");"
- puts $f " locale(\"fr_FR@euro\");"
- puts $f " locale(\"is_IS\");"
- puts $f " locale(\"is_IS.UTF-8\");"
- puts $f " locale(\"it_IT\");"
- puts $f " locale(\"ja_JP.eucjp\");"
- puts $f " locale(\"ru_RU.ISO-8859-5\");"
- puts $f " locale(\"ru_RU.UTF-8\");"
- puts $f " locale(\"se_NO.UTF-8\");"
- puts $f " locale(\"ta_IN\");"
- puts $f " locale(\"zh_TW\");"
- puts $f " return 0;"
- puts $f " }"
- puts $f " catch(...)"
- puts $f " {"
- puts $f " return 1;"
- puts $f " }"
- puts $f "}"
- close $f
-
- set lines [v3_target_compile $src $exe executable ""]
- file delete $src
-
- if [string match "" $lines] {
- # No error message, compilation succeeded.
- set result [${tool}_load "./$exe" "" ""]
- set status [lindex $result 0]
- remote_file build delete $exe
-
- verbose "check_v3_target_namedlocale: status is <$status>" 2
+ verbose "check_v3_target_namedlocale <$args>: status is <$status>" 2
- if { $status == "pass" } {
- set et_namedlocale_saved 1
- }
- } else {
- verbose "check_v3_target_namedlocale: compilation failed" 2
- }
+ if { $status == "pass" } {
+ set et_namedlocale 1
}
- return $et_namedlocale_saved
+ return $et_namedlocale
}
proc check_v3_target_debug_mode { } {
- global cxxflags
global et_debug_mode
global tool
@@ -945,21 +908,20 @@ proc check_v3_target_debug_mode { } {
set et_debug_mode 0
# Set up and compile a C++ test program that depends
- # on debug mode working.
+ # on debug mode activated.
set src debug_mode[pid].cc
set exe debug_mode[pid].exe
set f [open $src "w"]
puts $f "#include <string>"
- puts $f "using namespace std;"
+ puts $f "#ifndef _GLIBCXX_DEBUG"
+ puts $f "# error No debug mode"
+ puts $f "#endif"
puts $f "int main()"
puts $f "{ return 0; }"
close $f
- set cxxflags_saved $cxxflags
- set cxxflags "$cxxflags -Werror -O0 -D_GLIBCXX_DEBUG"
set lines [v3_target_compile $src $exe executable ""]
- set cxxflags $cxxflags_saved
file delete $src
if [string match "" $lines] {
@@ -1470,3 +1432,5 @@ proc check_v3_target_binary_io { } {
verbose "check_v3_target_binary_io: $et_binary_io" 2
return $et_binary_io
}
+
+set additional_prunes ""
diff --git a/libstdc++-v3/testsuite/lib/prune.exp b/libstdc++-v3/testsuite/lib/prune.exp
index 6c7368d10f9..a390878d76f 100644
--- a/libstdc++-v3/testsuite/lib/prune.exp
+++ b/libstdc++-v3/testsuite/lib/prune.exp
@@ -17,18 +17,45 @@
# Prune messages from g++ that aren't useful.
-proc prune_g++_output { text } {
+# Prune any messages matching ARGS[1] (a regexp) from test output.
+proc dg-prune-output { args } {
+ global additional_prunes
+
+ if { [llength $args] != 2 } {
+ error "[lindex $args 1]: need one argument"
+ return
+ }
+
+ lappend additional_prunes [lindex $args 1]
+}
+
+proc libstdc++-dg-prune { system text } {
+ global additional_prunes
# Cygwin warns about -ffunction-sections
regsub -all "(^|\n)\[^\n\]*: -ffunction-sections may affect debugging on some targets\[^\n\]*" $text "" text
# Remove parts of warnings that refer to location of previous
# definitions, etc as these confuse dejagnu
- regsub -all "(^|\n)\[^\n\]*: In function \[^\n\]*" $text "" text
+ regsub -all "(^|\n)(\[^\n\]*: )?In ((static member |lambda )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data)\[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[^\n\]*(: )?At (top level|global scope):\[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[^\n\]*: (recursively )?instantiated from \[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[^\n\]*: . skipping \[0-9\]* instantiation contexts \[^\n\]*" $text "" text
+ regsub -all "(^|\n) inlined from \[^\n\]*" $text "" text
+ # Why doesn't GCC need these to strip header context?
+ regsub -all "(^|\n)In file included from \[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[ \t\]*from \[^\n\]*" $text "" text
# Ignore errata warning from IA64 assembler.
regsub -all "(^|\n)\[^\n\]*: Additional NOP may be necessary to workaround Itanium processor A/B step errata" $text "" text
regsub -all "(^|\n)\[^\n*\]*: Assembler messages:\[^\n\]*" $text "" text
+ foreach p $additional_prunes {
+ if { [string length $p] > 0 } {
+ # Following regexp matches a complete line containing $p.
+ regsub -all "(^|\n)\[^\n\]*$p\[^\n\]*" $text "" text
+ }
+ }
+
return $text
}
diff --git a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
index fd892a0ebd9..a0e8f28f07e 100644
--- a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
+++ b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
@@ -61,4 +61,4 @@ remote_download "target" "current_symbols.txt" "current_symbols.txt"
set result [${tool}_load "./abi_check" \
[list "--check-verbose" "current_symbols.txt" \
"baseline_symbols.txt"]]
-[lindex $result 0] "abi_check"
+[lindex $result 0] "libstdc++-abi/abi_check"
diff --git a/libstdc++-v3/testsuite/performance/21_strings/string_append.cc b/libstdc++-v3/testsuite/performance/21_strings/append-1.cc
index 60a9a8654ba..60a9a8654ba 100644
--- a/libstdc++-v3/testsuite/performance/21_strings/string_append.cc
+++ b/libstdc++-v3/testsuite/performance/21_strings/append-1.cc
diff --git a/libstdc++-v3/testsuite/performance/21_strings/string_append_2.cc b/libstdc++-v3/testsuite/performance/21_strings/append-2.cc
index 8c44cb0f0eb..8c44cb0f0eb 100644
--- a/libstdc++-v3/testsuite/performance/21_strings/string_append_2.cc
+++ b/libstdc++-v3/testsuite/performance/21_strings/append-2.cc
diff --git a/libstdc++-v3/testsuite/performance/21_strings/string_cons_input_iterator.cc b/libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
index fcf3eb8939c..fcf3eb8939c 100644
--- a/libstdc++-v3/testsuite/performance/21_strings/string_cons_input_iterator.cc
+++ b/libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
diff --git a/libstdc++-v3/testsuite/performance/21_strings/string_copy_cons_and_dest.cc b/libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
index 1ec18d3e4ad..1ec18d3e4ad 100644
--- a/libstdc++-v3/testsuite/performance/21_strings/string_copy_cons_and_dest.cc
+++ b/libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
diff --git a/libstdc++-v3/testsuite/performance/21_strings/string_find.cc b/libstdc++-v3/testsuite/performance/21_strings/find.cc
index eeda0802b3f..eeda0802b3f 100644
--- a/libstdc++-v3/testsuite/performance/21_strings/string_find.cc
+++ b/libstdc++-v3/testsuite/performance/21_strings/find.cc
diff --git a/libstdc++-v3/testsuite/performance/21_strings/hash.cc b/libstdc++-v3/testsuite/performance/21_strings/hash.cc
new file mode 100644
index 00000000000..0c409c5da26
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/21_strings/hash.cc
@@ -0,0 +1,58 @@
+#include <string>
+#include <vector>
+#include <unordered_set>
+#include <cstdlib>
+#include <random>
+#include <testsuite_performance.h>
+
+using namespace std;
+
+vector<string>
+random_strings(int n, int len)
+{
+ string s(len, '\0');
+ unordered_set<string> result_set;
+ random_device rd;
+ while (result_set.size() < n)
+ {
+ result_set.insert(s);
+ unsigned int tmp = rd();
+ tmp %= len * 256;
+ s[tmp / 256] = tmp % 256;
+ }
+ return vector<string>(result_set.begin(), result_set.end());
+}
+
+int
+main(int argc, char **argv)
+{
+ using namespace __gnu_test;
+ time_counter time;
+ resource_counter resource;
+
+ int string_size = 71;
+ int num_strings = 6000000;
+ if (argc > 1)
+ {
+ string_size = atoi(argv[1]);
+ if (argc > 2)
+ num_strings = atoi(argv[2]);
+ }
+
+ // Construct random strings.
+ vector<string> v = random_strings(num_strings, string_size);
+
+ // Time hashing.
+ size_t tmp = 0; // prevent compiler from optimizing away all the work
+ start_counters(time, resource);
+ for (int i = 0; i < num_strings; i++)
+ tmp += hash<string>()(v[i]);
+ stop_counters(time, resource);
+
+ if (tmp != 0 || argc < 9) // use tmp to prevent compiler optimization
+ report_performance(__FILE__, "", time, resource);
+
+ clear_counters(time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc b/libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc
new file mode 100644
index 00000000000..c8a804ed2b4
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// Performance test of debug mode deque range constructor
+#define _GLIBCXX_DEBUG
+
+#include <deque>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const std::deque<int> ref(50000, 3);
+
+ start_counters(time, resource);
+
+ for (unsigned i = 0; i < 1000; ++i)
+ std::deque<int> v(ref.begin(), ref.end());
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "", time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc b/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc
new file mode 100644
index 00000000000..19224ad2f5e
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc
@@ -0,0 +1,44 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// Performance test of debug mode list range constructor
+#define _GLIBCXX_DEBUG
+
+#include <vector>
+#include <list>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const std::vector<int> ref(50000, 3);
+
+ start_counters(time, resource);
+
+ for (unsigned i = 0; i < 1000; ++i)
+ std::list<int> l(ref.begin(), ref.end());
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "", time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc b/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc
new file mode 100644
index 00000000000..51bc7a17bd1
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// Performance test of debug mode list range constructor
+#define _GLIBCXX_DEBUG
+
+#include <list>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const std::list<int> ref(50000, 3);
+
+ start_counters(time, resource);
+
+ for (unsigned i = 0; i < 1000; ++i)
+ std::list<int> l(ref.begin(), ref.end());
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "", time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc b/libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc
new file mode 100644
index 00000000000..08716a543ac
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+// Performance test of debug mode vector range constructor
+#define _GLIBCXX_DEBUG
+
+#include <vector>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+
+ const std::vector<int> ref(50000, 3);
+
+ start_counters(time, resource);
+
+ for (unsigned i = 0; i < 1000; ++i)
+ std::vector<int> v(ref.begin(), ref.end());
+
+ stop_counters(time, resource);
+ report_performance(__FILE__, "", time, resource);
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc b/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
index 50d622c41a6..83fde27100f 100644
--- a/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
+++ b/libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -20,9 +20,14 @@
#include <thread>
#include <testsuite_performance.h>
+inline bool is_ready(std::shared_future<void>& f)
+{
+ return f.wait_for(std::chrono::microseconds(1));
+}
+
void poll(std::shared_future<void> f)
{
- while (!f.is_ready())
+ while (!is_ready(f))
{ }
}
@@ -46,7 +51,7 @@ int main()
start_counters(time, resource);
for (int i = 0; i < 1000000; ++i)
- (void)f.is_ready();
+ (void)is_ready(f);
p.set_value();
for (int i=0; i < n; ++i)
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
index ec05d71e2ee..490cfc4cce6 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
@@ -19,7 +19,7 @@
// TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared]
-#include <tr1/memory> // { dg-excess-errors "In file included from" }
+#include <tr1/memory>
#include <testsuite_hooks.h>
struct A { };
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc
new file mode 100644
index 00000000000..a80a2eec85f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820.cc
@@ -0,0 +1,38 @@
+// { dg-do compile }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 2.2.3 Class template shared_ptr [tr.util.smartptr.shared]
+
+#include <tr1/memory>
+
+// incomplete type
+struct X;
+
+std::auto_ptr<X>& ap();
+
+void test01()
+{
+ X* px = 0;
+ std::tr1::shared_ptr<X> p1(px); // { dg-error "here" }
+ // { dg-error "incomplete" "" { target *-*-* } 370 }
+
+ std::tr1::shared_ptr<X> p9(ap()); // { dg-error "here" }
+ // { dg-error "incomplete" "" { target *-*-* } 409 }
+
+}
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc
index 54e19ab7382..72f89b5b683 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005, 2009 Free Software Foundation
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -73,6 +73,6 @@ main()
{
test01();
test02();
- test02();
+ test03();
return 0;
}
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc
index 2c43732041c..be04a2c9060 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@ void test01()
const void* p = &db.block_size;
p = &db.used_block;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc
index c38254f13d4..bdc366ea725 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,6 +28,7 @@ void test01()
const void* p = &lc.multiplier;
p = &lc.increment;
p = &lc.modulus;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc
index 9ebddd8c6d0..52fd3a50ba2 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,6 +36,7 @@ void test01()
p = &mt.output_t;
p = &mt.output_c;
p = &mt.output_l;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc
index c68002d2766..a34938ee0e0 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,6 +28,7 @@ void test01()
const void* p = &swc.modulus;
p = &swc.long_lag;
p = &swc.short_lag;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc
index c1715264d3a..a0a360d730b 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,6 +28,7 @@ void test01()
const void* p = &swc_01.word_size;
p = &swc_01.long_lag;
p = &swc_01.short_lag;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc
index 0318b0d5e18..3fbd55247ac 100644
--- a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc
+++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc
@@ -2,7 +2,7 @@
//
// 2009-09-29 Paolo Carlini <paolo.carlini@oracle.com>
//
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,6 +28,7 @@ void test01()
const void* p = &xor_c.shift1;
p = &xor_c.shift2;
+ p = p; // Suppress unused warning.
}
int main()
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc
index a8a06fdbcdc..1709816c306 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <tr1/unordered_map>
+#include <cstddef>
std::tr1::unordered_multimap<int, int>::iterator it2 = NULL; // { dg-error "conversion" }
std::tr1::unordered_multimap<int, int>::const_iterator cit2 = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc
index d77676eb1a1..2201b2d29d1 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <tr1/unordered_set>
+#include <cstddef>
std::tr1::unordered_multiset<int>::iterator it3 = NULL; // { dg-error "conversion" }
std::tr1::unordered_multiset<int>::const_iterator cit3 = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc b/libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
index 20e6bc06ea7..3189e7f81aa 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
@@ -1,6 +1,6 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
-// Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,8 +36,10 @@ main()
VERIFY(tuple_size<test_pair_type>::value == 2);
// Test if tuple_element::type returns the correct type
blank_class blank;
- tuple_element<0, pair<blank_class, int> >::type blank2 = blank;
- tuple_element<1, pair<int ,blank_class> >::type blank3 = blank;
+ tuple_element<0, pair<blank_class, int> >::type
+ blank2 __attribute__((unused)) = blank;
+ tuple_element<1, pair<int ,blank_class> >::type
+ blank3 __attribute__((unused)) = blank;
pair<int,int> test_pair(1, 2);
VERIFY(get<0>(test_pair) == 1);
VERIFY(get<1>(test_pair) == 2);
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc
index 4b6a7dfd332..862b0419f50 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc
@@ -2,7 +2,7 @@
// 2006-01-25 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,6 +29,7 @@ void test01()
int ch = 0, ret;
ret = std::tr1::isblank(ch);
+ ret = ret; // Suppress unused warning.
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc
index 765df19388e..5bffa0ef332 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc
@@ -2,7 +2,7 @@
// 2006-01-26 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,6 +46,7 @@ void test01()
ret = std::tr1::feholdexcept(penv);
ret = std::tr1::fesetenv(penv);
ret = std::tr1::feupdateenv(penv);
+ ret = ret; // Suppress unused warning.
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
index 7afe3b82b3a..30c7b789f4a 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
@@ -2,7 +2,7 @@
// 2006-01-30 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,5 +53,9 @@ void test01()
uret = std::tr1::wcstoumax(ws, wendptr, base);
#endif
+ ret = ret; // Suppress unused warnings.
+ dret = dret;
+ uret = uret;
+
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc
index 020c273d55b..ae31a48ecf6 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc
@@ -2,7 +2,7 @@
// 2006-02-07 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -181,6 +181,13 @@ void test01()
ret = std::tr1::trunc(d0);
fret = std::tr1::truncf(f0);
ldret = std::tr1::truncl(ld0);
+
+ ret = ret; // Suppress unused warnings.
+ iret = iret;
+ lret = lret;
+ llret = llret;
+ fret = fret;
+ ldret = ldret;
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc
index 35f8869c912..cbf8c9592eb 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc
@@ -2,7 +2,7 @@
// 2006-02-26 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,6 +37,7 @@ template<typename T>
ret = std::tr1::signbit(x);
iret = std::tr1::fpclassify(x);
+ iret = iret; // Suppress unused warning.
ret = std::tr1::isfinite(x);
ret = std::tr1::isinf(x);
@@ -49,6 +50,7 @@ template<typename T>
ret = std::tr1::islessequal(x, x);
ret = std::tr1::islessgreater(x, x);
ret = std::tr1::isunordered(x, x);
+ ret = ret; // Suppress unused warning.
}
void test01()
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc
index 426083ecb74..33890252201 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc
@@ -2,7 +2,7 @@
// 2006-02-05 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,6 +46,7 @@ void test01(int dummy, ...)
ret = std::tr1::vfscanf(stream, format, ap);
ret = std::tr1::vscanf(format, ap);
ret = std::tr1::vsscanf(cs, format, ap);
+ ret = ret; // Suppress unused warning.
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
index 542f42990e3..f9b88dca9c7 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
@@ -2,7 +2,7 @@
// 2006-02-07 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -55,8 +55,16 @@ void test01()
ldret = std::tr1::strtold(s, endptr);
ret = std::tr1::abs(i);
+
+ ret = ret; // Suppress unused warning.
+ uret = uret;
+ fret = fret;
+ ldret = ldret;
+
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
dret = std::tr1::div(numer, denom);
+
+ dret = dret;
#endif
#endif
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc
index 2a572204529..0320c9a5a66 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc
@@ -2,7 +2,7 @@
// 2006-02-03 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,6 +37,8 @@ void test01(int dummy, ...)
wchar_t** endptr1 = 0;
float fret;
fret = std::tr1::wcstof(nptr1, endptr1);
+
+ fret = fret; // Suppress unused warning.
#endif
#if _GLIBCXX_HAVE_VFWSCANF
@@ -44,6 +46,8 @@ void test01(int dummy, ...)
const wchar_t* format1 = 0;
int ret1;
ret1 = std::tr1::vfwscanf(stream, format1, arg);
+
+ ret1 = ret1; // Suppress unused warning.
#endif
#if _GLIBCXX_HAVE_VSWSCANF
@@ -51,12 +55,16 @@ void test01(int dummy, ...)
const wchar_t* format2 = 0;
int ret2;
ret2 = std::tr1::vswscanf(s, format2, arg);
+
+ ret2 = ret2; // Suppress unused warning.
#endif
#if _GLIBCXX_HAVE_VWSCANF
const wchar_t* format3 = 0;
int ret3;
ret3 = std::tr1::vwscanf(format3, arg);
+
+ ret3 = ret3; // Suppress unused warning.
#endif
#if _GLIBCXX_USE_C99
@@ -72,6 +80,10 @@ void test01(int dummy, ...)
llret = std::tr1::wcstoll(nptr2, endptr2, base);
ullret = std::tr1::wcstoull(nptr2, endptr2, base);
+ ldret = ldret; // Suppress unused warnings.
+ llret = llret;
+ ullret = ullret;
+
#endif
}
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc
index 9eff2088018..031b3ac160a 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc
@@ -2,7 +2,7 @@
// 2006-02-03 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,6 +32,7 @@ void test01()
std::wint_t ch = 0;
int ret;
ret = std::tr1::iswblank(ch);
+ ret = ret; // Suppress unused warning.
#endif
}
diff --git a/libstdc++-v3/testsuite/util/debug/checks.h b/libstdc++-v3/testsuite/util/debug/checks.h
new file mode 100644
index 00000000000..b42ef1a44c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/debug/checks.h
@@ -0,0 +1,379 @@
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+//
+
+#include <vector>
+#include <deque>
+#include <list>
+#ifndef _GLIBCXX_DEBUG
+# include <debug/vector>
+# include <debug/deque>
+# include <debug/list>
+#endif
+#include <testsuite_hooks.h>
+
+namespace __gnu_test
+{
+ template<typename _Tp>
+ struct CopyableValueType
+ {
+ typedef _Tp value_type;
+ };
+
+ template<typename _Tp1, typename _Tp2>
+ struct CopyableValueType<std::pair<const _Tp1, _Tp2> >
+ {
+ typedef std::pair<_Tp1, _Tp2> value_type;
+ };
+
+ template<typename _Tp>
+ struct generate_unique
+ {
+ typedef _Tp value_type;
+
+ operator value_type()
+ {
+ static value_type _S_;
+ ++_S_;
+ return _S_;
+ }
+ };
+
+ template<typename _Tp1, typename _Tp2>
+ struct generate_unique<std::pair<_Tp1, _Tp2> >
+ {
+ typedef _Tp1 first_type;
+ typedef _Tp2 second_type;
+ typedef std::pair<_Tp1, _Tp2> pair_type;
+
+ operator pair_type()
+ {
+ static first_type _S_1;
+ static second_type _S_2;
+ ++_S_1;
+ ++_S_2;
+ return pair_type(_S_1, _S_2);
+ }
+ };
+
+ // Check that invalid range of pointers is detected
+ template<typename _Tp>
+ void
+ check_assign1()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ const val_type* first = &v.front() + 1;
+ const val_type* last = first + 2;
+
+ cont_type c1;
+ c1.assign(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ c2.assign(last, first); // Expected failure
+ }
+
+ // Check that invalid range of debug random iterators is detected
+ template<typename _Tp>
+ void
+ check_assign2()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ typename vector_type::iterator first = v.begin() + 1;
+ typename vector_type::iterator last = first + 2;
+ cont_type c1;
+ c1.assign(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ c2.assign(last, first); // Expected failure
+ }
+
+ // Check that invalid range of debug !random debug iterators is detected
+ template<typename _Tp>
+ void
+ check_assign3()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::list<val_type> list_type;
+
+ generate_unique<val_type> gu;
+
+ list_type l;
+ for (int i = 0; i != 5; ++i)
+ l.push_back(gu);
+ VERIFY(l.size() == 5);
+
+ typename list_type::iterator first = l.begin(); ++first;
+ typename list_type::iterator last = first; ++last; ++last;
+ cont_type c1;
+ c1.assign(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ c2.assign(last, first); // Expected failure
+ }
+
+ // Check that invalid range of pointers is detected
+ template<typename _Tp>
+ void
+ check_construct1()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ val_type *first = &v.front() + 1;
+ val_type *last = first + 2;
+ cont_type c1(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2(last, first); // Expected failure
+ }
+
+ // Check that invalid range of debug random iterators is detected
+ template<typename _Tp>
+ void
+ check_construct2()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ typename vector_type::iterator first = v.begin() + 1;
+ typename vector_type::iterator last = first + 2;
+ cont_type c1(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2(last, first); // Expected failure
+ }
+
+ // Check that invalid range of debug not random iterators is detected
+ template<typename _Tp>
+ void
+ check_construct3()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::list<val_type> list_type;
+
+ generate_unique<val_type> gu;
+
+ list_type l;
+ for (int i = 0; i != 5; ++i)
+ l.push_back(gu);
+ VERIFY(l.size() == 5);
+
+ typename list_type::iterator first = l.begin(); ++first;
+ typename list_type::iterator last = first; ++last; ++last;
+ cont_type c1(first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2(last, first); // Expected failure
+ }
+
+ template <typename _Cont>
+ struct InsertRangeHelper
+ {
+ template <typename _It>
+ static void
+ Insert(_Cont& cont, _It first, _It last)
+ { cont.insert(first, last); }
+ };
+
+ template <typename _Cont>
+ struct InsertRangeHelperAux
+ {
+ template <typename _It>
+ static void
+ Insert(_Cont& cont, _It first, _It last)
+ { cont.insert(cont.begin(), first, last); }
+ };
+
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<std::vector<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<std::vector<_Tp1, _Tp2> >
+ { };
+
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<std::deque<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<std::deque<_Tp1, _Tp2> >
+ { };
+
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<std::list<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<std::list<_Tp1, _Tp2> >
+ { };
+
+#ifndef _GLIBCXX_DEBUG
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<__gnu_debug::vector<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<__gnu_debug::vector<_Tp1, _Tp2> >
+ { };
+
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<__gnu_debug::deque<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<__gnu_debug::deque<_Tp1, _Tp2> >
+ { };
+
+ template <typename _Tp1, typename _Tp2>
+ struct InsertRangeHelper<__gnu_debug::list<_Tp1, _Tp2> >
+ : InsertRangeHelperAux<__gnu_debug::list<_Tp1, _Tp2> >
+ { };
+#endif
+
+ template<typename _Tp>
+ void
+ check_insert1()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ const val_type* first = &v.front() + 1;
+ const val_type* last = first + 2;
+
+ cont_type c1;
+ InsertRangeHelper<cont_type>::Insert(c1, first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ InsertRangeHelper<cont_type>::Insert(c2, last, first); // Expected failure
+ }
+
+ template<typename _Tp>
+ void
+ check_insert2()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::vector<val_type> vector_type;
+
+ generate_unique<val_type> gu;
+
+ vector_type v;
+ for (int i = 0; i != 5; ++i)
+ v.push_back(gu);
+ VERIFY(v.size() == 5);
+
+ typename vector_type::iterator first = v.begin() + 1;
+ typename vector_type::iterator last = first + 2;
+
+ cont_type c1;
+ InsertRangeHelper<cont_type>::Insert(c1, first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ InsertRangeHelper<cont_type>::Insert(c2, last, first); // Expected failure
+ }
+
+ template<typename _Tp>
+ void
+ check_insert3()
+ {
+ bool test __attribute__((unused)) = true;
+
+ typedef _Tp cont_type;
+ typedef typename cont_type::value_type cont_val_type;
+ typedef typename CopyableValueType<cont_val_type>::value_type val_type;
+ typedef std::list<val_type> list_type;
+
+ generate_unique<val_type> gu;
+
+ list_type l;
+ for (int i = 0; i != 5; ++i)
+ l.push_back(gu);
+ VERIFY(l.size() == 5);
+
+ typename list_type::iterator first = l.begin(); ++first;
+ typename list_type::iterator last = first; ++last; ++last;
+
+ cont_type c1;
+ InsertRangeHelper<cont_type>::Insert(c1, first, last);
+ VERIFY(c1.size() == 2);
+
+ cont_type c2;
+ InsertRangeHelper<cont_type>::Insert(c2, last, first); // Expected failure
+ }
+}
+
diff --git a/libstdc++-v3/testsuite/util/exception/safety.h b/libstdc++-v3/testsuite/util/exception/safety.h
index aef58b621c7..bc965059034 100644
--- a/libstdc++-v3/testsuite/util/exception/safety.h
+++ b/libstdc++-v3/testsuite/util/exception/safety.h
@@ -52,13 +52,13 @@ namespace __gnu_test
__s += "\n";
__s += "random number generated is: ";
char buf[40];
- __builtin_sprintf(buf, "%lu", random);
+ __builtin_sprintf(buf, "%lu", (unsigned long)random);
__s += buf;
__s += " on range [";
- __builtin_sprintf(buf, "%lu", distribution.min());
+ __builtin_sprintf(buf, "%lu", (unsigned long)distribution.min());
__s += buf;
__s += ", ";
- __builtin_sprintf(buf, "%lu", distribution.max());
+ __builtin_sprintf(buf, "%lu", (unsigned long)distribution.max());
__s += buf;
__s += "]\n";
std::__throw_out_of_range(__s.c_str());
@@ -1012,7 +1012,6 @@ namespace __gnu_test
_M_functions.push_back(function_type(base_type::_M_clear));
// Run tests.
- auto i = _M_functions.begin();
for (auto i = _M_functions.begin(); i != _M_functions.end(); ++i)
{
function_type& f = *i;
@@ -1163,7 +1162,6 @@ namespace __gnu_test
_M_functions.push_back(function_type(base_type::_M_rehash));
// Run tests.
- auto i = _M_functions.begin();
for (auto i = _M_functions.begin(); i != _M_functions.end(); ++i)
{
function_type& f = *i;
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
index 43cdb9f2b62..0f158664853 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -45,7 +45,7 @@ container_rand_regression_test(unsigned long seed, size_t n, size_t m,
double mp, bool disp)
: m_seed((seed == 0) ? twister_rand_gen::get_time_determined_seed() : seed),
m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_ep(ep), m_cp(cp), m_mp(mp),
- m_disp(disp), m_p_c(NULL)
+ m_disp(disp), m_p_c(0)
{ }
PB_DS_CLASS_T_DEC
@@ -71,7 +71,7 @@ default_constructor()
done = false;
}
- if (m_p_c != NULL)
+ if (m_p_c)
PB_DS_COND_COMPARE(*m_p_c, m_native_c);
return done;
}
@@ -98,7 +98,7 @@ copy_constructor()
{
PB_DS_TRACE("copy_constructor");
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -124,7 +124,7 @@ assignment_operator()
{
PB_DS_TRACE("assignment operator");
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -159,7 +159,7 @@ PB_DS_CLASS_C_DEC::
it_constructor_imp(__gnu_pbds::cc_hash_tag)
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -226,7 +226,7 @@ PB_DS_CLASS_C_DEC::
it_constructor_imp(__gnu_pbds::gp_hash_tag)
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -309,7 +309,7 @@ PB_DS_CLASS_C_DEC::
it_constructor_imp(__gnu_pbds::tree_tag)
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -345,7 +345,7 @@ PB_DS_CLASS_C_DEC::
it_constructor_imp(__gnu_pbds::list_update_tag)
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -370,7 +370,7 @@ PB_DS_CLASS_C_DEC::
it_constructor_imp(__gnu_pbds::pat_trie_tag)
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typename alloc_t::group_adjustor adjust(m_p_c->size());
@@ -869,7 +869,7 @@ PB_DS_CLASS_C_DEC::
operator()()
{
typedef xml_result_set_regression_formatter formatter_type;
- formatter_type* p_fmt = NULL;
+ formatter_type* p_fmt = 0;
if (m_disp)
p_fmt = new formatter_type(string_form<Cntnr>::name(),
@@ -1591,30 +1591,30 @@ policy_access(__gnu_pbds::basic_hash_tag)
{
{
typename Cntnr::hash_fn& r_t = m_p_c->get_hash_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::hash_fn& r_t =((const Cntnr& )*m_p_c).get_hash_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
typename Cntnr::eq_fn& r_t = m_p_c->get_eq_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::eq_fn& r_t =((const Cntnr& )*m_p_c).get_eq_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
typename Cntnr::resize_policy& r_t = m_p_c->get_resize_policy();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::resize_policy& r_t =((const Cntnr& )*m_p_c).get_resize_policy();
- assert(&r_t != NULL);
+ assert(&r_t);
}
}
@@ -1627,12 +1627,12 @@ policy_access(__gnu_pbds::cc_hash_tag)
{
typename Cntnr::comb_hash_fn& r_t = m_p_c->get_comb_hash_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::comb_hash_fn& r_t =((const Cntnr& )*m_p_c).get_comb_hash_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
}
@@ -1645,21 +1645,21 @@ policy_access(__gnu_pbds::gp_hash_tag)
{
typename Cntnr::comb_probe_fn& r_t = m_p_c->get_comb_probe_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::comb_probe_fn& r_t =((const Cntnr& )*m_p_c).get_comb_probe_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
typename Cntnr::probe_fn& r_t = m_p_c->get_probe_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::probe_fn& r_t =((const Cntnr& )*m_p_c).get_probe_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
}
@@ -1670,12 +1670,12 @@ policy_access(__gnu_pbds::tree_tag)
{
{
typename Cntnr::cmp_fn& r_t = m_p_c->get_cmp_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
}
@@ -1691,7 +1691,7 @@ PB_DS_CLASS_C_DEC::
policy_access(__gnu_pbds::pat_trie_tag)
{
typename Cntnr::e_access_traits& r_t = m_p_c->get_e_access_traits();
- assert(&r_t != NULL);
+ assert(&r_t);
}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
index d4b395b126a..5f230495236 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -124,7 +124,7 @@ namespace detail
};
// XXX RAII, constructor takes bool for display
- xml_test_rand_regression_formatter* p_fmt = NULL;
+ xml_test_rand_regression_formatter* p_fmt = 0;
if (disp)
p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, ep, cp, mp);
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
index f964911facb..e929f3533fe 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -45,7 +45,7 @@ container_rand_regression_test(unsigned long seed, size_t n, size_t m,
double cp, double mp, bool disp)
: m_seed(seed == 0 ? twister_rand_gen::get_time_determined_seed(): seed),
m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_dp(dp), m_ep(ep), m_cp(cp),
- m_mp(mp), m_disp(disp), m_p_c(NULL)
+ m_mp(mp), m_disp(disp), m_p_c(0)
{ }
PB_DS_CLASS_T_DEC
@@ -71,7 +71,7 @@ default_constructor()
done = false;
}
- if (m_p_c != NULL)
+ if (m_p_c)
PB_DS_COND_COMPARE(*m_p_c, m_native_c);
return done;
@@ -99,7 +99,7 @@ copy_constructor()
{
PB_DS_TRACE("copy_constructor");
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typedef typename allocator_type::group_adjustor adjustor;
@@ -127,7 +127,7 @@ assignment_operator()
{
PB_DS_TRACE("assignment operator");
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typedef typename allocator_type::group_adjustor adjustor;
@@ -155,7 +155,7 @@ PB_DS_CLASS_C_DEC::
it_constructor()
{
bool done = true;
- Cntnr* p_c = NULL;
+ Cntnr* p_c = 0;
m_alloc.set_probability(m_tp);
typedef typename allocator_type::group_adjustor adjustor;
adjustor adjust(m_p_c->size());
@@ -242,7 +242,7 @@ PB_DS_CLASS_C_DEC::
operator()()
{
typedef xml_result_set_regression_formatter formatter_type;
- formatter_type* p_fmt = NULL;
+ formatter_type* p_fmt = 0;
if (m_disp)
p_fmt = new formatter_type(string_form<Cntnr>::name(),
string_form<Cntnr>::desc());
@@ -668,12 +668,12 @@ policy_access()
{
typename Cntnr::cmp_fn& r_t = m_p_c->get_cmp_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
{
const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
- assert(&r_t != NULL);
+ assert(&r_t);
}
}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
index 1cf86020d45..37f8d51af74 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -123,7 +123,7 @@ namespace detail
return -2;
};
- xml_test_rand_regression_formatter* p_fmt = NULL;
+ xml_test_rand_regression_formatter* p_fmt = 0;
if (sd == 0)
sd = twister_rand_gen::get_time_determined_seed();
if (disp)
diff --git a/libstdc++-v3/testsuite/util/replacement_memory_operators.h b/libstdc++-v3/testsuite/util/replacement_memory_operators.h
index c7b19edc457..b7d3a3b10e9 100644
--- a/libstdc++-v3/testsuite/util/replacement_memory_operators.h
+++ b/libstdc++-v3/testsuite/util/replacement_memory_operators.h
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -90,7 +90,7 @@ void* operator new(std::size_t size) throw(std::bad_alloc)
{
std::printf("operator new is called \n");
void* p = std::malloc(size);
- if (p == NULL)
+ if (!p)
throw std::bad_alloc();
__gnu_test::counter::increment();
return p;
@@ -99,7 +99,7 @@ void* operator new(std::size_t size) throw(std::bad_alloc)
void operator delete(void* p) throw()
{
std::printf("operator delete is called \n");
- if (p != NULL)
+ if (p)
{
std::free(p);
__gnu_test::counter::decrement();
@@ -108,6 +108,6 @@ void operator delete(void* p) throw()
if (count == 0)
std::printf("All memory released \n");
else
- std::printf("%lu allocations to be released \n", count);
+ std::printf("%lu allocations to be released \n", (unsigned long)count);
}
}
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc
index 2c9f93055fa..d3c73f662b0 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -186,6 +187,7 @@ check_version(symbol& test, bool added)
known_versions.push_back("GLIBCXX_3.4.12");
known_versions.push_back("GLIBCXX_3.4.13");
known_versions.push_back("GLIBCXX_3.4.14");
+ known_versions.push_back("GLIBCXX_3.4.15");
known_versions.push_back("GLIBCXX_LDBL_3.4");
known_versions.push_back("GLIBCXX_LDBL_3.4.7");
known_versions.push_back("GLIBCXX_LDBL_3.4.10");
@@ -194,6 +196,7 @@ check_version(symbol& test, bool added)
known_versions.push_back("CXXABI_1.3.2");
known_versions.push_back("CXXABI_1.3.3");
known_versions.push_back("CXXABI_1.3.4");
+ known_versions.push_back("CXXABI_1.3.5");
known_versions.push_back("CXXABI_LDBL_1.3");
}
compat_list::iterator begin = known_versions.begin();
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.h b/libstdc++-v3/testsuite/util/testsuite_abi.h
index ff413fdccf3..c9fe0a4d11c 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.h
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.h
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -16,7 +17,6 @@
// along with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-
// Benjamin Kosnik <bkoz@redhat.com>
#include <string>
diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h
index 96fe546b482..cb481b2a7f9 100644
--- a/libstdc++-v3/testsuite/util/testsuite_allocator.h
+++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Testing allocator for the C++ library testsuite.
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -27,7 +27,6 @@
#ifndef _GLIBCXX_TESTSUITE_ALLOCATOR_H
#define _GLIBCXX_TESTSUITE_ALLOCATOR_H
-#include <cstddef>
#include <tr1/unordered_map>
#include <cassert>
#include <bits/move.h>
@@ -186,8 +185,8 @@ namespace __gnu_test
{
// Let's not core here...
Alloc a;
- a.deallocate(NULL, 1);
- a.deallocate(NULL, 10);
+ a.deallocate(0, 1);
+ a.deallocate(0, 10);
return true;
}
@@ -241,8 +240,8 @@ namespace __gnu_test
: private uneq_allocator_base
{
public:
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
typedef Tp* pointer;
typedef const Tp* const_pointer;
typedef Tp& reference;
diff --git a/libstdc++-v3/testsuite/util/testsuite_api.h b/libstdc++-v3/testsuite/util/testsuite_api.h
index 4dc4a6fb7bb..11007904093 100644
--- a/libstdc++-v3/testsuite/util/testsuite_api.h
+++ b/libstdc++-v3/testsuite/util/testsuite_api.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Exception testing utils for the C++ library testsuite.
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -19,7 +19,6 @@
// <http://www.gnu.org/licenses/>.
//
-#include <cstddef>
#include <exception>
#include <testsuite_hooks.h>
@@ -107,7 +106,7 @@ namespace __gnu_test
// For 23 unordered_* requirements.
struct NonDefaultConstructible_hash
{
- size_t
+ std::size_t
operator()(NonDefaultConstructible) const
{ return 1; }
};
@@ -150,6 +149,49 @@ namespace __gnu_test
operator()() const
{ return result_type(2); }
};
+
+ // For std::addressof, etc.
+ struct OverloadedAddressAux { };
+
+ struct OverloadedAddress
+ {
+ OverloadedAddressAux
+ operator&() const { return OverloadedAddressAux(); }
+ };
+
+ inline bool
+ operator<(const OverloadedAddress&, const OverloadedAddress&)
+ { return false; }
+
+ inline bool
+ operator==(const OverloadedAddress&, const OverloadedAddress&)
+ { return false; }
+
+ struct OverloadedAddress_hash
+ {
+ std::size_t
+ operator()(const OverloadedAddress&) const
+ { return 1; }
+ };
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ struct NonCopyConstructible
+ {
+ NonCopyConstructible() : num(-1) { }
+
+ NonCopyConstructible(NonCopyConstructible&& other)
+ : num(other.num)
+ { other.num = 0; }
+
+ NonCopyConstructible(const NonCopyConstructible&) = delete;
+
+ operator int() { return num; }
+
+ private:
+ int num;
+ };
+#endif
+
}
#endif
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index fd60b79c897..1db0ca08c79 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -1,7 +1,8 @@
// -*- C++ -*-
// typelist for the C++ library testsuite.
//
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -622,7 +623,7 @@ namespace __gnu_test
struct _Concept
{
void __constraint()
- { _Ttype __v = {__a}; }
+ { _Ttype __v __attribute__((unused)) = {__a}; }
_Tvalue __a;
};
diff --git a/libstdc++-v3/testsuite/util/testsuite_error.h b/libstdc++-v3/testsuite/util/testsuite_error.h
index c9f5e47f24d..c2bfed737da 100644
--- a/libstdc++-v3/testsuite/util/testsuite_error.h
+++ b/libstdc++-v3/testsuite/util/testsuite_error.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Error handling utils for the C++ library testsuite.
//
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,6 +29,8 @@ namespace __gnu_test
{
struct test_category : public std::error_category
{
+ test_category() {}
+
virtual const char*
name() const
{
@@ -43,6 +45,8 @@ namespace __gnu_test
struct test_derived_category : public test_category
{
+ test_derived_category() {}
+
virtual const char*
name() const
{
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.cc b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
index 6d77d57672f..1ead3485175 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
@@ -2,7 +2,7 @@
// Utility subroutines for the C++ library testsuite.
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -32,7 +32,6 @@
#include <list>
#include <string>
#include <stdexcept>
-#include <cstddef>
#include <clocale>
#include <cstdlib>
#include <locale>
@@ -170,13 +169,13 @@ namespace __gnu_test
locale orig = locale::global(loc_name);
const char* res = setlocale(LC_ALL, name);
- if (res != NULL)
+ if (res)
{
string preLC_ALL = res;
const func_callback::test_type* tests = l.tests();
for (int i = 0; i < l.size(); ++i)
(*tests[i])();
- string postLC_ALL= setlocale(LC_ALL, NULL);
+ string postLC_ALL= setlocale(LC_ALL, 0);
VERIFY( preLC_ALL == postLC_ALL );
}
else
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.h b/libstdc++-v3/testsuite/util/testsuite_hooks.h
index da51d37ae62..fe41b1cb3e6 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.h
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.h
@@ -1,7 +1,8 @@
// -*- C++ -*-
// Utility subroutines for the C++ library testsuite.
//
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+// 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -59,7 +60,7 @@
# include <cassert>
# define VERIFY(fn) assert(fn)
#else
-# define VERIFY(fn) test &= (fn)
+# define VERIFY(fn) test &= bool(fn)
#endif
#ifdef _GLIBCXX_HAVE_UNISTD_H
diff --git a/libstdc++-v3/testsuite/util/testsuite_io.h b/libstdc++-v3/testsuite/util/testsuite_io.h
index 50b1955ca11..681448aa51f 100644
--- a/libstdc++-v3/testsuite/util/testsuite_io.h
+++ b/libstdc++-v3/testsuite/util/testsuite_io.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Testing streambuf/filebuf/stringbuf for the C++ library testsuite.
//
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -47,7 +47,7 @@ namespace __gnu_test
bool
write_position()
{
- bool one = this->pptr() != NULL;
+ bool one = this->pptr() != 0;
bool two = this->pptr() < this->epptr();
return one && two;
}
@@ -55,7 +55,7 @@ namespace __gnu_test
bool
read_position()
{
- bool one = this->gptr() != NULL;
+ bool one = this->gptr() != 0;
bool two = this->gptr() < this->egptr();
return one && two;
}
@@ -63,21 +63,21 @@ namespace __gnu_test
bool
unbuffered()
{
- bool one = this->pbase() == NULL;
- bool two = this->pptr() == NULL;
+ bool one = this->pbase() == 0;
+ bool two = this->pptr() == 0;
return one && two;
}
bool
check_pointers()
{
- bool one = this->eback() == NULL;
- bool two = this->gptr() == NULL;
- bool three = this->egptr() == NULL;
+ bool one = this->eback() == 0;
+ bool two = this->gptr() == 0;
+ bool three = this->egptr() == 0;
- bool four = this->pbase() == NULL;
- bool five = this->pptr() == NULL;
- bool six = this->epptr() == NULL;
+ bool four = this->pbase() == 0;
+ bool five = this->pptr() == 0;
+ bool six = this->epptr() == 0;
return one && two && three && four && five && six;
}
};
@@ -276,37 +276,37 @@ namespace __gnu_test
protected:
iter_type
do_put(iter_type, ios_base&, char_type, bool) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, long) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, unsigned long) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
#ifdef _GLIBCXX_USE_LONG_LONG
virtual iter_type
do_put(iter_type, ios_base&, char_type, long long) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, unsigned long long) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
#endif
virtual iter_type
do_put(iter_type, ios_base&, char_type, double) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, long double) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, const void*) const
- { throw facet_error(); return iter_type(NULL); }
+ { throw facet_error(); return iter_type(0); }
};
typedef fail_num_put<char> fail_num_put_char;
diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h
index 14a725fcbec..e7a068d208d 100644
--- a/libstdc++-v3/testsuite/util/testsuite_iterators.h
+++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Iterator Wrappers for the C++ library testsuite.
//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -118,7 +118,7 @@ namespace __gnu_test
*/
template<class T>
struct output_iterator_wrapper
- : public std::iterator<std::output_iterator_tag, T, ptrdiff_t, T*, T&>
+ : public std::iterator<std::output_iterator_tag, T, std::ptrdiff_t, T*, T&>
{
typedef OutputContainer<T> ContainerType;
T* ptr;
@@ -179,7 +179,7 @@ namespace __gnu_test
*/
template<class T>
class input_iterator_wrapper
- : public std::iterator<std::input_iterator_tag, T, ptrdiff_t, T*, T&>
+ : public std::iterator<std::input_iterator_tag, T, std::ptrdiff_t, T*, T&>
{
protected:
input_iterator_wrapper()
@@ -201,7 +201,7 @@ namespace __gnu_test
bool
operator==(const input_iterator_wrapper& in) const
{
- ITERATOR_VERIFY(SharedInfo != NULL && SharedInfo == in.SharedInfo);
+ ITERATOR_VERIFY(SharedInfo && SharedInfo == in.SharedInfo);
ITERATOR_VERIFY(ptr>=SharedInfo->first && in.ptr>=SharedInfo->first);
return ptr == in.ptr;
}
@@ -274,8 +274,8 @@ namespace __gnu_test
forward_iterator_wrapper()
{
- this->ptr = NULL;
- this->SharedInfo = NULL;
+ this->ptr = 0;
+ this->SharedInfo = 0;
}
T&
@@ -435,7 +435,7 @@ namespace __gnu_test
}
random_access_iterator_wrapper&
- operator+=(ptrdiff_t n)
+ operator+=(std::ptrdiff_t n)
{
if(n > 0)
{
@@ -451,17 +451,17 @@ namespace __gnu_test
}
random_access_iterator_wrapper&
- operator-=(ptrdiff_t n)
+ operator-=(std::ptrdiff_t n)
{ return *this += -n; }
random_access_iterator_wrapper
- operator-(ptrdiff_t n) const
+ operator-(std::ptrdiff_t n) const
{
random_access_iterator_wrapper<T> tmp = *this;
return tmp -= n;
}
- ptrdiff_t
+ std::ptrdiff_t
operator-(const random_access_iterator_wrapper<T>& in) const
{
ITERATOR_VERIFY(this->SharedInfo == in.SharedInfo);
@@ -469,7 +469,7 @@ namespace __gnu_test
}
T&
- operator[](ptrdiff_t n) const
+ operator[](std::ptrdiff_t n) const
{ return *(*this + n); }
bool
@@ -500,12 +500,12 @@ namespace __gnu_test
template<typename T>
random_access_iterator_wrapper<T>
- operator+(random_access_iterator_wrapper<T> it, ptrdiff_t n)
+ operator+(random_access_iterator_wrapper<T> it, std::ptrdiff_t n)
{ return it += n; }
template<typename T>
random_access_iterator_wrapper<T>
- operator+(ptrdiff_t n, random_access_iterator_wrapper<T> it)
+ operator+(std::ptrdiff_t n, random_access_iterator_wrapper<T> it)
{ return it += n; }
diff --git a/libstdc++-v3/testsuite/util/testsuite_performance.h b/libstdc++-v3/testsuite/util/testsuite_performance.h
index 54cf8856701..61efd042db2 100644
--- a/libstdc++-v3/testsuite/util/testsuite_performance.h
+++ b/libstdc++-v3/testsuite/util/testsuite_performance.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Testing performance utilities for the C++ library testsuite.
//
-// Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
+// Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -50,7 +50,7 @@ extern "C"
struct mallinfo
mallinfo(void)
{
- struct mallinfo m = { (((size_t) sbrk (0) + 1023) / 1024), 0 };
+ struct mallinfo m = { (((std::size_t) sbrk (0) + 1023) / 1024), 0 };
return m;
}
}
@@ -114,15 +114,15 @@ namespace __gnu_test
std::__throw_runtime_error("time_counter::stop");
}
- size_t
+ std::size_t
real_time() const
{ return elapsed_end - elapsed_begin; }
- size_t
+ std::size_t
user_time() const
{ return tms_end.tms_utime - tms_begin.tms_utime; }
- size_t
+ std::size_t
system_time() const
{ return tms_end.tms_stime - tms_begin.tms_stime; }
};
@@ -383,7 +383,7 @@ template<typename Container, int Iter>
template<typename Container, int Iter>
void*
- do_thread(void* p = NULL)
+ do_thread(void* p = 0)
{
do_loop<Container, Iter>();
return p;
@@ -412,10 +412,10 @@ template<typename Container, int Iter, bool Thread>
pthread_create(&t3, 0, &do_thread<Container, Iter>, 0);
pthread_create(&t4, 0, &do_thread<Container, Iter>, 0);
- pthread_join(t1, NULL);
- pthread_join(t2, NULL);
- pthread_join(t3, NULL);
- pthread_join(t4, NULL);
+ pthread_join(t1, 0);
+ pthread_join(t2, 0);
+ pthread_join(t3, 0);
+ pthread_join(t4, 0);
#endif
}
stop_counters(time, resource);
diff --git a/libstdc++-v3/testsuite/util/testsuite_tr1.h b/libstdc++-v3/testsuite/util/testsuite_tr1.h
index 4f3e574ccc2..5aac18292bb 100644
--- a/libstdc++-v3/testsuite/util/testsuite_tr1.h
+++ b/libstdc++-v3/testsuite/util/testsuite_tr1.h
@@ -1,7 +1,8 @@
// -*- C++ -*-
// Testing utilities for the tr1 testsuite.
//
-// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -127,8 +128,39 @@ namespace __gnu_test
{
ExplicitClass(double&);
explicit ExplicitClass(int&);
+ ExplicitClass(double&, int&, double&);
};
+ struct NothrowExplicitClass
+ {
+ NothrowExplicitClass(double&) throw();
+ explicit NothrowExplicitClass(int&) throw();
+ NothrowExplicitClass(double&, int&, double&) throw();
+ };
+
+ struct ThrowExplicitClass
+ {
+ ThrowExplicitClass(double&) throw(int);
+ explicit ThrowExplicitClass(int&) throw(int);
+ ThrowExplicitClass(double&, int&, double&) throw(int);
+ };
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ struct NoexceptExplicitClass
+ {
+ NoexceptExplicitClass(double&) noexcept(true);
+ explicit NoexceptExplicitClass(int&) noexcept(true);
+ NoexceptExplicitClass(double&, int&, double&) noexcept(true);
+ };
+
+ struct ExceptExplicitClass
+ {
+ ExceptExplicitClass(double&) noexcept(false);
+ explicit ExceptExplicitClass(int&) noexcept(false);
+ ExceptExplicitClass(double&, int&, double&) noexcept(false);
+ };
+#endif
+
struct NType // neither trivial nor standard-layout
{
int i;