Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-06-10 14:52:58


Author: eric_niebler
Date: 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
New Revision: 46303
URL: http://svn.boost.org/trac/boost/changeset/46303

Log:
merged from trunk
Added:
   branches/proto/v4/boost/asio/basic_serial_port.hpp
      - copied unchanged from r46295, /trunk/boost/asio/basic_serial_port.hpp
   branches/proto/v4/boost/asio/detail/reactive_serial_port_service.hpp
      - copied unchanged from r46295, /trunk/boost/asio/detail/reactive_serial_port_service.hpp
   branches/proto/v4/boost/asio/detail/win_iocp_serial_port_service.hpp
      - copied unchanged from r46295, /trunk/boost/asio/detail/win_iocp_serial_port_service.hpp
   branches/proto/v4/boost/asio/impl/serial_port_base.ipp
      - copied unchanged from r46295, /trunk/boost/asio/impl/serial_port_base.ipp
   branches/proto/v4/boost/asio/serial_port.hpp
      - copied unchanged from r46295, /trunk/boost/asio/serial_port.hpp
   branches/proto/v4/boost/asio/serial_port_base.hpp
      - copied unchanged from r46295, /trunk/boost/asio/serial_port_base.hpp
   branches/proto/v4/boost/asio/serial_port_service.hpp
      - copied unchanged from r46295, /trunk/boost/asio/serial_port_service.hpp
   branches/proto/v4/boost/serialization/assume_abstract.hpp
      - copied unchanged from r46295, /trunk/boost/serialization/assume_abstract.hpp
   branches/proto/v4/boost/thread/tss.hpp
      - copied unchanged from r46295, /trunk/boost/thread/tss.hpp
   branches/proto/v4/boost/units/
      - copied from r46295, /trunk/boost/units/
   branches/proto/v4/boost/units/absolute.hpp
      - copied unchanged from r46295, /trunk/boost/units/absolute.hpp
   branches/proto/v4/boost/units/base_dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_dimension.hpp
   branches/proto/v4/boost/units/base_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_unit.hpp
   branches/proto/v4/boost/units/base_units/
      - copied from r46295, /trunk/boost/units/base_units/
   branches/proto/v4/boost/units/base_units/angle/
      - copied from r46295, /trunk/boost/units/base_units/angle/
   branches/proto/v4/boost/units/base_units/angle/arcminute.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/arcminute.hpp
   branches/proto/v4/boost/units/base_units/angle/arcsecond.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/arcsecond.hpp
   branches/proto/v4/boost/units/base_units/angle/degree.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/degree.hpp
   branches/proto/v4/boost/units/base_units/angle/gradian.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/gradian.hpp
   branches/proto/v4/boost/units/base_units/angle/radian.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/radian.hpp
   branches/proto/v4/boost/units/base_units/angle/revolution.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/revolution.hpp
   branches/proto/v4/boost/units/base_units/angle/steradian.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/angle/steradian.hpp
   branches/proto/v4/boost/units/base_units/astronomical/
      - copied from r46295, /trunk/boost/units/base_units/astronomical/
   branches/proto/v4/boost/units/base_units/astronomical/astronomical_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/astronomical_unit.hpp
   branches/proto/v4/boost/units/base_units/astronomical/light_day.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/light_day.hpp
   branches/proto/v4/boost/units/base_units/astronomical/light_hour.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/light_hour.hpp
   branches/proto/v4/boost/units/base_units/astronomical/light_minute.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/light_minute.hpp
   branches/proto/v4/boost/units/base_units/astronomical/light_second.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/light_second.hpp
   branches/proto/v4/boost/units/base_units/astronomical/light_year.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/light_year.hpp
   branches/proto/v4/boost/units/base_units/astronomical/parsec.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/astronomical/parsec.hpp
   branches/proto/v4/boost/units/base_units/cgs/
      - copied from r46295, /trunk/boost/units/base_units/cgs/
   branches/proto/v4/boost/units/base_units/cgs/biot.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/cgs/biot.hpp
   branches/proto/v4/boost/units/base_units/cgs/centimeter.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/cgs/centimeter.hpp
   branches/proto/v4/boost/units/base_units/cgs/gram.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/cgs/gram.hpp
   branches/proto/v4/boost/units/base_units/imperial/
      - copied from r46295, /trunk/boost/units/base_units/imperial/
   branches/proto/v4/boost/units/base_units/imperial/conversions.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/conversions.hpp
   branches/proto/v4/boost/units/base_units/imperial/drachm.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/drachm.hpp
   branches/proto/v4/boost/units/base_units/imperial/fluid_ounce.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/fluid_ounce.hpp
   branches/proto/v4/boost/units/base_units/imperial/foot.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/foot.hpp
   branches/proto/v4/boost/units/base_units/imperial/furlong.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/furlong.hpp
   branches/proto/v4/boost/units/base_units/imperial/gallon.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/gallon.hpp
   branches/proto/v4/boost/units/base_units/imperial/gill.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/gill.hpp
   branches/proto/v4/boost/units/base_units/imperial/grain.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/grain.hpp
   branches/proto/v4/boost/units/base_units/imperial/hundredweight.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/hundredweight.hpp
   branches/proto/v4/boost/units/base_units/imperial/inch.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/inch.hpp
   branches/proto/v4/boost/units/base_units/imperial/league.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/league.hpp
   branches/proto/v4/boost/units/base_units/imperial/mile.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/mile.hpp
   branches/proto/v4/boost/units/base_units/imperial/ounce.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/ounce.hpp
   branches/proto/v4/boost/units/base_units/imperial/pint.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/pint.hpp
   branches/proto/v4/boost/units/base_units/imperial/pound.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/pound.hpp
   branches/proto/v4/boost/units/base_units/imperial/quart.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/quart.hpp
   branches/proto/v4/boost/units/base_units/imperial/quarter.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/quarter.hpp
   branches/proto/v4/boost/units/base_units/imperial/stone.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/stone.hpp
   branches/proto/v4/boost/units/base_units/imperial/thou.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/thou.hpp
   branches/proto/v4/boost/units/base_units/imperial/ton.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/ton.hpp
   branches/proto/v4/boost/units/base_units/imperial/yard.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/imperial/yard.hpp
   branches/proto/v4/boost/units/base_units/metric/
      - copied from r46295, /trunk/boost/units/base_units/metric/
   branches/proto/v4/boost/units/base_units/metric/angstrom.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/angstrom.hpp
   branches/proto/v4/boost/units/base_units/metric/are.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/are.hpp
   branches/proto/v4/boost/units/base_units/metric/atmosphere.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/atmosphere.hpp
   branches/proto/v4/boost/units/base_units/metric/bar.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/bar.hpp
   branches/proto/v4/boost/units/base_units/metric/barn.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/barn.hpp
   branches/proto/v4/boost/units/base_units/metric/day.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/day.hpp
   branches/proto/v4/boost/units/base_units/metric/fermi.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/fermi.hpp
   branches/proto/v4/boost/units/base_units/metric/hectare.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/hectare.hpp
   branches/proto/v4/boost/units/base_units/metric/hour.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/hour.hpp
   branches/proto/v4/boost/units/base_units/metric/knot.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/knot.hpp
   branches/proto/v4/boost/units/base_units/metric/liter.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/liter.hpp
   branches/proto/v4/boost/units/base_units/metric/micron.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/micron.hpp
   branches/proto/v4/boost/units/base_units/metric/minute.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/minute.hpp
   branches/proto/v4/boost/units/base_units/metric/mmHg.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/mmHg.hpp
   branches/proto/v4/boost/units/base_units/metric/nautical_mile.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/nautical_mile.hpp
   branches/proto/v4/boost/units/base_units/metric/ton.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/ton.hpp
   branches/proto/v4/boost/units/base_units/metric/torr.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/torr.hpp
   branches/proto/v4/boost/units/base_units/metric/year.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/metric/year.hpp
   branches/proto/v4/boost/units/base_units/si/
      - copied from r46295, /trunk/boost/units/base_units/si/
   branches/proto/v4/boost/units/base_units/si/ampere.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/ampere.hpp
   branches/proto/v4/boost/units/base_units/si/candela.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/candela.hpp
   branches/proto/v4/boost/units/base_units/si/kelvin.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/kelvin.hpp
   branches/proto/v4/boost/units/base_units/si/kilogram.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/kilogram.hpp
   branches/proto/v4/boost/units/base_units/si/meter.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/meter.hpp
   branches/proto/v4/boost/units/base_units/si/mole.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/mole.hpp
   branches/proto/v4/boost/units/base_units/si/second.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/si/second.hpp
   branches/proto/v4/boost/units/base_units/temperature/
      - copied from r46295, /trunk/boost/units/base_units/temperature/
   branches/proto/v4/boost/units/base_units/temperature/celsius.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/temperature/celsius.hpp
   branches/proto/v4/boost/units/base_units/temperature/conversions.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/temperature/conversions.hpp
   branches/proto/v4/boost/units/base_units/temperature/fahrenheit.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/temperature/fahrenheit.hpp
   branches/proto/v4/boost/units/base_units/us/
      - copied from r46295, /trunk/boost/units/base_units/us/
   branches/proto/v4/boost/units/base_units/us/cup.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/cup.hpp
   branches/proto/v4/boost/units/base_units/us/dram.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/dram.hpp
   branches/proto/v4/boost/units/base_units/us/fluid_dram.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/fluid_dram.hpp
   branches/proto/v4/boost/units/base_units/us/fluid_ounce.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/fluid_ounce.hpp
   branches/proto/v4/boost/units/base_units/us/foot.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/foot.hpp
   branches/proto/v4/boost/units/base_units/us/gallon.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/gallon.hpp
   branches/proto/v4/boost/units/base_units/us/gill.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/gill.hpp
   branches/proto/v4/boost/units/base_units/us/grain.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/grain.hpp
   branches/proto/v4/boost/units/base_units/us/hundredweight.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/hundredweight.hpp
   branches/proto/v4/boost/units/base_units/us/inch.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/inch.hpp
   branches/proto/v4/boost/units/base_units/us/mil.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/mil.hpp
   branches/proto/v4/boost/units/base_units/us/mile.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/mile.hpp
   branches/proto/v4/boost/units/base_units/us/minim.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/minim.hpp
   branches/proto/v4/boost/units/base_units/us/ounce.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/ounce.hpp
   branches/proto/v4/boost/units/base_units/us/pint.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/pint.hpp
   branches/proto/v4/boost/units/base_units/us/pound.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/pound.hpp
   branches/proto/v4/boost/units/base_units/us/quart.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/quart.hpp
   branches/proto/v4/boost/units/base_units/us/tablespoon.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/tablespoon.hpp
   branches/proto/v4/boost/units/base_units/us/teaspoon.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/teaspoon.hpp
   branches/proto/v4/boost/units/base_units/us/ton.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/ton.hpp
   branches/proto/v4/boost/units/base_units/us/yard.hpp
      - copied unchanged from r46295, /trunk/boost/units/base_units/us/yard.hpp
   branches/proto/v4/boost/units/cmath.hpp
      - copied unchanged from r46295, /trunk/boost/units/cmath.hpp
   branches/proto/v4/boost/units/config.hpp
      - copied unchanged from r46295, /trunk/boost/units/config.hpp
   branches/proto/v4/boost/units/conversion.hpp
      - copied unchanged from r46295, /trunk/boost/units/conversion.hpp
   branches/proto/v4/boost/units/derived_dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/derived_dimension.hpp
   branches/proto/v4/boost/units/detail/
      - copied from r46295, /trunk/boost/units/detail/
   branches/proto/v4/boost/units/detail/absolute_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/absolute_impl.hpp
   branches/proto/v4/boost/units/detail/cmath_boost_1_35.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_boost_1_35.hpp
   branches/proto/v4/boost/units/detail/cmath_gnu_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_gnu_impl.hpp
   branches/proto/v4/boost/units/detail/cmath_gnu_impl_boost_1_35.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_gnu_impl_boost_1_35.hpp
   branches/proto/v4/boost/units/detail/cmath_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_impl.hpp
   branches/proto/v4/boost/units/detail/cmath_msvc_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_msvc_impl.hpp
   branches/proto/v4/boost/units/detail/cmath_msvc_impl_boost_1_35.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_msvc_impl_boost_1_35.hpp
   branches/proto/v4/boost/units/detail/cmath_mwcw_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_mwcw_impl.hpp
   branches/proto/v4/boost/units/detail/cmath_mwcw_impl_boost_1_35.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/cmath_mwcw_impl_boost_1_35.hpp
   branches/proto/v4/boost/units/detail/conversion_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/conversion_impl.hpp
   branches/proto/v4/boost/units/detail/dim_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/dim_impl.hpp
   branches/proto/v4/boost/units/detail/dimension_impl.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/dimension_impl.hpp
   branches/proto/v4/boost/units/detail/dimension_list.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/dimension_list.hpp
   branches/proto/v4/boost/units/detail/dimensionless_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/dimensionless_unit.hpp
   branches/proto/v4/boost/units/detail/heterogeneous_conversion.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/heterogeneous_conversion.hpp
   branches/proto/v4/boost/units/detail/linear_algebra.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/linear_algebra.hpp
   branches/proto/v4/boost/units/detail/one.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/one.hpp
   branches/proto/v4/boost/units/detail/ordinal.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/ordinal.hpp
   branches/proto/v4/boost/units/detail/prevent_redefinition.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/prevent_redefinition.hpp
   branches/proto/v4/boost/units/detail/push_front_if.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/push_front_if.hpp
   branches/proto/v4/boost/units/detail/push_front_or_add.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/push_front_or_add.hpp
   branches/proto/v4/boost/units/detail/sort.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/sort.hpp
   branches/proto/v4/boost/units/detail/static_rational_power.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/static_rational_power.hpp
   branches/proto/v4/boost/units/detail/unscale.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/unscale.hpp
   branches/proto/v4/boost/units/detail/utility.hpp
      - copied unchanged from r46295, /trunk/boost/units/detail/utility.hpp
   branches/proto/v4/boost/units/dim.hpp
      - copied unchanged from r46295, /trunk/boost/units/dim.hpp
   branches/proto/v4/boost/units/dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/dimension.hpp
   branches/proto/v4/boost/units/dimensionless_quantity.hpp
      - copied unchanged from r46295, /trunk/boost/units/dimensionless_quantity.hpp
   branches/proto/v4/boost/units/dimensionless_type.hpp
      - copied unchanged from r46295, /trunk/boost/units/dimensionless_type.hpp
   branches/proto/v4/boost/units/dimensionless_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/dimensionless_unit.hpp
   branches/proto/v4/boost/units/get_dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/get_dimension.hpp
   branches/proto/v4/boost/units/get_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/get_system.hpp
   branches/proto/v4/boost/units/heterogeneous_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/heterogeneous_system.hpp
   branches/proto/v4/boost/units/homogeneous_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/homogeneous_system.hpp
   branches/proto/v4/boost/units/io.hpp
      - copied unchanged from r46295, /trunk/boost/units/io.hpp
   branches/proto/v4/boost/units/is_dim.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_dim.hpp
   branches/proto/v4/boost/units/is_dimension_list.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_dimension_list.hpp
   branches/proto/v4/boost/units/is_dimensionless.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_dimensionless.hpp
   branches/proto/v4/boost/units/is_dimensionless_quantity.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_dimensionless_quantity.hpp
   branches/proto/v4/boost/units/is_dimensionless_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_dimensionless_unit.hpp
   branches/proto/v4/boost/units/is_quantity.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_quantity.hpp
   branches/proto/v4/boost/units/is_quantity_of_dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_quantity_of_dimension.hpp
   branches/proto/v4/boost/units/is_quantity_of_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_quantity_of_system.hpp
   branches/proto/v4/boost/units/is_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_unit.hpp
   branches/proto/v4/boost/units/is_unit_of_dimension.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_unit_of_dimension.hpp
   branches/proto/v4/boost/units/is_unit_of_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/is_unit_of_system.hpp
   branches/proto/v4/boost/units/limits.hpp
      - copied unchanged from r46295, /trunk/boost/units/limits.hpp
   branches/proto/v4/boost/units/make_scaled_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/make_scaled_unit.hpp
   branches/proto/v4/boost/units/make_system.hpp
      - copied unchanged from r46295, /trunk/boost/units/make_system.hpp
   branches/proto/v4/boost/units/operators.hpp
      - copied unchanged from r46295, /trunk/boost/units/operators.hpp
   branches/proto/v4/boost/units/physical_dimensions/
      - copied from r46295, /trunk/boost/units/physical_dimensions/
   branches/proto/v4/boost/units/physical_dimensions.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions.hpp
   branches/proto/v4/boost/units/physical_dimensions/absorbed_dose.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/absorbed_dose.hpp
   branches/proto/v4/boost/units/physical_dimensions/acceleration.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/acceleration.hpp
   branches/proto/v4/boost/units/physical_dimensions/action.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/action.hpp
   branches/proto/v4/boost/units/physical_dimensions/activity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/activity.hpp
   branches/proto/v4/boost/units/physical_dimensions/amount.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/amount.hpp
   branches/proto/v4/boost/units/physical_dimensions/angular_acceleration.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/angular_acceleration.hpp
   branches/proto/v4/boost/units/physical_dimensions/angular_momentum.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/angular_momentum.hpp
   branches/proto/v4/boost/units/physical_dimensions/angular_velocity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/angular_velocity.hpp
   branches/proto/v4/boost/units/physical_dimensions/area.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/area.hpp
   branches/proto/v4/boost/units/physical_dimensions/capacitance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/capacitance.hpp
   branches/proto/v4/boost/units/physical_dimensions/conductance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/conductance.hpp
   branches/proto/v4/boost/units/physical_dimensions/conductivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/conductivity.hpp
   branches/proto/v4/boost/units/physical_dimensions/current.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/current.hpp
   branches/proto/v4/boost/units/physical_dimensions/dose_equivalent.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/dose_equivalent.hpp
   branches/proto/v4/boost/units/physical_dimensions/dynamic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/dynamic_viscosity.hpp
   branches/proto/v4/boost/units/physical_dimensions/electric_charge.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/electric_charge.hpp
   branches/proto/v4/boost/units/physical_dimensions/electric_potential.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/electric_potential.hpp
   branches/proto/v4/boost/units/physical_dimensions/energy.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/energy.hpp
   branches/proto/v4/boost/units/physical_dimensions/energy_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/energy_density.hpp
   branches/proto/v4/boost/units/physical_dimensions/force.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/force.hpp
   branches/proto/v4/boost/units/physical_dimensions/frequency.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/frequency.hpp
   branches/proto/v4/boost/units/physical_dimensions/heat_capacity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/heat_capacity.hpp
   branches/proto/v4/boost/units/physical_dimensions/illuminance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/illuminance.hpp
   branches/proto/v4/boost/units/physical_dimensions/impedance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/impedance.hpp
   branches/proto/v4/boost/units/physical_dimensions/inductance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/inductance.hpp
   branches/proto/v4/boost/units/physical_dimensions/kinematic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/kinematic_viscosity.hpp
   branches/proto/v4/boost/units/physical_dimensions/length.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/length.hpp
   branches/proto/v4/boost/units/physical_dimensions/luminance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/luminance.hpp
   branches/proto/v4/boost/units/physical_dimensions/luminous_flux.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/luminous_flux.hpp
   branches/proto/v4/boost/units/physical_dimensions/luminous_intensity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/luminous_intensity.hpp
   branches/proto/v4/boost/units/physical_dimensions/magnetic_field_intensity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/magnetic_field_intensity.hpp
   branches/proto/v4/boost/units/physical_dimensions/magnetic_flux.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/magnetic_flux.hpp
   branches/proto/v4/boost/units/physical_dimensions/magnetic_flux_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/magnetic_flux_density.hpp
   branches/proto/v4/boost/units/physical_dimensions/mass.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/mass.hpp
   branches/proto/v4/boost/units/physical_dimensions/mass_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/mass_density.hpp
   branches/proto/v4/boost/units/physical_dimensions/molar_energy.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/molar_energy.hpp
   branches/proto/v4/boost/units/physical_dimensions/molar_heat_capacity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/molar_heat_capacity.hpp
   branches/proto/v4/boost/units/physical_dimensions/moment_of_inertia.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/moment_of_inertia.hpp
   branches/proto/v4/boost/units/physical_dimensions/momentum.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/momentum.hpp
   branches/proto/v4/boost/units/physical_dimensions/permeability.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/permeability.hpp
   branches/proto/v4/boost/units/physical_dimensions/permittivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/permittivity.hpp
   branches/proto/v4/boost/units/physical_dimensions/plane_angle.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/plane_angle.hpp
   branches/proto/v4/boost/units/physical_dimensions/power.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/power.hpp
   branches/proto/v4/boost/units/physical_dimensions/pressure.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/pressure.hpp
   branches/proto/v4/boost/units/physical_dimensions/reluctance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/reluctance.hpp
   branches/proto/v4/boost/units/physical_dimensions/resistance.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/resistance.hpp
   branches/proto/v4/boost/units/physical_dimensions/resistivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/resistivity.hpp
   branches/proto/v4/boost/units/physical_dimensions/solid_angle.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/solid_angle.hpp
   branches/proto/v4/boost/units/physical_dimensions/specific_energy.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/specific_energy.hpp
   branches/proto/v4/boost/units/physical_dimensions/specific_heat_capacity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/specific_heat_capacity.hpp
   branches/proto/v4/boost/units/physical_dimensions/specific_volume.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/specific_volume.hpp
   branches/proto/v4/boost/units/physical_dimensions/stress.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/stress.hpp
   branches/proto/v4/boost/units/physical_dimensions/surface_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/surface_density.hpp
   branches/proto/v4/boost/units/physical_dimensions/surface_tension.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/surface_tension.hpp
   branches/proto/v4/boost/units/physical_dimensions/temperature.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/temperature.hpp
   branches/proto/v4/boost/units/physical_dimensions/thermal_conductivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/thermal_conductivity.hpp
   branches/proto/v4/boost/units/physical_dimensions/time.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/time.hpp
   branches/proto/v4/boost/units/physical_dimensions/torque.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/torque.hpp
   branches/proto/v4/boost/units/physical_dimensions/velocity.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/velocity.hpp
   branches/proto/v4/boost/units/physical_dimensions/volume.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/volume.hpp
   branches/proto/v4/boost/units/physical_dimensions/wavenumber.hpp
      - copied unchanged from r46295, /trunk/boost/units/physical_dimensions/wavenumber.hpp
   branches/proto/v4/boost/units/pow.hpp
      - copied unchanged from r46295, /trunk/boost/units/pow.hpp
   branches/proto/v4/boost/units/quantity.hpp
      - copied unchanged from r46295, /trunk/boost/units/quantity.hpp
   branches/proto/v4/boost/units/reduce_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/reduce_unit.hpp
   branches/proto/v4/boost/units/scale.hpp
      - copied unchanged from r46295, /trunk/boost/units/scale.hpp
   branches/proto/v4/boost/units/scaled_base_unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/scaled_base_unit.hpp
   branches/proto/v4/boost/units/static_constant.hpp
      - copied unchanged from r46295, /trunk/boost/units/static_constant.hpp
   branches/proto/v4/boost/units/static_rational.hpp
      - copied unchanged from r46295, /trunk/boost/units/static_rational.hpp
   branches/proto/v4/boost/units/systems/
      - copied from r46295, /trunk/boost/units/systems/
   branches/proto/v4/boost/units/systems/abstract.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/abstract.hpp
   branches/proto/v4/boost/units/systems/angle/
      - copied from r46295, /trunk/boost/units/systems/angle/
   branches/proto/v4/boost/units/systems/angle/degrees.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/angle/degrees.hpp
   branches/proto/v4/boost/units/systems/angle/gradians.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/angle/gradians.hpp
   branches/proto/v4/boost/units/systems/angle/revolutions.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/angle/revolutions.hpp
   branches/proto/v4/boost/units/systems/cgs/
      - copied from r46295, /trunk/boost/units/systems/cgs/
   branches/proto/v4/boost/units/systems/cgs.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs.hpp
   branches/proto/v4/boost/units/systems/cgs/acceleration.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/acceleration.hpp
   branches/proto/v4/boost/units/systems/cgs/area.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/area.hpp
   branches/proto/v4/boost/units/systems/cgs/base.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/base.hpp
   branches/proto/v4/boost/units/systems/cgs/current.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/current.hpp
   branches/proto/v4/boost/units/systems/cgs/dimensionless.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/dimensionless.hpp
   branches/proto/v4/boost/units/systems/cgs/dynamic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/dynamic_viscosity.hpp
   branches/proto/v4/boost/units/systems/cgs/energy.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/energy.hpp
   branches/proto/v4/boost/units/systems/cgs/force.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/force.hpp
   branches/proto/v4/boost/units/systems/cgs/frequency.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/frequency.hpp
   branches/proto/v4/boost/units/systems/cgs/io.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/io.hpp
   branches/proto/v4/boost/units/systems/cgs/kinematic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/kinematic_viscosity.hpp
   branches/proto/v4/boost/units/systems/cgs/length.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/length.hpp
   branches/proto/v4/boost/units/systems/cgs/mass.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/mass.hpp
   branches/proto/v4/boost/units/systems/cgs/mass_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/mass_density.hpp
   branches/proto/v4/boost/units/systems/cgs/momentum.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/momentum.hpp
   branches/proto/v4/boost/units/systems/cgs/power.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/power.hpp
   branches/proto/v4/boost/units/systems/cgs/pressure.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/pressure.hpp
   branches/proto/v4/boost/units/systems/cgs/time.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/time.hpp
   branches/proto/v4/boost/units/systems/cgs/velocity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/velocity.hpp
   branches/proto/v4/boost/units/systems/cgs/volume.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/volume.hpp
   branches/proto/v4/boost/units/systems/cgs/wavenumber.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/cgs/wavenumber.hpp
   branches/proto/v4/boost/units/systems/detail/
      - copied from r46295, /trunk/boost/units/systems/detail/
   branches/proto/v4/boost/units/systems/detail/constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/detail/constants.hpp
   branches/proto/v4/boost/units/systems/si/
      - copied from r46295, /trunk/boost/units/systems/si/
   branches/proto/v4/boost/units/systems/si.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si.hpp
   branches/proto/v4/boost/units/systems/si/absorbed_dose.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/absorbed_dose.hpp
   branches/proto/v4/boost/units/systems/si/acceleration.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/acceleration.hpp
   branches/proto/v4/boost/units/systems/si/action.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/action.hpp
   branches/proto/v4/boost/units/systems/si/activity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/activity.hpp
   branches/proto/v4/boost/units/systems/si/amount.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/amount.hpp
   branches/proto/v4/boost/units/systems/si/angular_acceleration.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/angular_acceleration.hpp
   branches/proto/v4/boost/units/systems/si/angular_momentum.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/angular_momentum.hpp
   branches/proto/v4/boost/units/systems/si/angular_velocity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/angular_velocity.hpp
   branches/proto/v4/boost/units/systems/si/area.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/area.hpp
   branches/proto/v4/boost/units/systems/si/base.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/base.hpp
   branches/proto/v4/boost/units/systems/si/capacitance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/capacitance.hpp
   branches/proto/v4/boost/units/systems/si/catalytic_activity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/catalytic_activity.hpp
   branches/proto/v4/boost/units/systems/si/codata/
      - copied from r46295, /trunk/boost/units/systems/si/codata/
   branches/proto/v4/boost/units/systems/si/codata/alpha_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/alpha_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/atomic-nuclear_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/atomic-nuclear_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/deuteron_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/deuteron_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/electromagnetic_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/electromagnetic_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/electron_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/electron_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/helion_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/helion_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/muon_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/muon_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/neutron_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/neutron_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/physico-chemical_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/physico-chemical_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/proton_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/proton_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/tau_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/tau_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/triton_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/triton_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata/typedefs.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/typedefs.hpp
   branches/proto/v4/boost/units/systems/si/codata/universal_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata/universal_constants.hpp
   branches/proto/v4/boost/units/systems/si/codata_constants.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/codata_constants.hpp
   branches/proto/v4/boost/units/systems/si/conductance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/conductance.hpp
   branches/proto/v4/boost/units/systems/si/conductivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/conductivity.hpp
   branches/proto/v4/boost/units/systems/si/current.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/current.hpp
   branches/proto/v4/boost/units/systems/si/dimensionless.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/dimensionless.hpp
   branches/proto/v4/boost/units/systems/si/dose_equivalent.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/dose_equivalent.hpp
   branches/proto/v4/boost/units/systems/si/dynamic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/dynamic_viscosity.hpp
   branches/proto/v4/boost/units/systems/si/electric_charge.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/electric_charge.hpp
   branches/proto/v4/boost/units/systems/si/electric_potential.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/electric_potential.hpp
   branches/proto/v4/boost/units/systems/si/energy.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/energy.hpp
   branches/proto/v4/boost/units/systems/si/force.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/force.hpp
   branches/proto/v4/boost/units/systems/si/frequency.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/frequency.hpp
   branches/proto/v4/boost/units/systems/si/illuminance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/illuminance.hpp
   branches/proto/v4/boost/units/systems/si/impedance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/impedance.hpp
   branches/proto/v4/boost/units/systems/si/inductance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/inductance.hpp
   branches/proto/v4/boost/units/systems/si/io.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/io.hpp
   branches/proto/v4/boost/units/systems/si/kinematic_viscosity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/kinematic_viscosity.hpp
   branches/proto/v4/boost/units/systems/si/length.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/length.hpp
   branches/proto/v4/boost/units/systems/si/luminous_flux.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/luminous_flux.hpp
   branches/proto/v4/boost/units/systems/si/luminous_intensity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/luminous_intensity.hpp
   branches/proto/v4/boost/units/systems/si/magnetic_field_intensity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/magnetic_field_intensity.hpp
   branches/proto/v4/boost/units/systems/si/magnetic_flux.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/magnetic_flux.hpp
   branches/proto/v4/boost/units/systems/si/magnetic_flux_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/magnetic_flux_density.hpp
   branches/proto/v4/boost/units/systems/si/mass.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/mass.hpp
   branches/proto/v4/boost/units/systems/si/mass_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/mass_density.hpp
   branches/proto/v4/boost/units/systems/si/moment_of_inertia.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/moment_of_inertia.hpp
   branches/proto/v4/boost/units/systems/si/momentum.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/momentum.hpp
   branches/proto/v4/boost/units/systems/si/permeability.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/permeability.hpp
   branches/proto/v4/boost/units/systems/si/permittivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/permittivity.hpp
   branches/proto/v4/boost/units/systems/si/plane_angle.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/plane_angle.hpp
   branches/proto/v4/boost/units/systems/si/power.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/power.hpp
   branches/proto/v4/boost/units/systems/si/prefixes.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/prefixes.hpp
   branches/proto/v4/boost/units/systems/si/pressure.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/pressure.hpp
   branches/proto/v4/boost/units/systems/si/reluctance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/reluctance.hpp
   branches/proto/v4/boost/units/systems/si/resistance.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/resistance.hpp
   branches/proto/v4/boost/units/systems/si/resistivity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/resistivity.hpp
   branches/proto/v4/boost/units/systems/si/solid_angle.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/solid_angle.hpp
   branches/proto/v4/boost/units/systems/si/surface_density.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/surface_density.hpp
   branches/proto/v4/boost/units/systems/si/surface_tension.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/surface_tension.hpp
   branches/proto/v4/boost/units/systems/si/temperature.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/temperature.hpp
   branches/proto/v4/boost/units/systems/si/time.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/time.hpp
   branches/proto/v4/boost/units/systems/si/torque.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/torque.hpp
   branches/proto/v4/boost/units/systems/si/velocity.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/velocity.hpp
   branches/proto/v4/boost/units/systems/si/volume.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/volume.hpp
   branches/proto/v4/boost/units/systems/si/wavenumber.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/si/wavenumber.hpp
   branches/proto/v4/boost/units/systems/temperature/
      - copied from r46295, /trunk/boost/units/systems/temperature/
   branches/proto/v4/boost/units/systems/temperature/celsius.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/temperature/celsius.hpp
   branches/proto/v4/boost/units/systems/temperature/fahrenheit.hpp
      - copied unchanged from r46295, /trunk/boost/units/systems/temperature/fahrenheit.hpp
   branches/proto/v4/boost/units/unit.hpp
      - copied unchanged from r46295, /trunk/boost/units/unit.hpp
   branches/proto/v4/boost/units/units_fwd.hpp
      - copied unchanged from r46295, /trunk/boost/units/units_fwd.hpp
   branches/proto/v4/libs/asio/test/basic_serial_port.cpp
      - copied unchanged from r46295, /trunk/libs/asio/test/basic_serial_port.cpp
   branches/proto/v4/libs/asio/test/serial_port.cpp
      - copied unchanged from r46295, /trunk/libs/asio/test/serial_port.cpp
   branches/proto/v4/libs/asio/test/serial_port_base.cpp
      - copied unchanged from r46295, /trunk/libs/asio/test/serial_port_base.cpp
   branches/proto/v4/libs/asio/test/serial_port_service.cpp
      - copied unchanged from r46295, /trunk/libs/asio/test/serial_port_service.cpp
   branches/proto/v4/libs/serialization/doc/new_case_studies.html
      - copied unchanged from r46295, /trunk/libs/serialization/doc/new_case_studies.html
   branches/proto/v4/libs/serialization/doc/performance_status.html
      - copied unchanged from r46295, /trunk/libs/serialization/doc/performance_status.html
   branches/proto/v4/libs/serialization/doc/profile1.txt
      - copied unchanged from r46295, /trunk/libs/serialization/doc/profile1.txt
   branches/proto/v4/libs/serialization/doc/profile2.txt
      - copied unchanged from r46295, /trunk/libs/serialization/doc/profile2.txt
   branches/proto/v4/libs/serialization/doc/profile3.txt
      - copied unchanged from r46295, /trunk/libs/serialization/doc/profile3.txt
   branches/proto/v4/libs/serialization/doc/singleton.html
      - copied unchanged from r46295, /trunk/libs/serialization/doc/singleton.html
   branches/proto/v4/libs/serialization/doc/todo.html
      - copied unchanged from r46295, /trunk/libs/serialization/doc/todo.html
   branches/proto/v4/libs/serialization/performance/
      - copied from r46295, /trunk/libs/serialization/performance/
   branches/proto/v4/libs/serialization/performance/Jamfile.v2
      - copied unchanged from r46295, /trunk/libs/serialization/performance/Jamfile.v2
   branches/proto/v4/libs/serialization/performance/binary_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/binary_archive.hpp
   branches/proto/v4/libs/serialization/performance/binary_warchive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/binary_warchive.hpp
   branches/proto/v4/libs/serialization/performance/peformance_array.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/peformance_array.cpp
   branches/proto/v4/libs/serialization/performance/performance_binary.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_binary.cpp
   branches/proto/v4/libs/serialization/performance/performance_codecvt_null.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_codecvt_null.cpp
   branches/proto/v4/libs/serialization/performance/performance_iterators.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_iterators.cpp
   branches/proto/v4/libs/serialization/performance/performance_iterators_base64.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_iterators_base64.cpp
   branches/proto/v4/libs/serialization/performance/performance_no_rtti.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_no_rtti.cpp
   branches/proto/v4/libs/serialization/performance/performance_polymorphic.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_polymorphic.cpp
   branches/proto/v4/libs/serialization/performance/performance_simple_class.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_simple_class.cpp
   branches/proto/v4/libs/serialization/performance/performance_utf8_codecvt.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_utf8_codecvt.cpp
   branches/proto/v4/libs/serialization/performance/performance_vector.cpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/performance_vector.cpp
   branches/proto/v4/libs/serialization/performance/polymorphic_array_binary_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_array_binary_archive.hpp
   branches/proto/v4/libs/serialization/performance/polymorphic_binary_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_binary_archive.hpp
   branches/proto/v4/libs/serialization/performance/polymorphic_text_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_text_archive.hpp
   branches/proto/v4/libs/serialization/performance/polymorphic_text_warchive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_text_warchive.hpp
   branches/proto/v4/libs/serialization/performance/polymorphic_xml_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_xml_archive.hpp
   branches/proto/v4/libs/serialization/performance/polymorphic_xml_warchive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/polymorphic_xml_warchive.hpp
   branches/proto/v4/libs/serialization/performance/portable_binary_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/portable_binary_archive.hpp
   branches/proto/v4/libs/serialization/performance/profile.sh
      - copied unchanged from r46295, /trunk/libs/serialization/performance/profile.sh
   branches/proto/v4/libs/serialization/performance/text_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/text_archive.hpp
   branches/proto/v4/libs/serialization/performance/text_warchive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/text_warchive.hpp
   branches/proto/v4/libs/serialization/performance/xml_archive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/xml_archive.hpp
   branches/proto/v4/libs/serialization/performance/xml_warchive.hpp
      - copied unchanged from r46295, /trunk/libs/serialization/performance/xml_warchive.hpp
   branches/proto/v4/libs/units/
      - copied from r46295, /trunk/libs/units/
   branches/proto/v4/libs/units/boost.css
      - copied unchanged from r46295, /trunk/libs/units/boost.css
   branches/proto/v4/libs/units/doc/
      - copied from r46295, /trunk/libs/units/doc/
   branches/proto/v4/libs/units/doc/Jamfile.v2
      - copied unchanged from r46295, /trunk/libs/units/doc/Jamfile.v2
   branches/proto/v4/libs/units/doc/generate_base_units.jam
      - copied unchanged from r46295, /trunk/libs/units/doc/generate_base_units.jam
   branches/proto/v4/libs/units/doc/units.qbk
      - copied unchanged from r46295, /trunk/libs/units/doc/units.qbk
   branches/proto/v4/libs/units/example/
      - copied from r46295, /trunk/libs/units/example/
   branches/proto/v4/libs/units/example/Jamfile.v2
      - copied unchanged from r46295, /trunk/libs/units/example/Jamfile.v2
   branches/proto/v4/libs/units/example/complex.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/complex.cpp
   branches/proto/v4/libs/units/example/composite_output.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/composite_output.cpp
   branches/proto/v4/libs/units/example/conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/conversion.cpp
   branches/proto/v4/libs/units/example/conversion_factor.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/conversion_factor.cpp
   branches/proto/v4/libs/units/example/dimension.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/dimension.cpp
   branches/proto/v4/libs/units/example/heterogeneous_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/heterogeneous_unit.cpp
   branches/proto/v4/libs/units/example/kitchen_sink.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/kitchen_sink.cpp
   branches/proto/v4/libs/units/example/measurement.hpp
      - copied unchanged from r46295, /trunk/libs/units/example/measurement.hpp
   branches/proto/v4/libs/units/example/non_base_dimension.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/non_base_dimension.cpp
   branches/proto/v4/libs/units/example/performance.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/performance.cpp
   branches/proto/v4/libs/units/example/quantity.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/quantity.cpp
   branches/proto/v4/libs/units/example/quaternion.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/quaternion.cpp
   branches/proto/v4/libs/units/example/radar_beam_height.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/radar_beam_height.cpp
   branches/proto/v4/libs/units/example/runtime_conversion_factor.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/runtime_conversion_factor.cpp
   branches/proto/v4/libs/units/example/runtime_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/runtime_unit.cpp
   branches/proto/v4/libs/units/example/runtime_unit_input.txt
      - copied unchanged from r46295, /trunk/libs/units/example/runtime_unit_input.txt
   branches/proto/v4/libs/units/example/systems.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/systems.cpp
   branches/proto/v4/libs/units/example/temperature.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/temperature.cpp
   branches/proto/v4/libs/units/example/test_system.hpp
      - copied unchanged from r46295, /trunk/libs/units/example/test_system.hpp
   branches/proto/v4/libs/units/example/tutorial.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/tutorial.cpp
   branches/proto/v4/libs/units/example/unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/example/unit.cpp
   branches/proto/v4/libs/units/images/
      - copied from r46295, /trunk/libs/units/images/
   branches/proto/v4/libs/units/images/form_0.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_0.png
   branches/proto/v4/libs/units/images/form_1.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_1.png
   branches/proto/v4/libs/units/images/form_10.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_10.png
   branches/proto/v4/libs/units/images/form_11.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_11.png
   branches/proto/v4/libs/units/images/form_12.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_12.png
   branches/proto/v4/libs/units/images/form_13.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_13.png
   branches/proto/v4/libs/units/images/form_14.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_14.png
   branches/proto/v4/libs/units/images/form_15.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_15.png
   branches/proto/v4/libs/units/images/form_2.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_2.png
   branches/proto/v4/libs/units/images/form_3.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_3.png
   branches/proto/v4/libs/units/images/form_4.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_4.png
   branches/proto/v4/libs/units/images/form_5.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_5.png
   branches/proto/v4/libs/units/images/form_6.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_6.png
   branches/proto/v4/libs/units/images/form_7.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_7.png
   branches/proto/v4/libs/units/images/form_8.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_8.png
   branches/proto/v4/libs/units/images/form_9.png
      - copied unchanged from r46295, /trunk/libs/units/images/form_9.png
   branches/proto/v4/libs/units/index.html
      - copied unchanged from r46295, /trunk/libs/units/index.html
   branches/proto/v4/libs/units/test/
      - copied from r46295, /trunk/libs/units/test/
   branches/proto/v4/libs/units/test/Jamfile.v2
      - copied unchanged from r46295, /trunk/libs/units/test/Jamfile.v2
   branches/proto/v4/libs/units/test/check_conversion_defs.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/check_conversion_defs.cpp
   branches/proto/v4/libs/units/test/fail_add_temperature.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_add_temperature.cpp
   branches/proto/v4/libs/units/test/fail_adl_detail.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_adl_detail.cpp
   branches/proto/v4/libs/units/test/fail_base_dimension.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_base_dimension.cpp
   branches/proto/v4/libs/units/test/fail_heterogeneous_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_heterogeneous_unit.cpp
   branches/proto/v4/libs/units/test/fail_implicit_conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_implicit_conversion.cpp
   branches/proto/v4/libs/units/test/fail_quantity_add.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_add.cpp
   branches/proto/v4/libs/units/test/fail_quantity_add_assign.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_add_assign.cpp
   branches/proto/v4/libs/units/test/fail_quantity_assign.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_assign.cpp
   branches/proto/v4/libs/units/test/fail_quantity_construct.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_construct.cpp
   branches/proto/v4/libs/units/test/fail_quantity_non_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_non_unit.cpp
   branches/proto/v4/libs/units/test/fail_quantity_scalar_add.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_scalar_add.cpp
   branches/proto/v4/libs/units/test/fail_quantity_scalar_sub.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_scalar_sub.cpp
   branches/proto/v4/libs/units/test/fail_quantity_sub_assign.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_sub_assign.cpp
   branches/proto/v4/libs/units/test/fail_quantity_subtract.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_subtract.cpp
   branches/proto/v4/libs/units/test/fail_quantity_unit_add.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_unit_add.cpp
   branches/proto/v4/libs/units/test/fail_quantity_unit_subtract.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_quantity_unit_subtract.cpp
   branches/proto/v4/libs/units/test/fail_scalar_quantity_add.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_scalar_quantity_add.cpp
   branches/proto/v4/libs/units/test/fail_scalar_quantity_sub.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_scalar_quantity_sub.cpp
   branches/proto/v4/libs/units/test/fail_unit_quantity_add.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_unit_quantity_add.cpp
   branches/proto/v4/libs/units/test/fail_unit_quantity_subtract.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/fail_unit_quantity_subtract.cpp
   branches/proto/v4/libs/units/test/test_absolute.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_absolute.cpp
   branches/proto/v4/libs/units/test/test_base_dimension.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_base_dimension.cpp
   branches/proto/v4/libs/units/test/test_cmath.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_cmath.cpp
   branches/proto/v4/libs/units/test/test_complicated_system.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_complicated_system.cpp
   branches/proto/v4/libs/units/test/test_conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_conversion.cpp
   branches/proto/v4/libs/units/test/test_custom_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_custom_unit.cpp
   branches/proto/v4/libs/units/test/test_default_conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_default_conversion.cpp
   branches/proto/v4/libs/units/test/test_dimensionless_ice1.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_dimensionless_ice1.cpp
   branches/proto/v4/libs/units/test/test_dimensionless_ice2.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_dimensionless_ice2.cpp
   branches/proto/v4/libs/units/test/test_dimensionless_quantity.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_dimensionless_quantity.cpp
   branches/proto/v4/libs/units/test/test_header.hpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_header.hpp
   branches/proto/v4/libs/units/test/test_implicit_conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_implicit_conversion.cpp
   branches/proto/v4/libs/units/test/test_limits.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_limits.cpp
   branches/proto/v4/libs/units/test/test_mixed_value_types.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_mixed_value_types.cpp
   branches/proto/v4/libs/units/test/test_negative_denominator.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_negative_denominator.cpp
   branches/proto/v4/libs/units/test/test_predicates.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_predicates.cpp
   branches/proto/v4/libs/units/test/test_quantity.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_quantity.cpp
   branches/proto/v4/libs/units/test/test_scaled_conversion.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_scaled_conversion.cpp
   branches/proto/v4/libs/units/test/test_scaled_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_scaled_unit.cpp
   branches/proto/v4/libs/units/test/test_unit.cpp
      - copied unchanged from r46295, /trunk/libs/units/test/test_unit.cpp
   branches/proto/v4/libs/units/test_headers/
      - copied from r46295, /trunk/libs/units/test_headers/
   branches/proto/v4/libs/units/test_headers/Jamfile.v2
      - copied unchanged from r46295, /trunk/libs/units/test_headers/Jamfile.v2
   branches/proto/v4/libs/units/test_headers/generate_header.jam
      - copied unchanged from r46295, /trunk/libs/units/test_headers/generate_header.jam
   branches/proto/v4/libs/units/test_headers/main.cpp
      - copied unchanged from r46295, /trunk/libs/units/test_headers/main.cpp
   branches/proto/v4/libs/units/test_headers/test.cpp
      - copied unchanged from r46295, /trunk/libs/units/test_headers/test.cpp
   branches/proto/v4/libs/units/tutorial/
      - copied from r46295, /trunk/libs/units/tutorial/
   branches/proto/v4/libs/units/tutorial/tutorial_1.cpp
      - copied unchanged from r46295, /trunk/libs/units/tutorial/tutorial_1.cpp
