Boost logo

Boost-Commit :

From: bdawes_at_[hidden]
Date: 2007-11-15 11:31:29


Author: bemandawes
Date: 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
New Revision: 41109
URL: http://svn.boost.org/trac/boost/changeset/41109

Log:
Merged tools, system, filesystem from trunk at 41106
Added:
   branches/release/boost/cerrno.hpp
      - copied unchanged from r41103, /trunk/boost/cerrno.hpp
   branches/release/boost/system/
      - copied from r41103, /trunk/boost/system/
   branches/release/libs/filesystem/doc/reference.html
      - copied unchanged from r41096, /trunk/libs/filesystem/doc/reference.html
   branches/release/libs/system/
      - copied from r41103, /trunk/libs/system/
   branches/release/tools/boostbook/xsl/callout.xsl
      - copied unchanged from r41096, /trunk/tools/boostbook/xsl/callout.xsl
   branches/release/tools/boostbook/xsl/xhtml.xsl
      - copied unchanged from r41096, /trunk/tools/boostbook/xsl/xhtml.xsl
   branches/release/tools/build/v2/boost_build.png
      - copied unchanged from r41096, /trunk/tools/build/v2/boost_build.png
   branches/release/tools/build/v2/doc/src/standalone.xml
      - copied unchanged from r41096, /trunk/tools/build/v2/doc/src/standalone.xml
   branches/release/tools/build/v2/example/qt/qt4/hello/
      - copied from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/
   branches/release/tools/build/v2/example/qt/qt4/hello/Jamroot (props changed)
      - copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/Jamroot
   branches/release/tools/build/v2/example/qt/qt4/hello/arrow.cpp
      - copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/arrow.cpp
   branches/release/tools/build/v2/example/qt/qt4/hello/arrow.h
      - copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/arrow.h
   branches/release/tools/build/v2/example/qt/qt4/hello/main.cpp
      - copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/main.cpp
   branches/release/tools/build/v2/test/example_customization.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/example_customization.py
   branches/release/tools/build/v2/test/example_gettext.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/example_gettext.py
   branches/release/tools/build/v2/test/example_libraries.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/example_libraries.py
   branches/release/tools/build/v2/test/example_make.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/example_make.py
   branches/release/tools/build/v2/test/example_qt4.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/example_qt4.py
   branches/release/tools/build/v2/test/free_features_request.py
      - copied unchanged from r41096, /trunk/tools/build/v2/test/free_features_request.py
   branches/release/tools/build/v2/tools/mipspro.jam
      - copied unchanged from r41096, /trunk/tools/build/v2/tools/mipspro.jam
   branches/release/tools/build/v2/tools/pathscale.jam
      - copied unchanged from r41096, /trunk/tools/build/v2/tools/pathscale.jam
   branches/release/tools/build/v2/tools/pgi.jam
      - copied unchanged from r41096, /trunk/tools/build/v2/tools/pgi.jam
   branches/release/tools/build/v2/tools/qt.jam
      - copied unchanged from r41096, /trunk/tools/build/v2/tools/qt.jam
   branches/release/tools/build/v2/tools/qt3.jam
      - copied unchanged from r41096, /trunk/tools/build/v2/tools/qt3.jam
   branches/release/tools/buildbot/
      - copied from r41096, /trunk/tools/buildbot/
   branches/release/tools/buildbot/config/
      - copied from r41096, /trunk/tools/buildbot/config/
   branches/release/tools/buildbot/config/master/
      - copied from r41096, /trunk/tools/buildbot/config/master/
   branches/release/tools/buildbot/config/master/alpha/
      - copied from r41096, /trunk/tools/buildbot/config/master/alpha/
   branches/release/tools/buildbot/config/master/alpha/master.cfg
      - copied unchanged from r41096, /trunk/tools/buildbot/config/master/alpha/master.cfg
   branches/release/tools/buildbot/src/
      - copied from r41096, /trunk/tools/buildbot/src/
   branches/release/tools/buildbot/src/boost/
      - copied from r41096, /trunk/tools/buildbot/src/boost/
   branches/release/tools/buildbot/src/boost/__init__.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/__init__.py
   branches/release/tools/buildbot/src/boost/bot/
      - copied from r41096, /trunk/tools/buildbot/src/boost/bot/
   branches/release/tools/buildbot/src/boost/bot/__init__.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/__init__.py
   branches/release/tools/buildbot/src/boost/bot/char_translation_table.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/char_translation_table.py
   branches/release/tools/buildbot/src/boost/bot/factory.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/factory.py
   branches/release/tools/buildbot/src/boost/bot/remote.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/remote.py
   branches/release/tools/buildbot/src/boost/bot/step.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/step.py
   branches/release/tools/buildbot/src/boost/buildbot/
      - copied from r41096, /trunk/tools/buildbot/src/boost/buildbot/
   branches/release/tools/buildbot/src/boost/buildbot/__init__.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/__init__.py
   branches/release/tools/buildbot/src/boost/buildbot/char_translation_table.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/char_translation_table.py
   branches/release/tools/buildbot/src/boost/buildbot/factory.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/factory.py
   branches/release/tools/buildbot/src/boost/buildbot/remote.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/remote.py
   branches/release/tools/buildbot/src/boost/buildbot/script.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/script.py
   branches/release/tools/buildbot/src/boost/buildbot/server.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/server.py
   branches/release/tools/buildbot/src/boost/buildbot/step.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/step.py
   branches/release/tools/buildbot/src/boost/patchwork.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/boost/patchwork.py
   branches/release/tools/buildbot/src/buildbot.py
      - copied unchanged from r41096, /trunk/tools/buildbot/src/buildbot.py
   branches/release/tools/common/
      - copied from r41096, /trunk/tools/common/
   branches/release/tools/common/time_string.hpp
      - copied unchanged from r41096, /trunk/tools/common/time_string.hpp
   branches/release/tools/inspect/doc/
      - copied from r41096, /trunk/tools/inspect/doc/
   branches/release/tools/inspect/doc/build.jam
      - copied unchanged from r41096, /trunk/tools/inspect/doc/build.jam
   branches/release/tools/inspect/doc/inspect.qbk
      - copied unchanged from r41096, /trunk/tools/inspect/doc/inspect.qbk
   branches/release/tools/inspect/run_inspect.sh
      - copied unchanged from r41096, /trunk/tools/inspect/run_inspect.sh
   branches/release/tools/inspect/unnamed_namespace_check.cpp
      - copied unchanged from r41096, /trunk/tools/inspect/unnamed_namespace_check.cpp
   branches/release/tools/inspect/unnamed_namespace_check.hpp
      - copied unchanged from r41096, /trunk/tools/inspect/unnamed_namespace_check.hpp
   branches/release/tools/jam/doc/history.qbk
      - copied unchanged from r41096, /trunk/tools/jam/doc/history.qbk
   branches/release/tools/jam/src/boehm_gc/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/
   branches/release/tools/jam/src/boehm_gc/AmigaOS.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/AmigaOS.c
   branches/release/tools/jam/src/boehm_gc/BCC_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/BCC_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/ChangeLog
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ChangeLog
   branches/release/tools/jam/src/boehm_gc/EMX_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/EMX_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/MacOS.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/MacOS.c
   branches/release/tools/jam/src/boehm_gc/MacProjects.sit.hqx
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/MacProjects.sit.hqx
   branches/release/tools/jam/src/boehm_gc/Mac_files/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/
   branches/release/tools/jam/src/boehm_gc/Mac_files/MacOS_Test_config.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/MacOS_Test_config.h
   branches/release/tools/jam/src/boehm_gc/Mac_files/MacOS_config.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/MacOS_config.h
   branches/release/tools/jam/src/boehm_gc/Mac_files/dataend.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/dataend.c
   branches/release/tools/jam/src/boehm_gc/Mac_files/datastart.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/datastart.c
   branches/release/tools/jam/src/boehm_gc/Makefile.DLLs
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.DLLs
   branches/release/tools/jam/src/boehm_gc/Makefile.am
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.am
   branches/release/tools/jam/src/boehm_gc/Makefile.direct
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.direct
   branches/release/tools/jam/src/boehm_gc/Makefile.dj
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.dj
   branches/release/tools/jam/src/boehm_gc/Makefile.in
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.in
   branches/release/tools/jam/src/boehm_gc/NT_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/NT_STATIC_THREADS_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_STATIC_THREADS_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/NT_THREADS_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_THREADS_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/OS2_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/OS2_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/PCR-Makefile
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/PCR-Makefile
   branches/release/tools/jam/src/boehm_gc/README.QUICK
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/README.QUICK
   branches/release/tools/jam/src/boehm_gc/SMakefile.amiga
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/SMakefile.amiga
   branches/release/tools/jam/src/boehm_gc/WCC_MAKEFILE
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/WCC_MAKEFILE
   branches/release/tools/jam/src/boehm_gc/acinclude.m4
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/acinclude.m4
   branches/release/tools/jam/src/boehm_gc/aclocal.m4
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/aclocal.m4
   branches/release/tools/jam/src/boehm_gc/add_gc_prefix.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/add_gc_prefix.c
   branches/release/tools/jam/src/boehm_gc/allchblk.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/allchblk.c
   branches/release/tools/jam/src/boehm_gc/alloc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/alloc.c
   branches/release/tools/jam/src/boehm_gc/alpha_mach_dep.S
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/alpha_mach_dep.S
   branches/release/tools/jam/src/boehm_gc/backgraph.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/backgraph.c
   branches/release/tools/jam/src/boehm_gc/bdw-gc.pc
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/bdw-gc.pc
   branches/release/tools/jam/src/boehm_gc/bdw-gc.pc.in
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/bdw-gc.pc.in
   branches/release/tools/jam/src/boehm_gc/blacklst.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/blacklst.c
   branches/release/tools/jam/src/boehm_gc/callprocs
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/callprocs
   branches/release/tools/jam/src/boehm_gc/checksums.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/checksums.c
   branches/release/tools/jam/src/boehm_gc/compile
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/compile
   branches/release/tools/jam/src/boehm_gc/config.guess
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/config.guess
   branches/release/tools/jam/src/boehm_gc/config.sub
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/config.sub
   branches/release/tools/jam/src/boehm_gc/configure
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure
   branches/release/tools/jam/src/boehm_gc/configure.ac
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure.ac
   branches/release/tools/jam/src/boehm_gc/configure.host
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure.host
   branches/release/tools/jam/src/boehm_gc/configure_atomic_ops.sh
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure_atomic_ops.sh
   branches/release/tools/jam/src/boehm_gc/cord/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/cord/
   branches/release/tools/jam/src/boehm_gc/cord/cord.am
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cord.am
   branches/release/tools/jam/src/boehm_gc/cord/cordbscs.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordbscs.c
   branches/release/tools/jam/src/boehm_gc/cord/cordprnt.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordprnt.c
   branches/release/tools/jam/src/boehm_gc/cord/cordtest.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordtest.c
   branches/release/tools/jam/src/boehm_gc/cord/cordxtra.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordxtra.c
   branches/release/tools/jam/src/boehm_gc/cord/de.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de.c
   branches/release/tools/jam/src/boehm_gc/cord/de_cmds.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_cmds.h
   branches/release/tools/jam/src/boehm_gc/cord/de_win.ICO
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.ICO
   branches/release/tools/jam/src/boehm_gc/cord/de_win.RC
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.RC
   branches/release/tools/jam/src/boehm_gc/cord/de_win.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.c
   branches/release/tools/jam/src/boehm_gc/cord/de_win.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.h
   branches/release/tools/jam/src/boehm_gc/darwin_stop_world.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/darwin_stop_world.c
   branches/release/tools/jam/src/boehm_gc/dbg_mlc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/dbg_mlc.c
   branches/release/tools/jam/src/boehm_gc/depcomp
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/depcomp
   branches/release/tools/jam/src/boehm_gc/digimars.mak
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/digimars.mak
   branches/release/tools/jam/src/boehm_gc/doc/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/doc/
   branches/release/tools/jam/src/boehm_gc/doc/README
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README
   branches/release/tools/jam/src/boehm_gc/doc/README.DGUX386
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.DGUX386
   branches/release/tools/jam/src/boehm_gc/doc/README.Mac
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.Mac
   branches/release/tools/jam/src/boehm_gc/doc/README.MacOSX
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.MacOSX
   branches/release/tools/jam/src/boehm_gc/doc/README.OS2
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.OS2
   branches/release/tools/jam/src/boehm_gc/doc/README.amiga
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.amiga
   branches/release/tools/jam/src/boehm_gc/doc/README.arm.cross
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.arm.cross
   branches/release/tools/jam/src/boehm_gc/doc/README.autoconf
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.autoconf
   branches/release/tools/jam/src/boehm_gc/doc/README.changes
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.changes
   branches/release/tools/jam/src/boehm_gc/doc/README.contributors
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.contributors
   branches/release/tools/jam/src/boehm_gc/doc/README.cords
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.cords
   branches/release/tools/jam/src/boehm_gc/doc/README.darwin
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.darwin
   branches/release/tools/jam/src/boehm_gc/doc/README.dj
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.dj
   branches/release/tools/jam/src/boehm_gc/doc/README.environment
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.environment
   branches/release/tools/jam/src/boehm_gc/doc/README.ews4800
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.ews4800
   branches/release/tools/jam/src/boehm_gc/doc/README.hp
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.hp
   branches/release/tools/jam/src/boehm_gc/doc/README.linux
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.linux
   branches/release/tools/jam/src/boehm_gc/doc/README.macros
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.macros
   branches/release/tools/jam/src/boehm_gc/doc/README.rs6000
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.rs6000
   branches/release/tools/jam/src/boehm_gc/doc/README.sgi
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.sgi
   branches/release/tools/jam/src/boehm_gc/doc/README.solaris2
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.solaris2
   branches/release/tools/jam/src/boehm_gc/doc/README.uts
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.uts
   branches/release/tools/jam/src/boehm_gc/doc/README.win32
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.win32
   branches/release/tools/jam/src/boehm_gc/doc/README.win64
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.win64
   branches/release/tools/jam/src/boehm_gc/doc/barrett_diagram
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/barrett_diagram
   branches/release/tools/jam/src/boehm_gc/doc/debugging.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/debugging.html
   branches/release/tools/jam/src/boehm_gc/doc/doc.am
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/doc.am
   branches/release/tools/jam/src/boehm_gc/doc/gc.man
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gc.man
   branches/release/tools/jam/src/boehm_gc/doc/gcdescr.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gcdescr.html
   branches/release/tools/jam/src/boehm_gc/doc/gcinterface.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gcinterface.html
   branches/release/tools/jam/src/boehm_gc/doc/leak.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/leak.html
   branches/release/tools/jam/src/boehm_gc/doc/overview.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/overview.html
   branches/release/tools/jam/src/boehm_gc/doc/porting.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/porting.html
   branches/release/tools/jam/src/boehm_gc/doc/scale.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/scale.html
   branches/release/tools/jam/src/boehm_gc/doc/simple_example.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/simple_example.html
   branches/release/tools/jam/src/boehm_gc/doc/tree.html
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/tree.html
   branches/release/tools/jam/src/boehm_gc/dyn_load.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/dyn_load.c
   branches/release/tools/jam/src/boehm_gc/finalize.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/finalize.c
   branches/release/tools/jam/src/boehm_gc/gc.mak
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc.mak
   branches/release/tools/jam/src/boehm_gc/gc_cpp.cc
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_cpp.cc
   branches/release/tools/jam/src/boehm_gc/gc_cpp.cpp
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_cpp.cpp
   branches/release/tools/jam/src/boehm_gc/gc_dlopen.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_dlopen.c
   branches/release/tools/jam/src/boehm_gc/gcj_mlc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gcj_mlc.c
   branches/release/tools/jam/src/boehm_gc/gcname.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gcname.c
   branches/release/tools/jam/src/boehm_gc/headers.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/headers.c
   branches/release/tools/jam/src/boehm_gc/hpux_test_and_clear.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/hpux_test_and_clear.s
   branches/release/tools/jam/src/boehm_gc/ia64_save_regs_in_stack.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ia64_save_regs_in_stack.s
   branches/release/tools/jam/src/boehm_gc/if_mach.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/if_mach.c
   branches/release/tools/jam/src/boehm_gc/if_not_there.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/if_not_there.c
   branches/release/tools/jam/src/boehm_gc/include/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/include/
   branches/release/tools/jam/src/boehm_gc/include/cord.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/cord.h
   branches/release/tools/jam/src/boehm_gc/include/ec.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/ec.h
   branches/release/tools/jam/src/boehm_gc/include/gc.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc.h
   branches/release/tools/jam/src/boehm_gc/include/gc_allocator.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_allocator.h
   branches/release/tools/jam/src/boehm_gc/include/gc_amiga_redirects.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_amiga_redirects.h
   branches/release/tools/jam/src/boehm_gc/include/gc_backptr.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_backptr.h
   branches/release/tools/jam/src/boehm_gc/include/gc_config_macros.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_config_macros.h
   branches/release/tools/jam/src/boehm_gc/include/gc_cpp.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_cpp.h
   branches/release/tools/jam/src/boehm_gc/include/gc_gcj.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_gcj.h
   branches/release/tools/jam/src/boehm_gc/include/gc_inline.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_inline.h
   branches/release/tools/jam/src/boehm_gc/include/gc_mark.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_mark.h
   branches/release/tools/jam/src/boehm_gc/include/gc_pthread_redirects.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_pthread_redirects.h
   branches/release/tools/jam/src/boehm_gc/include/gc_tiny_fl.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_tiny_fl.h
   branches/release/tools/jam/src/boehm_gc/include/gc_typed.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_typed.h
   branches/release/tools/jam/src/boehm_gc/include/include.am
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/include.am
   branches/release/tools/jam/src/boehm_gc/include/javaxfc.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/javaxfc.h
   branches/release/tools/jam/src/boehm_gc/include/leak_detector.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/leak_detector.h
   branches/release/tools/jam/src/boehm_gc/include/new_gc_alloc.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/new_gc_alloc.h
   branches/release/tools/jam/src/boehm_gc/include/private/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/include/private/
   branches/release/tools/jam/src/boehm_gc/include/private/cord_pos.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/cord_pos.h
   branches/release/tools/jam/src/boehm_gc/include/private/darwin_semaphore.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/darwin_semaphore.h
   branches/release/tools/jam/src/boehm_gc/include/private/darwin_stop_world.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/darwin_stop_world.h
   branches/release/tools/jam/src/boehm_gc/include/private/dbg_mlc.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/dbg_mlc.h
   branches/release/tools/jam/src/boehm_gc/include/private/gc_hdrs.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_hdrs.h
   branches/release/tools/jam/src/boehm_gc/include/private/gc_locks.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_locks.h
   branches/release/tools/jam/src/boehm_gc/include/private/gc_pmark.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_pmark.h
   branches/release/tools/jam/src/boehm_gc/include/private/gc_priv.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_priv.h
   branches/release/tools/jam/src/boehm_gc/include/private/gcconfig.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gcconfig.h
   branches/release/tools/jam/src/boehm_gc/include/private/msvc_dbg.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/msvc_dbg.h
   branches/release/tools/jam/src/boehm_gc/include/private/pthread_stop_world.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/pthread_stop_world.h
   branches/release/tools/jam/src/boehm_gc/include/private/pthread_support.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/pthread_support.h
   branches/release/tools/jam/src/boehm_gc/include/private/specific.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/specific.h
   branches/release/tools/jam/src/boehm_gc/include/private/thread_local_alloc.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/thread_local_alloc.h
   branches/release/tools/jam/src/boehm_gc/include/weakpointer.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/weakpointer.h
   branches/release/tools/jam/src/boehm_gc/install-sh
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/install-sh
   branches/release/tools/jam/src/boehm_gc/libtool.m4
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/libtool.m4
   branches/release/tools/jam/src/boehm_gc/ltmain.sh
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ltmain.sh
   branches/release/tools/jam/src/boehm_gc/mach_dep.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mach_dep.c
   branches/release/tools/jam/src/boehm_gc/malloc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/malloc.c
   branches/release/tools/jam/src/boehm_gc/mallocx.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mallocx.c
   branches/release/tools/jam/src/boehm_gc/mark.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mark.c
   branches/release/tools/jam/src/boehm_gc/mark_rts.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mark_rts.c
   branches/release/tools/jam/src/boehm_gc/mips_sgi_mach_dep.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mips_sgi_mach_dep.s
   branches/release/tools/jam/src/boehm_gc/mips_ultrix_mach_dep.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mips_ultrix_mach_dep.s
   branches/release/tools/jam/src/boehm_gc/misc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/misc.c
   branches/release/tools/jam/src/boehm_gc/missing
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/missing
   branches/release/tools/jam/src/boehm_gc/mkinstalldirs
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mkinstalldirs
   branches/release/tools/jam/src/boehm_gc/msvc_dbg.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/msvc_dbg.c
   branches/release/tools/jam/src/boehm_gc/new_hblk.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/new_hblk.c
   branches/release/tools/jam/src/boehm_gc/obj_map.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/obj_map.c
   branches/release/tools/jam/src/boehm_gc/os_dep.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/os_dep.c
   branches/release/tools/jam/src/boehm_gc/pcr_interface.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pcr_interface.c
   branches/release/tools/jam/src/boehm_gc/pthread_stop_world.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pthread_stop_world.c
   branches/release/tools/jam/src/boehm_gc/pthread_support.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pthread_support.c
   branches/release/tools/jam/src/boehm_gc/ptr_chck.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ptr_chck.c
   branches/release/tools/jam/src/boehm_gc/real_malloc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/real_malloc.c
   branches/release/tools/jam/src/boehm_gc/reclaim.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/reclaim.c
   branches/release/tools/jam/src/boehm_gc/rs6000_mach_dep.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/rs6000_mach_dep.s
   branches/release/tools/jam/src/boehm_gc/setjmp_t.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/setjmp_t.c
   branches/release/tools/jam/src/boehm_gc/sparc_mach_dep.S
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_mach_dep.S
   branches/release/tools/jam/src/boehm_gc/sparc_netbsd_mach_dep.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_netbsd_mach_dep.s
   branches/release/tools/jam/src/boehm_gc/sparc_sunos4_mach_dep.s
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_sunos4_mach_dep.s
   branches/release/tools/jam/src/boehm_gc/specific.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/specific.c
   branches/release/tools/jam/src/boehm_gc/stubborn.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/stubborn.c
   branches/release/tools/jam/src/boehm_gc/tests/
      - copied from r41096, /trunk/tools/jam/src/boehm_gc/tests/
   branches/release/tools/jam/src/boehm_gc/tests/leak_test.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/leak_test.c
   branches/release/tools/jam/src/boehm_gc/tests/middle.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/middle.c
   branches/release/tools/jam/src/boehm_gc/tests/test.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/test.c
   branches/release/tools/jam/src/boehm_gc/tests/test_cpp.cc
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/test_cpp.cc
   branches/release/tools/jam/src/boehm_gc/tests/tests.am
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/tests.am
   branches/release/tools/jam/src/boehm_gc/tests/thread_leak_test.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/thread_leak_test.c
   branches/release/tools/jam/src/boehm_gc/thread_local_alloc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/thread_local_alloc.c
   branches/release/tools/jam/src/boehm_gc/threadlibs.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/threadlibs.c
   branches/release/tools/jam/src/boehm_gc/typd_mlc.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/typd_mlc.c
   branches/release/tools/jam/src/boehm_gc/version.h
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/version.h
   branches/release/tools/jam/src/boehm_gc/win32_threads.c
      - copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/win32_threads.c
   branches/release/tools/jam/src/mem.c
      - copied unchanged from r41096, /trunk/tools/jam/src/mem.c
   branches/release/tools/jam/src/mem.h
      - copied unchanged from r41096, /trunk/tools/jam/src/mem.h
   branches/release/tools/jam/src/output.c
      - copied unchanged from r41096, /trunk/tools/jam/src/output.c
   branches/release/tools/jam/src/output.h
      - copied unchanged from r41096, /trunk/tools/jam/src/output.h
   branches/release/tools/jam/test/builtin_w32_getregnames.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/builtin_w32_getregnames.jam
   branches/release/tools/jam/test/option_d2.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/option_d2.jam
   branches/release/tools/jam/test/option_l.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/option_l.jam
   branches/release/tools/jam/test/option_n.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/option_n.jam
   branches/release/tools/jam/test/parallel_actions.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/parallel_actions.jam
   branches/release/tools/jam/test/parallel_multifile_actions.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/parallel_multifile_actions.jam
   branches/release/tools/jam/test/stress_var_expand.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/stress_var_expand.jam
   branches/release/tools/jam/test/target_var.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/target_var.jam
   branches/release/tools/jam/test/test.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/test.jam
   branches/release/tools/jam/test/var_expand.jam
      - copied unchanged from r41096, /trunk/tools/jam/test/var_expand.jam
   branches/release/tools/litre/
      - copied from r41096, /trunk/tools/litre/
   branches/release/tools/litre/cplusplus.py
      - copied unchanged from r41096, /trunk/tools/litre/cplusplus.py
   branches/release/tools/litre/litre.py
      - copied unchanged from r41096, /trunk/tools/litre/litre.py
   branches/release/tools/litre/tool.py
      - copied unchanged from r41096, /trunk/tools/litre/tool.py
   branches/release/tools/quickbook/code_snippet.hpp
      - copied unchanged from r41096, /trunk/tools/quickbook/code_snippet.hpp
   branches/release/tools/quickbook/detail/actions_class.cpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/actions_class.cpp
   branches/release/tools/quickbook/detail/actions_class.hpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/actions_class.hpp
   branches/release/tools/quickbook/detail/collector.cpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/collector.cpp
   branches/release/tools/quickbook/detail/collector.hpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/collector.hpp
   branches/release/tools/quickbook/detail/markups.hpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/markups.hpp
   branches/release/tools/quickbook/detail/template_stack.cpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/template_stack.cpp
   branches/release/tools/quickbook/detail/template_stack.hpp
      - copied unchanged from r41096, /trunk/tools/quickbook/detail/template_stack.hpp
   branches/release/tools/quickbook/doc/html/images/callouts/
      - copied from r41096, /trunk/tools/quickbook/doc/html/images/callouts/
   branches/release/tools/quickbook/doc/html/images/callouts/1.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/1.png
   branches/release/tools/quickbook/doc/html/images/callouts/10.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/10.png
   branches/release/tools/quickbook/doc/html/images/callouts/11.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/11.png
   branches/release/tools/quickbook/doc/html/images/callouts/12.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/12.png
   branches/release/tools/quickbook/doc/html/images/callouts/13.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/13.png
   branches/release/tools/quickbook/doc/html/images/callouts/14.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/14.png
   branches/release/tools/quickbook/doc/html/images/callouts/15.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/15.png
   branches/release/tools/quickbook/doc/html/images/callouts/2.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/2.png
   branches/release/tools/quickbook/doc/html/images/callouts/3.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/3.png
   branches/release/tools/quickbook/doc/html/images/callouts/4.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/4.png
   branches/release/tools/quickbook/doc/html/images/callouts/5.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/5.png
   branches/release/tools/quickbook/doc/html/images/callouts/6.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/6.png
   branches/release/tools/quickbook/doc/html/images/callouts/7.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/7.png
   branches/release/tools/quickbook/doc/html/images/callouts/8.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/8.png
   branches/release/tools/quickbook/doc/html/images/callouts/9.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/9.png
   branches/release/tools/quickbook/doc/html/images/caution.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/caution.png
   branches/release/tools/quickbook/doc/html/images/extra/
      - copied from r41096, /trunk/tools/quickbook/doc/html/images/extra/
   branches/release/tools/quickbook/doc/html/images/extra/katepart/
      - copied from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/
   branches/release/tools/quickbook/doc/html/images/extra/katepart/boost.hs.logo.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/boost.hs.logo.png
   branches/release/tools/quickbook/doc/html/images/extra/katepart/table.boost.hs.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/table.boost.hs.png
   branches/release/tools/quickbook/doc/html/images/extra/katepart/table.text.editor.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/table.text.editor.png
   branches/release/tools/quickbook/doc/html/images/important.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/important.png
   branches/release/tools/quickbook/doc/html/images/warning.png
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/warning.png
   branches/release/tools/quickbook/doc/html/quickbook/editors/
      - copied from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/
   branches/release/tools/quickbook/doc/html/quickbook/editors.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors.html
   branches/release/tools/quickbook/doc/html/quickbook/editors/kde_support.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/kde_support.html
   branches/release/tools/quickbook/doc/html/quickbook/editors/scite.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/scite.html
   branches/release/tools/quickbook/doc/html/quickbook/faq.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/faq.html
   branches/release/tools/quickbook/doc/html/quickbook/install/
      - copied from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/
   branches/release/tools/quickbook/doc/html/quickbook/install.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install.html
   branches/release/tools/quickbook/doc/html/quickbook/install/linux.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/linux.html
   branches/release/tools/quickbook/doc/html/quickbook/install/macosx.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/macosx.html
   branches/release/tools/quickbook/doc/html/quickbook/install/windows.html
      - copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/windows.html
   branches/release/tools/quickbook/extra/
      - copied from r41096, /trunk/tools/quickbook/extra/
   branches/release/tools/quickbook/extra/katepart/
      - copied from r41096, /trunk/tools/quickbook/extra/katepart/
   branches/release/tools/quickbook/extra/katepart/install.sh
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/install.sh
   branches/release/tools/quickbook/extra/katepart/katepart.qbk
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/katepart.qbk
   branches/release/tools/quickbook/extra/katepart/syntax/
      - copied from r41096, /trunk/tools/quickbook/extra/katepart/syntax/
   branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_boost.xml
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_boost.xml
   branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_cpp.xml
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_cpp.xml
   branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_quickbook.xml
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_quickbook.xml
   branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_std.xml
      - copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_std.xml
   branches/release/tools/quickbook/test/import.gold (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/import.gold
   branches/release/tools/quickbook/test/import.quickbook (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/import.quickbook
   branches/release/tools/quickbook/test/stub.cpp
      - copied unchanged from r41096, /trunk/tools/quickbook/test/stub.cpp
   branches/release/tools/quickbook/test/stub.xml
      - copied unchanged from r41096, /trunk/tools/quickbook/test/stub.xml
   branches/release/tools/quickbook/test/templates.gold (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/templates.gold
   branches/release/tools/quickbook/test/templates.quickbook (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/templates.quickbook
   branches/release/tools/quickbook/test/xinclude.gold (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/xinclude.gold
   branches/release/tools/quickbook/test/xinclude.quickbook (contents, props changed)
      - copied, changed from r41096, /trunk/tools/quickbook/test/xinclude.quickbook
   branches/release/tools/regression/build/Jamroot.jam
      - copied unchanged from r41096, /trunk/tools/regression/build/Jamroot.jam
   branches/release/tools/regression/build/vcide/compiler_status.vcproj
      - copied unchanged from r41096, /trunk/tools/regression/build/vcide/compiler_status.vcproj
   branches/release/tools/regression/build/vcide/library_status.vcproj
      - copied unchanged from r41096, /trunk/tools/regression/build/vcide/library_status.vcproj
   branches/release/tools/regression/build/vcide/regression.sln
      - copied unchanged from r41096, /trunk/tools/regression/build/vcide/regression.sln
   branches/release/tools/regression/doc/
      - copied from r41096, /trunk/tools/regression/doc/
   branches/release/tools/regression/library_status.html
      - copied unchanged from r41096, /trunk/tools/regression/library_status.html
   branches/release/tools/regression/src/
      - copied from r41096, /trunk/tools/regression/src/
   branches/release/tools/regression/src/boost_svn_export_archive.sh
      - copied unchanged from r41096, /trunk/tools/regression/src/boost_svn_export_archive.sh
   branches/release/tools/regression/src/collect_and_upload_logs.py
      - copied unchanged from r41096, /trunk/tools/regression/src/collect_and_upload_logs.py
   branches/release/tools/regression/src/compiler_status.cpp
      - copied unchanged from r41096, /trunk/tools/regression/src/compiler_status.cpp
   branches/release/tools/regression/src/detail/
      - copied from r41096, /trunk/tools/regression/src/detail/
   branches/release/tools/regression/src/detail/tiny_xml.cpp
      - copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml.cpp
   branches/release/tools/regression/src/detail/tiny_xml.hpp
      - copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml.hpp
   branches/release/tools/regression/src/detail/tiny_xml_test.cpp
      - copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml_test.cpp
   branches/release/tools/regression/src/detail/tiny_xml_test.txt
      - copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml_test.txt
   branches/release/tools/regression/src/library_status.cpp
      - copied unchanged from r41096, /trunk/tools/regression/src/library_status.cpp
   branches/release/tools/regression/src/library_test.bat
      - copied unchanged from r41096, /trunk/tools/regression/src/library_test.bat
   branches/release/tools/regression/src/library_test.sh
      - copied unchanged from r41096, /trunk/tools/regression/src/library_test.sh
   branches/release/tools/regression/src/library_test_all.sh
      - copied unchanged from r41096, /trunk/tools/regression/src/library_test_all.sh
   branches/release/tools/regression/src/process_jam_log.cpp
      - copied unchanged from r41096, /trunk/tools/regression/src/process_jam_log.cpp
   branches/release/tools/regression/src/regression-logs.pl
      - copied unchanged from r41096, /trunk/tools/regression/src/regression-logs.pl
   branches/release/tools/regression/src/regression.py
      - copied unchanged from r41096, /trunk/tools/regression/src/regression.py
   branches/release/tools/regression/src/run.py
      - copied unchanged from r41096, /trunk/tools/regression/src/run.py
   branches/release/tools/regression/src/run_tests.sh
      - copied unchanged from r41096, /trunk/tools/regression/src/run_tests.sh
   branches/release/tools/regression/src/smoke.py
      - copied unchanged from r41096, /trunk/tools/regression/src/smoke.py
   branches/release/tools/regression/test/Jamfile.v2
      - copied unchanged from r41096, /trunk/tools/regression/test/Jamfile.v2
   branches/release/tools/regression/test/test-boost-build/
      - copied from r41096, /trunk/tools/regression/test/test-boost-build/
   branches/release/tools/regression/test/test-boost-build/ignored_rc/
      - copied from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/
   branches/release/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam
   branches/release/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/
      - copied from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/
      - copied from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp
   branches/release/tools/regression/test/test-boost-build/missing_dependencies/test.cpp
      - copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/test.cpp
   branches/release/tools/regression/test/test-cases/Huber2629/ (props changed)
      - copied from r41096, /trunk/tools/regression/test/test-cases/Huber2629/
   branches/release/tools/regression/test/test-cases/Huber2629/bjam.log (props changed)
      - copied unchanged from r41096, /trunk/tools/regression/test/test-cases/Huber2629/bjam.log
   branches/release/tools/regression/test/test-cases/Huber2629/expected/
      - copied from r41096, /trunk/tools/regression/test/test-cases/Huber2629/expected/
   branches/release/tools/regression/test/test-cases/Huber2629/expected/results.xml
      - copied unchanged from r41096, /trunk/tools/regression/test/test-cases/Huber2629/expected/results.xml
   branches/release/tools/regression/xsl_reports/boostbook_report.py
      - copied unchanged from r41096, /trunk/tools/regression/xsl_reports/boostbook_report.py
   branches/release/tools/regression/xsl_reports/build_results.sh
      - copied unchanged from r41096, /trunk/tools/regression/xsl_reports/build_results.sh
   branches/release/tools/regression/xsl_reports/utils/rename.py
      - copied unchanged from r41096, /trunk/tools/regression/xsl_reports/utils/rename.py
   branches/release/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl
      - copied unchanged from r41096, /trunk/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl
   branches/release/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl
      - copied unchanged from r41096, /trunk/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl
Removed:
   branches/release/boost/filesystem/cerrno.hpp
   branches/release/libs/filesystem/doc/tr2_proposal.html
   branches/release/tools/quickbook/doc/html/boostbook.css
   branches/release/tools/quickbook/doc/quickbook.xml
   branches/release/tools/regression/build/Jamfile.v2
   branches/release/tools/regression/compiler_status.cpp
   branches/release/tools/regression/detail/
   branches/release/tools/regression/process_jam_log.cpp
   branches/release/tools/regression/regression-logs.pl
   branches/release/tools/regression/run_tests.sh
   branches/release/tools/regression/test/test-cases/borland/
   branches/release/tools/regression/test/test-cases/libs/
   branches/release/tools/regression/xsl_reports/db/
   branches/release/tools/regression/xsl_reports/runner/instructions.rst
   branches/release/tools/regression/xsl_reports/test/test-components/
   branches/release/tools/release/user-config.jam
Properties modified:
   branches/release/tools/build/v2/example/customization/inline_file.py (props changed)
   branches/release/tools/build/v2/nightly.sh (contents, props changed)
   branches/release/tools/build/v2/roll.sh (contents, props changed)
   branches/release/tools/jam/build_dist.bat (contents, props changed)
   branches/release/tools/jam/build_dist.sh (contents, props changed)
   branches/release/tools/jam/src/build.sh (contents, props changed)
   branches/release/tools/jam/test/test.sh (contents, props changed)
   branches/release/tools/regression/xsl_reports/runner/regression.py (contents, props changed)
Text files modified:
   branches/release/boost/filesystem/config.hpp | 9
   branches/release/boost/filesystem/convenience.hpp | 95
   branches/release/boost/filesystem/operations.hpp | 276 +
   branches/release/boost/filesystem/path.hpp | 223
   branches/release/libs/filesystem/build/Jamfile.v2 | 26
   branches/release/libs/filesystem/doc/faq.htm | 421 +-
   branches/release/libs/filesystem/doc/index.htm | 161
   branches/release/libs/filesystem/example/Jamfile.v2 | 6
   branches/release/libs/filesystem/example/mbpath.cpp | 7
   branches/release/libs/filesystem/src/operations.cpp | 438 +-
   branches/release/libs/filesystem/src/path.cpp | 58
   branches/release/libs/filesystem/src/portability.cpp | 2
   branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp | 9
   branches/release/libs/filesystem/test/Jamfile.v2 | 31
   branches/release/libs/filesystem/test/convenience_test.cpp | 114
   branches/release/libs/filesystem/test/fstream_test.cpp | 10
   branches/release/libs/filesystem/test/lpath.hpp | 2
   branches/release/libs/filesystem/test/operations_test.cpp | 300 +
   branches/release/libs/filesystem/test/path_test.cpp | 19
   branches/release/libs/filesystem/test/wide_test.cpp | 14
   branches/release/tools/bcp/add_path.cpp | 4
   branches/release/tools/bcp/bcp.hpp | 1
   branches/release/tools/bcp/bcp.html | 20
   branches/release/tools/bcp/bcp_imp.cpp | 12
   branches/release/tools/bcp/bcp_imp.hpp | 3
   branches/release/tools/bcp/file_types.cpp | 2
   branches/release/tools/bcp/main.cpp | 4
   branches/release/tools/bcp/scan_cvs_path.cpp | 86
   branches/release/tools/boostbook/doc/boostbook.xml | 12
   branches/release/tools/boostbook/doc/reference.dtdxml | 151
   branches/release/tools/boostbook/doc/reference.xml | 228
   branches/release/tools/boostbook/dtd/boostbook.dtd | 78
   branches/release/tools/boostbook/setup_boostbook.py | 35
   branches/release/tools/boostbook/setup_boostbook.sh | 27
   branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl | 424 +-
   branches/release/tools/boostbook/xsl/chunk-common.xsl | 2
   branches/release/tools/boostbook/xsl/docbook.xsl | 25
   branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl | 92
   branches/release/tools/boostbook/xsl/fo.xsl | 92
   branches/release/tools/boostbook/xsl/function.xsl | 119
   branches/release/tools/boostbook/xsl/html.xsl | 60
   branches/release/tools/boostbook/xsl/library.xsl | 2
   branches/release/tools/boostbook/xsl/lookup.xsl | 163
   branches/release/tools/boostbook/xsl/navbar.xsl | 4
   branches/release/tools/boostbook/xsl/reference.xsl | 20
   branches/release/tools/boostbook/xsl/template.xsl | 2
   branches/release/tools/boostbook/xsl/type.xsl | 536 ++-
   branches/release/tools/boostbook/xsl/utility.xsl | 36
   branches/release/tools/build/v2/build-system.jam | 12
   branches/release/tools/build/v2/build/feature.jam | 5
   branches/release/tools/build/v2/build/modifiers.jam | 79
   branches/release/tools/build/v2/build/project.jam | 9
   branches/release/tools/build/v2/build/property.jam | 32
   branches/release/tools/build/v2/build/targets.jam | 50
   branches/release/tools/build/v2/build/toolset.jam | 23
   branches/release/tools/build/v2/build/version.jam | 2
   branches/release/tools/build/v2/changes.txt | 38
   branches/release/tools/build/v2/doc/src/faq.xml | 12
   branches/release/tools/build/v2/doc/src/reference.xml | 20
   branches/release/tools/build/v2/doc/src/tasks.xml | 8
   branches/release/tools/build/v2/doc/src/tutorial.xml | 4
   branches/release/tools/build/v2/example/generator/soap.jam | 3
   branches/release/tools/build/v2/index.html | 155
   branches/release/tools/build/v2/kernel/errors.jam | 2
   branches/release/tools/build/v2/nightly.sh | 2
   branches/release/tools/build/v2/release_procedure.txt | 20
   branches/release/tools/build/v2/roll.sh | 20
   branches/release/tools/build/v2/test/BoostBuild.py | 170
   branches/release/tools/build/v2/test/TestCmd.py | 6
   branches/release/tools/build/v2/test/boostbook.py | 8
   branches/release/tools/build/v2/test/boostbook/Jamroot | 2
   branches/release/tools/build/v2/test/boostbook/docs.xml | 2
   branches/release/tools/build/v2/test/build_dir.py | 4
   branches/release/tools/build/v2/test/gcc_runtime.py | 2
   branches/release/tools/build/v2/test/library_chain.py | 3
   branches/release/tools/build/v2/test/project_glob.py | 33
   branches/release/tools/build/v2/test/railsys/program/Jamfile | 1
   branches/release/tools/build/v2/test/rebuilds.py | 3
   branches/release/tools/build/v2/test/regression.py | 2
   branches/release/tools/build/v2/test/remove_requirement.py | 4
   branches/release/tools/build/v2/test/searched_lib.py | 2
   branches/release/tools/build/v2/test/test-config-example.jam | 4
   branches/release/tools/build/v2/test/test_all.py | 18
   branches/release/tools/build/v2/test/tree.py | 10
   branches/release/tools/build/v2/tools/acc.jam | 19
   branches/release/tools/build/v2/tools/boostbook.jam | 106
   branches/release/tools/build/v2/tools/borland.jam | 2
   branches/release/tools/build/v2/tools/builtin.jam | 22
   branches/release/tools/build/v2/tools/common.jam | 11
   branches/release/tools/build/v2/tools/darwin.jam | 4
   branches/release/tools/build/v2/tools/doxproc.py | 342 ++
   branches/release/tools/build/v2/tools/doxygen.jam | 149
   branches/release/tools/build/v2/tools/fortran.jam | 23
   branches/release/tools/build/v2/tools/gcc.jam | 108
   branches/release/tools/build/v2/tools/intel-win.jam | 5
   branches/release/tools/build/v2/tools/intel.jam | 2
   branches/release/tools/build/v2/tools/mpi.jam | 75
   branches/release/tools/build/v2/tools/msvc.jam | 19
   branches/release/tools/build/v2/tools/python.jam | 31
   branches/release/tools/build/v2/tools/qcc.jam | 6
   branches/release/tools/build/v2/tools/qt4.jam | 74
   branches/release/tools/build/v2/tools/quickbook.jam | 7
   branches/release/tools/build/v2/tools/stlport.jam | 27
   branches/release/tools/build/v2/tools/sun.jam | 17
   branches/release/tools/build/v2/tools/types/lib.jam | 4
   branches/release/tools/build/v2/tools/xsltproc.jam | 6
   branches/release/tools/build/v2/user-config.jam | 42
   branches/release/tools/build/v2/util/path.jam | 11
   branches/release/tools/inspect/build/Jamfile.v2 | 5
   branches/release/tools/inspect/index.html | 4
   branches/release/tools/inspect/inspect.cpp | 43
   branches/release/tools/inspect/link_check.cpp | 30
   branches/release/tools/inspect/link_check.hpp | 5
   branches/release/tools/jam/build_dist.bat | 35
   branches/release/tools/jam/build_dist.sh | 28
   branches/release/tools/jam/doc/bjam.qbk | 539 ++-
   branches/release/tools/jam/doc/build.jam | 6
   branches/release/tools/jam/src/Jambase | 2
   branches/release/tools/jam/src/boost-jam.spec | 128
   branches/release/tools/jam/src/build.bat | 253
   branches/release/tools/jam/src/build.jam | 209 +
   branches/release/tools/jam/src/build.sh | 30
   branches/release/tools/jam/src/builtins.c | 119
   branches/release/tools/jam/src/builtins.h | 6
   branches/release/tools/jam/src/command.c | 17
   branches/release/tools/jam/src/compile.c | 118
   branches/release/tools/jam/src/debug.c | 16
   branches/release/tools/jam/src/execcmd.h | 6
   branches/release/tools/jam/src/execmac.c | 2
   branches/release/tools/jam/src/execnt.c | 1384 ++++----
   branches/release/tools/jam/src/execunix.c | 498 ++
   branches/release/tools/jam/src/execvms.c | 6
   branches/release/tools/jam/src/expand.c | 46
   branches/release/tools/jam/src/filent.c | 5
   branches/release/tools/jam/src/fileunix.c | 7
   branches/release/tools/jam/src/frames.c | 1
   branches/release/tools/jam/src/frames.h | 8
   branches/release/tools/jam/src/hash.c | 213
   branches/release/tools/jam/src/hcache.c | 2
   branches/release/tools/jam/src/jam.c | 59
   branches/release/tools/jam/src/jam.h | 37
   branches/release/tools/jam/src/jambase.c | 2
   branches/release/tools/jam/src/lists.c | 5
   branches/release/tools/jam/src/lists.h | 1
   branches/release/tools/jam/src/make.c | 6
   branches/release/tools/jam/src/make1.c | 89
   branches/release/tools/jam/src/modules.c | 1
   branches/release/tools/jam/src/modules/order.c | 23
   branches/release/tools/jam/src/modules/regex.c | 6
   branches/release/tools/jam/src/newstr.c | 17
   branches/release/tools/jam/src/parse.c | 7
   branches/release/tools/jam/src/patchlevel.h | 6
   branches/release/tools/jam/src/regexp.c | 6
   branches/release/tools/jam/src/rules.c | 50
   branches/release/tools/jam/src/rules.h | 2
   branches/release/tools/jam/src/scan.c | 7
   branches/release/tools/jam/src/strings.c | 10
   branches/release/tools/jam/src/timestamp.c | 1
   branches/release/tools/jam/src/variable.c | 16
   branches/release/tools/jam/src/w32_getreg.c | 127
   branches/release/tools/jam/test/builtin_shell.jam | 29
   branches/release/tools/jam/test/test.bat | 5
   branches/release/tools/jam/test/test.sh | 2
   branches/release/tools/quickbook/Jamfile.v2 | 8
   branches/release/tools/quickbook/block.hpp | 170
   branches/release/tools/quickbook/detail/actions.cpp | 1092 +++++--
   branches/release/tools/quickbook/detail/actions.hpp | 702 ++--
   branches/release/tools/quickbook/detail/post_process.cpp | 206
   branches/release/tools/quickbook/detail/post_process.hpp | 2
   branches/release/tools/quickbook/detail/quickbook.cpp | 95
   branches/release/tools/quickbook/detail/utils.cpp | 191
   branches/release/tools/quickbook/detail/utils.hpp | 46
   branches/release/tools/quickbook/doc/Jamfile.v2 | 14
   branches/release/tools/quickbook/doc/html/index.html | 51
   branches/release/tools/quickbook/doc/html/quickbook/change_log.html | 103
   branches/release/tools/quickbook/doc/html/quickbook/intro.html | 76
   branches/release/tools/quickbook/doc/html/quickbook/ref.html | 1080 +++++-
   branches/release/tools/quickbook/doc/html/quickbook/syntax.html | 38
   branches/release/tools/quickbook/doc/html/quickbook/syntax/block.html | 1302 +++++++-
   branches/release/tools/quickbook/doc/html/quickbook/syntax/comments.html | 40
   branches/release/tools/quickbook/doc/html/quickbook/syntax/phrase.html | 621 ++-
   branches/release/tools/quickbook/doc/quickbook.qbk | 1075 +++++++
   branches/release/tools/quickbook/doc_info.hpp | 4
   branches/release/tools/quickbook/index.html | 11
   branches/release/tools/quickbook/phrase.hpp | 242 +
   branches/release/tools/quickbook/syntax_highlight.hpp | 20
   branches/release/tools/quickbook/test/Jamfile.v2 | 3
   branches/release/tools/quickbook/test/code-block-1.gold | 48
   branches/release/tools/quickbook/test/code-block-1.quickbook | 32
   branches/release/tools/quickbook/test/code-block-2.gold | 52
   branches/release/tools/quickbook/test/code-block-2.quickbook | 36
   branches/release/tools/quickbook/test/code-snippet.gold | 40
   branches/release/tools/quickbook/test/code-snippet.quickbook | 20
   branches/release/tools/quickbook/test/escape.gold | 33
   branches/release/tools/quickbook/test/escape.quickbook | 24
   branches/release/tools/quickbook/test/import.gold | 80
   branches/release/tools/quickbook/test/import.quickbook | 12
   branches/release/tools/quickbook/test/link-side-by-side.gold | 36
   branches/release/tools/quickbook/test/link-side-by-side.quickbook | 26
   branches/release/tools/quickbook/test/preformatted.gold | 58
   branches/release/tools/quickbook/test/preformatted.quickbook | 44
   branches/release/tools/quickbook/test/quickbook-manual.gold | 5741 ++++++++++++++++++++++++++-------------
   branches/release/tools/quickbook/test/quickbook-manual.quickbook | 3206 +++++++++++++--------
   branches/release/tools/quickbook/test/templates.gold | 140
   branches/release/tools/quickbook/test/templates.quickbook | 192
   branches/release/tools/quickbook/test/xinclude.gold | 18
   branches/release/tools/quickbook/test/xinclude.quickbook | 8
   branches/release/tools/regression/build/vcide/process_jam_log.vcproj | 28
   branches/release/tools/regression/index.htm | 18
   branches/release/tools/regression/xsl_reports/boost_wide_report.py | 68
   branches/release/tools/regression/xsl_reports/email_maintainers.py | 52
   branches/release/tools/regression/xsl_reports/make_snapshot.py | 71
   branches/release/tools/regression/xsl_reports/report.py | 4
   branches/release/tools/regression/xsl_reports/runner/collect_and_upload_logs.py | 183 +
   branches/release/tools/regression/xsl_reports/runner/default.css | 6
   branches/release/tools/regression/xsl_reports/runner/instructions.html | 625 ---
   branches/release/tools/regression/xsl_reports/runner/regression.py | 180
   branches/release/tools/regression/xsl_reports/test/common.py | 8
   branches/release/tools/regression/xsl_reports/test/generate_test_results.py | 10
   branches/release/tools/regression/xsl_reports/test/test.py | 2
   branches/release/tools/regression/xsl_reports/utils/__init__.py | 1
   branches/release/tools/regression/xsl_reports/utils/libxslt.py | 16
   branches/release/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl | 9
   branches/release/tools/regression/xsl_reports/xsl/v2/common.xsl | 13
   branches/release/tools/regression/xsl_reports/xsl/v2/html/master.css | 5
   branches/release/tools/regression/xsl_reports/xsl/v2/issues_page.xsl | 4
   branches/release/tools/regression/xsl_reports/xsl/v2/links_page.xsl | 38
   branches/release/tools/regression/xsl_reports/xsl/v2/result_page.xsl | 8
   branches/release/tools/wave/build/Jamfile.v2 | 14
   branches/release/tools/wave/cpp.cpp | 129
   branches/release/tools/wave/cpp_version.hpp | 4
   branches/release/tools/wave/trace_macro_expansion.hpp | 506 ++
   232 files changed, 19306 insertions(+), 10362 deletions(-)

Deleted: branches/release/boost/filesystem/cerrno.hpp
==============================================================================
--- branches/release/boost/filesystem/cerrno.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
+++ (empty file)
@@ -1,23 +0,0 @@
-// Boost Filesystem cerrno.hpp header --------------------------------------//
-
-// Copyright Beman Dawes 2005.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#ifndef BOOST_FILESYSTEM_CERRNO_HPP
-#define BOOST_FILESYSTEM_CERRNO_HPP
-
-#include <cerrno>
-
-#if defined __BORLANDC__
-#define ENOSYS 9997
-#endif
-
-#define EBADHANDLE 9998 // bad handle
-#define EOTHER 9999 // Other error not translatable
- // to a POSIX errno value
-
-#endif // include guard

Modified: branches/release/boost/filesystem/config.hpp
==============================================================================
--- branches/release/boost/filesystem/config.hpp (original)
+++ branches/release/boost/filesystem/config.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
 // boost/filesystem/config.hpp ---------------------------------------------//
 
 // Copyright Beman Dawes 2003
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 // See library home page at http://www.boost.org/libs/filesystem
 
@@ -23,6 +23,7 @@
 // http://www.boost.org/more/separate_compilation.html
 
 #include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
 
 // determine platform ------------------------------------------------------//
 
@@ -59,7 +60,7 @@
 
 // narrow support only for badly broken compilers or libraries -------------//
 
-# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE)
+# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
 # define BOOST_FILESYSTEM_NARROW_ONLY
 # endif
 

Modified: branches/release/boost/filesystem/convenience.hpp
==============================================================================
--- branches/release/boost/filesystem/convenience.hpp (original)
+++ branches/release/boost/filesystem/convenience.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -14,6 +14,7 @@
 #define BOOST_FILESYSTEM_CONVENIENCE_HPP
 
 #include <boost/filesystem/operations.hpp>
+#include <boost/system/error_code.hpp>
 #include <vector>
 #include <stack>
 
@@ -28,7 +29,7 @@
 # else
 # define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
     typedef boost::filesystem::path Path;
-# define BOOST_FS_FUNC_STRING std::string
+# define BOOST_FS_FUNC_STRING inline std::string
 # define BOOST_FS_TYPENAME
 # endif
 
@@ -43,7 +44,8 @@
          {
            if ( !ph.empty() && !is_directory(ph) )
                boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::create_directories", ph, -1 ) );
+ "boost::filesystem::create_directories", ph,
+ make_error_code( boost::system::posix::file_exists ) ) );
            return false;
          }
 
@@ -138,7 +140,8 @@
       basic_recursive_directory_iterator(){} // creates the "end" iterator
 
       explicit basic_recursive_directory_iterator( const Path & dir_path );
- basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec );
+ basic_recursive_directory_iterator( const Path & dir_path,
+ system::error_code & ec );
 
       int level() const { return m_imp->m_level; }
 
@@ -185,6 +188,7 @@
 
       bool equal( const basic_recursive_directory_iterator & rhs ) const
         { return m_imp == rhs.m_imp; }
+
     };
 
     typedef basic_recursive_directory_iterator<path> recursive_directory_iterator;
@@ -201,15 +205,20 @@
       : m_imp( new detail::recur_dir_itr_imp<Path> )
     {
       m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path ) );
+ if ( m_imp->m_stack.top () == basic_directory_iterator<Path>() )
+ { m_imp.reset (); }
     }
 
     template<class Path>
     basic_recursive_directory_iterator<Path>::
- basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec )
+ basic_recursive_directory_iterator( const Path & dir_path,
+ system::error_code & ec )
       : m_imp( new detail::recur_dir_itr_imp<Path> )
     {
- m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path, std::nothrow ) );
       m_imp->m_no_throw = true;
+ m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path, ec ) );
+ if ( m_imp->m_stack.top () == basic_directory_iterator<Path>() )
+ { m_imp.reset (); }
     }
 
     // increment
@@ -220,15 +229,15 @@
       
       static const basic_directory_iterator<Path> end_itr;
 
- if ( m_imp->m_no_push ) m_imp->m_no_push = false;
+ if ( m_imp->m_no_push )
+ { m_imp->m_no_push = false; }
       else if ( is_directory( m_imp->m_stack.top()->status() ) )
       {
- system_error_type ec;
+ system::error_code ec;
         m_imp->m_stack.push(
           m_imp->m_no_throw
             ? basic_directory_iterator<Path>( *m_imp->m_stack.top(), ec )
- : basic_directory_iterator<Path>( *m_imp->m_stack.top() )
- );
+ : basic_directory_iterator<Path>( *m_imp->m_stack.top() ) );
         if ( m_imp->m_stack.top() != end_itr )
         {
           ++m_imp->m_level;
@@ -254,71 +263,17 @@
       BOOST_ASSERT( m_imp.get() && "pop on end iterator" );
       BOOST_ASSERT( m_imp->m_level > 0 && "pop with level < 1" );
 
- m_imp->m_stack.pop();
- --m_imp->m_level;
- }
-
- // what() basic_filesystem_error_decoder -------------------------------//
-
- namespace detail
- {
-
-# if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x581))
- using boost::filesystem::system_message;
-# endif
-
- inline void decode_system_message( system_error_type ec, std::string & target )
- {
- system_message( ec, target );
- }
-
-# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- inline void decode_system_message( system_error_type ec, std::wstring & target )
- {
- system_message( ec, target );
- }
-# endif
-
- template<class String>
- void decode_system_message( system_error_type ec, String & target )
- {
- std::string temp;
- system_message( ec, temp );
- for ( const char * p = temp.c_str(); *p != 0; ++p )
- { target += static_cast<typename String::value_type>( *p ); }
- }
- }
-
- template<class Path>
- typename Path::string_type what( const basic_filesystem_error<Path> & ex )
- {
- typename Path::string_type s;
- for ( const char * p = ex.what(); *p != 0; ++p )
- { s += static_cast<typename Path::string_type::value_type>( *p ); }
+ static const basic_directory_iterator<Path> end_itr;
 
- if ( !ex.path1().empty() )
- {
- s += static_cast<typename Path::string_type::value_type>( ':' );
- s += static_cast<typename Path::string_type::value_type>( ' ' );
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- s += ex.path1().file_string();
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- }
- if ( !ex.path2().empty() )
+ do
       {
- s += static_cast<typename Path::string_type::value_type>( ',' );
- s += static_cast<typename Path::string_type::value_type>( ' ' );
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- s += ex.path2().file_string();
- s += static_cast<typename Path::string_type::value_type>( '\"' );
+ m_imp->m_stack.pop();
+ --m_imp->m_level;
       }
- if ( ex.system_error() )
- {
- s += static_cast<typename Path::string_type::value_type>( ' ' );
+ while ( !m_imp->m_stack.empty()
+ && ++m_imp->m_stack.top() == end_itr );
 
- detail::decode_system_message( ex.system_error(), s );
- }
- return s;
+ if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator
     }
 
   } // namespace filesystem

Modified: branches/release/boost/filesystem/operations.hpp
==============================================================================
--- branches/release/boost/filesystem/operations.hpp (original)
+++ branches/release/boost/filesystem/operations.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -4,9 +4,8 @@
 // Copyright 2002 Jan Langer
 // Copyright 2001 Dietmar Kuehl
 //
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 // See library home page at http://www.boost.org/libs/filesystem
 
@@ -15,7 +14,7 @@
 #ifndef BOOST_FILESYSTEM_OPERATIONS_HPP
 #define BOOST_FILESYSTEM_OPERATIONS_HPP
 
-#include <boost/filesystem/path.hpp> // includes <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
 
 #include <boost/shared_ptr.hpp>
 #include <boost/utility/enable_if.hpp>
@@ -81,7 +80,8 @@
       character_file,
       fifo_file,
       socket_file,
- type_unknown // file does exist, but isn't one of the above types
+ type_unknown // file does exist, but isn't one of the above types or
+ // we don't have strong enough permission to find its type
     };
 
     class file_status
@@ -117,22 +117,22 @@
 
     namespace detail
     {
- typedef std::pair< boost::filesystem::system_error_type, bool >
+ typedef std::pair< system::error_code, bool >
         query_pair;
 
- typedef std::pair< boost::filesystem::system_error_type, boost::uintmax_t >
+ typedef std::pair< system::error_code, boost::uintmax_t >
         uintmax_pair;
 
- typedef std::pair< boost::filesystem::system_error_type, std::time_t >
+ typedef std::pair< system::error_code, std::time_t >
         time_pair;
 
- typedef std::pair< boost::filesystem::system_error_type, space_info >
+ typedef std::pair< system::error_code, space_info >
         space_pair;
 
       template< class Path >
       struct directory_pair
       {
- typedef std::pair< boost::filesystem::system_error_type,
+ typedef std::pair< system::error_code,
           typename Path::external_string_type > type;
       };
 
@@ -142,10 +142,10 @@
 # endif
 
       BOOST_FILESYSTEM_DECL file_status
- status_api( const std::string & ph, system_error_type & ec );
+ status_api( const std::string & ph, system::error_code & ec );
 # ifndef BOOST_WINDOWS_API
       BOOST_FILESYSTEM_DECL file_status
- symlink_status_api( const std::string & ph, system_error_type & ec );
+ symlink_status_api( const std::string & ph, system::error_code & ec );
 # endif
       BOOST_FILESYSTEM_DECL query_pair
         is_empty_api( const std::string & ph );
@@ -157,34 +157,36 @@
         space_api( const std::string & ph );
       BOOST_FILESYSTEM_DECL time_pair
         last_write_time_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         last_write_time_api( const std::string & ph, std::time_t new_value );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         get_current_path_api( std::string & ph );
+ BOOST_FILESYSTEM_DECL system::error_code
+ set_current_path_api( const std::string & ph );
       BOOST_FILESYSTEM_DECL query_pair
         create_directory_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         create_hard_link_api( const std::string & to_ph,
           const std::string & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         create_symlink_api( const std::string & to_ph,
           const std::string & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         remove_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         rename_api( const std::string & from, const std::string & to );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         copy_file_api( const std::string & from, const std::string & to );
 
 # if defined(BOOST_WINDOWS_API)
       
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         get_full_path_name_api( const std::string & ph, std::string & target );
 
 # if !defined(BOOST_FILESYSTEM_NARROW_ONLY)
 
       BOOST_FILESYSTEM_DECL boost::filesystem::file_status
- status_api( const std::wstring & ph, system_error_type & ec );
+ status_api( const std::wstring & ph, system::error_code & ec );
       BOOST_FILESYSTEM_DECL query_pair
         is_empty_api( const std::wstring & ph );
       BOOST_FILESYSTEM_DECL query_pair
@@ -193,29 +195,31 @@
         file_size_api( const std::wstring & ph );
       BOOST_FILESYSTEM_DECL space_pair
         space_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         get_full_path_name_api( const std::wstring & ph, std::wstring & target );
       BOOST_FILESYSTEM_DECL time_pair
         last_write_time_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         last_write_time_api( const std::wstring & ph, std::time_t new_value );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         get_current_path_api( std::wstring & ph );
+ BOOST_FILESYSTEM_DECL system::error_code
+ set_current_path_api( const std::wstring & ph );
       BOOST_FILESYSTEM_DECL query_pair
         create_directory_api( const std::wstring & ph );
 # ifdef BOOST_FS_HARD_LINK
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         create_hard_link_api( const std::wstring & existing_ph,
           const std::wstring & new_ph );
 # endif
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         create_symlink_api( const std::wstring & to_ph,
           const std::wstring & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         remove_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         rename_api( const std::wstring & from, const std::wstring & to );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         copy_file_api( const std::wstring & from, const std::wstring & to );
 
 # endif
@@ -235,13 +239,13 @@
 // query functions ---------------------------------------------------------//
 
     BOOST_INLINE_FS_FUNC(file_status)
- status( const Path & ph, system_error_type & ec )
+ status( const Path & ph, system::error_code & ec )
       { return detail::status_api( ph.external_file_string(), ec ); }
 
     BOOST_FS_FUNC(file_status)
     status( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -250,7 +254,7 @@
     }
 
     BOOST_INLINE_FS_FUNC(file_status)
- symlink_status( const Path & ph, system_error_type & ec )
+ symlink_status( const Path & ph, system::error_code & ec )
 # ifdef BOOST_WINDOWS_API
       { return detail::status_api( ph.external_file_string(), ec ); }
 # else
@@ -260,7 +264,7 @@
     BOOST_FS_FUNC(file_status)
     symlink_status( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( symlink_status( ph, ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -275,7 +279,7 @@
 
     BOOST_FS_FUNC(bool) exists( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -285,7 +289,7 @@
 
     BOOST_FS_FUNC(bool) is_directory( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -295,7 +299,7 @@
 
     BOOST_FS_FUNC(bool) is_regular( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -305,7 +309,7 @@
 
     BOOST_FS_FUNC(bool) is_other( const Path & ph )
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -321,7 +325,7 @@
 # else
       const Path & ph)
     {
- system_error_type ec;
+ system::error_code ec;
       file_status result( detail::symlink_status_api( ph.external_file_string(), ec ) );
       if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
@@ -340,8 +344,9 @@
     BOOST_FS_FUNC(bool) _is_empty( const Path & ph )
 # endif
     {
- detail::query_pair result = detail::is_empty_api( ph.external_file_string() );
- if ( result.first != 0 )
+ detail::query_pair result(
+ detail::is_empty_api( ph.external_file_string() ) );
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::is_empty", ph, result.first ) );
       return result.second;
@@ -349,9 +354,9 @@
 
     BOOST_FS_FUNC(bool) equivalent( const Path & ph1, const Path & ph2 )
     {
- detail::query_pair result = detail::equivalent_api(
- ph1.external_file_string(), ph2.external_file_string() );
- if ( result.first != 0 )
+ detail::query_pair result( detail::equivalent_api(
+ ph1.external_file_string(), ph2.external_file_string() ) );
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::equivalent", ph1, ph2, result.first ) );
       return result.second;
@@ -360,8 +365,8 @@
     BOOST_FS_FUNC(boost::uintmax_t) file_size( const Path & ph )
     {
       detail::uintmax_pair result
- = detail::file_size_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::file_size_api( ph.external_file_string() ) );
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::file_size", ph, result.first ) );
       return result.second;
@@ -370,8 +375,8 @@
     BOOST_FS_FUNC(space_info) space( const Path & ph )
     {
       detail::space_pair result
- = detail::space_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::space_api( ph.external_file_string() ) );
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::space", ph, result.first ) );
       return result.second;
@@ -380,8 +385,8 @@
     BOOST_FS_FUNC(std::time_t) last_write_time( const Path & ph )
     {
       detail::time_pair result
- = detail::last_write_time_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::last_write_time_api( ph.external_file_string() ) );
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::last_write_time", ph, result.first ) );
       return result.second;
@@ -394,7 +399,7 @@
     {
       detail::query_pair result(
         detail::create_directory_api( dir_ph.external_directory_string() ) );
- if ( result.first != 0 )
+ if ( result.first )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::create_directory",
           dir_ph, result.first ) );
@@ -405,19 +410,19 @@
     BOOST_FS_FUNC(void)
     create_hard_link( const Path & to_ph, const Path & from_ph )
     {
- system_error_type result(
+ system::error_code ec(
         detail::create_hard_link_api(
           to_ph.external_file_string(),
           from_ph.external_file_string() ) );
- if ( result != 0 )
+ if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::create_hard_link",
- to_ph, from_ph, result ) );
+ to_ph, from_ph, ec ) );
     }
 
- BOOST_FS_FUNC(system_error_type)
+ BOOST_FS_FUNC(system::error_code)
     create_hard_link( const Path & to_ph, const Path & from_ph,
- system_error_type & ec )
+ system::error_code & ec )
     {
       ec = detail::create_hard_link_api(
             to_ph.external_file_string(),
@@ -429,19 +434,19 @@
     BOOST_FS_FUNC(void)
     create_symlink( const Path & to_ph, const Path & from_ph )
     {
- system_error_type result(
+ system::error_code ec(
         detail::create_symlink_api(
           to_ph.external_file_string(),
           from_ph.external_file_string() ) );
- if ( result )
+ if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::create_symlink",
- to_ph, from_ph, result ) );
+ to_ph, from_ph, ec ) );
     }
 
- BOOST_FS_FUNC(system_error_type)
+ BOOST_FS_FUNC(system::error_code)
     create_symlink( const Path & to_ph, const Path & from_ph,
- system_error_type & ec )
+ system::error_code & ec )
     {
       ec = detail::create_symlink_api(
              to_ph.external_file_string(),
@@ -457,11 +462,10 @@
         // the link rather than what it points to is deleted. Windows behavior
         // doesn't matter; is_symlink() is always false on Windows.
       {
- system_error_type result = detail::remove_api( ph.external_file_string() );
- if ( result != 0 )
+ system::error_code ec( detail::remove_api( ph.external_file_string() ) );
+ if ( ec )
           boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::remove",
- ph, result ) );
+ "boost::filesystem::remove", ph, ec ) );
         return true;
       }
       return false;
@@ -475,37 +479,46 @@
 
     BOOST_FS_FUNC(void) rename( const Path & from_path, const Path & to_path )
     {
- system_error_type result = detail::rename_api(
+ system::error_code ec( detail::rename_api(
         from_path.external_directory_string(),
- to_path.external_directory_string() );
- if ( result != 0 )
+ to_path.external_directory_string() ) );
+ if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::rename",
- from_path, to_path, result ) );
+ from_path, to_path, ec ) );
     }
 
     BOOST_FS_FUNC(void) copy_file( const Path & from_path, const Path & to_path )
     {
- system_error_type result = detail::copy_file_api(
+ system::error_code ec( detail::copy_file_api(
         from_path.external_directory_string(),
- to_path.external_directory_string() );
- if ( result != 0 )
+ to_path.external_directory_string() ) );
+ if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::copy_file",
- from_path, to_path, result ) );
+ from_path, to_path, ec ) );
     }
 
     template< class Path >
     Path current_path()
     {
       typename Path::external_string_type ph;
- boost::filesystem::system_error_type result;
- if ( (result = detail::get_current_path_api( ph )) != 0 )
+ system::error_code ec( detail::get_current_path_api( ph ) );
+ if ( ec )
           boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::current_path", result ) );
+ "boost::filesystem::current_path", ec ) );
       return Path( Path::traits_type::to_internal( ph ) );
     }
 
+ BOOST_FS_FUNC(void) current_path( const Path & ph )
+ {
+ system::error_code ec( detail::set_current_path_api(
+ ph.external_directory_string() ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::current_path", ph, ec ) );
+ }
+
     template< class Path >
     const Path & initial_path()
     {
@@ -527,11 +540,11 @@
 # ifdef BOOST_WINDOWS_API
       if ( ph.empty() ) return ph;
       BOOST_FS_TYPENAME Path::external_string_type sys_ph;
- boost::filesystem::system_error_type result;
- if ( (result = detail::get_full_path_name_api( ph.external_file_string(),
- sys_ph )) != 0 )
+ system::error_code ec( detail::get_full_path_name_api( ph.external_file_string(),
+ sys_ph ) );
+ if ( ec )
           boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::system_complete", ph, result ) );
+ "boost::filesystem::system_complete", ph, ec ) );
       return Path( Path::traits_type::to_internal( sys_ph ) );
 # else
       return (ph.empty() || ph.is_complete())
@@ -566,11 +579,11 @@
     BOOST_FS_FUNC(void)
     last_write_time( const Path & ph, const std::time_t new_time )
     {
- boost::filesystem::system_error_type result;
- if ( (result = detail::last_write_time_api( ph.external_file_string(),
- new_time )) != 0 )
+ system::error_code ec( detail::last_write_time_api( ph.external_file_string(),
+ new_time ) );
+ if ( ec )
         boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::last_write_time", ph, result ) );
+ "boost::filesystem::last_write_time", ph, ec ) );
     }
 
 # ifndef BOOST_FILESYSTEM_NARROW_ONLY
@@ -582,9 +595,9 @@
     inline file_status status( const wpath & ph )
       { return status<wpath>( ph ); }
 
- inline file_status status( const path & ph, system_error_type & ec )
+ inline file_status status( const path & ph, system::error_code & ec )
       { return status<path>( ph, ec ); }
- inline file_status status( const wpath & ph, system_error_type & ec )
+ inline file_status status( const wpath & ph, system::error_code & ec )
       { return status<wpath>( ph, ec ); }
 
     inline file_status symlink_status( const path & ph )
@@ -592,9 +605,9 @@
     inline file_status symlink_status( const wpath & ph )
       { return symlink_status<wpath>( ph ); }
 
- inline file_status symlink_status( const path & ph, system_error_type & ec )
+ inline file_status symlink_status( const path & ph, system::error_code & ec )
       { return symlink_status<path>( ph, ec ); }
- inline file_status symlink_status( const wpath & ph, system_error_type & ec )
+ inline file_status symlink_status( const wpath & ph, system::error_code & ec )
       { return symlink_status<wpath>( ph, ec ); }
 
     inline bool exists( const path & ph ) { return exists<path>( ph ); }
@@ -658,11 +671,11 @@
       const wpath & from_ph )
       { return create_hard_link<wpath>( to_ph, from_ph ); }
 
- inline system_error_type create_hard_link( const path & to_ph,
- const path & from_ph, system_error_type & ec )
+ inline system::error_code create_hard_link( const path & to_ph,
+ const path & from_ph, system::error_code & ec )
       { return create_hard_link<path>( to_ph, from_ph, ec ); }
- inline system_error_type create_hard_link( const wpath & to_ph,
- const wpath & from_ph, system_error_type & ec )
+ inline system::error_code create_hard_link( const wpath & to_ph,
+ const wpath & from_ph, system::error_code & ec )
       { return create_hard_link<wpath>( to_ph, from_ph, ec ); }
 #endif
     
@@ -673,11 +686,11 @@
       const wpath & from_ph )
       { return create_symlink<wpath>( to_ph, from_ph ); }
 
- inline system_error_type create_symlink( const path & to_ph,
- const path & from_ph, system_error_type & ec )
+ inline system::error_code create_symlink( const path & to_ph,
+ const path & from_ph, system::error_code & ec )
       { return create_symlink<path>( to_ph, from_ph, ec ); }
- inline system_error_type create_symlink( const wpath & to_ph,
- const wpath & from_ph, system_error_type & ec )
+ inline system::error_code create_symlink( const wpath & to_ph,
+ const wpath & from_ph, system::error_code & ec )
       { return create_symlink<wpath>( to_ph, from_ph, ec ); }
 
     inline bool remove( const path & ph )
@@ -722,7 +735,12 @@
     inline void last_write_time( const wpath & ph, const std::time_t new_time )
       { last_write_time<wpath>( ph, new_time ); }
 
-# endif // BOOST_FILESYSTEM_NARROW_ONLY
+ inline void current_path( const path & ph )
+ { current_path<path>( ph ); }
+ inline void current_path( const wpath & ph )
+ { current_path<wpath>( ph ); }
+
+# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
 
     namespace detail
     {
@@ -757,7 +775,7 @@
 // basic_directory_iterator, and so avoid iterator_facade DLL template
 // problems. They also overload to the proper external path character type.
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         dir_itr_first( void *& handle,
 #if defined(BOOST_POSIX_API)
             void *& buffer,
@@ -766,7 +784,7 @@
           std::string & target, file_status & fs, file_status & symlink_fs );
       // eof: return==0 && handle==0
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         dir_itr_increment( void *& handle,
 #if defined(BOOST_POSIX_API)
             void *& buffer,
@@ -774,7 +792,7 @@
           std::string & target, file_status & fs, file_status & symlink_fs );
       // eof: return==0 && handle==0
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         dir_itr_close( void *& handle
 #if defined(BOOST_POSIX_API)
             , void *& buffer
@@ -783,10 +801,10 @@
       // Effects: none if handle==0, otherwise close handle, set handle=0
 
 # if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         dir_itr_first( void *& handle, const std::wstring & ph,
           std::wstring & target, file_status & fs, file_status & symlink_fs );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
         dir_itr_increment( void *& handle, std::wstring & target,
           file_status & fs, file_status & symlink_fs );
 # endif
@@ -813,7 +831,8 @@
           ); }
       };
 
- BOOST_FILESYSTEM_DECL extern system_error_type not_found_error;
+ BOOST_FILESYSTEM_DECL system::error_code not_found_error();
+
     } // namespace detail
 
 // basic_directory_iterator ------------------------------------------------//
@@ -831,7 +850,7 @@
       basic_directory_iterator(){} // creates the "end" iterator
 
       explicit basic_directory_iterator( const Path & dir_path );
- basic_directory_iterator( const Path & dir_path, system_error_type & ec );
+ basic_directory_iterator( const Path & dir_path, system::error_code & ec );
 
     private:
 
@@ -855,7 +874,7 @@
       bool equal( const basic_directory_iterator & rhs ) const
         { return m_imp == rhs.m_imp; }
 
- system_error_type m_init( const Path & dir_path );
+ system::error_code m_init( const Path & dir_path );
     };
 
     typedef basic_directory_iterator< path > directory_iterator;
@@ -866,27 +885,27 @@
     // basic_directory_iterator implementation ---------------------------//
 
     template<class Path>
- system_error_type basic_directory_iterator<Path>::m_init(
+ system::error_code basic_directory_iterator<Path>::m_init(
       const Path & dir_path )
     {
       if ( dir_path.empty() )
       {
         m_imp.reset();
- return detail::not_found_error;
+ return detail::not_found_error();
       }
- system_error_type sys_err;
       typename Path::external_string_type name;
       file_status fs, symlink_fs;
-
- if ( (sys_err = detail::dir_itr_first( m_imp->m_handle,
+ system::error_code ec( detail::dir_itr_first( m_imp->m_handle,
 #if defined(BOOST_POSIX_API)
         m_imp->m_buffer,
 #endif
         dir_path.external_directory_string(),
- name, fs, symlink_fs )) != 0 )
+ name, fs, symlink_fs ) );
+
+ if ( ec )
       {
         m_imp.reset();
- return sys_err;
+ return ec;
       }
       
       if ( m_imp->m_handle == 0 ) m_imp.reset(); // eof, so make end iterator
@@ -900,7 +919,7 @@
               && name.size() == 2)) )
           { increment(); }
       }
- return 0;
+ return boost::system::error_code();
     }
 
     template<class Path>
@@ -908,10 +927,10 @@
       const Path & dir_path )
       : m_imp( new detail::dir_itr_imp<Path> )
     {
- system_error_type ec( m_init(dir_path) );
- if ( ec != 0 )
+ system::error_code ec( m_init(dir_path) );
+ if ( ec )
       {
- boost::throw_exception( basic_filesystem_error<Path>(
+ boost::throw_exception( basic_filesystem_error<Path>(
           "boost::filesystem::basic_directory_iterator constructor",
           dir_path, ec ) );
       }
@@ -919,7 +938,7 @@
 
     template<class Path>
     basic_directory_iterator<Path>::basic_directory_iterator(
- const Path & dir_path, system_error_type & ec )
+ const Path & dir_path, system::error_code & ec )
       : m_imp( new detail::dir_itr_imp<Path> )
     {
       ec = m_init(dir_path);
@@ -931,21 +950,22 @@
       BOOST_ASSERT( m_imp.get() && "attempt to increment end iterator" );
       BOOST_ASSERT( m_imp->m_handle != 0 && "internal program error" );
       
- system_error_type sys_err(0);
       typename Path::external_string_type name;
       file_status fs, symlink_fs;
+ system::error_code ec;
 
       for (;;)
       {
- if ( (sys_err = detail::dir_itr_increment( m_imp->m_handle,
+ ec = detail::dir_itr_increment( m_imp->m_handle,
 #if defined(BOOST_POSIX_API)
           m_imp->m_buffer,
 #endif
- name, fs, symlink_fs )) != 0 )
+ name, fs, symlink_fs );
+ if ( ec )
         {
           boost::throw_exception( basic_filesystem_error<Path>(
             "boost::filesystem::basic_directory_iterator increment",
- m_imp->m_directory_entry.path().branch_path(), sys_err ) );
+ m_imp->m_directory_entry.path().branch_path(), ec ) );
         }
         if ( m_imp->m_handle == 0 ) { m_imp.reset(); return; } // eof, make end
         if ( !(name[0] == dot<Path>::value // !(dot or dot-dot)
@@ -990,11 +1010,11 @@
        m_symlink_status = symlink_st;
      }
 
- const Path & path() const { return m_path; }
+ const Path & path() const { return m_path; }
       file_status status() const;
- file_status status( system_error_type & ec ) const;
+ file_status status( system::error_code & ec ) const;
       file_status symlink_status() const;
- file_status symlink_status( system_error_type & ec ) const;
+ file_status symlink_status( system::error_code & ec ) const;
 
       // conversion simplifies the most common use of basic_directory_entry
       operator const path_type &() const { return m_path; }
@@ -1046,20 +1066,20 @@
 
     template<class Path>
     file_status
- basic_directory_entry<Path>::status( system_error_type & ec ) const
+ basic_directory_entry<Path>::status( system::error_code & ec ) const
     {
       if ( !status_known( m_status ) )
       {
 # ifndef BOOST_WINDOWS_API
         if ( status_known( m_symlink_status )
           && !is_symlink( m_symlink_status ) )
- { ec = 0; m_status = m_symlink_status; }
+ { ec = boost::system::error_code();; m_status = m_symlink_status; }
         else { m_status = boost::filesystem::status( m_path, ec ); }
 # else
         m_status = boost::filesystem::status( m_path, ec );
 # endif
       }
- else ec = 0;
+ else ec = boost::system::error_code();;
       return m_status;
     }
 
@@ -1078,12 +1098,12 @@
 
     template<class Path>
     file_status
- basic_directory_entry<Path>::symlink_status( system_error_type & ec ) const
+ basic_directory_entry<Path>::symlink_status( system::error_code & ec ) const
     {
 # ifndef BOOST_WINDOWS_API
       if ( !status_known( m_symlink_status ) )
         { m_symlink_status = boost::filesystem::symlink_status( m_path, ec ); }
- else ec = 0;
+ else ec = boost::system::error_code();;
       return m_symlink_status;
 # else
       return status( ec );

Modified: branches/release/boost/filesystem/path.hpp
==============================================================================
--- branches/release/boost/filesystem/path.hpp (original)
+++ branches/release/boost/filesystem/path.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
 // boost/filesystem/path.hpp -----------------------------------------------//
 
 // Copyright Beman Dawes 2002-2005
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 // See library home page at http://www.boost.org/libs/filesystem
 
@@ -13,6 +13,7 @@
 #define BOOST_FILESYSTEM_PATH_HPP
 
 #include <boost/filesystem/config.hpp>
+#include <boost/system/system_error.hpp>
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/throw_exception.hpp>
 #include <boost/shared_ptr.hpp>
@@ -54,11 +55,11 @@
 
 # ifndef BOOST_FILESYSTEM_NARROW_ONLY
 
- struct wpath_traits;
+ struct BOOST_FILESYSTEM_DECL wpath_traits;
     
     typedef basic_path< std::wstring, wpath_traits > wpath;
 
- struct wpath_traits
+ struct BOOST_FILESYSTEM_DECL wpath_traits
     {
       typedef std::wstring internal_string_type;
 # ifdef BOOST_WINDOWS_API
@@ -80,102 +81,6 @@
 
 # endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
 
-// error reporting support -------------------------------------------------//
-
- typedef int errno_type; // determined by C standard
-
-# ifdef BOOST_WINDOWS_API
- typedef unsigned system_error_type;
-
- BOOST_FILESYSTEM_DECL
- errno_type lookup_errno( system_error_type sys_err_code );
-# else
- typedef int system_error_type;
-
- inline errno_type lookup_errno( system_error_type sys_err_code )
- { return sys_err_code; }
-# endif
-
- // deprecated support for legacy function name
- inline errno_type lookup_error_code( system_error_type sys_err_code )
- { return lookup_errno( sys_err_code ); }
-
- BOOST_FILESYSTEM_DECL
- void system_message( system_error_type sys_err_code, std::string & target );
- // Effects: appends error message to target
-
-# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- BOOST_FILESYSTEM_DECL void
- system_message( system_error_type sys_err_code, std::wstring & target );
-# endif
-
- // filesystem_error ----------------------------------------------------//
-
- class filesystem_error : public std::runtime_error
- // see http://www.boost.org/more/error_handling.html for design rationale
- {
- public:
- filesystem_error()
- : std::runtime_error("filesystem error"), m_sys_err(0) {}
- explicit filesystem_error(
- const std::string & what_arg, system_error_type sys_ec = 0 )
- : std::runtime_error(what_arg), m_sys_err(sys_ec) {}
-
- system_error_type system_error() const { return m_sys_err; }
- // Note: system_error() == 0 implies a library (rather than system) error
-
- private:
- system_error_type m_sys_err;
- };
-
- // basic_filesystem_error ----------------------------------------------//
-
- template<class Path>
- class basic_filesystem_error : public filesystem_error
- {
- // see http://www.boost.org/more/error_handling.html for design rationale
- public:
- // compiler generates copy constructor and copy assignment
-
- typedef Path path_type;
-
- basic_filesystem_error( const std::string & what,
- system_error_type sys_err_code );
-
- basic_filesystem_error( const std::string & what,
- const path_type & path1, system_error_type sys_err_code );
-
- basic_filesystem_error( const std::string & what, const path_type & path1,
- const path_type & path2, system_error_type sys_err_code );
-
- ~basic_filesystem_error() throw() {}
-
- const path_type & path1() const
- {
- static const path_type empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
- }
- const path_type & path2() const
- {
- static const path_type empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
- }
-
- private:
- struct m_imp
- {
- path_type m_path1; // may be empty()
- path_type m_path2; // may be empty()
- };
- boost::shared_ptr<m_imp> m_imp_ptr;
- };
-
- typedef basic_filesystem_error<path> filesystem_path_error;
-
-# ifndef BOOST_FILESYSTEM_NARROW_ONLY
- typedef basic_filesystem_error<wpath> filesystem_wpath_error;
-# endif
-
     // path traits ---------------------------------------------------------//
 
     template<class Path> struct is_basic_path
@@ -661,6 +566,110 @@
     }
 # endif
 
+ // basic_filesystem_error helpers --------------------------------------//
+
+ // Originally choice of implementation was done via specialization of
+ // basic_filesystem_error::what(). Several compilers (GCC, aCC, etc.)
+ // couldn't handle that, so the choice is now accomplished by overloading.
+
+ namespace detail
+ {
+ // BOOST_FILESYSTEM_DECL version works for VC++ but not GCC. Go figure!
+ inline
+ const char * what( const char * sys_err_what,
+ const path & path1, const path & path2, std::string & target )
+ {
+ try
+ {
+ if ( target.empty() )
+ {
+ target = sys_err_what;
+ if ( !path1.empty() )
+ {
+ target += ": \"";
+ target += path1.file_string();
+ target += "\"";
+ }
+ if ( !path2.empty() )
+ {
+ target += ", \"";
+ target += path2.file_string();
+ target += "\"";
+ }
+ }
+ return target.c_str();
+ }
+ catch (...)
+ {
+ return sys_err_what;
+ }
+ }
+
+ template<class Path>
+ const char * what( const char * sys_err_what,
+ const Path & /*path1*/, const Path & /*path2*/, std::string & /*target*/ )
+ {
+ return sys_err_what;
+ }
+ }
+
+ // basic_filesystem_error ----------------------------------------------//
+
+ template<class Path>
+ class basic_filesystem_error : public system::system_error
+ {
+ // see http://www.boost.org/more/error_handling.html for design rationale
+ public:
+ // compiler generates copy constructor and copy assignment
+
+ typedef Path path_type;
+
+ basic_filesystem_error( const std::string & what,
+ system::error_code ec );
+
+ basic_filesystem_error( const std::string & what,
+ const path_type & path1, system::error_code ec );
+
+ basic_filesystem_error( const std::string & what, const path_type & path1,
+ const path_type & path2, system::error_code ec );
+
+ ~basic_filesystem_error() throw() {}
+
+ const path_type & path1() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
+ }
+ const path_type & path2() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
+ }
+
+ const char * what() const throw()
+ {
+ if ( !m_imp_ptr.get() )
+ return system::system_error::what();
+ return detail::what( system::system_error::what(), m_imp_ptr->m_path1,
+ m_imp_ptr->m_path2, m_imp_ptr->m_what );
+ }
+
+ private:
+ struct m_imp
+ {
+ path_type m_path1; // may be empty()
+ path_type m_path2; // may be empty()
+ std::string m_what; // not built until needed
+ };
+ boost::shared_ptr<m_imp> m_imp_ptr;
+ };
+
+ typedef basic_filesystem_error<path> filesystem_error;
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_filesystem_error<wpath> wfilesystem_error;
+# endif
+
   // path::name_checks -----------------------------------------------------//
 
     BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name );
@@ -1376,8 +1385,8 @@
 
     template<class Path>
     basic_filesystem_error<Path>::basic_filesystem_error(
- const std::string & what, system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ const std::string & what, system::error_code ec )
+ : system::system_error(ec, what)
     {
       try
       {
@@ -1389,8 +1398,8 @@
     template<class Path>
     basic_filesystem_error<Path>::basic_filesystem_error(
       const std::string & what, const path_type & path1,
- system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ system::error_code ec )
+ : system::system_error(ec, what)
     {
       try
       {
@@ -1403,8 +1412,8 @@
     template<class Path>
     basic_filesystem_error<Path>::basic_filesystem_error(
       const std::string & what, const path_type & path1,
- const path_type & path2, system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ const path_type & path2, system::error_code ec )
+ : system::system_error(ec, what)
     {
       try
       {

Modified: branches/release/libs/filesystem/build/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/build/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/build/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,33 +1,33 @@
-# Boost Filesystem Library Build Jamfile
 
-# (C) Copyright Beman Dawes 2002, 2006
+# Boost Filesystem Library Build Jamfile
 
+# (C) Copyright Beman Dawes 2002-2006
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
 
+
 # See library home page at http://www.boost.org/libs/filesystem
 
 project boost/filesystem
- :
- source-location ../src
+ : source-location ../src
+ : usage-requirements # pass these requirement to dependents (i.e. users)
+ <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
     ;
 
 SOURCES =
- exception operations path portability utf8_codecvt_facet ;
+ operations path portability utf8_codecvt_facet ;
 
 lib boost_filesystem
     :
     $(SOURCES).cpp
+ ../../system/build//boost_system
     :
- <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
- ;
-
-install dist-lib
+ <link>shared:<define>BOOST_ALL_DYN_LINK=1 # tell source we're building dll's
+ <link>static:<define>BOOST_All_STATIC_LINK=1 # tell source we're building static lib's
     :
- boost_filesystem
     :
- <install-type>LIB
- <location>../../../dist/lib
+ <library>../../system/build//boost_system
     ;
 
-explicit dist-lib ;
+boost-install boost_filesystem ;
\ No newline at end of file

Modified: branches/release/libs/filesystem/doc/faq.htm
==============================================================================
--- branches/release/libs/filesystem/doc/faq.htm (original)
+++ branches/release/libs/filesystem/doc/faq.htm 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,269 +1,156 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
- <head>
- <title>
- Boost Filesystem FAQ
- </title>
-<style type="text/css">
- body {
- background-color: #FFFFFF;
- }
- p.c1 {font-weight: bold}
-</style>
- </head>
- <body>
- <h1>
- <img border="0" src="../../../boost.png" align="middle" alt=
- "Boost C++ libraries logo" width="277" height="86"> Filesystem
- FAQ
- </h1>
 
- <p class="c1">
- Why base the generic-path string format on POSIX?
- </p>
- <p>
- [POSIX-01] is an ISO Standard.
- It is the basis for the most familiar path-string formats,
- including the URL portion of URI's and the native Windows format.
- It is ubiquitous and familiar.&nbsp; On many systems, it is very
- easy to implement because it is either the native operating
- system format (Unix and Windows) or via a operating system
- supplied POSIX library (z/OS, OS/390, and many more.)
- </p>
- <p class="c1">
- Why not use a full URI (Universal Resource Identifier) based
- path?
- </p>
-
- <p>
- URI's would promise more than the
- Filesystem Library can actually deliver, since URI's extend far
- beyond what most operating systems consider a file or a
- directory.&nbsp; Thus for the primary "portable script-style file
- system operations" requirement of the Filesystem Library, full
- URI's appear to be over-specification.
- </p>
- <p class="c1">
- Why isn't <i>path</i> a base class with derived
- <i>directory_path</i> and <i>file_path</i> classes?
- </p>
-
- <p>
- Why bother?&nbsp; The behavior of all three classes is
- essentially identical. Several early versions did require users
- to identify each path as a file or directory path, and this
- seemed to increase errors and decrease code readability. There
- was no apparent upside benefit.
- </p>
- <p class="c1">
- Why are fully specified paths called <i>complete</i> rather than
- <i><a name="absolute" id="absolute">absolute</a></i>?
- </p>
-
- <p>
- To avoid long-held assumptions (what do you mean, <i>"/foo"</i>
- isn't absolute on some systems?) by programmers used to
- single-rooted filesystems. Using an unfamiliar name for the
- concept and related functions causes programmers to read the
- specs rather than just assuming the meaning is known.
- </p>
- <p class="c1">
- Why not support a concept of specific kinds of file systems, such
- as posix_file_system or windows_file_system.
- </p>
- <p>
- Portability is one of the most important requirements for the
- library.&nbsp;Gaining some advantage by using features specific
- to particular operating systems is not a requirement. There
- doesn't appear to be much need for the ability to manipulate,
- say, a classic Mac OS path while running on an OpenVMS machine.
- </p>
-
- <p>
- Furthermore, concepts like "file system" are very slippery. What
- happens when a NTFS or FAT file system is mounted in directory on
- a machine running a POSIX-like operating system, for example?
- Some of the POSIX API's may return very un-POSIX like results.
- </p>
- <p class="c1">
- Why not supply a 'handle' type, and let the file and directory
- operations traffic in it?
- </p>
- <p>
- It isn't clear there is any feasible way to meet the "portable
- script-style file system operations" requirement with such a
- system. File systems exist where operations are usually performed
- on some non-string handle type. The classic Mac OS has been
- mentioned explicitly as a case where trafficking in paths isn't
- always natural.&nbsp;&nbsp;&nbsp;
- </p>
-
- <p>
- The case for the "handle" (opaque data type to identify a file)
- style may be strongest for directory iterator value type.&nbsp;
- (See Jesse Jones' Jan 28, 2002, Boost postings). However, as
- class path has evolved, it seems sufficient even as the directory
- iterator value type.
- </p>
- <p class="c1">
- Why are the operations.hpp non-member functions so low-level?
- </p>
- <p>
- To provide a toolkit from which higher-level functionality can be
- created.
- </p>
-
- <p>
- An extended attempt to add convenience functions on top of, or as
- a replacement for, the low-level functionality failed because
- there is no widely acceptable set of simple semantics for most
- convenience functions considered.&nbsp; Attempts to provide
- alternate semantics via either run-time options or compile-time
- polices became overly complicated in relation to the value
- delivered, or became contentious.&nbsp; OTOH, the specific
- functionality needed for several trial applications was very easy
- for the user to construct from the lower-level toolkit
- functions.&nbsp; See <a href=
- "design.htm#Abandoned_Designs">Failed Attempts</a>.
- </p>
- <p class="c1">
- Isn't it inconsistent then to provide a few convenience
- functions?
- </p>
-
- <p>
- Yes, but experience with both this library, POSIX, and Windows
- indicates the utility of certain convenience functions, and that
- it is possible to provide simple, yet widely acceptable,
- semantics for them. For example, remove_all.
- </p>
- <p class="c1">
- Why are there basic_directory_iterator&lt;&gt; overloads for
- operations.hpp predicate functions? Isn't two ways to do the same
- thing poor design?
- </p>
- <p>
- Yes, two ways to do the same thing is often a poor design
- practice. But the iterator versions are often much more
- efficient. Calling status() during iteration over a directory
- containing 15,000 files took 6 seconds for the path overload, and
- 1 second for the iterator overload, for tests on a freshly booted
- machine. Times were .90 seconds and .30 seconds, for tests after
- prior use of the directory. This performance gain is large enough
- to justify deviating from preferred design practices. Neither
- overload alone meets all needs.
- </p>
-
- <p class="c1">
- Why are library functions so picky about errors?
- </p>
- <p>
- Safety. The default is to be safe rather than sorry. This is
- particularly important given the reality that on many computer
- systems files and directories are <a href="#global">globally
- shared</a> resources, and thus subject to unexpected errors.
- </p>
- <p class="c1">
- Why are errors reported by exception rather than return code or
- error notification variable?
- </p>
-
- <p>
- Safety.&nbsp;Return codes or error notification variables are
- often ignored by programmers.&nbsp; Exceptions are much harder to
- ignore, provided desired default behavior (program termination)
- if not caught, yet allow error recovery if desired. Non-throwing
- versions of functions are provided where experience indicates the
- need.
- </p>
- <p class="c1">
- Why are attributes accessed via named functions rather than
- property maps?
- </p>
- <p>
- For commonly used attributes (existence, directory or file,
- emptiness), simple syntax and guaranteed presence outweigh other
- considerations. Because access to many other attributes is
- inherently system dependent, property maps are viewed as the best
- hope for access and modification, but it is better design to
- provide such functionality in a separate library. (Historical
- note: even the apparently simple attribute "read-only" turned out
- to be so system depend as to be disqualified as a "guaranteed
- presence" operation.)
- </p>
-
- <p class="c1">
- Why isn't there a set_current_directory function?
- </p>
- <p>
- Global variables are considered harmful [<a href=
- "design.htm#Wulf-Shaw-73">wulf-shaw-73</a>]. While we can't
- prevent people from shooting themselves in the foot, we aren't
- about to hand them a loaded gun pointed right at their big toe.
- </p>
- <p class="c1">
- Why aren't <a name="wide-character_names" id=
- "wide-character_names">wide-character names</a> supported? Why
- not std::wstring or even a templated type?
- </p>
-
- <p>
- They <u>are</u> supported, starting with version 1.33. See
- Internationalization.
- </p>
- <p class="c1">
- Why isn't automatic name portability error detection provided?
- </p>
- <p>
-
- A number (at least six) of designs for name validity error
- detection were evaluated, including at least four complete
- implementations.&nbsp; While the details for rejection differed,
- all of the more powerful name validity checking designs distorted
- other otherwise simple aspects of the library. Even the simple
- name checking provided in prior library versions was a constant
- source of user complaints. While name checking can be helpful, it
- isn't important enough to justify added a lot of additional
- complexity.
- </p>
- <p class="c1">
- Why are paths sometimes manipulated by member functions and
- sometimes by non-member functions?
- </p>
- <p>
- The design rule is that purely lexical operations are supplied as
- <i>class basic_path</i> member functions, while operations
- performed by the operating system are provided as free functions.
- </p>
-
- <p class="c1">
- Why is path <i>normalized form</i> different from <i>canonical
- form</i>?
- </p>
- <p>
- On operating systems such as POSIX which allow symbolic links to
- directories, the normalized form of a path can represent a
- different location than the canonical form. See <a href=
- "design.htm#symbolic-link-use-case">use case</a> from Walter
- Landry.
- </p>
-
- <hr>
- <p>
- Revised
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 06 February, 2006
- <!--webbot bot="Timestamp" endspan i-checksum="40411" -->
- </p>
- <p>
- © Copyright Beman Dawes, 2002
- </p>
- <p>
-
- Use, modification, and distribution are subject to the Boost
- Software License, Version 1.0. (See accompanying file <a href=
- "../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at
- www.boost.org/LICENSE_1_0.txt)
- </p>
- </body>
-</html>
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Filesystem FAQ</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/html/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
+ <tr>
+ <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+ <td width="410" align="middle">
+ <font size="7">Filesystem Library</font>
+ </td>
+ </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+ <tr>
+ <td>Boost Home&nbsp;&nbsp;&nbsp;
+ Library Home&nbsp; &nbsp;
+ Tutorial&nbsp; &nbsp; <a href="reference.html">
+ Reference</a>&nbsp;&nbsp; FAQ</td>
+ </tr>
+</table>
+
+<h1>
+Frequently Asked Questions</h1>
+<p><b>Why base the generic-path string format on POSIX?</b></p>
+<p>[POSIX-01] is an ISO Standard. It is the basis for the most familiar path-string formats,
+not just for POSIX systems but also for the native Windows format and the
+URL portion of URI's. It is ubiquitous and
+familiar.&nbsp; On many systems, it is very easy to implement because it is
+either the native operating system format (Unix and Windows) or via a
+operating system supplied
+POSIX library (z/OS, OS/390, and many more.)</p>
+<p><b>Why not use a full URI (Universal Resource Identifier) based path?</b></p>
+<p>URI's would promise more than the Filesystem Library can actually deliver,
+since URI's extend far beyond what most operating systems consider a file or a
+directory.&nbsp; Thus for the primary &quot;portable script-style file system
+operations&quot; requirement of the Filesystem Library, full URI's appear to be over-specification.</p>
+<p><b>Why isn't <i>path</i> a base class with derived <i>directory_path</i> and
+<i>file_path</i> classes?</b></p>
+<p>Why bother?&nbsp; The behavior of all three classes is essentially identical.
+Several early versions did require users to identify each path as a file or
+directory path, and this seemed to increase errors and decrease code
+readability. There was no apparent upside benefit.</p>
+<p><b>Why are fully specified paths called <i>complete</i> rather than <i>
+<a name="absolute">absolute</a></i>?</b></p>
+<p>To avoid long-held assumptions (what do you mean, <i>&quot;/foo&quot;</i> isn't
+absolute on some systems?) by programmers used to single-rooted filesystems.
+Using an unfamiliar name for the concept and related functions causes
+programmers to read the specs rather than just assuming the meaning is known.</p>
+<p><b>Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.</b></p>
+<p>Portability is one of the most important requirements for the
+library.&nbsp;Gaining some advantage by using features specific to particular
+operating systems is not a requirement. There doesn't appear to be much need for
+the ability to manipulate, say, a classic Mac OS path while running on an
+OpenVMS machine.</p>
+<p>Furthermore, concepts like &quot;file system&quot;
+are very slippery. What happens when a NTFS or FAT file system is mounted
+in directory on a machine running a POSIX-like operating system, for example?
+Some of the POSIX API's may return very un-POSIX like results.</p>
+<p><b>Why not supply a 'handle' type, and let the file and directory operations
+traffic in it?</b></p>
+<p>It isn't clear there is any feasible way to meet the &quot;portable script-style
+file system operations&quot; requirement with such a system. File systems exist where operations are usually performed on
+ some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where
+trafficking in paths isn't always natural.&nbsp;&nbsp;&nbsp; </p>
+<p>The case for the &quot;handle&quot; (opaque data type to identify a file)
+style may be strongest for directory iterator value type.&nbsp; (See Jesse Jones' Jan 28,
+2002, Boost postings). However, as class path has evolved, it seems sufficient
+even as the directory iterator value type.</p>
+<p><b>Why are the operations.hpp non-member functions so low-level?</b></p>
+<p>To provide a toolkit from which higher-level functionality can be created.</p>
+<p>An
+extended attempt to add convenience functions on top of, or as a replacement
+for, the low-level functionality failed because there is no widely acceptable
+set of simple semantics for most convenience functions considered.&nbsp;
+Attempts to provide alternate semantics via either run-time options or
+compile-time polices became overly complicated in relation to the value
+delivered, or became contentious.&nbsp; OTOH, the specific functionality needed for several trial
+applications was very easy for the user to construct from the lower-level
+toolkit functions.&nbsp; See <a href="design.htm#Abandoned_Designs">Failed
+Attempts</a>.</p>
+<p><b>Isn't it inconsistent then to provide a few convenience functions?</b></p>
+<p>Yes, but experience with both this library, POSIX, and Windows indicates
+the utility of certain convenience functions, and that it is possible to provide
+simple, yet widely acceptable, semantics for them. For example, remove_all.</p>
+<p><b>Why are there basic_directory_iterator&lt;&gt; overloads for operations.hpp
+predicate functions? Isn't two ways to do the same thing poor design?</b></p>
+<p>Yes, two ways to do the same thing is often a poor design practice. But the
+iterator versions are often much more efficient. Calling status() during
+iteration over a directory containing 15,000 files took 6 seconds for the path
+overload, and 1 second for the iterator overload, for tests on a freshly booted
+machine. Times were .90 seconds and .30 seconds, for tests after prior use of
+the directory. This performance gain is large enough to justify deviating from
+preferred design practices. Neither overload alone meets all needs.</p>
+<p><b>Why are library functions so picky about errors?</b></p>
+<p>Safety. The default is to be safe rather than sorry. This is particularly
+important given the reality that on many computer systems files and directories
+are globally shared resources, and thus subject to
+unexpected errors.</p>
+<p><b>Why are errors reported by exception rather than return code or error
+notification variable?</b></p>
+<p>Safety.&nbsp;Return codes or error notification variables are often ignored
+by programmers.&nbsp; Exceptions are much harder to ignore, provided desired
+default behavior (program termination) if not caught, yet allow error recovery
+if desired. Non-throwing versions of functions are provided where experience
+indicates the need.</p>
+<p><b>Why are attributes accessed via named functions rather than property maps?</b></p>
+<p>For commonly used attributes (existence, directory or file, emptiness),
+simple syntax and guaranteed presence outweigh other considerations. Because
+access to many other attributes is inherently system dependent,
+property maps are viewed as the best hope for access and modification, but it is
+better design to provide such functionality in a separate library. (Historical
+note: even the apparently simple attribute &quot;read-only&quot; turned out to be so
+system depend as to be disqualified as a &quot;guaranteed presence&quot; operation.)</p>
+<p><b>Why aren't <a name="wide-character_names">wide-character names</a> supported? Why not std::wstring or even
+a templated type?</b></p>
+<p>They <u>are</u> supported, starting with version 1.33. See
+Internationalization.</p>
+<p><b>Why isn't automatic name portability error detection provided?</b></p>
+<p>A number (at least six) of designs for name validity error
+detection were evaluated, including at least four complete implementations.&nbsp;
+While the details for rejection differed, all of the more powerful name validity checking
+designs distorted other
+otherwise simple aspects of the library. Even the simple name checking provided
+in prior library versions was a constant source of user complaints. While name checking can be helpful, it
+isn't important enough to justify added a lot of additional complexity.</p>
+<p><b>Why are paths sometimes manipulated by member functions and sometimes by
+non-member functions?</b></p>
+<p>The design rule is that purely lexical operations are supplied as <i>class
+basic_path</i> member
+functions, while operations performed by the operating system are provided as
+free functions.</p>
+<p><b>Why is path normalized form different
+from canonical form?</b></p>
+<p>On operating systems such as POSIX which allow symbolic links to directories,
+the normalized form of a path can represent a different location than the
+canonical form. See use case
+from Walter Landry.</p>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 November, 2007<!--webbot bot="Timestamp" endspan i-checksum="39371" --></p>
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file

Modified: branches/release/libs/filesystem/doc/index.htm
==============================================================================
--- branches/release/libs/filesystem/doc/index.htm (original)
+++ branches/release/libs/filesystem/doc/index.htm 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -5,54 +5,67 @@
 <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
 <meta name="ProgId" content="FrontPage.Editor.Document">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Boost Filesystem Library</title>
+<title>Filesystem Home</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/html/minimal.css">
 </head>
 
-<body bgcolor="#FFFFFF">
+<body>
 
-<h1>
-<img border="0" src="../../../boost.png" align="center" width="277" height="86">Boost
-Filesystem Library</h1>
-<table border="0" cellpadding="0" width="100%">
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
   <tr>
- <td width="50%" valign="top"><font size="4">This Document</font><br>
-&nbsp;&nbsp;&nbsp; Introduction<br>
-&nbsp;&nbsp;&nbsp; Two-minute tutorial<br>
-&nbsp;&nbsp;&nbsp; Cautions<br>
-&nbsp;&nbsp;&nbsp; <a href="#Using_reference_doc">Using the Reference
- Documentation</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;Examples<br>
-&nbsp;&nbsp;&nbsp; Implementation<br>
-&nbsp;&nbsp;&nbsp; <a href="#narrow-only">Restricting library to narrow
- character paths</a><br>
-&nbsp;&nbsp;&nbsp; Building the object-library<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Notes for Cygwin users<br>
-&nbsp;&nbsp;&nbsp; Acknowledgements<br>
-&nbsp;&nbsp;&nbsp; Change history</td>
- <td width="50%" valign="top"><font size="4">Other Documents</font><br>
-&nbsp;&nbsp;&nbsp; Reference<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table of Contents<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- TR2 Introduction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Formal reference text<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <a href="tr2_proposal.html#frontmatter">Introductory
- chapter</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <a href="tr2_proposal.html#Filesystem-library">Filesystem
- library chapter</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <a href="tr2_proposal.html#Header-filesystem-synopsis">Header
- &lt;boost/filesystem.hpp&gt; synopsis</a><br>
-&nbsp;&nbsp;&nbsp; Library Design<br>
-&nbsp;&nbsp;&nbsp; FAQ<br>
-&nbsp;&nbsp;&nbsp; Portability Guide<br>
- &nbsp;&nbsp;&nbsp; Do-list<br>
- &nbsp;</td>
+ <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+ <td width="410" align="middle">
+ <font size="7">Filesystem Library</font>
+ </td>
   </tr>
 </table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+ <tr>
+ <td>Boost Home&nbsp;&nbsp;&nbsp;
+ Library Home&nbsp; &nbsp; Tutorial&nbsp; &nbsp; <a href="reference.html">
+ Reference</a>&nbsp;&nbsp; FAQ</td>
+ </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" align="right">
+ <tr>
+ <td width="100%" bgcolor="#D7EEFF" align="center">
+ <i><b>Contents</b></i></td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#E8F5FF">
+ Introduction<br>
+ Two-minute tutorial<br>
+ Cautions<br>
+ Using the Reference Documentation<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;Examples<br>
+ Implementation<br>
+ Using only narrow character paths<br>
+ Building the object-library<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;Notes for Cygwin users<br>
+ Acknowledgements<br>
+ Change history</td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#D7EEFF" align="center">
+ <i><b>Other Documents</b></i></td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#E8F5FF">
+ Reference<br>
+ Library Design<br>
+ FAQ<br>
+ Portability Guide<br>
+ Do-list
+ </td>
+ </tr>
+</table>
+
 <h2><a name="Introduction">Introduction</a></h2>
-<p>The Boost Filesystem Library provides portable facilities to query and
+<p>The Boost.Filesystem library provides portable facilities to query and
 manipulate paths, files, and directories.</p>
 
 <p>The motivation for the library is the need to perform portable script-like operations from within C++ programs. The intent is not to
@@ -62,7 +75,7 @@
 
 <p>Programs using the library are <b><i>portable</i></b>, both in the sense that
 the syntax of program code is portable, and the sense that the semantics or
-behavior of code is portable. The <a href="tr2_proposal.html#Pathname-grammar">generic path
+behavior of code is portable. The <a href="reference.html">generic path
 grammar</a> is another important aid to portability.</p>
 
 <p>Usage is <i><b>safe</b></i> in the sense that errors cannot be ignored since most functions throw C++
@@ -70,18 +83,18 @@
 it alleviates the&nbsp;need to explicitly check error
 return codes.</p>
 
-<p>A proposal has been
-submitted to the C++ Standards Committee for inclusion of the library in the
-Standard Library Technical Report 2 (TR2). The Boost.Filesystem library will
-stay in alignment with the TR2 Filesystem proposal as it works its way through
-the committee process. Note, however, that namespaces and header granularity
-differs between Boost.Filesystem and the TR2 proposal. See
-Using the Reference Documentation.</p>
+<p>A proposal,
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975</a>, to include Boost.Filesystem in Technical Report 2 has been accepted
+by the C++ Standards Committee. The Boost.Filesystem library will stay in
+alignment with the TR2 Filesystem proposal as it works its way through the TR2
+process. Note, however, that namespaces and header granularity differs between
+Boost.Filesystem and the TR2 proposal.</p>
 
-<p>The Filesystem Library supplies several&nbsp; headers:</p>
+<p>The Boost.Filesystem library provides several&nbsp; headers:</p>
 
 <ul>
- <li>Header boost/filesystem.hpp provides class <i>
+ <li>Header &lt;boost/filesystem.hpp&gt; provides class <i>
   basic_path, </i>a portable mechanism for representing
       <a href="#path">paths</a> in C++ programs. Typedefs <i>path</i> and <i>
   wpath</i> ease the most common usages of <i>basic_path</i>. Operational
@@ -91,14 +104,9 @@
   the contents of directories. Convenience functions and classes combine lower-level functionality
   in useful ways.<br>
 &nbsp;</li>
- <li>Header boost/filesystem/fstream.hpp provides the same components as the C++ Standard
+ <li>Header &lt;boost/filesystem/fstream.hpp&gt; provides the same components as the C++ Standard
   Library's <i>fstream</i> header, except
- that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.<br>
-&nbsp;</li>
- <li>Header <a href="../../../boost/filesystem/cerrno.hpp">
- boost/filesystem/cerrno.hpp</a> provides POSIX errno macros used by
- Boost.Filesystem, and two new macros (EBADHANDLE, EOTHER) not defined by
- POSIX.</li>
+ that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.</li>
 </ul>
 <h2>Two-minute <a name="tutorial">tutorial</a></h2>
 <p>First some preliminaries:</p>
@@ -251,20 +259,6 @@
 BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.</p>
 <p>Non-throwing versions are provided of several functions that are often used
 in contexts where error codes may be the preferred way to report an error.</p>
-<h2><a name="Using_reference_doc">Using the Reference Documentation</a></h2>
-<p>The proposal for adding Boost.Filesystem to the C++ Standard Library's
-Technical Report 2 is used as the <a href="tr2_proposal.html">Reference
-Documentation</a>. This eliminates the need to maintain two sets of
-documentation, but means that the actual Boost.Filesystem library differs from
-this reference documentation in several ways.</p>
-<ul>
- <li>The Boost.Filesystem header is <a href="../../../boost/filesystem.hpp">
- <code>&lt;boost/filesystem.hpp&gt;</code></a> rather than <code>&lt;filesystem&gt;</code>.</li>
- <li>The namespace is <code>boost::filesystem</code> rather than <code>
- std::tr2::sys</code>.</li>
- <li>Several legacy interfaces are provided by Boost.Filesystem that are not
- part of the TR2 proposal.</li>
-</ul>
 <h2><a name="Examples">Examples</a></h2>
 <h3>simple_ls.cpp</h3>
 <p>The example program simple_ls.cpp is
@@ -347,7 +341,7 @@
 <h2><a name="Acknowledgements">Acknowledgements</a></h2>
 <p>The Filesystem Library was designed and implemented by Beman Dawes. The
 original <i>directory_iterator</i> and <i>filesystem_error</i> classes were
-based on prior work from Dietmar Kühl, as modified by Jan Langer. Thomas Witt
+based on prior work from Dietmar Kühl, as modified by Jan Langer. Thomas Witt
 was a particular help in later stages of initial development. Peter Dimov and
 Rob Stewart made many useful suggestions and comments over a long period of
 time. Howard Hinnant helped with internationalization issues.</p>
@@ -462,6 +456,16 @@
 
 <h2><a name="Change-history">Change history</a></h2>
 
+<h3>Version 1.35.0</h3>
+
+<ul>
+ <li>Diagnostics moved to the separate <a href="../../system/doc/index.html">
+ Boost.System</a> library.</li>
+ <li>current_path() function added to set the current directory path.</li>
+ <li>Test coverage extended.</li>
+ <li>A few minor implementation fixes.</li>
+</ul>
+
 <h3>Version 1.34.0</h3>
 
 <ul>
@@ -525,7 +529,7 @@
   <li>The object library can now be built for either
   static or dynamic (shared/dll) linking. </li>
   <li>Several added functions, including improved checking for directory and
- file name portability. See <a href="portability_guide.htm#name_check­_functions">
+ file name portability. See <a href="portability_guide.htm#name_check­_functions">
   Name check functions</a>.</li>
   <li>Separation of canonical form and normalized form and a new path member
   function normalize(). This changes behavior,
@@ -536,13 +540,12 @@
 
 <hr>
 <p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->03 June, 2007<!--webbot bot="Timestamp" endspan i-checksum="19946" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 November, 2007<!--webbot bot="Timestamp" endspan i-checksum="39371" --></p>
 
 <p>© Copyright Beman Dawes, 2002-2005</p>
 <p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
 
 </body>
 

Deleted: branches/release/libs/filesystem/doc/tr2_proposal.html
==============================================================================
--- branches/release/libs/filesystem/doc/tr2_proposal.html 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
+++ (empty file)
@@ -1,3435 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem Library Proposal
-</title>
-</head>
-
-<body bgcolor="#FFFFFF">
-
-<p>Doc. no.&nbsp;&nbsp; WG21/D1934=06-0004<br>
-Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2006-01-31<br>
-Project:&nbsp;&nbsp;&nbsp;&nbsp; Programming Language C++<br>
-Reply to:&nbsp;&nbsp; Beman Dawes &lt;<a href="mailto:bdawes_at_[hidden]">bdawes_at_[hidden]</a>&gt;</p>
-
-<h1 align="center"><i><font size="7">Draft</font></i></h1>
-
-<h1>Filesystem Library Proposal for TR2 (Revision 2)</h1>
-
-<h2><a name="TOC">Table of Contents</a></h2>
-
-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="26%" valign="top">Introduction<br>
-Motivation and Scope<br>
-Impact on the Standard<br>
-Important Design Decisions<br>
-Proposed Text for TR2<br>
-&nbsp;&nbsp;&nbsp; Introductory chapter<br>
-&nbsp;&nbsp;&nbsp; Filesystem library chapter<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Definitions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Requirements<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Requirements on programs<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Requirements<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-on implementations<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Header-filesystem-synopsis">
- Header &lt;filesystem&gt; synopsis</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Path traits<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Class-template-basic_path">
- Class template basic_path</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Pathname formats<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Pathname grammar<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Filename conversion<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Requirements </td>
- <td width="35%" valign="top">&nbsp;Class template basic_path (continued)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path constructors<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path assignments<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path modifiers<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path operators<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path observers<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path iterators<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path non-member functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_path inserter and extractor<span style="background-color: #FFFFFF"><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-</span> <a href="#Class-filesystem_error">
-<span style="background-color: #FFFFFF">Class filesystem_error</span></a><span style="background-color: #FFFFFF"><br>
-</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_filesystem_error">Class template
- basic_filesystem_error</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_filesystem_error-constructors">basic_filesystem_error
- constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_filesystem_error observers<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_directory_entry">Class template
- basic_directory_entry</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_directory_entry constructors<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_directory_entry modifiers<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_directory_entry observers<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-basic_directory_entry comparisons</td>
- <td width="89%" valign="top">Filesystem library chapter (continued)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_directory_iterator">Class template
- basic_directory_iterator</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_iterator-constructors">basic_directory_iterator
- constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_recursive_directory_iterator">Class template
- basic_recursive_directory_iterator</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#file_status">Class
- file_status</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Non-member-functions">
- Non-member operational functions</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Status functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Predicate functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Attribute functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Other operations functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Convenience functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#header-cerrno">Additions to
- header &lt;cerrno&gt;</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#header-fstream">Additions
- to header &lt;fstream&gt;</a><br>
-Suggestions for <fstream><code><br>
-&nbsp; </code>
- implementations<br>
-Path decomposition table<br>
-Issues<br>
-Acknowledgements<br>
-References<br>
-<a href="#Revision-History"><span style="background-color: #FFFFFF">Revision
-History</span></a></td>
- </tr>
-</table>
-
-<h2><a name="Introduction">Introduction</a></h2>
-<p>This paper proposes addition of a&nbsp; filesystem library component
-to the C++ Standard Library Technical Report 2. The proposal is based on the Boost Filesystem Library (see www.boost.org/libs/filesystem).</p>
-<p>The library provides portable facilities to query and
-manipulate paths, files, and directories. The Boost version of the library is widely used. It would
-be a pure addition to the C++ standard, leaving in place existing
-standard library functionality in the relatively few areas where there is overlap.</p>
-<p>Users say they prefer the Boost Filesystem Library interface to native
-operating system or
-<i>POSIX</i> API's, even in code without portability requirements, because the design
-follows modern C++ practice.</p>
-<p>The proposed text includes an example of a
-program using the library.</p>
-<h2><a name="Motivation">Motivation</a> and Scope</h2>
-<p><b><i>Why is this important? </i></b></p>
-<p>The motivation for the library is the desire to perform <i><b>safe, portable, script-like filesystem operations</b></i> from within C++ programs. Because the
-C++ Standard Library currently contains no facilities for such filesystem tasks
-as directory iteration or directory creation, programmers currently must rely on
-operating system specific interfaces, making it difficult to write
-portable programs.</p>
-<p>The intent is not to compete
-with Python, Perl, or shell scripting languages, but rather to provide
-file system operations where C++ is already the language of choice. The design
-encourages, but does not require, safe and portable usage.</p>
-<p><b><i>What kinds of problems does it address, and what kinds of programmers is
-it intended to support?</i></b></p>
-<p>The library addresses everyday needs, for both application programs and
-libraries. It is useful across every application domain that uses files. It is
-intended to be useful to all levels of programmers, from rank beginners to
-seasoned experts.</p>
-<p><b><i>Is it based on existing practice?</i></b></p>
-<p>Yes, very much so. The proposal is based on the Boost Filesystem Library,
-which has been in use since 2002 and by now is in very wide use. For example,
-current versions of Adobe Systems products such as Adobe Reader use the Boost
-Filesystem Library on the many platforms they support.</p>
-<p>Note, however, that until recently all the Boost experience was with a
-narrow-character only version of the library. The internationalized version as
-described in this proposal is just starting to be used, and will not be fully
-released until Boost release 1.34.</p>
-<p>The underlying mechanisms have been in use for decades on the world's most
-wide-spread operating systems, such as <i>POSIX</i>, <i>Windows</i>, and various
-mainframe operating systems. What this proposal brings to the table is an
-approach that is C++
-Standard Library friendly and fully internationalized.</p>
-<p><b><i>Is there a reference implementation?</i></b></p>
-<p>Yes. The Boost Filesystem Library is freely and publicly available. The Boost library will track the TR2 proposed
-library as the proposal evolves.</p>
-<h2><a name="Impact">Impact</a> on the Standard</h2>
-<p><b><i>What does it depend on, and what depends on it?</i></b></p>
-<p>It depends on
-some standard library components, such as basic_string. No other proposals
-depend on it.</p>
-<p>If a revision to the Code Conversion Proposal (See
-<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1683.html">
-http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1683.html>) is
-accepted, it may be advantageous for the Filesystem Library
-to use that library rather than the current code conversion facilities proposed
-below.</p>
-<p><b><i>Is it a pure extension, or does it require changes to standard
-components?</i></b></p>
-<p>Most of the proposed library is a pure extension.</p>
-<p>There are
additions to header <cerrno>. Since
-the critical portions that might require change to C headers (always a sore
-point) are already mandated for <i>POSIX</i> compliance, and codify
-existing practice for many non-<i>POSIX</i> implementations such as for <i>Windows</i>, it is not expected that they will cause any problems.</p>
-<p>There are additions to header <fstream>.&nbsp;
-These have been carefully specified to avoid breaking existing code in common operating environments such as <i>POSIX</i>, <i>
-Windows</i>, and <i>OpenVMS</i>. See <a href="#Suggestions-for-fstream">
-Suggestions for <code>&lt;fstream&gt;</code> implementations</a> for techniques to
-avoid breaking existing code in other environments, particularly on operating
-systems allowing slashes in filenames.</p>
-<p><b><i>Can it be implemented using today's compilers, or does it require
-language features that will only be available as part of C++0x?</i></b></p>
-<p>It can
-be (and has been) implemented with today's compilers.</p>
-<p>There is one minor function that can best be implemented by an addition to
-current C++ runtime libraries, although an acceptable workaround is documented.</p>
-<p>On operating systems with built-in support for wide-character file names,
-such as <i>Windows</i>, high-quality implementation of the header &lt;fstream&gt;
-additions require an addition to the C++ Standard Library implementation. The
-addition is relatively small and localized. There is a workaround that avoids
-modifying the standard library, but it is very much a hack and depends on a <i>
-Windows</i> feature (8.3 filename support) which some users disable, thereby
-disabling the workaround. The issue doesn't affect implementations on operating
-systems which only support narrow character file names.</p>
-<h2>Important <a name="Design">Design</a> Decisions</h2>
-<h4><i>Why did you choose the specific design that you did?</i></h4>
-<p>Many of the specific design decisions were driven by the desire to provide a modern C++ interface
-that works
-well with the C++ Standard Library. The intent is that Standard Library users
-can become comfortable with the Filesystem Library in very short order.</p>
-<p>The proposed library encourages both syntactic and semantic portability, yet
-does not force implementors into heroic efforts on hopeless systems. This
-balances the benefits to users of both code and knowledge portability with the
-realities faced by implementors on some operating systems.</p>
-
-<p><span style="background-color: #FFFFFF">In some
-cases users always need portable semantics. In some cases users always need
-platform specific semantics. In some cases users need to be able to choose
-between portable and platform specific semantics. The design evolved over a
-period of years to identify and meet each of those needs. </span></p>
-
-<p>Because of the desire to support simple &quot;script-like&quot; usage, use cases often
-drove design choices. For example, users can write <code>if (exists(&quot;foo&quot;))</code> rather than
-the lengthier <code>if (exists(path(&quot;foo&quot;)))</code>.</p>
-
-<p>Because filesystem operations often encounter unexpected runtime errors, the library reports runtime errors via C++ exceptions,
-and ensures enough information is provided for meaningful error messages,
-including internationalized error messages.</p>
-
-<p><b><i>What alternatives did you consider, and what are the tradeoffs?</i></b></p>
-<p><i>Additional observers and modifiers for file system attributes.</i>
-Attribute functions which cannot supply portable semantics are not provided,
-avoiding the illusion of portability in cases where it cannot in fact exist.</p>
-<p><i>A larger number of operational convenience functions.</i>
-Convenience functions (functions which can be portably created by composition
-from basic functions) were not provided unless there was widespread agreement on
-usefulness and need.</p>
-<p><i>Compile-time or run-time options for operational functions.</i>
-Numerous trial implementations were abandoned because the added complexity
-out weighed the benefits, and because consensus could not be reached on the
-feature set.</p>
-<p><i>Automatic path name checking.</i> This feature, supplied by the Boost
-library for several years, allowed users to specify both default and per
-constructor path name checking, and thus allowed the desired degree of portability to be
-automatically enforce. This implicit name checking was abandoned because of user
-confusion and complaints.</p>
-<p><i>Separate path types for regular file and directory pathnames.</i> Pathname
-formats that use different syntax for regular pathnames versus directory
-pathnames are passing into extinction. Why prolong the agony at the cost of
-torturing those using modern systems? It is perhaps significant that one of the few web
-sites dedicated to preserving a dual pathname format operating system is named
-<i>Deathrow</i> (http://deathrow.vistech.net/).</p>
-<p><i>Single path type which can at runtime accept narrow or wide character
-pathnames.</i> Although certainly interesting, and possibly superior, such a
-design would not interoperate well with the current Standard Library's compile-time
-typed <code>basic_string</code>. A new runtime polymorphic string class would be
-the best place to experiment with this concept, not a path class.</p>
-<p><b><i>What are the consequences of your choices, for users and implementors?</i></b></p>
-<p>The design has evolved over a period of four years of actual experience by
-Boost users, and the most frequent causes of user complaints (such as enforced
-name-checking and several over-strict preconditions) were eliminated. The TR
-process will allow further refinement. The intent is to ensure user needs are
-met.</p>
-<p>Because the Boost implementation is tested and
-used in a wide range of <i>POSIX</i> and <i>Windows</i> environments, many implementation
-concerns have already been addressed.</p>
-<p><b><i>What decisions are left up to implementors?</i></b></p>
-<p>Because implementations of the library are dependent on facilities of the
-underlying operating system, implementors are given unusual freedom to redefine
-semantics of the library. That being said, implementors are given strong
-normative encouragement to provide the TR described semantics whenever feasible.</p>
-<p><b><i>If there are any similar libraries in use, how do their design
-decisions compare to yours?</i></b></p>
-<p>There are a number of libraries which address the problem domain. Most of the
-C/C++ libraries have C, rather than C++ interfaces. For example, see the Apache Portable Runtime
-Project (http://apr.apache.org). The ACE
-toolkit (http://www.cs.wustl.edu/~schmidt/ACE.html)
-uses a C++ approach, but doesn't mesh well with the C++ Standard Library. For
-example, the ACE directory iterator differs greatly from Standard Library
-iterator requirements.</p>
-<h2>Proposed <a name="Text">Text</a> for Technical Report 2</h2>
-<p><span style="font-style: italic; background-color: #E0E0E0">Gray-shaded
-italic text is commentary on the proposal. It is not to be added to the TR.</span></p>
-<p><span style="background-color: #FFFFFF"><i>Italic text is editorial guidance.
-It is not to be added to the TR.</i></span></p>
-<p><span style="font-style: italic; background-color: #FFFFFF">
-<a name="frontmatter">Add</a> to the
-introductory section of the TR:</span></p>
-<p>The following standard contains provisions which, through reference in this
-text, constitute provisions of this Technical Report. At the time of
-publication, the editions indicated were valid. All standards are subject to
-revision, and parties to agreements based on this Technical Report are
-encouraged to investigate the possibility of applying the most recent editions
-of the standard indicated below. Members of IEC and ISO maintain registers of
-currently valid International Standards.</p>
- <ul>
- <li>ISO/IEC 9945:2003, <i>Portable Operating System Interface (POSIX1),
- part 1 (Base Definitions) and part 2 (System Interfaces)</i>, both as corrected by their
- respective 2004 Correction 1 documents.<p>[<i>Note:</i> ISO/IEC 9945:2003 is
- also IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group Base Specifications, Issue 6,
- and also known as The Single Unix<font face="Times New Roman"><sup>2</sup><i><b>
- </b></i>Specification, Version 3. It is available from each of those organizations,
- and may be read online or downloaded from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a> <i>-- end note</i>]</font></p>
- </li>
- </ul>
-<p>ISO/IEC 9945:2003, with the indicated corrections, is hereinafter called <i>
-POSIX</i>.</p>
-<p>Some library behavior in this Technical Report is defined by reference to <i>
-POSIX</i>. How such behavior is actually implemented is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of
-operating system dependent behavior. Presumably implementations will actually call native
-operating system API's. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
-
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
-limitations of actual operating systems. If an implementation cannot provide any
-reasonable behavior, the implementation shall report an error in an
-implementation-defined manner.</p>
-<blockquote>
-<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
-static_assert</code>, a <code>basic_filesystem_error</code> exception, a special
-return value, or some other manner. <i>--end note</i>]</p>
-</blockquote>
-<p><a name="Footnote-1">Footnote 1</a>: <i>POSIX</i>® is a registered trademark of The
-IEEE.</p>
-<p><a name="Footnote-2">Footnote 2</a>: <i>UNIX</i>® is a registered trademark of The
-Open Group.</p>
-<p><span style="background-color: #FFFFFF"><i>Add a new clause to the TR:</i></span></p>
-<hr>
-<h2>Chapter <span style="font-weight: 400"><i>(tbs)</i></span> - <a name="Filesystem-library">Filesystem library</a></h2>
-<hr>
-<p>This clause describes components that C++ programs may use to interrogate and
-manipulate files (including directories), and certain of their
-attributes.</p>
-<p>This clause applies only to hosted implementations (C++ Std, 1.4,
-Implementation compliance [intro.compliance]).</p>
-<blockquote>
-<p>[<i>Note:</i> This clause applies to any hosted implementation.
-Specific operating systems such as <i>OpenMVS</i><sup>3</sup>,
-<i>UNIX</i>, and <i>Windows</i><sup>4</sup> are mentioned only for purposes of illustration or to
-give guidance to implementors. No slight to other operating systems is implied
-or intended. <i>--end note</i>.]</p>
-</blockquote>
-<p>Unless otherwise specified, all components described in this clause are
-declared in namespace <code>std::tr2::sys</code>.</p>
-<blockquote>
-<p>[<i>Note:</i> The <code>sys</code> sub-namespace prevents collisions with
-names already in the standard library and emphasizes reliance on the
-operating system dependent behavior inherent in file system operations. <i>-- end
-note</i>]</p>
-</blockquote>
-<p>The <i>Effects</i> and <i>Postconditions</i> of functions described in this clause
-may not be achieved in
-the presence of race conditions. No diagnostic is required.</p>
-<p>If the possibility of race conditions makes it unreliable for a program to
-test for a precondition before calling a function described in this clause, <i>
-Requires</i> is not specified for the condition. Instead, the condition is
-specified as a <i>Throws</i> condition.</p>
-<blockquote>
-<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
-is unreasonable for a program to detect them prior to calling the function. <i>
--- end note</i>]</p>
-</blockquote>
-<p><a name="Footnote-3">Footnote 3</a>: <i>OpenMVS</i>® is a registered
-trademark of Hewlett-Packard Development Company.</p>
-<p><a name="Footnote-4">Footnote 4</a>: <i>Windows</i>® is a registered
-trademark of Microsoft Corporation.</p>
-<h3><a name="Definitions">Definitions</a></h3>
-<p>The following definitions shall apply to this clause:</p>
-<p><i><a name="File">File</a>: </i>An object that can be written to, or read from, or both. A file
-has certain attributes, including type. File types include regular file,
-symbolic link, and directory. Other types of files may be supported by the
-implementation.</p>
-<p><i><a name="File-system">File system</a>:</i> A collection of files and certain of their attributes.</p>
-<p><i><a name="Filename">Filename</a>:</i> The name of a file. The format is as
-specified by the <i>POSIX
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">
-Filename</a></i> base definition.</p>
-<p><i><a name="Path">Path</a>:</i> A sequence of elements which identify
-a location within a filesystem. The elements are the <i>root-name</i>, <i>
-root-directory</i>, and each successive <i>filename</i>. See
-Pathname grammar.</p>
-<p><i><a name="Pathname">Pathname</a>: </i>A character string that represents a
-path.</p>
-<p><i><a name="Link">Link</a>: </i>A directory entry object that associates a
-filename with a file. On some file systems, several directory entries can
-associate names with the same file.</p>
-<p><i><a name="Hard-link">Hard link</a>:</i> A link to an existing file. Some
-file systems support multiple hard links to a file. If the last hard link to a
-file is removed, the file itself is removed.</p>
-<blockquote>
-<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart
-pointer to a file.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Symbolic-link">Symbolic link</a>: </i>A type of file with the
-property that when the file is encountered during pathname resolution, a string
-stored by the file is used to modify the pathname resolution.</p>
-<blockquote>
-<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file.
-If the file pointed to does not exist, the symbolic link is said to be a
-&quot;dangling&quot; symbolic link.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Slash">Slash</a>:</i> The character <tt>'/'</tt>, also known as
-solidus.</p>
-<p><i><a name="Dot">Dot</a>:</i> The character '.', also known as period.</p>
-<p><i><a name="Race-condition">Race condition</a>:</i> The condition that occurs
-when multiple threads, processes, or computers interleave access and
-modification of
-the same object within a file system.</p>
-<h3><a name="Requirements">Requirements</a></h3>
-<h4><a name="Requirements-on-programs">Requirements on programs</a></h4>
-<p>The arguments for template parameters named <code>Path</code>, <code>Path1</code>,
-or <code>Path2</code> described in this clause shall be of type <code>basic_path</code>,
-or a class derived from <code>basic_path</code>, unless otherwise
-specified.</p>
-<h4><a name="Requirements-on-implementations">Requirements on implementations</a></h4>
-<p>Some function templates described in this clause have a template parameter
-named <code>Path</code>, <code>Path1</code>, or <code>Path2</code>. When called
-with a function argument <code>s</code> of type <code>char*</code> or <code>
-std::string</code>, the implementation shall treat the argument as if it were
-coded <code>path(s)</code>. When called with a function argument <code>s</code>
-of type <code>wchar_t*</code> or <code>std::wstring</code>, the implementation
-shall treat the argument as if it were coded <code>wpath(s)</code>. For
-functions with two arguments, implementations shall not supply this treatment
-when <code>Path1</code> and <code>Path2</code> are different types.</p>
-<blockquote>
-<p>[<i>Note:</i> This &quot;do-the-right-thing&quot; rule allows users to write <code>exists(&quot;foo&quot;)</code>,
-taking advantage of class <code>basic_path</code>'s string conversion
-constructor,&nbsp; rather
-than the lengthier and more error prone <code>exists(path(&quot;foo&quot;))</code>. This
-is particularly important for the simple, script-like, programs which are an
-important use case for the library. Calling two argument functions with
-different types is a very rare usage, and may well be a coding error, so
-automatic conversion is not supported for such cases.</p>
-<p>The implementation technique is unspecified. One possible implementation
-technique, using
-<code>exists()</code> as an example, is:</p>
- <blockquote>
- <pre>template &lt;class Path&gt;
- typename boost::enable_if&lt;is_basic_path&lt;Path&gt;,bool&gt;::type exists(const Path&amp; p);
-inline bool exists(const path&amp; p) { return exists&lt;path&gt;(p); }
-inline bool exists(const wpath&amp; p) { return exists&lt;wpath&gt;(p); }</pre>
- </blockquote>
- <p>&nbsp;The <code>enable_if</code> will fail for a C string or <code>
- std::basic_string</code> argument, which will then be automatically converted
- to a <code>basic_path</code> object via the appropriate <code>basic_path</code> conversion
- constructor.&nbsp;&nbsp; <i>-- end note</i>]</p>
- <p><span style="background-color: #E0E0E0"><i>The two overloads are not given
- in the normative text because:</i></span></p>
- <ul>
- <li><span style="background-color: #E0E0E0"><i>Better techniques for
- achieving the desired affect may be developed, perhaps enabled by core
- language changes like Concepts.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Implementations may prefer
- techniques that work with legacy compilers that do not support enable_if.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Spelling out the overloads
- makes the text longer and harder to read without adding much benefit.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>More overloads will probably
- be needed for char16_t and char32_t (or whatever they end up being called),
- making it even less attractive to actually spell out each one. </i></span>
- </li>
- </ul>
-</blockquote>
-<p>Implementations of functions described in this clause are permitted to call the applications
-program interface (API) provided by the operating system. If such an operating
-system API call results in an error, implementations
-shall report the error by throwing exception <code>basic_filesystem_error</code>,
-unless otherwise specified.</p>
-<blockquote>
-<p>[<i>Note: </i>Such exceptions and the conditions that cause them to be thrown
-are not explicitly described in each <i>Throws</i> element within this clause.
-Because hardware failures, network failures, race conditions, and a plethora of
-other errors occur frequently in file system operations, users should be aware
-that <span style="background-color: #FFFFFF">unless otherwise specified</span> any file system operation, not matter how apparently innocuous, may throw
-an exception. <i>-- end note</i>]</p>
-</blockquote>
-<p><span style="background-color: #FFFFFF">Functions commonly used in contexts
-where errors are not exceptional have overloads taking an additional argument of
-type </span><code><span style="background-color: #FFFFFF">system_error_code&amp;</span></code><span style="background-color: #FFFFFF">
-ec. Such overloaded functions shall not throw exceptions. If an error occurs,
-<code>ec</code> shall be set to the
-error code reported by the operating system, otherwise <code>ec</code> shall be set to 0. If
-an overload without an argument of type </span><code>
-<span style="background-color: #FFFFFF">system_error_code&amp;</span></code><span style="background-color: #FFFFFF">
-ec returns void, the other overload (without an argument of type </span><code>
-<span style="background-color: #FFFFFF">system_error_code&amp;</span></code><span style="background-color: #FFFFFF">
-ec) returns a <code>system_error_code</code> with the value of ec.</span></p>
-<h3><a name="Header-filesystem-synopsis">Header <code>&lt;filesystem&gt;</code> synopsis</a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class String, class Traits&gt; class basic_path;
-
- template&lt;class String, class Traits&gt;
- void swap(basic_path&lt;String, Traits&gt; &amp; lhs, basic_path&lt;String, Traits&gt; &amp; rhs);
-
- template&lt;class String, class Traits&gt; bool operator&lt;(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator==(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator!=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&gt;(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&lt;=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&gt;=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator/(<i>a</i> a, <i>b</i> b);
-
- template&lt;class Path&gt;
- basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt; &amp;
- operator&lt;&lt;(basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; os, const Path &amp; ph);
-
- template&lt;class Path&gt;
- basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt; &amp;
- operator&gt;&gt;(basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; is, Path &amp; ph);
-
- struct path_traits;
- struct wpath_traits;
-
- typedef basic_path&lt;std::string, path_traits&gt; path;
- typedef basic_path&lt;std::wstring, wpath_traits&gt; wpath;
-
- template&lt;class Path&gt; struct is_basic_path;
-
- template&lt;class Path&gt; struct slash { static const char value = '/'; };
- template&lt;class Path&gt; struct dot { static const char value = '.'; };
-<span style="background-color: #FFFFFF"> template&lt;class Path&gt; struct colon { static const char value = ':'; };</span><span style="background-color: #FFFF00">
-</span>
- typedef int errno_type; // type is determined by the C standard
- typedef<i> implementation-defined </i>system_error_type; // usually int or unsigned
-
- <span style="background-color: #FFFFFF">class filesystem_error;</span><span style="background-color: #FFFF00">
-</span>
- template &lt;class Path&gt; class basic_filesystem_error;
-
- typedef basic_filesystem_error&lt;path&gt; filesystem<span style="background-color: #FFFFFF">_path</span>_error;
- typedef basic_filesystem_error&lt;wpath&gt; filesystem<span style="background-color: #FFFFFF">_wpath</span>_error;
-
- <span style="background-color: #FFFFFF">template &lt;class Path&gt; class basic_directory_entry;
-
- typedef basic_directory_entry&lt;path&gt; directory_entry;
- typedef basic_directory_entry&lt;wpath&gt; wdirectory_entry;
-</span>
- template &lt;class Path&gt; class basic_directory_iterator;
-
- typedef basic_directory_iterator&lt;path&gt; directory_iterator;
- typedef basic_directory_iterator&lt;wpath&gt; wdirectory_iterator;
-
- template &lt;class Path&gt; class basic_recursive_directory_iterator;
-
- typedef basic_recursive_directory_iterator&lt;path&gt; recursive_directory_iterator;
- typedef basic_recursive_directory_iterator&lt;wpath&gt; wrecursive_directory_iterator;
-
- enum file_type { status_unknown, file_not_found, regular_file, directory_file,
- symlink_file, block_file, character_file, fifo_file, socket_file,
- type_unknown
- };
-
- class file_status;
-
- <span style="background-color: #FFFFFF">struct space_info // returned by </span>space<span style="background-color: #FFFFFF"> function
- {
- uintmax_t capacity;
- uintmax_t free;
- uintmax_t available;
- };
-</span>
- // status functions
- template &lt;class Path&gt; file_status status(const Path&amp; p);
- template &lt;class Path&gt; file_status status(const Path&amp; p, system_error_code&amp; ec);
- template &lt;class Path&gt; file_status symlink_status(const Path&amp; p);
- template &lt;class Path&gt; file_status symlink_status(const Path&amp; p, system_error_code&amp; ec);
-
- // predicate functions
- bool status_known( file_status s );
- bool exists( file_status s );
- bool is_regular( file_status s );
- bool is_directory( file_status s );
- bool is_symlink( file_status s );
- bool is_other( file_status s );
-
- template &lt;class Path&gt; bool exists(const Path&amp; p);
- template &lt;class Path&gt; bool is_directory(const Path&amp; p);
- template &lt;class Path&gt; bool is_regular(const Path&amp; p);
- template &lt;class Path&gt; bool is_other(const Path&amp; p);
- template &lt;class Path&gt; bool is_symlink(const Path&amp; p);
- template &lt;class Path&gt; bool is_empty(const Path&amp; p);
-
- template &lt;class Path1, class Path2&gt;
- bool equivalent(const Path1&amp; p1, const Path2&amp; p2);
-
- // attribute functions
- template &lt;class Path&gt; Path current_path();
- template &lt;class Path&gt; const Path&amp; initial_path();
- template &lt;class Path&gt; <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path&amp; p);
-<span style="background-color: #FFFFFF"> template &lt;class Path&gt; space_info space(const Path&amp; p);</span><span style="background-color: #FFFF00">
-</span> template &lt;class Path&gt; std::time_t last_write_time(const Path&amp; p);
- template &lt;class Path&gt;
- void last_write_time(const Path&amp; p, const std::time_t new_time);
-
- // operations functions
- template &lt;class Path&gt; bool create_directory(const Path&amp; dp);
- template &lt;class Path1, class Path2&gt;
- void create_hard_link(const Path1&amp; old_fp, const Path2&amp; new_fp);
-<span style="background-color: #FFFFFF"> template &lt;class Path1, class Path2&gt;
- system_error_type create_hard_link(const Path1&amp; old_fp, const Path2&amp; new_fp, system_error_code&amp; ec);
- template &lt;class Path1, class Path2&gt;
- void create_symlink(const Path1&amp; old_fp, const Path2&amp; new_fp);
- template &lt;class Path1, class Path2&gt;
- system_error_type create_symlink(const Path1&amp; old_fp, const Path2&amp; new_fp, system_error_code&amp; ec);
-</span> template &lt;class Path&gt; bool remove(const Path&amp; p);
- template &lt;class Path1, class Path2&gt;
- void rename(const Path1&amp; from_p, const Path2&amp; to_p);
- template &lt;class Path1, class Path2&gt;
- void copy_file(const Path1&amp; from_fp, const Path2&amp; to_fp);
- template &lt;class Path&gt; Path system_complete(const Path&amp; p);
- template &lt;class Path&gt; Path complete(const Path&amp; p, const Path&amp; base=initial_path&lt;Path&gt;());
- errno_type lookup_errno(system_error_type code);
- void system_message(system_error_type code, std::string &amp; target);
- void system_message(system_error_type code, std::wstring &amp; target);
-
- // convenience functions
- template &lt;class Path&gt; bool create_directories(const Path &amp; p);
- template &lt;class Path&gt; typename Path::string_type extension(const Path &amp; p);
- template &lt;class Path&gt; typename Path::string_type basename(const Path &amp; p);
- template &lt;class Path&gt;
- Path replace_extension(const Path &amp; p, const typename Path::string_type &amp; new_extension);
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<h3><a name="Path-traits">Path traits</a></h3>
-<p>This subclause defines requirements on classes representing path behavior
-traits, and defines two classes that satisfy those requirements for paths based
-on <code>string</code> and <code>wstring</code>.. It also defines several path
-additional path traits structure templates, and defines several specializations
-of them.</p>
-<p>Class template <code>basic_path</code> defined in this clause requires additional
-types, values, and behavior to complete the definition of its semantics.</p>
-<p>For purposes of exposition, Traits behaves as if it is a class with private
-members bool m_locked, initialized false, and std::locale m_locale, initialized </p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="50%" align="center" colspan="2"><b><i>
- <a name="Path-Behavior-Traits-Requirements">Path Behavior Traits
- Requirements</a></i></b></td>
- </tr>
- <tr>
- <td width="38%" align="center"><b><i>Expression</i></b></td>
- <td width="62%" align="center"><b><i>Requirements</i></b></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::external_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type used by the operating system
- to represent pathnames.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::internal_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type to be used by the program to
- represent pathnames. Required be the same type as the <code>basic_path
- String</code> template parameter. </td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_external( p, is )</code></td>
- <td width="62%"><code>is</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to <code>external_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_internal( p, xs )</code></td>
- <td width="62%"><code>xs</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to to <code>internal_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc)</code></td>
- <td width="62%"><i>Effects:</i> if <code>m_locked</code>, throw. Otherwise,
- <code>m_locked = true; m_locale = loc;<br>
- </code><i>Returns:</i> <code>void</code><b><br>
- </b><i>Throws:</i> <code>basic_filesystem_error</code></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc, std::nothrow)</code></td>
- <td width="62%"><i>Effects:</i> <code>if (!m_locked) m_locale = loc; bool
- temp(m_locked); m_locked = true;<br>
- </code><i>Returns:</i> <code>temp</code></td>
- </tr>
-</table>
-<p>Type <code>is_basic_path</code> shall be a <i>UnaryTypeTrait</i> (TR1, 4.1).
-The primary template shall be derived directly or indirectly from <code>
-std::tr1::false_type</code>. Type <code>is_basic_path</code> shall be
-specialized for <code>path</code>, <code>wpath</code>, and any
-user-specialized <code>basic_path</code> types, and such specializations shall
-be derived directly or indirectly from <code>std::tr1::true_type</code>.</p>
-<p>Structure templates <code>slash</code>, <code>dot</code>, and <code>
-<span style="background-color: #FFFFFF">colon</span></code><span style="background-color: #FFFFFF">
-</span>are supplied with
-values of type <code>char</code>. If a user-specialized <code>basic_path</code>
-has a <code>
-value_type</code> type which is not convertible from <code>char</code>, the
-templates&nbsp; <code>slash</code> and <code>dot</code> shall be specialized to
-provide <code>value</code> with type which is convertible to <code>
-basic_path::value_type</code>.</p>
-<h3><a name="Class-template-basic_path">Class template <code>basic_path</code></a></h3>
-<p>Class template <code>basic_path</code> provides a portable mechanism for
-representing paths in C++ programs, using a portable generic
-pathname grammar. When portability is not a
-requirement, native file system specific formats can be used.&nbsp;Class template
-<code>basic_path</code> is concerned only with the lexical and syntactic aspects
-of a path. The path does not have to exist in the operating system's file
-system, and may contain names which are not even valid for the current operating
-system. </p>
-<blockquote>
- <p>[<i>Note: </i>If the library's functions trafficked only in C++<i> </i>or
- C-style strings, they would provide only the illusion of portability since
- while the syntax of function calls would be portable, the semantics of the
- strings they operate on would not be portable. <i>-- end note</i>]</p>
-</blockquote>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class String, class Traits&gt; class basic_path
- {
- public:
- typedef basic_path&lt;String, Traits&gt; path_type;
- typedef String string_type;
- typedef typename String::value_type value_type;
- typedef Traits traits_type;
- typedef typename Traits::external_string_type external_string_type;
-
- // constructors/destructor
- basic_path();
- basic_path(const basic_path&amp; p);
- basic_path(const string_type&amp; s);
- basic_path(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path(InputIterator first, InputIterator last);
-
- ~basic_path();
-
- // assignments
- basic_path&amp; operator=(const basic_path&amp; p);
- basic_path&amp; operator=(const string_type&amp; s);
- basic_path&amp; operator=(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path&amp; assign(InputIterator first, InputIterator last);
-
- // modifiers
- basic_path&amp; operator/=(const basic_path&amp; rhs);
- basic_path&amp; operator/=(const string_type&amp; s);
- basic_path&amp; operator/=(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path&amp; append(InputIterator first, InputIterator last);
-
- <span style="background-color: #FFFFFF">void swap( basic_path &amp; rhs );</span>
- basic_path&amp; remove_leaf();
-
- // observers
- const string_type string() const;
- const string_type file_string() const;
- const string_type directory_string() const;
-
- const external_string_type external_file_string() const;
- const external_string_type external_directory_string() const;
-
- string_type root_name() const;
- string_type root_directory() const;
- basic_path root_path() const;
- basic_path relative_path() const;
- string_type leaf() const;
- basic_path branch_path() const;
-
- bool empty() const;
- bool is_complete() const;
- bool has_root_name() const;
- bool has_root_directory() const;
- bool has_root_path() const;
- bool has_relative_path() const;
- bool has_leaf() const;
- bool has_branch_path() const;
-
- // iterators
- class iterator;
- typedef iterator const_iterator;
-
- iterator begin() const;
- iterator end() const;
-
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>basic_path</code> object stores a possibly empty path.
-The internal form of the stored path is unspecified.</p>
-<p><a name="pathname-resolution">Functions</a> described in this clause which access files or their attributes do so by
-resolving a <code>basic_path</code> object into a particular file in a file
-hierarchy. The pathname, suitably converted to the string type, format, and
-encoding
-required by the operating system, is resolved as if by the <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a> mechanism. The encoding of the resulting pathname is determined by the <code>Traits::to_external</code> conversion function.</p>
-<blockquote>
-<p>[<i>Note:</i> There is no guarantee that the path stored in a&nbsp; <code>basic_path</code>
-object is valid for a particular operating system or file system. <i>-- end note</i>]</p>
-</blockquote>
-<p>Some functions in this clause return <code>basic_path</code> objects for
-paths composed partly or wholly of pathnames obtained from the operating system.
-Such pathnames are suitably converted from the actual format and string
-type supplied by the operating system. The encoding of the resulting path is determined by the <code>Traits::to_internal</code> conversion function.</p>
-<p>For member functions described as returning &quot;<code>const string_type</code>&quot; or
-&quot;<code>const external_string_type</code>&quot;, implementations are permitted to return
-&quot;<code>const string_type&amp;</code>&quot; or&nbsp; &quot;<code>const external_string_type&amp;</code>&quot;
-respectively.</p>
-<blockquote>
-<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies.
-Return-by-value is specified as
-<code>const</code> to ensure programs won't break if moved to a return-by-reference
-implementation. <i>--
-end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-formats">Pathname formats</a></h4>
-<p>There are two formats for string or sequence arguments that describe a
-path:</p>
-<ul>
- <li>The portable pathname format as described in <a href="#Pathname-grammar">
- Pathname grammar</a> and by the <i>POSIX</i> <i>Filename,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions.<blockquote>
-<p>[<i>Note:</i> <span style="background-color: #FFFFFF">The <i>POSIX</i> format
-is the basis for the portable format because it is already an ISO standard, is
-the basis for the ubiquitous <i>URL</i> format, and is the native format or a
-subset of the native format for <i>UNIX</i>-like and <i>Windows</i>-like
-operating systems familiar to large numbers of programmers. </span></p>
-<p>Use of the portable format does not alone guarantee
-portability; filenames must also be portable.<span style="background-color: #FFFFFF">
-See Filename conversions. Each operating system
-always follows its own rules. Use of the portable format
-does not change that. </span> <i>-- end note</i>]</p>
- </blockquote>
- </li>
- <li>A native pathname format
- as defined by the operating system.<blockquote>
- <p>[<i>Note:</i> If an operating system supports only the <i>POSIX</i>
- pathname format, the portable format and the native format are the same. </p>
- <p><span style="background-color: #FFFFFF">Identifying user-provided paths
- as native format is a common need, and ensures maximum portability, even
- though not strictly needed except on systems where the native format
- is not implicitly recognized.</span></p>
- <p><span style="background-color: #FFFFFF">Programs using hard-coding native
- formats are likely to be non-portable.&nbsp; --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
- </li>
-</ul>
-<p><span style="background-color: #FFFFFF">All <code>basic_path</code> string or sequence arguments that describe a
-path shall accept the portable pathname format, and shall accept the native
-format if explicitly identified by a native format escape sequence prefix of
-<code>slash slash colon</code>.</span></p>
-<blockquote>
- <p><span style="background-color: #FFFFFF">[<i>Note:</i> <code>slash
- slash colon</code> was chosen as the escape sequence because a leading <code>
- slash slash</code>&nbsp; is already implementation-defined by POSIX, <code>
- colon</code> is prohibited in a Windows filename, and on any system a single
- <code>slash</code> can be used when a filename beginning with a <code>colon</code>
- is desired.&nbsp;These factors eliminate the chance of collision with a real
- filename. --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<p><span style="background-color: #FFFFFF">Implementations are encouraged to
-implicitly recognize the native pathname format if it can be lexically
-identified. An implementation </span>shall document whether or
-not the native pathname format is <span style="background-color: #FFFFFF">
-implicitly recognized</span>.</p>
-<blockquote>
-<p>[<i>Example:</i></p>
-<p><i>-- OpenVMS:</i> <code>&quot;SYS1::DISK1:[JANE.TYLER.HARRY]</code>&quot; is treated
-as a native pathname with a system name, drive name,&nbsp;and three directory
-filenames, rather than a portable pathname with one filename.</p>
-<p><i>-- Windows: </i><code>&quot;c:\\jane\\tyler\\harry&quot;</code> is treated as a
-native pathname with a drive letter, root-directory, and three filenames, rather
-than a portable pathname with one filename.</p>
-<p><i>-- Counter-example 1:</i> An operating system that allows slashes in
-filenames and uses dot as a directory separator. Distinguishing between portable
-and native format argument strings or sequences is not possible as there is no
-other distinguishing syntax. The implementation does not accept native format
-pathnames unless the <code>native</code> argument is present.</p>
-<p><i>-- Counter-example 2:</i> An operating system that allows slashes in
-filenames and uses some unusual character as a directory separator. The
-implementation does accept native format pathnames without the additional <code>
-native</code> argument, which only has to be used for native format arguments
-containing slashes in filenames.</p>
-<p><i>-- end example</i>]</p>
-<p>[<i>Note:</i> This <i><a name="duck-rule">duck-rule</a></i> (&quot;if it looks
-like a duck, walks like a duck, and quacks like a duck, it must be a duck&quot;)
-eliminates format confusion as a source of programmer error and support
-requests. <i>-- end note</i>]</p>
-</blockquote>
-<p>If both the portable and native formats are accepted, implementations shall
-document what characters or character sequences are used to distinguish between
-portable and native formats.</p>
-<blockquote>
-<p>[<i>Note:</i> <i>Windows</i> implementations are encouraged to define colons
-and backslashes as the characters which distinguish native from portable
-formats. <i>--end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-grammar">Pathname grammar</a></h4>
-<p>The grammar for the portable pathname format is as follows:</p>
-<blockquote>
-<p><i>pathname:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-name<sub>opt</sub>
-root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
-<p><i>root-name:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-implementation-defined</i></p>
-<p><i>root-directory:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-root-directory slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-implementation-defined</i></p>
-<p><i>relative-path:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-filename<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
-slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
-slash filename</i></p>
-<p><i>filename:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dot<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dot dot</i></p>
-<p><i>slash:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>
-slash&lt;Path&gt;::value</code></i></p>
-<p><i>dot:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>
-dot&lt;Path&gt;::value</code></i></p>
-</blockquote>
-<p>The grammar is aligned with the <i>POSIX </i>&nbsp;<i>Filename,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions. Any conflict between the grammar and <i>
-POSIX</i> is unintentional. This technical report defers to <i>POSIX</i>.</p>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>The form of the above wording was taken
-from POSIX, which uses it in several places to defer to the C standard.</i></span></p>
-<p>[<i>Note: Windows</i> implementations are encouraged to define <i>slash slash
-name</i> as a permissible <i>root-name</i>. <i>POSIX</i> permits, but does not
-require, implementations to do the same. <i>Windows</i> implementations are
-encouraged to define an additional <i>root-directory</i> element <i>
-root_directory name.</i> It is applicable only to the <i>slash slash name</i>
-form of <i>root-name.</i></p>
-<p> <i>Windows</i> implementations are encouraged to recognize a <i>name</i>
-followed by a colon as a native format <i>root-name</i>,
-and a backslash as a format element equivalent to <i>slash</i>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Filename-conversion">Filename conversion</a></h4>
-<p>When converting filenames to the native operating system format,
-implementations are encouraged, but not required, to convert otherwise invalid
-characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
-<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
-practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
-followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>The Boost implementation for
-Windows currently does not map invalid characters. Pending feedback from the LWG,
-Boost may settle on % hex hex as the preferred escape sequence. If so, should
-there be normative encouragement?</i></span></p>
-</blockquote>
-<h4><a name="basic_path-requirements">Requirements</a></h4>
-<p>The argument for the template parameter named <code>String</code> shall be a
-class that includes members with the same names, types, values, and semantics as
-class template <code>basic_string</code>.</p>
-<p>The argument for the template parameter named <code>Traits</code> shall be a
-class that satisfies the requirements specified in the
-Path Behavior Traits Requirements
-table.</p>
-<p>The argument for template parameters named <code>InputIterator</code> shall satisfy the
-requirements of an input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]) and shall have a value type convertible to
-<code>basic_path::value_type</code>. </p>
-<p>Some function templates with a template
-parameter named <code>InputIterator</code> also have non-template overloads. Implementations shall
-only select the function template overload if the type named by <code>InputIterator</code>
-is not <code>path_format_t</code>.</p>
-<blockquote>
-<p>[<i>Note:</i> This &quot;do-the-right-thing&quot; rule ensures that the
-overload expected by the user is selected. The implementation technique is unspecified -
-implementations may use
-enable_if or
-other techniques to achieve the effect. <i>-- end note</i>]</p>
-</blockquote>
-<h4> <a name="basic_path-constructors"> <code>basic_path</code> constructors</a></h4>
-<pre>basic_path();</pre>
-<blockquote>
- <p><i>Postconditions:</i> <code>empty()</code>.</p>
- </blockquote>
-<pre>basic_path(const string_type&amp; s);
-basic_path(const value_type * s);
-template &lt;class InputIterator&gt;
- basic_path(InputIterator s, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
-</blockquote>
-<h4> <a name="basic_path-assignments"> <code>basic_path</code> assignments</a></h4>
-<pre>basic_path&amp; operator=(const string_type&amp; s);
-basic_path&amp; operator=(const value_type* s);
-template &lt;class InputIterator&gt;
- basic_path&amp; assign(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<h4> <a name="basic_path-modifiers"> <code>basic_path</code> modifiers</a></h4>
-<pre>basic_path&amp; operator/=(const basic_path&amp; rhs);</pre>
-<blockquote>
- <p><i>Effects:</i> The path stored in <code>rhs</code> is appended to the
- stored path.</p>
- <p><i>Returns:</i> <code>*this</code></p>
-</blockquote>
-<pre>basic_path&amp; operator/=(const string_type&amp; s);
-basic_path&amp; operator/=(const value_type* s);
-template &lt;class InputIterator&gt;
-basic_path&amp; append(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
-<p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are appended to the stored path.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<pre><code><span style="background-color: #FFFFFF">void swap( basic_path &amp; rhs );</span></code></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- Swaps the contents of the two paths.</span></p>
- <p><i><span style="background-color: #FFFFFF">Throws: </span></i>
- <span style="background-color: #FFFFFF">nothing.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i><span style="background-color: #FFFFFF">
- </span><code><span style="background-color: #FFFFFF">this-&gt;string()</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were in </span><code>
- <span style="background-color: #FFFFFF">rhs</span></code><span style="background-color: #FFFFFF">,
- </span><code><span style="background-color: #FFFFFF">rhs</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were is </span><code>
- <span style="background-color: #FFFFFF">this-&gt;string()</span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Complexity: </span></i>
- <span style="background-color: #FFFFFF">constant time.</span></p>
-</blockquote>
-<pre>basic_path&amp; remove_leaf();</pre>
-<blockquote>
- <p><i>Effects:</i> If <code>has_branch_path()</code> then remove the last <i>filename</i> from the stored path. If that leaves
- the stored path with one or more trailing <i>slash</i> elements not
- representing&nbsp; <i>root-directory</i>, remove them.</p>
- <p><i>Returns:</i> <code>*this</code></p>
- <p>[<i>Note:</i> This function is needed to efficiently implement <code>
- basic_directory_iterator</code>. It is made public to allow additional uses. <i>-- end
- note</i>]</p>
-</blockquote>
-<h4> <a name="basic_path-observers"> <code>basic_path</code> observers</a></h4>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>See the
-Path decomposition table for examples
-for values returned by decomposition functions.</i></span></p>
-</blockquote>
-<pre>const string_type string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-Pathname grammar rules.</p>
-</blockquote>
-<pre>const string_type file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-Filename conversion applied.</p>
-<p>[<i>Note:</i> For some operating systems, including <i>POSIX</i> and <i>
-Windows</i>, the native format for regular file pathnames and directory
-pathnames is the same, so <code>file_string()</code> and <code>directory_string()</code>
-return the same string. On OpenMVS, however, the expression <code>path(&quot;/cats/jane&quot;).file_string()</code>
-would return the string <code>&quot;[CATS]JANE&quot;</code> while <code>path(&quot;/cats/jane&quot;).directory_string()</code>
-would return the string <code>&quot;[CATS.JANE]&quot;</code>. <i>-- end note</i>]</p>
-</blockquote>
-<pre>const string_type directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-Filename conversion applied.</p>
-</blockquote>
-<pre>const external_string_type external_file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-Filename conversion applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>const external_string_type external_directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-Filename conversion applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>string_type root_name() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-name,</i> if the stored path includes <i>
-root-name</i>, otherwise <code>string_type()</code>. </p>
-</blockquote>
-<pre>string_type root_directory() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-directory</i>, if the stored path includes <i>
-root-directory</i>, otherwise <code>string_type()</code>.</p>
-<p>If <i>root-directory</i> is composed <i>slash name</i>, <i>slash</i> is
-excluded from the returned string.</p>
-</blockquote>
-<pre>basic_path root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>root_name() / root_directory()</code></p>
-</blockquote>
-<pre>basic_path relative_path() const;</pre>
-<blockquote>
-<p><i>Returns:</i> A <code>basic_path</code> composed from the the stored path, if any, beginning
-with the first <i>filename</i> after <i>root-path</i>.
-Otherwise, an empty <code>basic_path</code>.</p>
-</blockquote>
-<pre>string_type leaf() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>empty() ? string_type() : *--end()</code></p>
-</blockquote>
-<pre>basic_path branch_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>(string().empty() || begin() == --end()) ? path_type(&quot;&quot;) :
- <i>br</i></code>, where <code><i>br</i></code> is constructed as if by
- starting with an empty <code>basic_path</code> and successively applying <code>
- operator/=</code> for each element in the range <code>begin()</code>, <code>
- --end()</code>.</p>
-</blockquote>
-<pre>bool empty() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>string().empty()</code>.</p>
-</blockquote>
-<pre>bool is_complete() const;</pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>true</code>,
- if the elements of root_path() uniquely identify a directory, else <code>false</code>.</span></p>
-</blockquote>
-<pre>bool has_root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_path().empty()</code></p>
-</blockquote>
-<pre>bool has_root_name() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_name().empty()</code></p>
-</blockquote>
-<pre>bool has_root_directory() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_directory().empty()</code></p>
-</blockquote>
-<pre>bool has_relative_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!relative_path().empty()</code></p>
-</blockquote>
-<pre>bool has_leaf() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!leaf().empty()</code></p>
-</blockquote>
-<pre>bool has_branch_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!branch_path().empty()</code></p>
-</blockquote>
-<h4> <a name="basic_path-iterators"> <code>basic_path</code> iterators</a></h4>
-<p> A <code>basic_path::iterator</code> is a constant iterator satisfying all
-the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional
-iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is
-<code>string_type</code>.</p>
- <p>Calling any non-const member function of a <code>basic_path</code> object
- invalidates all iterators referring to elements of the object.</p>
-<p> The forward traversal order is as follows:</p>
-<ul>
- <li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
- <li>Each successive <i>filename</i> element, if present.</li>
- <li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
- characters are present.</li>
-</ul>
- <p>The backward traversal order is the reverse of forward traversal.</p>
- <pre>iterator begin() const;</pre>
-<blockquote>
- <p><i>Returns:</i> An iterator for the first present element in the traversal
- list above. If no elements are present, the end iterator.</p>
-</blockquote>
-<pre>iterator end() const;</pre>
-<blockquote>
- <p><i>Returns:</i> The end iterator.</p>
-</blockquote>
-<h4> <a name="basic_path-non-member-functions">
-<span style="background-color: #FFFFFF">basic_path non-member functions</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template&lt;class String, class Traits&gt;
-void swap( basic_path&lt;String, Traits&gt; &amp; lhs, basic_path&lt;String, Traits&gt; &amp; rhs )</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects: </span></i><code>
- <span style="background-color: #FFFFFF">lhs.swap(
- rhs )</span></code></p>
-</blockquote>
- <h4><span style="background-color: #FFFFFF">basic_path non-member operators</span></h4>
- <p><span style="background-color: #FFFFFF">There are seven basic_path non-member operators (/,
- </span> <code><span style="background-color: #FFFFFF">==</span></code><span style="background-color: #FFFFFF">,
- </span> <code>
- <span style="background-color: #FFFFFF">!=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&lt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&lt;=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;=</span></code><span style="background-color: #FFFFFF">),
- each with five overloads. For brevity, the specifications are given in tabular
- form. Each of the resulting thirty-five signatures is a template, with
- template parameter list template</span><code><span style="background-color: #FFFFFF">&lt;class
- String, class Traits&gt;</span></code><span style="background-color: #FFFFFF">.
- The format of such arguments is described in </span> <a href="#Pathname-formats">
- <span style="background-color: #FFFFFF">Pathname formats</span></a><span style="background-color: #FFFFFF">.</span></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="100%">
- <p align="center"><i><b><span style="background-color: #FFFFFF">Argument type overloads</span></b></i></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>
- basic_path&lt;String, Traits&gt;&amp; a, basic_path&lt;String, Traits&gt;&amp;
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path&lt;String, Traits&gt;::string_type&amp; a,
- basic_path&lt;String, Traits&gt;&amp; b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path&lt;String, Traits&gt;::string_type::value_type* a,
- basic_path&lt;String, Traits&gt;&amp; b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path&lt;String, Traits&gt;&amp; a, typename basic_path&lt;String, Traits&gt;::string_type&amp;
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path&lt;String, Traits&gt;&amp; a, typename
- basic_path&lt;String, Traits&gt;::string_type::value_type* b</code></span></td>
- </tr>
- </table>
- <p><span style="background-color: #FFFFFF">In the </span><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators </span>
- </i></b><span style="background-color: #FFFFFF">table, </span><code>
- <span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- and </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- are of the types given in the </span><i><b>
- <span style="background-color: #FFFFFF">Argument type overloads</span></b></i><span style="background-color: #FFFFFF">
- table. If </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- is of type </span><code><span style="background-color: #FFFFFF">const
- basic_path&lt;String, Traits&gt;&amp;</span></code><span style="background-color: #FFFFFF">,
- then </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively is </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively. Otherwise </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively represent named or unnamed temporary </span><code>
- <span style="background-color: #FFFFFF">basic_path&lt;String, Traits&gt;</span></code><span style="background-color: #FFFFFF">
- objects constructed from </span><code><span style="background-color: #FFFFFF">
- a</span></code><span style="background-color: #FFFFFF"> or </span><code>
- <span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively.</span></p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="280">
- <tr>
- <td width="100%" colspan="3" align="center" height="19"><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators</span></i></b></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Expression</span></b></i></td>
- <td width="25%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Return type</span></b></i></td>
- <td width="55%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Semantics</span></b></i></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">a / b</span></code></td>
- <td width="25%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">basic_path&lt;String, Traits&gt;</span></code></td>
- <td width="55%" height="30"><code><span style="background-color: #FFFFFF">
- basic_path&lt;String, Traits&gt; tmp(a);<br>
- return a /= </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &lt; b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return lexicographical_compare(</span></code><span style="background-color: #FFFFFF"><i><b>a</b></i></span><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">a</span></b></i><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.end(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.end());</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a == b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">)
- &amp;&amp; !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a != b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- == </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &gt; b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &lt;= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &gt;= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
-</table>
- <blockquote>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- </span> <a name="Path-equality"><span style="background-color: #FFFFFF">Path equality</span></a><span style="background-color: #FFFFFF"> and path
- equivalence have different semantics.</span></p>
- <p><span style="background-color: #FFFFFF">Equality is determined by </span> <i>
- <span style="background-color: #FFFFFF">basic_path</span></i><span style="background-color: #FFFFFF">'s
- non-member </span> <code><a href="#operator-eq">
- <span style="background-color: #FFFFFF">operator==</span></a></code><span style="background-color: #FFFFFF">, which considers the two path's lexical representations
- only. Paths &quot;abc&quot; and &quot;ABC&quot; are never equal.</span></p>
- <p><span style="background-color: #FFFFFF">Equivalence is determined by the
- </span> equivalent()<span style="background-color: #FFFFFF">
- non-member function, which determines if two paths </span>
- resolve<span style="background-color: #FFFFFF"> to the same file system entity.
- Paths &quot;abc&quot;
- and &quot;ABC&quot; may or may not resolve to the same file, depending on the file
- system.</span></p>
- <p><span style="background-color: #FFFFFF">Programmers wishing to determine if two paths are &quot;the same&quot; must decide if
- &quot;the same&quot; means &quot;the same representation&quot; or &quot;resolve to the same actual
- file&quot;, and choose the appropriate function accordingly. </span> <i>
- <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
-</blockquote>
- <h4><a name="basic_path-inserter-extractor"> <code>
- <span style="background-color: #FFFFFF">basic_path</span></code><span style="background-color: #FFFFFF"> inserter
- and extractor</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template&lt;class Path&gt;
- basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&gt;&gt;(basic_istream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; is,
- Path&amp; ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:&nbsp; </span></i>
- <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- is &gt;&gt; str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- ph = str;</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template&lt;class Path&gt;
- basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&lt;&lt;(basic_ostream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; os,
- const Path&amp; ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">&nbsp;
- </span> <code><span style="background-color: #FFFFFF">os &lt;&lt; ph.string()</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">os</span></code></p>
-</blockquote>
-<h3><u><a name="Class-filesystem_error"><span style="background-color: #FFFFFF">
-Class </span><code><span style="background-color: #FFFFFF">filesystem_error</span></code></a></u></h3>
-<pre><span style="background-color: #FFFFFF">namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- class filesystem_error : public std::runtime_error
- {
- public:
- explicit filesystem_error(const std::string &amp; what_arg, system_error_type ec=0);
- system_error_type system_error() const;
- };
- } // namespace sys
- } // namespace tr2
-} // namespace std</span></pre>
-<p><span style="background-color: #FFFFFF">The class <code>filesystem_error</code> defines the
-base type of
-objects thrown as exceptions to report file system errors from functions described in this
-clause.</span></p>
-<blockquote>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- A non-template base class allows users who are uninterested in path specifics
- to catch a single exception type. </span> <i>
- <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">explicit filesystem_error(const std::string &amp; what_arg, system_error_type ec=0);</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Postcondition:</i> <code>
- strcmp(what(), <i>what_arg</i>.c_str()) == 0 &amp;&amp; system_error() == <i>ec</i></code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">system_error_type system_error() const;</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns: <code>ec</code></i></span></p>
-</blockquote>
-<h3><a name="Class-template-basic_filesystem_error">Class template <code>basic_filesystem_error</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class Path&gt; class basic_filesystem_error : public <u><span style="background-color: #FFFFFF">filesystem</span>_error</u>
- {
- public:
- typedef Path path_type;
-
- explicit basic_filesystem_error(const std::string&amp; <u><span style="background-color: #FFFFFF">what_arg</span></u>, system_error_type ec=0);
- basic_filesystem_error(const std::string&amp; <u><span style="background-color: #FFFFFF">what_arg</span></u>, const path_type&amp; p1, system_error_type ec);
- basic_filesystem_error(const std::string&amp; <u><span style="background-color: #FFFFFF">what_arg</span></u>, const path_type&amp; p1, const path_type&amp; p2, system_error_type ec);
-
- const path_type&amp; path1() const;
- const path_type&amp; path2() const;
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
-objects thrown as exceptions to report file system errors from functions described in this
-clause.</p>
-<h4> <a name="basic_filesystem_error-constructors"> <code>basic_filesystem_error</code> constructors</a></h4>
-<pre>explicit basic_filesystem_error(const std::string&amp; <u><span style="background-color: #FFFFFF">what_arg</span></u>, system_error_type ec=0);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%" bgcolor="#FFFFFF"><code>
- <span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%" bgcolor="#FFFFFF"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, system_error_type ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code><span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, const path_type&amp; p2, system_error_type ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code><span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <u>
- <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p2</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_filesystem_error-observers"> <code>basic_filesystem_error</code> observers</a></h4>
-<pre>const path_type&amp; path1() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p1</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<pre>const path_type&amp; path2() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p2</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_entry">Class template <code>basic_directory_entry</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class Path&gt; class basic_directory_entry
- {
- public:
- typedef Path path_type;
- typedef typename Path::string_type string_type;
-
- // constructors
- basic_directory_entry();
- explicit basic_directory_entry(const path_type&amp; p,
- <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // modifiers
- void assign(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
- void replace_leaf(const string_type&amp; s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // observers
- const Path&amp; path() const;
- operator const Path&amp;() const;
-<span style="background-color: #FFFFFF">
- file_status status() const;
- file_status status(system_error_code&amp; ec) const;
- file_status symlink_status() const;
- file_status symlink_status(system_error_code&amp; ec) const;
-</span><span style="background-color: #FFFF00">
-</span> // comparisons
- bool operator&lt;(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator==(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator!=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&gt;(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&lt;=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&gt;=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
-
- private:
- path_type m_path; // for exposition only
- mutable <span style="background-color: #FFFFFF">file_status</span> m_status; // for exposition only; stat()-like
- mutable <span style="background-color: #FFFFFF">file_status</span> m_symlink_status; // for exposition only; lstat()-like
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>basic_directory_entry</code> object stores a <code>basic_path object</code>,
-a <code>file_status</code> object for non-symbolic link status, and a <code>
-file_status</code> object for symbolic link status. The <code>file_status</code>
-objects act as value caches.</p>
-<blockquote>
-<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
-some operating systems provide status information as a byproduct of directory
-iteration. Caching such status information can result is significant time savings. Cached and
-non-cached results may differ in the presence of race conditions. <i>-- end note</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over
-a directory with 15,047 entries was six seconds for non-cached status queries
-versus one second for cached status queries. Windows XP, 3.0 GHz processor, with
-a moderately fast hard-drive. Similar speedup expected on Linux and BSD-derived
-Unix variants that provide status during directory iteration.</i></span></p>
-</blockquote>
-<h4> <a name="basic_directory_entry-constructors"> <code>basic_directory_entry </code>constructors</a></h4>
-<pre>basic_directory_entry();</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>explicit basic_directory_entry(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-modifiers"> <code>basic_directory_entry </code>modifiers</a></h4>
-<pre>void assign(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>void replace_leaf(const string_type&amp; s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="43%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>path().branch() / s</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-observers"> <code>basic_directory_entry</code> observers</a></h4>
-<pre>const Path&amp; path() const;
-operator const Path&amp;() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>m_path</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) &amp;&amp; !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path); }
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status(system_error_code&amp; ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) &amp;&amp; !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path, ec); }
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path);
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>symlink_status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>
- m_symlink_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status(system_error_code&amp; ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path, ec);
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_symlink_status</code></span></p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_iterator">Class template <code>basic_directory_iterator</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class Path&gt;
- class basic_directory_iterator :
- public iterator&lt;input_iterator_tag, basic_directory_entry&lt;Path&gt; &gt;
- {
- public:
- typedef Path path_type;
-
- // constructors
- basic_directory_iterator();
- explicit basic_directory_iterator(const Path&amp; dp);
- basic_directory_iterator(const Path&amp; dp, system_error_type&amp; ec);
- basic_directory_iterator(const basic_directory_iterator&amp; bdi);
- basic_directory_iterator&amp; operator=(const basic_directory_iterator&amp; bdi);
- ~basic_directory_iterator();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p> <code>basic_directory_iterator</code> satisfies the requirements of an
-input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]).</p>
-<p>A <code>basic_directory_iterator</code> reads successive elements from the directory for
-which it was constructed, as if by calling <i>POSIX</i>
-<code>
-readdir_r()</code>. After a <code>basic_directory_iterator</code> is constructed, and every time
-<code>operator++</code> is called,
-it reads and stores a value of <code>basic_directory_entry&lt;Path&gt;</code>
-and possibly stores associated status values.
-<code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that
-<code>++i == ++j</code>. </p>
-<blockquote>
-<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators
-can be used only for single-pass algorithms. <i>--end note</i>]</p>
-</blockquote>
-<p>If the end of the directory elements is reached, the iterator becomes equal to
-the end iterator value. The constructor <code>basic_directory_iterator()</code>
-with no arguments always constructs an end iterator object, which is the only
-legitimate iterator to be used for the end condition. The result of <code>
-operator*</code> on an end iterator is not defined. For any other iterator value
-a <code>const basic_directory_entry&lt;Path&gt;&amp;</code> is returned. The result of
-<code>operator-&gt;</code> on an end iterator is not defined. For any other
-iterator value a <code>const basic_directory_entry&lt;Path&gt;*</code> is
-returned. </p>
-<p>Two end iterators are always equal. An end iterator is not equal to a non-end
-iterator.</p>
-<blockquote>
-<p><i><span style="background-color: #E0E0E0">The above wording is based on the
-Standard Library's istream_iterator wording. Commentary was shortened and
-moved into a note.</span></i></p>
-</blockquote>
-<p>The result of calling the <code>path()</code> member of the <code>
-basic_directory_entry</code> object obtained by dereferencing a <code>
-basic_directory_iterator</code> is a reference to a <code>basic_path</code>
-object composed of the directory argument from which the iterator was
-constructed with filename of the directory entry appended as if by <code>
-operator/=</code>. </p>
-<blockquote>
-<p>[<i><a name="Example-program">Example</a>: </i>This program accepts an
-optional command line argument, and if that argument is a directory pathname,
-iterates over the contents of the directory. For each directory entry, the name
-is output, and if the entry is for a regular file, the size of the file is
-output.</p>
- <blockquote>
- <pre>#include &lt;iostream&gt;
-#include &lt;filesystem&gt;
-
-using std::tr2::sys;
-using std::cout;
-
-int main(int argc, char* argv[])
-{
- std::string p(argc &lt;= 1 ? &quot;.&quot; : argv[1]);
-
- if (is_directory(p))
- {
- for (directory_iterator itr(p); itr!=directory_iterator(); ++itr)
- {
- cout &lt;&lt; itr-&gt;path().leaf() &lt;&lt; ' '; // display filename only
- if (is_regular(itr-&gt;status())) cout &lt;&lt; &quot; [&quot; &lt;&lt; file_size(itr-&gt;path()) &lt;&lt; ']';
- cout &lt;&lt; '\n';
- }
- }
- else cout &lt;&lt; (exists(p) : &quot;Found: &quot; : &quot;Not found: &quot;) &lt;&lt; p &lt;&lt; '\n';
-
- return 0;
-}</pre>
- </blockquote>
- <p><i>-- end example</i>]</p>
-</blockquote>
-<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>)
-and parent (<i>dot dot</i>) directories.</p>
-<p>The order of directory entries obtained by dereferencing successive
-increments of a <code>basic_directory_iterator</code> is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> Programs performing directory iteration may wish to test if the
-path obtained by dereferencing a directory iterator actually exists. It could be
-a
-symbolic link to a non-existent file. Programs recursively
-walking directory trees for purposes of removing and renaming entries may wish
-to avoid following symbolic links.</p>
-<p>If a file is removed from or added to a directory after the
-construction of a <code>basic_directory_iterator</code> for the directory, it is
-unspecified whether or not subsequent incrementing of the iterator will ever
-result in an iterator whose value is the removed or added directory entry. See
-<i>POSIX</i>
-<code>
-readdir_r()</code>. <i>
---end note</i>]</p>
-</blockquote>
-<h4><a name="basic_directory_iterator-constructors"><code>basic_directory_iterator</code> constructors</a></h4>
-
-<p><code>basic_directory_iterator();</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs the end iterator.</p>
-
-</blockquote>
-
-<p><code>explicit basic_directory_iterator(const Path&amp; dp);</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.</p>
-
-<p>[<i>Note:</i> To iterate over the current directory, write <code>
-directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre><code>basic_directory_iterator(const Path&amp; dp, system_error_type&amp; ec );</code></pre>
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.
-If an error occurs while establishing the results, the iterator constructed
-represents the end iterator and <code>ec</code> is set to the error code
-reported by the operating system, otherwise to 0.</p>
-
-</blockquote>
-<h3><a name="Class-template-basic_recursive_directory_iterator">Class template <code>basic_recursive_directory_iterator</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template &lt;class Path&gt;
- class basic_recursive_directory_iterator :
- public iterator&lt;input_iterator_tag, basic_directory_entry&lt;Path&gt; &gt;
- {
- public:
- typedef Path path_type;
-
- // constructors
- basic_recursive_directory_iterator();
- explicit basic_recursive_directory_iterator(const Path&amp; dp);
- basic_recursive_directory_iterator(const basic_recursive_directory_iterator&amp; brdi);
- basic_recursive_directory_iterator&amp; operator=(const basic_recursive_directory_iterator&amp; brdi);
- ~basic_recursive_directory_iterator();
-
- // observers
- int level() const;
-
- // modifiers
- void pop();
- void no_push();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
-
- private:
- int m_level; // for exposition only
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>The behavior of a <code>basic_recursive_directory_iterator</code> is the same
-as a <code>basic_directory_iterator</code> unless otherwise specified.</p>
-<ul>
- <li>When an iterator is constructed, <code>m_level</code> is set to 0;</li>
- <li>When an iterator <code>it</code> is incremented, if <code>it-&gt;is_directory()</code>
- is true and <code>no_push()</code> had not been called subsequent to
- the most recent increment operation (or construction, if no increment has
- occurred), then&nbsp; <code>m_level</code> is incremented, the
- directory is visited, and its contents recursively iterated over.</li>
- <li>When an iterator reaches the end of the directory currently being iterated
- over, or when <code>pop()</code> is called, <code>m_level</code> is
- decremented, and iteration continues with the parent directory, until the
- directory specified in the constructor argument is reached.</li>
- <li><code>level()</code> returns <code>m_level</code>.</li>
- <li><code>level()</code>, <code>pop()</code>, and <code>no_push()</code> all
- require that the iterator not be the end iterator.</li>
-</ul>
-<blockquote>
- <p>[<i>Note:</i> One of the uses of <code>no_push()</code> is to prevent
- unwanted recursion into symlinked directories. This may be necessary to
- prevent loops on some operating systems. <i>--end note</i>]</p>
-</blockquote>
-<h3><a name="file_status">Class file_status</a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- class file_status
- {
- public:
- explicit file_status( file_type v = status_unknown );
-
- file_type type() const;
- void type( file_type v );
- };
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>file_status</code> object stores information about the status of a
-file. The internal form of the stored information is unspecified.</p>
-<blockquote>
- <p><i>[Note: </i>The class may be extended in the future to store
- additional status information. <i>--end note]</i></p>
-</blockquote>
-<h4>Members</h4>
-<pre>explicit file_status( file_type v = status_unknown );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>.</p>
-</blockquote>
-<pre>file_type type() const;</pre>
-<blockquote>
- <p><i>Returns: </i>The stored <code>file_type</code>.</p>
-</blockquote>
-<pre>void type( file_type v );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>, replacing the previously stored
- value.</p>
-</blockquote>
-<h3><a name="Non-member-functions">Non-member operational functions</a></h3>
-<h4><a name="Status-functions">Status functions</a></h4>
-<pre>template &lt;class Path&gt; file_status status(const Path&amp; p, system_error_code&amp; ec);
-template &lt;class Path&gt; file_status symlink_status(const Path&amp; p, system_error_code&amp; ec);</pre>
-<blockquote>
- <p><i>Returns:</i></p>
- <blockquote>
- For <code>status,</code> determine the attributes
- of
- <code>p</code> as if by<i> POSIX </i> <code>
- stat()</code>,
- for <code>symlink_status</code> determine the attributes as if by <i>POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">
- lstat()</a></code>.<blockquote>
- <p>[<i>Note:</i> For symbolic links, <code>stat()</code> continues
- pathname resolution using the contents of the symbolic link, <code>lstat()</code>
- does not. <i>--
- end note</i>]</p>
- </blockquote>
- <p>If the operating system reports an error during attribute determination:</p>
- <ul>
- <li>If the error indicating that <code>p</code> could not
- be resolved, as if by POSIX error codes ENOENT or ENOTDIR, set ec to 0 and return <code>
- file_status(not_found_flag)</code>.</li>
- </ul>
- <ul>
- <li>Otherwise, set ec to the error code reported by the operating system
- and return <code>
- file_status(status_unknown)</code>.</li>
- </ul>
- Otherwise:<ul>
- <li>If the attributes indicate a regular file, as if by <i>POSIX</i>&nbsp;S_ISREG(),
- return <code>
- file_status(regular_file)</code>.</li>
- <li>Else if the attributes indicate a directory, as if by <i>POSIX</i> S_ISDIR(),
- return <code>
- file_status(directory_file)</code>.</li>
- <li>Else if the attributes indicate a symbolic link, as if by <i>POSIX</i> S_ISLNK(),
- return <code>
- file_status(symlink_file)</code>. <i>[Note: </i>Only possible for <code>
- symlink_status</code>. <i>--end note]</i></li>
- <li>Else if the attributes indicate a block special file, as if by <i>POSIX</i> S_ISBLK(),
- return <code>
- file_status(block_file)</code>.</li>
- <li>Else if the attributes indicate a character special file, as if by <i>POSIX</i> S_ISCHR(),
- return <code>
- file_status(character_file)</code>.</li>
- <li>Else if the attributes indicate a fifo or pipe file, as if by <i>POSIX</i> S_ISFIFO(),
- return <code>
- file_status(fifo_file)</code>.</li>
- <li>Else if the attributes indicate a socket, as if by <i>POSIX</i> S_ISSOCK(),
- return <code>
- file_status(socket_file)</code>.</li>
- <li>Else return <code>
- file_status(type_unknown)</code>.</li>
- </ul>
- </blockquote>
-<p>[<i>Note:</i> <code>directory_file</code> implies <code>
-basic_directory_iterator</code> on the file would succeed, and <code>
-regular_file</code> implies appropriate <code>&lt;fstream&gt;</code> operations would succeed,
-assuming no hardware, permission, access, or race
-condition errors. For <code>regular_file,</code> the converse is not true; lack of
-<code>regular_file</code> does not necessarily imply <code>&lt;fstream&gt;</code> operations would
-fail on a directory.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; file_status status(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <code>file_status stat(status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>ec
- != 0</code></p>
- <p><i>Returns:</i> <code>stat</code></p>
-</blockquote>
-<pre>template &lt;class Path&gt; file_status symlink_status(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <code>file_status stat(symlink_status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>ec
- != 0</code></p>
- <p><i>Returns: </i><code>stat</code></p>
-</blockquote>
-<h4><a name="Predicate-functions">Predicate functions</a></h4>
-<pre><span style="background-color: #FFFFFF">bool status_known(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() != status_unknown</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><a name="exists"><span style="background-color: #FFFFFF">exists</span></a><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></span></p>
-</blockquote>
-<pre>template &lt;class Path&gt; bool <a name="exists">exists</a>(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> <code>exists( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_regular</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() == regular_file</code></span></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_regular(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_regular( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_directory</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == directory_file</span></code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_directory(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_directory( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_symlink</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == symlink_file</span></code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_symlink(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_symlink( symlink_status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_other</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>return exists(s) &amp;&amp; !is_regular(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></span></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_other(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_other( status(p) )</code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool <span style="background-color: #FFFFFF; text-decoration:underline">is_</span>empty(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>
- status(p)</code>.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>!exist(s) ||
- is_other(s)</code>.</p>
- <p><i>Returns:</i> <code>is_directory(s)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?
- basic_directory_iterator&lt;Path&gt;(p) == basic_directory_iterator&lt;Path&gt;()<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : file_size(p) == 0;</code></p>
-</blockquote>
-<pre><code>template &lt;class Path1, class Path2&gt; bool <a name="equivalent">equivalent</a>(const Path1&amp; p1, const Path2&amp; p2);</code></pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>,
- as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
- respectively.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path1&gt;</code><span style="background-color: #FFFFFF"> </span>
- if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp;
- is_other(s2))</code>.</p>
- <p><i>Returns:</i> <code>true</code>, if <code>sf1 == sf2</code> and <code>p1</code> and <code>p2</code>
- resolve to the same file system entity, else <code>false</code>.</p>
- <p>Two paths are considered to resolve to
- the same file system entity if two candidate entities reside on the same
- device at the same location. This is determined as if by the values of the <i>POSIX</i> <code>
- stat</code>
- structure<code>,</code> obtained as if by <code>
- stat()</code> for the two paths, having equal
- <code>st_dev</code> values and equal <code>st_ino</code> values.</p>
- <p>[<i>Note:</i> <i>POSIX</i> requires that <i>&quot;st_dev</i> must be unique
- within a Local Area Network&quot;. Conservative <i>POSIX</i> implementations may
- also wish to check for equal <code>st_size</code> and <code>st_mtime</code>
- values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>
- stat()</code>, and consider &quot;same&quot; to be equal values for <code>
- dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>
- nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>,
- <code>ftLastWriteTime.dwLowDateTime</code>, and <code>
- ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Attribute-functions">Attribute functions</a></h4>
-<p>[<i>Note:</i> A strictly limited number of attribute functions are provided
-because few file system attributes are portable. Even the functions provided will be impossible to implement on some file
-systems. <i>--end note</i>.]</p>
-<pre>template &lt;class Path&gt; const Path&amp; <a name="initial_path">initial_path</a>();</pre>
-<blockquote>
- <p><i>Returns:</i> <code>current_path()</code> at the time of entry to <code>
- main()</code>.</p>
- <p>[<i>Note:</i> These semantics turn a dangerous global variable into a safer
- global constant. <i>--end note</i>]</p>
- <p>[<i>Note:</i> Full implementation requires runtime library support.
- Implementations which cannot provide runtime library support are encouraged to
- instead store the value of <code>current_path()</code> at the first call of
- <a name="initial_path"><code>initial_path</code></a><code>()</code>, and
- return this value for all subsequent calls. Programs using
- <a name="initial_path"><code>initial_path</code></a><code>()</code> are
- encouraged to call it immediately on entrance to <code>main()</code> so that
- they will work correctly with such partial implementations. <i>--end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path current_path();</pre>
-<blockquote>
- <p><i>Returns:</i> The current path, as if by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">
- <code>getcwd()</code></a>.</p>
- <p><i>Postcondition:</i> <code>current_path().is_complete()</code></p>
- <p>[<i>Note:</i> The current path as returned by many operating systems is a
- dangerous global variable. It may be changed unexpectedly by a third-party or
- system library functions, or by another thread. Although dangerous, the
- function is useful in dealing with other libraries.. For a safer alternative,
- see <code>initial_path()</code>. The <code>
- current_path()</code> name was chosen to emphasize that the return is a
- complete path, not just a single directory name. <i>-- </i><i>end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> The size
- <span style="background-color: #FFFFFF; ">in bytes</span>
- of the file <code>p</code> resolves to, determined as if by the value of
- the <i>POSIX</i> <code>
- stat</code> structure member <code>st_size</code>
- obtained as if by <i>POSIX</i> <code>
- stat()</code>.</p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF"><a name="space">template</a> &lt;class Path&gt; space_info space(const Path&amp; p);</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> A <code>space_info</code>
- object. The value of the <code>space_info</code> object is determined as if by
- using </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF"> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">
- statvfs()</a></code> to obtain a <i>POSIX</i> struct <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">
- statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>
- f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code>
- member, and assigning the results to the <code>capacity</code>, <code>free</code>,
- and <code>available</code> members respectively. Any members for which the
- value cannot be determined shall be set to -1.</span></p>
-</blockquote>
-<pre>template &lt;class Path&gt; std::time_t last_write_time(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the
- value of the <i>POSIX</i> <code>
- stat</code> structure member <code>st_mtime</code>&nbsp; obtained
- as if by <i>POSIX</i> <code>
- stat()</code>.</p>
-</blockquote>
-<pre>template &lt;class Path&gt; void last_write_time(const Path&amp; p, const std::time_t new_time);</pre>
-<blockquote>
- <p><i>Effects:</i> Sets the time of last data modification of the file
- resolved to by <code>p</code>
- to <code>new_time</code>, as if by <i>POSIX</i> <code>
- stat()</code>
- followed by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html">
- <code>utime()</code></a>.</p>
- <p>[<i>Note:</i> The apparent postcondition <code>last_write_time(p) ==
- new_time</code> is not specified since it would not hold for many file systems
- due to coarse time mechanism granularity. <i>-- end note</i>]</p>
-</blockquote>
-<h4>Other o<a name="Operations-functions">perations functions</a></h4>
-<pre>template &lt;class Path&gt; bool create_directory(const Path&amp; dp);</pre>
-<blockquote>
- <p><i>Effects:</i> Attempts to create the directory <code>dp</code> resolves to,
- as if by<i> POSIX </i><code>
- mkdir()</code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. </p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <i>
- Effects</i> fails for any reason other than because the directory already exists.</p>
- <p><i>Returns:</i> True if a new directory was created, otherwise false.</p>
- <p><i>Postcondition:</i> <code>is_directory(dp)</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- system_error_type create_hard_link(const Path1&amp; to_p, const Path2&amp; from_p, system_error_code&amp; ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- <span style="background-color: #FFFFFF">link()</span></a></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i></p>
- <ul>
- <li><span style="background-color: #FFFFFF">&nbsp;</span><code><span style="background-color: #FFFFFF">exists(to_p) &amp;&amp; exists(from_p) &amp;&amp; equivalent(to_p,
- from_p)</span></code></li>
- <li><span style="background-color: #FFFFFF">The contents of the file or directory
- </span> <code><span style="background-color: #FFFFFF">to_p</span></code><span style="background-color: #FFFFFF"> resolves to are unchanged.</span></li>
- </ul>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support hard links or support
- them only for regular files. Some operating systems limit the number of links per
- file.
- Some file systems that do not
- support
- hard links - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus hard links should be avoided if wide portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- void create_hard_link(const Path1&amp; to_p, const Path2&amp; from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_hard_link( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error&lt;Path1, Path2&gt;</code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- system_error_type create_symlink(const Path1&amp; to_p, const Path2&amp; from_p, system_error_code&amp; ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <span style="background-color: #FFFFFF">
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Postcondition:</i> <code>from_p</code>
- resolves to a symbolic link file that contains an unspecified representation
- of <code>to_p</code>.</span></p>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support symbolic links at all or support
- them only for regular files. Thus symbolic links should be avoided if code portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- void create_symlink(const Path1&amp; to_p, const Path2&amp; from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_symlink( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error&lt;Path1, Path2&gt;</code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre>template &lt;class Path&gt; bool remove(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Precondition:</i> <code>!p.empty()</code></p>
- <p><i>Effects:</i>&nbsp; Attempts to delete the file <code>p</code> resolves
- to,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- remove()</a></code>.</p>
- <p><i>Returns:</i> The value of <code>exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Postcondition:</i> <code>!exists(p)</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if:</p>
- <ul>
- <li><code>p.empty() || (exists(p) &amp;&amp; is_directory(p) &amp;&amp; !empty(p))</code>.</li>
- <li><i>Effects</i> fails for any reason other than because <code>p</code>
- does not resolve to an existing file.</li>
- </ul>
- <p>[<i>Note:</i> A symbolic link is itself removed, rather than what it
- resolves to being removed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path1, class Path2&gt; void rename(const Path1&amp; from_p, const Path2&amp; to_p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Renames <code>from_p</code> to <code>to_p</code>, as if by
- <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">
- rename()</a></code>.</p>
- <p><i>Postconditions:</i> <code>!exists(from_p) &amp;&amp; exists(to_p)</code>, and
- the contents and attributes of the file originally named <code>from_p</code>
- are otherwise unchanged.</p>
- <p>[<i>Note:</i> If <code>from_p</code> and <code>to_p</code> resolve to the
- same file, no action is taken. Otherwise, if <code>to_p</code> resolves to an
- existing file, it is removed. A symbolic link is itself renamed, rather than
- the file it resolves to being renamed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path1, class Path2&gt; void copy_file(const Path1&amp; from_fp, const Path2&amp; to_fp);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> The contents and attributes of the file <code>from_fp</code>
- resolves to are copied to the file <code>to_fp</code> resolves to.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>
- from_fp.empty() || to_fp.empty() ||!exists(from_fp) || !is_regular(from_fp)
- || exists(to_fp)</code></p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path complete(const Path&amp; p, const Path&amp; base=initial_path&lt;Path&gt;());</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code> and <code>base</code>,
- using the following rules:</p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td align="center">&nbsp;</td>
- <td align="center"><b><code>p.has_root_directory()</code></b></td>
- <td align="center"><b><code>!p.has_root_directory()</code></b></td>
- </tr>
- <tr>
- <td align="center"><b><code>p.has_root_name()</code></b></td>
- <td align="center"><code>p</code></td>
- <td align="center">precondition failure</td>
- </tr>
- <tr>
- <td align="center"><b><code>!p.has_root_name()</code></b></td>
- <td align="center"><code>base.root_name()<br>
- / p</code></td>
- <td align="center"><code>base / p</code></td>
- </tr>
- </table>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i>
- <span style="background-color: #FFFFFF">If </span> <code>
- <span style="background-color: #FFFFFF">!(base.is_complete() &amp;&amp; (p.is_complete() || !p.has_root_name()))</span></code></p>
- <p>[<i><a name="complete_note">Note</a>:</i> When portable behavior is
- required, use <i>complete()</i>. When operating system dependent behavior is
- required, use <i>system_complete()</i>.</p>
- <p>Portable behavior is useful when dealing with paths created
- internally within a program, particularly if the program should exhibit the
- same behavior on all operating systems.</p>
- <p>Operating system dependent behavior is useful when dealing with
- paths supplied by user input, reported to program users, or when such behavior
- is expected by program users. <i>--
- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path system_complete(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code>, using the
- same rules used by the operating system to resolve a path passed as the
- filename argument to standard library open functions.</p>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i> <span style="background-color: #FFFFFF">If <code>p.empty()</code>.</span></p>
- <p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
- <code>complete(p, current_path())</code>.</p>
- <p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
- same semantics as <code>complete(ph, current_path())</code> if
- <code>p.is_complete() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same
- <code>root_name()</code>.
- Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code>
- is the current directory for the <code>p.root_name()</code> drive. This will
- be the current directory of that drive the last time it was set, and thus may
- be <b>residue left over from a prior program</b> run by the command
- processor! Although these semantics are often useful, they are also very
- error-prone.</p>
- <p>See
- <a href="file:///C|/boost/site/libs/filesystem/doc/operations.htm#complete_note">
- <i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
-</blockquote>
-<pre>errno_type <a name="to_errno">to_errno</a>( system_error_type code );</pre>
-<blockquote>
-<p><i>Returns:</i> The value of the <code>errno</code> error number which
-corresponds to the operating system's error code <code>code</code>. The exact
-correspondence is implementation defined. Implementations are only required to
-support error codes reported by <code>basic_filesystem_error</code> exceptions
-thrown by functions defined in this clause.</p>
-</blockquote>
-<pre>void system_message( system_error_type ec, std::string &amp; target );
-void system_message( system_error_type ec, std::wstring &amp; target );</pre>
-<blockquote>
-<p><i>Effects:</i> Appends a message corresponding to <code>ec</code> to <code>
-target</code>.</p>
-<p>[<i>Note:</i> Implementations are encouraged to supply a localized message. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Convenience-functions">Convenience functions</a></h4>
-<pre>template &lt;class Path&gt; bool create_directories(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>p.empty() || <br>
- forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )</code>
- </p>
- <p><i>Returns:</i> The value of <code>!exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Throws:</i>&nbsp; <code>basic_filesystem_error&lt;Path&gt;</code> if<code>
- exists(p) &amp;&amp; !is_directory(p)</code></p>
-</blockquote>
-<pre>template &lt;class Path&gt; typename Path::string_type extension(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.leaf()</code> contains a <i>dot</i>, returns the
- substring of <code>p.leaf()</code> starting at the rightmost <i>dot</i> and
- ending at the string's end. Otherwise, returns an empty string. </p>
- <p>[<i>Note:<b> </b></i>The <i>dot</i> is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. </p>
- <p>Implementations are permitted but not required to define additional
- behavior for file systems which append additional elements to extensions, such
- as alternate data stream or partitioned dataset names. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; typename Path::string_type basename(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.leaf()</code> contains a <i>dot</i>, returns the
- substring of <code>p.leaf()</code> starting at its beginning and ending at the
- last <i>dot</i> (the <i>dot</i> is not included). Otherwise, returns <code>
- p.leaf()</code>.</p>
-</blockquote>
-<pre>template &lt;class Path&gt;
- Path replace_extension(const Path &amp; p, const typename Path::string_type &amp; new_extension);</pre>
-<blockquote>
- <p><i>Postcondition:</i> <code>basename(<i>return_value</i>) == basename(p) &amp;&amp;
- extension(<i>return_value</i>) == new_extension</code> </p>
- <p>[<i>Note:</i> It follows from the semantics of <code>extension()</code>
- that <code>new_extension</code> should include <i>dot</i> to achieve
- reasonable results. <i>-- end note</i>]</p>
-</blockquote>
-<h3><a name="header-cerrno">Additions</a> to header <code>&lt;cerrno&gt;</code></h3>
-<p>The header &lt;cerrno&gt; shall include an additional symbolic constant macro for
-each of the values returned by the to_errno
-function. The macro names shall be as defined in <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/errno.h.html">
-errno.h</a>, with the additions below.</p>
-<blockquote>
-<p><i><span style="background-color: #E0E0E0">This codifies existing practice.
-The required names are only a sub-set of those defined by POSIX, and are usually already
-supplied in &lt;errno.h&gt; (as wrapped by &lt;cerrno&gt;) as shipped with POSIX and Windows compilers.
-These implementations require no changes to their underlying C headers to conform with the above
-requirement.</span></i></p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="33%">
- <tr>
- <td width="18%" align="center"><i><b>Name</b></i></td>
- <td width="82%" align="center"><i><b>Meaning</b></i></td>
- </tr>
- <tr>
- <td width="18%"><code>EBADHANDLE</code></td>
- <td width="82%">Bad operating system handle.</td>
- </tr>
- <tr>
- <td width="18%"><code>EOTHER</code></td>
- <td width="82%">Other error.</td>
- </tr>
-</table>
-</blockquote>
-<h3><a name="header-fstream">Additions</a> to header <code>&lt;fstream&gt;</code></h3>
-<blockquote>
-<p><span style="background-color: #E0E0E0; font-style:italic">These additions have been carefully
-specified to avoid breaking existing code in common operating environments such as
-</span> <i><span style="background-color: #E0E0E0">POSIX</span></i><span style="background-color: #E0E0E0; font-style:italic">,
-</span> <i>
-<span style="background-color: #E0E0E0">Windows</span></i><span style="background-color: #E0E0E0; font-style:italic">, and
-</span> <i><span style="background-color: #E0E0E0">OpenVMS.
-See </span><a href="#Suggestions-for-fstream">
-<span style="background-color: #E0E0E0">Suggestions for <code>&lt;fstream&gt;</code>
-implementations</span></a><span style="background-color: #E0E0E0"> for
-techniques to avoid breaking existing code in other environments, particularly
-on operating systems allowing slashes in filenames.</span></i></p>
-<p><span style="background-color: #FFFFFF">[<i>Note:</i> The
-&quot;do-the-right-thing&quot; rule from <a href="#Requirements-on-implementations">
-Requirements on implementations</a> does apply to header <code>&lt;fstream&gt;</code>.</span></p>
-<p><span style="background-color: #FFFFFF">The overloads
-below are specified as additions rather than replacements for existing
-functions. This preserves existing code (perhaps
-using a <a name="home-grown-path">home-grown path</a> class) that relies on an
-automatic conversion to <code>const char*</code>.<i> -- end note</i>]</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.1 Class template
-basic_filebuf [lib.filebuf] synopsis preceding paragraph 1, add the function:</i></span></p>
-<blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; </span><span style="background-color: #FFFFFF">basic_filebuf</span><span style="background-color: #FFFFFF">&lt;charT,traits&gt;* </span><span style="background-color: #FFFFFF">open(const</span><span style="background-color: #FFFFFF"> Path&amp; p, </span><span style="background-color: #FFFFFF">ios_base::openmode</span><span style="background-color: #FFFFFF"> mode);</span></pre>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.3 Member functions [lib.filebuf.members],
-add the above to the signature preceding paragraph 2, and replace the
-sentence:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens a file, if possible,
-whose name is the NTBS s (“as if” by calling <code>std::fopen(s ,<i>modstr</i>
-))</code>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens, if possible, the file
-that
-<code>p</code> or <code>path(s)</code> resolves to, “as if” by calling <code>std::fopen()</code> with a
-second argument of <i>modstr</i>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.5 Class template
-basic_ifstream [lib.ifstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_ifstream(const Path&amp; p, ios_base::openmode mode = ios_base::in);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::in);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.6 basic_ifstream
-constructors [lib.ifstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.7 Member functions [lib.ifstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.8 Class template
-basic_ofstream [lib.ofstream] synopsis preceding paragraph 1, add the
-
-functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_ofstream(const Path&amp; p, ios_base::openmode mode = ios_base::out);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.9 basic_ofstream
-constructors [lib.ofstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.10 Member functions [lib.ofstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.11 Class template
-basic_fstream [lib.fstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_fstream(const Path&amp; p, ios_base::openmode mode = ios_base::in|ios_base::out);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::in|ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.12 basic_fstream
-constructors [lib.fstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode)</code>
-or <code>rdbuf()-&gt;open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.13 Member functions [lib.fstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode)</code>
-or <code>rdbuf()-&gt;open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>End of proposed text.</i></span></p>
-<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
-<p>The table is generated by a program compiled with the Boost implementation.</p>
-<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
-implementations yield different results. The top value is the
-<i>POSIX</i> result and the bottom value is the <i>Windows</i> result. <br>
-&nbsp;<table border="1" cellspacing="0" cellpadding="5" width="1066">
-<p>
-<tr><td width="112"><b>Constructor<br>argument</b></td>
-<td width="160"><b>Elements found<br>by iteration</b></td>
-<td width="112"><b><code>string()</code></b></td>
-<td width="112"><code><b>file_<br>string()</b></td>
-<td width="72"><b><code>root_<br>path()<br>.string()</code></b></td>
-<td width="48"><b><code>root_<br>name()</code></b></td>
-<td width="88"><b><code>root_<br>directory()</code></b></td>
-<td width="96"><b><code>relative_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>branch_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>leaf()</code></b></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="160"><code>&quot;&quot;</code></td>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="160"><code>&quot;.&quot;</code></td>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="160"><code>&quot;..&quot;</code></td>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/&quot;</code></td>
-<td width="160"><code>&quot;/&quot;</code></td>
-<td width="112"><code>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/&quot;<br>&quot;\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo&quot;<br>&quot;\foo&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/&quot;<br>&quot;foo\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo/&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo/&quot;<br>&quot;\foo\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/bar&quot;<br>&quot;foo\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo/bar&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo/bar&quot;<br>&quot;\foo\bar&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;/foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;///foo///&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;///foo///&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;///foo///&quot;<br>&quot;\foo\\\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo///&quot;</code></td>
-<td width="72"><code>&quot;///foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;///foo///bar&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;///foo///bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;///foo///bar&quot;<br>&quot;\foo\\\bar&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo///bar&quot;</code></td>
-<td width="72"><code>&quot;///foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/.&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;/.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/.&quot;<br>&quot;\.&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;./&quot;</code></td>
-<td width="160"><code>&quot;.&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;./&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;./&quot;<br>&quot;.\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;./&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/..&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/..&quot;<br>&quot;\..&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;../&quot;</code></td>
-<td width="160"><code>&quot;..&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;../&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;../&quot;<br>&quot;..\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;../&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/.&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/.&quot;<br>&quot;foo\.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/..&quot;<br>&quot;foo\..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/./&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/./&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/./&quot;<br>&quot;foo\.\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/./&quot;</code></td>
-<td width="72"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/./bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/./bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/./bar&quot;<br>&quot;foo\.\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/./bar&quot;</code></td>
-<td width="72"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/..&quot;<br>&quot;foo\..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/../&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/../&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/../&quot;<br>&quot;foo\..\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/../&quot;</code></td>
-<td width="72"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/../bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/../bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/../bar&quot;<br>&quot;foo\..\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/../bar&quot;</code></td>
-<td width="72"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td width="160"><code>&quot;c:&quot;</code></td>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-top-style: solid; border-top-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;c:&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;</code></td>
-<td width="112"><code>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code><span style="background-color: #99FF66">
-&quot;c:/&quot;<br>&quot;c:\&quot;</span></code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;.&quot;<br>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;<br>&quot;c:&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo&quot;<br>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:&quot;<br>&quot;c:/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;c:foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:foo/&quot;<br>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;c:foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo/&quot;<br>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;,&quot;bar&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo/bar&quot;<br>&quot;c:\foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo/bar&quot;<br>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td width="160"><code>&quot;prn:&quot;</code></td>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;prn:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;prn:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;prn:&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;prn:&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\&quot;<br>&quot;c:&quot;,&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\&quot;<br>&quot;c:/&quot;</code></td>
-<td width="112"><code>&quot;c:\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\&quot;<br>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\&quot;<br>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;<br>&quot;c:&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo&quot;<br>&quot;c:/foo&quot;</code></td>
-<td width="112"><code>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo\&quot;<br>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:foo\&quot;<br>&quot;c:foo/&quot;</code></td>
-<td width="112"><code>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo\&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo\&quot;<br>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo\&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo\&quot;<br>&quot;c:/foo/&quot;</code></td>
-<td width="112"><code>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo\&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo\&quot;<br>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo/&quot;<br>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo/&quot;<br>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo&quot;<br>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo\bar&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo\bar&quot;<br>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo\bar&quot;<br>&quot;c:\foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-bottom-style: solid; border-bottom-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo\bar&quot;<br>&quot;foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:&quot;<br>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;foo\bar&quot;<br>&quot;bar&quot;</code></td>
-</tr>
-</table>
-<h2><a name="Suggestions-for-fstream">Suggestions for <code>&lt;fstream&gt;</code></a>
-implementations</h2>
-<p><span style="background-color: #FFFFFF">The change in semantics to functions
-taking <code>const char*</code> arguments can break existing code, but only on
-operating systems where implementations don't
-implicitly accept native format pathnames or
-operating systems that allow slashes in filenames. Thus on <i>POSIX</i>,
-<i>Windows,</i> and <i>OpenVMS</i>, for example, there is no problem if the
-implementation follows encouraged behavior.</span></p>
-<p><span style="background-color: #FFFFFF">For most of the Filesystem Library,
-there is no existing code, so the issue preserving existing code that uses
-slashes in filenames doesn't arise. New code simply must use basic_path
-constructors with <code>path_format_t</code> arguments of <code>native</code>.
-To preserve existing fstream code that uses slashes in filenames, an
-implementation may wish to provide a mechanism such as a macro to control
-selection of the old behavior.</span></p>
-<p><span style="background-color: #FFFFFF">Implementations are already required
-by the TR front-matter to provide a mechanism such as a macro to control
-selection of the old behavior (useful to guarantee protection of existing code)
-or new behavior (useful in new code, and code being ported from other systems)
-for headers. Because use of the rest of the Filesystem Library is independent of
-use of the <code>&lt;fstream&gt;</code> additions, affected implementations are
-encouraged to allow disabling the <code>&lt;fstream&gt;</code> additions separately
-from other TR features.</span></p>
-<p><span style="background-color: #FFFFFF">An rejected alternative was to supply
-new fstream classes in namespace <code>sys</code>, inheriting from the current
-classes, overriding the constructors and opens taking pathname arguments, and
-providing the additional overloads. In Lillehammer LWG members indicated lack of
-support for this alternative, feeling that costs outweigh benefits.</span></p>
-<h2><a name="Issues">Issues</a></h2>
-<h3>1. Return type of certain basic_path members returning strings. [Howard
-Hinnant]</h3>
-<p>For member functions described as returning &quot;<code>const string_type</code>&quot;
-or &quot;<code>const external_string_type</code>&quot;, implementations are permitted to
-return &quot;<code>const string_type&amp;</code>&quot; or&nbsp; &quot;<code>const
-external_string_type&amp;</code>&quot; respectively.</p>
-<p>This allows implementations to avoid unnecessary copies. Return-by-value is
-specified as
-<code>const</code> to ensure programs won't break if moved to a
-return-by-reference implementation.</p>
-<p>For example, the Boost implementation keeps the internal representation of a
-pathname in the portable format, so string() returns by reference and is inlined:</p>
-<blockquote>
- <pre>const string_type &amp; string() const { return m_path; }</pre>
-</blockquote>
-<p>Howard Hinnant comments: This may inhibit optimization if rvalue reference is
-accepted.&nbsp; Const-qualified return types can't be moved from.&nbsp; I'd
-rather see either the return type specified as
-<code>const string_type&amp;</code> or <code>string_type</code>.</p>
-<p>Beman Dawes comments: I can't make up my mind. Removing the const will bite
-users, but not very often. OTOH, excessive copying is a real concern, and if
-move semantics can alleviate that, I'm all for it. What does the LWG think?</p>
-<h3>2. Basic_path canonize() and normalize() removed. [Beman Dawes]</h3>
-<p>The Boost implementation has basic_path functions canonize() and normalize()
-which return cleaned up string representations of a pathname. They have been
-removed from the proposal as messy to specify and implement, not hugely useful,
-and possible to implement by users as non-member functions without any loss of
-functionality or efficiency. There was also a concern the proposal was getting a
-bit large.</p>
-<p>These functions can be added later as convenience functions if the LWG so
-desires..</p>
-<h3>3. Filename checking functions. [Beman Dawes]</h3>
-<p>Boost has a set of predicate functions that determine if a filename is valid
-for a particular operating or system. These can be used as building blocks for
-functions that determine if an entire pathname is valid for a particular
-operating or file system.</p>
-<p>Users can use these functions to ensure that pathnames are in fact portable
-to target operating or file systems, without having to actually test on the
-target systems.</p>
-<p>These functions are not included in the proposal because of lack of time, and
-uncertainty as to their fit with the Standard Library. They can be added later
-if the LWG so desires.</p>
-<h2><a name="Acknowledgements">Acknowledgements</a></h2>
-<p>This Filesystem Library is dedicated to my wife, Sonda, who provided the
-support necessary to see both a trial implementation and the proposal itself
-through to completion. She gave me the strength to continue after a difficult
-year of cancer treatment in the middle of it all.</p>
-<p>Many people contributed technical comments, ideas, and suggestions to the
-Boost Filesystem Library. See
-<a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">
-http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements>.</p>
-<p>Dietmar Kühl contributed the original Boost Filesystem Library
-directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas
-Witt were particularly helpful in refining the library.</p>
-<p>The create_directories, extension, basename, and replace_extension functions
-were developed by Vladimir Prus.</p>
-<p>Howard Hinnant and John Maddock reviewed a draft of the proposal, and
-identified a number of mistakes or weaknesses, resulting in a more polished
-final document.</p>
-<h2><a name="References">References</a></h2>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
- <td width="84%">ISO/IEC 9945:2003, IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group
- Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
- Specification, Version 3. Available from each of the organizations involved
- in its creation. For example, read online or download from
- <a href="
http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
- POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
- </tr>
- <tr>
- <td width="16%" valign="top">[Abrahams]</td>
- <td width="84%">Dave Abrahams, Error and Exception Handling,
- <a href="http://www.boost.org/more/error_handling.html">
- www.boost.org/more/error_handling.html</a></td>
- </tr>
-</table>
-<h2><a name="Revision-History">Revision History</a></h2>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="11%" valign="top">
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1841.html">
- N1841</a></td>
- <td width="89%">
- <ul>
- <li>Initial version, August, 2005, pre-Tremblant mailing</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="11%" valign="top" bgcolor="#FFFFFF">
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1889.html">
- N1889</a><br>
- Revision 1</td>
- <td width="89%" bgcolor="#FFFFFF">
- <ul>
- <li>Missing argument name <code>fmt</code> added to several <code>
- basic_path</code> members.</li>
- <li> <code>is_empty()</code> name discrepancy between synopsis and
- description corrected.</li>
- <li><code>file_size()</code> return type changed from <code>intmax_t</code>
- to <code>uintmax_t</code>.&nbsp; Wording slightly clarified.</li>
- <li><code>struct space_info</code> and non-member function <code>space()</code>
- added.</li>
- <li>A paragraph was added to <b><i>Important design decisions</i></b>
- mentioning the need for both portable and platform specific semantics.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="11%" valign="top" bgcolor="#FFFFFF">
- N1934<br>
- Revision 2</td>
- <td width="89%" bgcolor="#FFFFFF">
- <ul>
- <li>Changed native path identification from constructor argument to
- <code>&quot;//:&quot;</code> escape prefix. Rationale: simplifies basic_path
- constructor interfaces, easier use for platforms needing explicit native
- format identification.</li>
- <li>Introduced a new base class, filesystem_error, to<span style="background-color: #FFFFFF">
- allow users to catch a single exception type if desired, or to deal with
- the case where the templated type is unknown. Rename filesystem_error and
- wfilesystem_error accordingly.</span></li>
- <li><span style="background-color: #FFFFFF">Rewording
- basic_filesystem_error text to more closely follow the form of clause 19
- of the standard.</span></li>
- <li><span style="background-color: #FFFFFF">Removed dual specification of
- certain errors in both &quot;Reguires&quot; and &quot;Throws&quot; paragraphs. Since throwing
- an exception is well-defined behavior, the error condition does not result
- in undefined behavior as implied by &quot;Requires&quot;. (Suggested by Dave
- Abrahams)</span></li>
- <li><span style="background-color: #FFFFFF">Added a non-throwing version
- of create_hard_link().</span></li>
- <li><span style="background-color: #FFFFFF">Added two create_symlink()
- functions.</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_path inserter and
- extractor. (Suggested by Vladimir Prus)</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_path member and
- non-member swap() functions.</span></li>
- <li><span style="background-color: #FFFFFF">Aligned basic_path operator
- functions with std::basic_string practice. </span></li>
- <li><span style="background-color: #FFFFFF">Replaced status_flags with
- file_type enum and file_status class to improve encapsulation and allow
- for future expansion of file_status.</span></li>
- <li><span style="background-color: #FFFFFF">Added predicate functions
- overloaded on file_status (Suggested by Martin Adrian). This change,
- coupled with the introduction of file_status, clarifies the meaning of
- file types and related predicate operations, and eliminates the need for
- user bit manipulation, which was a source of user error.</span></li>
- <li><span style="background-color: #FFFFFF">Predicate function
- specification clarified accordingly.</span></li>
- <li><span style="background-color: #FFFFFF">Revised and explicitly
- documented policy for non-throwing versions of functions to increase
- consistency.</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_directory_iterator
- constructor non-throwing overload (Suggested by Martin Adrian).</span></li>
- <li><span style="background-color: #FFFFFF">Changed symlink awareness to
- separately name functions to cut clutter caused by addition of
- non-throwing overloads.</span></li>
- </ul>
- </td>
- </tr>
- </table>
-<hr>
-<p>© Copyright Beman Dawes, 2002-2006</p>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2006-02-06<!--webbot bot="Timestamp" endspan i-checksum="12142" --></p>
-
-</body>
-
-</html>
\ No newline at end of file

Modified: branches/release/libs/filesystem/example/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/example/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/example/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
-# Boost System Library Build Jamfile
-
-# (C) Copyright Beman Dawes 2002, 2006
+# Boost Filesystem Library Example Jamfile
+
+# (C) Copyright Vladimir Prus 2003
 
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/libs/filesystem/example/mbpath.cpp
==============================================================================
--- branches/release/libs/filesystem/example/mbpath.cpp (original)
+++ branches/release/libs/filesystem/example/mbpath.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
 // Boost.Filesystem mbpath.hpp ---------------------------------------------//
 
-// Copyright Beman Dawes 2005
+// © Copyright Beman Dawes 2005
 
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -46,7 +46,7 @@
       boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
         fs::basic_filesystem_error<mbpath>(
           "user::mbpath::to_external conversion error",
- ph, EINVAL ) );
+ ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
     *to_next = '\0';
     return external_string_type( work.get() );
   }
@@ -64,7 +64,8 @@
         work.get()+work_size, to_next ) != std::codecvt_base::ok )
         boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
           fs::basic_filesystem_error<mbpath>(
- "user::mbpath::to_internal conversion error", EINVAL ) );
+ "user::mbpath::to_internal conversion error",
+ boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
       *to_next = L'\0';
       return internal_string_type( work.get() );
   }

Modified: branches/release/libs/filesystem/src/operations.cpp
==============================================================================
--- branches/release/libs/filesystem/src/operations.cpp (original)
+++ branches/release/libs/filesystem/src/operations.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -2,12 +2,11 @@
 
 // Copyright 2002-2005 Beman Dawes
 // Copyright 2001 Dietmar Kuehl
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
 
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem/
+// See library home page at http://www.boost.org/libs/filesystem
 
 //----------------------------------------------------------------------------//
 
@@ -24,9 +23,8 @@
 
 #if !(defined(__HP_aCC) && defined(_ILP32) && \
       !defined(_STATVFS_ACPP_PROBLEMS_FIXED))
-# define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
+#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
 #endif
-
 #define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX
       // 64-bit systems or on 32-bit systems which don't have files larger
       // than can be represented by a traditional POSIX/UNIX off_t type.
@@ -51,33 +49,38 @@
 #include <boost/detail/workaround.hpp>
 
 namespace fs = boost::filesystem;
+using boost::system::error_code;
+using boost::system::system_category;
 
 # if defined(BOOST_WINDOWS_API)
-# include "windows.h"
+# include <windows.h>
 # if defined(__BORLANDC__) || defined(__MWERKS__)
 # if defined(__BORLANDC__)
         using std::time_t;
 # endif
-# include "utime.h"
+# include <utime.h>
 # else
-# include "sys/utime.h"
+# include <sys/utime.h>
 # endif
 
 # else // BOOST_POSIX_API
 # include <sys/types.h>
-# ifndef __APPLE__
+# if !defined(__APPLE__) && !defined(__OpenBSD__)
 # include <sys/statvfs.h>
 # define BOOST_STATVFS statvfs
 # define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
 # else
+#ifdef __OpenBSD__
+# include <sys/param.h>
+#endif
 # include <sys/mount.h>
 # define BOOST_STATVFS statfs
 # define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>( vfs.f_bsize )
 # endif
-# include "dirent.h"
-# include "unistd.h"
-# include "fcntl.h"
-# include "utime.h"
+# include <dirent.h>
+# include <unistd.h>
+# include <fcntl.h>
+# include <utime.h>
 # include "limits.h"
 # endif
 
@@ -107,7 +110,7 @@
 
 namespace
 {
- static const fs::directory_iterator end_itr;
+ const fs::directory_iterator end_itr;
   bool is_empty_directory( const std::string & dir_path )
   {
     return fs::directory_iterator(fs::path(dir_path)) == end_itr;
@@ -128,7 +131,7 @@
   inline DWORD get_file_attributes( const wchar_t * ph )
     { return ::GetFileAttributesW( ph ); }
 
- static const fs::wdirectory_iterator wend_itr;
+ const fs::wdirectory_iterator wend_itr;
   bool is_empty_directory( const std::wstring & dir_path )
   {
     return fs::wdirectory_iterator(fs::wpath(dir_path)) == wend_itr;
@@ -151,6 +154,9 @@
   inline DWORD get_current_directory( DWORD sz, wchar_t * buf )
     { return ::GetCurrentDirectoryW( sz, buf ); }
 
+ inline bool set_current_directory( const wchar_t * buf )
+ { return ::SetCurrentDirectoryW( buf ) != 0 ; }
+
   inline bool get_free_disk_space( const std::wstring & ph,
     PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free )
     { return ::GetDiskFreeSpaceExW( ph.c_str(), avail, total, free ) != 0; }
@@ -181,24 +187,32 @@
 # endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
 
   template< class String >
- fs::file_status status_template( const String & ph, fs::system_error_type & ec )
+ fs::file_status status_template( const String & ph, error_code & ec )
   {
     DWORD attr( get_file_attributes( ph.c_str() ) );
     if ( attr == 0xFFFFFFFF )
     {
- ec = ::GetLastError();
- if ((ec == ERROR_FILE_NOT_FOUND)
- || (ec == ERROR_PATH_NOT_FOUND)
- || (ec == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
- || (ec == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
- || (ec == ERROR_BAD_NETPATH))
+ ec = error_code( ::GetLastError(), system_category );
+ if ((ec.value() == ERROR_FILE_NOT_FOUND)
+ || (ec.value() == ERROR_PATH_NOT_FOUND)
+ || (ec.value() == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
+ || (ec.value() == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
+ || (ec.value() == ERROR_BAD_PATHNAME) // "//nosuch" on Win64
+ || (ec.value() == ERROR_BAD_NETPATH)) // "//nosuch" on Win32
       {
- ec = 0; // these are not considered errors
+ ec = error_code(); // these are not considered errors;
+ // the status is considered not found
         return fs::file_status( fs::file_not_found );
       }
+ else if ((ec.value() == ERROR_SHARING_VIOLATION))
+ {
+ ec = error_code(); // these are not considered errors;
+ // the file exists but the type is not known
+ return fs::file_status( fs::type_unknown );
+ }
       return fs::file_status( fs::status_unknown );
     }
- ec = 0;
+ ec = error_code();;
     return (attr & FILE_ATTRIBUTE_DIRECTORY)
       ? fs::file_status( fs::directory_file )
       : fs::file_status( fs::regular_file );
@@ -214,8 +228,8 @@
   {
     WIN32_FILE_ATTRIBUTE_DATA fad;
     if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( ::GetLastError(), false );
- return std::make_pair( 0,
+ return std::make_pair( error_code( ::GetLastError(), system_category ), false );
+ return std::make_pair( error_code(),
       ( fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
         ? is_empty_directory( ph )
         :( !fad.nFileSizeHigh && !fad.nFileSizeLow ) );
@@ -281,21 +295,21 @@
     {
       if ( p1.handle != INVALID_HANDLE_VALUE
         || p2.handle != INVALID_HANDLE_VALUE )
- { return std::make_pair( 0, false ); }
+ { return std::make_pair( error_code(), false ); }
       assert( p1.handle == INVALID_HANDLE_VALUE
         && p2.handle == INVALID_HANDLE_VALUE );
- { return std::make_pair( error1, false ); }
+ { return std::make_pair( error_code( error1, system_category), false ); }
     }
     // at this point, both handles are known to be valid
     BY_HANDLE_FILE_INFORMATION info1, info2;
     if ( !::GetFileInformationByHandle( p1.handle, &info1 ) )
- { return std::make_pair( ::GetLastError(), false ); }
+ { return std::make_pair( error_code( ::GetLastError(), system_category ), false ); }
     if ( !::GetFileInformationByHandle( p2.handle, &info2 ) )
- { return std::make_pair( ::GetLastError(), false ); }
+ { return std::make_pair( error_code( ::GetLastError(), system_category ), false ); }
     // In theory, volume serial numbers are sufficient to distinguish between
     // devices, but in practice VSN's are sometimes duplicated, so last write
     // time and file size are also checked.
- return std::make_pair( 0,
+ return std::make_pair( error_code(),
         info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
         && info1.nFileIndexHigh == info2.nFileIndexHigh
         && info1.nFileIndexLow == info2.nFileIndexLow
@@ -314,10 +328,10 @@
     WIN32_FILE_ATTRIBUTE_DATA fad;
     // by now, intmax_t is 64-bits on all Windows compilers
     if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( ::GetLastError(), 0 );
+ return std::make_pair( error_code( ::GetLastError(), system_category ), 0 );
     if ( (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0 )
- return std::make_pair( ERROR_FILE_NOT_FOUND, 0 );
- return std::make_pair( 0,
+ return std::make_pair( error_code( ERROR_FILE_NOT_FOUND, system_category), 0 );
+ return std::make_pair( error_code(),
       (static_cast<boost::uintmax_t>(fad.nFileSizeHigh)
         << (sizeof(fad.nFileSizeLow)*8))
       + fad.nFileSizeLow );
@@ -335,7 +349,7 @@
     boost::filesystem::detail::space_pair result;
     if ( get_free_disk_space( ph, &avail, &total, &free ) )
     {
- result.first = 0;
+ result.first = error_code();
       result.second.capacity
         = (static_cast<boost::uintmax_t>(total.HighPart) << 32)
           + total.LowPart;
@@ -348,7 +362,7 @@
     }
     else
     {
- result.first = ::GetLastError();
+ result.first = error_code( ::GetLastError(), system_category );
       result.second.capacity = result.second.free
         = result.second.available = 0;
     }
@@ -359,7 +373,7 @@
     { return ::GetCurrentDirectoryA( sz, buf ); }
 
   template< class String >
- boost::filesystem::system_error_type
+ error_code
   get_current_path_template( String & ph )
   {
     DWORD sz;
@@ -369,9 +383,20 @@
     typedef typename String::value_type value_type;
     boost::scoped_array<value_type> buf( new value_type[sz] );
     if ( get_current_directory( sz, buf.get() ) == 0 )
- return ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
     ph = buf.get();
- return 0;
+ return error_code();
+ }
+
+ inline bool set_current_directory( const char * buf )
+ { return ::SetCurrentDirectoryA( buf ) != 0; }
+
+ template< class String >
+ error_code
+ set_current_path_template( const String & ph )
+ {
+ return error_code( set_current_directory( ph.c_str() )
+ ? 0 : ::GetLastError(), system_category );
   }
 
   inline std::size_t get_full_path_name(
@@ -385,31 +410,31 @@
   const std::size_t buf_size( 128 );
 
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   get_full_path_name_template( const String & ph, String & target )
   {
     typename String::value_type buf[buf_size];
     typename String::value_type * pfn;
     std::size_t len = get_full_path_name( ph,
       buf_size , buf, &pfn );
- if ( len == 0 ) return ::GetLastError();
+ if ( len == 0 ) return error_code( ::GetLastError(), system_category );
     if ( len > buf_size )
     {
       typedef typename String::value_type value_type;
       boost::scoped_array<value_type> big_buf( new value_type[len] );
       if ( (len=get_full_path_name( ph, len , big_buf.get(), &pfn ))
- == 0 ) return ::GetLastError();
+ == 0 ) return error_code( ::GetLastError(), system_category );
       big_buf[len] = '\0';
       target = big_buf.get();
- return 0;
+ return error_code();
     }
     buf[len] = '\0';
     target = buf;
- return 0;
+ return error_code();
   }
 
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   get_file_write_time( const String & ph, FILETIME & last_write_time )
   {
     handle_wrapper hw(
@@ -417,13 +442,13 @@
         FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
         OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
     if ( hw.handle == INVALID_HANDLE_VALUE )
- return ::GetLastError();
- return ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
+ return error_code( ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
+ ? 0 : ::GetLastError(), system_category );
   }
 
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   set_file_write_time( const String & ph, const FILETIME & last_write_time )
   {
     handle_wrapper hw(
@@ -431,9 +456,9 @@
         FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
         OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
     if ( hw.handle == INVALID_HANDLE_VALUE )
- return ::GetLastError();
- return ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
+ return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
+ ? 0 : ::GetLastError(), system_category );
   }
 
   // these constants come from inspecting some Microsoft sample code
@@ -468,13 +493,13 @@
   last_write_time_template( const String & ph )
   {
     FILETIME lwt;
- boost::filesystem::system_error_type result
- = get_file_write_time( ph, lwt );
- return std::make_pair( result, to_time_t( lwt ) );
+ error_code ec(
+ get_file_write_time( ph, lwt ) );
+ return std::make_pair( ec, to_time_t( lwt ) );
   }
 
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   last_write_time_template( const String & ph, const std::time_t new_time )
   {
     FILETIME lwt;
@@ -489,22 +514,22 @@
     { return ::DeleteFileA( ph.c_str() ) != 0; }
   
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   remove_template( const String & ph )
   {
- fs::system_error_type ec;
+ error_code ec;
     fs::file_status sf( fs::detail::status_api( ph, ec ) );
     if ( ec ) return ec;
     if ( fs::is_directory( sf ) )
     {
       if ( !remove_directory( ph ) )
- return ::GetLastError();
+ return error_code(::GetLastError(), system_category);
     }
     else
     {
- if ( !delete_file( ph ) ) return ::GetLastError();
+ if ( !delete_file( ph ) ) return error_code(::GetLastError(), system_category);
     }
- return 0;
+ return error_code();
   }
 
   inline bool create_directory( const std::string & dir )
@@ -514,13 +539,13 @@
   boost::filesystem::detail::query_pair
   create_directory_template( const String & dir_ph )
   {
- boost::filesystem::system_error_type error(0), dummy;
+ error_code error, dummy;
     if ( create_directory( dir_ph ) ) return std::make_pair( error, true );
- error = ::GetLastError();
+ error = error_code( ::GetLastError(), system_category );
     // an error here may simply mean the postcondition is already met
- if ( error == ERROR_ALREADY_EXISTS
+ if ( error.value() == ERROR_ALREADY_EXISTS
       && fs::is_directory( fs::detail::status_api( dir_ph, dummy ) ) )
- return std::make_pair( 0, false );
+ return std::make_pair( error_code(), false );
     return std::make_pair( error, false );
   }
 
@@ -532,12 +557,12 @@
   
 #if _WIN32_WINNT >= 0x500
   template<class String>
- boost::filesystem::system_error_type
+ error_code
   create_hard_link_template( const String & to_ph,
     const String & from_ph )
   {
- return fs::system_error_type( create_hard_link( to_ph.c_str(), from_ph.c_str() )
- ? 0 : ::GetLastError() );
+ return error_code( create_hard_link( to_ph.c_str(), from_ph.c_str() )
+ ? 0 : ::GetLastError(), system_category );
   }
 #endif
 
@@ -551,14 +576,17 @@
     namespace detail
     {
 
-#if defined(BOOST_WINDOWS_API)
- BOOST_FILESYSTEM_DECL system_error_type not_found_error = ERROR_PATH_NOT_FOUND;
-#else
- BOOST_FILESYSTEM_DECL system_error_type not_found_error = ENOENT;
-#endif
-
 // free functions ----------------------------------------------------------//
 
+ BOOST_FILESYSTEM_DECL error_code not_found_error()
+ {
+# ifdef BOOST_WINDOWS_API
+ return error_code(ERROR_PATH_NOT_FOUND, system_category);
+# else
+ return error_code(ENOENT, system_category);
+# endif
+ }
+
       BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
       {
 # ifdef BOOST_POSIX_API
@@ -572,13 +600,13 @@
 # ifdef BOOST_WINDOWS_API
 
       BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, fs::system_error_type & ec )
+ status_api( const std::string & ph, error_code & ec )
         { return status_template( ph, ec ); }
 
 # ifndef BOOST_FILESYSTEM_NARROW_ONLY
 
       BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::wstring & ph, fs::system_error_type & ec )
+ status_api( const std::wstring & ph, error_code & ec )
         { return status_template( ph, ec ); }
 
       BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::wstring & )
@@ -602,11 +630,16 @@
         { return space_template( ph ); }
 
       BOOST_FILESYSTEM_DECL
- boost::filesystem::system_error_type
+ error_code
       get_current_path_api( std::wstring & ph )
         { return get_current_path_template( ph ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL
+ error_code
+ set_current_path_api( const std::wstring & ph )
+ { return set_current_path_template( ph ); }
+
+ BOOST_FILESYSTEM_DECL error_code
         get_full_path_name_api( const std::wstring & ph, std::wstring & target )
          { return get_full_path_name_template( ph, target ); }
 
@@ -614,7 +647,7 @@
         last_write_time_api( const std::wstring & ph )
           { return last_write_time_template( ph ); }
  
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
         last_write_time_api( const std::wstring & ph, std::time_t new_value )
           { return last_write_time_template( ph, new_value ); }
 
@@ -623,32 +656,32 @@
         { return create_directory_template( ph ); }
 
 #if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       create_hard_link_api( const std::wstring & to_ph,
         const std::wstring & from_ph )
         { return create_hard_link_template( to_ph, from_ph ); }
 #endif
       
- BOOST_FILESYSTEM_DECL fs::system_error_type
- create_symlink_api( const std::wstring & to_ph,
- const std::wstring & from_ph )
- { return ERROR_NOT_SUPPORTED; }
+ BOOST_FILESYSTEM_DECL error_code
+ create_symlink_api( const std::wstring & /*to_ph*/,
+ const std::wstring & /*from_ph*/ )
+ { return error_code( ERROR_NOT_SUPPORTED, system_category ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       remove_api( const std::wstring & ph ) { return remove_template( ph ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       rename_api( const std::wstring & from, const std::wstring & to )
       {
- return ::MoveFileW( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError();
+ return error_code( ::MoveFileW( from.c_str(), to.c_str() )
+ ? 0 : ::GetLastError(), system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       copy_file_api( const std::wstring & from, const std::wstring & to )
       {
- return ::CopyFileW( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
- ? 0 : ::GetLastError();
+ return error_code( ::CopyFileW( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
+ ? 0 : ::GetLastError(), system_category );
       }
 
       BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph,
@@ -709,7 +742,7 @@
         return narrow_short_form;
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_first( void *& handle, const std::wstring & dir,
         std::wstring & target, file_status & sf, file_status & symlink_sf )
       {
@@ -723,17 +756,17 @@
           == INVALID_HANDLE_VALUE )
         {
           handle = 0;
- return ::GetLastError() == ERROR_FILE_NOT_FOUND
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND
+ ? 0 : ::GetLastError(), system_category );
         }
         target = data.cFileName;
         if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
           { sf.type( directory_file ); symlink_sf.type( directory_file ); }
         else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_increment( void *& handle, std::wstring & target,
         file_status & sf, file_status & symlink_sf )
       {
@@ -742,13 +775,13 @@
         {
           int error = ::GetLastError();
           dir_itr_close( handle );
- return error == ERROR_NO_MORE_FILES ? 0 : error;
+ return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category );
         }
         target = data.cFileName;
         if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
           { sf.type( directory_file ); symlink_sf.type( directory_file ); }
         else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
       }
 
 # endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
@@ -775,11 +808,16 @@
         { return space_template( ph ); }
 
       BOOST_FILESYSTEM_DECL
- boost::filesystem::system_error_type
+ error_code
       get_current_path_api( std::string & ph )
         { return get_current_path_template( ph ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL
+ error_code
+ set_current_path_api( const std::string & ph )
+ { return set_current_path_template( ph ); }
+
+ BOOST_FILESYSTEM_DECL error_code
         get_full_path_name_api( const std::string & ph, std::string & target )
          { return get_full_path_name_template( ph, target ); }
 
@@ -787,7 +825,7 @@
         last_write_time_api( const std::string & ph )
           { return last_write_time_template( ph ); }
  
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
         last_write_time_api( const std::string & ph, std::time_t new_value )
           { return last_write_time_template( ph, new_value ); }
 
@@ -796,35 +834,37 @@
         { return create_directory_template( ph ); }
 
 #if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       create_hard_link_api( const std::string & to_ph,
         const std::string & from_ph )
- { return system_error_type( create_hard_link_template( to_ph, from_ph ) ); }
+ {
+ return create_hard_link_template( to_ph, from_ph );
+ }
 #endif
 
- BOOST_FILESYSTEM_DECL fs::system_error_type
- create_symlink_api( const std::string & to_ph,
- const std::string & from_ph )
- { return ERROR_NOT_SUPPORTED; }
+ BOOST_FILESYSTEM_DECL error_code
+ create_symlink_api( const std::string & /*to_ph*/,
+ const std::string & /*from_ph*/ )
+ { return error_code( ERROR_NOT_SUPPORTED, system_category ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       remove_api( const std::string & ph ) { return remove_template( ph ); }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       rename_api( const std::string & from, const std::string & to )
       {
- return ::MoveFileA( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError();
+ return error_code( ::MoveFileA( from.c_str(), to.c_str() )
+ ? 0 : ::GetLastError(), system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       copy_file_api( const std::string & from, const std::string & to )
       {
- return ::CopyFileA( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
- ? 0 : ::GetLastError();
+ return error_code( ::CopyFileA( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
+ ? 0 : ::GetLastError(), system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_first( void *& handle, const std::string & dir,
         std::string & target, file_status & sf, file_status & symlink_sf )
       // Note: an empty root directory has no "." or ".." entries, so this
@@ -842,29 +882,29 @@
           == INVALID_HANDLE_VALUE )
         {
           handle = 0;
- return ::GetLastError() == ERROR_FILE_NOT_FOUND
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND
+ ? 0 : ::GetLastError(), system_category );
         }
         target = data.cFileName;
         if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
           { sf.type( directory_file ); symlink_sf.type( directory_file ); }
         else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_close( void *& handle )
       {
         if ( handle != 0 )
         {
           bool ok = ::FindClose( handle ) != 0;
           handle = 0;
- return ok ? 0 : ::GetLastError();
+ return error_code( ok ? 0 : ::GetLastError(), system_category );
         }
- return 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_increment( void *& handle, std::string & target,
         file_status & sf, file_status & symlink_sf )
       {
@@ -873,32 +913,32 @@
         {
           int error = ::GetLastError();
           dir_itr_close( handle );
- return error == ERROR_NO_MORE_FILES ? 0 : error;
+ return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category );
         }
         target = data.cFileName;
         if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
           { sf.type( directory_file ); symlink_sf.type( directory_file ); }
         else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
       }
 
 # else // BOOST_POSIX_API
 
       BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, system_error_type & ec )
+ status_api( const std::string & ph, error_code & ec )
       {
         struct stat path_stat;
         if ( ::stat( ph.c_str(), &path_stat ) != 0 )
         {
           if ( errno == ENOENT || errno == ENOTDIR )
           {
- ec = 0;
+ ec = error_code();
             return fs::file_status( fs::file_not_found );
           }
- ec = errno;
+ ec = error_code( errno, system_category );
           return fs::file_status( fs::status_unknown );
         }
- ec = 0;
+ ec = error_code();
         if ( S_ISDIR( path_stat.st_mode ) )
           return fs::file_status( fs::directory_file );
         if ( S_ISREG( path_stat.st_mode ) )
@@ -915,20 +955,20 @@
       }
 
       BOOST_FILESYSTEM_DECL fs::file_status
- symlink_status_api( const std::string & ph, system_error_type & ec )
+ symlink_status_api( const std::string & ph, error_code & ec )
       {
         struct stat path_stat;
         if ( ::lstat( ph.c_str(), &path_stat ) != 0 )
         {
           if ( errno == ENOENT || errno == ENOTDIR )
           {
- ec = 0;
+ ec = error_code();
             return fs::file_status( fs::file_not_found );
           }
- ec = errno;
+ ec = error_code( errno, system_category );
           return fs::file_status( fs::status_unknown );
         }
- ec = 0;
+ ec = error_code();
         if ( S_ISREG( path_stat.st_mode ) )
           return fs::file_status( fs::regular_file );
         if ( S_ISDIR( path_stat.st_mode ) )
@@ -960,8 +1000,8 @@
       {
         struct stat path_stat;
         if ( (::stat( ph.c_str(), &path_stat )) != 0 )
- return std::make_pair( errno, false );
- return std::make_pair( 0, S_ISDIR( path_stat.st_mode )
+ return std::make_pair( error_code( errno, system_category ), false );
+ return std::make_pair( error_code(), S_ISDIR( path_stat.st_mode )
           ? is_empty_directory( ph )
           : path_stat.st_size == 0 );
       }
@@ -974,9 +1014,9 @@
         struct stat s1;
         int e1( ::stat( ph1.c_str(), &s1 ) );
         if ( e1 != 0 || e2 != 0 )
- return std::make_pair( e1 != 0 && e2 != 0 ? errno : 0, false );
+ return std::make_pair( error_code( e1 != 0 && e2 != 0 ? errno : 0, system_category ), false );
         // at this point, both stats are known to be valid
- return std::make_pair( 0,
+ return std::make_pair( error_code(),
             s1.st_dev == s2.st_dev
             && s1.st_ino == s2.st_ino
             // According to the POSIX stat specs, "The st_ino and st_dev fields
@@ -991,10 +1031,10 @@
       {
         struct stat path_stat;
         if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( errno, 0 );
+ return std::make_pair( error_code( errno, system_category ), 0 );
         if ( !S_ISREG( path_stat.st_mode ) )
- return std::make_pair( EPERM, 0 );
- return std::make_pair( 0,
+ return std::make_pair( error_code( EPERM, system_category ), 0 );
+ return std::make_pair( error_code(),
           static_cast<boost::uintmax_t>(path_stat.st_size) );
       }
 
@@ -1005,13 +1045,13 @@
         space_pair result;
         if ( ::BOOST_STATVFS( ph.c_str(), &vfs ) != 0 )
         {
- result.first = errno;
+ result.first = error_code( errno, system_category );
           result.second.capacity = result.second.free
             = result.second.available = 0;
         }
         else
         {
- result.first = 0;
+ result.first = error_code();
           result.second.capacity
             = static_cast<boost::uintmax_t>(vfs.f_blocks) * BOOST_STATVFS_F_FRSIZE;
           result.second.free
@@ -1027,22 +1067,23 @@
       {
         struct stat path_stat;
         if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( errno, 0 );
- return std::make_pair( 0, path_stat.st_mtime );
+ return std::make_pair( error_code( errno, system_category ), 0 );
+ return std::make_pair( error_code(), path_stat.st_mtime );
       }
 
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       last_write_time_api( const std::string & ph, std::time_t new_value )
       {
         struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 ) return errno;
+ if ( ::stat( ph.c_str(), &path_stat ) != 0 )
+ return error_code( errno, system_category );
         ::utimbuf buf;
         buf.actime = path_stat.st_atime; // utime() updates access time too:-(
         buf.modtime = new_value;
- return ::utime( ph.c_str(), &buf ) != 0 ? errno : 0;
+ return error_code( ::utime( ph.c_str(), &buf ) != 0 ? errno : 0, system_category );
       }
 
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       get_current_path_api( std::string & ph )
       {
         for ( long path_max = 32;; path_max *=2 ) // loop 'til buffer large enough
@@ -1056,7 +1097,7 @@
 # if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
               && errno != 0
 # endif
- ) return errno;
+ ) return error_code( errno, system_category );
           }
           else
           {
@@ -1064,38 +1105,46 @@
             break;
           }
         }
- return 0;
+ return error_code();
+ }
+
+ BOOST_FILESYSTEM_DECL error_code
+ set_current_path_api( const std::string & ph )
+ {
+ return error_code( ::chdir( ph.c_str() )
+ ? errno : 0, system_category );
       }
 
       BOOST_FILESYSTEM_DECL fs::detail::query_pair
       create_directory_api( const std::string & ph )
       {
         if ( ::mkdir( ph.c_str(), S_IRWXU|S_IRWXG|S_IRWXO ) == 0 )
- { return std::make_pair( 0, true ); }
- system_error_type ec=errno, dummy;
+ { return std::make_pair( error_code(), true ); }
+ int ec=errno;
+ error_code dummy;
         if ( ec != EEXIST
           || !fs::is_directory( status_api( ph, dummy ) ) )
- { return std::make_pair( ec, false ); }
- return std::make_pair( 0, false );
+ { return std::make_pair( error_code( ec, system_category ), false ); }
+ return std::make_pair( error_code(), false );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       create_hard_link_api( const std::string & to_ph,
           const std::string & from_ph )
       {
- return ::link( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno;
+ return error_code( ::link( to_ph.c_str(), from_ph.c_str() ) == 0
+ ? 0 : errno, system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       create_symlink_api( const std::string & to_ph,
           const std::string & from_ph )
       {
- return ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno;
+ return error_code( ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0
+ ? 0 : errno, system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       remove_api( const std::string & ph )
       {
 # if defined(__QNXNTO__) || (defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)))
@@ -1117,23 +1166,23 @@
           // shall fail and set errno to EEXIST or ENOTEMPTY."
           // Linux uses ENOTEMPTY, Solaris uses EEXIST.
           if ( error == EEXIST ) error = ENOTEMPTY;
- return error;
+ return error_code( error, system_category );
         }
- return 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       rename_api( const std::string & from, const std::string & to )
       {
         // POSIX is too permissive so must check
- fs::system_error_type dummy;
+ error_code dummy;
         if ( fs::exists( status_api( to, dummy ) ) )
- return EEXIST;
- return std::rename( from.c_str(), to.c_str() ) != 0
- ? errno : 0;
+ return error_code( EEXIST, system_category );
+ return error_code( std::rename( from.c_str(), to.c_str() ) != 0
+ ? errno : 0, system_category );
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       copy_file_api( const std::string & from_file_ph,
         const std::string & to_file_ph )
       {
@@ -1150,7 +1199,7 @@
                                 from_stat.st_mode )) < 0 )
         {
           if ( infile >= 0 ) ::close( infile );
- return errno;
+ return error_code( errno, system_category );
         }
 
         ssize_t sz, sz_read=1, sz_write;
@@ -1175,13 +1224,12 @@
         if ( ::close( infile) < 0 ) sz_read = -1;
         if ( ::close( outfile) < 0 ) sz_read = -1;
 
- return sz_read < 0 ? errno : 0;
+ return error_code( sz_read < 0 ? errno : 0, system_category );
       }
-
+
       // this code is based on Stevens and Rago, Advanced Programming in the
       // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49
- fs::system_error_type
- path_max( std::size_t & result )
+ error_code path_max( std::size_t & result )
       {
 # ifdef PATH_MAX
         static std::size_t max = PATH_MAX;
@@ -1196,40 +1244,42 @@
           {
             if ( errno == 0 ) // indeterminate
               max = 4096; // guess
- else return errno;
+ else return error_code( errno, system_category );
           }
           else max = static_cast<std::size_t>( tmp + 1 ); // relative root
         }
         result = max;
- return 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_first( void *& handle, void *& buffer,
         const std::string & dir, std::string & target,
         file_status &, file_status & )
       {
- static const std::string dummy_first_name( "." );
- if ( (handle = ::opendir( dir.c_str() )) == 0 ) return errno;
- target = dummy_first_name;
+ if ( (handle = ::opendir( dir.c_str() )) == 0 )
+ return error_code( errno, system_category );
+ target = std::string( "." ); // string was static but caused trouble
+ // when iteration called from dtor, after
+ // static had already been destroyed
         std::size_t path_size;
- fs::system_error_type ec = path_max( path_size );
+ error_code ec = path_max( path_size );
         if ( ec ) return ec;
         dirent de;
         buffer = std::malloc( (sizeof(dirent) - sizeof(de.d_name))
           + path_size + 1 ); // + 1 for "/0"
- return buffer == 0 ? ENOMEM : 0;
+ return error_code();
       }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_close( void *& handle, void*& buffer )
       {
         std::free( buffer );
         buffer = 0;
- if ( handle == 0 ) return 0;
+ if ( handle == 0 ) return error_code();
         DIR * h( static_cast<DIR*>(handle) );
         handle = 0;
- return ::closedir( h ) == 0 ? 0 : errno;
+ return error_code( ::closedir( h ) == 0 ? 0 : errno, system_category );
       }
 
       // warning: the only dirent member updated is d_name
@@ -1242,7 +1292,7 @@
           && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
           && defined(_SC_THREAD_SAFE_FUNCTIONS) \
           && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0) \
- && (!defined(__HP_aCC) || (defined(__HP_aCC) && defined(_REENTRANT)))
+ && (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT)))
           if ( ::sysconf( _SC_THREAD_SAFE_FUNCTIONS ) >= 0 )
             { return ::readdir_r( dirp, entry, result ); }
     # endif
@@ -1256,7 +1306,7 @@
           return 0;
         }
 
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
       dir_itr_increment( void *& handle, void *& buffer,
         std::string & target, file_status & sf, file_status & symlink_sf )
       {
@@ -1265,16 +1315,16 @@
         dirent * result;
         int return_code;
         if ( (return_code = readdir_r_simulator( static_cast<DIR*>(handle),
- entry, &result )) != 0 ) return errno;
+ entry, &result )) != 0 ) return error_code( errno, system_category );
         if ( result == 0 ) return dir_itr_close( handle, buffer );
         target = entry->d_name;
 # ifdef BOOST_FILESYSTEM_STATUS_CACHE
- if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value
+ if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value
         {
           sf = symlink_sf = fs::file_status(fs::status_unknown);
         }
- else // filesystem supplies d_type value
- {
+ else // filesystem supplies d_type value
+ {
           if ( entry->d_type == DT_DIR )
             sf = symlink_sf = fs::file_status( fs::directory_file );
           else if ( entry->d_type == DT_REG )
@@ -1285,11 +1335,11 @@
             symlink_sf = fs::file_status( fs::symlink_file );
           }
           else sf = symlink_sf = fs::file_status( fs::status_unknown );
- }
+ }
 # else
         sf = symlink_sf = fs::file_status( fs::status_unknown );
 # endif
- return 0;
+ return error_code();
       }
 
 # endif

Modified: branches/release/libs/filesystem/src/path.cpp
==============================================================================
--- branches/release/libs/filesystem/src/path.cpp (original)
+++ branches/release/libs/filesystem/src/path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
 // path.cpp ----------------------------------------------------------------//
 
 // Copyright 2005 Beman Dawes
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 // See library home page at http://www.boost.org/libs/filesystem
 
@@ -21,7 +21,8 @@
 #include <boost/scoped_array.hpp>
 
 #include <locale>
-#include <cerrno>
+#include <boost/cerrno.hpp>
+#include <boost/system/error_code.hpp>
 
 namespace
 {
@@ -29,7 +30,6 @@
   // so a static at function scope is used to ensure that exceptions can be
   // caught. (A previous version was at namespace scope, so initialization
   // occurred before main(), preventing exceptions from being caught.)
-
   std::locale & loc()
   {
     // ISO C calls this "the locale-specific native environment":
@@ -66,10 +66,45 @@
 
     void wpath_traits::imbue( const std::locale & new_loc )
     {
- if ( locked ) boost::throw_exception( filesystem_wpath_error(
- "boost::filesystem::wpath_traits::imbue() after lockdown", 0 ) );
+ if ( locked ) boost::throw_exception(
+ wfilesystem_error(
+ "boost::filesystem::wpath_traits::imbue() after lockdown",
+ make_error_code( system::posix::not_supported ) ) );
       imbue( new_loc, std::nothrow );
     }
+
+ //namespace detail
+ //{
+ // BOOST_FILESYSTEM_DECL
+ // const char * what( const char * sys_err_what,
+ // const path & path1, const path & path2, std::string & target)
+ // {
+ // try
+ // {
+ // if ( target.empty() )
+ // {
+ // target = sys_err_what;
+ // if ( !path1.empty() )
+ // {
+ // target += ": \"";
+ // target += path1.file_string();
+ // target += "\"";
+ // }
+ // if ( !path2.empty() )
+ // {
+ // target += ", \"";
+ // target += path2.file_string();
+ // target += "\"";
+ // }
+ // }
+ // return target.c_str();
+ // }
+ // catch (...)
+ // {
+ // return sys_err_what;
+ // }
+ // }
+ //}
     
 # ifdef BOOST_POSIX_API
 
@@ -89,9 +124,9 @@
       if ( converter()->out(
         state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
         work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception( boost::filesystem::filesystem_wpath_error(
+ boost::throw_exception( boost::filesystem::wfilesystem_error(
           "boost::filesystem::wpath::to_external conversion error",
- ph, EINVAL ) );
+ ph, system::error_code( system::posix::invalid_argument, system::system_category ) ) );
       *to_next = '\0';
       return external_string_type( work.get() );
     }
@@ -108,8 +143,9 @@
       if ( converter()->in(
         state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
         work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception( boost::filesystem::filesystem_wpath_error(
- "boost::filesystem::wpath::to_internal conversion error", EINVAL ) );
+ boost::throw_exception( boost::filesystem::wfilesystem_error(
+ "boost::filesystem::wpath::to_internal conversion error",
+ system::error_code( system::posix::invalid_argument, system::system_category ) ) );
       *to_next = L'\0';
       return internal_string_type( work.get() );
     }

Modified: branches/release/libs/filesystem/src/portability.cpp
==============================================================================
--- branches/release/libs/filesystem/src/portability.cpp (original)
+++ branches/release/libs/filesystem/src/portability.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
 // portability.cpp ---------------------------------------------------------//
 
-// Copyright © 2002-2005 Beman Dawes
+// Copyright 2002-2005 Beman Dawes
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
 // at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp
==============================================================================
--- branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp (original)
+++ branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,8 @@
 // Copyright © 2001 Ronald Garcia, Indiana University (garcia_at_[hidden])
-// Andrew Lumsdaine, Indiana University (lums_at_[hidden]). Permission to copy,
-// use, modify, sell and distribute this software is granted provided this
-// copyright notice appears in all copies. This software is provided "as is"
-// without express or implied warranty, and with no claim as to its suitability
-// for any purpose.
+// Andrew Lumsdaine, Indiana University (lums_at_[hidden]).
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See http://www.boost.org/LICENSE_1_0.txt)
 
 #ifndef BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP
 #define BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP

Modified: branches/release/libs/filesystem/test/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/test/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/test/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,49 +1,48 @@
 # Boost Filesystem Library test Jamfile
 
-# (C) Copyright Beman Dawes 2002, 2006
-
+# (C) Copyright Beman Dawes 2002-2006
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
 
-# See library home page at http://www.boost.org/libs/filesystem
-
 project
- : requirements <library>/boost/filesystem//boost_filesystem
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
       <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<asynch-exceptions>on
     ;
 
    test-suite "filesystem" :
        [ run path_test.cpp
          : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
- [ run path_test.cpp
- : : : <define>BOOST_FILESYSTEM_DYN_LINK
+ [ run path_test.cpp ../../system/build
+ : : : <define>BOOST_FILESYSTEM_DYN_LINK <define>BOOST_SYSTEM_DYN_LINK
                : path_test_dll
        ]
        [ run operations_test.cpp
          : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
- [ run operations_test.cpp
- : : : <define>BOOST_FILESYSTEM_DYN_LINK
- : operations_test_dll
+ [ run operations_test.cpp ../../system/build
+ : : : <define>BOOST_FILESYSTEM_DYN_LINK <define>BOOST_SYSTEM_DYN_LINK
+ : operations_test_dll
        ]
        [ run fstream_test.cpp
          : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
        [ run convenience_test.cpp
          : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
        [ run large_file_support_test.cpp
          : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
        [ run wide_test.cpp
           : : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
        ]
 
        [ compile ../example/mbcopy.cpp ]

Modified: branches/release/libs/filesystem/test/convenience_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/convenience_test.cpp (original)
+++ branches/release/libs/filesystem/test/convenience_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -18,6 +18,7 @@
 #include <boost/filesystem/convenience.hpp>
 namespace fs = boost::filesystem;
 using fs::path;
+namespace sys = boost::system;
 
 #include <boost/test/minimal.hpp>
 #include <boost/bind.hpp>
@@ -35,24 +36,25 @@
 namespace
 {
   template< typename F >
- bool throws_fs_error( F func, fs::errno_type ec = 0 )
+ bool throws_fs_error( F func )
   {
     try { func(); }
 
- catch ( const fs::filesystem_error & ex )
+ catch ( const fs::filesystem_error & )
     {
- if ( ec == 0
- || ec == fs::lookup_error_code(ex.system_error()) ) return true;
- std::cout
- << "exception reports " << fs::lookup_error_code(ex.system_error())
- << ", should be " << ec
- << "\n system_error() is " << ex.system_error()
- << std::endl;
- return false;
+ return true;
     }
     return false;
   }
+
+ void create_recursive_iterator( const fs::path & ph )
+ {
+ fs::recursive_directory_iterator it( ph );
+ }
 }
+
+// --------------------------------------------------------------------------//
+
 int test_main( int, char*[] )
 {
   path::default_name_check( fs::no_check ); // names below not valid on all O/S's
@@ -70,13 +72,13 @@
   BOOST_CHECK( fs::exists( "xx" ) );
   BOOST_CHECK( fs::is_directory( "xx" ) );
 
- BOOST_CHECK( fs::create_directories( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::create_directories( "xx/yy/zz" ) );
   BOOST_CHECK( fs::exists( "xx" ) );
- BOOST_CHECK( fs::exists( "xx/ww" ) );
- BOOST_CHECK( fs::exists( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::exists( "xx/yy" ) );
+ BOOST_CHECK( fs::exists( "xx/yy/zz" ) );
   BOOST_CHECK( fs::is_directory( "xx" ) );
- BOOST_CHECK( fs::is_directory( "xx/ww" ) );
- BOOST_CHECK( fs::is_directory( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::is_directory( "xx/yy" ) );
+ BOOST_CHECK( fs::is_directory( "xx/yy/zz" ) );
 
   path is_a_file( "xx/uu" );
   {
@@ -116,15 +118,81 @@
   // see the rationale in html docs for explanation why this works
   BOOST_CHECK( fs::change_extension("", ".png").string() == ".png" );
 
-// what() tests --------------------------------------------------------------//
+// recursive_directory_iterator tests ----------------------------------------//
+
+ sys::error_code ec;
+ fs::recursive_directory_iterator it( "/no-such-path", ec );
+ BOOST_CHECK( ec );
+ BOOST_CHECK( throws_fs_error(
+ boost::bind( create_recursive_iterator, "/no-such-path" ) ) );
+
+ fs::remove( "xx/uu" );
+
+#ifdef BOOST_WINDOWS_API
+ // These tests depends on ordering of directory entries, and that's guaranteed
+ // on Windows but not necessarily on other operating systems
+ {
+ std::ofstream f( "xx/yya" );
+ BOOST_CHECK( !!f );
+ }
+
+ for ( it = fs::recursive_directory_iterator( "xx" );
+ it != fs::recursive_directory_iterator(); ++it )
+ { std::cout << *it << '\n'; }
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ BOOST_CHECK( it.level() == 0 );
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yy/zz" );
+ BOOST_CHECK( it.level() == 1 );
+ it.pop();
+ BOOST_CHECK( it->path() == "xx/yya" );
+ BOOST_CHECK( it.level() == 0 );
+ it++;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ it.no_push();
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yya" );
+ ++it;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ fs::remove( "xx/yya" );
+#endif
+
+ it = fs::recursive_directory_iterator( "xx/yy/zz" );
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ BOOST_CHECK( it.level() == 0 );
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yy/zz" );
+ BOOST_CHECK( it.level() == 1 );
+ it++;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ it.no_push();
+ ++it;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ ++it;
+ it.pop();
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+
+
+ // nothrow wrong. see imp. Make sure failed basic_directory_iterator
+ // ctor creates the end iterator.
+
 
- try { throw fs::filesystem_path_error( "abc", "p1", "p2", 0 ); }
- catch ( const fs::filesystem_path_error & ex )
- {
-# if !defined( BOOST_MSVC ) || BOOST_MSVC >= 1300 // > VC++ 7.0
- BOOST_CHECK( fs::what(ex) == std::string( "abc: \"p1\", \"p2\"" ) );
-# endif
- }
 
 
   return 0;

Modified: branches/release/libs/filesystem/test/fstream_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/fstream_test.cpp (original)
+++ branches/release/libs/filesystem/test/fstream_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -37,6 +37,8 @@
 
 namespace
 {
+ bool cleanup = true;
+
   template< class Path >
   void test( const Path & p )
   {
@@ -141,12 +143,16 @@
       BOOST_CHECK( tfs.is_open() );
     }
 # endif
+
+ if ( cleanup ) fs::remove( p );
+
   } // test
 } // unnamed namespace
 
-int test_main( int, char*[] )
+int test_main( int argc, char*[] )
 {
-
+ if ( argc > 1 ) cleanup = false;
+
   // test fs::path
   std::cout << "path tests:\n";
   test( fs::path( "fstream_test_foo" ) );

Modified: branches/release/libs/filesystem/test/lpath.hpp
==============================================================================
--- branches/release/libs/filesystem/test/lpath.hpp (original)
+++ branches/release/libs/filesystem/test/lpath.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -34,7 +34,7 @@
     static size_t length(const char_type* s)
     { const char_type* b=s; for(;*s!=0L;++s){} return s-b; }
  
- static const char_type* find(const char_type* s, size_t n, const char_type& a)
+ static const char_type* find(const char_type* /*s*/, size_t /*n*/, const char_type& /*a*/)
     { return 0; }
 
     // copy semantics will do for wide_test

Modified: branches/release/libs/filesystem/test/operations_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/operations_test.cpp (original)
+++ branches/release/libs/filesystem/test/operations_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
 // Boost operations_test.cpp -----------------------------------------------//
 
 // Copyright Beman Dawes 2002.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 // See library home page at http://www.boost.org/libs/filesystem
 
@@ -16,14 +16,16 @@
 
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/convenience.hpp>
-#include <boost/filesystem/cerrno.hpp>
+#include <boost/cerrno.hpp>
 namespace fs = boost::filesystem;
 
 #include <boost/config.hpp>
 #include <boost/test/minimal.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/bind.hpp>
-using boost::bind;
+//#include <boost/concept_check.hpp>
+
+using boost::system::error_code;
+using boost::system::system_category;
+using boost::system::system_error;
 
 #include <fstream>
 #include <iostream>
@@ -51,21 +53,29 @@
     using ::difftime; using ::time; using ::tm; using ::mktime; using ::system; }
 # endif
 
-#define CHECK_EXCEPTION(b,e) throws_fs_error(b,e,__LINE__)
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+#endif
+
+#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__)
 
 namespace
 {
+ typedef int errno_t;
+ std::string platform( BOOST_PLATFORM );
   bool report_throws;
   fs::directory_iterator end_itr;
 
+ unsigned short language_id; // 0 except for Windows
+
   const char * temp_dir_name = "temp_fs_test_dir";
 
   void create_file( const fs::path & ph, const std::string & contents )
   {
     std::ofstream f( ph.file_string().c_str() );
     if ( !f )
- throw fs::filesystem_path_error( "operations_test create_file",
- ph, errno );
+ throw fs::filesystem_error( "operations_test create_file",
+ ph, error_code(errno, system_category) );
     if ( !contents.empty() ) f << contents;
   }
 
@@ -73,34 +83,34 @@
   {
     std::ifstream f( ph.file_string().c_str() );
     if ( !f )
- throw fs::filesystem_path_error( "operations_test verify_file",
- ph, errno );
+ throw fs::filesystem_error( "operations_test verify_file",
+ ph, error_code(errno, system_category) );
     std::string contents;
     f >> contents;
     if ( contents != expected )
- throw fs::filesystem_path_error( "operations_test verify_file contents \""
- + contents + "\" != \"" + expected + "\"", ph, 0 );
+ throw fs::filesystem_error( "operations_test verify_file contents \""
+ + contents + "\" != \"" + expected + "\"", ph, error_code() );
   }
 
   template< typename F >
- bool throws_fs_error( F func, fs::errno_type ec, int line )
+ bool throws_fs_error( F func, errno_t en, int line )
   {
     try { func(); }
 
- catch ( const fs::filesystem_path_error & ex )
+ catch ( const fs::filesystem_error & ex )
     {
       if ( report_throws )
       {
         // use the what() convenience function to display exceptions
- std::cout << fs::what(ex) << "\n";
+ std::cout << "\n" << ex.what() << "\n";
       }
- if ( ec == 0
- || ec == fs::lookup_error_code(ex.system_error()) ) return true;
+ if ( en == 0
+ || en == ex.code().default_error_condition().value() ) return true;
       std::cout
         << "\nWarning: line " << line
- << " exception reports " << fs::lookup_error_code(ex.system_error())
- << ", should be " << ec
- << "\n system_error() is " << ex.system_error()
+ << " exception reports default_error_condition().value() " << ex.code().default_error_condition().value()
+ << ", should be " << en
+ << "\n value() is " << ex.code().value()
         << std::endl;
       return true;
     }
@@ -125,6 +135,125 @@
     fs::copy_file( a, a );
   }
 
+ void exception_tests()
+ {
+ bool exception_thrown;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( std::runtime_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ BOOST_CHECK( std::strcmp( x.what(),
+ "boost::filesystem::create_directory" ) == 0 );
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( system_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ BOOST_CHECK( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified" ) == 0 );
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( fs::filesystem_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ {
+ bool ok ( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
+ BOOST_CHECK( ok );
+ if ( !ok )
+ {
+ std::cout << "what returns \"" << x.what() << "\"" << std::endl;
+ }
+ }
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( const fs::filesystem_error & x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ {
+ bool ok ( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
+ BOOST_CHECK( ok );
+ if ( !ok )
+ {
+ std::cout << "what returns \"" << x.what() << "\"" << std::endl;
+ }
+ }
+ }
+ BOOST_CHECK( exception_thrown );
+ }
+
+ void bad_file_size()
+ {
+ fs::file_size( " No way, Jose" );
+ }
+
+ void bad_directory_size()
+ {
+ fs::file_size( fs::current_path() );
+ }
+
+ fs::path bad_create_directory_path;
+ void bad_create_directory()
+ {
+ fs::create_directory( bad_create_directory_path );
+ }
+
+ void bad_equivalent()
+ {
+ fs::equivalent( "no-such-path", "another-not-present-path" );
+ }
+
+ fs::path bad_remove_dir;
+ void bad_remove()
+ {
+ fs::remove( bad_remove_dir );
+ }
+
+ class renamer
+ {
+ public:
+ renamer( const fs::path & p1, const fs::path & p2 )
+ : from(p1), to(p2) {}
+ void operator()()
+ {
+ fs::rename( from, to );
+ }
+ private:
+ fs::path from;
+ fs::path to;
+ };
+
 } // unnamed namespace
 
 // test_main ---------------------------------------------------------------//
@@ -133,8 +262,6 @@
 {
   if ( argc > 1 && *argv[1]=='-' && *(argv[1]+1)=='t' ) report_throws = true;
 
- std::string platform( BOOST_PLATFORM );
-
   // The choice of platform is make at runtime rather than compile-time
   // so that compile errors for all platforms will be detected even though
   // only the current platform is runtime tested.
@@ -142,12 +269,19 @@
     platform = "POSIX";
 # elif defined( BOOST_WINDOWS_API )
     platform = "Windows";
+# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+ language_id = ::GetUserDefaultUILanguage();
+# else
+ language_id = 0x0409; // Assume US English
+# endif
 # else
     platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" )
                ? "Windows"
                : "POSIX";
 # endif
- std::cout << "API is " << platform << '\n';
+ std::cout << "API is " << platform << std::endl;
+
+ exception_tests();
 
   std::cout << "\ninitial_path<path>().string() is\n \""
     << fs::initial_path<fs::path>().string()
@@ -239,35 +373,21 @@
   BOOST_CHECK( !fs::exists( dir ) );
 
   // the bound functions should throw, so CHECK_EXCEPTION() should return true
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), ng ), ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_file_size, ENOENT ) );
 
   // test path::exception members
   try { fs::file_size( ng ); } // will throw
 
- catch ( const fs::filesystem_path_error & ex )
+ catch ( const fs::filesystem_error & ex )
   {
     BOOST_CHECK( ex.path1().string() == " no-way, Jose" );
   }
-
- BOOST_CHECK( fs::create_directory( dir ) );
-
   // several functions give unreasonable results if uintmax_t isn't 64-bits
   std::cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n';
   BOOST_CHECK( sizeof( boost::uintmax_t ) >= 8 );
 
- // make some reasonable assuptions for testing purposes
- fs::space_info spi( fs::space( dir ) );
- BOOST_CHECK( spi.capacity > 1000000 );
- BOOST_CHECK( spi.free > 1000 );
- BOOST_CHECK( spi.capacity > spi.free );
- BOOST_CHECK( spi.free >= spi.available );
-
- // it is convenient to display space, but older VC++ versions choke
-# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
- std::cout << " capacity = " << spi.capacity << '\n';
- std::cout << " free = " << spi.free << '\n';
- std::cout << "available = " << spi.available << '\n';
-# endif
+ // create a directory, then check it for consistency
+ BOOST_CHECK( fs::create_directory( dir ) );
 
   BOOST_CHECK( fs::exists( dir ) );
   BOOST_CHECK( BOOST_FS_IS_EMPTY( dir ) );
@@ -282,11 +402,41 @@
   BOOST_CHECK( !fs::is_other( stat ) );
   BOOST_CHECK( !fs::is_symlink( stat ) );
 
+ // set the current directory, then check it for consistency
+ fs::path original_dir = fs::current_path<fs::path>();
+ BOOST_CHECK( dir != original_dir );
+ fs::current_path( dir );
+ BOOST_CHECK( fs::current_path<fs::path>() == dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != original_dir );
+ fs::current_path( original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() == original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != dir );
+ // make sure the overloads work
+ fs::current_path( dir.string().c_str() );
+ BOOST_CHECK( fs::current_path<fs::path>() == dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != original_dir );
+ fs::current_path( original_dir.string() );
+ BOOST_CHECK( fs::current_path<fs::path>() == original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != dir );
+
+ // make some reasonable assuptions for testing purposes
+ fs::space_info spi( fs::space( dir ) );
+ BOOST_CHECK( spi.capacity > 1000000 );
+ BOOST_CHECK( spi.free > 1000 );
+ BOOST_CHECK( spi.capacity > spi.free );
+ BOOST_CHECK( spi.free >= spi.available );
+
+ // it is convenient to display space, but older VC++ versions choke
+# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
+ std::cout << " capacity = " << spi.capacity << '\n';
+ std::cout << " free = " << spi.free << '\n';
+ std::cout << "available = " << spi.available << '\n';
+# endif
+
   if ( platform == "Windows" )
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), dir ),
- ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_directory_size, ENOENT ) );
   else
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), dir ), 0 ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_directory_size, 0 ) );
   BOOST_CHECK( !fs::create_directory( dir ) );
 
   BOOST_CHECK( !fs::is_symlink( dir ) );
@@ -301,7 +451,7 @@
   BOOST_CHECK( fs::is_directory( d1 ) );
   BOOST_CHECK( BOOST_FS_IS_EMPTY( d1 ) );
 
- boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >();
+// boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >();
 
   bool dir_itr_exception(false);
   try { fs::directory_iterator it( "" ); }
@@ -316,10 +466,10 @@
   dir_itr_exception = false;
   try
   {
- fs::system_error_type ec(0);
+ error_code ec;
     fs::directory_iterator it( "nosuchdirectory", ec );
- BOOST_CHECK( ec != 0 );
- BOOST_CHECK( ec == fs::detail::not_found_error );
+ BOOST_CHECK( ec );
+ BOOST_CHECK( ec == fs::detail::not_found_error() );
   }
   catch ( const fs::filesystem_error & ) { dir_itr_exception = true; }
   BOOST_CHECK( !dir_itr_exception );
@@ -426,8 +576,8 @@
   BOOST_CHECK( fs::is_regular( file_ph ) );
   BOOST_CHECK( BOOST_FS_IS_EMPTY( file_ph ) );
   BOOST_CHECK( fs::file_size( file_ph ) == 0 );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::create_directory),
- file_ph ), EEXIST ) );
+ bad_create_directory_path = file_ph;
+ BOOST_CHECK( CHECK_EXCEPTION( bad_create_directory, EEXIST ) );
   stat = fs::status( file_ph );
   BOOST_CHECK( fs::status_known( stat ) );
   BOOST_CHECK( fs::exists( stat ) );
@@ -447,9 +597,7 @@
   verify_file( file_ph, "foobar1" );
 
   // equivalence tests
- fs::path ng2("does_not_exist2");
- BOOST_CHECK( CHECK_EXCEPTION(
- bind( BOOST_BND(fs::equivalent), ng, ng2 ), ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_equivalent, ENOENT ) );
   BOOST_CHECK( fs::equivalent( file_ph, dir / "f1" ) );
   BOOST_CHECK( fs::equivalent( dir, d1 / ".." ) );
   BOOST_CHECK( !fs::equivalent( file_ph, dir ) );
@@ -483,10 +631,10 @@
     BOOST_CHECK( fs::equivalent( from_ph, file_ph ) );
   }
 
- fs::system_error_type ec(0);
+ error_code ec;
   BOOST_CHECK( fs::create_hard_link( fs::path("doesnotexist"),
- fs::path("shouldnotwork"), ec ) != 0 );
- BOOST_CHECK( ec != 0 );
+ fs::path("shouldnotwork"), ec ) );
+ BOOST_CHECK( ec );
 
   // symbolic link tests
   from_ph = dir / "f4";
@@ -518,9 +666,9 @@
     BOOST_CHECK( fs::is_symlink( stat ) );
   }
 
- ec = 0;
- BOOST_CHECK( fs::create_symlink( "doesnotexist", "", ec ) != 0 );
- BOOST_CHECK( ec != 0 );
+ ec = error_code();
+ BOOST_CHECK( fs::create_symlink( "doesnotexist", "", ec ) );
+ BOOST_CHECK( ec );
 
   // there was an inital bug in directory_iterator that caused premature
   // close of an OS handle. This block will detect regression.
@@ -545,29 +693,30 @@
   // [case 1] make sure can't rename() a non-existent file
   BOOST_CHECK( !fs::exists( d1 / "f99" ) );
   BOOST_CHECK( !fs::exists( d1 / "f98" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), d1 / "f99", d1 / "f98" ),
- ENOENT ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), fs::path(""), d1 / "f98" ),
- ENOENT ) );
+ renamer n1a( d1 / "f99", d1 / "f98" );
+ BOOST_CHECK( CHECK_EXCEPTION( n1a, ENOENT ) );
+ renamer n1b( fs::path(""), d1 / "f98" );
+ BOOST_CHECK( CHECK_EXCEPTION( n1b, ENOENT ) );
 
   // [case 2] rename() target.empty()
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), file_ph, "" ),
- ENOENT ) );
+ renamer n2( file_ph, "" );
+ BOOST_CHECK( CHECK_EXCEPTION( n2, ENOENT ) );
 
   // [case 3] make sure can't rename() to an existent file or directory
   BOOST_CHECK( fs::exists( dir / "f1" ) );
   BOOST_CHECK( fs::exists( d1 / "f2" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename),
- dir / "f1", d1 / "f2" ), EEXIST ) );
+ renamer n3a( dir / "f1", d1 / "f2" );
+ BOOST_CHECK( CHECK_EXCEPTION( n3a, EEXIST ) );
   // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST,
   // so we don't verify error type on the above test.
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), dir, d1 ), 0 ) );
+ renamer n3b( dir, d1 );
+ BOOST_CHECK( CHECK_EXCEPTION( n3b, 0 ) );
 
   // [case 4A] can't rename() file to a nonexistent parent directory
   BOOST_CHECK( !fs::is_directory( dir / "f1" ) );
   BOOST_CHECK( !fs::exists( dir / "d3/f3" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), dir / "f1", dir / "d3/f3" ),
- ENOENT ) );
+ renamer n4a( dir / "f1", dir / "d3/f3" );
+ BOOST_CHECK( CHECK_EXCEPTION( n4a, ENOENT ) );
 
   // [case 4B] rename() file in same directory
   BOOST_CHECK( fs::exists( d1 / "f2" ) );
@@ -593,8 +742,8 @@
   BOOST_CHECK( fs::exists( d1 ) );
   BOOST_CHECK( !fs::exists( dir / "d3/d5" ) );
   BOOST_CHECK( !fs::exists( dir / "d3" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), d1, dir / "d3/d5" ),
- ENOENT ) );
+ renamer n5a( d1, dir / "d3/d5" );
+ BOOST_CHECK( CHECK_EXCEPTION( n5a, ENOENT ) );
 
   // [case 5B] rename() on directory
   fs::path d3( dir / "d3" );
@@ -643,7 +792,8 @@
   BOOST_CHECK( fs::exists( d1 ) );
   BOOST_CHECK( fs::is_directory( d1 ) );
   BOOST_CHECK( BOOST_FS_IS_EMPTY( d1 ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::remove), dir ), ENOTEMPTY ) );
+ bad_remove_dir = dir;
+ BOOST_CHECK( CHECK_EXCEPTION( bad_remove, ENOTEMPTY ) );
   BOOST_CHECK( fs::remove( d1 ) );
   BOOST_CHECK( !fs::exists( d1 ) );
 

Modified: branches/release/libs/filesystem/test/path_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/path_test.cpp (original)
+++ branches/release/libs/filesystem/test/path_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -180,18 +180,23 @@
   void exception_tests()
   {
     const std::string str_1("string-1");
- try { throw fs::filesystem_error( str_1, 12345 ); }
+ boost::system::error_code ec( 12345, boost::system::system_category);
+ try { throw fs::filesystem_error( str_1, ec ); }
     catch ( const fs::filesystem_error & ex )
     {
- BOOST_CHECK( ex.what() == str_1 );
- BOOST_CHECK( ex.system_error() == 12345 );
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_CHECK( std::strcmp( ex.what(),
+ // "string-1: Unknown error" ) == 0 );
+ BOOST_CHECK( ex.code() == ec );
     }
 
- try { throw fs::filesystem_path_error( str_1, "p1", "p2", 12345 ); }
- catch ( const fs::filesystem_path_error & ex )
+ try { throw fs::filesystem_error( str_1, "p1", "p2", ec ); }
+ catch ( const fs::filesystem_error & ex )
     {
- BOOST_CHECK( ex.what() == str_1 );
- BOOST_CHECK( ex.system_error() == 12345 );
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_CHECK( std::strcmp( ex.what(),
+ // "string-1: Unknown error: \"p1\", \"p2\"" ) == 0 );
+ BOOST_CHECK( ex.code() == ec );
       BOOST_CHECK( ex.path1().string() == "p1" );
       BOOST_CHECK( ex.path2().string() == "p2" );
     }

Modified: branches/release/libs/filesystem/test/wide_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/wide_test.cpp (original)
+++ branches/release/libs/filesystem/test/wide_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -38,6 +38,8 @@
 
 namespace
 {
+ bool cleanup = true;
+
   template< class Path >
   void create_file( const Path & ph, const std::string & contents )
   {
@@ -49,7 +51,8 @@
 # endif
     if ( !f )
       throw fs::basic_filesystem_error<Path>( "wide_test create_file",
- ph, errno );
+ ph,
+ boost::system::error_code( errno, boost::system::errno_ecat ) );
     if ( !contents.empty() ) f << contents;
   }
 
@@ -89,6 +92,11 @@
       ++count;
     }
     BOOST_CHECK( count == 1 );
+ if ( cleanup )
+ {
+ fs::remove( dir / file );
+ fs::remove( dir );
+ }
   }
 
   // test boost::detail::utf8_codecvt_facet - even though it is not used by
@@ -113,9 +121,11 @@
 
 // test_main ---------------------------------------------------------------//
 
-int test_main( int argc, char * argv[] )
+int test_main( int argc, char * /*argv*/[] )
 {
 
+ if ( argc > 1 ) cleanup = false;
+
   // So that tests are run with known encoding, use Boost UTF-8 codecvt
   std::locale global_loc = std::locale();
   std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );

Modified: branches/release/tools/bcp/add_path.cpp
==============================================================================
--- branches/release/tools/bcp/add_path.cpp (original)
+++ branches/release/tools/bcp/add_path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -49,6 +49,8 @@
    //
    if(m_cvs_mode && !fs::exists(m_boost_path / p / "CVS/Entries"))
       return;
+ if(m_svn_mode && !fs::exists(m_boost_path / p / ".svn/entries"))
+ return;
    //
    // enermerate files and directories:
    //
@@ -75,7 +77,7 @@
    //
    // if the file does not exist in cvs then don't do anything with it:
    //
- if(m_cvs_mode && (m_cvs_paths.find(p) == m_cvs_paths.end()))
+ if((m_cvs_mode || m_svn_mode) && (m_cvs_paths.find(p) == m_cvs_paths.end()))
       return;
    //
    // if we've already seen the file return:

Modified: branches/release/tools/bcp/bcp.hpp
==============================================================================
--- branches/release/tools/bcp/bcp.hpp (original)
+++ branches/release/tools/bcp/bcp.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -20,6 +20,7 @@
    virtual void enable_list_mode() = 0;
    virtual void enable_summary_list_mode() = 0;
    virtual void enable_cvs_mode() = 0;
+ virtual void enable_svn_mode() = 0;
    virtual void enable_unix_lines() = 0;
    virtual void enable_scan_mode() = 0;
    virtual void enable_license_mode() = 0;

Modified: branches/release/tools/bcp/bcp.html
==============================================================================
--- branches/release/tools/bcp/bcp.html (original)
+++ branches/release/tools/bcp/bcp.html 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -3,7 +3,7 @@
    <head>
       <title>bcp</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <link rel="stylesheet" type="text/css" href="../../boost.css">
+ <link rel="stylesheet" type="text/css" href="../../doc/html/boostbook.css">
    </head>
    <body>
       <P>
@@ -16,7 +16,7 @@
                   <H1 align="center">The bcp utility</H1>
                </TD>
                <td width="50">
- <h3><a href="../../index.htm"><img height="45" width="43" alt="Boost.Regex Index" src="../../libs/regex/doc/uarrow.gif"
+ <h3><a href="../../index.htm"><img alt="Boost.Regex Index" src="../../doc/html/images/up.png"
                            border="0"></a></h3>
                </td>
             </TR>
@@ -81,8 +81,8 @@
       <P>Treats the module list as a list of (probably non-boost) files to scan for
          boost dependencies, the files listed in the module list are not copied (or
          listed), only the boost files upon which they depend.</P>
- <PRE>--cvs</PRE>
- <P>Only copy files under cvs version control.</P>
+ <PRE>--svn</PRE>
+ <P>Only copy files under svn version control.</P>
       <PRE>--unix-lines</PRE>
       <P>Make sure that all copied files use Unix style line endings.</P>
       <H4>module-list:&nbsp;</H4>
@@ -179,15 +179,15 @@
          <HR>
       <P></P>
       <P></P>
- <p>Revised&nbsp;
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 28 June 2004&nbsp;
- <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
- </p>
- <P><I>© Copyright <a href="mailto:jm_at_[hidden]">John Maddock</a>&nbsp;2003-4</I></P>
+ <p>Last revised $Date$</p>
+ <P><I>© Copyright John Maddock&nbsp;2003-7</I></P>
       <P align="left"><I>Distributed under the Boost Software License, Version 1.0.
        (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
        </I></P>
    </body>
 </html>
 
+
+
+
+

Modified: branches/release/tools/bcp/bcp_imp.cpp
==============================================================================
--- branches/release/tools/bcp/bcp_imp.cpp (original)
+++ branches/release/tools/bcp/bcp_imp.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -18,7 +18,7 @@
 #include <string>
 
 bcp_implementation::bcp_implementation()
- : m_list_mode(false), m_list_summary_mode(false), m_license_mode(false), m_cvs_mode(false), m_unix_lines(false), m_scan_mode(false), m_bsl_convert_mode(false), m_bsl_summary_mode(false)
+ : m_list_mode(false), m_list_summary_mode(false), m_license_mode(false), m_cvs_mode(false), m_svn_mode(false), m_unix_lines(false), m_scan_mode(false), m_bsl_convert_mode(false), m_bsl_summary_mode(false)
 {
 }
 
@@ -46,6 +46,11 @@
    m_cvs_mode = true;
 }
 
+void bcp_implementation::enable_svn_mode()
+{
+ m_svn_mode = true;
+}
+
 void bcp_implementation::enable_scan_mode()
 {
    m_scan_mode = true;
@@ -124,8 +129,13 @@
    // if m_cvs_mode is true:
    if(m_cvs_mode)
    {
+ std::cerr << "CAUTION: Boost is no longer in CVS, cvs mode may not work anymore!!!" << std::endl;
       scan_cvs_path(fs::path());
    }
+ if(m_svn_mode)
+ {
+ scan_svn_path(fs::path());
+ }
    //
    // if in license mode, try to load more/blanket_permission.txt
    //

Modified: branches/release/tools/bcp/bcp_imp.hpp
==============================================================================
--- branches/release/tools/bcp/bcp_imp.hpp (original)
+++ branches/release/tools/bcp/bcp_imp.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -51,6 +51,7 @@
    void enable_list_mode();
    void enable_summary_list_mode();
    void enable_cvs_mode();
+ void enable_svn_mode();
    void enable_unix_lines();
    void enable_scan_mode();
    void enable_license_mode();
@@ -64,6 +65,7 @@
 private:
    // internal helper functions:
    void scan_cvs_path(const fs::path& p);
+ void scan_svn_path(const fs::path& p);
    void add_path(const fs::path& p);
    void add_directory(const fs::path& p);
    void add_file(const fs::path& p);
@@ -83,6 +85,7 @@
    bool m_list_summary_mode; // list file summary only
    bool m_license_mode; // generate license information for files listed
    bool m_cvs_mode; // check cvs for files
+ bool m_svn_mode; // check svn for files
    bool m_unix_lines; // fix line endings
    bool m_scan_mode; // scan non-boost files.
    bool m_bsl_convert_mode; // try to convert to the BSL

Modified: branches/release/tools/bcp/file_types.cpp
==============================================================================
--- branches/release/tools/bcp/file_types.cpp (original)
+++ branches/release/tools/bcp/file_types.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -39,7 +39,7 @@
 
 bool bcp_implementation::is_binary_file(const fs::path& p)
 {
- if(m_cvs_mode)
+ if(m_cvs_mode || m_svn_mode)
    {
       std::map<fs::path, bool, path_less>::iterator pos = m_cvs_paths.find(p);
       if(pos != m_cvs_paths.end()) return pos->second;

Modified: branches/release/tools/bcp/main.cpp
==============================================================================
--- branches/release/tools/bcp/main.cpp (original)
+++ branches/release/tools/bcp/main.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -107,6 +107,10 @@
       {
          papp->enable_cvs_mode();
       }
+ else if(0 == std::strcmp("--svn", argv[i]))
+ {
+ papp->enable_svn_mode();
+ }
       else if(0 == std::strcmp("--scan", argv[i]))
       {
          papp->enable_scan_mode();

Modified: branches/release/tools/bcp/scan_cvs_path.cpp
==============================================================================
--- branches/release/tools/bcp/scan_cvs_path.cpp (original)
+++ branches/release/tools/bcp/scan_cvs_path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,7 @@
 /*
  *
- * Copyright (c) 2003 Dr John Maddock
+ * Copyright (c) 2003-7 John Maddock
+ * Copyright (c) 2007 Bjorn Roald
  * Use, modification and distribution is subject to the
  * Boost Software License, Version 1.0. (See accompanying file
  * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -16,6 +17,7 @@
 #include <boost/regex.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/detail/workaround.hpp>
+#include <iostream>
 
 void bcp_implementation::scan_cvs_path(const fs::path& p)
 {
@@ -61,3 +63,85 @@
       }
    }
 }
+
+void bcp_implementation::scan_svn_path(const fs::path& p)
+{
+ //
+ // scan through the svn entries files to build a list
+ // of all the files under svn version control
+ // and whether they are text or binary:
+ //
+ static const boost::regex entry_expression("^\\f([^\\f]*)");
+ static const boost::regex entry_line_expression("\\n[[:blank:]]*([^\\n]*)");
+ // static const boost::regex
+ // mime_type_expression("\\nsvn:mime-type\\nV [[digit]]*\\n([^/]*)[^\\n]*");
+
+ fs::path entries(m_boost_path / p / ".svn" / "entries");
+ if(fs::exists(entries))
+ {
+ fileview view(entries);
+ boost::cregex_token_iterator
+ i(view.begin(), view.end(), entry_expression, 1), j;
+
+ while(i != j) // entries
+ {
+ std::string entr = i->str();
+ boost::sregex_token_iterator
+ atr_it(entr.begin(), entr.end(), entry_line_expression, 1), atr_j;
+
+ if(atr_it != atr_j)
+ {
+ std::string name = atr_it->str(); // name of file or directory
+ fs::path fpath = p / name;
+ if(++atr_it != atr_j)
+ {
+ std::string kind = atr_it->str();
+ if(kind == "file")
+ {
+ // find if binary, we asume text unless mime type is
+ // set in property file
+ bool binary = false; //
+
+ // skip some lines type | example
+ if( ++atr_it != atr_j && // revnum |
+ ++atr_it != atr_j && // url |
+ ++atr_it != atr_j && // repos |
+ ++atr_it != atr_j && // scedule attr |
+ ++atr_it != atr_j && // text timestamp | 2007-09-02T...
+ ++atr_it != atr_j && // checksum | 58f4bfa7860...
+ ++atr_it != atr_j && // cmt_date | 2007-05-09T...
+ ++atr_it != atr_j && // cmt_rev | 37654
+ ++atr_it != atr_j && // cmt_author | dgregor
+ ++atr_it != atr_j ) // has_props | has-props
+ {
+ if(atr_it->str() == "has-props")
+ {
+ // we need to check properties file for mime-type
+ // that does not start with "text/", if found file is binary
+ fs::path properties(m_boost_path / p / ".svn" / "prop-base"
+ / (name + ".svn-base") );
+ if(fs::exists(properties))
+ {
+ fileview prop(properties);
+
+ static const boost::regex mime_type(
+ "svn:mime-type[[:blank:]]*(?:\\n|\\r|\\r\\n)[^\\r\\n]*(?:\\n|\\r|\\r\\n)[[:blank:]]*text/");
+ binary = regex_search(prop.begin(), prop.end(), mime_type) ? false : true;
+ }
+ }
+ }
+ m_cvs_paths[fpath] = binary;
+ } // kind == "file"
+ else if(kind == "dir")
+ {
+ scan_svn_path(fpath); // recursion for directory entries
+ }
+ // else
+ // std::cerr << "WARNING: unknown entry kind for entry " << name
+ // << "in " << entries << std::endl;
+ }
+ }
+ ++i;
+ } // while
+ }
+}

Modified: branches/release/tools/boostbook/doc/boostbook.xml
==============================================================================
--- branches/release/tools/boostbook/doc/boostbook.xml (original)
+++ branches/release/tools/boostbook/doc/boostbook.xml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
   
@@ -137,7 +137,7 @@
       <title>Manual setup for all systems</title>
     
       <para>This section describes how to manually configure Boost
- Boost version 2 (BBv2) for BoostBook. If you can use the
+ Boost version 2 (BBv@) for BoostBook. If you can use the
       automatic setup script, you should. All configuration will
       happen in the BBv2 user configuration file,
       <filename>user-config.jam</filename>. If you do not have a copy
@@ -212,13 +212,9 @@
         documentation for libraries that do not require Doxygen. To
         test this, change into the directory <filename
         class="directory">$BOOST_ROOT/libs/function/doc</filename> and
- run the command <code>bjam</code>: it should produce HTML
+ run the command <code>bjam --v2</code>: it should produce HTML
         documentation for the Boost.Function library in the
- <code>html</code> subdirectory. This documentation
- will look a little strange, because the BoostBook stylesheet is
- missing. You can copy the <code>boostbook.css</code> stylesheet from
- <filename class="directory">$BOOST_ROOT/doc/html</filename> to
- fix this problem.</para>
+ <code>html</code> subdirectory.</para>
       </section>
 
       <section id="boostbook.setup.doxygen">

Modified: branches/release/tools/boostbook/doc/reference.dtdxml
==============================================================================
--- branches/release/tools/boostbook/doc/reference.dtdxml (original)
+++ branches/release/tools/boostbook/doc/reference.dtdxml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -21,22 +21,18 @@
 <entity name="boost.class.content"
         type="param"
>
-<text-expanded>template?, inherit*, purpose?, description?,
- (static-constant|typedef|enum|
- copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
- struct-specialization|union|union-specialization)*</text-expanded>
-<text>template?, inherit*, purpose?, description?,
- (%boost.class.mix;)*</text>
+<text-expanded>template?, inherit*, purpose?, description?,
+ (access|%boost.class.mix;)*</text-expanded>
+<text>template?, inherit*, purpose?, description?,
+ (access|%boost.class.mix;)*</text>
 </entity>
 
 <entity name="boost.function.semantics"
         type="param"
>
-<text-expanded>purpose?, description?, requires?, effects?, postconditions?,
+<text-expanded>purpose?, description?, requires?, effects?, postconditions?,
          returns?, throws?, complexity?, notes?, rationale?</text-expanded>
-<text>purpose?, description?, requires?, effects?, postconditions?,
+<text>purpose?, description?, requires?, effects?, postconditions?,
          returns?, throws?, complexity?, notes?, rationale?</text>
 </entity>
 
@@ -98,21 +94,26 @@
                                 id CDATA #IMPLIED</text>
 </entity>
 
-<entity name="boost.class.mix"
+<entity name="boost.class.members"
         type="param"
>
 <text-expanded>static-constant|typedef|enum|
          copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ method|overloaded-method|data-member|class|class-specialization|struct|
          struct-specialization|union|union-specialization</text-expanded>
 <text>static-constant|typedef|enum|
          copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ |method|overloaded-method|data-member|class|class-specialization|struct|
          struct-specialization|union|union-specialization</text>
 </entity>
 
+<entity name="boost.class.mix"
+ type="param"
+>
+<text-expanded>free-function-group|function|overloaded-function|%boost.class.members;</text-expanded>
+<text>free-function-group|function|overloaded-function|%boost.class.members;</text>
+</entity>
+
 <entity name="boost.testsuite.tests"
         type="param"
>
@@ -196,14 +197,10 @@
 <entity name="boost.class-specialization.content"
         type="param"
>
-<text-expanded>template?, specialization?, inherit?, purpose?, description?,
- (static-constant|typedef|enum|
- copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
- struct-specialization|union|union-specialization)*</text-expanded>
-<text>template?, specialization?, inherit?, purpose?, description?,
- (%boost.class.mix;)*</text>
+<text-expanded>template?, specialization?, inherit?, purpose?, description?,
+ (access|%boost.class.mix;)*</text-expanded>
+<text>template?, specialization?, inherit?, purpose?, description?,
+ (access|%boost.class.mix;)*</text>
 </entity>
 
 <entity name="library.content"
@@ -223,6 +220,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -296,7 +294,7 @@
 </element>
 
 <attlist name="link-test">
-<attdecl>
+<attdecl>
      filename CDATA #REQUIRED
      name CDATA #IMPLIED</attdecl>
 <attribute name="filename"
@@ -329,7 +327,7 @@
 </element>
 
 <attlist name="link-fail-test">
-<attdecl>
+<attdecl>
      filename CDATA #REQUIRED
      name CDATA #IMPLIED</attdecl>
 <attribute name="filename"
@@ -494,7 +492,7 @@
 </element>
 
 <attlist name="destructor">
-<attdecl>
+<attdecl>
     specifiers CDATA #IMPLIED
     %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -639,7 +637,7 @@
     </or-group>
   </sequence-group>
 </content-model-expanded>
-<content-model>
+<content-model>
   <sequence-group>
     <element-name name="title" occurrence="?"/>
     <element-name name="section" occurrence="*"/>
@@ -750,6 +748,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -819,10 +818,7 @@
 <purpose>Declares a base class of the enclosing class or struct</purpose>
 
 <description>
- <para>This element contains the name of the class inherited. The
- content model is free-form, as the inherited class may be an
- instantiation of a template and may have markup in it (e.g.,
- <sgmltag>classname</sgmltag> tags).</para>
+ <para>This element contains the type of the class inherited.</para>
 </description>
 </element>
 
@@ -837,7 +833,9 @@
 <attribute name="access"
            type="#REQUIRED"
            value="CDATA"
- default=""/>
+ default="">
+ <purpose>The access specifier ("public", "private", or "protected") of the inheritance.</purpose>
+</attribute>
 <attribute name="id"
            type="#IMPLIED"
            value="CDATA"
@@ -950,7 +948,7 @@
   behavior. Constructors, destructors, member functions, and free
   functions all use the same documentation method, although the
   top-level tags differ.</para>
-
+
   <para>The behavior of functions in BoostBook is documenting using a
   style similar to that of the C++ standard, with clauses describing
   the requirements, effects, postconditions, exception behavior, and
@@ -979,12 +977,12 @@
         so that any content is equivalent in both type and value to the
         content of &lt;code&gt;other&lt;/code&gt;, or empty if
         &lt;code&gt;other&lt;/code&gt; is
- empty.
+ empty.
       &lt;/simpara&gt;
     &lt;/effects&gt;
 
     &lt;throws&gt;
- &lt;simpara&gt;May fail with a
+ &lt;simpara&gt;May fail with a
         &lt;classname&gt;std::bad_alloc&lt;/classname&gt; exception or any
         exceptions arising from the copy constructor of the
         contained type.
@@ -1218,7 +1216,7 @@
 </element>
 
 <attlist name="constructor">
-<attdecl>
+<attdecl>
     specifiers CDATA #IMPLIED
     %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -1274,7 +1272,7 @@
 
   <programlisting>&lt;library-reference&gt;
   &lt;header name="boost/any.hpp"&gt;
- &lt;namespace name="boost"&gt;
+ &lt;namespace name="boost"&gt;
       &lt;!-- C++ constructs in the boost namespace --&gt;
     &lt;/namespace&gt;
   &lt;/header&gt;
@@ -1496,7 +1494,7 @@
 </element>
 
 <attlist name="data-member">
-<attdecl>
+<attdecl>
     name CDATA #REQUIRED
     %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -1558,6 +1556,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -1736,7 +1735,7 @@
 </element>
 
 <attlist name="requirement">
-<attdecl>
+<attdecl>
      name CDATA #REQUIRED</attdecl>
 <attribute name="name"
            type="#REQUIRED"
@@ -1859,7 +1858,7 @@
 </element>
 
 <attlist name="run-test">
-<attdecl>
+<attdecl>
      filename CDATA #REQUIRED
      name CDATA #IMPLIED</attdecl>
 <attribute name="filename"
@@ -1954,7 +1953,7 @@
 </element>
 
 <attlist name="copy-assignment">
-<attdecl>
+<attdecl>
     cv CDATA #IMPLIED
     specifiers CDATA #IMPLIED
     %boost.common.attrib;</attdecl>
@@ -2000,7 +1999,7 @@
 </element>
 
 <attlist name="run-fail-test">
-<attdecl>
+<attdecl>
      filename CDATA #REQUIRED
      name CDATA #IMPLIED</attdecl>
 <attribute name="filename"
@@ -2159,7 +2158,7 @@
 </element>
 
 <attlist name="parameter">
-<attdecl>
+<attdecl>
      name CDATA #IMPLIED</attdecl>
 <attribute name="name"
            type="#IMPLIED"
@@ -2255,7 +2254,7 @@
 </element>
 
 <attlist name="overloaded-function">
-<attdecl>
+<attdecl>
     name CDATA #REQUIRED
     %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -2276,6 +2275,60 @@
            default=""/>
 </attlist>
 
+ <element name="access"
+ content-type="element">
+ <content-model-expanded>
+ <or-group occurrence="+">
+ <element-name name="static-constant"/>
+ <element-name name="typedef"/>
+ <element-name name="enum"/>
+ <element-name name="copy-assignment"/>
+ <element-name name="constructor"/>
+ <element-name name="destructor"/>
+ <element-name name="method-group"/>
+ <element-name name="method"/>
+ <element-name name="overloaded-method"/>
+ <element-name name="data-member"/>
+ <element-name name="class"/>
+ <element-name name="class-specialization"/>
+ <element-name name="struct"/>
+ <element-name name="struct-specialization"/>
+ <element-name name="union"/>
+ <element-name name="union-specialization"/>
+ </or-group>
+ </content-model-expanded>
+ <content-model>
+ <sequence-group occurrence="+">
+ <parament-name name="boost.class.members"/>
+ </sequence-group>
+ </content-model>
+ <purpose>Declares an access specification for class members</purpose>
+
+ <description>
+ <para>The access specifications of class members (public, private, or protected) may be determined by enclosing them in an &lt;access&gt; element.</para>
+ </description>
+ </element>
+
+ <attlist name="access">
+ <attdecl>
+ name CDATA #REQUIRED
+ %boost.common.attrib;</attdecl>
+ <attribute name="last-revision"
+ type="#IMPLIED"
+ value="CDATA"
+ default=""/>
+ <attribute name="name"
+ type="#REQUIRED"
+ value="CDATA"
+ default="">
+ <purpose>The name of the access specification, e.g. "public", "private", or "protected".</purpose>
+ </attribute>
+ <attribute name="id"
+ type="#IMPLIED"
+ value="CDATA"
+ default=""/>
+ </attlist>
+
 <element name="class"
          content-type="element">
 <content-model-expanded>
@@ -2285,6 +2338,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -2348,7 +2402,7 @@
   inheritance from the class <classname>std::bad_cast</classname>. It
   also defines the &lt;purpose&gt; element, which contains a short
   description of the use of the class.</para>
-
+
   <programlisting>&lt;class name="bad_any_cast"&gt;
   &lt;inherit access="public"&gt;&lt;classname&gt;std::bad_cast&lt;/classname&gt;&lt;/inherit&gt;
   &lt;purpose&gt;&lt;para&gt;The exception thrown in the event of a failed
@@ -2402,7 +2456,7 @@
 </element>
 
 <attlist name="librarycategorydef">
-<attdecl>
+<attdecl>
          name CDATA #REQUIRED
          %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -2524,7 +2578,7 @@
 </element>
 
 <attlist name="overloaded-method">
-<attdecl>
+<attdecl>
     name CDATA #REQUIRED
     %boost.common.attrib;</attdecl>
 <attribute name="last-revision"
@@ -2813,6 +2867,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -2874,6 +2929,7 @@
     <element-name name="purpose" occurrence="?"/>
     <element-name name="description" occurrence="?"/>
     <or-group occurrence="*">
+ <element-name name="access"/>
       <element-name name="static-constant"/>
       <element-name name="typedef"/>
       <element-name name="enum"/>
@@ -3224,5 +3280,4 @@
            value="CDATA"
            default=""/>
 </attlist>
-
 </dtd>

Modified: branches/release/tools/boostbook/doc/reference.xml
==============================================================================
--- branches/release/tools/boostbook/doc/reference.xml (original)
+++ branches/release/tools/boostbook/doc/reference.xml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,14 +1,7 @@
 <?xml version="1.0" standalone="yes"?>
-<!--
- Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
- -->
-<chapter id="reference">
+<section id="reference">
   <title>Reference</title>
- <para>Elements:<itemizedlist spacing="compact"><listitem><simpara><link linkend="boostbook.dtd.boostbook">Element <sgmltag>boostbook</sgmltag> - Defines a BoostBook book</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class">Element <sgmltag>class</sgmltag> - Declares a class or class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class-specialization">Element <sgmltag>class-specialization</sgmltag> - A specialization (partial or full) of a class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.code">Element <sgmltag>code</sgmltag> - Mimics the <sgmltag>code</sgmltag> tag in HTML</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-fail-test">Element <sgmltag>compile-fail-test</sgmltag> - A testcase that should fail to compile</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-test">Element <sgmltag>compile-test</sgmltag> - A testcase that should
compile correctly</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.complexity">Element <sgmltag>complexity</sgmltag> - The time/space/etc. complexity of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.constructor">Element <sgmltag>constructor</sgmltag> - Declares a constructor of the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.copy-assignment">Element <sgmltag>copy-assignment</sgmltag> - Declares a copy-assignment operator</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.data-member">Element <sgmltag>data-member</sgmltag> - Declares a data member of a class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.default">Element <sgmltag>default</sgmltag> - The default value of a function or template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.description">Element <sgmltag>description</sgmltag> - Detailed descripti
on of a construct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.destructor">Element <sgmltag>destructor</sgmltag> - Declares a destructor for the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.effects">Element <sgmltag>effects</sgmltag> - Declares the side effects of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enum">Element <sgmltag>enum</sgmltag> - Declares an enumeration type</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enumvalue">Element <sgmltag>enumvalue</sgmltag> - A single value of an enumeration</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.free-function-group">Element <sgmltag>free-function-group</sgmltag> - A set of functions that are grouped together under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.function">Element <sgmltag>function</sgmltag> - Declares a function</link></simpara></lis
titem><listitem><simpara><link linkend="boostbook.dtd.functionname">Element <sgmltag>functionname</sgmltag> - References a function with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.header">Element <sgmltag>header</sgmltag> - Declares a C++ header with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.if-fails">Element <sgmltag>if-fails</sgmltag> - What it means when a testcase fails</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.inherit">Element <sgmltag>inherit</sgmltag> - Declares a base class of the enclosing class or struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.lib">Element <sgmltag>lib</sgmltag> - A library dependency</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library">Element <sgmltag>library</sgmltag> - Top-level element for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library-refer
ence">Element <sgmltag>library-reference</sgmltag> - Declares the reference material for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategory">Element <sgmltag>librarycategory</sgmltag> - Declares that the enclosing library is in this category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorydef">Element <sgmltag>librarycategorydef</sgmltag> - Defines a new library category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorylist">Element <sgmltag>librarycategorylist</sgmltag> - Categorized listing of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryinfo">Element <sgmltag>libraryinfo</sgmltag> - Provides information about a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarylist">Element <sgmltag>librarylist</sgmltag> - Placeholder for an alphabetical list of libraries</link></simpara></listitem><listit
em><simpara><link linkend="boostbook.dtd.libraryname">Element <sgmltag>libraryname</sgmltag> - References a library of the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarypurpose">Element <sgmltag>librarypurpose</sgmltag> - Describes in one short sentence or phrase the purpose of a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-fail-test">Element <sgmltag>link-fail-test</sgmltag> - Declares a test that should compile but fail to link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-test">Element <sgmltag>link-test</sgmltag> - Declares a test that should compile and link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method">Element <sgmltag>method</sgmltag> - Declares a method, i.e., a member function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method-group">Element <sgmltag>method-group</sgmltag> - A set of methods that are grouped to
gether under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.namespace">Element <sgmltag>namespace</sgmltag> - Declares a namespace</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.notes">Element <sgmltag>notes</sgmltag> - Non-normative notes about a function's semantics</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-function">Element <sgmltag>overloaded-function</sgmltag> - An overloaded function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-method">Element <sgmltag>overloaded-method</sgmltag> - An overloaded method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.parameter">Element <sgmltag>parameter</sgmltag> - A function parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.paramtype">Element <sgmltag>paramtype</sgmltag> - The type of a function parameter</link></simpara></listitem><listitem><simpara><link lin
kend="boostbook.dtd.postconditions">Element <sgmltag>postconditions</sgmltag> - Conditions that must hold after the function returns</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.precondition">Element <sgmltag>precondition</sgmltag> - Conditions that must be met prior to executing a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.programlisting">Element <sgmltag>programlisting</sgmltag> - A sample of program code</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.purpose">Element <sgmltag>purpose</sgmltag> - A short description of an entity's use</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.rationale">Element <sgmltag>rationale</sgmltag> - Describes the rationale for a particular function's design</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.requirement">Element <sgmltag>requirement</sgmltag> - A requirement/property in the Jamfile for a testcase</link></simpara
></listitem><listitem><simpara><link linkend="boostbook.dtd.requires">Element <sgmltag>requires</sgmltag> - Declares the requirements of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.returns">Element <sgmltag>returns</sgmltag> - Description of the return value of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-fail-test">Element <sgmltag>run-fail-test</sgmltag> - A testcase that should compile and link, but fail on execution</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-test">Element <sgmltag>run-test</sgmltag> - A testcase that should compile, link, and execute</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.signature">Element <sgmltag>signature</sgmltag> - One signature of an overloaded function or method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.snippet">Element <sgmltag>snippet</sgmltag> - Pulls in a code snippet from a <sgmltag>pro
gramlisting</sgmltag> element</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.source">Element <sgmltag>source</sgmltag> - Defines source code for a test</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.specialization">Element <sgmltag>specialization</sgmltag> - Defines the specialization arguments for a class specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.static-constant">Element <sgmltag>static-constant</sgmltag> - Declares a static constant, e.g., <code>const int foo = 5;</code>.</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct">Element <sgmltag>struct</sgmltag> - Declares a C++ struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct-specialization">Element <sgmltag>struct-specialization</sgmltag> - A specialization (full or partial) of a struct template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template">Element <
sgmltag>template</sgmltag> - Declares the template parameters of a class or function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-arg">Element <sgmltag>template-arg</sgmltag> - A template argument in a specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-nontype-parameter">Element <sgmltag>template-nontype-parameter</sgmltag> - A nontype template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-type-parameter">Element <sgmltag>template-type-parameter</sgmltag> - Declares a template type parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-varargs">Element <sgmltag>template-varargs</sgmltag> - Declares a variable-length list of template parameters</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.testsuite">Element <sgmltag>testsuite</sgmltag> - Describes a library testsuite</link></simpara></listitem><listitem><simp
ara><link linkend="boostbook.dtd.throws">Element <sgmltag>throws</sgmltag> - Description of the exceptions thrown by a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.type">Element <sgmltag>type</sgmltag> - The type of an element or return type of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.typedef">Element <sgmltag>typedef</sgmltag> - Declares a typedef</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union">Element <sgmltag>union</sgmltag> - Declares a C++ union or union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union-specialization">Element <sgmltag>union-specialization</sgmltag> - A specialization (full or partial) of a union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.using-class">Element <sgmltag>using-class</sgmltag> - Injects the method and function names of a class into the local scope</link></simpara></listitem><lis
titem><simpara><link linkend="boostbook.dtd.using-namespace">Element <sgmltag>using-namespace</sgmltag> - Injects the declared names from a namespace into the local scope</link></simpara></listitem></itemizedlist></para>
+ <para>Elements:<itemizedlist spacing="compact"><listitem><simpara><link linkend="boostbook.dtd.access">Element <sgmltag>access</sgmltag> - Declares an access specification for class members</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.boostbook">Element <sgmltag>boostbook</sgmltag> - Defines a BoostBook book</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class">Element <sgmltag>class</sgmltag> - Declares a class or class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class-specialization">Element <sgmltag>class-specialization</sgmltag> - A specialization (partial or full) of a class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.code">Element <sgmltag>code</sgmltag> - Mimics the <sgmltag>code</sgmltag> tag in HTML</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-fail-test">Element <sgmltag>compile-fail-test</sgmltag> - A testcase that should
fail to compile</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-test">Element <sgmltag>compile-test</sgmltag> - A testcase that should compile correctly</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.complexity">Element <sgmltag>complexity</sgmltag> - The time/space/etc. complexity of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.constructor">Element <sgmltag>constructor</sgmltag> - Declares a constructor of the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.copy-assignment">Element <sgmltag>copy-assignment</sgmltag> - Declares a copy-assignment operator</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.data-member">Element <sgmltag>data-member</sgmltag> - Declares a data member of a class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.default">Element <sgmltag>default</sgmltag> - The default value of a function
 or template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.description">Element <sgmltag>description</sgmltag> - Detailed description of a construct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.destructor">Element <sgmltag>destructor</sgmltag> - Declares a destructor for the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.effects">Element <sgmltag>effects</sgmltag> - Declares the side effects of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enum">Element <sgmltag>enum</sgmltag> - Declares an enumeration type</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enumvalue">Element <sgmltag>enumvalue</sgmltag> - A single value of an enumeration</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.free-function-group">Element <sgmltag>free-function-group</sgmltag> - A set of functions that are grouped together under one
 name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.function">Element <sgmltag>function</sgmltag> - Declares a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.functionname">Element <sgmltag>functionname</sgmltag> - References a function with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.header">Element <sgmltag>header</sgmltag> - Declares a C++ header with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.if-fails">Element <sgmltag>if-fails</sgmltag> - What it means when a testcase fails</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.inherit">Element <sgmltag>inherit</sgmltag> - Declares a base class of the enclosing class or struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.lib">Element <sgmltag>lib</sgmltag> - A library dependency</link></simpara></listitem><listitem><simpara><link linkend="boostbook.
dtd.library">Element <sgmltag>library</sgmltag> - Top-level element for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library-reference">Element <sgmltag>library-reference</sgmltag> - Declares the reference material for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategory">Element <sgmltag>librarycategory</sgmltag> - Declares that the enclosing library is in this category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorydef">Element <sgmltag>librarycategorydef</sgmltag> - Defines a new library category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorylist">Element <sgmltag>librarycategorylist</sgmltag> - Categorized listing of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryinfo">Element <sgmltag>libraryinfo</sgmltag> - Provides information about a library</link></simpara></listitem><listitem><simpa
ra><link linkend="boostbook.dtd.librarylist">Element <sgmltag>librarylist</sgmltag> - Placeholder for an alphabetical list of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryname">Element <sgmltag>libraryname</sgmltag> - References a library of the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarypurpose">Element <sgmltag>librarypurpose</sgmltag> - Describes in one short sentence or phrase the purpose of a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-fail-test">Element <sgmltag>link-fail-test</sgmltag> - Declares a test that should compile but fail to link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-test">Element <sgmltag>link-test</sgmltag> - Declares a test that should compile and link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method">Element <sgmltag>method</sgmltag> - Declares a method, i.e., a member functi
on</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method-group">Element <sgmltag>method-group</sgmltag> - A set of methods that are grouped together under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.namespace">Element <sgmltag>namespace</sgmltag> - Declares a namespace</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.notes">Element <sgmltag>notes</sgmltag> - Non-normative notes about a function's semantics</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-function">Element <sgmltag>overloaded-function</sgmltag> - An overloaded function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-method">Element <sgmltag>overloaded-method</sgmltag> - An overloaded method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.parameter">Element <sgmltag>parameter</sgmltag> - A function parameter</link></simpara></listitem><listitem><simpa
ra><link linkend="boostbook.dtd.paramtype">Element <sgmltag>paramtype</sgmltag> - The type of a function parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.postconditions">Element <sgmltag>postconditions</sgmltag> - Conditions that must hold after the function returns</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.precondition">Element <sgmltag>precondition</sgmltag> - Conditions that must be met prior to executing a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.programlisting">Element <sgmltag>programlisting</sgmltag> - A sample of program code</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.purpose">Element <sgmltag>purpose</sgmltag> - A short description of an entity's use</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.rationale">Element <sgmltag>rationale</sgmltag> - Describes the rationale for a particular function's design</link></simpara></listitem>
<listitem><simpara><link linkend="boostbook.dtd.requirement">Element <sgmltag>requirement</sgmltag> - A requirement/property in the Jamfile for a testcase</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.requires">Element <sgmltag>requires</sgmltag> - Declares the requirements of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.returns">Element <sgmltag>returns</sgmltag> - Description of the return value of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-fail-test">Element <sgmltag>run-fail-test</sgmltag> - A testcase that should compile and link, but fail on execution</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-test">Element <sgmltag>run-test</sgmltag> - A testcase that should compile, link, and execute</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.signature">Element <sgmltag>signature</sgmltag> - One signature of an overloaded function or m
ethod</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.snippet">Element <sgmltag>snippet</sgmltag> - Pulls in a code snippet from a <sgmltag>programlisting</sgmltag> element</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.source">Element <sgmltag>source</sgmltag> - Defines source code for a test</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.specialization">Element <sgmltag>specialization</sgmltag> - Defines the specialization arguments for a class specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.static-constant">Element <sgmltag>static-constant</sgmltag> - Declares a static constant, e.g., <code>const int foo = 5;</code>.</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct">Element <sgmltag>struct</sgmltag> - Declares a C++ struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct-specialization">Element <sgmltag>struct-special
ization</sgmltag> - A specialization (full or partial) of a struct template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template">Element <sgmltag>template</sgmltag> - Declares the template parameters of a class or function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-arg">Element <sgmltag>template-arg</sgmltag> - A template argument in a specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-nontype-parameter">Element <sgmltag>template-nontype-parameter</sgmltag> - A nontype template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-type-parameter">Element <sgmltag>template-type-parameter</sgmltag> - Declares a template type parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-varargs">Element <sgmltag>template-varargs</sgmltag> - Declares a variable-length list of template parameters</link></simpara></listitem>
<listitem><simpara><link linkend="boostbook.dtd.testsuite">Element <sgmltag>testsuite</sgmltag> - Describes a library testsuite</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.throws">Element <sgmltag>throws</sgmltag> - Description of the exceptions thrown by a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.type">Element <sgmltag>type</sgmltag> - The type of an element or return type of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.typedef">Element <sgmltag>typedef</sgmltag> - Declares a typedef</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union">Element <sgmltag>union</sgmltag> - Declares a C++ union or union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union-specialization">Element <sgmltag>union-specialization</sgmltag> - A specialization (full or partial) of a union template</link></simpara></listitem><listitem><simpara><link linkend=
"boostbook.dtd.using-class">Element <sgmltag>using-class</sgmltag> - Injects the method and function names of a class into the local scope</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.using-namespace">Element <sgmltag>using-namespace</sgmltag> - Injects the declared names from a namespace into the local scope</link></simpara></listitem></itemizedlist></para>
   <refentry id="boostbook.dtd.class-specialization">
     <refmeta>
       <refentrytitle>
@@ -20,7 +13,7 @@
       <refpurpose>A specialization (partial or full) of a class template</refpurpose>
     </refnamediv>
     <refsynopsisdiv>class-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>
@@ -36,7 +29,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -140,7 +133,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -176,7 +169,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -218,7 +211,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -258,7 +251,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -294,7 +287,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -339,7 +332,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -377,7 +370,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -413,7 +406,7 @@
   this:</para>
 
   <programlisting>&lt;library-reference&gt;
- &lt;header name=&quot;boost/any.hpp&quot;&gt;
+ &lt;header name="boost/any.hpp"&gt;
     &lt;!-- C++ constructs in this header --&gt;
   &lt;/header&gt;
 &lt;/library-reference&gt;</programlisting>
@@ -440,7 +433,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -480,7 +473,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -499,7 +492,7 @@
       <refpurpose>Declares a C++ union or union template</refpurpose>
     </refnamediv>
     <refsynopsisdiv>union ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>
@@ -515,7 +508,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -535,13 +528,10 @@
       <refpurpose>Declares a base class of the enclosing class or struct</refpurpose>
     </refnamediv>
     <refsynopsisdiv>inherit ::=
- (ANY)
+ (<link linkend="boostbook.dtd.type">type</link>, <link linkend="boostbook.dtd.purpose">purpose</link>?)
 </refsynopsisdiv>
     <refsection><title>Description</title>
- <para>This element contains the name of the class inherited. The
- content model is free-form, as the inherited class may be an
- instantiation of a template and may have markup in it (e.g.,
- <sgmltag>classname</sgmltag> tags).</para>
+ <para>This element contains the type of the class inherited.</para>
 </refsection>
     <refsection>
       <title>Attributes</title>
@@ -557,8 +547,8 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
-<row><entry>access</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry/></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>access</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The access specifier ("public", "private", or "protected") of the inheritance.</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -582,7 +572,7 @@
     <refsection><title>Description</title>
   <para>Variable-length template parameter lists are not allowed in
   C++, but because they are sometimes needed in documentation they are
- allowed in BoostBook. This element generally expands to &quot;...&quot; and
+ allowed in BoostBook. This element generally expands to "..." and
   can be used anywhere any other template parameter can be
   used.</para>
 </refsection>
@@ -600,7 +590,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -654,7 +644,7 @@
   behavior. Constructors, destructors, member functions, and free
   functions all use the same documentation method, although the
   top-level tags differ.</para>
-
+
   <para>The behavior of functions in BoostBook is documenting using a
   style similar to that of the C++ standard, with clauses describing
   the requirements, effects, postconditions, exception behavior, and
@@ -662,18 +652,18 @@
 
   <para>The following example illustrates some constructors and a
   destructor for <classname>boost::any</classname>. Note that one of
- the constructors takes a single parameter whose name is &quot;other&quot; and
+ the constructors takes a single parameter whose name is "other" and
   whose type, <code>const any&amp;</code> is contained in the
   &lt;paramtype&gt; element; any number of parameters may be specified
   in this way.</para>
 
- <programlisting>&lt;class name=&quot;any&quot;&gt;
+ <programlisting>&lt;class name="any"&gt;
   &lt;constructor&gt;
     &lt;postconditions&gt;&lt;para&gt;&lt;this-&gt;empty()&gt;&lt;/para&gt;&lt;/postconditions&gt;
   &lt;/constructor&gt;
 
   &lt;constructor&gt;
- &lt;parameter name=&quot;other&quot;&gt;
+ &lt;parameter name="other"&gt;
       &lt;paramtype&gt;const &lt;classname&gt;any&lt;/classname&gt;&amp;amp;&lt;/paramtype&gt;
     &lt;/parameter&gt;
 
@@ -683,12 +673,12 @@
         so that any content is equivalent in both type and value to the
         content of &lt;code&gt;other&lt;/code&gt;, or empty if
         &lt;code&gt;other&lt;/code&gt; is
- empty.
+ empty.
       &lt;/simpara&gt;
     &lt;/effects&gt;
 
     &lt;throws&gt;
- &lt;simpara&gt;May fail with a
+ &lt;simpara&gt;May fail with a
         &lt;classname&gt;std::bad_alloc&lt;/classname&gt; exception or any
         exceptions arising from the copy constructor of the
         contained type.
@@ -718,7 +708,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -755,7 +745,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -829,7 +819,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
@@ -905,7 +895,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -932,12 +922,12 @@
   element. As in C++, namespaces can be nested and contain other C++
   constructs, such as classes or functions. The <code>name</code>
   attribute of a &lt;namespace&gt; element gives the namespace name
- (e.g., &quot;boost&quot;). The <libraryname>Any</libraryname> library is
+ (e.g., "boost"). The <libraryname>Any</libraryname> library is
   defined entirely within namespace boost by:</para>
 
   <programlisting>&lt;library-reference&gt;
- &lt;header name=&quot;boost/any.hpp&quot;&gt;
- &lt;namespace name=&quot;boost&quot;&gt;
+ &lt;header name="boost/any.hpp"&gt;
+ &lt;namespace name="boost"&gt;
       &lt;!-- C++ constructs in the boost namespace --&gt;
     &lt;/namespace&gt;
   &lt;/header&gt;
@@ -957,7 +947,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1016,7 +1006,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1060,7 +1050,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1095,7 +1085,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1131,7 +1121,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1166,7 +1156,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1202,7 +1192,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1221,7 +1211,7 @@
       <refpurpose>A specialization (full or partial) of a union template</refpurpose>
     </refnamediv>
     <refsynopsisdiv>union-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>
@@ -1237,7 +1227,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1273,7 +1263,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1308,7 +1298,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1343,7 +1333,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1372,7 +1362,7 @@
   requirement gives the value of that feature. A requirement such as
   <code>&lt;includes&gt;foo.hpp</code> would be encoded as
   <code>&lt;requirement
- name=&quot;includes&quot;&gt;foo.hpp&lt;/requirement&gt;</code>.</para>
+ name="includes"&gt;foo.hpp&lt;/requirement&gt;</code>.</para>
 </refsection>
     <refsection>
       <title>Attributes</title>
@@ -1421,7 +1411,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1456,7 +1446,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1491,7 +1481,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1561,7 +1551,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1605,7 +1595,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -1676,7 +1666,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1745,7 +1735,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1780,7 +1770,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -1857,7 +1847,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
 <row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -1899,7 +1889,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1908,6 +1898,44 @@
       </informaltable>
     </refsection>
   </refentry>
+ <refentry id="boostbook.dtd.access">
+ <refmeta>
+ <refentrytitle>
+ BoostBook element <sgmltag>access</sgmltag></refentrytitle>
+ <manvolnum>9</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>access</refname>
+ <refpurpose>Declares an access specification for class members</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>access ::=
+ (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)+
+ </refsynopsisdiv>
+ <refsection><title>Description</title>
+ <para>The access specifications of class members (public, private, or protected) may be determined by enclosing them in an &lt;access&gt; element.</para>
+ </refsection>
+ <refsection>
+ <title>Attributes</title>
+ <informaltable>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Value</entry>
+ <entry>Purpose</entry>
+ </row>
+ </thead>
+ <tbody>
+
+ <row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+ <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the access specification, e.g. "public", "private", or "protected".</entry></row>
+ <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </refsection>
+ </refentry>
   <refentry id="boostbook.dtd.class">
     <refmeta>
       <refentrytitle>
@@ -1919,18 +1947,18 @@
       <refpurpose>Declares a class or class template</refpurpose>
     </refnamediv>
     <refsynopsisdiv>class ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection><title>Description</title>
   <para>C++ classes and class templates are described via the
- &lt;class&gt; element. Each class has a name (e.g., &quot;any&quot;) given by
+ &lt;class&gt; element. Each class has a name (e.g., "any") given by
   the <code>name</code> attribute, a purpose given by the
   &lt;purpose&gt; element, documentation, and a set of types,
   functions, base classes, and data members. Here is a minimal
   definition of the <classname>boost::any</classname> class:</para>
 
- <programlisting>&lt;namespace name=&quot;boost&quot;&gt;
- &lt;class name=&quot;any&quot;&gt;
+ <programlisting>&lt;namespace name="boost"&gt;
+ &lt;class name="any"&gt;
     &lt;purpose&gt;
       A class whose instances can hold instances of any type that satisfies
       ValueType requirements.
@@ -1955,9 +1983,9 @@
   inheritance from the class <classname>std::bad_cast</classname>. It
   also defines the &lt;purpose&gt; element, which contains a short
   description of the use of the class.</para>
-
- <programlisting>&lt;class name=&quot;bad_any_cast&quot;&gt;
- &lt;inherit access=&quot;public&quot;&gt;&lt;classname&gt;std::bad_cast&lt;/classname&gt;&lt;/inherit&gt;
+
+ <programlisting>&lt;class name="bad_any_cast"&gt;
+ &lt;inherit access="public"&gt;&lt;classname&gt;std::bad_cast&lt;/classname&gt;&lt;/inherit&gt;
   &lt;purpose&gt;&lt;para&gt;The exception thrown in the event of a failed
   &lt;functionname&gt;any_cast&lt;/functionname&gt; of an
   &lt;classname&gt;any&lt;/classname&gt; value.&lt;/para&gt;&lt;/purpose&gt;
@@ -1980,7 +2008,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2003,7 +2031,7 @@
   (#PCDATA)
 </refsynopsisdiv>
     <refsection><title>Description</title>
- <para>All library category definitions should be in <filename>doc/src/boost.xml</filename>, and the names of categories must be prefixed with &quot;<code>category:</code>&quot;.</para>
+ <para>All library category definitions should be in <filename>doc/src/boost.xml</filename>, and the names of categories must be prefixed with "<code>category:</code>".</para>
 </refsection>
     <refsection>
       <title>Attributes</title>
@@ -2019,7 +2047,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2055,7 +2083,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2090,7 +2118,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2131,7 +2159,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2200,7 +2228,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2235,7 +2263,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2270,7 +2298,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2306,7 +2334,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>dirname</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry/></row>
 <row><entry>url</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry/></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
@@ -2350,7 +2378,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2385,7 +2413,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2405,7 +2433,7 @@
       <refpurpose>A specialization (full or partial) of a struct template</refpurpose>
     </refnamediv>
     <refsynopsisdiv>struct-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>
@@ -2421,7 +2449,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2441,7 +2469,7 @@
       <refpurpose>Declares a C++ struct</refpurpose>
     </refnamediv>
     <refsynopsisdiv>struct ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>
@@ -2457,7 +2485,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2510,7 +2538,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2546,7 +2574,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2581,7 +2609,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2616,7 +2644,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2651,7 +2679,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2686,7 +2714,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2721,7 +2749,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2757,7 +2785,7 @@
           </thead>
           <tbody>
 
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep &quot;last revised&quot; information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
 <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
 <row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
 </tbody>
@@ -2765,4 +2793,4 @@
       </informaltable>
     </refsection>
   </refentry>
-</chapter>
+</section>

Modified: branches/release/tools/boostbook/dtd/boostbook.dtd
==============================================================================
--- branches/release/tools/boostbook/dtd/boostbook.dtd (original)
+++ branches/release/tools/boostbook/dtd/boostbook.dtd 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,15 +1,20 @@
 <!--
- BoostBook DTD version 1.0
+ BoostBook DTD version 1.1
 
    For further information, see: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost_Documentation_Format
 
- Copyright (c) 2002 by Peter Simons <simons_at_[hidden]>.
- All Rights Reserved.
+ Copyright (c) 2002 by Peter Simons <simons_at_[hidden]>
+ Copyright (c) 2003-2004 by Douglas Gregor <doug.gregor -at- gmail.com>
+ Copyright (c) 2007 by Frank Mori Hess <fmhess_at_[hidden]>
+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
 
    This DTD module is identified by the PUBLIC and SYSTEM identifiers:
 
- PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
- SYSTEM "http://cryp.to/boost-sandbox/libs/documentation/dtd/boostbook.dtd"
+ PUBLIC "-//Boost//DTD BoostBook XML V1.1//EN"
+ SYSTEM "http://www.boost.org/tools/boostbook/dtd/1.1/boostbook.dtd"
 
    $Revision$
    $Date$
@@ -37,7 +42,7 @@
 <!ENTITY % boost.common.attrib "%local.common.attrib;
                                 id CDATA #IMPLIED">
 
-<!ENTITY % boost.namespace.mix
+<!ENTITY % boost.namespace.mix
         "class|class-specialization|struct|struct-specialization|
          union|union-specialization|typedef|enum|
          free-function-group|function|overloaded-function|
@@ -46,23 +51,25 @@
 <!ENTITY % boost.template.mix
         "template-type-parameter|template-nontype-parameter|template-varargs">
 
-<!ENTITY % boost.class.mix
+<!ENTITY % boost.class.members
         "static-constant|typedef|enum|
          copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ method|overloaded-method|data-member|class|class-specialization|struct|
          struct-specialization|union|union-specialization">
 
+<!ENTITY % boost.class.mix
+ "%boost.class.members;|free-function-group|function|overloaded-function">
+
 <!ENTITY % boost.class.content
- "template?, inherit*, purpose?, description?,
- (%boost.class.mix;)*">
+ "template?, inherit*, purpose?, description?,
+ (%boost.class.mix;|access)*">
 
 <!ENTITY % boost.class-specialization.content
- "template?, specialization?, inherit?, purpose?, description?,
- (%boost.class.mix;)*">
+ "template?, specialization?, inherit?, purpose?, description?,
+ (%boost.class.mix;|access)*">
 
 <!ENTITY % boost.function.semantics
- "purpose?, description?, requires?, effects?, postconditions?,
+ "purpose?, description?, requires?, effects?, postconditions?,
          returns?, throws?, complexity?, notes?, rationale?">
 
 <!ENTITY % library.content
@@ -104,7 +111,7 @@
 <!ATTLIST librarycategorylist %boost.common.attrib;>
 
 <!ELEMENT librarycategorydef (#PCDATA)>
-<!ATTLIST librarycategorydef
+<!ATTLIST librarycategorydef
          name CDATA #REQUIRED
          %boost.common.attrib;>
 
@@ -148,6 +155,11 @@
     name CDATA #REQUIRED
     %boost.common.attrib;>
 
+<!ELEMENT access (%boost.class.members;)+>
+<!ATTLIST access
+ name CDATA #REQUIRED
+ %boost.common.attrib;>
+
 <!--========= C++ Templates =========-->
 <!ELEMENT template (%boost.template.mix;)*>
 <!ATTLIST template %boost.common.attrib;>
@@ -209,7 +221,7 @@
     %boost.common.attrib;>
 
 <!ELEMENT data-member (type, purpose?, description?)>
-<!ATTLIST data-member
+<!ATTLIST data-member
     name CDATA #REQUIRED
     specifiers CDATA #IMPLIED
     %boost.common.attrib;>
@@ -229,12 +241,12 @@
     %boost.common.attrib;>
 
 <!ELEMENT constructor (template?, parameter*, %boost.function.semantics;)>
-<!ATTLIST constructor
+<!ATTLIST constructor
     specifiers CDATA #IMPLIED
     %boost.common.attrib;>
 
 <!ELEMENT destructor (%boost.function.semantics;)>
-<!ATTLIST destructor
+<!ATTLIST destructor
     specifiers CDATA #IMPLIED
     %boost.common.attrib;>
 
@@ -252,12 +264,12 @@
     %boost.common.attrib;>
 
 <!ELEMENT overloaded-method (signature*, %boost.function.semantics;)>
-<!ATTLIST overloaded-method
+<!ATTLIST overloaded-method
     name CDATA #REQUIRED
     %boost.common.attrib;>
 
 <!ELEMENT overloaded-function (signature*, %boost.function.semantics;)>
-<!ATTLIST overloaded-function
+<!ATTLIST overloaded-function
     name CDATA #REQUIRED
     %boost.common.attrib;>
 
@@ -286,12 +298,12 @@
 <!ATTLIST rationale %boost.common.attrib;>
 
 <!ELEMENT functionname (#PCDATA)>
-<!ATTLIST functionname
+<!ATTLIST functionname
     alt CDATA #IMPLIED
     %boost.common.attrib;>
 
 <!ELEMENT enumname (#PCDATA)>
-<!ATTLIST enumname
+<!ATTLIST enumname
     alt CDATA #IMPLIED
     %boost.common.attrib;>
 
@@ -301,9 +313,9 @@
 <!ELEMENT headername (#PCDATA)>
 <!ATTLIST headername %boost.common.attrib;>
 
-<!ELEMENT copy-assignment
+<!ELEMENT copy-assignment
     (template?, type?, parameter*, %boost.function.semantics;)>
-<!ATTLIST copy-assignment
+<!ATTLIST copy-assignment
     cv CDATA #IMPLIED
     specifiers CDATA #IMPLIED
     %boost.common.attrib;>
@@ -330,7 +342,7 @@
      %boost.common.attrib;>
 
 <!--========== Boost Testsuite Extensions ==========-->
-<!ENTITY % boost.testsuite.tests
+<!ENTITY % boost.testsuite.tests
         "compile-test|link-test|run-test|
          compile-fail-test|link-fail-test|run-fail-test">
 <!ENTITY % boost.testsuite.test.content
@@ -345,12 +357,12 @@
      name CDATA #IMPLIED>
 
 <!ELEMENT link-test (%boost.testsuite.test.content;)>
-<!ATTLIST link-test
+<!ATTLIST link-test
      filename CDATA #REQUIRED
      name CDATA #IMPLIED>
 
 <!ELEMENT run-test (%boost.testsuite.test.content;)>
-<!ATTLIST run-test
+<!ATTLIST run-test
      filename CDATA #REQUIRED
      name CDATA #IMPLIED>
 
@@ -360,12 +372,12 @@
      name CDATA #IMPLIED>
 
 <!ELEMENT link-fail-test (%boost.testsuite.test.content;)>
-<!ATTLIST link-fail-test
+<!ATTLIST link-fail-test
      filename CDATA #REQUIRED
      name CDATA #IMPLIED>
 
 <!ELEMENT run-fail-test (%boost.testsuite.test.content;)>
-<!ATTLIST run-fail-test
+<!ATTLIST run-fail-test
      filename CDATA #REQUIRED
      name CDATA #IMPLIED>
 
@@ -378,13 +390,13 @@
 <!ELEMENT lib (#PCDATA)>
 
 <!ELEMENT requirement (#PCDATA)>
-<!ATTLIST requirement
+<!ATTLIST requirement
      name CDATA #REQUIRED>
 
 <!ELEMENT if-fails ANY>
 
 <!ELEMENT parameter (paramtype, default?, description?)>
-<!ATTLIST parameter
+<!ATTLIST parameter
      name CDATA #IMPLIED>
 
 <!ELEMENT programlisting ANY>
@@ -393,7 +405,7 @@
 
 <!--========== Customize the DocBook DTD ==========-->
 <!ENTITY % local.tech.char.class "|functionname|libraryname|enumname|code">
-<!ENTITY % local.para.class
+<!ENTITY % local.para.class
         "|using-namespace|using-class|librarylist|librarycategorylist">
 <!ENTITY % local.descobj.class "|libraryinfo">
 <!ENTITY % local.classname.attrib "alt CDATA #IMPLIED">
@@ -408,5 +420,5 @@
 <!--========== Import DocBook DTD ==========-->
 <!ENTITY % DocBook PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
            "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-
+
 %DocBook;

Modified: branches/release/tools/boostbook/setup_boostbook.py
==============================================================================
--- branches/release/tools/boostbook/setup_boostbook.py (original)
+++ branches/release/tools/boostbook/setup_boostbook.py 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,5 +1,5 @@
 # Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-#
+#
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
@@ -10,10 +10,11 @@
 # right now it is used only be release scripts
 
 # User configuration
-DOCBOOK_XSL_VERSION = "1.67.2"
+DOCBOOK_XSL_VERSION = "1.73.2"
 DOCBOOK_DTD_VERSION = "4.2"
-FOP_VERSION = "0.20.5"
-FOP_MIRROR = "http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop/"
+FOP_VERSION = "0.94"
+FOP_JDK_VERSION="1.4"
+FOP_MIRROR = "http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop"
 SOURCEFORGE_MIRROR = "http://puzzle.dl.sourceforge.net"
 
 # No user configuration below this point-------------------------------------
@@ -40,7 +41,7 @@
     ( options, args ) = parser.parse_args( args )
     if options.tools is None:
         options.tools = os.getcwd()
-
+
 
     return options.tools
 
@@ -48,7 +49,7 @@
     return path.replace( "\\", "/" )
 
 def unzip( archive_path, result_dir ):
- z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED )
+ z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED )
     for f in z.infolist():
         print f.filename
         if not os.path.exists( os.path.join( result_dir, os.path.dirname( f.filename ) ) ):
@@ -56,11 +57,11 @@
         result = open( os.path.join( result_dir, f.filename ), 'wb' )
         result.write( z.read( f.filename ) )
         result.close()
-
+
     z.close()
 
 def gunzip( archive_path, result_dir ):
- tar = tarfile.open( archive_path, 'r:gz' )
+ tar = tarfile.open( archive_path, 'r:gz' )
     for tarinfo in tar:
         tar.extract( tarinfo, result_dir )
     tar.close()
@@ -143,7 +144,7 @@
     except OSError, e:
         os.unlink( config_file )
         os.rename( config_file + ".tmp", config_file )
-
+
 
 def setup_docbook_xsl( tools_directory ):
     print "DocBook XSLT Stylesheets ..."
@@ -181,7 +182,7 @@
         print "Expanding DocBook XML DTD into %s... " % DOCBOOK_DTD_DIR
         unzip( DOCBOOK_DTD_ZIP, DOCBOOK_DTD_DIR )
         print "done."
-
+
     return DOCBOOK_DTD_DIR
 
 def find_xsltproc():
@@ -206,13 +207,13 @@
 
 def setup_fop( tools_directory ):
     print "FOP ..."
- FOP_TARBALL = os.path.join( tools_directory, "fop-%s-bin.tar.gz" % FOP_VERSION )
+ FOP_TARBALL = os.path.join( tools_directory, "fop-%s-bin-jdk%s.tar.gz" % ( FOP_VERSION, FOP_JDK_VERSION ) )
     FOP_URL = "%s/%s" % ( FOP_MIRROR, os.path.basename( FOP_TARBALL ) )
     FOP_DIR = to_posix( "%s/fop-%s" % ( tools_directory, FOP_VERSION ) )
     if sys.platform == 'win32':
         fop_driver = "fop.bat"
     else:
- fop_driver = "fop.sh"
+ fop_driver = "fop"
 
     FOP = to_posix( os.path.join( FOP_DIR, fop_driver ) )
 
@@ -240,7 +241,7 @@
         print " Updating Boost.Jam configuration in %s... " % JAM_CONFIG_OUT
         return JAM_CONFIG_OUT
     elif os.environ.has_key( "BOOST_ROOT" ) and os.path.exists( os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" ) ):
- JAM_CONFIG_IN=os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" )
+ JAM_CONFIG_IN=os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" )
         print " Found user-config.jam in BOOST_ROOT directory (%s)" % JAM_CONFIG_IN
         JAM_CONFIG_IN_TEMP="no"
         print " Writing Boost.Jam configuration to %s... " % JAM_CONFIG_OUT
@@ -251,7 +252,7 @@
     print "Setting up boostbook tools..."
     print "-----------------------------"
     print ""
-
+
     DOCBOOK_XSL_DIR = setup_docbook_xsl( tools_directory )
     DOCBOOK_DTD_DIR = setup_docbook_dtd( tools_directory )
     XSLTPROC = find_xsltproc()
@@ -264,7 +265,7 @@
         FOP = setup_fop( tools_directory )
 
     user_config = find_user_config()
-
+
     # Find the input jamfile to configure
 
     if user_config is None:
@@ -296,8 +297,8 @@
 def main():
     ( tools_directory ) = accept_args( sys.argv[ 1: ] )
     setup_boostbook( tools_directory )
-
+
 if __name__ == "__main__":
     main()
 
-
+

Modified: branches/release/tools/boostbook/setup_boostbook.sh
==============================================================================
--- branches/release/tools/boostbook/setup_boostbook.sh (original)
+++ branches/release/tools/boostbook/setup_boostbook.sh 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,15 +1,16 @@
 #!/bin/sh
 # Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-#
+#
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
 # User configuration
-DOCBOOK_XSL_VERSION=1.68.1
+DOCBOOK_XSL_VERSION=1.73.2
 DOCBOOK_DTD_VERSION=4.2
-FOP_VERSION=0.20.5
-FOP_MIRROR=http://mirrors.ibiblio.org/pub/mirrors/apache/xml/fop/
+FOP_VERSION=0.94
+FOP_JDK_VERSION=1.4
+FOP_MIRROR=http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop
 SOURCEFORGE_MIRROR=http://dl.sourceforge.net
 HTTP_GET_CMD="curl -O"
 
@@ -99,17 +100,17 @@
   HAVE_FOP="no"
 else
   echo "Searching for Java... $JAVA.";
- FOP_TARBALL="fop-$FOP_VERSION-bin.tar.gz"
+ FOP_TARBALL="fop-$FOP_VERSION-bin-jdk$FOP_JDK_VERSION.tar.gz"
   FOP_URL="$FOP_MIRROR/$FOP_TARBALL"
   FOP_DIR="$PWD/fop-$FOP_VERSION"
- FOP="$FOP_DIR/fop.sh"
+ FOP="$FOP_DIR/fop"
   if test -f $FOP_TARBALL; then
     echo "Using existing FOP distribution (version $FOP_VERSION)."
   else
- echo "Downloading FOP distribution version $FOP_VERSION..."
+ echo "Downloading FOP distribution version $FOP_VERSION..."
     $HTTP_GET_CMD $FOP_URL
   fi
-
+
   if test ! -d $FOP_DIR; then
     echo -n "Expanding FOP distribution into $FOP_DIR... ";
     gunzip -cd $FOP_TARBALL | tar xf -
@@ -122,7 +123,7 @@
 JAM_CONFIG_OUT="$HOME/user-config.jam"
 if test -r "$HOME/user-config.jam"; then
   JAM_CONFIG_IN="user-config-backup.jam"
- cp $JAM_CONFIG_OUT user-config-backup.jam
+ cp $JAM_CONFIG_OUT user-config-backup.jam
   JAM_CONFIG_IN_TEMP="yes"
   echo -n "Updating Boost.Jam configuration in $JAM_CONFIG_OUT... "
 
@@ -130,7 +131,7 @@
   JAM_CONFIG_IN="$BOOST_ROOT/tools/build/v2/user-config.jam";
   JAM_CONFIG_IN_TEMP="no"
   echo -n "Writing Boost.Jam configuration to $JAM_CONFIG_OUT... "
-else
+else
   echo "ERROR: Please set the BOOST_ROOT environment variable to refer to your"
   echo "Boost installation or copy user-config.jam into your home directory."
   exit 0
@@ -139,8 +140,8 @@
 cat > setup_boostbook.awk <<EOF
 BEGIN { using_boostbook = 0; eaten=0 }
 
-/^\s*using boostbook/ {
- using_boostbook = 1;
+/^\s*using boostbook/ {
+ using_boostbook = 1;
   print "using boostbook";
   print " : $DOCBOOK_XSL_DIR";
   print " : $DOCBOOK_DTD_DIR";
@@ -156,7 +157,7 @@
 
 /^.*$/ { if (eaten == 0) print; eaten=0 }
 
-END {
+END {
   if (using_boostbook==0) {
     print "using boostbook";
     print " : $DOCBOOK_XSL_DIR";

Modified: branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -59,7 +59,7 @@
               <copyright><xsl:copy-of select="document(concat('../concepts/', @file))/copyright/node()"/></copyright>
             </xsl:when>
           </xsl:choose>
- </xsl:for-each>
+ </xsl:for-each>
       </refentryinfo>
 -->
 
@@ -108,12 +108,12 @@
     <!-- This part must be run even if there are no associated types to print out, so the hidden type definitions can be found -->
     <xsl:variable name="definition_list">
       <xsl:call-template name="make-definition-list">
- <xsl:with-param name="typedefs" select="define-type | associated-type"/>
- <xsl:with-param name="definition_list">
- <xsl:for-each select="param/@name">
- @(@<xsl:value-of select="."/>=<xsl:value-of select="."/>@)@
- </xsl:for-each>
- </xsl:with-param>
+ <xsl:with-param name="typedefs" select="define-type | associated-type"/>
+ <xsl:with-param name="definition_list">
+ <xsl:for-each select="param/@name">
+ @(@<xsl:value-of select="."/>=<xsl:value-of select="."/>@)@
+ </xsl:for-each>
+ </xsl:with-param>
       </xsl:call-template>
     </xsl:variable>
 
@@ -130,12 +130,12 @@
 
     <xsl:variable name="notations">
       <xsl:for-each select="notation">
- @@(@@<xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="ignore-cv" select="true()"/>
- <xsl:with-param name="ignore-references" select="true()"/>
- </xsl:call-template>@@=@@<xsl:value-of select="normalize-space(@variables)"/>@@)@@
+ @@(@@<xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="ignore-cv" select="true()"/>
+ <xsl:with-param name="ignore-references" select="true()"/>
+ </xsl:call-template>@@=@@<xsl:value-of select="normalize-space(@variables)"/>@@)@@
       </xsl:for-each>
     </xsl:variable>
 
@@ -144,9 +144,9 @@
     <xsl:if test="definition">
       <refsect1>
       <title>Definitions</title>
- <xsl:for-each select="definition">
- <p><xsl:apply-templates/></p>
- </xsl:for-each>
+ <xsl:for-each select="definition">
+ <p><xsl:apply-templates/></p>
+ </xsl:for-each>
       </refsect1>
     </xsl:if>
 
@@ -202,8 +202,8 @@
                       <xsl:with-param name="notations" select="normalize-space($notations)"/>
                     </xsl:call-template>
                   </type>
-
- <xsl:comment/> must be
+
+ <xsl:comment/> must be
                   <xsl:for-each select="return-type/*">
                     <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
                     <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
@@ -214,7 +214,7 @@
                     </xsl:call-template>
                   </xsl:for-each><xsl:comment/>.
                 </para>
-
+
                 <xsl:if test="description">
                   <xsl:for-each select="description">
                     <xsl:apply-templates/>
@@ -271,9 +271,9 @@
           </thead>
           <tbody>
             <xsl:apply-templates select="valid-expression">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
                 select="$definition_list"/>
- <xsl:with-param name="notations"
+ <xsl:with-param name="notations"
                 select="normalize-space($notations)"/>
               <xsl:with-param name="columns" select="$columns"/>
             </xsl:apply-templates>
@@ -282,53 +282,53 @@
       </informaltable>
       <!-- Doug prefers the table
       <variablelist>
- <xsl:for-each select="valid-expression">
- <xsl:variable name="as-cxx-value">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="notations" select="normalize-space($notations)"/>
- </xsl:call-template>
- </xsl:variable>
- <varlistentry>
- <term><xsl:value-of select="@name"/>: <literal><xsl:value-of select="$as-cxx-value"/></literal></term>
- <listitem><variablelist>
- <xsl:if test="return-type/*">
- <varlistentry><term>Return value</term><listitem><para>
- <xsl:for-each select="return-type/*">
- <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
- <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
- <xsl:call-template name="unparse-constraint">
- <xsl:with-param name="constraint" select="."/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="capitalize" select="position()=1"/>
- </xsl:call-template>
- </xsl:for-each>
- </para></listitem></varlistentry>
- </xsl:if>
-
- <xsl:for-each select="precondition">
- <varlistentry><term>Precondition</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
-
- <xsl:for-each select="semantics">
- <varlistentry><term>Semantics</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
-
- <xsl:for-each select="postcondition">
- <varlistentry><term>Postcondition</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
+ <xsl:for-each select="valid-expression">
+ <xsl:variable name="as-cxx-value">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="notations" select="normalize-space($notations)"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <varlistentry>
+ <term><xsl:value-of select="@name"/>: <literal><xsl:value-of select="$as-cxx-value"/></literal></term>
+ <listitem><variablelist>
+ <xsl:if test="return-type/*">
+ <varlistentry><term>Return value</term><listitem><para>
+ <xsl:for-each select="return-type/*">
+ <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
+ <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
+ <xsl:call-template name="unparse-constraint">
+ <xsl:with-param name="constraint" select="."/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="capitalize" select="position()=1"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </para></listitem></varlistentry>
+ </xsl:if>
 
- </variablelist></listitem>
- </varlistentry>
+ <xsl:for-each select="precondition">
+ <varlistentry><term>Precondition</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
 
- </xsl:for-each>
+ <xsl:for-each select="semantics">
+ <varlistentry><term>Semantics</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
+
+ <xsl:for-each select="postcondition">
+ <varlistentry><term>Postcondition</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
+
+ </variablelist></listitem>
+ </varlistentry>
+
+ </xsl:for-each>
       </variablelist>
 -->
       </refsect1>
@@ -337,9 +337,9 @@
     <xsl:if test="complexity">
       <refsect1>
       <title>Complexity</title>
- <xsl:for-each select="complexity">
- <para><xsl:apply-templates/></para>
- </xsl:for-each>
+ <xsl:for-each select="complexity">
+ <para><xsl:apply-templates/></para>
+ </xsl:for-each>
       </refsect1>
     </xsl:if>
 
@@ -347,14 +347,14 @@
       <refsect1>
       <title>Invariants</title>
       <variablelist>
- <xsl:for-each select="invariant">
- <varlistentry>
- <term><xsl:value-of select="@name"/></term>
- <listitem>
- <para><xsl:apply-templates/></para>
- </listitem>
- </varlistentry>
- </xsl:for-each>
+ <xsl:for-each select="invariant">
+ <varlistentry>
+ <term><xsl:value-of select="@name"/></term>
+ <listitem>
+ <para><xsl:apply-templates/></para>
+ </listitem>
+ </varlistentry>
+ </xsl:for-each>
       </variablelist>
       </refsect1>
     </xsl:if>
@@ -362,46 +362,44 @@
     <xsl:if test="example-model">
       <refsect1>
       <title>Models</title>
- <itemizedlist>
- <xsl:for-each select="example-model">
- <listitem>
- <simplelist type="inline">
- <xsl:for-each select="*">
- <xsl:variable name="example-value">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="."/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- </xsl:call-template>
- </xsl:variable>
- <member><type><xsl:value-of select="$example-value"/></type></member>
- </xsl:for-each>
- </simplelist>
- </listitem>
- </xsl:for-each>
- </itemizedlist>
+ <itemizedlist>
+ <xsl:for-each select="example-model">
+ <listitem>
+ <simplelist type="inline">
+ <xsl:for-each select="*">
+ <xsl:variable name="example-value">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="."/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <member><type><xsl:value-of select="$example-value"/></type></member>
+ </xsl:for-each>
+ </simplelist>
+ </listitem>
+ </xsl:for-each>
+ </itemizedlist>
       </refsect1>
     </xsl:if>
 
- <xsl:variable name="see-also-list" select="concept-ref | see-also | refines | refines-when-mutable | models-as-first-arg | models | models-when-mutable"/>
+ <xsl:variable name="see-also-list-0" select="concept-ref | see-also | refines | refines-when-mutable | models-as-first-arg | models | models-when-mutable"/>
+ <xsl:variable name="see-also-list-1" select="$see-also-list-0[string(@name | @concept) != string(../@name)]"/>
+ <xsl:variable name="see-also-list" select="$see-also-list-1[not(string(@name|@concept) = (preceding::*/@name | preceding::*/@concept | ancestor::*/@name | ancestor::*/@concept))]"/>
     <xsl:if test="$see-also-list">
       <refsect1>
- <title>See also</title>
- <itemizedlist>
- <xsl:for-each select="$see-also-list">
- <xsl:sort select="string(@name|@concept)" data-type="text"/>
- <xsl:if test="string(@name|@concept) != string(../@name)">
- <xsl:if test="not(string(@name|@concept) = (preceding::*/@name | preceding::*/@concept | ancestor::*/@name | ancestor::*/@concept))">
- <listitem>
- <para>
- <xsl:call-template name="concept.link">
- <xsl:with-param name="name" select="@name|@concept"/>
- </xsl:call-template>
- </para>
- </listitem>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- </itemizedlist>
+ <title>See also</title>
+ <itemizedlist>
+ <xsl:for-each select="$see-also-list">
+ <xsl:sort select="string(@name|@concept)" data-type="text"/>
+ <listitem>
+ <para>
+ <xsl:call-template name="concept.link">
+ <xsl:with-param name="name" select="@name|@concept"/>
+ </xsl:call-template>
+ </para>
+ </listitem>
+ </xsl:for-each>
+ </itemizedlist>
       </refsect1>
     </xsl:if>
 
@@ -417,79 +415,79 @@
     <xsl:choose>
 
       <xsl:when test="name($constraint)='require-same-type'">
- <xsl:if test="$type-expr-mode">identical to </xsl:if>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:if test="$type-expr-mode">identical to </xsl:if>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
       </xsl:when>
 
       <xsl:when test="name($constraint)='convertible-to'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">convertible to </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Convertible to </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">convertible to </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">convertible to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Convertible to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">convertible to </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
       </xsl:when>
 
       <xsl:when test="name($constraint)='derived-from'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">derived from </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Derived from </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">derived from </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">derived from </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Derived from </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">derived from </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
       </xsl:when>
 
       <xsl:when test="name($constraint)='assignable-to'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">assignable to </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Assignable to </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">assignable to </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">assignable to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Assignable to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">assignable to </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
       </xsl:when>
 
       <xsl:when test="name($constraint)='models-as-first-arg'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode"> a model </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize"> Models </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)"> models </xsl:when>
- </xsl:choose>
- <xsl:if test="$constraint/*"><xsl:comment/>
- (along with <xsl:for-each select="$constraint/*"><type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="."/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
- <xsl:choose>
- <xsl:when test="position()=last()"/>
- <xsl:when test="position()=last()-1 and last()=2"> and </xsl:when>
- <xsl:when test="position()=last()-1 and last()!=2">, and </xsl:when>
- <xsl:otherwise>, </xsl:otherwise>
- </xsl:choose><xsl:comment/>
- </xsl:for-each><xsl:comment/>) <xsl:comment/>
- </xsl:if><xsl:comment/>
- <xsl:if test="$type-expr-mode"> of </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode"> a model </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize"> Models </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)"> models </xsl:when>
+ </xsl:choose>
+ <xsl:if test="$constraint/*"><xsl:comment/>
+ (along with <xsl:for-each select="$constraint/*"><type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="."/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
+ <xsl:choose>
+ <xsl:when test="position()=last()"/>
+ <xsl:when test="position()=last()-1 and last()=2"> and </xsl:when>
+ <xsl:when test="position()=last()-1 and last()!=2">, and </xsl:when>
+ <xsl:otherwise>, </xsl:otherwise>
+ </xsl:choose><xsl:comment/>
+ </xsl:for-each><xsl:comment/>) <xsl:comment/>
+ </xsl:if><xsl:comment/>
+ <xsl:if test="$type-expr-mode"> of </xsl:if>
         <xsl:call-template name="concept.link">
           <xsl:with-param name="name" select="$constraint/@concept"/>
         </xsl:call-template>
@@ -504,35 +502,35 @@
 
     <xsl:choose>
       <xsl:when test="$typedefs">
- <xsl:variable name="type_definition">
- <xsl:if test="name($typedefs[1]/*[1])!='description'">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$typedefs[1]/*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:variable>
-
- <xsl:variable name="new_type_definition">
- <xsl:choose>
- <xsl:when test="name($typedefs[1])='associated-type'">
- <xsl:value-of select="$typedefs[1]/@name"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$type_definition"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:call-template name="make-definition-list">
- <xsl:with-param name="typedefs" select="$typedefs[position()!=1]"/>
- <xsl:with-param name="definition_list" select="concat($definition_list, ' @(@', $typedefs[1]/@name, '=', $new_type_definition, '@)@')"/>
- </xsl:call-template>
+ <xsl:variable name="type_definition">
+ <xsl:if test="name($typedefs[1]/*[1])!='description'">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$typedefs[1]/*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="new_type_definition">
+ <xsl:choose>
+ <xsl:when test="name($typedefs[1])='associated-type'">
+ <xsl:value-of select="$typedefs[1]/@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$type_definition"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="make-definition-list">
+ <xsl:with-param name="typedefs" select="$typedefs[position()!=1]"/>
+ <xsl:with-param name="definition_list" select="concat($definition_list, ' @(@', $typedefs[1]/@name, '=', $new_type_definition, '@)@')"/>
+ </xsl:call-template>
 
       </xsl:when>
 
       <xsl:otherwise> <!-- End of expression list, emit the results that have accumulated -->
- <xsl:value-of select="$definition_list"/>
+ <xsl:value-of select="$definition_list"/>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
@@ -551,7 +549,7 @@
               <tgroup cols="2">
                 <tbody>
                   <xsl:apply-templates select="associated-type" mode="sgi">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
                       select="$definition_list"/>
                   </xsl:apply-templates>
                 </tbody>
@@ -561,7 +559,7 @@
           <xsl:when test="$boost.concept.layout='austern'">
             <itemizedlist>
               <xsl:apply-templates select="associated-type" mode="austern">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
                   select="$definition_list"/>
               </xsl:apply-templates>
             </itemizedlist>
@@ -588,7 +586,7 @@
                   </seg>
                 </seglistitem>
               </xsl:for-each>
- </segmentedlist>
+ </segmentedlist>
           </xsl:when>
         </xsl:choose>
       </refsect1>
@@ -600,11 +598,11 @@
 
     <xsl:if test="$list!=''">
       <term><varname>
- <xsl:if test="substring-before($list,' ')=''"><xsl:value-of select="$list"/></xsl:if>
- <xsl:value-of select="substring-before($list,' ')"/>
+ <xsl:if test="substring-before($list,' ')=''"><xsl:value-of select="$list"/></xsl:if>
+ <xsl:value-of select="substring-before($list,' ')"/>
       </varname></term>
       <xsl:call-template name="comma-list">
- <xsl:with-param name="list" select="substring-after($list,' ')"/>
+ <xsl:with-param name="list" select="substring-after($list,' ')"/>
       </xsl:call-template>
     </xsl:if>
   </xsl:template>
@@ -629,7 +627,7 @@
     <listitem>
       <para>
         <emphasis role="bold"><xsl:value-of select="@name"/></emphasis>
-
+
         <xsl:call-template name="preformatted">
           <xsl:with-param name="text">
             <xsl:call-template name="unparse-cpp">
@@ -638,7 +636,7 @@
             </xsl:call-template>
           </xsl:with-param>
         </xsl:call-template>
-
+
         <xsl:for-each select="description">
           <xsl:apply-templates/>
         </xsl:for-each>
@@ -672,11 +670,11 @@
               <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
               <xsl:call-template name="unparse-constraint">
                 <xsl:with-param name="constraint" select="."/>
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
                   select="$definition_list"/>
                 <xsl:with-param name="capitalize" select="position()=1"/>
               </xsl:call-template>
- </xsl:for-each>
+ </xsl:for-each>
           </simpara>
         </entry>
       </xsl:if>
@@ -732,7 +730,7 @@
         <xsl:for-each select="notation">
           <xsl:variable name="notation_name">
             <xsl:call-template name="comma-list">
- <xsl:with-param name="list"
+ <xsl:with-param name="list"
                 select="normalize-space(@variables)"/>
             </xsl:call-template>
           </xsl:variable>
@@ -755,7 +753,7 @@
           </varlistentry>
         </xsl:for-each>
       </variablelist>
- </refsect1>
+ </refsect1>
   </xsl:template>
 
   <xsl:template name="concept.link">
@@ -763,7 +761,7 @@
     <xsl:param name="warn" select="true()"/>
     <xsl:param name="text" select="$name"/>
     <xsl:variable name="node" select="key('concepts', $name)"/>
-
+
     <xsl:choose>
       <xsl:when test="count($node)=0">
         <xsl:if test="$warn">
@@ -785,7 +783,7 @@
           <xsl:with-param name="text" select="$text"/>
         </xsl:call-template>
       </xsl:otherwise>
- </xsl:choose>
+ </xsl:choose>
   </xsl:template>
 
   <xsl:template name="remove-whitespace">
@@ -796,7 +794,7 @@
       <xsl:when test="contains($normalized, ' ')">
         <xsl:value-of select="substring-before($normalized, ' ')"/>
         <xsl:call-template name="remove-whitespace">
- <xsl:with-param name="text"
+ <xsl:with-param name="text"
             select="substring-after($normalized, ' ')"/>
         </xsl:call-template>
       </xsl:when>

Modified: branches/release/tools/boostbook/xsl/chunk-common.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/chunk-common.xsl (original)
+++ branches/release/tools/boostbook/xsl/chunk-common.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/tools/boostbook/xsl/docbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/docbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/docbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
   -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
                 version="1.0">
   <xsl:include href="reference.xsl"/>
 
@@ -52,7 +53,7 @@
           <xsl:if test="not(title)">
             <title>
               <xsl:text>Reference</xsl:text>
- </title>
+ </title>
           </xsl:if>
 
           <xsl:if test="concept">
@@ -73,7 +74,7 @@
               </xsl:choose>
 
               <title>Concepts</title>
-
+
               <itemizedlist>
                 <xsl:for-each select="concept">
                   <listitem>
@@ -116,7 +117,7 @@
         </title>
 
         <xsl:apply-templates select="para|section" mode="annotation"/>
-
+
         <xsl:if test="macro">
           <xsl:call-template name="synopsis">
             <xsl:with-param name="text">
@@ -133,7 +134,7 @@
                      |descendant::typedef">
           <xsl:call-template name="synopsis">
             <xsl:with-param name="text">
- <xsl:apply-templates mode="synopsis"
+ <xsl:apply-templates mode="synopsis"
                 select="namespace|class|struct|union
                        |function|free-function-group
                        |overloaded-function|enum
@@ -262,7 +263,7 @@
         </xsl:if>
         <xsl:if test="not($highlight)">
           <xsl:value-of select="$text"/>
- </xsl:if>
+ </xsl:if>
       </xsl:when>
       <xsl:otherwise>
         <xsl:message>
@@ -290,7 +291,7 @@
       <refnamediv>
         <refname><xsl:value-of select="$refname"/></refname>
         <refpurpose>
- <xsl:apply-templates mode="annotation" select="$purpose"/>
+ <xsl:apply-templates mode="purpose" select="$purpose"/>
                 </refpurpose>
       </refnamediv>
       <refsynopsisdiv>
@@ -339,7 +340,7 @@
       <xsl:for-each select="./@*">
         <xsl:choose>
           <xsl:when test="local-name(.)='last-revision'">
- <xsl:attribute
+ <xsl:attribute
               name="rev:last-revision"
               namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision">
               <xsl:value-of select="."/>
@@ -385,7 +386,7 @@
         </xsl:attribute>
 
         <xsl:if test="@last-revision">
- <xsl:attribute
+ <xsl:attribute
             name="rev:last-revision"
             namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision">
             <xsl:value-of select="@last-revision"/>
@@ -443,7 +444,7 @@
   <xsl:template match="*" mode="namespace-reference">
     <xsl:apply-templates select="." mode="reference"/>
   </xsl:template>
-
+
   <!-- Make the various blocks immediately below a "part" be
        "chapter"-s. Must also take into account turning
        chapters within chpaters into sections. -->
@@ -460,7 +461,7 @@
   <xsl:template match="part/part/partinfo|part/article/articleinfo">
     <chapterinfo><xsl:apply-templates/></chapterinfo>
   </xsl:template>
- <xsl:template match="part/part/chapter">
+ <xsl:template match="part/part/chapter|part/part/appendix">
     <section>
       <xsl:for-each select="./@*">
         <xsl:attribute name="{name(.)}">
@@ -470,7 +471,7 @@
       <xsl:apply-templates/>
     </section>
   </xsl:template>
- <xsl:template match="part/part/chapter/chapterinfo">
+ <xsl:template match="part/part/chapter/chapterinfo|part/part/appendix/appendixinfo">
     <sectioninfo><xsl:apply-templates/></sectioninfo>
   </xsl:template>
 </xsl:stylesheet>

Modified: branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -46,7 +46,7 @@
 
   <xsl:key name="compounds-by-kind" match="compounddef" use="@kind"/>
   <xsl:key name="compounds-by-id" match="compounddef" use="@id"/>
- <xsl:key name="inner-classes" match="compounddef[not(attribute::kind='namespace') and not(attribute::kind='file')]/innerclass" use="@refid"/>
+ <xsl:key name="members-by-id" match="memberdef" use="@id" />
 
   <xsl:strip-space elements="briefdescription detaileddescription"/>
 
@@ -184,8 +184,8 @@
     <xsl:param name="with-namespace-refs"/>
 
     <xsl:if test="contains(string(location/attribute::file),
- concat('/', $in-file)) and
- not (key('inner-classes', @id))">
+ concat('/', $in-file)) ">
+
       <!-- The short name of this class -->
       <xsl:variable name="name-with-spec">
         <xsl:call-template name="strip-qualifiers">
@@ -413,6 +413,16 @@
     </xsl:if>
   </xsl:template>
 
+ <xsl:template match="sectiondef" mode="toplevel">
+ <xsl:param name="in-file" select="''"/>
+
+ <xsl:apply-templates mode="toplevel"
+ select="memberdef[generate-id() =
+ generate-id(key('members-by-id', @id))]">
+ <xsl:with-param name="in-file" select="$in-file"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
   <xsl:template match="memberdef" mode="toplevel">
     <xsl:param name="with-namespace-refs"/>
     <xsl:param name="in-file"/>
@@ -448,6 +458,19 @@
           <xsl:apply-templates select="detaileddescription" mode="passthrough"/>
         </macro>
       </xsl:when>
+
+ <xsl:when test="@kind='function'">
+ <xsl:call-template name="function" />
+ </xsl:when>
+
+ <xsl:when test="@kind='typedef'">
+ <xsl:call-template name="typedef" />
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:message>Cannot handle toplevel memberdef element with
+ kind=<xsl:value-of select="@kind"/></xsl:message>
+ </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
 
@@ -666,6 +689,12 @@
       <xsl:when test="@kind='user-defined'">
         <xsl:apply-templates/>
       </xsl:when>
+ <xsl:when test="@kind=''">
+ <xsl:apply-templates select="memberdef[generate-id() =
+ generate-id(key('members-by-id', @id))]">
+ <xsl:with-param name="in-file" select="$in-file"/>
+ </xsl:apply-templates>
+ </xsl:when>
       <xsl:otherwise>
         <xsl:message>
 Cannot handle sectiondef with kind=<xsl:value-of select="@kind"/>
@@ -1328,4 +1357,61 @@
     <xsl:apply-templates select="*|text()" mode="passthrough"/>
   </xsl:template>
 
+ <!--
+ Eric Niebler: 4-4-2007
+ Here is some half-baked support for LaTeX formulas in
+ Doxygen comments. Doxygen doesn't generate the PNG files
+ when outputting XML. In order to use this code, you must
+ run Doxygen first to generate HTML (and the PNG files for
+ the formulas), then copy the PNG files into the images/
+ directory, and then build the docs with bjam. Commented
+ out until something better comes along.
+ <xsl:template match="formula" mode="passthrough">
+ <xsl:choose>
+ <xsl:when test="substring(*|text(), 1, 2) = '\['">
+ <equation>
+ <alt>
+ <xsl:value-of select="*|text()"/>
+ </alt>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata format="PNG" align="center">
+ <xsl:attribute name="fileref">
+ <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ </xsl:attribute>
+ </imagedata>
+ </imageobject>
+ <textobject role="tex">
+ <phrase>
+ <xsl:value-of select="*|text()"/>
+ </phrase>
+ </textobject>
+ </mediaobject>
+ </equation>
+ </xsl:when>
+ <xsl:otherwise>
+ <inlineequation>
+ <alt>
+ <xsl:value-of select="*|text()"/>
+ </alt>
+ <inlinemediaobject>
+ <imageobject role="html">
+ <imagedata format="PNG">
+ <xsl:attribute name="fileref">
+ <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ </xsl:attribute>
+ </imagedata>
+ </imageobject>
+ <textobject role="tex">
+ <phrase>
+ <xsl:value-of select="*|text()"/>
+ </phrase>
+ </textobject>
+ </inlinemediaobject>
+ </inlineequation>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ -->
  </xsl:stylesheet>
+
\ No newline at end of file

Modified: branches/release/tools/boostbook/xsl/fo.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/fo.xsl (original)
+++ branches/release/tools/boostbook/xsl/fo.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -14,7 +14,7 @@
   <xsl:param name="chapter.autolabel" select="0"/>
   <xsl:param name="refentry.generate.name" select="0"/>
   <xsl:param name="refentry.generate.title" select="1"/>
- <xsl:param name="fop.extensions" select="1"/>
+ <xsl:param name="fop1.extensions" select="1"/>
   <xsl:param name="make.year.ranges" select="1"/>
   <xsl:param name="ulink.show" select="0"/>
 
@@ -119,4 +119,94 @@
   </fo:list-item>
 </xsl:template>
 
+<!--
+
+ The following rules apply syntax highlighting to phrases
+ that have been appropriately marked up, the highlighting
+ used is the same as that used by our CSS style sheets,
+ but potentially we have the option to do better here
+ since we can add bold and italic formatting quite easily
+
+ -->
+
+<xsl:template match="//programlisting/phrase[@role='keyword']">
+ <fo:inline color="#0000AA"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='special']">
+ <fo:inline color="#707070"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='preprocessor']">
+ <fo:inline color="#402080"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='char']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='comment']">
+ <fo:inline color="#800000"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='string']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='number']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='white_bkd']">
+ <fo:inline color="#FFFFFF"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='dk_grey_bkd']">
+ <fo:inline color="#999999"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+
+<!--
+Make all hyperlinks blue colored:
+-->
+<xsl:attribute-set name="xref.properties">
+ <xsl:attribute name="color">blue</xsl:attribute>
+</xsl:attribute-set>
+
+<!--
+Put a box around admonishments and keep them together:
+-->
+<xsl:attribute-set name="graphical.admonition.properties">
+ <xsl:attribute name="border-color">#FF8080</xsl:attribute>
+ <xsl:attribute name="border-width">1px</xsl:attribute>
+ <xsl:attribute name="border-style">solid</xsl:attribute>
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+</xsl:attribute-set>
+
+<!--
+Put a box around code blocks, also set the font size
+and keep the block together if we can:
+-->
+<xsl:attribute-set name="monospace.verbatim.properties">
+ <xsl:attribute name="border-color">#DCDCDC</xsl:attribute>
+ <xsl:attribute name="border-width">1px</xsl:attribute>
+ <xsl:attribute name="border-style">solid</xsl:attribute>
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
+</xsl:attribute-set>
+
+<xsl:attribute-set name="table.cell.padding">
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+</xsl:attribute-set>
+
+<xsl:attribute-set name="table.properties">
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+</xsl:attribute-set>
+
+ <xsl:param name="table.frame.border.color">#DCDCDC</xsl:param>
+<xsl:param name="table.cell.border.color">#DCDCDC</xsl:param>
+
 </xsl:stylesheet>
+

Modified: branches/release/tools/boostbook/xsl/function.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/function.xsl (original)
+++ branches/release/tools/boostbook/xsl/function.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
@@ -9,7 +9,7 @@
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 version="1.0">
 
- <xsl:strip-space elements="requires effects postconditions returns throws
+ <xsl:strip-space elements="requires effects postconditions returns throws
                              complexity notes rationale purpose"/>
 
   <!-- When true, the stylesheet will emit compact definitions of
@@ -126,7 +126,7 @@
       </xsl:choose>
     </xsl:variable>
 
- <xsl:if test="not ($standalone) or
+ <xsl:if test="not ($standalone) or
                   (local-name(.)='signature' and (position() &gt; 1))
                   or $suppress-template">
       <xsl:text>&#10;</xsl:text>
@@ -136,7 +136,7 @@
     <xsl:call-template name="indent">
       <xsl:with-param name="indentation" select="$indentation"/>
     </xsl:call-template>
-
+
     <!-- Build the template header -->
     <xsl:variable name="template-length">
       <xsl:choose>
@@ -148,7 +148,7 @@
         </xsl:otherwise>
       </xsl:choose>
     </xsl:variable>
-
+
     <!-- Build a full parameter string (without line breaks) -->
     <xsl:variable name="param-string">
       <xsl:text>(</xsl:text>
@@ -168,21 +168,21 @@
     </xsl:variable>
 
     <!-- Build the full declaration text -->
- <xsl:variable name="decl-string"
+ <xsl:variable name="decl-string"
       select="concat($type, $function-name, $param-string, $postdeclarator)"/>
- <xsl:variable name="end-column"
+ <xsl:variable name="end-column"
       select="$template-length + string-length($decl-string) + $indentation"/>
-
+
     <xsl:choose>
       <!-- Check if we should put the template header on its own line to
            save horizontal space. -->
- <xsl:when test="($template-length &gt; 0) and
+ <xsl:when test="($template-length &gt; 0) and
                       ($end-column &gt; $max-columns)">
         <!-- Emit template header on its own line -->
         <xsl:apply-templates select="template" mode="synopsis">
           <xsl:with-param name="indentation" select="$indentation"/>
         </xsl:apply-templates>
-
+
         <!-- Emit the rest of the function declaration (without the
              template header) indented two extra spaces. -->
         <xsl:call-template name="function">
@@ -249,17 +249,17 @@
         <xsl:text>(</xsl:text>
         <xsl:call-template name="function-parameters">
           <xsl:with-param name="include-names" select="$include-names"/>
- <xsl:with-param name="indentation"
+ <xsl:with-param name="indentation"
             select="$indentation + $template-length + string-length($type)
                     + string-length($function-name) + 1"/>
           <xsl:with-param name="final" select="true()"/>
- </xsl:call-template>
+ </xsl:call-template>
         <xsl:text>)</xsl:text>
 
         <xsl:call-template name="source-highlight">
           <xsl:with-param name="text" select="$postdeclarator"/>
         </xsl:call-template>
- <xsl:text>;</xsl:text>
+ <xsl:text>;</xsl:text>
       </xsl:when>
 
       <!-- This declaration will take multiple lines -->
@@ -320,11 +320,11 @@
         <xsl:text>(</xsl:text>
         <xsl:call-template name="function-parameters">
           <xsl:with-param name="include-names" select="$include-names"/>
- <xsl:with-param name="indentation"
- select="$indentation + $type-length
+ <xsl:with-param name="indentation"
+ select="$indentation + $type-length
                     + string-length($function-name) + 1"/>
           <xsl:with-param name="final" select="true()"/>
- </xsl:call-template>
+ </xsl:call-template>
         <xsl:text>)</xsl:text>
         <xsl:call-template name="source-highlight">
           <xsl:with-param name="text" select="$postdeclarator"/>
@@ -332,7 +332,7 @@
         <xsl:text>;</xsl:text>
       </xsl:otherwise>
     </xsl:choose>
- </xsl:template>
+ </xsl:template>
 
   <!-- Synopsis of function parameters, e.g., "(const T&, int x = 5)" -->
   <xsl:template name="function-parameters">
@@ -394,18 +394,18 @@
       </xsl:variable>
 
       <xsl:variable name="text" select="concat($type, $name, $default)"/>
-
- <xsl:variable name="end-column"
+
+ <xsl:variable name="end-column"
         select="$column + string-length($prefix) + string-length($text)"/>
 
       <xsl:choose>
         <!-- Parameter goes on this line -->
- <xsl:when test="$first-on-line or ($end-column &lt; $max-columns)
+ <xsl:when test="$first-on-line or ($end-column &lt; $max-columns)
                         or not($wrap)">
           <xsl:choose>
             <xsl:when test="$final">
               <xsl:value-of select="$prefix"/>
- <xsl:apply-templates
+ <xsl:apply-templates
                 select="$parameter/paramtype/*|$parameter/paramtype/text()"
                 mode="annotation">
                 <xsl:with-param name="highlight" select="true()"/>
@@ -423,7 +423,7 @@
             <xsl:with-param name="include-names" select="$include-names"/>
             <xsl:with-param name="wrap" select="$wrap"/>
             <xsl:with-param name="final" select="$final"/>
- <xsl:with-param name="parameters"
+ <xsl:with-param name="parameters"
               select="$parameters[position()!=1]"/>
             <xsl:with-param name="prefix" select="', '"/>
             <xsl:with-param name="column" select="$end-column"/>
@@ -441,7 +441,7 @@
           </xsl:call-template>
           <xsl:choose>
             <xsl:when test="$final">
- <xsl:apply-templates
+ <xsl:apply-templates
                 select="$parameter/paramtype/*|$parameter/paramtype/text()"
                 mode="annotation">
                 <xsl:with-param name="highlight" select="true()"/>
@@ -460,10 +460,10 @@
             <xsl:with-param name="include-names" select="$include-names"/>
             <xsl:with-param name="wrap" select="$wrap"/>
             <xsl:with-param name="final" select="$final"/>
- <xsl:with-param name="parameters"
+ <xsl:with-param name="parameters"
               select="$parameters[position()!=1]"/>
             <xsl:with-param name="prefix" select="', '"/>
- <xsl:with-param name="column"
+ <xsl:with-param name="column"
               select="1 + string-length($text) + $indentation"/>
             <xsl:with-param name="first-on-line" select="false()"/>
           </xsl:call-template>
@@ -479,7 +479,7 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1') and
               not (local-name(.)='method')"/>
 
@@ -524,7 +524,7 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1') and
               not (local-name(.)='overloaded-method')"/>
 
@@ -537,7 +537,7 @@
           <xsl:call-template name="indent">
             <xsl:with-param name="indentation" select="$indentation"/>
           </xsl:call-template>
-
+
           <xsl:call-template name="highlight-comment">
             <xsl:with-param name="text">
               <xsl:text>// </xsl:text>
@@ -566,7 +566,7 @@
             <xsl:with-param name="name" select="$name"/>
             <xsl:with-param name="link-to" select="$link-to"/>
           </xsl:call-template>
- </xsl:for-each>
+ </xsl:for-each>
       </xsl:when>
       <xsl:otherwise>
         <xsl:for-each select="signature">
@@ -598,7 +598,7 @@
       </xsl:if>
       <xsl:text>&#10;</xsl:text>
       <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
       </xsl:call-template>
       <emphasis>
         <xsl:text>// </xsl:text>
@@ -634,8 +634,12 @@
             <xsl:with-param name="text" select="''"/>
           </xsl:call-template>
           <xsl:call-template name="monospaced">
- <xsl:with-param name="text" select="@name"/>
+ <xsl:with-param name="text">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
           </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="access-name"/>
           <xsl:text> construct/copy/destruct</xsl:text>
         </xsl:with-param>
         <xsl:with-param name="text">
@@ -658,7 +662,9 @@
               <xsl:call-template name="function">
                 <xsl:with-param name="indentation" select="0"/>
                 <xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="constructor-for" select="../@name"/>
+ <xsl:with-param name="constructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
                 <xsl:with-param name="standalone" select="true()"/>
               </xsl:call-template>
             </xsl:with-param>
@@ -668,7 +674,7 @@
       </xsl:with-param>
     </xsl:call-template>
   </xsl:template>
-
+
   <xsl:template match="copy-assignment" mode="reference">
     <xsl:call-template name="function.documentation">
       <xsl:with-param name="text">
@@ -678,7 +684,9 @@
               <xsl:call-template name="function">
                 <xsl:with-param name="indentation" select="0"/>
                 <xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="copy-assign-for" select="../@name"/>
+ <xsl:with-param name="copy-assign-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
                 <xsl:with-param name="standalone" select="true()"/>
               </xsl:call-template>
             </xsl:with-param>
@@ -698,7 +706,9 @@
               <xsl:call-template name="function">
                 <xsl:with-param name="indentation" select="0"/>
                 <xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="destructor-for" select="../@name"/>
+ <xsl:with-param name="destructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
                 <xsl:with-param name="standalone" select="true()"/>
               </xsl:call-template>
             </xsl:with-param>
@@ -826,7 +836,7 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1') and
               not (local-name(.)='method')"/>
 
@@ -856,7 +866,7 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1')"/>
 
     <xsl:if test="not ($compact)">
@@ -891,8 +901,8 @@
             <xsl:with-param name="namespace-reference" select="true()"/>
           </xsl:call-template>
         </xsl:with-param>
- </xsl:call-template>
- </xsl:if>
+ </xsl:call-template>
+ </xsl:if>
   </xsl:template>
 
   <xsl:template match="overloaded-function" mode="reference">
@@ -901,9 +911,9 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1')"/>
-
+
     <xsl:if test="not ($compact)">
       <xsl:call-template name="function.documentation">
         <xsl:with-param name="text">
@@ -911,7 +921,7 @@
             <xsl:attribute name="id">
               <xsl:call-template name="generate.id"/>
             </xsl:attribute>
-
+
             <xsl:call-template name="preformatted">
               <xsl:with-param name="text">
                 <xsl:for-each select="signature">
@@ -935,7 +945,7 @@
     <!-- True if we should compact this function -->
     <xsl:variable name="compact"
       select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
               ($boost.compact.function='1')"/>
 
     <xsl:variable name="name" select="@name"/>
@@ -975,8 +985,8 @@
             <xsl:with-param name="namespace-reference" select="true()"/>
           </xsl:call-template>
         </xsl:with-param>
- </xsl:call-template>
- </xsl:if>
+ </xsl:call-template>
+ </xsl:if>
   </xsl:template>
 
   <xsl:template match="overloaded-method" mode="reference">
@@ -985,12 +995,13 @@
     <xsl:call-template name="function.documentation">
       <xsl:with-param name="text">
         <para>
- <xsl:attribute name="id">
- <xsl:call-template name="generate.id"/>
- </xsl:attribute>
-
           <xsl:call-template name="preformatted">
             <xsl:with-param name="text">
+ <xsl:call-template name="anchor">
+ <xsl:with-param name="to">
+ <xsl:call-template name="generate.id"/>
+ </xsl:with-param>
+ </xsl:call-template>
               <xsl:for-each select="signature">
                 <xsl:call-template name="function">
                   <xsl:with-param name="indentation" select="0"/>
@@ -1025,7 +1036,7 @@
           <xsl:with-param name="text" select="string(@name)"/>
         </xsl:call-template>
       </emphasis>
- <xsl:apply-templates select="method|overloaded-method"
+ <xsl:apply-templates select="method|overloaded-method"
         mode="synopsis">
         <xsl:with-param name="indentation" select="$indentation"/>
       </xsl:apply-templates>
@@ -1044,7 +1055,9 @@
             <xsl:with-param name="text" select="''"/>
           </xsl:call-template>
           <xsl:call-template name="monospaced">
- <xsl:with-param name="text" select="../@name"/>
+ <xsl:with-param name="text">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
           </xsl:call-template>
           <xsl:text> </xsl:text>
           <xsl:value-of select="@name"/>
@@ -1057,7 +1070,7 @@
         </xsl:with-param>
       </xsl:call-template>
     </xsl:if>
- </xsl:template>
+ </xsl:template>
 
   <!-- Group free functions together under a category name (synopsis)-->
   <xsl:template match="free-function-group" mode="synopsis">
@@ -1105,5 +1118,5 @@
         </orderedlist>
       </xsl:with-param>
     </xsl:call-template>
- </xsl:template>
+ </xsl:template>
 </xsl:stylesheet>

Modified: branches/release/tools/boostbook/xsl/html.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/html.xsl (original)
+++ branches/release/tools/boostbook/xsl/html.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
@@ -13,6 +13,8 @@
   <!-- Import the HTML chunking stylesheet -->
   <xsl:import
     href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
+ <xsl:import
+ href="http://docbook.sourceforge.net/release/xsl/current/html/math.xsl"/>
 
   <xsl:import href="chunk-common.xsl"/>
   <xsl:import href="docbook-layout.xsl"/>
@@ -20,6 +22,7 @@
   <xsl:import href="admon.xsl"/>
   <xsl:import href="xref.xsl"/>
   <xsl:import href="relative-href.xsl"/>
+ <xsl:import href="callout.xsl"/>
 
   <xsl:param name="admon.style"/>
   <xsl:param name="admon.graphics">1</xsl:param>
@@ -36,8 +39,14 @@
   <xsl:param name="doc.standalone">false</xsl:param>
   <xsl:param name="chunker.output.indent">yes</xsl:param>
   <xsl:param name="toc.max.depth">2</xsl:param>
-
-<xsl:param name="admon.style">
+ <xsl:param name="callout.graphics.number.limit">15</xsl:param>
+ <xsl:param name = "admon.graphics.path"
+ select = "concat($boost.root, '/doc/html/images/')"/>
+ <xsl:param name = "navig.graphics.path"
+ select = "concat($boost.root, '/doc/html/images/')"/>
+
+
+ <xsl:param name="admon.style">
     <!-- Remove the style. Let the CSS do the styling -->
 </xsl:param>
 
@@ -69,22 +78,22 @@
     <xsl:param name="text"/>
 
     <!-- Remove the "$Date: " -->
- <xsl:variable name="text.noprefix"
+ <xsl:variable name="text.noprefix"
       select="substring-after($text, '$Date: ')"/>
 
     <!-- Grab the year -->
     <xsl:variable name="year" select="substring-before($text.noprefix, '/')"/>
- <xsl:variable name="text.noyear"
+ <xsl:variable name="text.noyear"
       select="substring-after($text.noprefix, '/')"/>
 
     <!-- Grab the month -->
     <xsl:variable name="month" select="substring-before($text.noyear, '/')"/>
- <xsl:variable name="text.nomonth"
+ <xsl:variable name="text.nomonth"
       select="substring-after($text.noyear, '/')"/>
 
     <!-- Grab the year -->
     <xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
+ <xsl:variable name="text.noday"
       select="substring-after($text.nomonth, ' ')"/>
 
     <!-- Get the time -->
@@ -116,27 +125,27 @@
     <xsl:param name="text"/>
 
     <!-- Remove the "$Date: " -->
- <xsl:variable name="text.noprefix"
+ <xsl:variable name="text.noprefix"
       select="substring-after($text, '$Date: ')"/>
 
     <!-- Grab the year -->
     <xsl:variable name="year" select="substring-before($text.noprefix, '-')"/>
- <xsl:variable name="text.noyear"
+ <xsl:variable name="text.noyear"
       select="substring-after($text.noprefix, '-')"/>
 
     <!-- Grab the month -->
     <xsl:variable name="month" select="substring-before($text.noyear, '-')"/>
- <xsl:variable name="text.nomonth"
+ <xsl:variable name="text.nomonth"
       select="substring-after($text.noyear, '-')"/>
 
     <!-- Grab the year -->
     <xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
+ <xsl:variable name="text.noday"
       select="substring-after($text.nomonth, ' ')"/>
 
     <!-- Get the time -->
     <xsl:variable name="time" select="substring-before($text.noday, ' ')"/>
- <xsl:variable name="text.notime"
+ <xsl:variable name="text.notime"
       select="substring-after($text.noday, ' ')"/>
 
     <!-- Get the timezone -->
@@ -163,7 +172,7 @@
                                  $time, ' ', $timezone)"/>
   </xsl:template>
 
-
+ <!-- Footer Copyright -->
   <xsl:template match="copyright" mode="boost.footer">
     <xsl:if test="position() &gt; 1">
       <br/>
@@ -186,23 +195,28 @@
     <xsl:apply-templates select="holder" mode="titlepage.mode"/>
   </xsl:template>
 
+ <!-- Footer License -->
+ <xsl:template match="legalnotice" mode="boost.footer">
+ <xsl:apply-templates select="para" mode="titlepage.mode" />
+ </xsl:template>
+
   <xsl:template name="user.footer.content">
     <table width="100%">
       <tr>
         <td align="left">
- <xsl:variable name="revision-nodes"
+ <xsl:variable name="revision-nodes"
             select="ancestor-or-self::*
                     [not (attribute::rev:last-revision='')]"/>
           <xsl:if test="count($revision-nodes) &gt; 0">
             <xsl:variable name="revision-node"
               select="$revision-nodes[last()]"/>
             <xsl:variable name="revision-text">
- <xsl:value-of
+ <xsl:value-of
                 select="normalize-space($revision-node/attribute::rev:last-revision)"/>
             </xsl:variable>
             <xsl:if test="string-length($revision-text) &gt; 0">
- <small>
- <p>
+ <p>
+ <small>
                   <xsl:text>Last revised: </xsl:text>
                   <xsl:choose>
                     <xsl:when test="contains($revision-text, '/')">
@@ -216,16 +230,18 @@
                       </xsl:call-template>
                     </xsl:otherwise>
                   </xsl:choose>
- </p>
- </small>
+ </small>
+ </p>
             </xsl:if>
           </xsl:if>
         </td>
         <td align="right">
- <small>
- <xsl:apply-templates select="ancestor::*/*/copyright"
+ <div class = "copyright-footer">
+ <xsl:apply-templates select="ancestor::*/*/copyright"
+ mode="boost.footer"/>
+ <xsl:apply-templates select="ancestor::*/*/legalnotice"
               mode="boost.footer"/>
- </small>
+ </div>
         </td>
       </tr>
     </table>

Modified: branches/release/tools/boostbook/xsl/library.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/library.xsl (original)
+++ branches/release/tools/boostbook/xsl/library.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -120,7 +120,7 @@
 
   <xsl:template match="libraryinfo">
     <chapterinfo>
- <xsl:apply-templates select="author|copyright|legalnotice"/>
+ <xsl:apply-templates select="author|authorgroup/author|copyright|legalnotice"/>
     </chapterinfo>
   </xsl:template>
 

Modified: branches/release/tools/boostbook/xsl/lookup.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/lookup.xsl (original)
+++ branches/release/tools/boostbook/xsl/lookup.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
@@ -14,7 +14,15 @@
   <!-- Generate an ID for the entity referenced -->
   <xsl:template name="generate.id">
     <xsl:param name="node" select="."/>
- <xsl:apply-templates select="$node" mode="generate.id"/>
+ <xsl:choose>
+ <xsl:when test="ancestor::class-specialization|ancestor::struct-specialization|ancestor::union-specialization">
+ <xsl:value-of select="generate-id(.)"/>
+ <xsl:text>-bb</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$node" mode="generate.id"/>
+ </xsl:otherwise>
+ </xsl:choose>
   </xsl:template>
 
   <xsl:template match="*" mode="generate.id">
@@ -22,19 +30,102 @@
     <xsl:text>-bb</xsl:text>
   </xsl:template>
 
+ <xsl:template name="strip-qualifiers-non-template">
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, '&gt;')">
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="substring-after($name, '&gt;')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="contains($name, '::')">
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="strip-balanced">
+ <xsl:param name="name"/>
+ <xsl:param name="open" select="'&lt;'"/>
+ <xsl:param name="close" select="'&gt;'"/>
+ <xsl:param name="depth" select="0"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, $open)
+ and not(contains(substring-before($name, $open), $close))">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="substring-after($name, $open)"/>
+ <xsl:with-param name="open" select="$open"/>
+ <xsl:with-param name="close" select="$close"/>
+ <xsl:with-param name="depth" select="$depth + 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="contains($name, $close) and ($depth &gt; 1)">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="substring-after($name, $close)"/>
+ <xsl:with-param name="open" select="$open"/>
+ <xsl:with-param name="close" select="$close"/>
+ <xsl:with-param name="depth" select="$depth - 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-after($name, $close)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="strip-qualifiers-template">
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, '::')
+ and not(contains(substring-before($name, '::'), '&lt;'))">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="rest">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$rest != ''">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="$rest"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
   <!-- Strip the qualifiers off a qualified name and return the unqualified
        name. For instance, "boost::python::function" would become just
- "function". -->
+ "function".
+ Must handle ns::foo -> foo
+ Must handle ns::foo<bar::baz> -> foo<bar::baz>
+ Must handle ns::foo<bar::baz>::nested -> nested
+ Must handle ns::foo<x>::bar<y> -> bar<y> -->
   <xsl:template name="strip-qualifiers">
     <xsl:param name="name"/>
     <xsl:choose>
- <xsl:when test="contains($name, '::') and not(contains(substring-before($name, '::'), '&lt;'))">
- <xsl:call-template name="strip-qualifiers">
- <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ <xsl:when test="substring($name, string-length($name)) = '&gt;'">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="$name"/>
         </xsl:call-template>
       </xsl:when>
       <xsl:otherwise>
- <xsl:value-of select="$name"/>
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
@@ -66,8 +157,10 @@
     <xsl:param name="depth" select="1"/>
 
     <!-- Determine the set of ancestor namespaces -->
- <xsl:variable name="ancestors"
- select="ancestor::namespace|ancestor::class|ancestor::struct|ancestor::union"/>
+ <xsl:variable name="ancestors"
+ select="ancestor::namespace|
+ ancestor::class|ancestor::struct|ancestor::union|
+ ancestor::class-specialization|ancestor::struct-specialization|ancestor::union-specialization"/>
 
     <xsl:choose>
       <xsl:when test="$depth &gt; count($ancestors)">
@@ -92,6 +185,29 @@
     <xsl:value-of select="@name"/>
   </xsl:template>
 
+ <xsl:template name="print-specialization-name">
+ <xsl:value-of select="@name"/>
+ <xsl:text>&lt;</xsl:text>
+ <xsl:value-of select="specialization/template-arg[position() = 1]/text()"/>
+ <xsl:for-each select="specialization/template-arg[position() &gt; 1]">
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="text()"/>
+ </xsl:for-each>
+ <xsl:text>&gt;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="struct-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
+ <xsl:template match="class-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
+ <xsl:template match="union-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
   <xsl:template name="name-matches-node">
     <!-- The name we are looking for -->
     <xsl:param name="name"/>
@@ -155,23 +271,24 @@
             <xsl:with-param name="node" select="$node"/>
           </xsl:call-template>
         </xsl:variable>
-
+
         <!-- The set of using directives for this context node -->
         <xsl:variable name="directives"
           select="$context/ancestor::*/using-namespace |
                   $context/ancestor::namespace |
                   $context/ancestor::*/using-class |
- $context/ancestor::class"/>
-
+ $context/ancestor::class |
+ $context/ancestor::struct"/>
+
         <!-- The name of the current directive -->
         <xsl:variable name="this-context">
           <xsl:apply-templates select="$directives[$index]" mode="print-name"/>
         </xsl:variable>
-
+
         <!-- Check if we have a match -->
- <xsl:variable name="have-match"
+ <xsl:variable name="have-match"
           select="$fully-qualified-name = concat($prefix, $name)"/>
-
+
         <xsl:if test="$have-match">
           <xsl:choose>
             <xsl:when test="$mode='matches'">
@@ -189,7 +306,7 @@
             </xsl:when>
           </xsl:choose>
         </xsl:if>
-
+
         <xsl:if test="(not($index &gt; count($directives))) and
                       (not($have-match) or ($mode = 'matches'))">
           <xsl:variable name="first-branch">
@@ -207,7 +324,7 @@
               </xsl:call-template>
             </xsl:if>
           </xsl:variable>
-
+
           <xsl:choose>
             <xsl:when test="string($first-branch) != ''">
               <xsl:copy-of select="$first-branch"/>
@@ -221,12 +338,12 @@
                 <xsl:with-param name="node" select="$node"/>
                 <xsl:with-param name="mode" select="$mode"/>
                 <xsl:with-param name="index" select="$index + 1"/>
- <xsl:with-param name="prefix"
+ <xsl:with-param name="prefix"
                   select="concat($this-context, '::')"/>
               </xsl:call-template>
             </xsl:otherwise>
           </xsl:choose>
- </xsl:if>
+ </xsl:if>
       </xsl:when>
     </xsl:choose>
   </xsl:template>
@@ -255,19 +372,19 @@
 
   <xsl:template name="cxx-link-name">
     <!-- The actual lookup node -->
- <xsl:param name="lookup"/>
+ <xsl:param name="lookup"/>
 
     <!-- The type of name to lookup (e.g., class) -->
- <xsl:param name="type"/>
+ <xsl:param name="type"/>
 
     <!-- The name we are looking for -->
- <xsl:param name="name"/>
+ <xsl:param name="name"/>
 
     <!-- The name we will display -->
     <xsl:param name="display-name"/>
 
     <!-- The name we are looking for (unqualified)-->
- <xsl:param name="unqualified-name"/>
+ <xsl:param name="unqualified-name"/>
 
     <!-- The list of nodes that match the lookup node in both name and type -->
     <xsl:param name="nodes"/>

Modified: branches/release/tools/boostbook/xsl/navbar.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/navbar.xsl (original)
+++ branches/release/tools/boostbook/xsl/navbar.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -54,7 +54,7 @@
       <xsl:variable name = "home" select = "/*[1]"/>
       <xsl:variable name = "up" select = "parent::*"/>
 
- <table cellpadding = "2" width = "100%">
+ <table cellpadding = "2" width = "100%"><tr>
          <xsl:if test = "$nav.border = 'Boost'">
             <xsl:attribute name = "class">boost-head</xsl:attribute>
          </xsl:if>
@@ -77,7 +77,7 @@
                <xsl:call-template name = "header.navdata-vert"/>
             </xsl:when>
          </xsl:choose>
- </table>
+ </tr></table>
       <hr/>
       <xsl:choose>
          <xsl:when test = "$nav.flow = 'DocBook'">

Modified: branches/release/tools/boostbook/xsl/reference.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/reference.xsl (original)
+++ branches/release/tools/boostbook/xsl/reference.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
@@ -21,7 +21,7 @@
   <xsl:include href="macro.xsl"/>
   <xsl:include href="testing/testsuite.xsl"/>
   <xsl:include href="caramel/concept2docbook.xsl"/>
-
+
   <xsl:template name="namespace-synopsis">
     <xsl:param name="indentation" select="0"/>
     <!-- Open namespace-->
@@ -32,7 +32,7 @@
       <xsl:with-param name="text" select="concat('namespace ',@name)"/>
     </xsl:call-template>
     <xsl:text> {</xsl:text>
-
+
     <!-- Emit namespace types -->
     <xsl:apply-templates select="class|class-specialization|
                                  struct|struct-specialization|
@@ -40,19 +40,19 @@
                                  typedef|enum|data-member" mode="synopsis">
       <xsl:with-param name="indentation" select="$indentation + 2"/>
     </xsl:apply-templates>
-
+
     <!-- Emit namespace functions -->
- <xsl:apply-templates
- select="free-function-group|function|overloaded-function"
+ <xsl:apply-templates
+ select="free-function-group|function|overloaded-function"
       mode="synopsis">
       <xsl:with-param name="indentation" select="$indentation + 2"/>
     </xsl:apply-templates>
-
+
     <!-- Emit namespaces -->
     <xsl:apply-templates select="namespace" mode="synopsis">
       <xsl:with-param name="indentation" select="$indentation + 2"/>
     </xsl:apply-templates>
-
+
     <!-- Close namespace -->
     <xsl:text>&#10;</xsl:text>
     <xsl:call-template name="indent">
@@ -82,14 +82,14 @@
 
   <!-- Emit namespace reference -->
   <xsl:template match="namespace" mode="reference">
- <xsl:apply-templates select="namespace|typedef|free-function-group"
+ <xsl:apply-templates select="namespace|free-function-group"
       mode="reference">
       <xsl:with-param name="indentation" select="0"/>
     </xsl:apply-templates>
     <xsl:apply-templates select="class|class-specialization|
                                  struct|struct-specialization|
                                  union|union-specialization|enum|function|
- overloaded-function|data-member"
+ overloaded-function|data-member|typedef"
       mode="namespace-reference"/>
   </xsl:template>
 

Modified: branches/release/tools/boostbook/xsl/template.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/template.xsl (original)
+++ branches/release/tools/boostbook/xsl/template.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -404,7 +404,7 @@
 
       <xsl:choose>
         <xsl:when test="$highlight">
- <xsl:apply-templates select="$parameter/default/*" mode="highlight"/>
+ <xsl:apply-templates select="$parameter/default/*|$parameter/default/text()" mode="highlight"/>
         </xsl:when>
         <xsl:otherwise>
           <xsl:value-of select="$def"/>

Modified: branches/release/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/type.xsl (original)
+++ branches/release/tools/boostbook/xsl/type.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+ Copyright (c) 2007 Frank Mori Hess <fmhess_at_[hidden]>
+
    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
@@ -20,6 +21,11 @@
        separate refentry element for the enum. -->
   <xsl:param name="boost.compact.enum">1</xsl:param>
 
+ <!-- When true, the stylesheet will emit compact definitions of
+ typedefs when the typedef does not have any detailed
+ description. -->
+ <xsl:param name="boost.compact.typedef">1</xsl:param>
+
   <xsl:template match="class|struct|union" mode="generate.id">
     <xsl:call-template name="fully-qualified-name">
       <xsl:with-param name="node" select="."/>
@@ -27,6 +33,13 @@
     </xsl:call-template>
   </xsl:template>
 
+ <xsl:template match="typedef" mode="generate.id">
+ <xsl:call-template name="fully-qualified-name">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="separator" select="'.'"/>
+ </xsl:call-template>
+ </xsl:template>
+
   <xsl:template match="enum" mode="generate.id">
     <xsl:call-template name="fully-qualified-name">
       <xsl:with-param name="node" select="."/>
@@ -48,7 +61,7 @@
   <xsl:template name="type.display.name">
     <xsl:choose>
       <xsl:when test="contains(local-name(.), 'class')">
- <xsl:text>Class </xsl:text>
+ <xsl:text>Class </xsl:text>
       </xsl:when>
       <xsl:when test="contains(local-name(.), 'struct')">
         <xsl:text>Struct </xsl:text>
@@ -73,7 +86,7 @@
         <xsl:value-of select="@name"/>
         <xsl:apply-templates select="specialization"/>
       </xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template>
   </xsl:template>
 
   <!-- Determine the class key for the given node -->
@@ -86,7 +99,7 @@
       <xsl:otherwise>
         <xsl:value-of select="local-name($node)"/>
       </xsl:otherwise>
- </xsl:choose>
+ </xsl:choose>
   </xsl:template>
 
   <!-- Emit class synopsis -->
@@ -94,7 +107,7 @@
                        struct|struct-specialization|
                        union|union-specialization" mode="synopsis">
     <xsl:param name="indentation"/>
-
+
     <!-- The keyword used to declare this class type, e.g., class,
          struct, or union. -->
     <xsl:variable name="class-key">
@@ -123,7 +136,7 @@
     </xsl:variable>
 
     <xsl:choose>
- <xsl:when test="(string-length($full-decl-string) +
+ <xsl:when test="(string-length($full-decl-string) +
                        string-length($indentation)) &lt; $max-columns">
         <xsl:call-template name="indent">
           <xsl:with-param name="indentation" select="$indentation"/>
@@ -158,11 +171,11 @@
             <xsl:with-param name="indentation" select="$indentation"/>
           </xsl:apply-templates>
           <xsl:text>&#10;</xsl:text>
-
+
           <!-- Indent class templates' names in the synopsis -->
           <xsl:text> </xsl:text>
         </xsl:if>
-
+
         <!-- Class name -->
         <xsl:call-template name="indent">
           <xsl:with-param name="indentation" select="$indentation"/>
@@ -193,10 +206,38 @@
 
   <!-- Emit a typedef synopsis -->
   <xsl:template name="type.typedef.display.aligned">
+ <xsl:param name="compact"/>
     <xsl:param name="indentation"/>
+ <xsl:param name="is-reference"/>
     <xsl:param name="max-type-length"/>
     <xsl:param name="max-name-length"/>
 
+ <!-- What type of link the typedef name should have. This shall
+ be one of 'anchor' (the typedef output will be the target of
+ links), 'link' (the typedef output will link to a definition), or
+ 'none' (the typedef output will not be either a link or a link
+ target) -->
+ <xsl:param name="link-type">
+ <xsl:choose>
+ <xsl:when test="$is-reference">
+ <xsl:text>anchor</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>link</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+
+ <!-- The id we should link to or anchor as -->
+ <xsl:param name="link-to">
+ <xsl:call-template name="generate.id"/>
+ </xsl:param>
+
+ <!-- The id we should link to or anchor as -->
+ <xsl:param name="typedef-name">
+ <xsl:value-of select="@name"/>
+ </xsl:param>
+
     <!-- Padding for the typedef types -->
     <xsl:variable name="type-padding">
       <xsl:call-template name="indent">
@@ -216,21 +257,21 @@
       <!-- Create a vertical ellipsis -->
       <xsl:when test="@name = '...'">
         <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
- </xsl:call-template>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
+ </xsl:call-template>
         <xsl:text>.&#10;</xsl:text>
         <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
         </xsl:call-template>
         <xsl:text>.&#10;</xsl:text>
         <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
         </xsl:call-template>
         <xsl:text>.</xsl:text>
       </xsl:when>
       <xsl:otherwise>
         <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
         </xsl:call-template>
         <xsl:call-template name="highlight-keyword">
           <xsl:with-param name="keyword" select="'typedef'"/>
@@ -259,32 +300,39 @@
             <xsl:value-of select="@type"/>
           </xsl:when>
           <xsl:otherwise>
- <xsl:apply-templates select="type/*|type/text()"
+ <xsl:apply-templates select="type/*|type/text()"
               mode="highlight"/>
             <!--
             <xsl:call-template name="source-highlight">
               <xsl:with-param name="text">
                 <xsl:apply-templates select="type/*|type/text()"/>
               </xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template>
             -->
           </xsl:otherwise>
         </xsl:choose>
 
         <xsl:choose>
           <xsl:when test="$max-type-length &gt; 0">
- <xsl:value-of select="substring($type-padding, 1,
+ <xsl:value-of select="substring($type-padding, 1,
                                             $max-type-length - $type-length)"/>
             <xsl:text> </xsl:text>
- <xsl:value-of select="substring(concat(@name, ';', $name-padding),
+ <xsl:value-of select="substring(concat(@name, ';', $name-padding),
                                             1, $max-name-length)"/>
           </xsl:when>
           <xsl:otherwise>
- <xsl:value-of select="concat(' ',@name,';')"/>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="link-or-anchor">
+ <xsl:with-param name="to" select="$link-to"/>
+ <xsl:with-param name="text" select="$typedef-name"/>
+ <xsl:with-param name="link-type" select="$link-type"/>
+ <xsl:with-param name="highlight" select="true()"/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
           </xsl:otherwise>
         </xsl:choose>
 
- <xsl:if test="purpose">
+ <xsl:if test="$compact and purpose">
           <xsl:text> </xsl:text>
           <xsl:call-template name="highlight-comment">
             <xsl:with-param name="text">
@@ -301,21 +349,89 @@
     <xsl:param name="indentation"/>
     <xsl:param name="max-type-length" select="0"/>
     <xsl:param name="max-name-length" select="0"/>
-
- <!-- Spacing -->
- <xsl:if test="not (local-name(preceding-sibling::*[position()=1])=local-name(.)) and (position() &gt; 1)">
- <xsl:text>&#10;</xsl:text>
- </xsl:if>
 
- <xsl:call-template name="type.typedef.display.aligned">
- <xsl:with-param name="indentation" select="$indentation"/>
- <xsl:with-param name="max-type-length" select="$max-type-length"/>
- <xsl:with-param name="max-name-length" select="$max-name-length"/>
- </xsl:call-template>
+ <!-- True if we should compact this typedef -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:choose>
+ <xsl:when test="$compact">
+ <!-- Spacing -->
+ <xsl:if test="not (local-name(preceding-sibling::*[position()=1])=local-name(.)) and (position() &gt; 1)">
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="$compact"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="max-type-length" select="$max-type-length"/>
+ <xsl:with-param name="max-name-length" select="$max-name-length"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="$compact"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="is-reference" select="false()"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
   </xsl:template>
 
- <!-- TBD: Implement this -->
- <xsl:template match="typedef" mode="reference"/>
+ <!-- Emit a typedef reference entry -->
+ <xsl:template match="typedef" mode="namespace-reference">
+ <!-- True if this typedef was compacted -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:if test="not ($compact)">
+ <xsl:call-template name="reference-documentation">
+ <xsl:with-param name="refname" select="@name"/>
+ <xsl:with-param name="purpose" select="purpose/*|purpose/text()"/>
+ <xsl:with-param name="anchor">
+ <xsl:call-template name="generate.id"/>
+ </xsl:with-param>
+ <xsl:with-param name="name">
+ <xsl:text>Type definition </xsl:text>
+ <xsl:call-template name="monospaced">
+ <xsl:with-param name="text" select="@name"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="synopsis">
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="false()"/>
+ <xsl:with-param name="indentation" select="0"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="link-type" select="'none'"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="text">
+ <xsl:apply-templates select="description"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="typedef" mode="reference">
+ <!-- True if this typedef was compacted -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:if test="not ($compact)">
+ <listitem>
+ <para>
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="false()"/>
+ <xsl:with-param name="indentation" select="0"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="link-type" select="'anchor'"/>
+ </xsl:call-template>
+ </para>
+ <xsl:apply-templates select="description"/>
+ </listitem>
+ </xsl:if>
+ </xsl:template>
 
   <!-- Emit a list of static constants -->
   <xsl:template match="static-constant" mode="synopsis">
@@ -331,10 +447,10 @@
 
     <xsl:call-template name="source-highlight">
       <xsl:with-param name="text">
- <xsl:apply-templates select="type/*|type/text()"/>
+ <xsl:apply-templates select="type/*|type/text()"/>
       </xsl:with-param>
     </xsl:call-template>
-
+
     <xsl:if test="not(@name = '')">
       <xsl:text> </xsl:text>
       <xsl:value-of select="@name"/>
@@ -367,7 +483,7 @@
 
   <xsl:template name="print.base.classes.multi">
     <xsl:param name="indentation"/>
-
+
     <xsl:variable name="n" select="count(inherit)"/>
     <xsl:for-each select="inherit">
       <!-- Indentation -->
@@ -448,20 +564,20 @@
     </xsl:variable>
 
     <xsl:choose>
- <xsl:when test="$single-line-candidate and
+ <xsl:when test="$single-line-candidate and
                       (string-length($single-line) + $indentation + 3
                         &lt; $max-columns)">
+ <xsl:text> : </xsl:text>
         <xsl:call-template name="print.base.classes.single"/>
         <xsl:text> {</xsl:text>
       </xsl:when>
       <xsl:when test="$single-line-candidate and
- (string-length($single-line) + $base-indentation + 5
+ (string-length($single-line) + $base-indentation + 2
                         &lt; $max-columns)">
- <xsl:text>&#10;</xsl:text>
+ <xsl:text> :&#10;</xsl:text>
         <xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$base-indentation"/>
+ <xsl:with-param name="indentation" select="$base-indentation + 2"/>
         </xsl:call-template>
- <xsl:text> : </xsl:text>
         <xsl:call-template name="print.base.classes.single"/>
         <xsl:text>&#10;</xsl:text>
         <xsl:call-template name="indent">
@@ -487,7 +603,6 @@
   <xsl:template match="inherit">
     <xsl:choose>
       <xsl:when test="position()=1">
- <xsl:text> : </xsl:text>
       </xsl:when>
       <xsl:otherwise>
         <xsl:text>, </xsl:text>
@@ -549,7 +664,7 @@
               <xsl:with-param name="typedefs" select="$rest"/>
               <xsl:with-param name="max-length" select="$max-length"/>
               <xsl:with-param name="want-name" select="$want-name"/>
- </xsl:call-template>
+ </xsl:call-template>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:when>
@@ -557,7 +672,7 @@
         <xsl:value-of select="$max-length"/>
       </xsl:otherwise>
     </xsl:choose>
- </xsl:template>
+ </xsl:template>
 
   <xsl:template match="constructor" mode="synopsis">
     <xsl:param name="indentation"/>
@@ -565,7 +680,9 @@
       <xsl:with-param name="indentation" select="$indentation"/>
       <xsl:with-param name="context" select="../@name"/>
       <xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="constructor-for" select="../@name"/>
+ <xsl:with-param name="constructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
     </xsl:call-template>
   </xsl:template>
 
@@ -575,7 +692,9 @@
       <xsl:with-param name="indentation" select="$indentation"/>
       <xsl:with-param name="context" select="../@name"/>
       <xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="copy-assign-for" select="../@name"/>
+ <xsl:with-param name="copy-assign-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
     </xsl:call-template>
   </xsl:template>
 
@@ -585,7 +704,128 @@
       <xsl:with-param name="indentation" select="$indentation"/>
       <xsl:with-param name="context" select="../@name"/>
       <xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="destructor-for" select="../@name"/>
+ <xsl:with-param name="destructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="class-members-synopsis">
+ <xsl:param name="indentation" select="0"/>
+
+ <!-- Typedefs -->
+ <xsl:if test="typedef">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="indent">
+ <xsl:with-param name="indentation" select="$indentation + 2"/>
+ </xsl:call-template>
+ <emphasis>
+ <xsl:text>// </xsl:text>
+ <!-- True if there are any non-compacted typedefs -->
+ <xsl:variable name="have-typedef-references"
+ select="typedef and ((typedef/para|typedef/description) or ($boost.compact.typedef='0'))"/>
+ <xsl:choose>
+ <xsl:when test="$have-typedef-references">
+ <xsl:call-template name="internal-link">
+ <xsl:with-param name="to">
+ <xsl:call-template name="generate.id"/>
+ <xsl:text>types</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="text" select="'types'"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>types</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </emphasis>
+
+ <xsl:variable name="max-type-length">
+ <xsl:call-template name="find-max-type-length"/>
+ </xsl:variable>
+ <xsl:variable name="max-name-length">
+ <xsl:call-template name="find-max-type-length">
+ <xsl:with-param name="want-name" select="true()"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="typedef" mode="synopsis">
+ <xsl:with-param name="indentation" select="$indentation + 2"/>
+ <xsl:with-param name="max-type-length"
+ select="$max-type-length"/>