Removed:
   branches/proto/v4/boost/serialization/is_abstract.hpp
   branches/proto/v4/boost/thread/pthread/tss.hpp
   branches/proto/v4/boost/thread/win32/tss.hpp
Properties modified:
   branches/proto/v4/ (props changed)
Text files modified:
   branches/proto/v4/boost/archive/array/iarchive.hpp | 6
   branches/proto/v4/boost/archive/array/oarchive.hpp | 4
   branches/proto/v4/boost/archive/detail/common_iarchive.hpp | 4
   branches/proto/v4/boost/archive/detail/common_oarchive.hpp | 4
   branches/proto/v4/boost/archive/detail/iserializer.hpp | 4
   branches/proto/v4/boost/archive/detail/oserializer.hpp | 4
   branches/proto/v4/boost/archive/detail/register_archive.hpp | 2
   branches/proto/v4/boost/archive/impl/basic_xml_oarchive.ipp | 2
   branches/proto/v4/boost/archive/impl/text_iarchive_impl.ipp | 2
   branches/proto/v4/boost/archive/impl/xml_iarchive_impl.ipp | 4
   branches/proto/v4/boost/archive/impl/xml_wiarchive_impl.ipp | 4
   branches/proto/v4/boost/archive/xml_archive_exception.hpp | 1
   branches/proto/v4/boost/asio.hpp | 4
   branches/proto/v4/boost/asio/detail/descriptor_ops.hpp | 18 ++
   branches/proto/v4/boost/asio/detail/reactive_descriptor_service.hpp | 2
   branches/proto/v4/boost/asio/detail/win_iocp_handle_service.hpp | 4
   branches/proto/v4/boost/config/platform/win32.hpp | 5
   branches/proto/v4/boost/serialization/collection_traits.hpp | 16 +
   branches/proto/v4/boost/serialization/collections_load_imp.hpp | 2
   branches/proto/v4/boost/serialization/config.hpp | 6
   branches/proto/v4/boost/serialization/deque.hpp | 2
   branches/proto/v4/boost/serialization/detail/shared_count_132.hpp | 19 -
   branches/proto/v4/boost/serialization/detail/shared_ptr_132.hpp | 2
   branches/proto/v4/boost/serialization/export.hpp | 10
   branches/proto/v4/boost/serialization/extended_type_info.hpp | 8
   branches/proto/v4/boost/serialization/shared_ptr_132.hpp | 11
   branches/proto/v4/boost/serialization/valarray.hpp | 4
   branches/proto/v4/boost/serialization/variant.hpp | 10
   branches/proto/v4/boost/static_warning.hpp | 11
   branches/proto/v4/boost/test/impl/execution_monitor.ipp | 2
   branches/proto/v4/boost/test/test_tools.hpp | 2
   branches/proto/v4/boost/thread/detail/thread.hpp | 14 +
   branches/proto/v4/boost/thread/locks.hpp | 12 +
   branches/proto/v4/boost/thread/win32/thread_primitives.hpp | 6
   branches/proto/v4/libs/regex/src/posix_api.cpp | 16 +
   branches/proto/v4/libs/regex/src/wide_posix_api.cpp | 16 +
   branches/proto/v4/libs/serialization/doc/archives.html | 22 +-
   branches/proto/v4/libs/serialization/doc/contents.html | 19 ++
   branches/proto/v4/libs/serialization/doc/release.html | 10
   branches/proto/v4/libs/serialization/doc/serialization.html | 4
   branches/proto/v4/libs/serialization/example/demo.cpp | 2
   branches/proto/v4/libs/serialization/example/demo_dll_a.hpp | 2
   branches/proto/v4/libs/serialization/example/demo_dll_a.ipp | 2
   branches/proto/v4/libs/serialization/example/portable_binary_oarchive.cpp | 2
   branches/proto/v4/libs/serialization/src/basic_iarchive.cpp | 19 +
   branches/proto/v4/libs/serialization/src/basic_xml_grammar.ipp | 4
   branches/proto/v4/libs/serialization/src/codecvt_null.cpp | 2
   branches/proto/v4/libs/serialization/test/A.cpp | 2
   branches/proto/v4/libs/serialization/test/A.hpp | 1
   branches/proto/v4/libs/serialization/test/base.hpp | 2
   branches/proto/v4/libs/serialization/test/test_delete_pointer.cpp | 13
   branches/proto/v4/libs/serialization/test/test_no_rtti.cpp | 1
   branches/proto/v4/libs/serialization/test/test_non_default_ctor.cpp | 2
   branches/proto/v4/libs/serialization/test/test_non_default_ctor2.cpp | 7
   branches/proto/v4/libs/serialization/test/test_static_warning.cpp | 1
   branches/proto/v4/libs/thread/test/test_lock_concept.cpp | 33 +++
   branches/proto/v4/libs/thread/test/test_tss.cpp | 48 +++++
   branches/proto/v4/status/Jamfile.v2 | 1
   branches/proto/v4/tools/build/v2/build/feature.jam | 49 +++++
   branches/proto/v4/tools/build/v2/build/project.jam | 94 ++++++-----
   branches/proto/v4/tools/build/v2/build/property-set.jam | 42 +++-
   branches/proto/v4/tools/build/v2/build/property.jam | 43 +++-
   branches/proto/v4/tools/build/v2/build/targets.jam | 112 +++++++------
   branches/proto/v4/tools/build/v2/build/toolset.jam | 2
   branches/proto/v4/tools/build/v2/build/type.jam | 22 ++
   branches/proto/v4/tools/build/v2/build/version.jam | 2
   branches/proto/v4/tools/build/v2/build/virtual-target.jam | 2
   branches/proto/v4/tools/build/v2/doc/src/tutorial.xml | 179 ++++++++++-----------
   branches/proto/v4/tools/build/v2/kernel/class.jam | 154 ++++++++---------
   branches/proto/v4/tools/build/v2/kernel/errors.jam | 12 +
   branches/proto/v4/tools/build/v2/kernel/modules.jam | 92 +++++-----
   branches/proto/v4/tools/build/v2/tools/msvc.jam | 6
   branches/proto/v4/tools/build/v2/tools/stage.jam | 9
   branches/proto/v4/tools/build/v2/util/assert.jam | 318 +++++++++++++++++++++++++++++--------
   branches/proto/v4/tools/build/v2/util/container.jam | 333 +++++++++++++++++++++------------------
   branches/proto/v4/tools/build/v2/util/doc.jam | 281 ++++++++++++++++++---------------
   branches/proto/v4/tools/build/v2/util/indirect.jam | 5
   branches/proto/v4/tools/build/v2/util/path.jam | 24 +-
   branches/proto/v4/tools/build/v2/util/print.jam | 134 ++++++++-------
   branches/proto/v4/tools/build/v2/util/sequence.jam | 2
   branches/proto/v4/tools/build/v2/util/utility.jam | 2
   branches/proto/v4/tools/inspect/ascii_check.cpp | 4
   branches/proto/v4/tools/inspect/build/Jamfile.v2 | 2
   83 files changed, 1430 insertions(+), 937 deletions(-)

Modified: branches/proto/v4/boost/archive/array/iarchive.hpp
==============================================================================
--- branches/proto/v4/boost/archive/array/iarchive.hpp (original)
+++ branches/proto/v4/boost/archive/array/iarchive.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -66,7 +66,7 @@
   // the optimized implementation for vector uses serialization::array
   template<class ValueType, class Allocator>
   void load_optimized(
- std::vector<ValueType, Allocator> &t, unsigned int version, mpl::true_)
+ std::vector<ValueType, Allocator> &t, unsigned int /*version*/, mpl::true_)
   {
     t.clear();
     // retrieve number of elements
@@ -92,7 +92,7 @@
   template<class ValueType, class Allocator>
   void load_override(std::vector<ValueType,Allocator> &x, unsigned int version)
   {
- typedef typename mpl::and_<
+ typedef BOOST_DEDUCED_TYPENAME mpl::and_<
       mpl::not_<is_same<ValueType,bool> >,
       mpl::apply1<
         BOOST_DEDUCED_TYPENAME Archive::use_array_optimization
@@ -105,7 +105,7 @@
   template<class ValueType>
   void load_override(serialization::array<ValueType> const& x, unsigned int version)
   {
- typedef typename mpl::apply1<
+ typedef BOOST_DEDUCED_TYPENAME mpl::apply1<
         BOOST_DEDUCED_TYPENAME Archive::use_array_optimization
       , ValueType
>::type use_optimized;

Modified: branches/proto/v4/boost/archive/array/oarchive.hpp
==============================================================================
--- branches/proto/v4/boost/archive/array/oarchive.hpp (original)
+++ branches/proto/v4/boost/archive/array/oarchive.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -90,7 +90,7 @@
   void save_override(std::vector<ValueType,Allocator> const &x, unsigned int version)
   {
     typedef BOOST_DEDUCED_TYPENAME remove_const<ValueType>::type value_type;
- typedef typename mpl::and_<
+ typedef BOOST_DEDUCED_TYPENAME mpl::and_<
       mpl::not_<is_same<value_type,bool> >,
       mpl::apply1<
         BOOST_DEDUCED_TYPENAME Archive::use_array_optimization
@@ -103,7 +103,7 @@
   template<class ValueType>
   void save_override(serialization::array<ValueType> const& x, unsigned int version)
   {
- typedef typename mpl::apply1<
+ typedef BOOST_DEDUCED_TYPENAME mpl::apply1<
         BOOST_DEDUCED_TYPENAME Archive::use_array_optimization
       , BOOST_DEDUCED_TYPENAME remove_const<ValueType>::type
>::type use_optimized;

Modified: branches/proto/v4/boost/archive/detail/common_iarchive.hpp
==============================================================================
--- branches/proto/v4/boost/archive/detail/common_iarchive.hpp (original)
+++ branches/proto/v4/boost/archive/detail/common_iarchive.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -60,8 +60,8 @@
     }
     // default implementations of functions which emit start/end tags for
     // archive types that require them.
- void load_start(const char *name){}
- void load_end(const char *name){}
+ void load_start(const char * /*name*/){}
+ void load_end(const char * /*name*/){}
     // default archive initialization
     common_iarchive(unsigned int flags = 0) :
         basic_iarchive(flags),

Modified: branches/proto/v4/boost/archive/detail/common_oarchive.hpp
==============================================================================
--- branches/proto/v4/boost/archive/detail/common_oarchive.hpp (original)
+++ branches/proto/v4/boost/archive/detail/common_oarchive.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -63,8 +63,8 @@
     void save_override(T & t, BOOST_PFTO int){
         archive::save(* this->This(), t);
     }
- void save_start(const char *name){}
- void save_end(const char *name){}
+ void save_start(const char * /*name*/){}
+ void save_end(const char * /*name*/){}
     common_oarchive(unsigned int flags = 0) :
         basic_oarchive(flags),
         interface_oarchive<Archive>()

Modified: branches/proto/v4/boost/archive/detail/iserializer.hpp
==============================================================================
--- branches/proto/v4/boost/archive/detail/iserializer.hpp (original)
+++ branches/proto/v4/boost/archive/detail/iserializer.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -44,7 +44,7 @@
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/remove_const.hpp>
 #include <boost/type_traits/remove_all_extents.hpp>
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 #include <boost/type_traits/is_polymorphic.hpp>
 
 #include <boost/mpl/eval_if.hpp>
@@ -469,7 +469,7 @@
 template<class Archive, class T>
 struct load_array_type {
     static void invoke(Archive &ar, T &t){
- typedef typename remove_all_extents<T>::type value_type;
+ typedef BOOST_DEDUCED_TYPENAME remove_all_extents<T>::type value_type;
         
         // convert integers to correct enum to load
         int current_count = sizeof(t) / (

Modified: branches/proto/v4/boost/archive/detail/oserializer.hpp
==============================================================================
--- branches/proto/v4/boost/archive/detail/oserializer.hpp (original)
+++ branches/proto/v4/boost/archive/detail/oserializer.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -38,7 +38,7 @@
 //#include <boost/type_traits/is_same.hpp>
 #include <boost/type_traits/is_polymorphic.hpp>
 #include <boost/type_traits/remove_all_extents.hpp>
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/and.hpp>
@@ -464,7 +464,7 @@
 struct save_array_type
 {
     static void invoke(Archive &ar, const T &t){
- typedef typename remove_all_extents<T>::type value_type;
+ typedef BOOST_DEDUCED_TYPENAME remove_all_extents<T>::type value_type;
         
         save_access::end_preamble(ar);
         // consider alignment

Modified: branches/proto/v4/boost/archive/detail/register_archive.hpp
==============================================================================
--- branches/proto/v4/boost/archive/detail/register_archive.hpp (original)
+++ branches/proto/v4/boost/archive/detail/register_archive.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -43,7 +43,7 @@
 namespace boost { namespace archive { namespace detail { \
                                                                         \
 template <class Serializable> \
-typename _ptr_serialization_support<Archive, Serializable>::type \
+BOOST_DEDUCED_TYPENAME _ptr_serialization_support<Archive, Serializable>::type \
 instantiate_ptr_serialization( Serializable*, Archive*, adl_tag ); \
                                                                         \
 }}}

Modified: branches/proto/v4/boost/archive/impl/basic_xml_oarchive.ipp
==============================================================================
--- branches/proto/v4/boost/archive/impl/basic_xml_oarchive.ipp (original)
+++ branches/proto/v4/boost/archive/impl/basic_xml_oarchive.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -263,7 +263,7 @@
 basic_xml_oarchive<Archive>::~basic_xml_oarchive(){
     if(0 == (this->get_flags() & no_header)){
         BOOST_TRY{
- this->This()->put("</boost_serialization>");
+ this->This()->put("</boost_serialization>\n");
         }
         BOOST_CATCH(...){}
         BOOST_CATCH_END

Modified: branches/proto/v4/boost/archive/impl/text_iarchive_impl.ipp
==============================================================================
--- branches/proto/v4/boost/archive/impl/text_iarchive_impl.ipp (original)
+++ branches/proto/v4/boost/archive/impl/text_iarchive_impl.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -54,7 +54,7 @@
     #endif
         s.resize(size);
     if(0 < size)
- is.read(&(*s.begin()), size);
+ is.read(&(*s.begin()), size);
 }
 
 #ifndef BOOST_NO_CWCHAR

Modified: branches/proto/v4/boost/archive/impl/xml_iarchive_impl.ipp
==============================================================================
--- branches/proto/v4/boost/archive/impl/xml_iarchive_impl.ipp (original)
+++ branches/proto/v4/boost/archive/impl/xml_iarchive_impl.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -143,7 +143,9 @@
 xml_iarchive_impl<Archive>::load_override(class_name_type & t, int){
     const std::string & s = gimpl->rv.class_name;
     if(s.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
- boost::throw_exception( archive_exception( archive_exception::invalid_class_name ) );
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_class_name)
+ );
     char * tptr = t;
     std::memcpy(tptr, s.data(), s.size());
     tptr[s.size()] = '\0';

Modified: branches/proto/v4/boost/archive/impl/xml_wiarchive_impl.ipp
==============================================================================
--- branches/proto/v4/boost/archive/impl/xml_wiarchive_impl.ipp (original)
+++ branches/proto/v4/boost/archive/impl/xml_wiarchive_impl.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -136,7 +136,9 @@
 xml_wiarchive_impl<Archive>::load_override(class_name_type & t, int){
     const std::wstring & ws = gimpl->rv.class_name;
     if(ws.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
- boost::throw_exception( archive_exception( archive_exception::invalid_class_name ) );
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_class_name)
+ );
     copy_to_ptr(t, ws);
 }
 

Modified: branches/proto/v4/boost/archive/xml_archive_exception.hpp
==============================================================================
--- branches/proto/v4/boost/archive/xml_archive_exception.hpp (original)
+++ branches/proto/v4/boost/archive/xml_archive_exception.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -36,6 +36,7 @@
         xml_archive_tag_mismatch,
         xml_archive_tag_name_error
     } exception_code;
+ exception_code code;
     xml_archive_exception(exception_code c)
     {}
     virtual const char *what( ) const throw( )

Modified: branches/proto/v4/boost/asio.hpp
==============================================================================
--- branches/proto/v4/boost/asio.hpp (original)
+++ branches/proto/v4/boost/asio.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -21,6 +21,7 @@
 #include <boost/asio/basic_deadline_timer.hpp>
 #include <boost/asio/basic_io_object.hpp>
 #include <boost/asio/basic_raw_socket.hpp>
+#include <boost/asio/basic_serial_port.hpp>
 #include <boost/asio/basic_socket_acceptor.hpp>
 #include <boost/asio/basic_socket_iostream.hpp>
 #include <boost/asio/basic_socket_streambuf.hpp>
@@ -73,6 +74,9 @@
 #include <boost/asio/raw_socket_service.hpp>
 #include <boost/asio/read.hpp>
 #include <boost/asio/read_until.hpp>
+#include <boost/asio/serial_port.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/serial_port_service.hpp>
 #include <boost/asio/socket_acceptor_service.hpp>
 #include <boost/asio/socket_base.hpp>
 #include <boost/asio/strand.hpp>

Modified: branches/proto/v4/boost/asio/detail/descriptor_ops.hpp
==============================================================================
--- branches/proto/v4/boost/asio/detail/descriptor_ops.hpp (original)
+++ branches/proto/v4/boost/asio/detail/descriptor_ops.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -47,6 +47,12 @@
   return return_value;
 }
 
+inline int open(const char* path, int flags, boost::system::error_code& ec)
+{
+ clear_error(ec);
+ return error_wrapper(::open(path, flags), ec);
+}
+
 inline int close(int d, boost::system::error_code& ec)
 {
   clear_error(ec);
@@ -88,6 +94,18 @@
   return error_wrapper(::ioctl(d, cmd, arg), ec);
 }
 
+inline int fcntl(int d, long cmd, boost::system::error_code& ec)
+{
+ clear_error(ec);
+ return error_wrapper(::fcntl(d, cmd), ec);
+}
+
+inline int fcntl(int d, long cmd, long arg, boost::system::error_code& ec)
+{
+ clear_error(ec);
+ return error_wrapper(::fcntl(d, cmd, arg), ec);
+}
+
 inline int poll_read(int d, boost::system::error_code& ec)
 {
   clear_error(ec);

Modified: branches/proto/v4/boost/asio/detail/reactive_descriptor_service.hpp
==============================================================================
--- branches/proto/v4/boost/asio/detail/reactive_descriptor_service.hpp (original)
+++ branches/proto/v4/boost/asio/detail/reactive_descriptor_service.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -177,7 +177,7 @@
   }
 
   // Get the native descriptor representation.
- native_type native(implementation_type& impl)
+ native_type native(const implementation_type& impl) const
   {
     return impl.descriptor_;
   }

Modified: branches/proto/v4/boost/asio/detail/win_iocp_handle_service.hpp
==============================================================================
--- branches/proto/v4/boost/asio/detail/win_iocp_handle_service.hpp (original)
+++ branches/proto/v4/boost/asio/detail/win_iocp_handle_service.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -155,7 +155,7 @@
 
   // Destroy a handle implementation.
   boost::system::error_code close(implementation_type& impl,
- boost::system::error_code& ec)
+ boost::system::error_code& ec)
   {
     if (is_open(impl))
     {
@@ -176,7 +176,7 @@
   }
 
   // Get the native handle representation.
- native_type native(implementation_type& impl)
+ native_type native(const implementation_type& impl) const
   {
     return impl.handle_;
   }

Modified: branches/proto/v4/boost/config/platform/win32.hpp
==============================================================================
--- branches/proto/v4/boost/config/platform/win32.hpp (original)
+++ branches/proto/v4/boost/config/platform/win32.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -52,10 +52,7 @@
 
 #ifndef BOOST_DISABLE_WIN32
 // WEK: Added
-#ifndef _WIN32_WCE
- // GetSystemTimeAsFileTime not present on WinCE.
-# define BOOST_HAS_FTIME
-#endif
+#define BOOST_HAS_FTIME
 #define BOOST_WINDOWS 1
 
 #endif

Modified: branches/proto/v4/boost/serialization/collection_traits.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/collection_traits.hpp (original)
+++ branches/proto/v4/boost/serialization/collection_traits.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -27,6 +27,7 @@
 #include <boost/mpl/integral_c_tag.hpp>
 
 #include <boost/cstdint.hpp>
+#include <climits> // ULONG_MAX
 #include <boost/serialization/level.hpp>
 
 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(T, C) \
@@ -50,10 +51,17 @@
 // i.e. that its not a synonym for (unsigned) long
 // if there is no 64 bit int or if its the same as a long
 // we shouldn't define separate functions for int64 data types.
-#if defined(BOOST_NO_INT64_T) \
- || (ULONG_MAX != 0xffffffff && ULONG_MAX == 18446744073709551615u) // 2**64 - 1
-# define BOOST_NO_INTRINSIC_INT64_T
-#endif
+#if defined(BOOST_NO_INT64_T)
+ #define BOOST_NO_INTRINSIC_INT64_T
+#else
+ #if defined(ULONG_MAX)
+ #if(ULONG_MAX != 0xffffffff && ULONG_MAX == 18446744073709551615u) // 2**64 - 1
+ #define BOOST_NO_INTRINSIC_INT64_T
+ #endif
+ #else
+ #define BOOST_NO_INTRINSIC_INT64_T
+ #endif
+#endif
 
 #if !defined(BOOST_NO_INTRINSIC_INT64_T)
     #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) \

Modified: branches/proto/v4/boost/serialization/collections_load_imp.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/collections_load_imp.hpp (original)
+++ branches/proto/v4/boost/serialization/collections_load_imp.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -67,7 +67,7 @@
         const unsigned int v
     ){
         typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
- detail::stack_construct<Archive, type>t(ar, v);
+ detail::stack_construct<Archive, type> t(ar, v);
         // borland fails silently w/o full namespace
         ar >> boost::serialization::make_nvp("item", t.reference());
         std::pair<BOOST_DEDUCED_TYPENAME Container::const_iterator, bool> result =

Modified: branches/proto/v4/boost/serialization/config.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/config.hpp (original)
+++ branches/proto/v4/boost/serialization/config.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -69,6 +69,12 @@
     //
     #define BOOST_LIB_NAME boost_serialization
     //
+ // If we're importing code from a dll, then tell auto_link.hpp about it:
+ //
+ #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+ # define BOOST_DYN_LINK
+ #endif
+ //
     // And include the header that does the work:
     //
     #include <boost/config/auto_link.hpp>

Modified: branches/proto/v4/boost/serialization/deque.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/deque.hpp (original)
+++ branches/proto/v4/boost/serialization/deque.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -42,7 +42,7 @@
 inline void load(
     Archive & ar,
     std::deque<U, Allocator> &t,
- const unsigned int file_version
+ const unsigned int /*file_version*/
 ){
     boost::serialization::stl::load_collection<
         Archive,

Modified: branches/proto/v4/boost/serialization/detail/shared_count_132.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/detail/shared_count_132.hpp (original)
+++ branches/proto/v4/boost/serialization/detail/shared_count_132.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -45,10 +45,6 @@
 
 namespace boost_132 {
 
-#if !BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
-using namespace boost;
-#endif
-
 // Debug hooks
 
 #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
@@ -87,19 +83,12 @@
 #endif
 
 namespace detail{
-#if !BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
-using namespace boost::detail;
-#endif
 
 class sp_counted_base
 {
 //private:
 
-#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
     typedef boost::detail::lightweight_mutex mutex_type;
-#else
- typedef detail::lightweight_mutex mutex_type;
-#endif
 
 public:
 
@@ -372,7 +361,11 @@
     // auto_ptr<Y> is special cased to provide the strong guarantee
 
     template<class Y>
- explicit shared_count(std::auto_ptr<Y> & r): pi_(new sp_counted_base_impl< Y *, checked_deleter<Y> >(r.get(), checked_deleter<Y>()))
+ explicit shared_count(std::auto_ptr<Y> & r): pi_(
+ new sp_counted_base_impl<
+ Y *,
+ boost::checked_deleter<Y>
+ >(r.get(), boost::checked_deleter<Y>()))
 #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
         , id_(shared_count_id)
 #endif
@@ -559,6 +552,8 @@
 
 } // namespace boost
 
+BOOST_SERIALIZATION_ASSUME_ABSTRACT(boost_132::detail::sp_counted_base)
+
 #ifdef __BORLANDC__
 # pragma warn .8027 // Functions containing try are not expanded inline
 # pragma warn .8026 // Functions with excep. spec. are not expanded inline

Modified: branches/proto/v4/boost/serialization/detail/shared_ptr_132.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/detail/shared_ptr_132.hpp (original)
+++ branches/proto/v4/boost/serialization/detail/shared_ptr_132.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -118,7 +118,7 @@
     typedef T element_type;
     typedef T value_type;
     typedef T * pointer;
- typedef typename detail::shared_ptr_traits<T>::reference reference;
+ typedef BOOST_DEDUCED_TYPENAME detail::shared_ptr_traits<T>::reference reference;
 
     shared_ptr(): px(0), pn() // never throws in 1.30+
     {

Modified: branches/proto/v4/boost/serialization/export.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/export.hpp (original)
+++ branches/proto/v4/boost/serialization/export.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -33,7 +33,7 @@
     #include <boost/serialization/extended_type_info_typeid.hpp>
 #endif
 #include <boost/serialization/type_info_implementation.hpp>
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 #include <boost/serialization/force_include.hpp>
 #include <boost/serialization/singleton.hpp>
 
@@ -62,14 +62,14 @@
 {
     static const basic_pointer_iserializer &
     enable_load(mpl::true_){
- return boost::serialization::singleton<
+ return /* BOOST_DEDUCED_TYPENAME */ boost::serialization::singleton<
             pointer_iserializer<Archive, Serializable>
>::get_const_instance();
     }
 
     static const basic_pointer_oserializer &
     enable_save(mpl::true_){
- return boost::serialization::singleton<
+ return /* BOOST_DEDUCED_TYPENAME */ boost::serialization::singleton<
             pointer_oserializer<Archive, Serializable>
>::get_const_instance();
     }
@@ -90,7 +90,7 @@
 # elif defined(__INTEL_COMPILER)
     virtual BOOST_DLLEXPORT void instantiate() BOOST_USED;
 # elif defined(__BORLANDC__)
- static void instantiate();
+ static BOOST_DLLEXPORT void instantiate();
     enum { x = sizeof(instantiate(),3) };
 # else
     static void instantiate();
@@ -122,7 +122,7 @@
         instantiate_ptr_serialization((T*)0, 0, adl_tag());
         return *this;
     }
- const guid_initializer & export_guid(char const* key, mpl::true_){
+ const guid_initializer & export_guid(char const* /*key*/, mpl::true_){
         return *this;
     }
     const guid_initializer & export_guid(char const* key){

Modified: branches/proto/v4/boost/serialization/extended_type_info.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/extended_type_info.hpp (original)
+++ branches/proto/v4/boost/serialization/extended_type_info.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -42,12 +42,12 @@
     // included in implementation of sets and maps.
     const unsigned int m_type_info_key;
     virtual bool
- is_less_than(const extended_type_info &rhs) const {
+ is_less_than(const extended_type_info & /*rhs*/) const {
         assert(false);
         return false;
     };
     virtual bool
- is_equal(const extended_type_info &rhs) const {
+ is_equal(const extended_type_info & /*rhs*/) const {
         assert(false);
         return false;
     };
@@ -75,11 +75,11 @@
     }
     static const extended_type_info * find(const char *key);
     // for plugins
- virtual void * construct(unsigned int count = 0, ...) const {
+ virtual void * construct(unsigned int /*count*/ = 0, ...) const {
         assert(false); // must be implemented if used
         return NULL;
     };
- virtual void destroy(void const * const p) const {
+ virtual void destroy(void const * const /*p*/) const {
         assert(false); // must be implemented if used
     }
 };

Deleted: branches/proto/v4/boost/serialization/is_abstract.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/is_abstract.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
+++ (empty file)
@@ -1,57 +0,0 @@
-#ifndef BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP
-#define BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// is_abstract_class.hpp:
-
-// (C) Copyright 2008 Robert Ramey
-// 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 http://www.boost.org for updates, documentation, and revision history.
-
-// this is useful for compilers which don't support the boost::is_abstract
-
-#include <boost/type_traits/is_abstract.hpp>
-
-#ifndef BOOST_NO_IS_ABSTRACT
-
-// if there is an intrinsic is_abstract defined, we don't have to do anything
-#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)
-
-// but forward to the "official" is_abstract
-namespace boost {
-namespace serialization {
- template<class T>
- struct is_abstract : boost::is_abstract<T> {} ;
-} // namespace serialization
-} // namespace boost
-
-#else
-// we have to "make" one
-
-namespace boost {
-namespace serialization {
- template<class T>
- struct is_abstract : boost::false_type {};
-} // namespace serialization
-} // namespace boost
-
-// define a macro to make explicit designation of this more transparent
-#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T) \
-namespace boost { \
-namespace serialization { \
-template<> \
-struct is_abstract<const T > : boost::true_type {}; \
-}} \
-/**/
-
-#endif // BOOST_NO_IS_ABSTRACT
-
-#endif //BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP

Modified: branches/proto/v4/boost/serialization/shared_ptr_132.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/shared_ptr_132.hpp (original)
+++ branches/proto/v4/boost/serialization/shared_ptr_132.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -24,16 +24,14 @@
 
 #include <list>
 
-#include <boost/serialization/detail/shared_ptr_132.hpp>
-
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 #include <boost/serialization/split_free.hpp>
 #include <boost/serialization/nvp.hpp>
 #include <boost/serialization/tracking.hpp>
 #include <boost/serialization/void_cast.hpp>
 
 // mark base class as an (uncreatable) base class
-BOOST_SERIALIZATION_ASSUME_ABSTRACT(boost_132::detail::sp_counted_base)
+#include <boost/serialization/detail/shared_ptr_132.hpp>
 
 /////////////////////////////////////////////////////////////
 // Maintain a couple of lists of loaded shared pointers of the old previous
@@ -77,8 +75,9 @@
 template<class Archive, class P, class D>
 inline void save_construct_data(
     Archive & ar,
- const boost_132::detail::sp_counted_base_impl<P, D> *t,
- const unsigned int /* file_version */
+ const
+ boost_132::detail::sp_counted_base_impl<P, D> *t,
+ const BOOST_PFTO unsigned int /* file_version */
 ){
     // variables used for construction
     ar << boost::serialization::make_nvp("ptr", t->ptr);

Modified: branches/proto/v4/boost/serialization/valarray.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/valarray.hpp (original)
+++ branches/proto/v4/boost/serialization/valarray.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -37,7 +37,7 @@
 // valarray<T>
 
 template<class Archive, class U>
-void save( Archive & ar, const STD::valarray<U> &t, const unsigned int file_version )
+void save( Archive & ar, const STD::valarray<U> &t, const unsigned int /*file_version*/ )
 {
   const collection_size_type count(t.size());
   ar << BOOST_SERIALIZATION_NVP(count);
@@ -47,7 +47,7 @@
 
 
 template<class Archive, class U>
-void load( Archive & ar, STD::valarray<U> &t, const unsigned int file_version )
+void load( Archive & ar, STD::valarray<U> &t, const unsigned int /*file_version*/ )
 {
   collection_size_type count;
   ar >> BOOST_SERIALIZATION_NVP(count);

Modified: branches/proto/v4/boost/serialization/variant.hpp
==============================================================================
--- branches/proto/v4/boost/serialization/variant.hpp (original)
+++ branches/proto/v4/boost/serialization/variant.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -63,7 +63,7 @@
 void save(
     Archive & ar,
     boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const & v,
- unsigned int version
+ unsigned int /*version*/
 ){
     int which = v.which();
     ar << BOOST_SERIALIZATION_NVP(which);
@@ -78,10 +78,10 @@
     struct load_null {
         template<class Archive, class V>
         static void invoke(
- Archive & ar,
- int which,
- V & v,
- unsigned int version
+ Archive & /*ar*/,
+ int /*which*/,
+ V & /*v*/,
+ unsigned int /*version*/
         ){}
     };
 

Modified: branches/proto/v4/boost/static_warning.hpp
==============================================================================
--- branches/proto/v4/boost/static_warning.hpp (original)
+++ branches/proto/v4/boost/static_warning.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -76,7 +76,8 @@
 # endif
 
 //------------------Configure-------------------------------------------------//
-# if defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)
+# if defined(BOOST_INTEL)
+# elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)
 # define BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING
 # elif defined(__PGI)
 # define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
@@ -89,6 +90,8 @@
 # elif defined(BOOST_MSVC) // && (BOOST_MSVC < 1300)
 # define BOOST_NO_PREDEFINED_LINE_MACRO
 # pragma warning(disable:4094) // C4094: untagged 'struct' declared no symbols
+# else
+# define BOOST_HAS_DESCRIPTIVE_INCOMPLETE_TYPE_WARNING
 #endif
 
 //------------------Helper templates------------------------------------------//
@@ -166,13 +169,15 @@
         }; \
      } \
      /**/
-#else // Deletion of pointer to incomplete type.
-# define BOOST_STATIC_WARNING_IMPL(B) \
+#elif defined(BOOST_HAS_DESCRIPTIVE_INCOMPLETE_TYPE_WARNING)
+# define BOOST_STATIC_WARNING_IMPL(B) \
      struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
          ::boost::static_warning_impl<(bool)( B )>::type* p; \
          void f() { delete p; } \
      } \
      /**/
+#else // not defined for this compiler
+# define BOOST_STATIC_WARNING_IMPL(B)
 #endif
 
 #ifndef BOOST_DISABLE_STATIC_WARNINGS

Modified: branches/proto/v4/boost/test/impl/execution_monitor.ipp
==============================================================================
--- branches/proto/v4/boost/test/impl/execution_monitor.ipp (original)
+++ branches/proto/v4/boost/test/impl/execution_monitor.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -667,7 +667,7 @@
         ::alarm( 0 );
 
 #ifdef BOOST_TEST_USE_ALT_STACK
- stack_t sigstk;
+ stack_t sigstk = {};
 
     sigstk.ss_flags = SS_DISABLE;
     BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 );

Modified: branches/proto/v4/boost/test/test_tools.hpp
==============================================================================
--- branches/proto/v4/boost/test/test_tools.hpp (original)
+++ branches/proto/v4/boost/test/test_tools.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -299,7 +299,7 @@
 
 typedef unit_test::const_string const_string;
 
-namespace { bool dummy_cond = false; }
+namespace { bool const dummy_cond = false; }
 
 namespace tt_detail {
 

Modified: branches/proto/v4/boost/thread/detail/thread.hpp
==============================================================================
--- branches/proto/v4/boost/thread/detail/thread.hpp (original)
+++ branches/proto/v4/boost/thread/detail/thread.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -20,6 +20,8 @@
 #include <boost/bind.hpp>
 #include <stdlib.h>
 #include <memory>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 
 #include <boost/config/abi_prefix.hpp>
 
@@ -121,7 +123,11 @@
         template<typename F>
         static inline detail::thread_data_ptr make_thread_info(F&& f)
         {
- return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(static_cast<F&&>(f)));
+ return detail::thread_data_ptr(detail::heap_new<detail::thread_data<typename boost::remove_reference<F>::type> >(static_cast<F&&>(f)));
+ }
+ static inline detail::thread_data_ptr make_thread_info(void (*f)())
+ {
+ return detail::thread_data_ptr(detail::heap_new<detail::thread_data<void(*)()> >(f));
         }
 #else
         template<typename F>
@@ -134,6 +140,8 @@
         {
             return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(f));
         }
+
+ struct dummy;
 #endif
     public:
         thread();
@@ -166,12 +174,12 @@
         
 #else
         template <class F>
- explicit thread(F f):
+ explicit thread(F f,typename disable_if<boost::is_convertible<F&,detail::thread_move_t<F> >, dummy* >::type=0):
             thread_info(make_thread_info(f))
         {
             start_thread();
         }
-
+
         template <class F>
         thread(detail::thread_move_t<F> f):
             thread_info(make_thread_info(f))

Modified: branches/proto/v4/boost/thread/locks.hpp
==============================================================================
--- branches/proto/v4/boost/thread/locks.hpp (original)
+++ branches/proto/v4/boost/thread/locks.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -276,6 +276,12 @@
     };
 
     template<typename Mutex>
+ void swap(unique_lock<Mutex>& lhs,unique_lock<Mutex>& rhs)
+ {
+ lhs.swap(rhs);
+ }
+
+ template<typename Mutex>
     class shared_lock
     {
     protected:
@@ -723,6 +729,12 @@
                 return static_cast<base const&>(*this);
             }
         };
+
+ template<typename Mutex>
+ void swap(try_lock_wrapper<Mutex>& lhs,try_lock_wrapper<Mutex>& rhs)
+ {
+ lhs.swap(rhs);
+ }
         
         template<typename MutexType1,typename MutexType2>
         unsigned try_lock_internal(MutexType1& m1,MutexType2& m2)

Deleted: branches/proto/v4/boost/thread/pthread/tss.hpp
==============================================================================
--- branches/proto/v4/boost/thread/pthread/tss.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
+++ (empty file)
@@ -1,107 +0,0 @@
-#ifndef BOOST_THREAD_PTHREAD_TSS_HPP
-#define BOOST_THREAD_PTHREAD_TSS_HPP
-
-// 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)
-// (C) Copyright 2007-8 Anthony Williams
-
-#include <boost/thread/detail/config.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <boost/config/abi_prefix.hpp>
-
-namespace boost
-{
- namespace detail
- {
- struct tss_cleanup_function
- {
- virtual ~tss_cleanup_function()
- {}
-
- virtual void operator()(void* data)=0;
- };
-
- BOOST_THREAD_DECL void set_tss_data(void const* key,boost::shared_ptr<tss_cleanup_function> func,void* tss_data,bool cleanup_existing);
- BOOST_THREAD_DECL void* get_tss_data(void const* key);
- }
-
- template <typename T>
- class thread_specific_ptr
- {
- private:
- thread_specific_ptr(thread_specific_ptr&);
- thread_specific_ptr& operator=(thread_specific_ptr&);
-
- struct delete_data:
- detail::tss_cleanup_function
- {
- void operator()(void* data)
- {
- delete static_cast<T*>(data);
- }
- };
-
- struct run_custom_cleanup_function:
- detail::tss_cleanup_function
- {
- void (*cleanup_function)(T*);
-
- explicit run_custom_cleanup_function(void (*cleanup_function_)(T*)):
- cleanup_function(cleanup_function_)
- {}
-
- void operator()(void* data)
- {
- cleanup_function(static_cast<T*>(data));
- }
- };
-
-
- boost::shared_ptr<detail::tss_cleanup_function> cleanup;
-
- public:
- thread_specific_ptr():
- cleanup(new delete_data)
- {}
- explicit thread_specific_ptr(void (*func_)(T*)):
- cleanup(new run_custom_cleanup_function(func_))
- {}
- ~thread_specific_ptr()
- {
- reset();
- }
-
- T* get() const
- {
- return static_cast<T*>(detail::get_tss_data(this));
- }
- T* operator->() const
- {
- return get();
- }
- T& operator*() const
- {
- return *get();
- }
- T* release()
- {
- T* const temp=get();
- detail::set_tss_data(this,boost::shared_ptr<detail::tss_cleanup_function>(),0,false);
- return temp;
- }
- void reset(T* new_value=0)
- {
- T* const current_value=get();
- if(current_value!=new_value)
- {
- detail::set_tss_data(this,cleanup,new_value,true);
- }
- }
- };
-}
-
-#include <boost/config/abi_suffix.hpp>
-
-#endif

Modified: branches/proto/v4/boost/thread/win32/thread_primitives.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/thread_primitives.hpp (original)
+++ branches/proto/v4/boost/thread/win32/thread_primitives.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -281,8 +281,7 @@
     }
 }
 
-#if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)
-#if _MSC_VER>=1400
+#if defined(BOOST_MSVC) && (_MSC_VER>=1400) && !defined(UNDER_CE)
 #if _MSC_VER==1400
 extern "C" unsigned char _interlockedbittestandset(long *a,long b);
 extern "C" unsigned char _interlockedbittestandreset(long *a,long b);
@@ -314,7 +313,7 @@
     }
 }
 #define BOOST_THREAD_BTS_DEFINED
-#elif defined(_M_IX86)
+#elif (defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)) && defined(_M_IX86)
 namespace boost
 {
     namespace detail
@@ -346,7 +345,6 @@
 }
 #define BOOST_THREAD_BTS_DEFINED
 #endif
-#endif
 
 #ifndef BOOST_THREAD_BTS_DEFINED
 

Deleted: branches/proto/v4/boost/thread/win32/tss.hpp
==============================================================================
--- branches/proto/v4/boost/thread/win32/tss.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
+++ (empty file)
@@ -1,106 +0,0 @@
-#ifndef BOOST_THREAD_WIN32_TSS_HPP
-#define BOOST_THREAD_WIN32_TSS_HPP
-// 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)
-// (C) Copyright 2007-8 Anthony Williams
-
-#include <boost/shared_ptr.hpp>
-#include "thread_heap_alloc.hpp"
-
-#include <boost/config/abi_prefix.hpp>
-
-namespace boost
-{
- namespace detail
- {
- struct tss_cleanup_function
- {
- virtual ~tss_cleanup_function()
- {}
-
- virtual void operator()(void* data)=0;
- };
-
- BOOST_THREAD_DECL void set_tss_data(void const* key,boost::shared_ptr<tss_cleanup_function> func,void* tss_data,bool cleanup_existing);
- BOOST_THREAD_DECL void* get_tss_data(void const* key);
- }
-
- template <typename T>
- class thread_specific_ptr
- {
- private:
- thread_specific_ptr(thread_specific_ptr&);
- thread_specific_ptr& operator=(thread_specific_ptr&);
-
- struct delete_data:
- detail::tss_cleanup_function
- {
- void operator()(void* data)
- {
- delete static_cast<T*>(data);
- }
- };
-
- struct run_custom_cleanup_function:
- detail::tss_cleanup_function
- {
- void (*cleanup_function)(T*);
-
- explicit run_custom_cleanup_function(void (*cleanup_function_)(T*)):
- cleanup_function(cleanup_function_)
- {}
-
- void operator()(void* data)
- {
- cleanup_function(static_cast<T*>(data));
- }
- };
-
-
- boost::shared_ptr<detail::tss_cleanup_function> cleanup;
-
- public:
- thread_specific_ptr():
- cleanup(detail::heap_new<delete_data>(),detail::do_heap_delete<delete_data>())
- {}
- explicit thread_specific_ptr(void (*func_)(T*)):
- cleanup(detail::heap_new<run_custom_cleanup_function>(func_),detail::do_heap_delete<run_custom_cleanup_function>())
- {}
- ~thread_specific_ptr()
- {
- reset();
- }
-
- T* get() const
- {
- return static_cast<T*>(detail::get_tss_data(this));
- }
- T* operator->() const
- {
- return get();
- }
- T& operator*() const
- {
- return *get();
- }
- T* release()
- {
- T* const temp=get();
- detail::set_tss_data(this,boost::shared_ptr<detail::tss_cleanup_function>(),0,false);
- return temp;
- }
- void reset(T* new_value=0)
- {
- T* const current_value=get();
- if(current_value!=new_value)
- {
- detail::set_tss_data(this,cleanup,new_value,true);
- }
- }
- };
-}
-
-#include <boost/config/abi_suffix.hpp>
-
-#endif

Modified: branches/proto/v4/libs/regex/src/posix_api.cpp
==============================================================================
--- branches/proto/v4/libs/regex/src/posix_api.cpp (original)
+++ branches/proto/v4/libs/regex/src/posix_api.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -62,6 +62,8 @@
 };
 } // namespace
 
+typedef boost::basic_regex<char, c_regex_traits<char> > c_regex_type;
+
 BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA* expression, const char* ptr, int f)
 {
    if(expression->re_magic != magic_value)
@@ -70,7 +72,7 @@
 #ifndef BOOST_NO_EXCEPTIONS
       try{
 #endif
- expression->guts = new regex();
+ expression->guts = new c_regex_type();
 #ifndef BOOST_NO_EXCEPTIONS
       } catch(...)
       {
@@ -120,9 +122,9 @@
    try{
 #endif
       expression->re_magic = magic_value;
- static_cast<regex*>(expression->guts)->set_expression(ptr, p2, flags);
- expression->re_nsub = static_cast<regex*>(expression->guts)->mark_count() - 1;
- result = static_cast<regex*>(expression->guts)->error_code();
+ static_cast<c_regex_type*>(expression->guts)->set_expression(ptr, p2, flags);
+ expression->re_nsub = static_cast<c_regex_type*>(expression->guts)->mark_count() - 1;
+ result = static_cast<c_regex_type*>(expression->guts)->error_code();
 #ifndef BOOST_NO_EXCEPTIONS
    }
    catch(const boost::regex_error& be)
@@ -187,7 +189,7 @@
    {
       std::string p;
       if((e) && (e->re_magic == magic_value))
- p = static_cast<regex*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
+ p = static_cast<c_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
       else
       {
          p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
@@ -236,7 +238,7 @@
 #endif
    if(expression->re_magic == magic_value)
    {
- result = regex_search(start, end, m, *static_cast<regex*>(expression->guts), flags);
+ result = regex_search(start, end, m, *static_cast<c_regex_type*>(expression->guts), flags);
    }
    else
       return result;
@@ -274,7 +276,7 @@
 {
    if(expression->re_magic == magic_value)
    {
- delete static_cast<regex*>(expression->guts);
+ delete static_cast<c_regex_type*>(expression->guts);
    }
    expression->re_magic = 0;
 }

Modified: branches/proto/v4/libs/regex/src/wide_posix_api.cpp
==============================================================================
--- branches/proto/v4/libs/regex/src/wide_posix_api.cpp (original)
+++ branches/proto/v4/libs/regex/src/wide_posix_api.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -69,6 +69,8 @@
 };
 }
 
+typedef boost::basic_regex<wchar_t, c_regex_traits<wchar_t> > c_regex_type;
+
 BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW* expression, const wchar_t* ptr, int f)
 {
    if(expression->re_magic != wmagic_value)
@@ -77,7 +79,7 @@
 #ifndef BOOST_NO_EXCEPTIONS
       try{
 #endif
- expression->guts = new wregex();
+ expression->guts = new c_regex_type();
 #ifndef BOOST_NO_EXCEPTIONS
       } catch(...)
       {
@@ -127,9 +129,9 @@
    try{
 #endif
       expression->re_magic = wmagic_value;
- static_cast<wregex*>(expression->guts)->set_expression(ptr, p2, flags);
- expression->re_nsub = static_cast<wregex*>(expression->guts)->mark_count() - 1;
- result = static_cast<wregex*>(expression->guts)->error_code();
+ static_cast<c_regex_type*>(expression->guts)->set_expression(ptr, p2, flags);
+ expression->re_nsub = static_cast<c_regex_type*>(expression->guts)->mark_count() - 1;
+ result = static_cast<c_regex_type*>(expression->guts)->error_code();
 #ifndef BOOST_NO_EXCEPTIONS
    }
    catch(const boost::regex_error& be)
@@ -208,7 +210,7 @@
    {
       std::string p;
       if((e) && (e->re_magic == wmagic_value))
- p = static_cast<wregex*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
+ p = static_cast<c_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
       else
       {
          p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
@@ -257,7 +259,7 @@
 #endif
    if(expression->re_magic == wmagic_value)
    {
- result = regex_search(start, end, m, *static_cast<wregex*>(expression->guts), flags);
+ result = regex_search(start, end, m, *static_cast<c_regex_type*>(expression->guts), flags);
    }
    else
       return result;
@@ -294,7 +296,7 @@
 {
    if(expression->re_magic == wmagic_value)
    {
- delete static_cast<wregex*>(expression->guts);
+ delete static_cast<c_regex_type*>(expression->guts);
    }
    expression->re_magic = 0;
 }

Modified: branches/proto/v4/libs/serialization/doc/archives.html
==============================================================================
--- branches/proto/v4/libs/serialization/doc/archives.html (original)
+++ branches/proto/v4/libs/serialization/doc/archives.html 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -41,14 +41,14 @@
 <h4><a name="saving_interface">Saving Archive Concept</a></h4>
 <h4>Associated Types</h4>
 Intuitively, a type modeling this concept will generate a sequence of bytes
-correpsonding to an arbitrary set of C++ data structures. Each type modeling the
+corresponding to an arbitrary set of C++ data structures. Each type modeling the
 Saving Archive concept (SA) may be associated with another type modeling the
 <a href="#loading_interface">Loading Archive Concept</a>(LA).
 This associated type will perform the inverse operation.
 That is, given a sequence of bytes generated by SA, it will generate a set of
-C++ data structures the is equivalent to the original.
+C++ data structures that is equivalent to the original.
 The notion of equivalence is defined by the implementations of the pair of archives and the
-way the data is are rendered serializable.
+way the data are rendered serializable.
 <p>
 <h4>Valid Expressions</h4>
 <dl>
@@ -190,8 +190,8 @@
     moved to address v.
     <p>
     When an object is loaded to a temporary variable and later moved to another location,
- This function must be called in order communicate this fact. This is permits the
- the archive to properly implement object tracking. Object tracking is required in order
+ this function must be called in order communicate this fact. This permits the
+ archive to properly implement object tracking. Object tracking is required in order
     to correctly implement serialization of pointers to instances of derived classes.
   </dd>
   <dt><h4><code>
@@ -215,7 +215,7 @@
 
 <p>
 The existence of the <code style="white-space: normal">&lt;&lt;</code>
-and <code style="white-space: normal">&gt;&gt;</code> suggest
+and <code style="white-space: normal">&gt;&gt;</code> suggests
 a relationship between archives and C++ i/o streams. <strong>Archives are not
 C++ i/o streams</strong>. All the archives included with this system take a stream
 as an argument in the constructor and that stream is used for output or input.
@@ -224,7 +224,7 @@
 found it useful to base their implementation on streams.
 
 <h3><a name="archive_models">Archive Models</a></h3>
-This library includes a various implementation of the Archive concept.
+This library includes various implementations of the Archive concept.
 
 An archive is defined by two complementary classes. One is for saving data while
 the other is for loading it.
@@ -307,7 +307,7 @@
 text_oarchive(std::ostream & os, unsigned int flags = 0);
 </code></h4></dt>
 <dd>
-Contructs an archive given an open <code style="white-space: normal">stream</code> as
+Constructs an archive given an open <code style="white-space: normal">stream</code> as
 an argument and optional flags. For most applications there will be no need to use flags.
 Flags are defined by <code style="white-space: normal">enum archive_flags</code> enumerator.
 Multiple flags can be combined with the <code style="white-space: normal">|</code> operator.
@@ -339,7 +339,7 @@
 <dd>
 Destructor for an archive. This should be called before the stream is
 closed. It restores any altered stream facets to their state before the
-the archive was opened.
+archive was opened.
 </dd>
 
 </dl>
@@ -402,12 +402,12 @@
 
 <h3><a name="exceptions">Exceptions</h3>
 All of the archive classes included may throw exceptions. The list of exceptions that might
-be throw can be found in section <a target="detail" href="exceptions.html">Archive Exceptions</a>
+be thrown can be found in section <a target="detail" href="exceptions.html">Archive Exceptions</a>
 of this documentation.
 
 <h3><a name="charactersets">Character Sets</h3>
 This library includes two archive classes for XML. The wide character
-version (<code style="white-space: normal">xml_w?archive</code>) renders it output as UTF-8 which can
+version (<code style="white-space: normal">xml_w?archive</code>) renders its output as UTF-8 which can
 handle any wide character without loss of information.
 <code style="white-space: normal">std::string</code> data is converted from multi-byte format to wide
 character format using the current <code style="white-space: normal">

Modified: branches/proto/v4/libs/serialization/doc/contents.html
==============================================================================
--- branches/proto/v4/libs/serialization/doc/contents.html (original)
+++ branches/proto/v4/libs/serialization/doc/contents.html 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,4 +1,4 @@
-<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <!--
 (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
@@ -301,6 +301,23 @@
       <dt><img style="display:none" src="dot.gif"><a target="detail" href="rationale.html#typeid"><code style="white-space: normal">typeid</code> information is not included in archives</a></dt>
       <dt><img style="display:none" src="dot.gif"><a target="detail" href="rationale.html#trap">Compile time trap when saving a non-const value</a></dt>
     </dl></div></dd>
+
+ <dt><img style="display:none" src="plus.gif" id="todo"><a target="detail" href="todo.html">To Do</a></dt>
+ <dd><div id="todo_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#portablebinaryarchive">Portable Binary Archive</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#performancetesting">Performance Testing and Profiling</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#backversioning">Back Versioning</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="todo.html#nortti">Environments without RTTI</a></dt>
+
+ <dt><img style="display:none" src="plus.gif" id="newcasestudies"><a target="detail" href="new_case_studies.html">Proposed Case Studies</a></dt>
+ <dd><div id="newcasestudies_detail"><dl class="page-index">
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#functionobject">Serializing a Function Object</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#archiveadaptor">Archive Adaptors</a></dt>
+ <dt><img style="display:none" src="dot.gif"><a target="detail" href="new_case_studies.html#archivehelper">Archive Helpers</a></dt>
+ </dl></div></dd>
+
+ </dl></div></dd>
+
     <dt><img style="display:none" src="dot.gif"><a target="detail" href="history.html">History</a>
     <!--
     <dt><img style="display:none" src="dot.gif"><a target="detail" href="definitions.html">Definitions</a></dt>

Modified: branches/proto/v4/libs/serialization/doc/release.html
==============================================================================
--- branches/proto/v4/libs/serialization/doc/release.html (original)
+++ branches/proto/v4/libs/serialization/doc/release.html 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,4 +1,4 @@
-<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <!--
 (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
@@ -120,18 +120,18 @@
 
 <h2><a name="todo"></a>Pending issues</h2>
 <ul>
- <li>Compile, and test on more platforms
     <li>currently can't serialize through a pointer an object a of class
     that implements its own <code style="white-space: normal">new/delete</code> operators.
     <li>Its possible that <code style="white-space: normal">std::string</code>
     and <code style="white-space: normal">std::wstring</code> contain characters such as
- '\0' which cannot be rendered in XML without an escape mechanism. Currently there is
- no such escape mechanism implemented.
+ '\0' and -1 (EOF) which cannot be rendered in text and XML archives without an escape mechanism.
+ Currently there is no such escape mechanism implemented.
     <li>A subtle error in the implementation of serializaton of <code style="white-space: normal">std::map</code>
     is fixed in this version. Unfortunately, the fix breaks serialization of
     <code style="white-space: normal">std::map</code> for those compilers which do not support
     partial template specialization.
-</ul>
+ <li>Without taking special precautions, racking fails for types placed in a <code style="white-space: normal">std::map</code>.
+ </ul>
 <p>
 Aside from the above, there are a number of issues related to specific platforms.
 These are listed in Specific Compiler/Library Issues.

Modified: branches/proto/v4/libs/serialization/doc/serialization.html
==============================================================================
--- branches/proto/v4/libs/serialization/doc/serialization.html (original)
+++ branches/proto/v4/libs/serialization/doc/serialization.html 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -794,8 +794,8 @@
         boost::serialization::base_object&lt;base&gt;(*this);
         // method 2 : explicitly register base/derived relationship
         boost::serialization::void_cast_register&lt;derived, base&gt;(
- static_cast&lt;base *&gt;(NULL),
- static_cast&lt;derived *&gt;(NULL)
+ static_cast&lt;derived *&gt;(NULL),
+ static_cast&lt;base *&gt;(NULL)
         )
     }
 };

Modified: branches/proto/v4/libs/serialization/example/demo.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/example/demo.cpp (original)
+++ branches/proto/v4/libs/serialization/example/demo.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -20,7 +20,7 @@
 #include <boost/serialization/base_object.hpp>
 #include <boost/serialization/utility.hpp>
 #include <boost/serialization/list.hpp>
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 
 /////////////////////////////////////////////////////////////
 // The intent of this program is to serve as a tutorial for

Modified: branches/proto/v4/libs/serialization/example/demo_dll_a.hpp
==============================================================================
--- branches/proto/v4/libs/serialization/example/demo_dll_a.hpp (original)
+++ branches/proto/v4/libs/serialization/example/demo_dll_a.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -143,7 +143,7 @@
         unsigned int i = std::rand() % 27;
         if(0 == i)
             break;
- x += static_cast<typename S::value_type>('a' - 1 + i);
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
     }
 }
 

Modified: branches/proto/v4/libs/serialization/example/demo_dll_a.ipp
==============================================================================
--- branches/proto/v4/libs/serialization/example/demo_dll_a.ipp (original)
+++ branches/proto/v4/libs/serialization/example/demo_dll_a.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -143,7 +143,7 @@
         unsigned int i = std::rand() % 27;
         if(0 == i)
             break;
- x += static_cast<typename S::value_type>('a' - 1 + i);
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
     }
 }
 

Modified: branches/proto/v4/libs/serialization/example/portable_binary_oarchive.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/example/portable_binary_oarchive.cpp (original)
+++ branches/proto/v4/libs/serialization/example/portable_binary_oarchive.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -47,7 +47,7 @@
     char * cptr = reinterpret_cast<char *>(& ll);
     #ifdef BOOST_BIG_ENDIAN
         cptr += (sizeof(boost::intmax_t) - size);
- if(m_flags & endian_big)
+ if(m_flags & endian_little)
             reverse_bytes(size, cptr);
     #else
         if(m_flags & endian_big)

Modified: branches/proto/v4/libs/serialization/src/basic_iarchive.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/src/basic_iarchive.cpp (original)
+++ branches/proto/v4/libs/serialization/src/basic_iarchive.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -225,9 +225,10 @@
     const void *old_address
 ){
     object_id_type i;
+ i = moveable_objects_recent;
     // this code handles a couple of situations.
     // a) where reset_object_address is applied to an untracked object.
- // In such a case the call is really superfluous and its really an
+ // In such a case the call is really superfluous and it,s really an
     // an error. But we don't have access to the types here so we can't
     // know that. However, this code will effectively turn this situation
     // into a no-op and every thing will work fine - albeat with a small
@@ -237,28 +238,30 @@
     // but the code may work anyway. Naturally, a bad practice on the part
     // of the programmer but we can't detect it - as above. So maybe we
     // can save a few more people from themselves as above.
- for(i = moveable_objects_recent; i < moveable_objects_end; ++i){
+ //
+ // note: this scheme fails when an untracked object contains a tracked object!!!
+ for(; i < moveable_objects_end; ++i){
         if(old_address == object_id_vector[i].address)
             break;
     }
     for(; i < moveable_objects_end; ++i){
-
+ aobject o = this->object_id_vector[i];
         // calculate displacement from this level
         // warning - pointer arithmetic on void * is in herently non-portable
         // but expected to work on all platforms in current usage
- if(object_id_vector[i].address > old_address){
+ if(o.address > old_address){
             std::size_t member_displacement
- = reinterpret_cast<std::size_t>(object_id_vector[i].address)
+ = reinterpret_cast<std::size_t>(o.address)
                 - reinterpret_cast<std::size_t>(old_address);
- object_id_vector[i].address = reinterpret_cast<void *>(
+ o.address = reinterpret_cast<void *>(
                 reinterpret_cast<std::size_t>(new_address) + member_displacement
             );
         }
         else{
             std::size_t member_displacement
                 = reinterpret_cast<std::size_t>(old_address)
- - reinterpret_cast<std::size_t>(object_id_vector[i].address);
- object_id_vector[i].address = reinterpret_cast<void *>(
+ - reinterpret_cast<std::size_t>(o.address);
+ o.address = reinterpret_cast<void *>(
                 reinterpret_cast<std::size_t>(new_address) - member_displacement
             );
        }

Modified: branches/proto/v4/libs/serialization/src/basic_xml_grammar.ipp
==============================================================================
--- branches/proto/v4/libs/serialization/src/basic_xml_grammar.ipp (original)
+++ branches/proto/v4/libs/serialization/src/basic_xml_grammar.ipp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -129,7 +129,7 @@
 struct append_char {
     String & contents;
     void operator()(const unsigned int char_value) const {
- const typename String::value_type z = char_value;
+ const BOOST_DEDUCED_TYPENAME String::value_type z = char_value;
         contents += z;
     }
     append_char(String & contents_)
@@ -142,7 +142,7 @@
     String & contents;
     template<class X, class Y>
     void operator()(const X & /*x*/, const Y & /*y*/) const {
- const typename String::value_type z = c;
+ const BOOST_DEDUCED_TYPENAME String::value_type z = c;
         contents += z;
     }
     append_lit(String & contents_)

Modified: branches/proto/v4/libs/serialization/src/codecvt_null.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/src/codecvt_null.cpp (original)
+++ branches/proto/v4/libs/serialization/src/codecvt_null.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -19,7 +19,7 @@
 
 BOOST_WARCHIVE_DECL(std::codecvt_base::result)
 codecvt_null<wchar_t>::do_out(
- std::mbstate_t & state,
+ std::mbstate_t & /*state*/,
     const wchar_t * first1,
     const wchar_t * last1,
     const wchar_t * & next1,

Modified: branches/proto/v4/libs/serialization/test/A.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/A.cpp (original)
+++ branches/proto/v4/libs/serialization/test/A.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -37,7 +37,7 @@
         unsigned int i = std::rand() % 27;
         if(0 == i)
             break;
- x += static_cast<typename S::value_type>('a' - 1 + i);
+ x += static_cast<BOOST_DEDUCED_TYPENAME S::value_type>('a' - 1 + i);
     }
 }
 

Modified: branches/proto/v4/libs/serialization/test/A.hpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/A.hpp (original)
+++ branches/proto/v4/libs/serialization/test/A.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -17,7 +17,6 @@
 // See http://www.boost.org for updates, documentation, and revision history.
 
 #include <cstddef> // size_t
-#include <string>
 #include <ostream> // for friend output operators
 
 #include <boost/config.hpp>

Modified: branches/proto/v4/libs/serialization/test/base.hpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/base.hpp (original)
+++ branches/proto/v4/libs/serialization/test/base.hpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -17,7 +17,7 @@
 // See http://www.boost.org for updates, documentation, and revision history.
 
 #include <boost/serialization/access.hpp>
-#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/assume_abstract.hpp>
 
 #ifndef DLL_DECL
 #define DLL_DECL

Modified: branches/proto/v4/libs/serialization/test/test_delete_pointer.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/test_delete_pointer.cpp (original)
+++ branches/proto/v4/libs/serialization/test/test_delete_pointer.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -19,6 +19,7 @@
 
 #include "test_tools.hpp"
 #include <boost/detail/no_exceptions_support.hpp>
+#include <boost/throw_exception.hpp>
 
 #include <boost/serialization/nvp.hpp>
 #include <boost/serialization/split_member.hpp>
@@ -38,14 +39,11 @@
     void load(Archive & ar, const unsigned int /* file_version */)
     {
         static int i = 0;
- ++i;
- bool b = false;
- if(i == 2)
- b = true;
-
         ar >> BOOST_SERIALIZATION_NVP(next_);
- if(b)
- boost::throw_exception(0);
+ if(++i == 3)
+ boost::throw_exception(boost::archive::archive_exception(
+ boost::archive::archive_exception::no_exception
+ ));
     }
     BOOST_SERIALIZATION_SPLIT_MEMBER()
 public:
@@ -128,4 +126,3 @@
     return EXIT_SUCCESS;
 }
 
-

Modified: branches/proto/v4/libs/serialization/test/test_no_rtti.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/test_no_rtti.cpp (original)
+++ branches/proto/v4/libs/serialization/test/test_no_rtti.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -50,6 +50,7 @@
 };
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(polymorphic_base)
+
 BOOST_CLASS_TYPE_INFO(
     polymorphic_base,
     extended_type_info_no_rtti<polymorphic_base>

Modified: branches/proto/v4/libs/serialization/test/test_non_default_ctor.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/test_non_default_ctor.cpp (original)
+++ branches/proto/v4/libs/serialization/test/test_non_default_ctor.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -123,7 +123,7 @@
 inline void save_construct_data(
     Archive & ar,
     const A * a,
- const unsigned int /* file_version */
+ const BOOST_PFTO unsigned int /* file_version */
 ){
     // variable used for construction
     ar << boost::serialization::make_nvp("i", a->get_i());

Modified: branches/proto/v4/libs/serialization/test/test_non_default_ctor2.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/test_non_default_ctor2.cpp (original)
+++ branches/proto/v4/libs/serialization/test/test_non_default_ctor2.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -96,8 +96,11 @@
 namespace serialization {
 
 template <class ArchiveT>
-void save_construct_data(ArchiveT& archive, const A* p, unsigned int version)
-{
+void save_construct_data(
+ ArchiveT& archive,
+ const A* p,
+ const BOOST_PFTO unsigned int version
+){
     archive & boost::serialization::make_nvp("initialValue", p->value);
 }
 

Modified: branches/proto/v4/libs/serialization/test/test_static_warning.cpp
==============================================================================
--- branches/proto/v4/libs/serialization/test/test_static_warning.cpp (original)
+++ branches/proto/v4/libs/serialization/test/test_static_warning.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -62,3 +62,4 @@
     BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
     return 0;
 }
+

Modified: branches/proto/v4/libs/thread/test/test_lock_concept.cpp
==============================================================================
--- branches/proto/v4/libs/thread/test/test_lock_concept.cpp (original)
+++ branches/proto/v4/libs/thread/test/test_lock_concept.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,4 +1,4 @@
-// (C) Copyright 2006-7 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 // 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)
@@ -196,6 +196,35 @@
     };
 };
 
+
+template<typename Mutex,typename Lock>
+struct test_locks_can_be_swapped
+{
+ void operator()() const
+ {
+ Mutex m1;
+ Mutex m2;
+ Lock l1(m1);
+ Lock l2(m2);
+
+ BOOST_CHECK_EQUAL(l1.mutex(),&m1);
+ BOOST_CHECK_EQUAL(l2.mutex(),&m2);
+
+ l1.swap(l2);
+
+ BOOST_CHECK_EQUAL(l1.mutex(),&m2);
+ BOOST_CHECK_EQUAL(l2.mutex(),&m1);
+
+ swap(l1,l2);
+
+ BOOST_CHECK_EQUAL(l1.mutex(),&m1);
+ BOOST_CHECK_EQUAL(l2.mutex(),&m2);
+
+ }
+};
+
+
+
 BOOST_TEST_CASE_TEMPLATE_FUNCTION(test_scoped_lock_concept,Mutex)
 {
     typedef typename Mutex::scoped_lock Lock;
@@ -208,6 +237,7 @@
     test_locked_after_lock_called<Mutex,Lock>()();
     test_throws_if_lock_called_when_already_locked<Mutex,Lock>()();
     test_throws_if_unlock_called_when_already_unlocked<Mutex,Lock>()();
+ test_locks_can_be_swapped<Mutex,Lock>()();
 }
 
 BOOST_TEST_CASE_TEMPLATE_FUNCTION(test_scoped_try_lock_concept,Mutex)
@@ -225,6 +255,7 @@
     test_throws_if_lock_called_when_already_locked<Mutex,Lock>()();
     test_throws_if_try_lock_called_when_already_locked<Mutex,Lock>()();
     test_throws_if_unlock_called_when_already_unlocked<Mutex,Lock>()();
+ test_locks_can_be_swapped<Mutex,Lock>()();
 }
 
 boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[])

Modified: branches/proto/v4/libs/thread/test/test_tss.cpp
==============================================================================
--- branches/proto/v4/libs/thread/test/test_tss.cpp (original)
+++ branches/proto/v4/libs/thread/test/test_tss.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -258,11 +258,58 @@
     }
 }
 
+struct dummy_class_tracks_deletions
+{
+ static unsigned deletions;
+
+ ~dummy_class_tracks_deletions()
+ {
+ ++deletions;
+ }
+
+};
+
+unsigned dummy_class_tracks_deletions::deletions=0;
+
+boost::thread_specific_ptr<dummy_class_tracks_deletions> tss_with_null_cleanup(NULL);
+
+void tss_thread_with_null_cleanup(dummy_class_tracks_deletions* delete_tracker)
+{
+ tss_with_null_cleanup.reset(delete_tracker);
+}
+
+void do_test_tss_does_no_cleanup_with_null_cleanup_function()
+{
+ dummy_class_tracks_deletions* delete_tracker=new dummy_class_tracks_deletions;
+ boost::thread t(tss_thread_with_null_cleanup,delete_tracker);
+ try
+ {
+ t.join();
+ }
+ catch(...)
+ {
+ t.interrupt();
+ t.join();
+ throw;
+ }
+
+ BOOST_CHECK(!dummy_class_tracks_deletions::deletions);
+ if(!dummy_class_tracks_deletions::deletions)
+ {
+ delete delete_tracker;
+ }
+}
+
 void test_tss_does_no_cleanup_after_release()
 {
     timed_test(&do_test_tss_does_no_cleanup_after_release, 2);
 }
 
+void test_tss_does_no_cleanup_with_null_cleanup_function()
+{
+ timed_test(&do_test_tss_does_no_cleanup_with_null_cleanup_function, 2);
+}
+
 boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[])
 {
     boost::unit_test_framework::test_suite* test =
@@ -271,6 +318,7 @@
     test->add(BOOST_TEST_CASE(test_tss));
     test->add(BOOST_TEST_CASE(test_tss_with_custom_cleanup));
     test->add(BOOST_TEST_CASE(test_tss_does_no_cleanup_after_release));
+ test->add(BOOST_TEST_CASE(test_tss_does_no_cleanup_with_null_cleanup_function));
 
     return test;
 }

Modified: branches/proto/v4/status/Jamfile.v2
==============================================================================
--- branches/proto/v4/status/Jamfile.v2 (original)
+++ branches/proto/v4/status/Jamfile.v2 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -121,6 +121,7 @@
     tuple/test # test-suite tuple
     type_traits/test # test-suite type_traits
     typeof/test # test-suite typeof
+ units/test # test-suite units
     unordered/test/unordered # test-suite unordered
     unordered/test/exception # test-suite unordered-exception
     utility/enable_if/test # test-suite utility/enable_if

Modified: branches/proto/v4/tools/build/v2/build/feature.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/feature.jam (original)
+++ branches/proto/v4/tools/build/v2/build/feature.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -42,6 +42,7 @@
 
 # Prepare a fresh space to test in by moving all global variable settings into
 # the given temporary module and erasing them here.
+#
 rule prepare-test ( temp-module )
 {
     DELETE_MODULE $(temp-module) ;
@@ -61,6 +62,7 @@
 
 # Clear out all global variables and recover all variables from the given
 # temporary module.
+#
 rule finish-test ( temp-module )
 {
     # Clear globals.
@@ -80,8 +82,9 @@
 }
 
 
-# Transform features by bracketing any elements which aren't already bracketed
+# Transform features by bracketing any elements which are not already bracketed
 # by "<>".
+#
 local rule grist ( features * )
 {
     local empty = "" ;
@@ -90,6 +93,7 @@
 
 
 # Declare a new feature with the given name, values, and attributes.
+#
 rule feature (
       name # Feature name.
     : values * # Allowable values - may be extended later using feature.extend.
@@ -118,15 +122,15 @@
     {
         error = free features cannot be propagated ;
     }
- else
+ else
     {
         local m = [ MATCH (.*=.*) : $(values) ] ;
         if $(m[1])
         {
             error = "feature value may not contain '='" ;
- }
+ }
     }
-
+
     if $(error)
     {
         errors.error $(error)
@@ -153,6 +157,7 @@
 
 
 # Sets the default value of the given feature, overriding any previous default.
+#
 rule set-default ( feature : value )
 {
     local f = [ grist $(feature) ] ;
@@ -166,6 +171,7 @@
 
 
 # Returns the default property values for the given features.
+#
 rule defaults ( features * )
 {
     local result ;
@@ -186,6 +192,7 @@
 
 
 # Returns true iff all 'names' elements are valid features.
+#
 rule valid ( names + )
 {
     if $(names) in $(.all-features)
@@ -196,6 +203,7 @@
 
 
 # Returns the attibutes of the given feature.
+#
 rule attributes ( feature )
 {
     return $($(:E=:G=$(feature)).attributes) ;
@@ -203,6 +211,7 @@
 
 
 # Returns the values of the given feature.
+#
 rule values ( feature )
 {
     return $($(:E=:G=$(feature)).values) ;
@@ -210,6 +219,7 @@
 
 
 # Returns true iff 'value-string' is a value-string of an implicit feature.
+#
 rule is-implicit-value ( value-string )
 {
     local v = [ regex.split $(value-string) - ] ;
@@ -238,6 +248,7 @@
 
 
 # Returns the implicit feature associated with the given implicit value.
+#
 rule implied-feature ( implicit-value )
 {
     local components = [ regex.split $(implicit-value) "-" ] ;
@@ -267,6 +278,7 @@
 # Given a feature and a value of one of its subfeatures, find the name of the
 # subfeature. If value-string is supplied, looks for implied subfeatures that
 # are specific to that value of feature
+#
 rule implied-subfeature (
       feature # The main feature name.
       subvalue # The value of one of its subfeatures.
@@ -286,6 +298,7 @@
 
 
 # Generate an error if the feature is unknown.
+#
 local rule validate-feature ( feature )
 {
     if ! $(feature) in $(.all-features)
@@ -305,6 +318,7 @@
 # return:
 #
 # <toolset>gcc <toolset-version>2.95.2 <toolset-os>linux <toolset-cpu>x86
+#
 local rule expand-subfeatures-aux (
       feature ? # Feature name or empty if value corresponds to an
                        # implicit property.
@@ -399,6 +413,7 @@
 
 
 # Helper for extend, below. Handles the feature case.
+#
 local rule extend-feature ( feature : values * )
 {
     feature = [ grist $(feature) ] ;
@@ -427,6 +442,7 @@
 
 
 # Checks that value-string is a valid value-string for the given feature.
+#
 rule validate-value-string ( feature value-string )
 {
     if ! (
@@ -464,6 +480,7 @@
 # between subvalue(s) and a subfeature
 # * value of that variable when such a subfeature/subvalue has been defined and
 # returns a list consisting of the latter followed by the former.
+#
 local rule subvalue-var (
     feature # Main feature name.
     value-string ? # If supplied, specifies a specific value of the main
@@ -518,6 +535,7 @@
 # Returns true iff the subvalues are valid for the feature. When the optional
 # value-string is provided, returns true iff the subvalues are valid for the
 # given value of the feature.
+#
 rule is-subvalue ( feature : value-string ? : subfeature : subvalue )
 {
     local subfeature-vars = [ subvalue-var $(feature) $(value-string)
@@ -591,6 +609,7 @@
 
 
 # Declares a subfeature.
+#
 rule subfeature (
     feature # Root feature that is not a subfeature.
     value-string ? # A value-string specifying which feature or subfeature
@@ -623,6 +642,7 @@
 
 
 # Set components of the given composite property.
+#
 rule compose ( composite-property : component-properties * )
 {
     local feature = $(composite-property:G) ;
@@ -654,6 +674,7 @@
 
 
 # Return all values of the given feature specified by the given property set.
+#
 rule get-values ( feature : properties * )
 {
     local result ;
@@ -681,6 +702,7 @@
 
 # Expand all composite properties in the set so that all components are
 # explicitly expressed.
+#
 rule expand-composites ( properties * )
 {
     local explicit-features = $(properties:G) ;
@@ -739,6 +761,7 @@
 # Return true iff f is an ordinary subfeature of the parent-property's feature,
 # or if f is a subfeature of the parent-property's feature specific to the
 # parent-property's value.
+#
 local rule is-subfeature-of ( parent-property f )
 {
     if subfeature in $($(f).attributes)
@@ -769,6 +792,7 @@
 
 
 # As for is-subfeature-of but for subproperties.
+#
 local rule is-subproperty-of ( parent-property p )
 {
     return [ is-subfeature-of $(parent-property) $(p:G) ] ;
@@ -778,6 +802,7 @@
 # Given a property, return the subset of features consisting of all ordinary
 # subfeatures of the property's feature, and all specific subfeatures of the
 # property's feature which are conditional on the property's value.
+#
 local rule select-subfeatures ( parent-property : features * )
 {
     return [ sequence.filter is-subfeature-of $(parent-property) : $(features) ] ;
@@ -785,6 +810,7 @@
 
 
 # As for select-subfeatures but for subproperties.
+#
 local rule select-subproperties ( parent-property : properties * )
 {
     return [ sequence.filter is-subproperty-of $(parent-property) : $(properties) ] ;
@@ -799,6 +825,7 @@
 # of those features due to composite feature expansion to be dropped. If two
 # values of a given non-free feature are directly expressed in the input, an
 # error is issued.
+#
 rule expand ( properties * )
 {
     local expanded = [ expand-subfeatures $(properties) ] ;
@@ -808,6 +835,7 @@
 
 # Helper rule for minimize. Returns true iff property's feature is present in
 # the contents of the variable named by feature-set-var.
+#
 local rule in-features ( feature-set-var property )
 {
     if $(property:G) in $($(feature-set-var))
@@ -819,6 +847,7 @@
 
 # Helper rule for minimize. Returns the list with the same properties, but with
 # all subfeatures moved to the end of the list.
+#
 local rule move-subfeatures-to-the-end ( properties * )
 {
     local x1 ;
@@ -844,6 +873,7 @@
 # they override a value from some composite property. Implicit properties will
 # be expressed without feature grist, and sub-property values will be expressed
 # as elements joined to the corresponding main property.
+#
 rule minimize ( properties * )
 {
     # Precondition checking
@@ -913,8 +943,9 @@
 # Requires: for every subproperty, there is a parent property. All features are
 # explicitly expressed.
 #
-# This rule probably shouldn't be needed, but build-request.expand-no-defaults
+# This rule probably should not be needed, but build-request.expand-no-defaults
 # is being abused for unintended purposes and it needs help.
+#
 rule compress-subproperties ( properties * )
 {
     local all-subs ;
@@ -926,7 +957,7 @@
         if ! $(p:G)
         {
             # Expecting fully-gristed properties.
- assert.nonempty-variable p:G ;
+ assert.variable-not-empty p:G ;
         }
 
         if ! subfeature in $($(p:G).attributes)
@@ -954,6 +985,7 @@
 # feature name followed by a dash, and return a pair consisting of the parts
 # before and after that dash. More interesting than a simple split because
 # feature names may contain dashes.
+#
 local rule split-top-feature ( feature-plus )
 {
     local e = [ regex.split $(feature-plus) - ] ;
@@ -989,6 +1021,7 @@
 # <variant>debug <runtime_debugging>off
 #
 # and that's kind of strange.
+#
 rule add-defaults ( properties * )
 {
     for local v in $(properties:G=)
@@ -1033,6 +1066,7 @@
 # Note that vN...vM may contain slashes. This needs to be resilient to the
 # substitution of backslashes for slashes, since Jam, unbidden, sometimes swaps
 # slash direction on NT.
+#
 rule split ( property-set )
 {
     local pieces = [ regex.split $(property-set) [\\/] ] ;
@@ -1055,7 +1089,8 @@
 
 
 # Tests of module feature.
-local rule __test__ ( )
+#
+rule __test__ ( )
 {
     # Use a fresh copy of the feature module.
     prepare-test feature-test-temp ;

Modified: branches/proto/v4/tools/build/v2/build/project.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/project.jam (original)
+++ branches/proto/v4/tools/build/v2/build/project.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -4,36 +4,35 @@
 # 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)
 
-# Implements project representation and loading. Each project is represented
-# by:
-# - a module where all the Jamfile content live.
-# - an instance of 'project-attributes' class.
-# (given a module name, can be obtained using the 'attributes' rule)
-# - an instance of 'project-target' class (from targets.jam)
-# (given a module name, can be obtained using the 'target' rule)
-#
-# Typically, projects are created as result of loading a Jamfile, which is done
-# by rules 'load' and 'initialize', below. First, module for Jamfile is loaded
-# and new project-attributes instance is created. Some rules necessary for
-# project are added to the module (see 'project-rules' module) at the bottom of
-# this file. Default project attributes are set (inheriting attributes of
-# parent project, if it exists). After that the Jamfile is read. It can declare
-# its own attributes using the 'project' rule which will be combined with any
-# alread set attributes.
-#
-# The 'project' rule can also declare a project id which will be associated
-# with the project module.
-#
-# There can also be 'standalone' projects. They are created by calling
-# 'initialize' on an arbitrary module and not specifying their location. After
-# the call, the module can call the 'project' rule, declare main targets and
-# behave as a regular project except that, since it's not associated with any
-# location, it should not declare targets that are not prebuilt.
-#
-# The list of all loaded Jamfile is stored in the .project-locations variable.
-# It's possible to obtain a module name for a location using the 'module-name'
-# rule. Standalone projects are not recorded and can only be referenced using
-# their project id.
+# Implements project representation and loading. Each project is represented by:
+# - a module where all the Jamfile content live.
+# - an instance of 'project-attributes' class.
+# (given a module name, can be obtained using the 'attributes' rule)
+# - an instance of 'project-target' class (from targets.jam)
+# (given a module name, can be obtained using the 'target' rule)
+#
+# Typically, projects are created as result of loading a Jamfile, which is done
+# by rules 'load' and 'initialize', below. First, module for Jamfile is loaded
+# and new project-attributes instance is created. Some rules necessary for
+# project are added to the module (see 'project-rules' module) at the bottom of
+# this file. Default project attributes are set (inheriting attributes of parent
+# project, if it exists). After that the Jamfile is read. It can declare its own
+# attributes using the 'project' rule which will be combined with any already
+# set attributes.
+#
+# The 'project' rule can also declare a project id which will be associated with
+# the project module.
+#
+# There can also be 'standalone' projects. They are created by calling
+# 'initialize' on an arbitrary module and not specifying their location. After
+# the call, the module can call the 'project' rule, declare main targets and
+# behave as a regular project except that, since it is not associated with any
+# location, it should not declare targets that are not prebuilt.
+#
+# The list of all loaded Jamfile is stored in the .project-locations variable.
+# It is possible to obtain a module name for a location using the 'module-name'
+# rule. Standalone projects are not recorded and can only be referenced using
+# their project id.
 
 import "class" : new ;
 import errors ;
@@ -94,13 +93,14 @@
 
 
 # Note the use of character groups, as opposed to listing 'Jamroot' and
-# 'jamroot'. With the latter, we'd get duplicate matches on Windows and would
-# have to eliminate duplicates.
+# 'jamroot'. With the latter, we would get duplicate matches on Windows and
+# would have to eliminate duplicates.
 JAMROOT ?= [ modules.peek : JAMROOT ] ;
 JAMROOT ?= project-root.jam [Jj]amroot [Jj]amroot.jam ;
 
 
 # Loads parent of Jamfile at 'location'. Issues an error if nothing is found.
+#
 rule load-parent ( location )
 {
     local found = [ path.glob-in-parents $(location) :
@@ -120,6 +120,7 @@
 # Makes the specified 'module' act as if it were a regularly loaded Jamfile at
 # 'location'. Reports an error if a Jamfile has already been loaded for that
 # location.
+#
 rule act-as-jamfile ( module : location )
 {
     if [ module-name $(location) ] in $(.jamfile-modules)
@@ -139,6 +140,7 @@
 
 # Returns the project module corresponding to the given project-id or plain
 # directory name. Returns nothing if such a project can not be found.
+#
 rule find ( name : current-location )
 {
     local project-module ;
@@ -489,6 +491,7 @@
 
 
 # Make 'project-module' inherit attributes of project root and parent module.
+#
 rule inherit-attributes ( project-module : parent-module )
 {
     local attributes = $($(project-module).attributes) ;
@@ -528,6 +531,7 @@
 
 
 # Associate the given id with the given project module.
+#
 rule register-id ( id : module )
 {
     $(id).jamfile-module = $(module) ;
@@ -538,6 +542,7 @@
 #
 # The standard attributes are "id", "location", "project-root", "parent"
 # "requirements", "default-build", "source-location" and "projects-to-build".
+#
 class project-attributes
 {
     import property ;
@@ -556,6 +561,7 @@
 
     # Set the named attribute from the specification given by the user. The
     # value actually set may be different.
+ #
     rule set ( attribute : specification *
         : exact ? # Sets value from 'specification' without any processing.
         )
@@ -640,12 +646,14 @@
     }
 
     # Returns the value of the given attribute.
+ #
     rule get ( attribute )
     {
         return $(self.$(attribute)) ;
     }
 
     # Prints the project attributes.
+ #
     rule print ( )
     {
         local id = $(self.id) ; id ?= (none) ;
@@ -664,6 +672,7 @@
 
 
 # Returns the project which is currently being loaded.
+#
 rule current ( )
 {
     return $(.current-project) ;
@@ -672,6 +681,7 @@
 
 # Temporarily changes the current project to 'project'. Should be followed by
 # 'pop-current'.
+#
 rule push-current ( project )
 {
     .saved-current-project += $(.current-project) ;
@@ -687,6 +697,7 @@
 
 
 # Returns the project-attribute instance for the specified Jamfile module.
+#
 rule attributes ( project )
 {
     return $($(project).attributes) ;
@@ -694,6 +705,7 @@
 
 
 # Returns the value of the specified attribute in the specified Jamfile module.
+#
 rule attribute ( project attribute )
 {
     return [ $($(project).attributes).get $(attribute) ] ;
@@ -701,6 +713,7 @@
 
 
 # Returns the project target corresponding to the 'project-module'.
+#
 rule target ( project-module )
 {
     if ! $(.target.$(project-module))
@@ -714,6 +727,7 @@
 
 
 # Use/load a project.
+#
 rule use ( id : location )
 {
     local saved-project = $(.current-project) ;
@@ -810,6 +824,7 @@
 
 
 # This module defines rules common to all projects.
+#
 module project-rules
 {
     rule using ( toolset-module : * )
@@ -926,8 +941,8 @@
     # child Jamfile.
     #
     rule constant (
- name # Variable name of the constant.
- : value + # Value of the constant.
+ name # Variable name of the constant.
+ : value + # Value of the constant.
         )
     {
         import project ;
@@ -938,6 +953,7 @@
     # Declare and set a project global constant, whose value is a path. The path
     # is adjusted to be relative to the invocation directory. The given value
     # path is taken to be either absolute, or relative to this project root.
+ #
     rule path-constant (
         name # Variable name of the constant.
         : value + # Value of the constant.
@@ -979,8 +995,8 @@
     rule glob ( wildcards + : excludes * )
     {
         import project ;
- return [ project.glob-internal [ project.current ]
- : $(wildcards) : $(excludes) : glob ] ;
+ return [ project.glob-internal [ project.current ] : $(wildcards) :
+ $(excludes) : glob ] ;
     }
 
     rule glob-tree ( wildcards + : excludes * )
@@ -1015,9 +1031,3 @@
         }
     }
 }
-
-
-local rule __test__ ( )
-{
- import assert ;
-}

Modified: branches/proto/v4/tools/build/v2/build/property-set.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/property-set.jam (original)
+++ branches/proto/v4/tools/build/v2/build/property-set.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -9,22 +9,23 @@
 import sequence ;
 import set ;
 
+
 # Class for storing a set of properties.
-# - there's 1<->1 correspondence between identity and value. No two instances of
-# the class are equal. To maintain this property, the 'property-set.create'
-# rule should be used to create new instances. Instances are immutable.
 #
-# - each property is classified with regard to it's effect on build results.
-# Incidental properties have no effect on build results, from Boost.Build's
-# point of view. Others are either free, or non-free, which we call 'base'.
-# Each property belongs to exactly one of those categories and it's possible
-# to get list of properties in each category.
+# There is 1<->1 correspondence between identity and value. No two instances
+# of the class are equal. To maintain this property, the 'property-set.create'
+# rule should be used to create new instances. Instances are immutable.
+#
+# Each property is classified with regard to its effect on build results.
+# Incidental properties have no effect on build results, from Boost.Build's
+# point of view. Others are either free, or non-free and we refer to non-free
+# ones as 'base'. Each property belongs to exactly one of those categories.
 #
-# In addition, it's possible to get a list of properties with a specific
-# attribute.
+# It is possible to get a list of properties belonging to each category as
+# well as a list of properties with a specific attribute.
 #
-# - several operations, like and refine and as-path are provided. They all use
-# caching whenever possible.
+# Several operations, like and refine and as-path are provided. They all use
+# caching whenever possible.
 #
 class property-set
 {
@@ -92,6 +93,7 @@
     }
 
     # Returns Jam list of stored properties.
+ #
     rule raw ( )
     {
         return $(self.raw) ;
@@ -103,18 +105,21 @@
     }
 
     # Returns properties that are neither incidental nor free.
+ #
     rule base ( )
     {
         return $(self.base) ;
     }
 
- # Returns free properties which are not dependency properties.
+ # Returns free properties which are not incidental.
+ #
     rule free ( )
     {
         return $(self.free) ;
     }
 
     # Returns dependency properties.
+ #
     rule dependency ( )
     {
         return $(self.dependency) ;
@@ -136,6 +141,7 @@
     }
 
     # Returns incidental properties.
+ #
     rule incidental ( )
     {
         return $(self.incidental) ;
@@ -239,6 +245,7 @@
     # Returns a list of
     # - the computed path
     # - if the path is relative to the build directory, a value of 'true'.
+ #
     rule target-path ( )
     {
         if ! $(self.target-path)
@@ -318,6 +325,7 @@
     }
 
     # Returns all values of 'feature'.
+ #
     rule get ( feature )
     {
         if ! $(self.map-built)
@@ -338,6 +346,7 @@
 
 # Creates a new 'property-set' instance for the given raw properties or returns
 # an already existing ones.
+#
 rule create ( raw-properties * )
 {
     raw-properties = [ sequence.unique
@@ -356,6 +365,7 @@
 
 # Creates a new 'property-set' instance after checking that all properties are
 # valid and converting incidental properties into gristed form.
+#
 rule create-with-validation ( raw-properties * )
 {
     property.validate $(raw-properties) ;
@@ -365,6 +375,7 @@
 
 # Creates a property-set from the input given by the user, in the context of
 # 'jamfile-module' at 'location'.
+#
 rule create-from-user-input ( raw-properties * : jamfile-module location )
 {
     local specification = [ property.translate-paths $(raw-properties)
@@ -386,8 +397,8 @@
 # bound.
 # - location -- path to which path features are relative.
 #
-rule refine-from-user-input ( parent-requirements : specification *
- : project-module : location )
+rule refine-from-user-input ( parent-requirements : specification * :
+ project-module : location )
 {
     if ! $(specification)
     {
@@ -434,6 +445,7 @@
 
 
 # Returns a property-set with an empty set of properties.
+#
 rule empty ( )
 {
     if ! $(.empty)

Modified: branches/proto/v4/tools/build/v2/build/property.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/property.jam (original)
+++ branches/proto/v4/tools/build/v2/build/property.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -18,6 +18,7 @@
 # Refines 'properties' by overriding any non-free and non-conditional properties
 # for which a different value is specified in 'requirements'. Returns the
 # resulting list of properties.
+#
 rule refine ( properties * : requirements * )
 {
     local result ;
@@ -88,6 +89,7 @@
 # Removes all conditional properties whose conditions are not met. For those
 # with met conditions, removes the condition. Properties in conditions are
 # looked up in 'context'.
+#
 rule evaluate-conditionals-in-context ( properties * : context * )
 {
     local base ;
@@ -165,6 +167,7 @@
 
 # Helper for as-path, below. Orders properties with the implicit ones first, and
 # within the two sections in alphabetical order of feature name.
+#
 local rule path-order ( x y )
 {
     if $(y:G) && ! $(x:G)
@@ -219,6 +222,7 @@
 
 
 # Returns a path representing the given expanded property set.
+#
 rule as-path ( properties * )
 {
     local entry = .result.$(properties:J=-) ;
@@ -250,6 +254,7 @@
 
 
 # Exit with error if property is not valid.
+#
 local rule validate1 ( property )
 {
     local msg ;
@@ -307,6 +312,7 @@
 
 # Expands any implicit property values in the given property 'specification' so
 # they explicitly state their feature.
+#
 rule make ( specification * )
 {
     local result ;
@@ -332,6 +338,7 @@
 
 # Returns a property set containing all the elements in 'properties' that do not
 # have their attributes listed in 'attributes'.
+#
 rule remove ( attributes + : properties * )
 {
     local result ;
@@ -348,6 +355,7 @@
 
 # Returns a property set containing all the elements in 'properties' that have
 # their attributes listed in 'attributes'.
+#
 rule take ( attributes + : properties * )
 {
     local result ;
@@ -363,6 +371,7 @@
 
 
 # Selects properties corresponding to any of the given features.
+#
 rule select ( features * : properties * )
 {
     local result ;
@@ -384,6 +393,7 @@
 
 # Returns a modified version of properties with all values of the given feature
 # replaced by the given value. If 'value' is empty the feature will be removed.
+#
 rule change ( properties * : feature value ? )
 {
     local result ;
@@ -406,6 +416,7 @@
 # property. E.g. <variant>debug,<toolset>gcc:<inlining>full will become
 # <variant>debug,<toolset>gcc <inlining>full. Otherwise, returns an empty
 # string.
+#
 rule split-conditional ( property )
 {
     local m = [ MATCH "(.+):<(.+)" : $(property) ] ;
@@ -419,6 +430,7 @@
 # Interpret all path properties in 'properties' as relative to 'path'. The
 # property values are assumed to be in system-specific form, and will be
 # translated into normalized form.
+#
 rule translate-paths ( properties * : path )
 {
     local result ;
@@ -456,6 +468,7 @@
 # in 'context-module'. Such rules can be either local to the module or global.
 # Converts such values into 'indirect-rule' format (see indirect.jam), so they
 # can be called from other modules.
+#
 rule translate-indirect ( specification * : context-module )
 {
     local result ;
@@ -498,6 +511,7 @@
 
 
 # Class which maintains a property set -> string mapping.
+#
 class property-map
 {
     import errors ;
@@ -509,7 +523,8 @@
         self.next-flag = 1 ;
     }
 
- # Associate 'value' with 'properties'
+ # Associate 'value' with 'properties'.
+ #
     rule insert ( properties + : value )
     {
         self.all-flags += $(self.next-flag) ;
@@ -522,6 +537,7 @@
     # Returns the value associated with 'properties' or any subset of it. If
     # more than one subset has a value assigned to it, returns the value for the
     # longest subset, if it's unique.
+ #
     rule find ( properties + )
     {
         return [ find-replace $(properties) ] ;
@@ -529,6 +545,7 @@
 
     # Returns the value associated with 'properties'. If 'value' parameter is
     # given, replaces the found value.
+ #
     rule find-replace ( properties + : value ? )
     {
         # First find all matches
@@ -558,7 +575,7 @@
 }
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
     import assert ;
     import "class" : new ;
@@ -591,24 +608,24 @@
     assert.true path-order $(test-space) <optimization>on <rtti>on ;
     assert.false path-order $(test-space) <rtti>on <optimization>on ;
 
- assert.result-equal <toolset>gcc <rtti>off <define>FOO
+ assert.result-set-equal <toolset>gcc <rtti>off <define>FOO
         : refine <toolset>gcc <rtti>off
         : <define>FOO
         : $(test-space) ;
 
- assert.result-equal <toolset>gcc <optimization>on
+ assert.result-set-equal <toolset>gcc <optimization>on
         : refine <toolset>gcc <optimization>off
         : <optimization>on
         : $(test-space) ;
 
- assert.result-equal <toolset>gcc <rtti>off
+ assert.result-set-equal <toolset>gcc <rtti>off
         : refine <toolset>gcc : <rtti>off : $(test-space) ;
 
- assert.result-equal <toolset>gcc <rtti>off <rtti>off:<define>FOO
+ assert.result-set-equal <toolset>gcc <rtti>off <rtti>off:<define>FOO
         : refine <toolset>gcc : <rtti>off <rtti>off:<define>FOO
         : $(test-space) ;
 
- assert.result-equal <toolset>gcc:<define>foo <toolset>gcc:<define>bar
+ assert.result-set-equal <toolset>gcc:<define>foo <toolset>gcc:<define>bar
         : refine <toolset>gcc:<define>foo : <toolset>gcc:<define>bar
         : $(test-space) ;
 
@@ -646,19 +663,19 @@
         validate value : $(test-space) ;
     catch "value" is not a value of an implicit feature ;
 
- assert.result-equal <rtti>on
+ assert.result-set-equal <rtti>on
         : remove free implicit : <toolset>gcc <define>foo <rtti>on : $(test-space) ;
 
- assert.result-equal <include>a
+ assert.result-set-equal <include>a
         : select include : <include>a <toolset>gcc ;
 
- assert.result-equal <include>a
+ assert.result-set-equal <include>a
         : select include bar : <include>a <toolset>gcc ;
 
- assert.result-equal <include>a <toolset>gcc
+ assert.result-set-equal <include>a <toolset>gcc
         : select include <bar> <toolset> : <include>a <toolset>gcc ;
 
- assert.result-equal <toolset>kylix <include>a
+ assert.result-set-equal <toolset>kylix <include>a
         : change <toolset>gcc <include>a : <toolset> kylix ;
 
     pm = [ new property-map ] ;
@@ -681,7 +698,7 @@
     assert.result : split-conditional <define>FOO=A::B ;
 
     # Test conditional feature.
- assert.result-equal <toolset>gcc,<toolset-gcc:version>3.0 <define>FOO
+ assert.result-set-equal <toolset>gcc,<toolset-gcc:version>3.0 <define>FOO
         : split-conditional <toolset>gcc,<toolset-gcc:version>3.0:<define>FOO ;
 
     feature.finish-test property-test-temp ;

Modified: branches/proto/v4/tools/build/v2/build/targets.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/targets.jam (original)
+++ branches/proto/v4/tools/build/v2/build/targets.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -507,7 +507,7 @@
         # Import rules from parent.
         local this-module = [ project-module ] ;
         local parent-module = [ $(parent).project-module ] ;
- # Don't import rules coming from 'project-rules' as they must be
+ # Do not import rules coming from 'project-rules' as they must be
         # imported localized.
         local user-rules = [ set.difference
             [ RULENAMES $(parent-module) ] :
@@ -832,7 +832,7 @@
 #
 rule resolve-reference ( target-reference : project )
 {
- # Separate target name from properties override
+ # Separate target name from properties override.
     local split = [ MATCH "^([^<]*)(/(<.*))?$" : $(target-reference) ] ;
     local id = $(split[1]) ;
     local sproperties = ;
@@ -842,7 +842,7 @@
         sproperties = [ feature.expand-composites $(sproperties) ] ;
     }
 
- # Find the target
+ # Find the target.
     local target = [ $(project).find $(id) ] ;
 
     return $(target) [ property-set.create $(sproperties) ] ;
@@ -880,16 +880,23 @@
 
 
 # Given a build request and requirements, return properties common to dependency
-# build request and target build properties.
+# build request and target requirements.
+#
+# TODO: Document exactly what 'common properties' are, whether they should
+# include default property values, whether they should contain any conditional
+# properties or should those be already processed, etc. See whether there are
+# any differences between use cases with empty and non-empty build-request as
+# well as with requirements containing and those not containing any non-free
+# features.
 #
 rule common-properties ( build-request requirements )
 {
     # For optimization, we add free requirements directly, without using a
- # complex algorithm. This gives the complex algorithm better chance of
+ # complex algorithm. This gives the complex algorithm a better chance of
     # caching results.
     local free = [ $(requirements).free ] ;
- local non-free = [ property-set.create
- [ $(requirements).base ] [ $(requirements).incidental ] ] ;
+ local non-free = [ property-set.create [ $(requirements).base ]
+ [ $(requirements).incidental ] ] ;
 
     local key = .rp.$(build-request)-$(non-free) ;
     if ! $($(key))
@@ -900,7 +907,7 @@
 }
 
 
-# Given 'context' -- a set of already present properties, and 'requirements',
+# Given a 'context' -- a set of already present properties, and 'requirements',
 # decide which extra properties should be applied to 'context'. For conditional
 # requirements, this means evaluating condition. For indirect conditional
 # requirements, this means calling a rule. Ordinary requirements are always
@@ -915,13 +922,13 @@
 #
 rule evaluate-requirements ( requirements : context : what )
 {
- # Apply non-conditional requirements. It's possible that further conditional
- # requirement change a value set by non-conditional requirements. For
- # example:
+ # Apply non-conditional requirements. It is possible that further
+ # conditional requirement change a value set by non-conditional
+ # requirements. For example:
     #
     # exe a : a.cpp : <threading>single <toolset>foo:<threading>multi ;
     #
- # I'm not sure if this should be an error, or not, especially given that
+ # I am not sure if this should be an error, or not, especially given that
     #
     # <threading>single
     #
@@ -932,15 +939,15 @@
     local raw = [ $(context).raw ] ;
     raw = [ property.refine $(raw) : $(unconditional) ] ;
 
- # We've collected properties that surely must be present in common
+ # We have collected properties that surely must be present in common
     # properties. We now try to figure out what other properties should be added
     # in order to satisfy rules (4)-(6) from the docs.
 
     local conditionals = [ $(requirements).conditional ] ;
     # The 'count' variable has one element for each conditional feature and for
- # each occurence of '<indirect-conditional>' feature. It's used as a loop
+ # each occurence of '<indirect-conditional>' feature. It is used as a loop
     # counter: for each iteration of the loop before we remove one element and
- # the property set should stabilize before we're done. It's assumed that
+ # the property set should stabilize before we are done. It is assumed that
     # #conditionals iterations should be enough for properties to propagate
     # along conditions in any direction.
     local count = $(conditionals)
@@ -951,9 +958,9 @@
 
     local current = $(raw) ;
 
- # It's assumed that ordinary conditional requirements can't add
- # <indirect-conditional> properties, and that rules referred by
- # <indirect-conditional> properties can't add new <indirect-conditional>
+ # It is assumed that ordinary conditional requirements can not add
+ # <indirect-conditional> properties, and that rules referred to by
+ # <indirect-conditional> properties can not add new <indirect-conditional>
     # properties. So the list of indirect conditionals does not change.
     local indirect = [ $(requirements).get <conditional> ] ;
     indirect = [ MATCH @(.*) : $(indirect) ] ;
@@ -979,9 +986,9 @@
         }
         else
         {
- # Oops, results of evaluation of conditionals has changed. Also
- # 'current' contains leftover from previous evaluation. Recompute
- # 'current' using initial properties and conditional requirements.
+ # Oops, conditional evaluation results have changed. Also 'current'
+ # contains leftovers from a previous evaluation. Recompute 'current'
+ # using initial properties and conditional requirements.
             added-requirements = $(e) ;
             current = [ property.refine $(raw) : [ feature.expand $(e) ] ] ;
         }
@@ -989,7 +996,7 @@
     }
     if ! $(ok)
     {
- errors.error "Can't evaluate conditional properties " $(conditionals) ;
+ errors.error "Can not evaluate conditional properties " $(conditionals) ;
     }
 
     if $(what) = added
@@ -1011,18 +1018,18 @@
 {
     # This guarantees that default properties are present in the result, unless
     # they are overriden by some requirement. FIXME: There is possibility that
- # we've added <foo>bar, which is composite and expands to <foo2>bar2, but
- # default value of <foo2> is not bar2, in which case it's not clear what to
+ # we have added <foo>bar, which is composite and expands to <foo2>bar2, but
+ # default value of <foo2> is not bar2, in which case it is not clear what to
     # do.
     #
     build-request = [ $(build-request).add-defaults ] ;
     # Features added by 'add-default' can be composite and expand to features
     # without default values -- so they are not added yet. It could be clearer/
- # /faster to expand only newly added properties but that's not critical.
+ # /faster to expand only newly added properties but that is not critical.
     build-request = [ $(build-request).expand ] ;
 
- return [ evaluate-requirements $(requirements)
- : $(build-request) : refined ] ;
+ return [ evaluate-requirements $(requirements) : $(build-request) :
+ refined ] ;
 }
 
 
@@ -1177,7 +1184,7 @@
 
         if ! $(self.generated.$(property-set))
         {
- # Apply free features form the command line. If user said
+ # Apply free features from the command line. If user said
             # define=FOO
             # he most likely wants this define to be set for all compiles.
             property-set = [ $(property-set).refine
@@ -1188,7 +1195,7 @@
             if [ modules.peek : .debug-building ]
             {
                 ECHO ;
- ECHO [ targets.indent ] "Common properties:" [ $(rproperties).raw ] ;
+ ECHO [ targets.indent ] "Common properties: " [ $(rproperties).raw ] ;
             }
 
             if $(rproperties[1]) != "@error" && [ $(rproperties).get <build> ] != no
@@ -1206,8 +1213,8 @@
                 if [ modules.peek : .debug-building ]
                 {
                     ECHO ;
- ECHO [ targets.indent ]
- "Usage requirements for $(self.name) are " $(usage-requirements) ;
+ ECHO [ targets.indent ] "Usage requirements for"
+ $(self.name)": " $(usage-requirements) ;
                 }
 
                 rproperties = [ property-set.create $(properties)
@@ -1216,8 +1223,8 @@
 
                 if [ modules.peek : .debug-building ]
                 {
- ECHO [ targets.indent ]
- "Build properties: " [ $(rproperties).raw ] ;
+ ECHO [ targets.indent ] "Build properties: "
+ [ $(rproperties).raw ] ;
                 }
 
                 local extra = [ $(rproperties).get <source> ] ;
@@ -1245,9 +1252,8 @@
                     $(s).set-usage-requirements $(ur) ;
                     if [ modules.peek : .debug-building ]
                     {
- ECHO [ targets.indent ]
- "Usage requirements from $(self.name) are"
- [ $(ur).raw ] ;
+ ECHO [ targets.indent ] "Usage requirements from"
+ $(self.name)": " [ $(ur).raw ] ;
                     }
 
                     self.generated.$(property-set) = $(ur) $(result) ;
@@ -1262,27 +1268,28 @@
                 }
                 else if [ $(rproperties).get <build> ] = no
                 {
- ECHO [ targets.indent ]
- "Skipping build of: " [ full-name ] " <build>no in common properties" ;
+ ECHO [ targets.indent ] "Skipping build of: " [ full-name ]
+ " <build>no in common properties" ;
                 }
                 else
                 {
- ECHO [ targets.indent ] "Skipping build of: " [ full-name ] " unknown reason" ;
+ ECHO [ targets.indent ] "Skipping build of: " [ full-name ]
+ " unknown reason" ;
                 }
 
- # We are here either because there's been an error computing
- # properties, or there's <build>no in properties. In the latter
- # case we don't want any diagnostic. In the former case, we need
- # diagnostics. FIXME
-
- # If this target fails to build, add <build>no to properties
- # to cause any parent target to fail to build. Except that it
+ # We are here either because there has been an error computing
+ # properties or there is <build>no in properties. In the latter
+ # case we do not want any diagnostic. In the former case, we
+ # need diagnostics. FIXME
+
+ # If this target fails to build, add <build>no to properties to
+ # cause any parent target to fail to build. Except that it
                 # - does not work now, since we check for <build>no only in
                 # common properties, but not in properties that came from
                 # dependencies
- # - it's not clear if that's a good idea anyway. The alias
- # target, for example, should not fail to build if a dependency
- # fails.
+ # - it is not clear if that is a good idea anyway. The alias
+ # target, for example, should not fail to build if a
+ # dependency fails.
                 self.generated.$(property-set) = [ property-set.create <build>no ] ;
             }
         }
@@ -1293,7 +1300,10 @@
                 ECHO [ targets.indent ] "Already built" ;
                 local ur = $(self.generated.$(property-set)) ;
                 ur = $(ur[0]) ;
- ECHO [ targets.indent ] " Usage requirements " [ $(ur).raw ] ;
+ targets.increase-indent ;
+ ECHO [ targets.indent ] "Usage requirements from"
+ $(self.name)": " [ $(ur).raw ] ;
+ targets.decrease-indent ;
             }
         }
 
@@ -1319,7 +1329,7 @@
         local result = [ property-set.create
             [ $(xusage-requirements).non-dependency ] $(extra) ] ;
 
- # Propagate usage requirements we've got from sources, except for the
+ # Propagate usage requirements we got from sources, except for the
         # <pch-header> and <pch-file> features.
         #
         # That feature specifies which pch file to use, and should apply only to

Modified: branches/proto/v4/tools/build/v2/build/toolset.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/toolset.jam (original)
+++ branches/proto/v4/tools/build/v2/build/toolset.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -484,7 +484,7 @@
 }
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
     import assert ;
     local p = <b>0 <c>1 <d>2 <e>3 <f>4 ;

Modified: branches/proto/v4/tools/build/v2/build/type.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/type.jam (original)
+++ branches/proto/v4/tools/build/v2/build/type.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -18,8 +18,8 @@
 # project -> project-root -> builtin -> type -> targets -> project
 # import targets ;
 
-# The feature is optional so it would never get added implicitly. It's used only
-# for internal purposes and in all cases we want to use it explicitly.
+# The feature is optional so it would never get added implicitly. It is used
+# only for internal purposes and in all cases we want to use it explicitly.
 feature.feature target-type : : composite optional ;
 
 feature.feature main-target-type : : optional incidental ;
@@ -30,6 +30,7 @@
 # of 'suffixes' here is a shortcut for separately calling the register-suffixes
 # rule with the given suffixes and the set-generated-target-suffix rule with the
 # first given suffix.
+#
 rule register ( type : suffixes * : base-type ? )
 {
     # Type names cannot contain hyphens, because when used as feature-values
@@ -81,6 +82,7 @@
 
 # Given a type, returns the name of the main target rule which creates targets
 # of that type.
+#
 rule type-to-rule-name ( type )
 {
     # Lowercase everything. Convert underscores to dashes.
@@ -91,6 +93,7 @@
 
 
 # Given a main target rule name, returns the type for which it creates targets.
+#
 rule type-from-rule-name ( rule-name )
 {
     return $(.main-target-type.$(rule-name)) ;
@@ -100,6 +103,7 @@
 # Specifies that files with suffix from 'suffixes' be recognized as targets of
 # type 'type'. Issues an error if a different type is already specified for any
 # of the suffixes.
+#
 rule register-suffixes ( suffixes + : type )
 {
     for local s in $(suffixes)
@@ -118,6 +122,7 @@
 
 
 # Returns true iff type has been registered.
+#
 rule registered ( type )
 {
     if $(type) in $(.types)
@@ -128,6 +133,7 @@
 
 
 # Issues an error if 'type' is unknown.
+#
 rule validate ( type )
 {
     if ! $(type) in $(.types)
@@ -138,6 +144,7 @@
 
 
 # Sets a scanner class that will be used for this 'type'.
+#
 rule set-scanner ( type : scanner )
 {
     if ! $(type) in $(.types)
@@ -149,6 +156,7 @@
 
 
 # Returns a scanner instance appropriate to 'type' and 'properties'.
+#
 rule get-scanner ( type : property-set )
 {
     if $(.scanner.$(type))
@@ -160,6 +168,7 @@
 
 # Returns the given type and all of its base types in order of their distance
 # from type.
+#
 rule all-bases ( type )
 {
     local result = $(type) ;
@@ -184,6 +193,7 @@
 
 
 # Returns true if 'type' has 'base' as its direct or indirect base.
+#
 rule is-derived ( type base )
 {
     if $(base) in [ all-bases $(type) ]
@@ -194,6 +204,7 @@
 
 
 # Returns true if 'type' is either derived from or is equal to 'base'.
+#
 rule is-subtype ( type base )
 {
     if $(type) = $(base)
@@ -233,6 +244,7 @@
 
 # Change the suffix previously registered for this type/properties combination.
 # If suffix is not yet specified, sets it.
+#
 rule change-generated-target-suffix ( type : properties * : suffix )
 {
     change-generated-target-ps suffix : $(type) : $(properties) : $(suffix) ;
@@ -241,6 +253,7 @@
 
 # Returns the suffix used when generating a file of 'type' with the given
 # properties.
+#
 rule generated-target-suffix ( type : property-set )
 {
     return [ generated-target-ps suffix : $(type) : $(property-set) ] ;
@@ -255,6 +268,7 @@
 # should be used.
 #
 # Usage example: library names use the "lib" prefix on unix.
+#
 rule set-generated-target-prefix ( type : properties * : prefix )
 {
     set-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
@@ -263,6 +277,7 @@
 
 # Change the prefix previously registered for this type/properties combination.
 # If prefix is not yet specified, sets it.
+#
 rule change-generated-target-prefix ( type : properties * : prefix )
 {
     change-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
@@ -299,6 +314,7 @@
 # when generating a target of 'type' with the specified properties. Parameter
 # 'ps' can be either "prefix" or "suffix". If no prefix/suffix is specified for
 # 'type', returns prefix/suffix for base type, if any.
+#
 local rule generated-target-ps-real ( ps : type : properties * )
 {
     local result ;
@@ -348,6 +364,7 @@
 # Returns file type given it's name. If there are several dots in filename,
 # tries each suffix. E.g. for name of "file.so.1.2" suffixes "2", "1", and "so"
 # will be tried.
+#
 rule type ( filename )
 {
     local type ;
@@ -365,6 +382,7 @@
 # into the global namespace under different alias names and exactly what type of
 # target it is supposed to construct is read from the name of the alias rule
 # actually used to invoke it.
+#
 rule main-target-rule ( name : sources * : requirements * : default-build *
     : usage-requirements * )
 {

Modified: branches/proto/v4/tools/build/v2/build/version.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/version.jam (original)
+++ branches/proto/v4/tools/build/v2/build/version.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -90,7 +90,7 @@
         errors.error Invalid version specifier: : $(version:E="(undefined)") ;
     }
 
- if ! $(.jam-version-check.$(version-tag))-is-defined
+ if ! $(.jam-version-check.$(version-tag))-is-not-empty
     {
         local jam-version = [ modules.peek : JAM_VERSION ] ;
         if ! $(jam-version)

Modified: branches/proto/v4/tools/build/v2/build/virtual-target.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/build/virtual-target.jam (original)
+++ branches/proto/v4/tools/build/v2/build/virtual-target.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1216,7 +1216,7 @@
     rule implicit-includes ( feature : target-type ? )
     {
         local key = ii$(feature)-$(target-type:E="") ;
- if ! $($(key))-is-nonempty
+ if ! $($(key))-is-not-empty
         {
             local target-paths = [ all-target-directories $(target-type) ] ;
             target-paths = [ sequence.unique $(target-paths) ] ;

Modified: branches/proto/v4/tools/build/v2/doc/src/tutorial.xml
==============================================================================
--- branches/proto/v4/tools/build/v2/doc/src/tutorial.xml (original)
+++ branches/proto/v4/tools/build/v2/doc/src/tutorial.xml 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -16,74 +16,70 @@
     sections.
 -->
 
- <para>This section will guide you though the most basic features of
- Boost.Build V2. We will start with the &#x201C;Hello, world&#x201D; example,
- learn how to use libraries, and finish with testing and installing features.
+ <para>
+ This section will guide you though the most basic features of Boost.Build
+ V2. We will start with the &#x201C;Hello, world&#x201D; example, learn how
+ to use libraries, and finish with testing and installing features.
   </para>
 
   <section id="bbv2.tutorial.hello">
     <title>Hello, world</title>
 
- <para>The simplest project that Boost.Build can construct is
- stored in <filename>example/hello/</filename> directory. The
- project is described by a file
- called <filename>Jamroot</filename> that contains:
+ <para>
+ The simplest project that Boost.Build can construct is stored in
+ <filename>example/hello/</filename> directory. The project is described by
+ a file called <filename>Jamroot</filename> that contains:
 
 <programlisting>
 exe hello : hello.cpp ;
 </programlisting>
 
- Even with this simple setup, you can do some interesting
- things. First of all, just invoking <command>bjam</command> will
- build the <filename>hello</filename>
- executable by compiling and
- linking <filename>hello.cpp</filename>. By default, debug variant
- is built. Now, to build the
- release variant of <filename>hello</filename>, invoke
+ Even with this simple setup, you can do some interesting things. First of
+ all, just invoking <command>bjam</command> will build the <filename>hello
+ </filename> executable by compiling and linking <filename>hello.cpp
+ </filename>. By default, debug variant is built. Now, to build the release
+ variant of <filename>hello</filename>, invoke
 
 <screen>
 bjam release
 </screen>
 
- Note that debug and release variants are created in different
- directories, so you can switch between variants or even build
- multiple variants at once, without any unnecessary
- recompilation. Let's extend the example by adding another line
- to our project's <filename>Jamroot</filename>:
+ Note that debug and release variants are created in different directories,
+ so you can switch between variants or even build multiple variants at
+ once, without any unnecessary recompilation. Let us extend the example by
+ adding another line to our project's <filename>Jamroot</filename>:
 
 <programlisting>
 exe hello2 : hello.cpp ;
 </programlisting>
 
- Now let us build both the debug and release variants of our project
- again:
+ Now let us build both the debug and release variants of our project again:
 
 <screen>
 bjam debug release
 </screen>
 
- Note that two variants of <filename>hello2</filename> are linked.
- Since we have already built both variants
- of <filename>hello</filename>, hello.cpp won't be recompiled;
- instead the existing object files will just be linked into the
- corresponding variants of <filename>hello2</filename>. Now
- let's remove all the built products:
+ Note that two variants of <filename>hello2</filename> are linked. Since we
+ have already built both variants of <filename>hello</filename>, hello.cpp
+ will not be recompiled; instead the existing object files will just be
+ linked into the corresponding variants of <filename>hello2</filename>. Now
+ let us remove all the built products:
 
 <screen>
 bjam --clean debug release
 </screen>
 
- It's also possible to build or clean specific targets. The
- following two commands, respectively, build or clean only the
- debug version of <filename>hello2</filename>.
+ It is also possible to build or clean specific targets. The following two
+ commands, respectively, build or clean only the debug version of
+ <filename>hello2</filename>.
 
 <screen>
 bjam hello2
 bjam --clean hello2
 </screen>
     </para>
-
   </section>
+
   <section id="bbv2.tutorial.properties">
     <title>Properties</title>
 
@@ -97,46 +93,49 @@
       value) pair. When a user initiates a build, Boost.Build
       automatically translates the requested properties into appropriate
       command-line flags for invoking toolset components like compilers
- and linkers.</para>
+ and linkers.
+ </para>
 
- <para>There are many built-in features that can be combined to
+ <para>
+ There are many built-in features that can be combined to
       produce arbitrary build configurations. The following command
       builds the project's <code>release</code> variant with inlining
       disabled and debug symbols enabled:
-
 <screen>
 bjam release inlining=off debug-symbols=on
 </screen>
-</para>
+ </para>
 
- <para>Properties on the command-line are specified with the syntax:
+ <para>
+ Properties on the command-line are specified with the syntax:
 
 <screen>
 <replaceable>feature-name</replaceable>=<replaceable>feature-value</replaceable>
 </screen>
-</para>
+ </para>
 
- <para>The <option>release</option> and <option>debug</option> that we've seen
- in <command>bjam</command> invocations are just a shorthand way to
- specify values of the <varname>variant</varname> feature. For example, the command
- above could also have been written this way:
+ <para>
+ The <option>release</option> and <option>debug</option> that we have seen
+ in <command>bjam</command> invocations are just a shorthand way to specify
+ values of the <varname>variant</varname> feature. For example, the
+ command above could also have been written this way:
 
       <screen>
 bjam variant=release inlining=off debug-symbols=on
       </screen>
     </para>
 
- <para> <varname>variant</varname> is so commonly-used that it has
- been given special status as an <firstterm>implicit</firstterm>
- feature&#x2014;Boost.Build will deduce the its identity just
- from the name of one of its values.
+ <para>
+ <varname>variant</varname> is so commonly-used that it has been given
+ special status as an <firstterm>implicit</firstterm> feature&#x2014;
+ Boost.Build will deduce the its identity just from the name of one of its
+ values.
     </para>
 
     <para>
       A complete description of features can be found in <xref linkend="bbv2.reference.features"/>.
     </para>
 
-
     <section id="bbv2.tutorial.properties.requirements">
       <title>Build Requests and Target Requirements</title>
 
@@ -145,19 +144,19 @@
         a <firstterm>build request</firstterm>&#x2014;a description of
         the desired properties for building the requested targets (or,
         if no targets were explicitly requested, the project in the
- current directory). The <emphasis>actual</emphasis>
+ current directory). The <emphasis>actual</emphasis>
         properties used for building targets are typically a
         combination of the build request and properties derived from
         the project's <filename>Jamroot</filename> (and its other
         Jamfiles, as described in <xref
- linkend="bbv2.tutorial.hierarchy"/>). For example, the
+ linkend="bbv2.tutorial.hierarchy"/>). For example, the
         locations of <code>#include</code>d header files are normally
         not specified on the command-line, but described in
         Jamfiles as <firstterm>target
         requirements</firstterm> and automatically combined with the
- build request for those targets. Multithread-enabled
+ build request for those targets. Multithread-enabled
         compilation is another example of a typical target
- requirement. The Jamfile fragment below
+ requirement. The Jamfile fragment below
         illustrates how these requirements might be specified.
       </para>
 
@@ -169,41 +168,39 @@
 </programlisting>
 
       <para>
- When <filename>hello</filename> is built, the two
- requirements specified above will always be present.
- If the build request given on the <command>bjam</command>
- command-line explictly contradicts a target's requirements,
- the target requirements usually override (or, in the case of
- &#x201C;free&rdquo;&#x201D; features like
+ When <filename>hello</filename> is built, the two requirements specified
+ above will always be present. If the build request given on the
+ <command>bjam</command> command-line explictly contradicts a target's
+ requirements, the target requirements usually override (or, in the case
+ of &#x201C;free&rdquo;&#x201D; features like
         <varname>&lt;include&gt;</varname>,
         <footnote>
-<para>
-See <xref linkend="bbv2.reference.features.attributes"/>
-</para></footnote>
+ <para>
+ See <xref linkend="bbv2.reference.features.attributes"/>
+ </para>
+ </footnote>
         augments) the build request.
-
       </para>
 
       <tip>
- <para>The value of the <varname>&lt;include&gt;</varname> feature is
- relative to the location of <filename>Jamroot</filename> where it's
+ <para>
+ The value of the <varname>&lt;include&gt;</varname> feature is
+ relative to the location of <filename>Jamroot</filename> where it is
           used.
         </para>
       </tip>
-
     </section>
+
     <section id="bbv2.tutorial.properties.project_attributes">
       <title>Project Attributes</title>
 
       <para>
- If we want the same requirements for our other
- target, <filename>hello2</filename>, we could simply duplicate
- them. However, as projects grow, that approach leads to a great
- deal of repeated boilerplate in Jamfiles.
-
- Fortunately, there's a better way. Each project can specify a
- set of <firstterm>attributes</firstterm>, including
- requirements:
+ If we want the same requirements for our other target, <filename>hello2
+ </filename>, we could simply duplicate them. However, as projects grow,
+ that approach leads to a great deal of repeated boilerplate in Jamfiles.
+
+ Fortunately, there's a better way. Each project can specify a set of
+ <firstterm>attributes</firstterm>, including requirements:
 
 <programlisting>
 project
@@ -211,11 +208,10 @@
     ;
 
 exe hello : hello.cpp ;
-exe hello2 : hello.cpp ;
-</programlisting>
+exe hello2 : hello.cpp ;</programlisting>
 
- The effect would be as if we specified the same requirement for
- both <filename>hello</filename> and <filename>hello2</filename>.
+ The effect would be as if we specified the same requirement for both
+ <filename>hello</filename> and <filename>hello2</filename>.
       </para>
     </section>
   </section>
@@ -223,17 +219,16 @@
   <section id="bbv2.tutorial.hierarchy">
     <title>Project Hierarchies</title>
 
- <para>So far we've only considered examples with one project
- &#x2014;a. with one user-written Boost.Jam file,
- <filename>Jamroot</filename>). A typical large codebase would be
- composed of many projects organized into a tree. The top of the
- tree is called the <firstterm>project root</firstterm>. Every
- subproject is defined by a file called
- <filename>Jamfile</filename> in a descendant directory of the
- project root. The parent project of a subproject is defined by
- the nearest <filename>Jamfile</filename> or
- <filename>Jamroot</filename> file in an ancestor directory. For
- example, in the following directory layout:
+ <para>
+ So far we have only considered examples with one project &#x2014;a. with
+ one user-written Boost.Jam file, <filename>Jamroot</filename>). A typical
+ large codebase would be composed of many projects organized into a tree.
+ The top of the tree is called the <firstterm>project root</firstterm>.
+ Every subproject is defined by a file called <filename>Jamfile</filename>
+ in a descendant directory of the project root. The parent project of a
+ subproject is defined by the nearest <filename>Jamfile</filename> or
+ <filename>Jamroot</filename> file in an ancestor directory. For example,
+ in the following directory layout:
 
 <screen>
 top/
@@ -253,10 +248,9 @@
        . `-- bar.cpp
 </screen>
 
- the project root is <filename>top/</filename>. The projects in
- <filename>top/app/</filename> and
- <filename>top/util/foo/</filename> are immediate children of the
- root project.
+ the project root is <filename>top/</filename>. The projects in
+ <filename>top/app/</filename> and <filename>top/util/foo/</filename> are
+ immediate children of the root project.
 
       <note>
         <para>
@@ -409,7 +403,7 @@
     <para>
       Second, we modify <filename>app/Jamfile</filename> to use the project id:
       <programlisting>
-exe app : app.cpp /library-example/foo//bar ;<programlisting>
+exe app : app.cpp /library-example/foo//bar ;</programlisting>
 
       The <filename>/library-example/foo//bar</filename> syntax is used to refer
       to the target <filename>bar</filename> in the project with id <filename>
@@ -458,7 +452,7 @@
       <literal>shared</literal>, and to build a static library, the value should
       be <literal>static</literal>. You can request a static build either on the
       command line:
- <programlisting>bjam link=static<programlisting>
+ <programlisting>bjam link=static</programlisting>
       or in the library's requirements:
       <programlisting>lib l : l.cpp : &lt;link&gt;static ;</programlisting>
     </para>
@@ -551,7 +545,6 @@
         <!-- Need ref here to 'testing facilities' -->
       </para>
     </note>
-
   </section>
 
   <section id="bbv2.tutorial.conditions">

Modified: branches/proto/v4/tools/build/v2/kernel/class.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/kernel/class.jam (original)
+++ branches/proto/v4/tools/build/v2/kernel/class.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,16 +1,16 @@
-# Copyright 2001, 2002, 2003 Dave Abrahams
-# Copyright 2002, 2005 Rene Rivera
-# Copyright 2002, 2003 Vladimir Prus
-# 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)
+# Copyright 2001, 2002, 2003 Dave Abrahams
+# Copyright 2002, 2005 Rene Rivera
+# Copyright 2002, 2003 Vladimir Prus
+# 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)
 
 # Polymorphic class system built on top of core Jam facilities.
 #
 # Classes are defined by 'class' keywords::
 #
-# class myclass ( arg1 )
+# class myclass
 # {
-# rule __init__ ( ) # constructor
+# rule __init__ ( arg1 ) # constructor
 # {
 # self.attribute = $(arg1) ;
 # }
@@ -35,7 +35,7 @@
 #
 # Derived class are created by mentioning base classes in the declaration::
 #
-# class derived : myclass
+# class derived : myclass
 # {
 # rule __init__ ( arg )
 # {
@@ -62,13 +62,8 @@
 # base-name.method-name. By convention, attribute names are prefixed with
 # "self.".
 
-import numbers ;
-import errors : * ;
-import set ;
 import modules ;
-import assert ;
-
-classes = ;
+import numbers ;
 
 
 rule xinit ( instance : class )
@@ -77,7 +72,7 @@
     {
         __class__ = $(2) ;
         __name__ = $(1) ;
- }
+ }
 }
 
 
@@ -85,16 +80,16 @@
 {
     .next-instance ?= 1 ;
     local id = object($(class))@$(.next-instance) ;
-
+
     xinit $(id) : $(class) ;
-
+
     INSTANCE $(id) : class@$(class) ;
- IMPORT_MODULE $(id) : ;
+ IMPORT_MODULE $(id) ;
     $(id).__init__ $(args) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
-
- # bump the next unique object name
+
+ # Bump the next unique object name.
     .next-instance = [ numbers.increment $(.next-instance) ] ;
-
+
     # Return the name of the new instance.
     return $(id) ;
 }
@@ -102,11 +97,6 @@
 
 rule bases ( class )
 {
- #if ! ( $(class) in $(classes) )
- #{
- # error class $(class) not defined ;
- #}
-
     module class@$(class)
     {
         return $(__bases__) ;
@@ -116,15 +106,9 @@
 
 rule is-derived ( class : bases + )
 {
- #local all = $(class) $(bases) ;
- #if ! ( $(all) in $(classes) )
- #{
- # error class(es) [ set.difference $(class) $(bases) : $(classes) ] not defined ;
- #}
-
     local stack = $(class) ;
     local visited found ;
- while ( ! $(found) ) && $(stack)
+ while ! $(found) && $(stack)
     {
         local top = $(stack[1]) ;
         stack = $(stack[2-]) ;
@@ -132,7 +116,7 @@
         {
             visited += $(top) ;
             stack += [ bases $(top) ] ;
-
+
             if $(bases) in $(visited)
             {
                 found = true ;
@@ -147,16 +131,16 @@
 #
 rule is-instance ( value )
 {
- return [ MATCH "^(object\\()[^@]+\\)@.*" : $(value) ] ;
+ return [ MATCH "^(object\\()[^@]+\\)@.*" : $(value) ] ;
 }
 
 
 # Check if the given value is of the given type.
 #
 rule is-a (
- instance # The value to check.
- : type # The type to test for.
- )
+ instance # The value to check.
+ : type # The type to test for.
+)
 {
     if [ is-instance $(instance) ]
     {
@@ -175,25 +159,25 @@
 }
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
- import "class" : * ;
     import assert ;
- import errors : * ;
+ import "class" : new ;
 
     # This will be the construction function for a class called 'myclass'.
- class myclass
+ #
+ class myclass
     {
- import assert : nonempty-variable ;
-
+ import assert ;
+
         rule __init__ ( x_ * : y_ * )
- {
- # set some instance variables
+ {
+ # Set some instance variables.
             x = $(x_) ;
             y = $(y_) ;
             foo += 10 ;
         }
-
+
         rule set-x ( newx * )
         {
             x = $(newx) ;
@@ -239,33 +223,34 @@
         {
             return $(__class__) ;
         }
-
+
         rule get-instance ( )
         {
             return $(__name__) ;
         }
-
+
         rule invariant ( )
         {
             assert.equal 1 : 1 ;
- }
-
+ }
+
         rule get-foo ( )
         {
             return $(foo) ;
- }
+ }
     }
 # class myclass ;
 
     class derived1 : myclass
- {
+ {
         rule __init__ ( z_ )
         {
             myclass.__init__ $(z_) : X ;
- z = $(z_) ;
+ z = $(z_) ;
         }
-
- # override g
+
+ # Override g.
+ #
         rule g ( args * )
         {
             return derived1.g ;
@@ -282,47 +267,52 @@
         }
 
         # Check that 'assert.equal' visible in base class is visible here.
+ #
         rule invariant2 ( )
         {
             assert.equal 2 : 2 ;
- }
-
- # Check that 'nonempty-variable' visible in base class is visible here.
+ }
+
+ # Check that 'assert.variable-not-empty' visible in base class is
+ # visible here.
+ #
         rule invariant3 ( )
         {
             local v = 10 ;
- nonempty-variable v ;
- }
+ assert.variable-not-empty v ;
+ }
     }
 # class derived1 : myclass ;
 
- class derived2 : myclass
+ class derived2 : myclass
     {
         rule __init__ ( )
- {
+ {
             myclass.__init__ 1 : 2 ;
         }
-
- # override g
+
+ # Override g.
+ #
         rule g ( args * )
         {
             return derived2.g ;
         }
 
- rule get-x ( )
- {
- # Test the ability to call base class functions with qualification.
- return [ myclass.get-x ] ;
- }
+ # Test the ability to call base class functions with qualification.
+ #
+ rule get-x ( )
+ {
+ return [ myclass.get-x ] ;
+ }
     }
 # class derived2 : myclass ;
 
     class derived2a : derived2
     {
- rule __init__
+ rule __init__
         {
             derived2.__init__ ;
- }
+ }
     }
 # class derived2a : derived2 ;
 
@@ -339,9 +329,9 @@
     expect_derived2 $(e) ;
 
     # Argument checking is set up to call exit(1) directly on failure, and we
- # can't hijack that with try, so we'd better not do this test by default.
- # We could fix this by having errors look up and invoke the EXIT rule
- # instead; EXIT can be hijacked (;-)
+ # can not hijack that with try, so we should better not do this test by
+ # default. We could fix this by having errors look up and invoke the EXIT
+ # rule instead; EXIT can be hijacked (;-)
     if --fail-typecheck in [ modules.peek : ARGV ]
     {
         try ;
@@ -349,11 +339,10 @@
             expect_derived2 $(a) ;
         }
         catch
- "Expected an instance of derived2 but got" instead
- ;
+ "Expected an instance of derived2 but got" instead
+ ;
     }
 
-
     #try ;
     #{
     # new bad_subclass ;
@@ -379,13 +368,13 @@
     assert.result derived1.g : $(b).f ;
     assert.result derived2.g : $(c).f ;
     assert.result derived2.g : $(d).f ;
-
+
     assert.result 10 : $(b).get-foo ;
-
+
     $(a).invariant ;
     $(b).invariant2 ;
     $(b).invariant3 ;
-
+
     # Check that the __class__ attribute is getting properly set.
     assert.result myclass : $(a).get-class ;
     assert.result derived1 : $(b).get-class ;
@@ -400,13 +389,12 @@
     assert.result c.x : $(c).get-x ;
     assert.result d.x : $(d).get-x ;
 
- class derived3 : derived1 derived2
+ class derived3 : derived1 derived2
     {
         rule __init__ ( )
         {
         }
     }
-
 
     assert.result : bases myclass ;
     assert.result myclass : bases derived1 ;

Modified: branches/proto/v4/tools/build/v2/kernel/errors.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/kernel/errors.jam (original)
+++ branches/proto/v4/tools/build/v2/kernel/errors.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -6,6 +6,7 @@
 # Print a stack backtrace leading to this rule's caller. Each argument
 # represents a line of output to be printed after the first line of the
 # backtrace.
+#
 rule backtrace ( skip-frames prefix messages * : * )
 {
     local frame-skips = 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 ;
@@ -71,6 +72,7 @@
 # message matched expectations.
 
 # Begin looking for error messages.
+#
 rule try ( )
 {
     .disabled += true ;
@@ -80,13 +82,14 @@
 
 # Stop looking for error messages; generate an error if an argument of messages
 # is not found in the corresponding argument in the error call.
+#
 rule catch ( messages * : * )
 {
     .disabled = $(.disabled[2-]) ; # Pop the stack.
 
     import sequence ;
 
- if ! $(.last-error-$(.args))-is-nonempty
+ if ! $(.last-error-$(.args))-is-not-empty
     {
         error-skip-frames 3 expected an error, but none occurred ;
     }
@@ -102,7 +105,7 @@
 
                 .last-error-$(.args) = ;
                 error-skip-frames 3 expected \"$(v)\" in argument $(n) of error
- : got \"$(joined)\" instead ;
+ : got \"$(joined)\" instead ;
             }
         }
     }
@@ -134,6 +137,7 @@
 
 
 # Print an error message with a stack backtrace and exit.
+#
 rule error ( messages * : * )
 {
     if $(.no-error-backtrace)
@@ -164,6 +168,7 @@
 
 
 # Same as 'error', but the generated backtrace will include only user files.
+#
 rule user-error ( messages * : * )
 {
     .user-modules-only = 1 ;
@@ -172,6 +177,7 @@
 
 
 # Print a warning message with a stack backtrace and exit.
+#
 rule warning
 {
     backtrace 2 warning: $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
@@ -182,6 +188,7 @@
 # elements representing the same information. This is mostly useful for
 # formatting descriptions of arguments with which a rule was called when
 # reporting an error.
+#
 rule lol->list ( * )
 {
     local result ;
@@ -203,6 +210,7 @@
 
 # Return the file:line for the nearest entry in backtrace which correspond to a
 # user module.
+#
 rule nearest-user-location ( )
 {
     local bt = [ BACKTRACE ] ;

Modified: branches/proto/v4/tools/build/v2/kernel/modules.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/kernel/modules.jam (original)
+++ branches/proto/v4/tools/build/v2/kernel/modules.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -10,22 +10,49 @@
 # dependencies.
 .loading ?= ;
 
-# A list of modules needing to be tested via __test__ rule.
+# A list of modules needing to be tested using their __test__ rule.
 .untested ?= ;
 
-# A list of modules which have been tested via __test__.
+# A list of modules which have been tested using their __test__ rule.
 .tested ?= ;
 
 
-# Meant to be invoked from import when no __test__ rule is defined in the given
-# module.
+# Runs internal Boost Build unit tests for the specified module. The module's
+# __test__ rule is executed in its own module to eliminate any inadvertent
+# effects of testing module dependencies (such as assert) on the module itself.
 #
-local rule no-test-defined
+local rule run-module-test ( m )
 {
- import modules ;
- if ! ( --quiet in [ modules.peek : ARGV ] )
+ local tested-modules = [ modules.peek modules : .tested ] ;
+
+ if ( ! $(m) in $(tested-modules) ) # Avoid recursive test invocations.
+ && ( ( --debug in $(argv) ) || ( --debug-module=$(m) in $(argv) ) )
     {
- ECHO warning: no __test__ rule defined in module $(__module__) ;
+ modules.poke modules : .tested : $(tested-modules) $(m) ;
+
+ if ! ( __test__ in [ RULENAMES $(m) ] )
+ {
+ local argv = [ peek : ARGV ] ;
+ if ! ( --quiet in $(argv) ) && ( --debug-tests in $(argv) )
+ {
+ ECHO warning: no __test__ rule defined in module $(m) ;
+ }
+ }
+ else
+ {
+ if ! ( --quiet in $(argv) )
+ {
+ ECHO testing module $(m)... ;
+ }
+
+ local test-module = __test-$(m)__ ;
+ IMPORT $(m) : [ RULENAMES $(m) ] : $(test-module) : [ RULENAMES $(m) ] ;
+ IMPORT $(m) : __test__ : $(test-module) : __test__ : LOCALIZE ;
+ module $(test-module)
+ {
+ __test__ ;
+ }
+ }
     }
 }
 
@@ -67,7 +94,7 @@
 # Call the given rule locally in the given module. Use this for rules accepting
 # rule names as arguments, so that the passed rule may be invoked in the context
 # of the rule's caller (for example, if the rule accesses module globals or is a
-# local rule). Note that rules called this way may accept at most 8 parmeters.
+# local rule). Note that rules called this way may accept at most 8 parameters.
 #
 rule call-in ( module-name ? : rule-name args * : * )
 {
@@ -81,7 +108,7 @@
 # Given a possibly qualified rule name and arguments, remove any initial module
 # qualification from the rule and invoke it in that module. If there is no
 # module qualification, the rule is invoked in the global module. Note that
-# rules called this way may accept at most 8 parmeters.
+# rules called this way may accept at most 8 parameters.
 #
 rule call-locally ( qualified-rule-name args * : * )
 {
@@ -111,7 +138,7 @@
     {
         filename ?= $(module-name).jam ;
 
- # Mark the module loaded so we don't try to load it recursively.
+ # Mark the module loaded so we do not try to load it recursively.
         .loaded += $(module-name) ;
 
         # Suppress tests if any module loads are already in progress.
@@ -120,7 +147,7 @@
         # Push this module on the loading stack.
         .loading += $(module-name) ;
 
- # Remember that it's untested.
+ # Remember that it is untested.
         .untested += $(module-name) ;
 
         # Insert the new module's __name__ and __file__ globals.
@@ -129,9 +156,6 @@
 
         module $(module-name)
         {
- # Prepare default behavior, in case no __test__ is defined.
- IMPORT modules : no-test-defined : $(__name__) : __test__ ;
-
             # Add some grist so that the module will have a unique target name.
             local module-target = $(__file__:G=module@) ;
 
@@ -150,11 +174,11 @@
         if $(module-name) != modules && ! [ binding $(module-name) ]
         {
             import errors ;
- errors.error "Couldn't find module" $(module-name) in $(search) ;
+ errors.error "Could not find module" $(module-name) in $(search) ;
         }
 
- # Pop the loading stack. Must happen before testing or we'll run into a
- # circular loading dependency.
+ # Pop the loading stack. Must happen before testing or we will run into
+ # a circular loading dependency.
         .loading = $(.loading[1--2]) ;
 
         # Run any pending tests if this is an outer load.
@@ -163,31 +187,7 @@
             local argv = [ peek : ARGV ] ;
             for local m in $(.untested)
             {
- if ( ! $(m) in $(.tested) ) # Avoid recursive test invocations.
- && ( ( --debug in $(argv) ) || ( --debug-module=$(m) in $(argv) ) )
- {
- .tested += $(m) ;
- if ! ( --quiet in $(argv) )
- {
- ECHO testing module $(m)... ;
- }
-
- # Import m's rules into __test-$(m)__ for easy access.
- IMPORT $(m) : [ RULENAMES $(m) ] : __test-$(m)__ : [ RULENAMES $(m) ] ;
-
- # Execute the module's __test__ rule in its own module to
- # eliminate the inadvertent effects of testing module
- # dependencies (such as assert) on the module itself.
- IMPORT $(m) : __test__ : __test-$(m)__ : __test__ : LOCALIZE ;
-
- module __test-$(m)__
- {
- # Set up the name of the module we're testing so that
- # no-test-defined can find it.
- __module__ = $(1) ;
- __test__ ;
- }
- }
+ run-module-test $(m) ;
             }
             .untested = ;
         }
@@ -213,8 +213,8 @@
 
 # Transform each path in the list, with all backslashes converted to forward
 # slashes and all detectable redundancy removed. Something like this is probably
-# needed in path.jam, but I'm not sure of that, I don't understand it, and I'm
-# not ready to move all of path.jam into the kernel.
+# needed in path.jam, but I am not sure of that, I do not understand it, and I
+# am not ready to move all of path.jam into the kernel.
 #
 local rule normalize-raw-paths ( paths * )
 {
@@ -324,7 +324,7 @@
 IMPORT modules : $(globalize) : : modules.$(globalize) ;
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
     import assert ;
     import modules : normalize-raw-paths ;

Modified: branches/proto/v4/tools/build/v2/tools/msvc.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/tools/msvc.jam (original)
+++ branches/proto/v4/tools/build/v2/tools/msvc.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -393,9 +393,9 @@
 
                 setup-$(c) = [ feature.get-values <setup-$(c)> : $(options) ] ;
 
- if ! $(setup-$(c))-is-defined
+ if ! $(setup-$(c))-is-not-empty
                 {
- if $(global-setup)-is-defined
+ if $(global-setup)-is-not-empty
                     {
                         setup-$(c) = $(global-setup) ;
                         
@@ -404,7 +404,7 @@
                         # global setup command for which target platform:
                         # setup-options = [ feature.get-values <setup-options-$(c)> : $(options) ] ;
 
- setup-options ?= default-global-setup-options-$(c) ;
+ setup-options ?= $(default-global-setup-options-$(c)) ;
                     }
                     else
                     {

Modified: branches/proto/v4/tools/build/v2/tools/stage.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/tools/stage.jam (original)
+++ branches/proto/v4/tools/build/v2/tools/stage.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -56,7 +56,6 @@
         if ! $(loc)
         {
             loc = [ path.root $(self.name) [ $(self.project).get location ] ] ;
-
             property-set = [ $(property-set).add-raw $(loc:G=<location>) ] ;
         }
 
@@ -76,7 +75,7 @@
             ps-raw = [ $(ps).raw ] ;
 
             # Unless <hardcode-dll-paths>true is in properties, which can happen
- # only if the user has explicitly requested it, nuke all.
+ # only if the user has explicitly requested it, nuke all
             # <dll-path> properties
             if [ $(property-set).get <hardcode-dll-paths> ] != true
             {
@@ -158,7 +157,7 @@
             {
                 if $(ename)
                 {
- errors.error "In 'install': <name> property specified with target that requires relinking" ;
+ errors.error "In 'install': <name> property specified with target that requires relinking." ;
                 }
                 else
                 {
@@ -200,7 +199,7 @@
             source-targets = [ collect-targets $(source-targets) ] ;
         }
 
- # Filter the target types, if needed
+ # Filter the target types, if needed.
         local included-types = [ $(property-set).get <install-type> ] ;
         for local r in $(source-targets)
         {
@@ -234,7 +233,7 @@
         return $(result) ;
     }
 
- # CONSIDER: figure out why we can't use virtual-target.traverse here.
+ # CONSIDER: figure out why we can not use virtual-target.traverse here.
     #
     rule collect-targets ( targets * )
     {

Modified: branches/proto/v4/tools/build/v2/util/assert.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/assert.jam (original)
+++ branches/proto/v4/tools/build/v2/util/assert.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,119 +1,205 @@
-# Copyright 2001, 2002, 2003 Dave Abrahams
-# Copyright 2006 Rene Rivera
-# Copyright 2002, 2003 Vladimir Prus
-# 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)
+# Copyright 2001, 2002, 2003 Dave Abrahams
+# Copyright 2006 Rene Rivera
+# Copyright 2002, 2003 Vladimir Prus
+# 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)
 
-import errors : error-skip-frames lol->list ;
+import errors ;
 import modules ;
 
 
-# Assert the equality of A and B.
+################################################################################
+#
+# Private implementation details.
+#
+################################################################################
+
+# Rule added as a replacement for the regular Jam = operator but which does not
+# ignore trailing empty string elements.
+#
+local rule exact-equal-test ( lhs * : rhs * )
+{
+ local lhs_extended = $(lhs) xxx ;
+ local rhs_extended = $(rhs) xxx ;
+ if $(lhs_extended) = $(rhs_extended)
+ {
+ return true ;
+ }
+}
+
+
+# Two lists are considered set-equal if they contain the same elements, ignoring
+# duplicates and ordering.
+#
+local rule set-equal-test ( set1 * : set2 * )
+{
+ if ( $(set1) in $(set2) ) && ( $(set2) in $(set1) )
+ {
+ return true ;
+ }
+}
+
+
+################################################################################
+#
+# Public interface.
+#
+################################################################################
+
+# Assert the equality of A and B, ignoring trailing empty string elements.
 #
 rule equal ( a * : b * )
 {
     if $(a) != $(b)
     {
- error-skip-frames 3 assertion failure: \"$(a)\" "!=" \"$(b)\" ;
+ errors.error-skip-frames 3 assertion failure: \"$(a)\" "==" \"$(b)\"
+ (ignoring trailing empty strings) ;
     }
 }
 
 
-# Assert that EXPECTED is the result of calling RULE-NAME with the given
-# arguments.
+# Assert that the result of calling RULE-NAME on the given arguments has a false
+# logical value (is either an empty list or all empty strings).
 #
-rule result ( expected * : rule-name args * : * )
+rule false ( rule-name args * : * )
 {
     local result ;
     module [ CALLER_MODULE ]
     {
- modules.poke assert : result
- : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
+ modules.poke assert : result : [ $(1) : $(2) : $(3) : $(4) : $(5) : $(6)
+ : $(7) : $(8) : $(9) ] ;
     }
 
- if $(result) != $(expected)
+ if $(result)
     {
- error-skip-frames 3 assertion failure: "[" $(rule-name)
- [ lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ]
- "]"
- : expected: \"$(expected)\"
- : got: \"$(result)\" ;
+ errors.error-skip-frames 3 assertion failure: Expected false result from
+ "[" $(rule-name) [ errors.lol->list $(args) : $(2) : $(3) : $(4) :
+ $(5) : $(6) : $(7) : $(8) : $(9) ] "]" : Got: "[" \"$(result)\" "]" ;
     }
 }
 
 
-rule .set.equal ( set1 * : set2 * )
+# Assert that ELEMENT is present in LIST.
+#
+rule "in" ( element : list * )
 {
- if ( $(set1) in $(set2) ) && ( $(set2) in $(set1) )
+ if ! $(element) in $(list)
     {
- return true ;
+ errors.error-skip-frames 3 assertion failure: Expected \"$(element)\" in
+ "[" \"$(list)\" "]" ;
     }
 }
 
 
-# Assert that EXPECTED is equal to the result of calling RULE-NAME with the
-# given arguments.
+# Assert the inequality of A and B, ignoring trailing empty string elements.
 #
-rule result-equal ( expected * : rule-name args * : * )
+rule not-equal ( a * : b * )
 {
- local result ;
- module [ CALLER_MODULE ]
+ if $(a) = $(b)
     {
- modules.poke assert : result
- : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
+ errors.error-skip-frames 3 assertion failure: \"$(a)\" "!=" \"$(b)\"
+ (ignoring trailing empty strings) ;
     }
+}
+
 
- if ! [ .set.equal $(result) : $(expected) ]
+# Assert that ELEMENT is not present in LIST.
+#
+rule not-in ( element : list * )
+{
+ if $(element) in $(list)
     {
- error-skip-frames 3 assertion failure: "[" $(rule-name)
- [ lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ]
- "]"
- : expected: \"$(expected)\"
- : got: \"$(result)\" ;
+ errors.error-skip-frames 3 assertion failure: Did not expect
+ \"$(element)\" in "[" \"$(list)\" "]" ;
     }
 }
 
 
-# Assert that the given variable is nonempty.
+# Assert the inequality of A and B as sets.
 #
-rule nonempty-variable ( name )
+rule not-set-equal ( a * : b * )
 {
- local value = [ modules.peek [ CALLER_MODULE ] : $(name) ] ;
+ if [ set-equal-test $(a) : $(b) ]
+ {
+ errors.error-skip-frames 3 assertion failure: Expected "[" \"$(a)\" "]"
+ and "[" \"$(b)\" "]" to not be equal as sets ;
+ }
+}
+
 
- if ! $(value)-is-nonempty
+# Assert that A and B are not exactly equal, not ignoring trailing empty string
+# elements.
+#
+rule not-exact-equal ( a * : b * )
+{
+ if [ exact-equal-test $(a) : $(b) ]
     {
- error-skip-frames 3 assertion failure: expecting non-empty variable $(variable) ;
+ errors.error-skip-frames 3 assertion failure: \"$(a)\" "!=" \"$(b)\" ;
     }
 }
 
 
-# Assert that the result of calling RULE-NAME on the given arguments has a true
-# logical value (is neither an empty list nor all empty strings).
+# Assert that EXPECTED is the result of calling RULE-NAME with the given
+# arguments.
 #
-rule true ( rule-name args * : * )
+rule result ( expected * : rule-name args * : * )
 {
     local result ;
     module [ CALLER_MODULE ]
     {
- modules.poke assert : result
- : [ $(1) : $(2) : $(3) : $(4)
- : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
+ modules.poke assert : result : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7)
+ : $(8) : $(9) ] ;
     }
 
- if ! $(result)
+ if ! [ exact-equal-test $(result) : $(expected) ]
     {
- error-skip-frames 3 assertion failure: expecting true result from
- "[" $(rule-name)
- [ lol->list $(args) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ]
- "]" ;
+ errors.error-skip-frames 3 assertion failure: "[" $(rule-name) [
+ errors.lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) :
+ $(9) ] "]" : Expected: "[" \"$(expected)\" "]" : Got: "["
+ \"$(result)\" "]" ;
     }
 }
 
 
-# Assert that the result of calling RULE-NAME on the given arguments has a false
-# logical value (is either an empty list or all empty strings).
+# Assert that EXPECTED is set-equal (i.e. duplicates and ordering are ignored)
+# to the result of calling RULE-NAME with the given arguments. Note that rules
+# called this way may accept at most 8 parameters.
 #
-rule false ( rule-name args * : * )
+rule result-set-equal ( expected * : rule-name args * : * )
+{
+ local result ;
+ module [ CALLER_MODULE ]
+ {
+ modules.poke assert : result : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7)
+ : $(8) : $(9) ] ;
+ }
+
+ if ! [ set-equal-test $(result) : $(expected) ]
+ {
+ errors.error-skip-frames 3 assertion failure: "[" $(rule-name) [
+ errors.lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) :
+ $(9) ] "]" : Expected: "[" \"$(expected)\" "]" : Got: "["
+ \"$(result)\" "]" ;
+ }
+}
+
+
+# Assert the equality of A and B as sets.
+#
+rule set-equal ( a * : b * )
+{
+ if ! [ set-equal-test $(a) : $(b) ]
+ {
+ errors.error-skip-frames 3 assertion failure: Expected "[" \"$(a)\" "]"
+ and "[" \"$(b)\" "]" to be equal as sets ;
+ }
+}
+
+
+# Assert that the result of calling RULE-NAME on the given arguments has a true
+# logical value (is neither an empty list nor all empty strings).
+#
+rule true ( rule-name args * : * )
 {
     local result ;
     module [ CALLER_MODULE ]
@@ -122,35 +208,129 @@
             : $(7) : $(8) : $(9) ] ;
     }
 
- if $(result)
+ if ! $(result)
     {
- error-skip-frames 3 assertion failure: expecting false result from
- "[" $(rule-name) [ lol->list $(args) : $(2) : $(3) : $(4) : $(5) :
- $(6) : $(7) : $(8) : $(9) ] "]" : got [ lol->list $(result) ]
- instead ;
+ errors.error-skip-frames 3 assertion failure: Expected true result from
+ "[" $(rule-name) [ errors.lol->list $(args) : $(2) : $(3) : $(4) :
+ $(5) : $(6) : $(7) : $(8) : $(9) ] "]" ;
     }
 }
 
 
-# Assert that 'element' is present in 'list'.
+# Assert the exact equality of A and B, not ignoring trailing empty string
+# elements.
 #
-rule "in" ( element : list * )
+rule exact-equal ( a * : b * )
 {
- if ! $(element) in $(list)
+ if ! [ exact-equal-test $(a) : $(b) ]
     {
- error-skip-frames 3 assertion failure: expecting $(element) in
- "[" $(list) "]" ;
+ errors.error-skip-frames 3 assertion failure: \"$(a)\" "==" \"$(b)\" ;
     }
 }
 
 
-# Assert that 'element' is not present in 'list'.
+# Assert that the given variable is not an empty list.
 #
-rule not-in ( element : list * )
+rule variable-not-empty ( name )
 {
- if $(element) in $(list)
+ local value = [ modules.peek [ CALLER_MODULE ] : $(name) ] ;
+ if ! $(value)-is-not-empty
     {
- error-skip-frames 3 assertion failure: did not expect $(element) in
- "[" $(list) "]" ;
+ errors.error-skip-frames 3 assertion failure: Expected variable
+ \"$(name)\" not to be an empty list ;
     }
 }
+
+
+rule __test__ ( )
+{
+ # Helper rule used to avoid test duplication related to different list
+ # equality test rules.
+ #
+ local rule run-equality-test ( equality-assert : ignore-trailing-empty-strings ? )
+ {
+ local not-equality-assert = not-$(equality-assert) ;
+
+ # When the given equality test is expected to ignore trailing empty
+ # strings some of the test results should be inverted.
+ local not-equality-assert-i = not-$(equality-assert) ;
+ if $(ignore-trailing-empty-strings)
+ {
+ not-equality-assert-i = $(equality-assert) ;
+ }
+
+ $(equality-assert) : ;
+ $(equality-assert) "" "" : "" "" ;
+ $(not-equality-assert-i) : "" "" ;
+ $(equality-assert) x : x ;
+ $(not-equality-assert) : x ;
+ $(not-equality-assert) "" : x ;
+ $(not-equality-assert) "" "" : x ;
+ $(not-equality-assert-i) x : x "" ;
+ $(equality-assert) x "" : x "" ;
+ $(not-equality-assert) x : "" x ;
+ $(equality-assert) "" x : "" x ;
+
+ $(equality-assert) 1 2 3 : 1 2 3 ;
+ $(not-equality-assert) 1 2 3 : 3 2 1 ;
+ $(not-equality-assert) 1 2 3 : 1 5 3 ;
+ $(not-equality-assert) 1 2 3 : 1 "" 3 ;
+ $(not-equality-assert) 1 2 3 : 1 1 2 3 ;
+ $(not-equality-assert) 1 2 3 : 1 2 2 3 ;
+ $(not-equality-assert) 1 2 3 : 5 6 7 ;
+
+ # Extra variables used here just to make sure Boost Jam or Boost Build
+ # do not handle lists with empty strings differently depending on
+ # whether they are literals or stored in variables.
+
+ local empty = ;
+ local empty-strings = "" "" ;
+ local x-empty-strings = x "" "" ;
+ local empty-strings-x = "" "" x ;
+
+ $(equality-assert) : $(empty) ;
+ $(not-equality-assert-i) "" : $(empty) ;
+ $(not-equality-assert-i) "" "" : $(empty) ;
+ $(not-equality-assert-i) : $(empty-strings) ;
+ $(not-equality-assert-i) "" : $(empty-strings) ;
+ $(equality-assert) "" "" : $(empty-strings) ;
+ $(equality-assert) $(empty) : $(empty) ;
+ $(equality-assert) $(empty-strings) : $(empty-strings) ;
+ $(not-equality-assert-i) $(empty) : $(empty-strings) ;
+ $(equality-assert) $(x-empty-strings) : $(x-empty-strings) ;
+ $(equality-assert) $(empty-strings-x) : $(empty-strings-x) ;
+ $(not-equality-assert) $(empty-strings-x) : $(x-empty-strings) ;
+ $(not-equality-assert-i) x : $(x-empty-strings) ;
+ $(not-equality-assert) x : $(empty-strings-x) ;
+ $(not-equality-assert-i) x : $(x-empty-strings) ;
+ $(not-equality-assert-i) x "" : $(x-empty-strings) ;
+ $(equality-assert) x "" "" : $(x-empty-strings) ;
+ $(not-equality-assert) x : $(empty-strings-x) ;
+ $(not-equality-assert) "" x : $(empty-strings-x) ;
+ $(equality-assert) "" "" x : $(empty-strings-x) ;
+ }
+
+
+ # ---------------
+ # Equality tests.
+ # ---------------
+
+ run-equality-test equal : ignore-trailing-empty-strings ;
+ run-equality-test exact-equal ;
+
+
+ # -------------------------
+ # assert.set-equal() tests.
+ # -------------------------
+
+ set-equal : ;
+ not-set-equal "" "" : ;
+ set-equal "" "" : "" ;
+ set-equal "" "" : "" "" ;
+ set-equal a b c : a b c ;
+ set-equal a b c : b c a ;
+ set-equal a b c a : a b c ;
+ set-equal a b c : a b c a ;
+ not-set-equal a b c : a b c d ;
+ not-set-equal a b c d : a b c ;
+}

Modified: branches/proto/v4/tools/build/v2/util/container.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/container.jam (original)
+++ branches/proto/v4/tools/build/v2/util/container.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -1,33 +1,31 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2002, 2003 Rene Rivera
-# Copyright 2002, 2003, 2004 Vladimir Prus
-# 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)
+# Copyright 2003 Dave Abrahams
+# Copyright 2002, 2003 Rene Rivera
+# Copyright 2002, 2003, 2004 Vladimir Prus
+# 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)
 
 # Various container classes.
 
-import "class" : * ;
-
-# Base for container objects. This lets us construct recursive structures.
-# That is containers with containers in them, specifically so we can tell
-# literal values from node values.
+# Base for container objects. This lets us construct recursive structures. That
+# is containers with containers in them, specifically so we can tell literal
+# values from node values.
 #
-class node
+class node
 {
     rule __init__ (
- value ? # Optional value to set node to initially.
+ value ? # Optional value to set node to initially.
     )
     {
         self.value = $(value) ;
     }
-
+
     # Set the value of this node, passing nothing will clear it.
     #
     rule set ( value * )
     {
         self.value = $(value) ;
     }
-
+
     # Get the value of this node.
     #
     rule get ( )
@@ -37,49 +35,49 @@
 }
 
 
-# A simple vector. Interface mimics the C++ std::vector and std::list,
-# with the exception that indices are one (1) based to follow Jam standard.
+# A simple vector. Interface mimics the C++ std::vector and std::list, with the
+# exception that indices are one (1) based to follow Jam standard.
 #
 # TODO: Possibly add assertion checks.
 #
-class vector : node
+class vector : node
 {
- import numbers : range ;
+ import numbers ;
     import utility ;
     import sequence ;
-
+
     rule __init__ (
- values * # Initial contents of vector.
+ values * # Initial contents of vector.
     )
     {
         node.__init__ ;
         self.value = $(values) ;
- }
-
+ }
+
     # Get the value of the first element.
     #
     rule front ( )
     {
         return $(self.value[1]) ;
     }
-
+
     # Get the value of the last element.
     #
     rule back ( )
     {
         return $(self.value[-1]) ;
     }
-
- # Get the value of the element at the given index, one based.
- # Access to elements of recursive structures is supported directly.
- # Specifying additional index values recursively accesses the elements as
- # containers. For example: [ $(v).at 1 : 2 ] would retrieve the second element
- # of our first element. This assuming the first element is a container.
+
+ # Get the value of the element at the given index, one based. Access to
+ # elements of recursive structures is supported directly. Specifying
+ # additional index values recursively accesses the elements as containers.
+ # For example: [ $(v).at 1 : 2 ] would retrieve the second element of our
+ # first element, assuming the first element is a container.
     #
     rule at (
- index # The element index, one based.
- : * # Additional indices to access recursively.
- )
+ index # The element index, one based.
+ : * # Additional indices to access recursively.
+ )
     {
         local r = $(self.value[$(index)]) ;
         if $(2)
@@ -88,15 +86,15 @@
         }
         return $(r) ;
     }
-
+
     # Get the value contained in the given element. This has the same
- # functionality and interface as "at" but in addition gets the value
- # of the referenced element, assuming it's a "node".
+ # functionality and interface as "at" but in addition gets the value of the
+ # referenced element, assuming it is a "node".
     #
     rule get-at (
- index # The element index, one based.
- : * # Additional indices to access recursively.
- )
+ index # The element index, one based.
+ : * # Additional indices to access recursively.
+ )
     {
         local r = $(self.value[$(index)]) ;
         if $(2)
@@ -105,64 +103,68 @@
         }
         return [ $(r).get ] ;
     }
-
- # Insert the given value into the front of the vector pushing the
- # rest of the elements back.
+
+ # Insert the given value into the front of the vector pushing the rest of
+ # the elements back.
     #
     rule push-front (
- value # Value to become first element.
- )
+ value # Value to become first element.
+ )
     {
         self.value = $(value) $(self.value) ;
     }
-
- # Remove the front element from the vector. Does not return the value.
- # No effect if vector is empty.
+
+ # Remove the front element from the vector. Does not return the value. No
+ # effect if vector is empty.
     #
     rule pop-front ( )
     {
         self.value = $(self.value[2-]) ;
     }
-
+
     # Add the given value at the end of the vector.
     #
     rule push-back (
- value # Value to become back element.
- )
+ value # Value to become back element.
+ )
     {
         self.value += $(value) ;
     }
-
- # Remove the back element from the vector. Does not return the value.
- # No effect if vector is empty.
+
+ # Remove the back element from the vector. Does not return the value. No
+ # effect if vector is empty.
     #
     rule pop-back ( )
     {
         self.value = $(self.value[1--2]) ;
     }
-
- # Insert the given value at the given index, one based. The values
- # at and to the right of the of the index are push back to make room
- # for the new value.
+
+ # Insert the given value at the given index, one based. The values at and to
+ # the right of the index are pushed back to make room for the new value.
+ # If the index is passed the end of the vector the element is added to the
+ # end.
     #
     rule insert (
- index # The index to insert at, one based.
- : value # The value to insert.
- )
+ index # The index to insert at, one based.
+ : value # The value to insert.
+ )
     {
         local left = $(self.value[1-$(index)]) ;
- left = $(left[1--2]) ;
         local right = $(self.value[$(index)-]) ;
+ if $(right)-is-not-empty
+ {
+ left = $(left[1--2]) ;
+ }
         self.value = $(left) $(value) $(right) ;
     }
-
- # Remove one or more elements from the vector. The range is inclusive,
- # and not specifying an end is equivalent to the [start,start] range.
+
+ # Remove one or more elements from the vector. The range is inclusive, and
+ # not specifying an end is equivalent to the [start, start] range.
     #
     rule erase (
- start # Index of first element ro remove.
- end ? # Optional, index of last element to remove.
- )
+ start # Index of first element to remove.
+ end ? # Optional, index of last element to remove.
+ )
     {
         end ?= $(start) ;
         local left = $(self.value[1-$(start)]) ;
@@ -171,144 +173,167 @@
         right = $(right[2-]) ;
         self.value = $(left) $(right) ;
     }
-
+
     # Remove all elements from the vector.
     #
     rule clear ( )
     {
         self.value = ;
     }
-
+
     # The number of elements in the vector.
     #
     rule size ( )
     {
         return [ sequence.length $(self.value) ] ;
     }
-
- # Returns "true" if there are NO elements in the vector, empty
- # otherwise.
+
+ # Returns "true" if there are NO elements in the vector, empty otherwise.
     #
     rule empty ( )
     {
- if ! $(self.value)
+ if ! $(self.value)-is-not-empty
         {
             return true ;
         }
     }
 
- # Returns the list of all valid indices for this vector.
- rule indices ( )
- {
- if ! [ empty ]
- {
- local size = [ size ] ;
- return [ range 1 : $(size) ] $(size) ;
- }
- }
-
     # Returns the textual representation of content.
+ #
     rule str ( )
     {
         return "[" [ sequence.transform utility.str : $(self.value) ] "]" ;
     }
 
- # Sorts the vector inplace, calling 'utility.less' for
- # comparisons.
- # NOTE: this rule is unused at the moment.
+ # Sorts the vector inplace, calling 'utility.less' for comparisons.
+ #
     rule sort ( )
     {
- self.value =
- [ sequence.insertion-sort $(self.value) : utility.less ] ;
+ self.value = [ sequence.insertion-sort $(self.value) : utility.less ] ;
     }
 
- # Returns true if content is equal to the content of other vector.
- # Uses 'utility.equal' for comparison.
+ # Returns true if content is equal to the content of other vector. Uses
+ # 'utility.equal' for comparison.
+ #
     rule equal ( another )
- {
+ {
         local mismatch ;
- if [ size ] = [ $(another).size ]
+ local size = [ size ] ;
+ if $(size) = [ $(another).size ]
         {
- for local i in [ indices ]
+ for local i in [ numbers.range 1 $(size) ]
             {
                 if ! [ utility.equal [ at $(i) ] [ $(another).at $(i) ] ]
                 {
                     mismatch = true ;
                 }
             }
- }
+ }
         else
         {
             mismatch = true ;
         }
-
- if ! $(mismatch)
+
+ if ! $(mismatch)
         {
             return true ;
         }
     }
 }
 
-local rule __test__ ( )
+
+rule __test__ ( )
 {
     import assert ;
     import "class" : new ;
-
- local l = [ new vector ] ;
- assert.result 0 : $(l).size ;
- assert.result : $(l).indices ;
- assert.result "[" "]" : $(l).str ;
- $(l).push-back b ;
- $(l).push-front a ;
- assert.result 1 2 : $(l).indices ;
- assert.result "[" a b "]" : $(l).str ;
- assert.result a : $(l).front ;
- assert.result b : $(l).back ;
- $(l).insert 2 : d ;
- $(l).insert 2 : c ;
- $(l).insert 4 : f ;
- $(l).insert 4 : e ;
- $(l).pop-back ;
- assert.result 5 : $(l).size ;
- assert.result d : $(l).at 3 ;
- $(l).pop-front ;
- assert.result c : $(l).front ;
- assert.false $(l).empty ;
- $(l).erase 3 4 ;
- assert.result 2 : $(l).size ;
-
- local l2 = [ new vector q w e r t y ] ;
- assert.result 6 : $(l2).size ;
- $(l).push-back $(l2) ;
- assert.result 3 : $(l).size ;
- local l2-alias = [ $(l).back ] ;
- assert.result e : $(l2-alias).at 3 ;
- $(l).clear ;
- assert.true $(l).empty ;
- assert.false $(l2-alias).empty ;
- $(l2).pop-back ;
- assert.result t : $(l2-alias).back ;
-
- local l3 = [ new vector ] ;
- $(l3).push-back [ new vector 1 2 3 4 5 ] ;
- $(l3).push-back [ new vector a b c ] ;
- assert.result "[" "[" 1 2 3 4 5 "]" "[" a b c "]" "]" : $(l3).str ;
- $(l3).push-back [ new vector [ new vector x y z ] [ new vector 7 8 9 ] ] ;
- assert.result 1 : $(l3).at 1 : 1 ;
- assert.result b : $(l3).at 2 : 2 ;
- assert.result a b c : $(l3).get-at 2 ;
- assert.result 7 8 9 : $(l3).get-at 3 : 2 ;
-
- local l4 = [ new vector 4 3 6 ] ;
- $(l4).sort ;
- assert.result 3 4 6 : $(l4).get ;
-
- assert.false $(l4).equal $(l3) ;
- local l5 = [ new vector 3 4 6 ] ;
- assert.true $(l4).equal $(l5) ;
- # Check that vectors of different sizes are considered non-equal
- $(l5).pop-back ;
- assert.false $(l4).equal $(l5) ;
- local l6 = [ new vector [ new vector 1 2 3 ] ] ;
- assert.true $(l6).equal [ new vector [ new vector 1 2 3 ] ] ;
+
+ local v1 = [ new vector ] ;
+ assert.true $(v1).equal $(v1) ;
+ assert.true $(v1).empty ;
+ assert.result 0 : $(v1).size ;
+ assert.result "[" "]" : $(v1).str ;
+ $(v1).push-back b ;
+ $(v1).push-front a ;
+ assert.result "[" a b "]" : $(v1).str ;
+ assert.result a : $(v1).front ;
+ assert.result b : $(v1).back ;
+ $(v1).insert 2 : d ;
+ $(v1).insert 2 : c ;
+ $(v1).insert 4 : f ;
+ $(v1).insert 4 : e ;
+ $(v1).pop-back ;
+ assert.result 5 : $(v1).size ;
+ assert.result d : $(v1).at 3 ;
+ $(v1).pop-front ;
+ assert.result c : $(v1).front ;
+ assert.false $(v1).empty ;
+ $(v1).erase 3 4 ;
+ assert.result 2 : $(v1).size ;
+
+ local v2 = [ new vector q w e r t y ] ;
+ assert.result 6 : $(v2).size ;
+ $(v1).push-back $(v2) ;
+ assert.result 3 : $(v1).size ;
+ local v2-alias = [ $(v1).back ] ;
+ assert.result e : $(v2-alias).at 3 ;
+ $(v1).clear ;
+ assert.true $(v1).empty ;
+ assert.false $(v2-alias).empty ;
+ $(v2).pop-back ;
+ assert.result t : $(v2-alias).back ;
+
+ local v3 = [ new vector ] ;
+ $(v3).push-back [ new vector 1 2 3 4 5 ] ;
+ $(v3).push-back [ new vector a b c ] ;
+ assert.result "[" "[" 1 2 3 4 5 "]" "[" a b c "]" "]" : $(v3).str ;
+ $(v3).push-back [ new vector [ new vector x y z ] [ new vector 7 8 9 ] ] ;
+ assert.result 1 : $(v3).at 1 : 1 ;
+ assert.result b : $(v3).at 2 : 2 ;
+ assert.result a b c : $(v3).get-at 2 ;
+ assert.result 7 8 9 : $(v3).get-at 3 : 2 ;
+
+ local v4 = [ new vector 4 3 6 ] ;
+ $(v4).sort ;
+ assert.result 3 4 6 : $(v4).get ;
+ assert.false $(v4).equal $(v3) ;
+
+ local v5 = [ new vector 3 4 6 ] ;
+ assert.true $(v4).equal $(v5) ;
+ # Check that vectors of different sizes are considered non-equal.
+ $(v5).pop-back ;
+ assert.false $(v4).equal $(v5) ;
+
+ local v6 = [ new vector [ new vector 1 2 3 ] ] ;
+ assert.true $(v6).equal [ new vector [ new vector 1 2 3 ] ] ;
+
+ local v7 = [ new vector 111 222 333 ] ;
+ assert.true $(v7).equal $(v7) ;
+ $(v7).insert 4 : 444 ;
+ assert.result 111 222 333 444 : $(v7).get ;
+ $(v7).insert 999 : xxx ;
+ assert.result 111 222 333 444 xxx : $(v7).get ;
+
+ local v8 = [ new vector "" "" "" ] ;
+ assert.true $(v8).equal $(v8) ;
+ assert.false $(v8).empty ;
+ assert.result 3 : $(v8).size ;
+ assert.result "" : $(v8).at 1 ;
+ assert.result "" : $(v8).at 2 ;
+ assert.result "" : $(v8).at 3 ;
+ assert.result : $(v8).at 4 ;
+ $(v8).insert 2 : 222 ;
+ assert.result 4 : $(v8).size ;
+ assert.result "" 222 "" "" : $(v8).get ;
+ $(v8).insert 999 : "" ;
+ assert.result 5 : $(v8).size ;
+ assert.result "" 222 "" "" "" : $(v8).get ;
+ $(v8).insert 999 : xxx ;
+ assert.result 6 : $(v8).size ;
+ assert.result "" 222 "" "" "" xxx : $(v8).get ;
+
+ # Regression test for a bug causing vector.equal to compare only the first
+ # and the last element in the given vectors.
+ local v9 = [ new vector 111 xxx 222 ] ;
+ local v10 = [ new vector 111 yyy 222 ] ;
+ assert.false $(v9).equal $(v10) ;
 }

Modified: branches/proto/v4/tools/build/v2/util/doc.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/doc.jam (original)
+++ branches/proto/v4/tools/build/v2/util/doc.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -17,6 +17,7 @@
 import sequence ;
 import path ;
 
+
 # The type of output to generate.
 # "console" is formated text echoed to the console (the default);
 # "text" is formated text appended to the output file;
@@ -24,9 +25,10 @@
 #
 help-output = console ;
 
-# The file to output documentation to when generating "text" or "html"
-# help. This is without extension as the extension is determined by the
-# type of output.
+
+# The file to output documentation to when generating "text" or "html" help.
+# This is without extension as the extension is determined by the type of
+# output.
 #
 help-output-file = help ;
 
@@ -39,45 +41,43 @@
 #
 .option.detailed ?= ;
 
-# Generate debug output as the help is generated and modules
-# are parsed.
+# Generate debug output as the help is generated and modules are parsed.
 #
 .option.debug ?= ;
 
 # Enable or disable a documentation option.
 #
 local rule set-option (
- option # The option name.
- : value ? # Enabled (non-empty), or disabled (empty)
- )
+ option # The option name.
+ : value ? # Enabled (non-empty), or disabled (empty)
+)
 {
     .option.$(option) = $(value) ;
 }
 
+
 # Set the type of output.
 #
-local rule set-output (
- type
- )
+local rule set-output ( type )
 {
     help-output = $(type) ;
 }
 
+
 # Set the output to a file.
 #
-local rule set-output-file (
- file
- )
+local rule set-output-file ( file )
 {
     help-output-file = $(file) ;
 }
 
-# Extracts the brief comment from a complete comment. The brief
-# comment is the first sentence.
+
+# Extracts the brief comment from a complete comment. The brief comment is the
+# first sentence.
 #
 local rule brief-comment (
- docs * # The comment documentation.
- )
+ docs * # The comment documentation.
+)
 {
     local d = $(docs:J=" ") ;
     local p = [ MATCH ".*([.])$" : $(d) ] ;
@@ -93,12 +93,13 @@
     return $(brief:J="") ;
 }
 
+
 # Specifies the documentation for the current module.
 #
 local rule set-module-doc (
- module-name ? # The name of the module to document.
- : docs * # The documentation for the module.
- )
+ module-name ? # The name of the module to document.
+ : docs * # The documentation for the module.
+)
 {
     module-name ?= * ;
 
@@ -111,12 +112,13 @@
     }
 }
 
+
 # Specifies the documentation for the current module.
 #
 local rule set-module-copyright (
- module-name ? # The name of the module to document.
- : copyright * # The copyright for the module.
- )
+ module-name ? # The name of the module to document.
+ : copyright * # The copyright for the module.
+)
 {
     module-name ?= * ;
 
@@ -129,15 +131,16 @@
     }
 }
 
-# Specifies the documentation for a rule in the current module.
-# If called in the global module, this documents a global rule.
+
+# Specifies the documentation for a rule in the current module. If called in the
+# global module, this documents a global rule.
 #
 local rule set-rule-doc (
- name # The name of the rule.
- module-name ? # The name of the module to document.
- is-local ? # Whether the rule is local to the module.
- : docs * # The documentation for the rule.
- )
+ name # The name of the rule.
+ module-name ? # The name of the module to document.
+ is-local ? # Whether the rule is local to the module.
+ : docs * # The documentation for the rule.
+)
 {
     module-name ?= * ;
 
@@ -151,13 +154,14 @@
     }
 }
 
+
 # Specify a class, will turn a rule into a class.
 #
 local rule set-class-doc (
- name # The name of the class.
- module-name ? # The name of the module to document.
- : super-name ? # The super class name.
- )
+ name # The name of the class.
+ module-name ? # The name of the module to document.
+ : super-name ? # The super class name.
+)
 {
     module-name ?= * ;
 
@@ -174,28 +178,30 @@
             $(name) $($(module-name).$(name).class-rules) ] ;
 }
 
+
 # Set the argument call signature of a rule.
 #
 local rule set-rule-arguments-signature (
- name # The name of the rule.
- module-name ? # The name of the module to document.
- : signature * # The arguments signature.
- )
+ name # The name of the rule.
+ module-name ? # The name of the module to document.
+ : signature * # The arguments signature.
+)
 {
     module-name ?= * ;
 
     $(module-name).$(name).signature = $(signature) ;
 }
 
+
 # Specifies the documentation for an argument of a rule.
 #
 local rule set-argument-doc (
- name # The name of the argument.
- qualifier # Argument syntax qualifier, "*", "+", etc.
- rule-name # The name of the rule.
- module-name ? # THe optional name of the module.
- : docs * # The documentation.
- )
+ name # The name of the argument.
+ qualifier # Argument syntax qualifier, "*", "+", etc.
+ rule-name # The name of the rule.
+ module-name ? # THe optional name of the module.
+ : docs * # The documentation.
+)
 {
     module-name ?= * ;
 
@@ -208,16 +214,17 @@
     }
 }
 
-# Specifies the documentation for a variable in the current module.
-# If called in the global module, the global variable is documented.
+
+# Specifies the documentation for a variable in the current module. If called in
+# the global module, the global variable is documented.
 #
 local rule set-variable-doc (
- name # The name of the variable.
- default # The default value.
- initial # The initial value.
- module-name ? # The name of the module to document.
- : docs * # The documentation for the variable.
- )
+ name # The name of the variable.
+ default # The default value.
+ initial # The initial value.
+ module-name ? # The name of the module to document.
+ : docs * # The documentation for the variable.
+)
 {
     module-name ?= * ;
 
@@ -232,6 +239,7 @@
     }
 }
 
+
 # Generates a general description of the documentation and help system.
 #
 local rule print-help-top ( )
@@ -268,6 +276,7 @@
     print.list-end ;
 }
 
+
 # Generate Jam/Boost.Jam command usage information.
 #
 local rule print-help-usage ( )
@@ -344,13 +353,14 @@
     print.list-end ;
 }
 
-# Generates description of options controlling the help system.
-# This automatically reads the options as all variables in the doc
-# module of the form ".option.*".
+
+# Generates description of options controlling the help system. This
+# automatically reads the options as all variables in the doc module of the form
+# ".option.*".
 #
 local rule print-help-options (
- module-name # The doc module.
- )
+ module-name # The doc module.
+)
 {
     print.section "Help Options"
         These are all the options available for enabling or disabling to control
@@ -376,15 +386,16 @@
     }
 }
 
-# Generate brief documentation for all the known items in the section
-# for a module. Possible sections are: "rules", and "variables".
+
+# Generate brief documentation for all the known items in the section for a
+# module. Possible sections are: "rules", and "variables".
 #
 local rule print-help-module-section (
- module # The module name.
- section # rules or variables.
- : section-head # The title of the section.
- section-description * # The detailed description of the section.
- )
+ module # The module name.
+ section # rules or variables.
+ : section-head # The title of the section.
+ section-description * # The detailed description of the section.
+)
 {
     if $($(module).$(section))
     {
@@ -410,12 +421,13 @@
     }
 }
 
+
 # Generate documentation for all possible modules. We attempt to list all known
 # modules together with a brief description of each.
 #
 local rule print-help-all (
     ignored # Usually the module name, but is ignored here.
- )
+)
 {
     print.section "Modules"
         "These are all the known modules. Use --help <module> to get more"
@@ -442,12 +454,13 @@
     }
 }
 
-# Generate documentation for a module. Basic information about
-# the module is generated.
+
+# Generate documentation for a module. Basic information about the module is
+# generated.
 #
 local rule print-help-module (
- module-name # The module to generate docs for.
- )
+ module-name # The module to generate docs for.
+)
 {
     # Print the docs.
     print.section "Module '$(module-name)'" $($(module-name).docs) ;
@@ -473,12 +486,13 @@
     }
 }
 
+
 # Generate documentation for a set of rules in a module.
 #
 local rule print-help-rules (
- module-name # Module of the rules.
- : name * # Optional list of rules to describe.
- )
+ module-name # Module of the rules.
+ : name * # Optional list of rules to describe.
+)
 {
     name ?= $($(module-name).rules) ;
     if [ set.intersection $(name) : $($(module-name).rules) $($(module-name).class-rules) ]
@@ -506,12 +520,13 @@
     }
 }
 
+
 # Generate documentation for a set of classes in a module.
 #
 local rule print-help-classes (
- module-name # Module of the classes.
- : name * # Optional list of classes to describe.
- )
+ module-name # Module of the classes.
+ : name * # Optional list of classes to describe.
+)
 {
     name ?= $($(module-name).classes) ;
     if [ set.intersection $(name) : $($(module-name).classes) ]
@@ -550,12 +565,13 @@
     }
 }
 
+
 # Generate documentation for a set of variables in a module.
 #
 local rule print-help-variables (
- module-name ? # Module of the variables.
- : name * # Optional list of variables to describe.
- )
+ module-name ? # Module of the variables.
+ : name * # Optional list of variables to describe.
+)
 {
     name ?= $($(module-name).variables) ;
     if [ set.intersection $(name) : $($(module-name).variables) ]
@@ -582,12 +598,13 @@
     }
 }
 
+
 # Generate documentation for a project.
 #
 local rule print-help-project (
     unused ?
- : jamfile * # The project Jamfile.
- )
+ : jamfile * # The project Jamfile.
+)
 {
     if $(jamfile<$(jamfile)>.docs[1])
     {
@@ -599,13 +616,14 @@
     }
 }
 
+
 # Generate documentation for a config file.
 #
 local rule print-help-config (
     unused ?
- : type # The type of configuration file user or site.
- config-file # The configuration Jamfile.
- )
+ : type # The type of configuration file user or site.
+ config-file # The configuration Jamfile.
+)
 {
     if $(jamfile<$(config-file)>.docs[1])
     {
@@ -617,17 +635,14 @@
     }
 }
 
-local rule __test__
-{
-}
 
 ws = " " ;
 
 # Extract the text from a block of comments.
 #
 local rule extract-comment (
- var # The name of the variable to extract from.
- )
+ var # The name of the variable to extract from.
+)
 {
     local comment = ;
     local line = $($(var)[1]) ;
@@ -643,11 +658,12 @@
     return $(comment) ;
 }
 
+
 # Extract s single line of Jam syntax, ignoring any comments.
 #
 local rule extract-syntax (
- var # The name of the variable to extract from.
- )
+ var # The name of the variable to extract from.
+)
 {
     local syntax = ;
     local line = $($(var)[1]) ;
@@ -664,12 +680,13 @@
     return $(syntax) ;
 }
 
-# Extract the next token, this is either a single Jam construct
-# or a comment as a single token.
+
+# Extract the next token, this is either a single Jam construct or a comment as
+# a single token.
 #
 local rule extract-token (
- var # The name of the variable to extract from.
- )
+ var # The name of the variable to extract from.
+)
 {
     local parts = ;
     while ! $(parts)
@@ -694,18 +711,19 @@
     return $(token) ;
 }
 
+
 # Scan for a rule declaration as the next item in the variable.
 #
 local rule scan-rule (
- syntax ? # The first part of the text which contains the rule declaration.
- : var # The name of the variable to extract from.
- )
+ syntax ? # The first part of the text which contains the rule declaration.
+ : var # The name of the variable to extract from.
+)
 {
     local rule-parts =
         [ MATCH "^[$(ws)]*(rule|local[$(ws)]*rule)[$(ws)]+([^$(ws)]+)[$(ws)]*(.*)" : $(syntax:J=" ") ] ;
     if $(rule-parts[1])
     {
- # mark as doc for rule.
+ # Mark as doc for rule.
         local rule-name = $(rule-parts[2]) ;
         if $(scope-name)
         {
@@ -716,10 +734,10 @@
         {
             set-rule-doc $(rule-name) $(module-name) $(is-local) : $(comment-block) ;
         }
- # parse args of rule.
+ # Parse args of rule.
         $(var) = $(rule-parts[3-]) $($(var)) ;
         set-rule-arguments-signature $(rule-name) $(module-name) : [ scan-rule-arguments $(var) ] ;
- # scan within this rules scope.
+ # Scan within this rules scope.
         local scope-level = [ extract-token $(var) ] ;
         local scope-name = $(rule-name) ;
         while $(scope-level)
@@ -743,11 +761,12 @@
     }
 }
 
+
 # Scan the arguments of a rule.
 #
 local rule scan-rule-arguments (
- var # The name of the variable to extract from.
- )
+ var # The name of the variable to extract from.
+)
 {
     local arg-syntax = ;
     local token = [ extract-token $(var) ] ;
@@ -801,11 +820,13 @@
     return $(arg-signature) ;
 }
 
+
 # Scan for a variable declaration.
+#
 local rule scan-variable (
- syntax ? # The first part of the text which contains the variable declaration.
- : var # The name of the variable to extract from.
- )
+ syntax ? # The first part of the text which contains the variable declaration.
+ : var # The name of the variable to extract from.
+)
 {
     # [1] = name, [2] = value(s)
     local var-parts =
@@ -833,10 +854,12 @@
     }
 }
 
+
 # Scan a class declaration.
+#
 local rule scan-class (
- syntax ? # The syntax text for the class declaration.
- )
+ syntax ? # The syntax text for the class declaration.
+)
 {
     # [1] = class?, [2] = name, [3] = superclass
     local class-parts =
@@ -847,24 +870,25 @@
     }
 }
 
+
 # Scan a module file for documentation comments. This also invokes any actions
 # assigned to the module. The actions are the rules that do the actual output of
 # the documentation. This rule is invoked as the header scan rule for the module
 # file.
 #
 rule scan-module (
- target # The module file.
- : text * # The text in the file, one item per line.
- : action * # Rule to call to output docs for the module.
- )
+ target # The module file.
+ : text * # The text in the file, one item per line.
+ : action * # Rule to call to output docs for the module.
+)
 {
     if $(.option.debug) { ECHO "HELP:" scanning module target '$(target)' ; }
     local module-name = $(target:B) ;
     local module-documented = ;
     local comment-block = ;
     local syntax-block = ;
- # This is a hack because we can't get the line of a file if it
- # happens to not have a new-line termination.
+ # This is a hack because we can not get the line of a file if it happens to
+ # not have a new-line termination.
     text += "}" ;
     while $(text)
     {
@@ -902,16 +926,19 @@
     }
 }
 
-# Import scan-module to global scope, so that it's available during
-# header scanning phase.
+
+# Import scan-module to global scope, so that it is available during header
+# scanning phase.
+#
 IMPORT $(__name__) : scan-module : : doc.scan-module ;
 
-# Read in a file using the SHELL builtin and return the
-# individual lines as would be done for header scanning.
+
+# Read in a file using the SHELL builtin and return the individual lines as
+# would be done for header scanning.
 #
 local rule read-file (
- file # The file to read in.
- )
+ file # The file to read in.
+)
 {
     file = [ path.native [ path.root [ path.make $(file) ] [ path.pwd ] ] ] ;
     if ! $(.file<$(file)>.lines)
@@ -940,15 +967,15 @@
     return $(.file<$(file)>.lines) ;
 }
 
-# Add a scan action to perform to generate the help documentation.
-# The action rule is passed the name of the module as the first argument.
-# The second argument(s) are optional and passed directly as specified
-# here.
+
+# Add a scan action to perform to generate the help documentation. The action
+# rule is passed the name of the module as the first argument. The second
+# argument(s) are optional and passed directly as specified here.
 #
 local rule do-scan (
- modules + # The modules to scan and perform the action on.
- : action * # The action rule, plus the secondary arguments to pass to the action rule.
- )
+ modules + # The modules to scan and perform the action on.
+ : action * # The action rule, plus the secondary arguments to pass to the action rule.
+)
 {
     if $(help-output) = text
     {

Modified: branches/proto/v4/tools/build/v2/util/indirect.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/indirect.jam (original)
+++ branches/proto/v4/tools/build/v2/util/indirect.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -27,6 +27,7 @@
 # expected to be the module in which to invoke the rule by the 'call' rule
 # below. Otherwise, the rule will be invoked in the module of this rule's
 # caller.
+#
 rule make ( rulename bound-args * : context ? )
 {
     context ?= [ CALLER_MODULE ] ;
@@ -40,6 +41,7 @@
 # supplied, the result will be invoked (by 'call', below) in the module of the
 # caller. Otherwise, frames > 1 specifies additional call frames to back up in
 # order to find the module context.
+#
 rule make-qualified ( rulename bound-args * : frames ? )
 {
     if [ MATCH $(.pattern) : $(rulename) ]
@@ -59,6 +61,7 @@
 
 
 # Returns the module name in which the given indirect rule will be invoked.
+#
 rule get-module ( [indirect-rule] x )
 {
     local m = [ MATCH $(.pattern) : $(x) ] ;
@@ -71,6 +74,7 @@
 
 
 # Returns the rulename that will be called when x is invoked.
+#
 rule get-rule ( [indirect-rule] x )
 {
     local m = [ MATCH $(.pattern) : $(x) ] ;
@@ -79,6 +83,7 @@
 
 
 # Invoke the given indirect-rule.
+#
 rule call ( [indirect-rule] r args * : * )
 {
     return [ modules.call-in [ get-module $(r) ] : [ get-rule $(r) ] $(args)

Modified: branches/proto/v4/tools/build/v2/util/path.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/path.jam (original)
+++ branches/proto/v4/tools/build/v2/util/path.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -510,7 +510,7 @@
 rule make-UNIX ( native )
 {
     # VP: I have no idea now 'native' can be empty here! But it can!
- if $(native) = ""
+ if ! $(native)
     {
         errors.error "Empty path passed to 'make-UNIX'" ;
     }
@@ -815,17 +815,17 @@
 
     # Test processing 'invalid' rooted paths with too many '..' path elements
     # that would place them before the root.
- assert.result "" : make "/.." ;
- assert.result "" : make "/../" ;
- assert.result "" : make "/../." ;
- assert.result "" : make "/.././" ;
- assert.result "" : make "/foo/../bar/giz/.././././../../." ;
- assert.result "" : make "/foo/../bar/giz/.././././../.././" ;
- assert.result "" : make "//foo/../bar/giz/.././././../../." ;
- assert.result "" : make "//foo/../bar/giz/.././././../.././" ;
- assert.result "" : make "\\\\foo/../bar/giz/.././././../../." ;
- assert.result "" : make "\\\\foo/../bar/giz/.././././../.././" ;
- assert.result "" : make "/..///.//..///.//..////foo///" ;
+ assert.result : make "/.." ;
+ assert.result : make "/../" ;
+ assert.result : make "/../." ;
+ assert.result : make "/.././" ;
+ assert.result : make "/foo/../bar/giz/.././././../../." ;
+ assert.result : make "/foo/../bar/giz/.././././../.././" ;
+ assert.result : make "//foo/../bar/giz/.././././../../." ;
+ assert.result : make "//foo/../bar/giz/.././././../.././" ;
+ assert.result : make "\\\\foo/../bar/giz/.././././../../." ;
+ assert.result : make "\\\\foo/../bar/giz/.././././../.././" ;
+ assert.result : make "/..///.//..///.//..////foo///" ;
 
     assert.result "foo\\bar\\giz" : native "foo/bar/giz" ;
     assert.result "foo" : native "foo" ;

Modified: branches/proto/v4/tools/build/v2/util/print.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/print.jam (original)
+++ branches/proto/v4/tools/build/v2/util/print.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -16,22 +16,22 @@
 # The current output target. Defaults to console.
 output-target = console ;
 
-# The current output type. Defaults to plain.
+# The current output type. Defaults to plain. Other possible values are "html".
 output-type = plain ;
 
 # Whitespace.
 .whitespace = [ string.whitespace ] ;
 
-# Set the target and type of output to generate. This sets both
-# the destination output and the type of docs to generate to that
-# output. The target can be either a file or "console" for echoing
-# to the console. If the type of output is not specified it defaults
-# to plain text.
+
+# Set the target and type of output to generate. This sets both the destination
+# output and the type of docs to generate to that output. The target can be
+# either a file or "console" for echoing to the console. If the type of output
+# is not specified it defaults to plain text.
 #
 rule output (
- target # The target file or device; file or "console".
- type ? # The type of output; "plain", or "html".
- )
+ target # The target file or device; file or "console".
+ type ? # The type of output; "plain" or "html".
+)
 {
     type ?= plain ;
     if $(output-target) != $(target)
@@ -57,15 +57,14 @@
     }
 }
 
-# Generate a section with a description. The type of output can be
-# controlled by the value of the 'output-type' variable. If not set
-# it defaults to 'console' indicating immediate display to the console.
-# Other possible values are: 'html-file'.
+
+# Generate a section with a description. The type of output can be controlled by
+# the value of the 'output-type' variable.
 #
 rule section (
- name # The name of the section.
- description * # A number of description lines.
- )
+ name # The name of the section.
+ description * # A number of description lines.
+)
 {
     if $(output-type) = plain
     {
@@ -165,10 +164,9 @@
     }
 }
 
-# Generate the start of a list of items. The type of output can be
-# controlled by the value of the 'output-type' variable. If not set
-# it defaults to 'console' indicating immediate display to the console.
-# Other possible values are: 'html-file'.
+
+# Generate the start of a list of items. The type of output can be controlled by
+# the value of the 'output-type' variable.
 #
 rule list-start ( )
 {
@@ -181,14 +179,13 @@
     }
 }
 
-# Generate an item in a list. The type of output can be
-# controlled by the value of the 'output-type' variable. If not set
-# it defaults to 'console' indicating immediate display to the console.
-# Other possible values are: 'html-file'.
+
+# Generate an item in a list. The type of output can be controlled by the value
+# of the 'output-type' variable.
 #
 rule list-item (
- item + # The item to list.
- )
+ item + # The item to list.
+)
 {
     if $(output-type) = plain
     {
@@ -200,10 +197,9 @@
     }
 }
 
-# Generate the end of a list of items. The type of output can be
-# controlled by the value of the 'output-type' variable. If not set
-# it defaults to 'console' indicating immediate display to the console.
-# Other possible values are: 'html-file'.
+
+# Generate the end of a list of items. The type of output can be controlled by
+# the value of the 'output-type' variable.
 #
 rule list-end ( )
 {
@@ -217,13 +213,14 @@
     }
 }
 
-# Split the given text into separate lines, word-wrapping to a margin.
-# The default margin is 78 characters.
+
+# Split the given text into separate lines, word-wrapping to a margin. The
+# default margin is 78 characters.
 #
 rule split-at-words (
- text + # The text to split.
- : margin ? # An optional margin, default is 78.
- )
+ text + # The text to split.
+ : margin ? # An optional margin, default is 78.
+)
 {
     local lines = ;
     text = [ string.words $(text:J=" ") ] ;
@@ -264,15 +261,16 @@
     return $(lines) ;
 }
 
-# Generate a set of fixed lines. Each single item passed in is
-# output on a separate line. For console this just echos each line,
-# but for html this will split them with <br>.
+
+# Generate a set of fixed lines. Each single item passed in is output on a
+# separate line. For console this just echos each line, but for html this will
+# split them with <br>.
 #
 rule lines (
- text * # The lines of text.
- : indent ? # Optional indentation prepended to each line after the first one.
- outdent ? # Optional indentation to prepend to the first line.
- )
+ text * # The lines of text.
+ : indent ? # Optional indentation prepended to each line after the first one.
+ outdent ? # Optional indentation to prepend to the first line.
+)
 {
     text ?= "" ;
     indent ?= "" ;
@@ -296,19 +294,20 @@
     }
 }
 
-# Output text directly to the current target. When doing output
-# to a file, one can indicate if the text should be output to
-# "prefix" it, as the "body" (default), or "suffix" of the file. This is
-# independant of the actual execution order of the text rule. This rule
-# invokes a singular action, one action only once, which does the
-# build of the file. Therefore actions on the target outside of this
-# rule will happen entirely before and/or after all output using this rule.
+
+# Output text directly to the current target. When doing output to a file, one
+# can indicate if the text should be output to "prefix" it, as the "body"
+# (default), or "suffix" of the file. This is independant of the actual
+# execution order of the text rule. This rule invokes a singular action, one
+# action only once, which does the build of the file. Therefore actions on the
+# target outside of this rule will happen entirely before and/or after all
+# output using this rule.
 #
 rule text (
- strings * # The strings of text to output.
- : overwrite ? # true to overwrite the output (if it is a file)
- : prefix-body-suffix ? # Indication to output prefix, body, or suffix (for a file).
- )
+ strings * # The strings of text to output.
+ : overwrite ? # true to overwrite the output (if it is a file)
+ : prefix-body-suffix ? # Indication to output prefix, body, or suffix (for a file).
+)
 {
     prefix-body-suffix ?= body ;
     if $(output-target) = console
@@ -350,21 +349,24 @@
         $($(output-target).text-suffix) ;
 }
 
+
 # Outputs the text to the current targets, after word-wrapping it.
+#
 rule wrapped-text ( text + )
 {
     local lines = [ split-at-words $(text) ] ;
     text $(lines) ;
 }
 
-# Escapes text into html/xml printable equivalents.
-# Does not know about tags and therefore tags fed into
-# this will also be escaped. Currently escapes space, "<", ">", and "&".
+
+# Escapes text into html/xml printable equivalents. Does not know about tags and
+# therefore tags fed into this will also be escaped. Currently escapes space,
+# "<", ">", and "&".
 #
 rule escape-html (
- text + # The text to escape.
- : space ? # What to replace spaces with, defaults to " ".
- )
+ text + # The text to escape.
+ : space ? # What to replace spaces with, defaults to " ".
+)
 {
     local html-text = ;
     while $(text)
@@ -383,24 +385,26 @@
     return $(html-text) ;
 }
 
-# Outputs the text strings collected by the text rule to the output
-# file.
+
+# Outputs the text strings collected by the text rule to the output file.
 #
 actions quietly text-action
 {
     @($(STDOUT):E=$(text-content:J=$(nl))) $(text-redirect) "$(<)"
 }
 
-local rule __test__ ( )
+
+rule __test__ ( )
 {
     import assert ;
     
- assert.result one two three : split-at-words one two three : 5 ;
+ assert.result one two three : split-at-words one two three : 5 ;
     assert.result "one two" three : split-at-words one two three : 8 ;
     assert.result "one two" three : split-at-words one two three : 9 ;
     assert.result "one two three" : split-at-words one two three ;
- # VP, 2004-12-03 The following test fails for some reason,
- # so commenting it out.
+
+ # VP, 2004-12-03 The following test fails for some reason, so commenting it
+ # out.
     #assert.result "one&nbsp;two&nbsp;three" "&amp;&lt;&gt;" :
     # escape-html "one two three" "&<>" ;
 }

Modified: branches/proto/v4/tools/build/v2/util/sequence.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/sequence.jam (original)
+++ branches/proto/v4/tools/build/v2/util/sequence.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -247,7 +247,7 @@
 NATIVE_RULE sequence : select-highest-ranked ;
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
     # Use a unique module so we can test the use of local rules.
     module sequence.__test__

Modified: branches/proto/v4/tools/build/v2/util/utility.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/util/utility.jam (original)
+++ branches/proto/v4/tools/build/v2/util/utility.jam 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -108,7 +108,7 @@
 
 
 
-local rule __test__ ( )
+rule __test__ ( )
 {
     import assert ;
     import "class" : new ;

Modified: branches/proto/v4/tools/inspect/ascii_check.cpp
==============================================================================
--- branches/proto/v4/tools/inspect/ascii_check.cpp (original)
+++ branches/proto/v4/tools/inspect/ascii_check.cpp 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -6,6 +6,7 @@
 // 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 is a test.
 
 #include "ascii_check.hpp"
 #include <functional>
@@ -30,7 +31,8 @@
          if ( c >= 'a' && c <= 'z' ) return false;
          if ( c >= 'A' && c <= 'Z' ) return false;
          if ( c >= '0' && c <= '9' ) return false;
- if ( c == '\t' || c == '\n' || c == '\r' || c == '\v' ) return false;
+ // Horizontal/Vertical tab, newline, and form feed
+ if ( c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f' ) return false;
          return gPunct.find ( c ) == string::npos;
       }
    };

Modified: branches/proto/v4/tools/inspect/build/Jamfile.v2
==============================================================================
--- branches/proto/v4/tools/inspect/build/Jamfile.v2 (original)
+++ branches/proto/v4/tools/inspect/build/Jamfile.v2 2008-06-10 14:52:49 EDT (Tue, 10 Jun 2008)
@@ -14,7 +14,7 @@
 
 exe inspect
     :
- inspect.cpp license_check.cpp link_check.cpp long_name_check.cpp tab_check.cpp ascii_check.cpp crlf_check.cpp unnamed_namespace_check.cpp
+ inspect.cpp license_check.cpp link_check.cpp long_name_check.cpp tab_check.cpp crlf_check.cpp unnamed_namespace_check.cpp ascii_check.cpp
     copyright_check.cpp minmax_check.cpp
     /boost//filesystem/<link>static
     /boost//regex/<link>static


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk