From dde98de1fba150defc9193ae6aa5d8d24ada0fd0 Mon Sep 17 00:00:00 2001 From: Frank Wiles Date: Sun, 14 Aug 2022 11:21:12 -0500 Subject: [PATCH] Initial Content Conversion This is based off of revision 56094d2c9f510f5ee4f1ffd4eb6b73788aaa62d7 of https://github.com/boostorg/website/. URL of exact commit is: https://github.com/boostorg/website/commit/56094d2c9f510f5ee4f1ffd4eb6b73788aaa62d7 --- boost-card.jpg | Bin 0 -> 6881 bytes boost-logo.png | Bin 0 -> 38417 bytes boost.png | Bin 0 -> 6308 bytes common/footer-banners.html | 13 + common/footer-license.html | 6 + common/heading-doc.html | 5 + common/heading.html | 16 + common/menu-boost.html | 23 + common/menu-community.html | 42 + common/menu-development.html | 45 + common/menu-welcome.html | 16 + common/sidebar-boost.html | 11 + common/sidebar-common.html | 7 + common/sidebar-community.html | 11 + common/sidebar-development.html | 11 + common/sidebar-doc.html | 11 + common/sidebar-donate.html | 7 + common/sidebar-get-boost.html | 7 + common/sidebar-search.html | 16 + common/sidebar-support.html | 11 + common/sidebar-welcome.html | 11 + community/_template_.html | 24 + community/acknowledgements.html | 84 + community/blom_libraries/boost_function.html | 47 + .../logos/IceCube_horizontal.jpg | Bin 0 -> 614733 bytes .../logos/IceCube_horizontal2.jpg | Bin 0 -> 20969 bytes community/blom_libraries/logos/blom_logo.png | Bin 0 -> 14478 bytes community/committee.html | 182 + community/counted_body.html | 677 ++ community/cpp.html | 90 + community/error_handling.html | 267 + community/exception_safety.html | 764 ++ community/feature_model_diagrams.html | 169 + community/generic_programming.html | 469 ++ community/groups.html | 280 + community/gsoc.html | 161 + community/gsoc_2006_boost_overview.html | 823 ++ community/imc_summer_of_code_2016.html | 58 + community/implementation_variations.html | 287 + community/index.html | 50 + community/irc.html | 66 + community/moderators.html | 72 + .../official_library_maintainer_program.html | 88 + community/policy.html | 415 ++ community/requests.html | 43 + community/review_schedule.html | 456 ++ community/reviews.html | 373 + community/sandbox.html | 72 + development/_template_.html | 24 + development/borland_cpp.html | 405 + development/bugs.html | 50 + development/design_faq.html | 60 + development/exemplar.html | 314 + development/header.html | 108 + development/index.html | 71 + development/int_const_guidelines.html | 423 ++ development/library_metadata.html | 212 + development/report-apr-2006.html | 257 + development/report-dec-2009.html | 565 ++ development/report-jan-2006.html | 262 + development/report-jun-2009.html | 646 ++ development/report-may-2008.html | 462 ++ development/report-nov-2007.html | 340 + development/report-nov-2008.html | 562 ++ development/report-sep-2007.html | 256 + development/requirements.html | 961 +++ development/reuse.html | 87 + development/running_regression_tests.html | 299 + development/separate_compilation.html | 536 ++ development/submissions.html | 344 + development/template/template.html | 24 + development/test.html | 127 + development/testing.html | 144 + development/website_updating.html | 337 + doc/_template_.html | 24 + doc/index.html | 57 + .../libs/test/docbook/img/boost.test.logo.png | Bin 0 -> 24740 bytes doc/libs/1_53_0/libs/pool/doc/images/mb1.png | Bin 0 -> 23456 bytes doc/libs/1_53_0/libs/pool/doc/images/mb2.png | Bin 0 -> 31393 bytes doc/libs/1_53_0/libs/pool/doc/images/mb3.png | Bin 0 -> 71013 bytes doc/libs/1_53_0/libs/pool/doc/images/mb4.png | Bin 0 -> 38446 bytes doc/libs/1_53_0/libs/pool/doc/images/pc1.png | Bin 0 -> 9227 bytes doc/libs/1_53_0/libs/pool/doc/images/pc2.png | Bin 0 -> 9867 bytes doc/libs/1_53_0/libs/pool/doc/images/pc3.png | Bin 0 -> 7249 bytes doc/libs/1_53_0/libs/pool/doc/images/pc4.png | Bin 0 -> 8954 bytes doc/libs/1_53_0/libs/pool/doc/images/pc5.png | Bin 0 -> 9630 bytes .../1_61_0/doc/html/boost_asio/async_op1.png | Bin 0 -> 24084 bytes .../1_61_0/doc/html/boost_asio/async_op2.png | Bin 0 -> 25260 bytes .../1_61_0/doc/html/boost_asio/proactor.png | Bin 0 -> 30877 bytes .../1_61_0/doc/html/boost_asio/sync_op.png | Bin 0 -> 22703 bytes .../numeric/odeint/doc/html/images/alert.png | Bin 0 -> 603 bytes .../numeric/odeint/doc/html/images/blank.png | Bin 0 -> 374 bytes .../odeint/doc/html/images/callouts/1.png | Bin 0 -> 391 bytes .../odeint/doc/html/images/callouts/10.png | Bin 0 -> 485 bytes .../odeint/doc/html/images/callouts/11.png | Bin 0 -> 410 bytes .../odeint/doc/html/images/callouts/12.png | Bin 0 -> 488 bytes .../odeint/doc/html/images/callouts/13.png | Bin 0 -> 509 bytes .../odeint/doc/html/images/callouts/14.png | Bin 0 -> 499 bytes .../odeint/doc/html/images/callouts/15.png | Bin 0 -> 507 bytes .../odeint/doc/html/images/callouts/2.png | Bin 0 -> 446 bytes .../odeint/doc/html/images/callouts/3.png | Bin 0 -> 431 bytes .../odeint/doc/html/images/callouts/4.png | Bin 0 -> 441 bytes .../odeint/doc/html/images/callouts/5.png | Bin 0 -> 423 bytes .../odeint/doc/html/images/callouts/6.png | Bin 0 -> 431 bytes .../odeint/doc/html/images/callouts/7.png | Bin 0 -> 397 bytes .../odeint/doc/html/images/callouts/8.png | Bin 0 -> 434 bytes .../odeint/doc/html/images/callouts/9.png | Bin 0 -> 420 bytes .../odeint/doc/html/images/caution.png | Bin 0 -> 1250 bytes .../numeric/odeint/doc/html/images/draft.png | Bin 0 -> 17454 bytes .../numeric/odeint/doc/html/images/home.png | Bin 0 -> 358 bytes .../odeint/doc/html/images/important.png | Bin 0 -> 722 bytes .../numeric/odeint/doc/html/images/next.png | Bin 0 -> 336 bytes .../odeint/doc/html/images/next_disabled.png | Bin 0 -> 1110 bytes .../numeric/odeint/doc/html/images/note.png | Bin 0 -> 490 bytes .../numeric/odeint/doc/html/images/prev.png | Bin 0 -> 334 bytes .../odeint/doc/html/images/prev_disabled.png | Bin 0 -> 1109 bytes .../numeric/odeint/doc/html/images/smiley.png | Bin 0 -> 867 bytes .../numeric/odeint/doc/html/images/tip.png | Bin 0 -> 449 bytes .../odeint/doc/html/images/toc-blank.png | Bin 0 -> 318 bytes .../odeint/doc/html/images/toc-minus.png | Bin 0 -> 259 bytes .../odeint/doc/html/images/toc-plus.png | Bin 0 -> 264 bytes .../numeric/odeint/doc/html/images/up.png | Bin 0 -> 370 bytes .../odeint/doc/html/images/up_disabled.png | Bin 0 -> 1115 bytes .../odeint/doc/html/images/warning.png | Bin 0 -> 1241 bytes .../libs/numeric/odeint/doc/html/logo.jpg | Bin 0 -> 9048 bytes .../odeint/doc/html/phase_lattice_2d_0000.jpg | Bin 0 -> 1995 bytes .../odeint/doc/html/phase_lattice_2d_0100.jpg | Bin 0 -> 3231 bytes .../odeint/doc/html/phase_lattice_2d_1000.jpg | Bin 0 -> 13287 bytes .../numeric/odeint/doc/html/solar_system.jpg | Bin 0 -> 31597 bytes .../repository/doc/html/images/alert.png | Bin 0 -> 2117 bytes .../repository/doc/html/images/callouts/1.png | Bin 0 -> 391 bytes .../doc/html/images/callouts/10.png | Bin 0 -> 485 bytes .../doc/html/images/callouts/11.png | Bin 0 -> 410 bytes .../doc/html/images/callouts/12.png | Bin 0 -> 488 bytes .../doc/html/images/callouts/13.png | Bin 0 -> 509 bytes .../doc/html/images/callouts/14.png | Bin 0 -> 499 bytes .../doc/html/images/callouts/15.png | Bin 0 -> 507 bytes .../repository/doc/html/images/callouts/2.png | Bin 0 -> 446 bytes .../repository/doc/html/images/callouts/3.png | Bin 0 -> 431 bytes .../repository/doc/html/images/callouts/4.png | Bin 0 -> 441 bytes .../repository/doc/html/images/callouts/5.png | Bin 0 -> 423 bytes .../repository/doc/html/images/callouts/6.png | Bin 0 -> 431 bytes .../repository/doc/html/images/callouts/7.png | Bin 0 -> 397 bytes .../repository/doc/html/images/callouts/8.png | Bin 0 -> 434 bytes .../repository/doc/html/images/callouts/9.png | Bin 0 -> 420 bytes .../repository/doc/html/images/caution.png | Bin 0 -> 1400 bytes .../repository/doc/html/images/important.png | Bin 0 -> 1742 bytes .../repository/doc/html/images/note.png | Bin 0 -> 2312 bytes .../spirit/repository/doc/html/images/tip.png | Bin 0 -> 2605 bytes .../1_62_0/doc/html/boost_asio/async_op1.png | Bin 0 -> 24084 bytes .../1_62_0/doc/html/boost_asio/async_op2.png | Bin 0 -> 25260 bytes .../1_62_0/doc/html/boost_asio/proactor.png | Bin 0 -> 30877 bytes .../1_62_0/doc/html/boost_asio/sync_op.png | Bin 0 -> 22703 bytes doc/libs/1_77_0/libs/leaf/doc/html/index.html | 6596 +++++++++++++++++ doc/libs/1_77_0/libs/qvm/doc/html/index.html | 6070 +++++++++++++++ .../doc/html/BOOST_BA_idm35151229096240.html | 42 + .../libs/utility/doc/html/BOOST_BINARY.html | 42 + .../libs/utility/doc/html/BOOST_BINARY_L.html | 42 + .../doc/html/BOOST_BINARY_LITERAL_D.html | 42 + .../utility/doc/html/BOOST_BINARY_LL.html | 42 + .../utility/doc/html/BOOST_BINARY_LLU.html | 42 + .../utility/doc/html/BOOST_BINARY_LU.html | 42 + .../libs/utility/doc/html/BOOST_BINARY_U.html | 42 + .../utility/doc/html/BOOST_BINARY_UL.html | 42 + .../utility/doc/html/BOOST_BINARY_ULL.html | 42 + .../doc/html/BOOST_SU_idm35151229112752.html | 42 + .../doc/html/BOOST_SU_idm35151229114032.html | 42 + .../boost/base_fro_idm35151229100080.html | 62 + .../doc/html/boost/base_from_member.html | 70 + .../doc/html/boost/basic_string_view.html | 406 + .../boost/call_tra_idm35151228605104.html | 49 + .../boost/call_tra_idm35151228608944.html | 49 + .../boost/call_tra_idm35151228613424.html | 49 + .../utility/doc/html/boost/call_traits.html | 49 + .../boost/compress_idm35151228634288.html | 106 + .../doc/html/boost/compressed_pair.html | 114 + .../doc/html/boost/in_place_factory_base.html | 44 + .../utility/doc/html/boost/initialized.html | 92 + .../doc/html/boost/initialized_value.html | 42 + .../doc/html/boost/initialized_value_t.html | 61 + .../utility/doc/html/boost/result_of.html | 44 + .../utility/doc/html/boost/tr1_result_of.html | 44 + .../boost/typed_in_idm35151228676656.html | 44 + .../doc/html/boost/value_initialized.html | 88 + .../1_78_0/libs/utility/doc/html/index.html | 64 + .../utility/doc/html/utility/overview.html | 154 + .../libs/utility/doc/html/utility/ref.html | 270 + .../utility/doc/html/utility/utilities.html | 60 + .../utility/utilities/base_from_member.html | 441 ++ .../utilities/binary_integer_literals.html | 121 + .../html/utility/utilities/call_traits.html | 766 ++ .../utility/utilities/compressed_pair.html | 137 + .../utility/utilities/in_place_factory.html | 393 + .../doc/html/utility/utilities/operators.html | 2254 ++++++ .../doc/html/utility/utilities/result_of.html | 475 ++ .../html/utility/utilities/string_view.html | 455 ++ .../html/utility/utilities/value_init.html | 724 ++ .../utility/doc/html/utility/utilities0.html | 56 + doc/libs/1_79_0/libs/atomic/index.html | 19 + doc/libs/common/boost.png | Bin 0 -> 6308 bytes doc/libs/common/doc/src/images/alert.png | Bin 0 -> 603 bytes doc/libs/common/doc/src/images/blank.png | Bin 0 -> 374 bytes doc/libs/common/doc/src/images/caution.png | Bin 0 -> 1250 bytes doc/libs/common/doc/src/images/draft.png | Bin 0 -> 17454 bytes doc/libs/common/doc/src/images/home.png | Bin 0 -> 358 bytes doc/libs/common/doc/src/images/important.png | Bin 0 -> 722 bytes doc/libs/common/doc/src/images/next.png | Bin 0 -> 336 bytes .../common/doc/src/images/next_disabled.png | Bin 0 -> 1110 bytes doc/libs/common/doc/src/images/note.png | Bin 0 -> 490 bytes doc/libs/common/doc/src/images/prev.png | Bin 0 -> 334 bytes .../common/doc/src/images/prev_disabled.png | Bin 0 -> 1109 bytes doc/libs/common/doc/src/images/smiley.png | Bin 0 -> 867 bytes .../common/doc/src/images/stable_vector.png | Bin 0 -> 7163 bytes doc/libs/common/doc/src/images/tip.png | Bin 0 -> 449 bytes doc/libs/common/doc/src/images/toc-blank.png | Bin 0 -> 318 bytes doc/libs/common/doc/src/images/toc-minus.png | Bin 0 -> 259 bytes doc/libs/common/doc/src/images/toc-plus.png | Bin 0 -> 264 bytes doc/libs/common/doc/src/images/up.png | Bin 0 -> 370 bytes .../common/doc/src/images/up_disabled.png | Bin 0 -> 1115 bytes doc/libs/common/doc/src/images/warning.png | Bin 0 -> 1241 bytes doc/tools.html | 57 + donate/index.html | 121 + generated/download-items.html | 32 + generated/history-items.html | 1236 +++ generated/home-items.html | 42 + generated/menu-doc.html | 75 + generated/news-items.html | 76 + gfx/boost-dark-trans.png | Bin 0 -> 8312 bytes gfx/boost_1_33_0.jpg | Bin 0 -> 10736 bytes gfx/borland_logo.gif | Bin 0 -> 395 bytes gfx/google_logo_25wht.gif | Bin 0 -> 1607 bytes gfx/imc.jpg | Bin 0 -> 80249 bytes gfx/imc.png | Bin 0 -> 16366 bytes gfx/intel_logo.gif | Bin 0 -> 1249 bytes gfx/kai_logo.gif | Bin 0 -> 553 bytes gfx/ms_logo.gif | Bin 0 -> 763 bytes gfx/space.png | Bin 0 -> 150 bytes index.html | 107 + map.html | 30 + patches/index.html | 115 + style-v2/css_0/alpha_blue_50.png | Bin 0 -> 137 bytes style-v2/css_0/alpha_white_50.png | Bin 0 -> 137 bytes style-v2/css_0/alpha_white_75.png | Bin 0 -> 153 bytes style-v2/css_0/bkg.png | Bin 0 -> 123 bytes style-v2/css_0/blank.png | Bin 0 -> 374 bytes style-v2/css_0/boost_bullet.gif | Bin 0 -> 820 bytes style-v2/css_0/caution.png | Bin 0 -> 7476 bytes style-v2/css_0/draft.png | Bin 0 -> 17454 bytes style-v2/css_0/get-boost.png | Bin 0 -> 27054 bytes style-v2/css_0/home.png | Bin 0 -> 358 bytes style-v2/css_0/important.png | Bin 0 -> 7677 bytes style-v2/css_0/next.png | Bin 0 -> 336 bytes style-v2/css_0/next_disabled.png | Bin 0 -> 1110 bytes style-v2/css_0/note.png | Bin 0 -> 13625 bytes style-v2/css_0/panel_bkg.png | Bin 0 -> 897 bytes style-v2/css_0/prev.png | Bin 0 -> 334 bytes style-v2/css_0/prev_disabled.png | Bin 0 -> 1109 bytes style-v2/css_0/theme_grape/header-bg.png | Bin 0 -> 212 bytes style-v2/css_0/theme_grape/header-fg.png | Bin 0 -> 106318 bytes style-v2/css_0/theme_grass/caution.png | Bin 0 -> 1816 bytes style-v2/css_0/theme_grass/footer-bg-left.png | Bin 0 -> 696 bytes .../css_0/theme_grass/footer-bg-right.png | Bin 0 -> 766 bytes style-v2/css_0/theme_grass/footer-bg.png | Bin 0 -> 276 bytes style-v2/css_0/theme_grass/header-bg.png | Bin 0 -> 209 bytes style-v2/css_0/theme_grass/header-fg.png | Bin 0 -> 105139 bytes style-v2/css_0/theme_grass/home.png | Bin 0 -> 1105 bytes style-v2/css_0/theme_grass/important.png | Bin 0 -> 2303 bytes style-v2/css_0/theme_grass/next.png | Bin 0 -> 768 bytes style-v2/css_0/theme_grass/next_disabled.png | Bin 0 -> 407 bytes style-v2/css_0/theme_grass/note.png | Bin 0 -> 2310 bytes style-v2/css_0/theme_grass/prev.png | Bin 0 -> 741 bytes style-v2/css_0/theme_grass/prev_disabled.png | Bin 0 -> 385 bytes style-v2/css_0/theme_grass/tip.png | Bin 0 -> 1211 bytes style-v2/css_0/theme_grass/up.png | Bin 0 -> 766 bytes style-v2/css_0/theme_grass/up_disabled.png | Bin 0 -> 378 bytes style-v2/css_0/theme_grass/warning.png | Bin 0 -> 1342 bytes style-v2/css_0/tip.png | Bin 0 -> 13239 bytes style-v2/css_0/toc-blank.png | Bin 0 -> 318 bytes style-v2/css_0/toc-minus.png | Bin 0 -> 259 bytes style-v2/css_0/toc-plus.png | Bin 0 -> 264 bytes style-v2/css_0/up.png | Bin 0 -> 370 bytes style-v2/css_0/up_disabled.png | Bin 0 -> 1115 bytes style-v2/css_0/warning.png | Bin 0 -> 6955 bytes support/_template_.html | 24 + users/_template_.html | 24 + users/bibliography.html | 465 ++ users/download/boost_jam_3_1_18.html | 64 + users/download/index.html | 60 + users/faq.html | 279 + users/history/in_progress.html | 62 + users/history/index.html | 25 + users/history/old_versions.html | 116 + users/history/version_1_10_3.html | 58 + users/history/version_1_10_4.html | 47 + users/history/version_1_11_0.html | 51 + users/history/version_1_11_1.html | 48 + users/history/version_1_11_2.html | 49 + users/history/version_1_12_0.html | 49 + users/history/version_1_13_0.html | 49 + users/history/version_1_14_0.html | 49 + users/history/version_1_14_1.html | 51 + users/history/version_1_14_2.html | 49 + users/history/version_1_14_3.html | 50 + users/history/version_1_15_0.html | 50 + users/history/version_1_15_1.html | 51 + users/history/version_1_16_0.html | 64 + users/history/version_1_16_1.html | 56 + users/history/version_1_17_0.html | 59 + users/history/version_1_18_0.html | 64 + users/history/version_1_18_1.html | 53 + users/history/version_1_18_2.html | 57 + users/history/version_1_18_3.html | 55 + users/history/version_1_19_0.html | 60 + users/history/version_1_20_0.html | 58 + users/history/version_1_20_1.html | 52 + users/history/version_1_20_2.html | 74 + users/history/version_1_21_0.html | 75 + users/history/version_1_21_1.html | 57 + users/history/version_1_21_2.html | 67 + users/history/version_1_22_0.html | 62 + users/history/version_1_23_0.html | 64 + users/history/version_1_24_0.html | 59 + users/history/version_1_25_0.html | 74 + users/history/version_1_25_1.html | 67 + users/history/version_1_26_0.html | 68 + users/history/version_1_27_0.html | 80 + users/history/version_1_28_0.html | 72 + users/history/version_1_29_0.html | 81 + users/history/version_1_30_0.html | 104 + users/history/version_1_30_1.html | 78 + users/history/version_1_30_2.html | 73 + users/history/version_1_31_0.html | 169 + users/history/version_1_32_0.html | 197 + users/history/version_1_33_0.html | 244 + users/history/version_1_33_1.html | 171 + users/history/version_1_34_0.html | 318 + users/history/version_1_34_1.html | 104 + users/history/version_1_35_0.html | 273 + users/history/version_1_36_0.html | 253 + users/history/version_1_37_0.html | 186 + users/history/version_1_38_0.html | 325 + users/history/version_1_39_0.html | 268 + users/history/version_1_40_0.html | 314 + users/history/version_1_41_0.html | 260 + users/history/version_1_42_0.html | 292 + users/history/version_1_43_0.html | 289 + users/history/version_1_44_0.html | 425 ++ users/history/version_1_45_0.html | 322 + users/history/version_1_46_0.html | 320 + users/history/version_1_46_1.html | 190 + users/history/version_1_47_0.html | 453 ++ users/history/version_1_48_0.html | 400 + users/history/version_1_49_0.html | 447 ++ users/history/version_1_50_0.html | 562 ++ users/history/version_1_51_0.html | 299 + users/history/version_1_52_0.html | 420 ++ users/history/version_1_53_0.html | 533 ++ users/history/version_1_54_0.html | 651 ++ users/history/version_1_55_0.html | 736 ++ users/history/version_1_56_0.html | 940 +++ users/history/version_1_57_0.html | 455 ++ users/history/version_1_58_0.html | 692 ++ users/history/version_1_59_0.html | 382 + users/history/version_1_60_0.html | 608 ++ users/history/version_1_61_0.html | 423 ++ users/history/version_1_62_0.html | 440 ++ users/history/version_1_63_0.html | 347 + users/history/version_1_64_0.html | 456 ++ users/history/version_1_65_0.html | 484 ++ users/history/version_1_65_1.html | 449 ++ users/history/version_1_66_0.html | 481 ++ users/history/version_1_67_0.html | 713 ++ users/history/version_1_68_0.html | 420 ++ users/history/version_1_69_0.html | 545 ++ users/history/version_1_70_0.html | 587 ++ users/history/version_1_71_0.html | 658 ++ users/history/version_1_72_0.html | 526 ++ users/history/version_1_73_0.html | 633 ++ users/history/version_1_74_0.html | 709 ++ users/history/version_1_75_0.html | 527 ++ users/history/version_1_76_0.html | 539 ++ users/history/version_1_77_0.html | 487 ++ users/history/version_1_78_0.html | 507 ++ users/history/version_1_79_0.html | 483 ++ users/history/version_1_80_0.html | 542 ++ users/index.html | 159 + users/license.html | 342 + users/memoriam.html | 26 + users/memoriam/beman_dawes.html | 101 + users/memoriam/beman_dawes.jpg | Bin 0 -> 49124 bytes ...cial_note_for_boost_1_52_0_and_higher.html | 75 + users/news/asio_formal_review_begins.html | 39 + .../boost_has_moved_downloads_to_jfr.html | 50 + users/news/boost_locale_security_notice.html | 53 + users/news/index.html | 25 + users/news/old_compilers.html | 106 + users/news/website_1_0_launch.html | 41 + users/people.html | 108 + users/people/_template_.html | 26 + users/people/aleksey_gurtovoy.html | 42 + users/people/aleksey_gurtovoy.jpg | Bin 0 -> 12871 bytes users/people/aleksey_gurtovoy2.jpg | Bin 0 -> 26788 bytes users/people/aleksey_gurtovoy_small.jpg | Bin 0 -> 10002 bytes users/people/andreas_huber.html | 42 + users/people/andreas_huber.jpg | Bin 0 -> 95642 bytes users/people/andreas_huber_small.jpg | Bin 0 -> 2413 bytes users/people/anonymous.jpg | Bin 0 -> 12122 bytes users/people/anonymous_small.jpg | Bin 0 -> 6328 bytes users/people/anthony_williams.html | 39 + users/people/anthony_williams.jpg | Bin 0 -> 13939 bytes users/people/anthony_williams_large.jpg | Bin 0 -> 31351 bytes users/people/antony_polukhin.html | 49 + users/people/antony_polukhin.jpg | Bin 0 -> 42970 bytes users/people/antony_polukhin_small.jpg | Bin 0 -> 3475 bytes users/people/beman_dawes.html | 55 + users/people/beman_dawes.jpg | Bin 0 -> 46973 bytes users/people/beman_dawes_small.jpg | Bin 0 -> 13053 bytes users/people/darin_adler.html | 64 + users/people/darin_adler.jpg | Bin 0 -> 30416 bytes users/people/darin_adler_small.jpg | Bin 0 -> 9102 bytes users/people/daryle_walker.html | 29 + users/people/daryle_walker.jpg | Bin 0 -> 3618 bytes users/people/daryle_walker_small.jpg | Bin 0 -> 4693 bytes users/people/dave_abrahams.html | 38 + users/people/dave_abrahams.jpg | Bin 0 -> 32767 bytes users/people/dave_abrahams_small.jpg | Bin 0 -> 5605 bytes users/people/dietmar_kuehl.html | 53 + users/people/dietmar_kuehl.jpg | Bin 0 -> 30510 bytes users/people/dietmar_kuehl_small.jpg | Bin 0 -> 10571 bytes users/people/doug_gregor.html | 47 + users/people/doug_gregor.jpg | Bin 0 -> 30947 bytes users/people/doug_gregor_small.jpg | Bin 0 -> 2493 bytes users/people/ed_brey.html | 59 + users/people/ed_brey.jpg | Bin 0 -> 13913 bytes users/people/ed_brey_small.jpg | Bin 0 -> 2464 bytes users/people/eric_friedman.html | 44 + users/people/eric_friedman.jpg | Bin 0 -> 14523 bytes users/people/eric_friedman_small.jpg | Bin 0 -> 7923 bytes users/people/fernando_cacciola.html | 64 + users/people/fernando_cacciola.jpg | Bin 0 -> 38339 bytes users/people/fernando_cacciola_small.jpg | Bin 0 -> 9371 bytes users/people/gary_powell.html | 41 + users/people/gary_powell.jpg | Bin 0 -> 13577 bytes users/people/gary_powell_small.jpg | Bin 0 -> 9036 bytes users/people/gennadiy_rozental.html | 44 + users/people/gennadiy_rozental.jpg | Bin 0 -> 34755 bytes users/people/gennadiy_rozental_small.jpg | Bin 0 -> 10215 bytes users/people/glen_fernandes.html | 49 + users/people/glen_fernandes.jpg | Bin 0 -> 64870 bytes users/people/glen_fernandes_small.jpg | Bin 0 -> 7204 bytes users/people/greg_colvin.html | 32 + users/people/greg_colvin.jpg | Bin 0 -> 25661 bytes users/people/greg_colvin_small.jpg | Bin 0 -> 8913 bytes users/people/hartmut_kaiser.html | 42 + users/people/hartmut_kaiser.jpg | Bin 0 -> 20675 bytes users/people/hartmut_kaiser_small.jpg | Bin 0 -> 9207 bytes users/people/herve_bronnimann.html | 38 + users/people/herve_bronnimann.jpg | Bin 0 -> 74080 bytes users/people/herve_bronnimann_small.jpg | Bin 0 -> 8796 bytes users/people/howard_hinnant.html | 50 + users/people/howard_hinnant.jpg | Bin 0 -> 19817 bytes users/people/howard_hinnant_small.jpg | Bin 0 -> 11167 bytes users/people/hubert_holin.html | 51 + users/people/hubert_holin.jpg | Bin 0 -> 12875 bytes users/people/hubert_holin_small.jpg | Bin 0 -> 5122 bytes users/people/jaakko_jarvi.html | 38 + users/people/jaakko_jarvi.jpg | Bin 0 -> 25365 bytes users/people/jaakko_jarvi_small.jpg | Bin 0 -> 2449 bytes users/people/jan_gaspar.html | 46 + users/people/jan_gaspar.jpg | Bin 0 -> 36004 bytes users/people/jan_gaspar_small.jpg | Bin 0 -> 17752 bytes users/people/jeff_garland.html | 46 + users/people/jeff_garland.jpg | Bin 0 -> 35325 bytes users/people/jeff_garland_small.jpg | Bin 0 -> 2011 bytes users/people/jens_maurer.html | 50 + users/people/jens_maurer.jpg | Bin 0 -> 15698 bytes users/people/jens_maurer_small.jpg | Bin 0 -> 8161 bytes users/people/jeremy_siek.html | 44 + users/people/jeremy_siek.jpg | Bin 0 -> 12867 bytes users/people/jeremy_siek_small.jpg | Bin 0 -> 6920 bytes users/people/joaquin_lopez.html | 44 + users/people/joaquin_lopez.jpg | Bin 0 -> 30625 bytes users/people/joaquin_lopez_small.jpg | Bin 0 -> 39783 bytes users/people/joel_de_guzman.html | 30 + users/people/joel_de_guzman.jpg | Bin 0 -> 36002 bytes users/people/joel_de_guzman_small.jpg | Bin 0 -> 10611 bytes users/people/john_maddock.html | 35 + users/people/john_maddock.jpg | Bin 0 -> 14611 bytes users/people/john_maddock_small.jpg | Bin 0 -> 1325 bytes users/people/jonathan_turkanis.html | 34 + users/people/jonathan_turkanis.jpg | Bin 0 -> 31865 bytes users/people/jonathan_turkanis_small.jpg | Bin 0 -> 9782 bytes users/people/kevlin_henney.html | 56 + users/people/kevlin_henney.jpg | Bin 0 -> 18107 bytes users/people/kevlin_henney_small.jpg | Bin 0 -> 8934 bytes users/people/liequan_lee.html | 39 + users/people/liequan_lee.jpg | Bin 0 -> 24165 bytes users/people/liequan_lee_small.jpg | Bin 0 -> 1288 bytes users/people/mac_murrett.html | 37 + users/people/mac_murrett.jpg | Bin 0 -> 19542 bytes users/people/mac_murrett_small.jpg | Bin 0 -> 2353 bytes users/people/mark_rodgers.html | 44 + users/people/mark_rodgers.jpg | Bin 0 -> 23035 bytes users/people/mark_rodgers_small.jpg | Bin 0 -> 2351 bytes users/people/mat_marcus.html | 37 + users/people/mat_marcus.jpg | Bin 0 -> 28440 bytes users/people/mat_marcus_small.jpg | Bin 0 -> 2783 bytes users/people/nicolai_josuttis.jpg | Bin 0 -> 19499 bytes users/people/nicolai_josuttis_small.jpg | Bin 0 -> 8738 bytes users/people/paul_mensonides.html | 33 + users/people/paul_mensonides.jpg | Bin 0 -> 26093 bytes users/people/paul_mensonides_small.jpg | Bin 0 -> 7742 bytes users/people/paul_moore.html | 42 + users/people/paul_moore.jpg | Bin 0 -> 12023 bytes users/people/paul_moore_small.jpg | Bin 0 -> 10007 bytes users/people/pavol_droba.html | 51 + users/people/pavol_droba.jpg | Bin 0 -> 23801 bytes users/people/pavol_droba_small.jpg | Bin 0 -> 2262 bytes users/people/peter_dimov.html | 33 + users/people/peter_dimov.jpg | Bin 0 -> 56340 bytes users/people/peter_dimov_old.jpg | Bin 0 -> 16507 bytes users/people/peter_dimov_small.jpg | Bin 0 -> 20444 bytes users/people/peter_dimov_small_old.jpg | Bin 0 -> 2362 bytes users/people/ralf_w_grosse_kunstleve.html | 62 + users/people/ralf_w_grosse_kunstleve.jpg | Bin 0 -> 29133 bytes users/people/ralf_w_grosse_kunstleve_sm.jpg | Bin 0 -> 8122 bytes users/people/rene_rivera.html | 43 + users/people/rene_rivera.jpg | Bin 0 -> 6987 bytes users/people/robert_ramey.html | 45 + users/people/robert_ramey.jpg | Bin 0 -> 129764 bytes users/people/robert_ramey_small.jpg | Bin 0 -> 1814 bytes users/people/ronald_garcia.html | 38 + users/people/ronald_garcia.jpg | Bin 0 -> 12092 bytes users/people/ronald_garcia_small.jpg | Bin 0 -> 4765 bytes users/people/samuel_krempp.html | 45 + users/people/samuel_krempp.jpg | Bin 0 -> 24203 bytes users/people/samuel_krempp_small.jpg | Bin 0 -> 8599 bytes users/people/template.html | 25 + users/people/thomas_witt.html | 43 + users/people/thomas_witt.jpg | Bin 0 -> 31285 bytes users/people/thomas_witt_small.jpg | Bin 0 -> 9008 bytes users/people/thorsten_ottosen.html | 48 + users/people/thorsten_ottosen.jpg | Bin 0 -> 127144 bytes users/people/thorsten_ottosen_small.jpg | Bin 0 -> 37668 bytes users/people/vesa_karvonen.html | 87 + users/people/vesa_karvonen.jpg | Bin 0 -> 2333 bytes users/people/vesa_karvonen_small.jpg | Bin 0 -> 4676 bytes users/people/vladimir_prus.html | 32 + users/people/vladimir_prus.jpg | Bin 0 -> 25247 bytes users/people/vladimir_prus_small.jpg | Bin 0 -> 10727 bytes users/people/william_kempf.html | 41 + users/people/william_kempf.jpg | Bin 0 -> 10935 bytes users/people/william_kempf_small.jpg | Bin 0 -> 7399 bytes users/uses.html | 78 + users/uses_inhouse.html | 283 + users/uses_open.html | 739 ++ users/uses_shrink.html | 655 ++ 557 files changed, 69189 insertions(+) create mode 100644 boost-card.jpg create mode 100644 boost-logo.png create mode 100644 boost.png create mode 100644 common/footer-banners.html create mode 100644 common/footer-license.html create mode 100644 common/heading-doc.html create mode 100644 common/heading.html create mode 100644 common/menu-boost.html create mode 100644 common/menu-community.html create mode 100644 common/menu-development.html create mode 100644 common/menu-welcome.html create mode 100644 common/sidebar-boost.html create mode 100644 common/sidebar-common.html create mode 100644 common/sidebar-community.html create mode 100644 common/sidebar-development.html create mode 100644 common/sidebar-doc.html create mode 100644 common/sidebar-donate.html create mode 100644 common/sidebar-get-boost.html create mode 100644 common/sidebar-search.html create mode 100644 common/sidebar-support.html create mode 100644 common/sidebar-welcome.html create mode 100644 community/_template_.html create mode 100644 community/acknowledgements.html create mode 100644 community/blom_libraries/boost_function.html create mode 100644 community/blom_libraries/logos/IceCube_horizontal.jpg create mode 100644 community/blom_libraries/logos/IceCube_horizontal2.jpg create mode 100644 community/blom_libraries/logos/blom_logo.png create mode 100644 community/committee.html create mode 100644 community/counted_body.html create mode 100644 community/cpp.html create mode 100644 community/error_handling.html create mode 100644 community/exception_safety.html create mode 100644 community/feature_model_diagrams.html create mode 100644 community/generic_programming.html create mode 100644 community/groups.html create mode 100644 community/gsoc.html create mode 100644 community/gsoc_2006_boost_overview.html create mode 100644 community/imc_summer_of_code_2016.html create mode 100644 community/implementation_variations.html create mode 100644 community/index.html create mode 100644 community/irc.html create mode 100644 community/moderators.html create mode 100644 community/official_library_maintainer_program.html create mode 100644 community/policy.html create mode 100644 community/requests.html create mode 100644 community/review_schedule.html create mode 100644 community/reviews.html create mode 100644 community/sandbox.html create mode 100644 development/_template_.html create mode 100644 development/borland_cpp.html create mode 100644 development/bugs.html create mode 100644 development/design_faq.html create mode 100644 development/exemplar.html create mode 100644 development/header.html create mode 100644 development/index.html create mode 100644 development/int_const_guidelines.html create mode 100644 development/library_metadata.html create mode 100644 development/report-apr-2006.html create mode 100644 development/report-dec-2009.html create mode 100644 development/report-jan-2006.html create mode 100644 development/report-jun-2009.html create mode 100644 development/report-may-2008.html create mode 100644 development/report-nov-2007.html create mode 100644 development/report-nov-2008.html create mode 100644 development/report-sep-2007.html create mode 100644 development/requirements.html create mode 100644 development/reuse.html create mode 100644 development/running_regression_tests.html create mode 100644 development/separate_compilation.html create mode 100644 development/submissions.html create mode 100644 development/template/template.html create mode 100644 development/test.html create mode 100644 development/testing.html create mode 100644 development/website_updating.html create mode 100644 doc/_template_.html create mode 100644 doc/index.html create mode 100644 doc/libs/1_36_0/libs/test/docbook/img/boost.test.logo.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/mb1.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/mb2.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/mb3.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/mb4.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/pc1.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/pc2.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/pc3.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/pc4.png create mode 100644 doc/libs/1_53_0/libs/pool/doc/images/pc5.png create mode 100644 doc/libs/1_61_0/doc/html/boost_asio/async_op1.png create mode 100644 doc/libs/1_61_0/doc/html/boost_asio/async_op2.png create mode 100644 doc/libs/1_61_0/doc/html/boost_asio/proactor.png create mode 100644 doc/libs/1_61_0/doc/html/boost_asio/sync_op.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/alert.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/blank.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/1.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/10.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/11.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/12.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/13.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/14.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/15.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/2.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/3.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/4.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/5.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/6.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/7.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/8.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/9.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/caution.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/draft.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/home.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/important.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/next.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/next_disabled.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/note.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev_disabled.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/smiley.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/tip.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/toc-blank.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/toc-minus.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/toc-plus.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up_disabled.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/warning.png create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/logo.jpg create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/phase_lattice_2d_0000.jpg create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/phase_lattice_2d_0100.jpg create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/phase_lattice_2d_1000.jpg create mode 100644 doc/libs/1_61_0/libs/numeric/odeint/doc/html/solar_system.jpg create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/alert.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/1.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/10.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/11.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/12.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/13.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/14.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/15.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/2.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/3.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/4.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/5.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/6.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/7.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/8.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/9.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/caution.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/important.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/note.png create mode 100644 doc/libs/1_61_0/libs/spirit/repository/doc/html/images/tip.png create mode 100644 doc/libs/1_62_0/doc/html/boost_asio/async_op1.png create mode 100644 doc/libs/1_62_0/doc/html/boost_asio/async_op2.png create mode 100644 doc/libs/1_62_0/doc/html/boost_asio/proactor.png create mode 100644 doc/libs/1_62_0/doc/html/boost_asio/sync_op.png create mode 100644 doc/libs/1_77_0/libs/leaf/doc/html/index.html create mode 100644 doc/libs/1_77_0/libs/qvm/doc/html/index.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BA_idm35151229096240.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_L.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LITERAL_D.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LL.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LLU.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LU.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_U.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_UL.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_ULL.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229112752.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229114032.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/base_fro_idm35151229100080.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/base_from_member.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/basic_string_view.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228605104.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228608944.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228613424.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/call_traits.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/compress_idm35151228634288.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/compressed_pair.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/in_place_factory_base.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/initialized.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value_t.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/result_of.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/tr1_result_of.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/typed_in_idm35151228676656.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/boost/value_initialized.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/index.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/overview.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/ref.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/base_from_member.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/binary_integer_literals.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/call_traits.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/compressed_pair.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/in_place_factory.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/operators.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/result_of.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/string_view.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/value_init.html create mode 100644 doc/libs/1_78_0/libs/utility/doc/html/utility/utilities0.html create mode 100644 doc/libs/1_79_0/libs/atomic/index.html create mode 100644 doc/libs/common/boost.png create mode 100644 doc/libs/common/doc/src/images/alert.png create mode 100644 doc/libs/common/doc/src/images/blank.png create mode 100644 doc/libs/common/doc/src/images/caution.png create mode 100644 doc/libs/common/doc/src/images/draft.png create mode 100644 doc/libs/common/doc/src/images/home.png create mode 100644 doc/libs/common/doc/src/images/important.png create mode 100644 doc/libs/common/doc/src/images/next.png create mode 100644 doc/libs/common/doc/src/images/next_disabled.png create mode 100644 doc/libs/common/doc/src/images/note.png create mode 100644 doc/libs/common/doc/src/images/prev.png create mode 100644 doc/libs/common/doc/src/images/prev_disabled.png create mode 100644 doc/libs/common/doc/src/images/smiley.png create mode 100644 doc/libs/common/doc/src/images/stable_vector.png create mode 100644 doc/libs/common/doc/src/images/tip.png create mode 100644 doc/libs/common/doc/src/images/toc-blank.png create mode 100644 doc/libs/common/doc/src/images/toc-minus.png create mode 100644 doc/libs/common/doc/src/images/toc-plus.png create mode 100644 doc/libs/common/doc/src/images/up.png create mode 100644 doc/libs/common/doc/src/images/up_disabled.png create mode 100644 doc/libs/common/doc/src/images/warning.png create mode 100644 doc/tools.html create mode 100644 donate/index.html create mode 100644 generated/download-items.html create mode 100644 generated/history-items.html create mode 100644 generated/home-items.html create mode 100644 generated/menu-doc.html create mode 100644 generated/news-items.html create mode 100644 gfx/boost-dark-trans.png create mode 100644 gfx/boost_1_33_0.jpg create mode 100644 gfx/borland_logo.gif create mode 100644 gfx/google_logo_25wht.gif create mode 100644 gfx/imc.jpg create mode 100644 gfx/imc.png create mode 100644 gfx/intel_logo.gif create mode 100644 gfx/kai_logo.gif create mode 100644 gfx/ms_logo.gif create mode 100644 gfx/space.png create mode 100644 index.html create mode 100644 map.html create mode 100644 patches/index.html create mode 100644 style-v2/css_0/alpha_blue_50.png create mode 100644 style-v2/css_0/alpha_white_50.png create mode 100644 style-v2/css_0/alpha_white_75.png create mode 100644 style-v2/css_0/bkg.png create mode 100644 style-v2/css_0/blank.png create mode 100644 style-v2/css_0/boost_bullet.gif create mode 100644 style-v2/css_0/caution.png create mode 100644 style-v2/css_0/draft.png create mode 100644 style-v2/css_0/get-boost.png create mode 100644 style-v2/css_0/home.png create mode 100644 style-v2/css_0/important.png create mode 100644 style-v2/css_0/next.png create mode 100644 style-v2/css_0/next_disabled.png create mode 100644 style-v2/css_0/note.png create mode 100644 style-v2/css_0/panel_bkg.png create mode 100644 style-v2/css_0/prev.png create mode 100644 style-v2/css_0/prev_disabled.png create mode 100644 style-v2/css_0/theme_grape/header-bg.png create mode 100644 style-v2/css_0/theme_grape/header-fg.png create mode 100755 style-v2/css_0/theme_grass/caution.png create mode 100644 style-v2/css_0/theme_grass/footer-bg-left.png create mode 100644 style-v2/css_0/theme_grass/footer-bg-right.png create mode 100644 style-v2/css_0/theme_grass/footer-bg.png create mode 100644 style-v2/css_0/theme_grass/header-bg.png create mode 100644 style-v2/css_0/theme_grass/header-fg.png create mode 100755 style-v2/css_0/theme_grass/home.png create mode 100755 style-v2/css_0/theme_grass/important.png create mode 100755 style-v2/css_0/theme_grass/next.png create mode 100644 style-v2/css_0/theme_grass/next_disabled.png create mode 100755 style-v2/css_0/theme_grass/note.png create mode 100755 style-v2/css_0/theme_grass/prev.png create mode 100644 style-v2/css_0/theme_grass/prev_disabled.png create mode 100755 style-v2/css_0/theme_grass/tip.png create mode 100755 style-v2/css_0/theme_grass/up.png create mode 100644 style-v2/css_0/theme_grass/up_disabled.png create mode 100755 style-v2/css_0/theme_grass/warning.png create mode 100644 style-v2/css_0/tip.png create mode 100644 style-v2/css_0/toc-blank.png create mode 100644 style-v2/css_0/toc-minus.png create mode 100644 style-v2/css_0/toc-plus.png create mode 100644 style-v2/css_0/up.png create mode 100644 style-v2/css_0/up_disabled.png create mode 100644 style-v2/css_0/warning.png create mode 100644 support/_template_.html create mode 100644 users/_template_.html create mode 100644 users/bibliography.html create mode 100644 users/download/boost_jam_3_1_18.html create mode 100644 users/download/index.html create mode 100644 users/faq.html create mode 100644 users/history/in_progress.html create mode 100644 users/history/index.html create mode 100644 users/history/old_versions.html create mode 100644 users/history/version_1_10_3.html create mode 100644 users/history/version_1_10_4.html create mode 100644 users/history/version_1_11_0.html create mode 100644 users/history/version_1_11_1.html create mode 100644 users/history/version_1_11_2.html create mode 100644 users/history/version_1_12_0.html create mode 100644 users/history/version_1_13_0.html create mode 100644 users/history/version_1_14_0.html create mode 100644 users/history/version_1_14_1.html create mode 100644 users/history/version_1_14_2.html create mode 100644 users/history/version_1_14_3.html create mode 100644 users/history/version_1_15_0.html create mode 100644 users/history/version_1_15_1.html create mode 100644 users/history/version_1_16_0.html create mode 100644 users/history/version_1_16_1.html create mode 100644 users/history/version_1_17_0.html create mode 100644 users/history/version_1_18_0.html create mode 100644 users/history/version_1_18_1.html create mode 100644 users/history/version_1_18_2.html create mode 100644 users/history/version_1_18_3.html create mode 100644 users/history/version_1_19_0.html create mode 100644 users/history/version_1_20_0.html create mode 100644 users/history/version_1_20_1.html create mode 100644 users/history/version_1_20_2.html create mode 100644 users/history/version_1_21_0.html create mode 100644 users/history/version_1_21_1.html create mode 100644 users/history/version_1_21_2.html create mode 100644 users/history/version_1_22_0.html create mode 100644 users/history/version_1_23_0.html create mode 100644 users/history/version_1_24_0.html create mode 100644 users/history/version_1_25_0.html create mode 100644 users/history/version_1_25_1.html create mode 100644 users/history/version_1_26_0.html create mode 100644 users/history/version_1_27_0.html create mode 100644 users/history/version_1_28_0.html create mode 100644 users/history/version_1_29_0.html create mode 100644 users/history/version_1_30_0.html create mode 100644 users/history/version_1_30_1.html create mode 100644 users/history/version_1_30_2.html create mode 100644 users/history/version_1_31_0.html create mode 100644 users/history/version_1_32_0.html create mode 100644 users/history/version_1_33_0.html create mode 100644 users/history/version_1_33_1.html create mode 100644 users/history/version_1_34_0.html create mode 100644 users/history/version_1_34_1.html create mode 100644 users/history/version_1_35_0.html create mode 100644 users/history/version_1_36_0.html create mode 100644 users/history/version_1_37_0.html create mode 100644 users/history/version_1_38_0.html create mode 100644 users/history/version_1_39_0.html create mode 100644 users/history/version_1_40_0.html create mode 100644 users/history/version_1_41_0.html create mode 100644 users/history/version_1_42_0.html create mode 100644 users/history/version_1_43_0.html create mode 100644 users/history/version_1_44_0.html create mode 100644 users/history/version_1_45_0.html create mode 100644 users/history/version_1_46_0.html create mode 100644 users/history/version_1_46_1.html create mode 100644 users/history/version_1_47_0.html create mode 100644 users/history/version_1_48_0.html create mode 100644 users/history/version_1_49_0.html create mode 100644 users/history/version_1_50_0.html create mode 100644 users/history/version_1_51_0.html create mode 100644 users/history/version_1_52_0.html create mode 100644 users/history/version_1_53_0.html create mode 100644 users/history/version_1_54_0.html create mode 100644 users/history/version_1_55_0.html create mode 100644 users/history/version_1_56_0.html create mode 100644 users/history/version_1_57_0.html create mode 100644 users/history/version_1_58_0.html create mode 100644 users/history/version_1_59_0.html create mode 100644 users/history/version_1_60_0.html create mode 100644 users/history/version_1_61_0.html create mode 100644 users/history/version_1_62_0.html create mode 100644 users/history/version_1_63_0.html create mode 100644 users/history/version_1_64_0.html create mode 100644 users/history/version_1_65_0.html create mode 100644 users/history/version_1_65_1.html create mode 100644 users/history/version_1_66_0.html create mode 100644 users/history/version_1_67_0.html create mode 100644 users/history/version_1_68_0.html create mode 100644 users/history/version_1_69_0.html create mode 100644 users/history/version_1_70_0.html create mode 100644 users/history/version_1_71_0.html create mode 100644 users/history/version_1_72_0.html create mode 100644 users/history/version_1_73_0.html create mode 100644 users/history/version_1_74_0.html create mode 100644 users/history/version_1_75_0.html create mode 100644 users/history/version_1_76_0.html create mode 100644 users/history/version_1_77_0.html create mode 100644 users/history/version_1_78_0.html create mode 100644 users/history/version_1_79_0.html create mode 100644 users/history/version_1_80_0.html create mode 100644 users/index.html create mode 100644 users/license.html create mode 100644 users/memoriam.html create mode 100644 users/memoriam/beman_dawes.html create mode 100644 users/memoriam/beman_dawes.jpg create mode 100644 users/news/a_special_note_for_boost_1_52_0_and_higher.html create mode 100644 users/news/asio_formal_review_begins.html create mode 100644 users/news/boost_has_moved_downloads_to_jfr.html create mode 100644 users/news/boost_locale_security_notice.html create mode 100644 users/news/index.html create mode 100644 users/news/old_compilers.html create mode 100644 users/news/website_1_0_launch.html create mode 100644 users/people.html create mode 100644 users/people/_template_.html create mode 100644 users/people/aleksey_gurtovoy.html create mode 100644 users/people/aleksey_gurtovoy.jpg create mode 100644 users/people/aleksey_gurtovoy2.jpg create mode 100644 users/people/aleksey_gurtovoy_small.jpg create mode 100644 users/people/andreas_huber.html create mode 100644 users/people/andreas_huber.jpg create mode 100644 users/people/andreas_huber_small.jpg create mode 100644 users/people/anonymous.jpg create mode 100644 users/people/anonymous_small.jpg create mode 100644 users/people/anthony_williams.html create mode 100644 users/people/anthony_williams.jpg create mode 100644 users/people/anthony_williams_large.jpg create mode 100644 users/people/antony_polukhin.html create mode 100644 users/people/antony_polukhin.jpg create mode 100644 users/people/antony_polukhin_small.jpg create mode 100644 users/people/beman_dawes.html create mode 100644 users/people/beman_dawes.jpg create mode 100644 users/people/beman_dawes_small.jpg create mode 100644 users/people/darin_adler.html create mode 100644 users/people/darin_adler.jpg create mode 100644 users/people/darin_adler_small.jpg create mode 100644 users/people/daryle_walker.html create mode 100644 users/people/daryle_walker.jpg create mode 100644 users/people/daryle_walker_small.jpg create mode 100644 users/people/dave_abrahams.html create mode 100644 users/people/dave_abrahams.jpg create mode 100644 users/people/dave_abrahams_small.jpg create mode 100644 users/people/dietmar_kuehl.html create mode 100644 users/people/dietmar_kuehl.jpg create mode 100644 users/people/dietmar_kuehl_small.jpg create mode 100644 users/people/doug_gregor.html create mode 100644 users/people/doug_gregor.jpg create mode 100644 users/people/doug_gregor_small.jpg create mode 100644 users/people/ed_brey.html create mode 100644 users/people/ed_brey.jpg create mode 100644 users/people/ed_brey_small.jpg create mode 100644 users/people/eric_friedman.html create mode 100644 users/people/eric_friedman.jpg create mode 100644 users/people/eric_friedman_small.jpg create mode 100644 users/people/fernando_cacciola.html create mode 100644 users/people/fernando_cacciola.jpg create mode 100644 users/people/fernando_cacciola_small.jpg create mode 100644 users/people/gary_powell.html create mode 100644 users/people/gary_powell.jpg create mode 100644 users/people/gary_powell_small.jpg create mode 100644 users/people/gennadiy_rozental.html create mode 100644 users/people/gennadiy_rozental.jpg create mode 100644 users/people/gennadiy_rozental_small.jpg create mode 100644 users/people/glen_fernandes.html create mode 100644 users/people/glen_fernandes.jpg create mode 100644 users/people/glen_fernandes_small.jpg create mode 100644 users/people/greg_colvin.html create mode 100644 users/people/greg_colvin.jpg create mode 100644 users/people/greg_colvin_small.jpg create mode 100644 users/people/hartmut_kaiser.html create mode 100644 users/people/hartmut_kaiser.jpg create mode 100644 users/people/hartmut_kaiser_small.jpg create mode 100644 users/people/herve_bronnimann.html create mode 100644 users/people/herve_bronnimann.jpg create mode 100644 users/people/herve_bronnimann_small.jpg create mode 100644 users/people/howard_hinnant.html create mode 100644 users/people/howard_hinnant.jpg create mode 100644 users/people/howard_hinnant_small.jpg create mode 100644 users/people/hubert_holin.html create mode 100644 users/people/hubert_holin.jpg create mode 100644 users/people/hubert_holin_small.jpg create mode 100644 users/people/jaakko_jarvi.html create mode 100644 users/people/jaakko_jarvi.jpg create mode 100644 users/people/jaakko_jarvi_small.jpg create mode 100644 users/people/jan_gaspar.html create mode 100644 users/people/jan_gaspar.jpg create mode 100644 users/people/jan_gaspar_small.jpg create mode 100644 users/people/jeff_garland.html create mode 100644 users/people/jeff_garland.jpg create mode 100644 users/people/jeff_garland_small.jpg create mode 100644 users/people/jens_maurer.html create mode 100644 users/people/jens_maurer.jpg create mode 100644 users/people/jens_maurer_small.jpg create mode 100644 users/people/jeremy_siek.html create mode 100644 users/people/jeremy_siek.jpg create mode 100644 users/people/jeremy_siek_small.jpg create mode 100644 users/people/joaquin_lopez.html create mode 100644 users/people/joaquin_lopez.jpg create mode 100644 users/people/joaquin_lopez_small.jpg create mode 100644 users/people/joel_de_guzman.html create mode 100644 users/people/joel_de_guzman.jpg create mode 100644 users/people/joel_de_guzman_small.jpg create mode 100644 users/people/john_maddock.html create mode 100644 users/people/john_maddock.jpg create mode 100644 users/people/john_maddock_small.jpg create mode 100644 users/people/jonathan_turkanis.html create mode 100644 users/people/jonathan_turkanis.jpg create mode 100644 users/people/jonathan_turkanis_small.jpg create mode 100644 users/people/kevlin_henney.html create mode 100644 users/people/kevlin_henney.jpg create mode 100644 users/people/kevlin_henney_small.jpg create mode 100644 users/people/liequan_lee.html create mode 100644 users/people/liequan_lee.jpg create mode 100644 users/people/liequan_lee_small.jpg create mode 100644 users/people/mac_murrett.html create mode 100644 users/people/mac_murrett.jpg create mode 100644 users/people/mac_murrett_small.jpg create mode 100644 users/people/mark_rodgers.html create mode 100644 users/people/mark_rodgers.jpg create mode 100644 users/people/mark_rodgers_small.jpg create mode 100644 users/people/mat_marcus.html create mode 100644 users/people/mat_marcus.jpg create mode 100644 users/people/mat_marcus_small.jpg create mode 100644 users/people/nicolai_josuttis.jpg create mode 100644 users/people/nicolai_josuttis_small.jpg create mode 100644 users/people/paul_mensonides.html create mode 100644 users/people/paul_mensonides.jpg create mode 100644 users/people/paul_mensonides_small.jpg create mode 100644 users/people/paul_moore.html create mode 100644 users/people/paul_moore.jpg create mode 100644 users/people/paul_moore_small.jpg create mode 100644 users/people/pavol_droba.html create mode 100644 users/people/pavol_droba.jpg create mode 100644 users/people/pavol_droba_small.jpg create mode 100644 users/people/peter_dimov.html create mode 100644 users/people/peter_dimov.jpg create mode 100644 users/people/peter_dimov_old.jpg create mode 100644 users/people/peter_dimov_small.jpg create mode 100644 users/people/peter_dimov_small_old.jpg create mode 100644 users/people/ralf_w_grosse_kunstleve.html create mode 100644 users/people/ralf_w_grosse_kunstleve.jpg create mode 100644 users/people/ralf_w_grosse_kunstleve_sm.jpg create mode 100644 users/people/rene_rivera.html create mode 100644 users/people/rene_rivera.jpg create mode 100644 users/people/robert_ramey.html create mode 100644 users/people/robert_ramey.jpg create mode 100644 users/people/robert_ramey_small.jpg create mode 100644 users/people/ronald_garcia.html create mode 100644 users/people/ronald_garcia.jpg create mode 100644 users/people/ronald_garcia_small.jpg create mode 100644 users/people/samuel_krempp.html create mode 100644 users/people/samuel_krempp.jpg create mode 100644 users/people/samuel_krempp_small.jpg create mode 100644 users/people/template.html create mode 100644 users/people/thomas_witt.html create mode 100644 users/people/thomas_witt.jpg create mode 100644 users/people/thomas_witt_small.jpg create mode 100644 users/people/thorsten_ottosen.html create mode 100644 users/people/thorsten_ottosen.jpg create mode 100644 users/people/thorsten_ottosen_small.jpg create mode 100644 users/people/vesa_karvonen.html create mode 100644 users/people/vesa_karvonen.jpg create mode 100644 users/people/vesa_karvonen_small.jpg create mode 100644 users/people/vladimir_prus.html create mode 100644 users/people/vladimir_prus.jpg create mode 100644 users/people/vladimir_prus_small.jpg create mode 100644 users/people/william_kempf.html create mode 100644 users/people/william_kempf.jpg create mode 100644 users/people/william_kempf_small.jpg create mode 100644 users/uses.html create mode 100644 users/uses_inhouse.html create mode 100644 users/uses_open.html create mode 100644 users/uses_shrink.html diff --git a/boost-card.jpg b/boost-card.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dd3c319663765974b755ce49c711d6320c92dfe GIT binary patch literal 6881 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�Zvj33mFUp+YZPItk7yVXOP!e>99Is@sWka zwuf$S`Lam3i&1026W5@|Al3$Erv*G(I!DA?N*J=>&`}RUGs9{{?s~E%eQM^d0%V1 zyg1Efscy{iHI|Lt39`9tOcD$M49p@{9U1{=_L{5fJj*iMe>-+{e@pn1!$)3jDtntL zmGarL)${Va=ThGj5;xt+IyLpoFK6K+x0*I4S=F|m*6y^P^6qxD^7Vgm!P9JuExTu~ z{%$NDn_hVJulI^iHov2dr+sD&PkOoOX5;IC{D-WvqFl9TYNI zo1y(wyOYy`u!C1-ZCJ_5Xv&wM!Fr}?1=GSnj)kqR0V~*;3Y|p*xO(nZWC#AJIejX& zzP0w7m0nJKcKVD=6yhi{0 z?v!%sS54J(3Yc;^dv8nBk@YiwB)6`A;r%;3wfwr^G~xBeGp5@HSjoeL6F=MYeAxPz zvp#3PZH>2lSM|<^S6c=GO;HTNWRc=bCgGO+-HuKpf zMBBmZp_sX7{IW=iHns%V*x`5Gs6J}1{P7quEqcc zt_@raudF6JED#S+T2so@%)TX*t3{pnV+mi{hDowcTe%DponmU|Fwb2d!QK&4>f^&6 zpu!*%{6aKUZi-c_!%~w|E1z7dn^p29K0%cdY|(1Y)%EOtz2Cz--tS_VQTrw9w6M$!{`@y LyGu5J@&8Q#x`Iq0 literal 0 HcmV?d00001 diff --git a/boost-logo.png b/boost-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2eb054276648da81249a5e35510cd4523a798a6 GIT binary patch literal 38417 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 z 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 Ct(b`b literal 0 HcmV?d00001 diff --git a/boost.png b/boost.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d51fcd5c9149fd77f5ca6ed2b6b1b70e8fe24f GIT binary patch literal 6308 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 literal 0 HcmV?d00001 diff --git a/common/footer-banners.html b/common/footer-banners.html new file mode 100644 index 0000000..944905f --- /dev/null +++ b/common/footer-banners.html @@ -0,0 +1,13 @@ +--- +title: +copyright: +revised: +--- +[XHTML 1.0](https://validator.w3.org/check?uri=referer) + + +[CSS](https://jigsaw.w3.org/css-validator/check/referer) + + +[OSI + Certified](https://opensource.org/docs/definition.php) diff --git a/common/footer-license.html b/common/footer-license.html new file mode 100644 index 0000000..a51bd3e --- /dev/null +++ b/common/footer-license.html @@ -0,0 +1,6 @@ +--- +title: +copyright: +revised: +--- +Distributed under the [Boost Software License, Version 1.0](/LICENSE_1_0.txt). diff --git a/common/heading-doc.html b/common/heading-doc.html new file mode 100644 index 0000000..a59c4e2 --- /dev/null +++ b/common/heading-doc.html @@ -0,0 +1,5 @@ +--- +title: +copyright: +revised: +--- diff --git a/common/heading.html b/common/heading.html new file mode 100644 index 0000000..716f876 --- /dev/null +++ b/common/heading.html @@ -0,0 +1,16 @@ +--- +title: +copyright: +revised: +--- + + +[Boost C++ Libraries +Boost +C++ Libraries](/) +============================================= +...one of the most highly + regarded and expertly designed C++ library projects in the + world. — [Herb Sutter](http://www.gotw.ca/) and [Andrei + Alexandrescu](http://en.wikipedia.org/wiki/Andrei_Alexandrescu), [C++ + Coding Standards](http://safari.awprofessional.com/?XmlId=0321113586) diff --git a/common/menu-boost.html b/common/menu-boost.html new file mode 100644 index 0000000..347a2ed --- /dev/null +++ b/common/menu-boost.html @@ -0,0 +1,23 @@ +--- +title: +copyright: +revised: +--- #### [Introduction >](/users/index.html) + + +* [Download >](/users/download/) +* [News >](/users/news/) +* [Version History + >](/users/history/) +* [License >](/users/license.html) +* [People >](/users/people.html) +* [Memoriam >](/users/memoriam.html) +* [Bibliography + >](/users/bibliography.html) +* [Who's Using Boost + >](/users/uses.html) +* [FAQ >](/users/faq.html) +* [How Boost Started >](/users/proposal.pdf) +* [Index >](/map.html) + + diff --git a/common/menu-community.html b/common/menu-community.html new file mode 100644 index 0000000..5dcbb4e --- /dev/null +++ b/common/menu-community.html @@ -0,0 +1,42 @@ +--- +title: +copyright: +revised: +--- #### [Community >](/community/index.html) + + +* [Discussion Groups >](/community/groups.html) +* [Discussion Policy >](/community/policy.html) +* [C++ >](/community/cpp.html) + + [Committee Meetings + >](/community/committee.html) + + [Official Library Maintainer Program>](/community/official_library_maintainer_program.html) + + [Generic Progamming + Techniques >](/community/generic_programming.html) + + [Error and Exception + Handling >](/community/error_handling.html) + + [Exception-Safety in + Generic Components >](/community/exception_safety.html) + + [Counted Body Techniques + >](/community/counted_body.html) + + [Implementation Variations + >](/community/implementation_variations.html) + + [Feature Model + Diagrams >](/community/feature_model_diagrams.html) +* [Acknowledgements >](/community/acknowledgements.html) +* [Mailing Lists >](/community/groups.html) +* [Moderators >](/community/moderators.html) +* [Steering + Committee >](https://sites.google.com/a/boost.org/steering/) +* [Requesting a New Feature + >](/community/requests.html) +* [Reviews >](/community/reviews.html) + + [Schedule >](/community/review_schedule.html) +* [Sandbox >](/community/sandbox.html) +* [IRC >](/community/irc.html) +* [Google Summer of Code >](/community/gsoc.html) + + [2006 Overview + >](/community/gsoc_2006_boost_overview.html) +* [C++Now >](http://cppnow.org) + + diff --git a/common/menu-development.html b/common/menu-development.html new file mode 100644 index 0000000..dc7514e --- /dev/null +++ b/common/menu-development.html @@ -0,0 +1,45 @@ +--- +title: +copyright: +revised: +--- #### [Development >](/development/index.html) + + +* [GitHub >](https://github.com/boostorg) +* [Submissions >](/development/submissions.html) +* [Reporting and Fixing + Bugs>](/development/bugs.html) +* [Open Pull + Requests Report>](/development/pull_requests.php) +* [Testing >](/development/testing.html) + + [Master Summary + >](/development/tests/master/developer/summary.html) + + [Master Issues + >](/development/tests/master/developer/issues.html) + + [Develop + Summary >](/development/tests/develop/developer/summary.html) + + [Develop + Issues >](/development/tests/develop/developer/issues.html) + + [Running + Regression Tests >](/development/running_regression_tests.html) +* [Requirements and Guidelines + >](/development/requirements.html) + + [Test policy >](/development/test.html) + + [Header policy >](/development/header.html) + + [Separate Source + >](/development/separate_compilation.html) + + [Library Reuse >](/development/reuse.html) + + [Coding + Guidelines for Integral Constant Expressions >](/development/int_const_guidelines.html) + + [Library + Metadata >](/development/library_metadata.html) +* ### Website + + + + [Updating + >](/development/website_updating.html) + + [Exemplar >](/development/exemplar.html) + + [Design FAQ >](/development/design_faq.html) + + [Self Check >](/development/webcheck/index.html) + + diff --git a/common/menu-welcome.html b/common/menu-welcome.html new file mode 100644 index 0000000..7b5e5bb --- /dev/null +++ b/common/menu-welcome.html @@ -0,0 +1,16 @@ +--- +title: +copyright: +revised: +--- #### [Welcome >](/) + + +* [Getting Started >](/doc/libs/release/more/getting_started/index.html) +* [Download >](/users/download/) +* [Libraries >](/doc/libs/) +* [Mailing Lists >](/community/groups.html) +* [Reporting and + Fixing Bugs>](/development/bugs.html) +* [Wiki>](https://github.com/boostorg/wiki/wiki/) + + diff --git a/common/sidebar-boost.html b/common/sidebar-boost.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-boost.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/common/sidebar-common.html b/common/sidebar-common.html new file mode 100644 index 0000000..d7975d2 --- /dev/null +++ b/common/sidebar-common.html @@ -0,0 +1,7 @@ +--- +title: +copyright: +revised: +--- + + diff --git a/common/sidebar-community.html b/common/sidebar-community.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-community.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/common/sidebar-development.html b/common/sidebar-development.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-development.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/common/sidebar-doc.html b/common/sidebar-doc.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-doc.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/common/sidebar-donate.html b/common/sidebar-donate.html new file mode 100644 index 0000000..5a67a1f --- /dev/null +++ b/common/sidebar-donate.html @@ -0,0 +1,7 @@ +--- +title: +copyright: +revised: +--- +[![Donate to Boost](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](/donate) + diff --git a/common/sidebar-get-boost.html b/common/sidebar-get-boost.html new file mode 100644 index 0000000..0246332 --- /dev/null +++ b/common/sidebar-get-boost.html @@ -0,0 +1,7 @@ +--- +title: +copyright: +revised: +--- +[Get Boost](/users/download/) +----------------------------- diff --git a/common/sidebar-search.html b/common/sidebar-search.html new file mode 100644 index 0000000..0a8e714 --- /dev/null +++ b/common/sidebar-search.html @@ -0,0 +1,16 @@ +--- +title: +copyright: +revised: +--- + + + (function() { + var cx = '011577717147771266991:jigzgqluebe'; + var gcse = document.createElement('script'); + gcse.type = 'text/javascript'; + gcse.async = true; + gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(gcse, s); + })(); diff --git a/common/sidebar-support.html b/common/sidebar-support.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-support.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/common/sidebar-welcome.html b/common/sidebar-welcome.html new file mode 100644 index 0000000..0b5d7d0 --- /dev/null +++ b/common/sidebar-welcome.html @@ -0,0 +1,11 @@ +--- +title: +copyright: +revised: +--- +* +* +* +* +* + diff --git a/community/_template_.html b/community/_template_.html new file mode 100644 index 0000000..3e170a2 --- /dev/null +++ b/community/_template_.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/community/acknowledgements.html b/community/acknowledgements.html new file mode 100644 index 0000000..375fe52 --- /dev/null +++ b/community/acknowledgements.html @@ -0,0 +1,84 @@ +--- +title: Acknowledgements +copyright: David Abrahams 2011. +revised: 2010-05-06 07:05:24 -0400 +--- +Acknowledgements + + +/\*\*/ + + + +Acknowledgements +================ + +A list of some people and organizations who contribute to + keeping Boost running. + + +Technical Resources +------------------- +Web Hosting, Mailing Lists, and Trac Administration + +Hosting resources for the Boost mailing lists, our web + server, our [wiki + and old bug tracker](http://svn.boost.org/trac/boost), are donated by [Rackspace](https://rackspace.com/). + + +Maintenance, IT support, and general care-and-feeding of + the resources is donated by [Ciere Consulting](https://ciere.com/) +SSL Certificate + +Our wildcard SSL Certificate was generously donated by + the good folks at [Ciere Consulting](https://ciere.com/). +Rendering for producing Boost documentation in PDF + format + +Thanks to [RenderX.inc](http://www.renderx.com) for free use of their XEP + rendering program, vital for the production of the very + popular PDF versions of many Boost manuals written in + Quickbook, BoostBook, etc. + +Testing +------- + + +The compiler status tables have been prepared with resources + donated by a number of individuals, educational institutions, + and companies. Boost would like to thank them for their + support. Some of the organizations helping include: + + +* ![Borland](../gfx/borland_logo.gif) + +[Borland](http://www.borland.com/) +* ![intel](../gfx/intel_logo.gif) + +[Intel + Corporation](http://www.intel.com/software/products) +* ![Microsoft](../gfx/ms_logo.gif) + +[Microsoft](http://msdn.microsoft.com/visualc/) +* [Hewlett-Packard + Company](http://www.hp.com/) +* [Lawrence Berkeley National + Laboratory](http://www.lbl.gov) +* [Open Systems + Laboratory, Indiana University](http://www.osl.iu.edu/) +Note, however, that Boost does not endorse any product or + service, nor does Boost guarantee that some or all of its + libraries work with any of the products or services mentioned + above. + + + + + + + + + diff --git a/community/blom_libraries/boost_function.html b/community/blom_libraries/boost_function.html new file mode 100644 index 0000000..5a97c62 --- /dev/null +++ b/community/blom_libraries/boost_function.html @@ -0,0 +1,47 @@ +--- +title: Boost.Function Official Maintainer +copyright: Alex Olivas 2015. +revised: +--- + + +Boost.Function Official Maintainer + + +/\*\*/ + + + +Boost.Function Official Maintainer +================================== + +![IceCube South Pole Neutrino Observatory](logos/IceCube_horizontal2.jpg) +Boost.Function +-------------- + + +[The IceCube + Collaboration](http://www.icecube.wisc.edu/) is responsible for maintenance of the + Boost.Function library. + + +The team consists of: + + +* Alex Olivas (PoC) - U. Maryland, College Park +* David Schultz - U. Wisconsin, Madison +* David Delvethal - U. Wisconsin, Madison +* Hans Dembinski - U. Delaware +* Jakob van Santen - DESY - Zeuthen + + + + + +Revised 14 September 2015 + +©: + + diff --git a/community/blom_libraries/logos/IceCube_horizontal.jpg b/community/blom_libraries/logos/IceCube_horizontal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..476cece731e185343d8e235e4c3dce563d48a9a4 GIT binary patch literal 614733 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%0DQQ{9)~3u< zp7!Z^LFq|teUYY_6Iz!$J@`oPr9%dW&tn!I~TL89)& zt&N7si~6_a>ZURGUWu^DFz=CdlFEGCwLs%(W?kn-_Jc)FTkW>TL{%dvQ=PPUu6AizNM@& zNy}>{&58TBcwc>dV%Y+Y?7ZaXb7qFEP1Bj#?{F>s@neprrCCn{n zHk;?YiFaQ#v%o*ea3Wvf@|2f#8AadH%d@tW*k`^CeOcO=<7>aCY)M|Z8dG^x{vQ^j zYR*ETjfZk{GFLCG&OM*qGl3yLAUB{kyI^nL|IEWh3I+2+`HCxwjO>1tEGV9(8eYm@ zQo;PNvZ(ar2E)v)#b4&1&8{oC-&dWhP`ab~Ti)8To{XvjgYtynw}lHU^lbkXovgT{ z(q8neQjK|Lg4CCWv12X_T0)=tkbKSnsdBPGu1el|%g6p)`3Z%~OaG$d|eMWnCcTQ$z+pbEzY=zc`X~H=dTSWt}=jF7d z+j!?sYCf)Pkk8f}%&b;a!mi#A6dbdxxaUPDrHDVIy;mWW&GySUi*~Gl+PSTw@TW58qyqQ(h>790Z`oD7djHy#wQ&h8J zCYuJBW&fL~X7xW;sJ~xHKl@eR9j2?*=8dmbDJQ;J_IBo(@&u;s)me?#R<2ES-6%iPEjeUubo+}`rIo&= z8`JJAbxk^&v1s8Ezh7Bi^R`*O&i0z~OVK~GYg#MQ{OZY#N0%-s7mYhSt*U%|;;uH6 zikOs=lI4{mX}=RcR9?>%7aL@~|jjNkvIzM(@<9(vYma zR>m^boXq0xvTu3n3Gd2J=U??zs#si@V}7_Yt?0O%M&*s-K#;C-*2QK;;za>dn2P0# z^O~QO@RgJlWt99VO^bh1`k*Y>$F1ymxtY0Od29Jw*}3JDD!?<~)e;Mj1* zyvDyNqDa1`r%rlnVF&1628me(?a?5bO|ASX|)byR*!yHpf}OP<4&P@e}_qA;nBWA=?Mj~z0g^hxks|5ExO#- zmHl`@cwIy;>)eUCrg^fn_C%ZIJI&DcFenI`CTV=J;L22aX{&tGiB%B0=7wZ`Tr<6o zBinXmQSHH;kfon;rsu{l%8pu^S3BR=eQSQ#TxR32{Qt8nq>kjdPlEQ^W(3qvkBjQ^ ztS?A(tCpy*NdA#Et$towS;UR{>ls&Fk2UCJ^BO#D*q3upY-^Kkt_jGlvY6??wbJP` zI^Ak5GnZ5`)}~~)XHKl0lj|G)w)Sz}KbPNijs^V&mUVjzPl}nQAq^U3NqCXst(CD@a%E=c%j} zM=GDU?WxqNDk`5|*;;iwy|VIQwPlzO1zn!L4dNgj)3$L8iSSIqa(zh`fqHEHX z(j`6KEi22^y4y=z%BFWsOpPdK>ue6ODzEEkc6?C&t$m&Du?mBBU6ID}V{K5oCb5?^ zP3>&HUCJ{>xnz53?WCHNiKXu*91N~4%jws2bS!(+`%pKk>`!m7h-Fz_H?-w2F{^mN zyfe+_B?fa&m2j8Ln^lqgyp&^xaM1PAwyB>T7M3wgNz=Ji#y@1y}QsbFD!rdiXdZF{n-8vn0 zu^;LL+t(%>&%fL*o1B&4-nJw4wtq=mVTQV`c3WDOwZ@*dx7j=S*gF1YyMyeiyxbMo zW|FqH)~a<$#@4(yt-4vW;)`3(m$Xg|6t=!07)u^u1XjHYDH?8qvRV+kT zyH`V4LwDuh2I+>y*@x=yH%yD^u3y%W=aXJv-Qa1pqQ164SM5%HUxNT|Q2oF97Z6=- z8TIU){*`8RH##n7Gu6%RP>w!S7uO!<-CJkgHr?`XolYC4T40?@>rGzXx~dlFit*Ns zwVx*mR#euWnaGyqUfbKhJ({=HuP?ysPOWAyzhzpjSdWhC*P6#YRy?n2jXI`5>}pl2 zm7R69{CUmqnJ$?dYPL_0kE*Q6pPJ<5S>rZ&lf~s4lSvy@o2s8p^5QvNquv2cQ7t=a z>KAV;FR4jbxF%D-MtHtOSPin$xw_ z{V!5i6l(QtNMDe=sdr{(eW+y5l5A&Jv+g@NPmQ;B*XFs(_w}gfJz&e~{+9Ov=UyzZ>N%RPob;r7PeD?MU)P1gK9}w;-lE0EdYvna+vLrm3PiB(FW;i zV5mOX{kHUFzDw7;vQ>%qI)9dj1h;kymw$A=-Vs|-ZM3-kTg7v^yB%&7Z`o?vCspo; z=&E|zi>OB|#xJ|w1RA70lLHBYe$(GEnO@;~0_qvSaG@BQ9b+UCgeQp7*bYf^= zsAOr^nszs5XIseBjq$OqkyF$IzP5x;s&Smv+&t0H;7Zev2`6NCG|le6#@5;Rv<14t zq+(Iqr1`!%L9P4do{oFfvSaqKfTrf9GZ#6UH65CvYS7lCHhr6HW8?bCpV?{~MOvW! z%EI-tZ^Ud${W$Y`yi=t0jD*B3-hR{mB>%SIntCgZUF*@*+Vpv1ded9ek25e#=FJ3$ zVZB$u_gQ=?J*nw4+|%+SwoF@;;o$Xfs&eKJ>ur-?WjAZBpPZMoTFhXoc+M0C{R#W> zwn0Lpz<-8tj#J8_X<4~_5qwil=biDgpX{6e+uCH3U?Hbg*uwmu&5`y z61oa5@A{P4)f1A%C-YQ43M-u0R3qzgVFG83vz1Wa`I>ai(munQ8qqoZd^J`Khr3qQ zLUT%<(d6jnsHB>S*P87@?@aJ$`t4!ecdBWjWlL{cQ<$bf&%P#e(X!r@rVNG$o$3wK zAuh~aGs(YOJ@M;=t6d92L;77ipSW-C-QOu{$<|ZWQKoUedu~UdXleK34i-k{_WKRc zbq={s6T2sKC2pJ`KFKsxsIPJ&qkCr0<^GKpd%8>dE^8EY&Fg0omFzm+vw%^m?P3FX zJgR{q=lz5qv-uL^`)ge2>u5kKPa^v_w8m)c3<8<%Cp+)eEANdJR9#XHCgacs^e^wTt`r!riG-3=F+f za-pMGDVvv^Nmh?swx}=VqwnMexoI05a^_WMgc)9%^FMRH!sj_xv$}Zv=l#n3%fQh6 zyXXwWt`zM>FS1G_c^2%*-r*}bZ%WQb`yX>=<;fY=&lb#=Qn)bdVE$B|+BrG-Yzz!t z)#ZyIx{~KEWG`GDkv;EGQI$`|oRh^i_NB8f7JoGqoas^0t1w~4y^_N`eX}G>LKzr3 zMXH}db@9#5tN0N9aBgsAg!jGK)|G4R9?!I|d}FX>`pPPG1>fnqRfar$GZ?G17#P|w z*3W_HN}4cFry(r7aE@3*qIc=c9}OOMHPb&gNEw7q^Q-@*pgMI?{STh0)8rZi85r8O zG(guLB&p5SZQma*Ia{K=(pzQ5hqfPf8q@ByrRo2gYShLj|7=Qbn+wmHDJ8AE3=FO3 zV7d~o&WY>S4m&f;t8cc~b9s`l}~yTJTHXKj6@V{ zNKdTw-L>{nvb2-(>a3KVru8fJ(yY|2mhVkZ5Ph}ce0l-%rDgjw0vQ%fgtVKMV}5j&;!e zDd9n@{+7x3bggJA>vCjS`oHXzN!Q|K<;H5e7Je4$N$z|gc7uB&zVrEX^* z;iX1he;rmWYVJxmF`ECc^SoN@JjKpaqW|X!cAByJ&RpF*je(&_46Z9_xyhtDAD$&u zlaw5mFWfaT)I@K-@`NR7>2vib%oJ0b^R4#@Yu1c{=9LT#jSVneTh$VSBR4JnmwYjn zd6HS0eu8;@TSj5BPxig6`Dt$98aeASRUNhRlCsaMzs|drdzWoz$>O}Do3&!kr6evY zOqi9nX2O+Zvy5kT-l^-d1+sQ!@aAfS$z?g@>p7Ta|0!fsm&g$+iepPIH7$1B=ohsy zpK-ye*v$oA{k{p!g*`RblGTdNW#*->Dd7$Io&K-X+1@U5cUhQPU}kDL7n^wL)(WNd zCE-si8|U4P7OT9|+Y`rGWmz4WaH(o~hDdUKHDmCV)K}Hnc7EwAs*k8nPrF09N!xT8&#X^#?nnmB?^qzE>yw=GLO)fl1jDW#=R zkaccZb3^W$py0B;wAtUoUiM0Korx0ZK2WhEmbWV_^<4auPL06lNd+BTHv3Xk+a*0MY_f7eM@3l9(w$|Mkp&BXByWg`n>RCn zCGOYkqt+S;^|M%&mEv5d$+7a5mp5mv5YM90B&X(| zO1Ul^aU+)AlveYTdui=vM?XBd5I&*yz!)|lFnTt3|-eQD~Gw!N9NG7L*~v&*uQ zlNxfJa%%lH=Y7npw=5~JD{xhaE?_G3VbrT*EIz*EUQ$PH-_-h)oB4dL=4rnRDvEbx z{4czcXp!~4Sj~4@&W@5yi^kl)r8V+%bM;DpGK$pcR-`UAiN9XnG5KmzK!ri`w3I0o z$BW|Ac2ow&|I0XAdB>+GYgJXU`ReRvRp;e?WzDU6$ndu=q$X|QirD(b+DQosl8v!V zx=A&SY6bsNb~HSSdy)3AVTt$jj4KW0W-qds8@%PRGfEm{8D7P|M)%r-076!E?1YT=ofgxd6?kMR?7_LN8`^+Y`^bxBQeKUkKYA#C)iJR>VX zGOqk=b`+@WEs~x2FtsV-fEPnu|2tBnnR!ml)10 zT3S*gkzAx!0$y`l^=LXv25afej)R$}%jzndv(wAnGOcpnl>ZFhmzPtq*i|h5P^F{6 z@q*6E?c%5M-&FR1?5ZoAx*+vfJzslz`m%bP3ggVUdbji+SwHJ7!;a;2)a$rd=Dw}h zFp$cdS1%_Xl*d*F?gcb3OsP(O)iJ5fC-r^@SGijHvi7jF@0r1EJ)zgK-nO1`uFvsn z)z}5_-%K?yG4Gfd}laeM0wWg+|O}J6!mS)zUmZq5gw)aseZ|0<)TBmDS zU%JEeMYFTI)`-o`R_;6w(KYE_qTcMzmQBglGZ&WjrSeTLP0dR?Jk=^BE+coct&@J{ zrHPyLCTHnQR22)$677YyHzuVe_%8X}qL&oAD81x&ist;5l$)v7=FADckzO@R-0@(> z%^AUZN|_SV6GWe8`t+TH*wt54@jPNu2GUg}-y>Trowc=YZwY5kWkGex<2>1fr=`2|7X=uV^%n}+ zNtMSI#cFYvzb$qZu&op*0?&ZgZtc2SFu8bBZFb>`k^}jgMGH&U#=j`;Eo=ApFR3c` zwoNbfFaNFCSGu<%Q-HbbO*u5aIw$94*Q~1v$e&p&md9PNvNk+!N8!@iD!K;VPUVj(UfA>tqN{yVwoc!!s?waw-g`NYxpR6B$1>%u?w;s#EPq2+ zwY5hJ+tHa$~i!RAW;tonIdvbnP7%?XUYkh5^+J@4hYbEjXj za?OjMwoY9%k8^4&-|~WqozQWB#_NsU5wWEajS+4LVA&s&zH-v_y{vbf=N-L`~BB^h<6lH=2^)V)pJ8X;aUm;T&?yFMZF zlUYIisqCFf=?yJ8CpqpnzRUry`lw~A-&Mn#8Cz^w6PB%+dbVbI&W&)%nmc)E?nbq` z`8Q1W)lMrER(w_`QMircXnkAZY>-_I40SUqmld8W;;Z5<`kpeaDx-uoOs{Hp$#=Kt zYK79vrsCD@WgUto)mO?caBQkADCdUgs%0W_OS$5O?q_brYo7RTJm%BB^xI8Ui z(8-J6HUB(u2g}lH!T=!NMh1C$Km#F174C zV|2Q-s!v<~PRWBlUXJAQbFHf(x~ldSRm`c$3ollm^*7;j@$8ubL6eI=P3LnqE%BV% zXjD>CHC0Hyv3T30YaBY|T&-;oU8R0q+rw{VHgx`u`Vh0JvnKYQ-;z%CgxU5c9siQ0 zbw77{rD{sncl}KL%=ooSBwYfet0ulAqC-0VdB*1UnMuLXFWU7|=K20;yP0;>Ze`o* zjGelDZI80NCH*@LvUW4+wC7}l(|mn%aaQZZ^yleoTJ177M{~El%ue%FZdsV~)AmP8 zMP7<7d&|Q7T1kf1nfVKt{91(z%|LcFFccLu+vnd;TiDD|C>i;!>3ETak5^Mqv7N0+ zQ$dNcPHt0Q$tj6B&1NN=m|~l`%FaS`71lO7l|M+`*(h5vF_N$0Ri%=5Y{T}-88$N; zCRhH^e$lY9%1Oeb;eVAdQ(mJ>HMHz4SXMuw{!_~P`uYath@kq=26eBk^@OW|2u6tSkRKmFKbNvgZ-uk`uKOlDHf2*_X;7&=bvuZyUe!h;k-PTLH_Eg&x>!RA( zZQRe^Iz=Ekj?r=c<~my*5@~YifED zw3gHa_SlF|sNT{Y%{0F@tMM4buDriB!85#*vuYBiJB3}Y(V4p6)4KZF6eX+a)xDF2 zw4$p$C;b->tSasAXPQv6pm7gGS0?k6`f#q;3zIz}zXz_H6dH5XC2-=@_$1THiK>Yk zREj1pN)F}spVE`8&cM*YnF-F7byqTECn?9Rh?SoxlJGZ>bAn>Bh4Y#Iz*Ij|@xC+Z z@+x-yG8xhQnGubt+$-vMOR}9@jlUCPTn7b!Bu4i7}fB&TJlLcB%sokuFHpXwd8j2K@ z^Sfpg&E+@mK3~Mgz|gb@wpuK8eRplCPt>%oJ!PVPvpYYQ9dex4saGCgoYpbF{Dd-d z$D;DT{5+k(>{ z@*B4*HiO59VY-s-;&d87hn3Z`yhyFcS@>SG3mCV?X8 zKB?&VS*J)ox#ujhrX=P)*2)PtuHCh`1-j-Fs>^(0U;k4-&Iv{R zi=7Vli}sx}%kQ1gdt2jCPk8SkiJv_jJqy{3Izw7HA?hJyz_L||A---&D`tdUvi4oh z8)>WeX6cjYOog_kH)Fo@O<%D%mV<#|0Y?IO$4wzLH2jaPm=dk!dSuy|SaYlWOXcE? z^ja4mO!%%4y*M{XoA3D2O-bww40Cf*MM1WdLQ6J(+hxIt?_G75OiS*wa$NK}RYFg2 zVO?6Kg78B2^f11Qiyo$PF)+-!mkC~LS7igz+rZ#=d{6ZJ)1=$6Dmd5jr77FTW&-E!> zBHuG-Y2i1%19NW{_A!`FV<<%l4d3evvdR*iPtChr_QB%GT#fQjo!7JHl~0t9n038; z4&RO0E6d{;3Mb#H3W3-HA$^PI3)hA^*UxRPU1YI(_W9ZkI@@QN*Upnyn;Bc%!*_A! z)7q^J8zynqL0h~~T`KdKTOysk<`lOSS~Sku)?%bHb0$ageR-}KLd{S3R?R4Hu4dRe zVP*q#KPE(%&&Ro%-TlrQv!`^oS)|Oo(9NOKHbbDRPhNQ1=dSg9H>b;WxG>!9Pj7&> zG$6WGo{M@FymIE+*yG_f9iJ20qD{*Kl6B(Fq^wBYmE;`oFhewTs`a7FyBUj>RWl2+ zUNS$gOwT#J{7~59IE5J^kq;97wYSH-OFmY{8-F9MBDo=Hex`u`wN$0-UaQM#&vP#* zrKaA<&tX1MIj1mv>7Af68NJio!$Px)TYpC`&+#dl8gnd9Cdnv%cm939ZAo#36D*&m zNEC}IZcN%(BFVhA@>E&U;-CJ(MR%uE1uGQaYOx7hSaPLUKJsJfiG+u-B4xXMXU1PB zUt!6ZSW{7<$d$lS@soLK<)^Bzi;R36YGo%q2=J(NY1$Y3r#7Q-eRytdTl|rz&9$q1 z=EZi@-mtKWSFB@HsER#VC(GPeB~o{P!3NJI?U56^eebqyXq*_hv-N+$+)%$(zqrE@ zD_d52--zyPku#qW%iFwJfie0^^8)6ADuX8N`DN~f6T2oL7X zuGsHkAG=q1t4H4GDl?agcIfPvUlLW?IgL4~%A?71UW@CR*-QEtd+E*esej;SKkY-l zRN((9t7F4M>nF|k>Wj#kaNlfpSHJUBYDr0+GM@(YY(Zpw-fjKKv#Z5Nnv8BJ2zMk8Z32yi1ewckEP9V0VH!fjg zLQ3teWc6gzT&L8!)MwEx>Dx2PJtk#t%X(rWp3R)gD4m|=n+M(xTXcCAcT`k*WcR#S z=ghPk|M;)jG1+I5>T+$OY*HTObGnzO{Vv#Jtev4-q$jm2ePYphP&zDco)HxGw@|I~ zU6fK$eAT*G=Hm9Oiui3Mb0ayDTuYa`m8KMyEip<=Z7na8(oVH52hWUDPn)(Qgth8T zM`?I$b$q2~R95xgOu1OQ8mV>AJ1U9v7 zZMO+!Y)PrmjxcQgl_46f+T0Y*6Z^PX$mME+O4Ck5se~_0jglUTOPioO@1_L$XY>`f z*$1=r#+N&X`S)n2+eb!qeF}4m(eAwBq8*pl@yuXlyhulo#GeG;4rr}6xzTsW45`-Y zz}#srWgQ_$r+B7K48J`oD0FVr_6d`ndt!d|>l*09R`k_K?2NbUc?$}S28Kyre99M2 zZ+RPFKA)xZd+_8rE@|vxt7py(RgLVJ?&+)(eQav4{>d2ODZeEmKN&l(T z!!i4sg3}MgZ!g}KxiG0Sg*iJv)jU`-S3UiJ!;QRkSyDR3^C#sn2`3gj&j|wARW`NH zJ4q`|q2X>yQHEzxe_Bsgc+!iE#vJD$&8)CIaR;&N*ZD_vEOV9?iV6$m#TJ53XR6xV zvpw!beqMcWVn)IBf`7@Yi&PUArXDMf2>6$NxTL~fIy1SnLAx;Xb(yQsq#XA$9*|vi z?%l32JQX`?KgDgW%*A?zfEbXHjH>XSv^-Udg{c!*f()Z{jYrYCz$nB+e9ax>n+sGPt5D}6l_Xc)dgKW z+kP`-*W8&^tHSrro}becl|C~pHZJDUbPiwFc;=~M*1r<^Ctud&jDJ5lLr^94eK&O0 ztks}!Qm{isR?)Pu&sj^0H%C=OFD&b_PZNE&$m za_OPwO@%%~NSA+>^hFJGHba zzYCPyb zxRT8vT@4KNyHbkE8j3yAip!Hz?_}6jD1|3v-mN(3em*;@GQ@02PDSNq<=h<0Dp78( z!r4{OHe20-B-#4NBJ&i>`dKM=(xmIxh83h=s9)^%B{QUch8bH{eEkfi@0q9S7jxY& zkf?`_V%6?R(CAPrj7y4YKb69t;?r&tx-N~kt6P^}qPPo$lEjcCWLf`ICo|GxQ*{<``3uB3ByFICb@z0v)WYjf_a zc4#Z5raLx#=A;6n_!To0l5Qt1o#qwNlAJOn(N#0$>7;8W6{-6sNh_XANtzhQm7SN; z4sB^y{H=T!^e>mCDk-c#fw!6=@>}5b>J71)PVO}s3GxR2YaNr;$vmpdNl|8LX?U3e zE;lL_$~TuKM0;d^E!T+CkLN4@l<+>_f5ndER>vuowW-exN~+w`U&(Y-vu1o`nO&!u z37(UxIZ#$x%$qztYeR{6>Xq0(rJU)X{r{A{%6#pxvuuC%4*jF$wYjD;0_CT3ud&Rj zKAN`^6kql4OI-?Bv+rjX7h2`k#_THc&->>uQ0!WeVE?E@uW**WV#)oYY0}F|b`?Eh znP0iF1iG7`L^wCR#5}`0Z$qh7^rHNGWwL&(1<%Xw+1nIeEAP>pSyWviBpp%su0n}r zZG~hdG;I{~WlPk|OV7{guN98Em3zK6%GW6GQEi=FR{pu#IeH8QLA86O9_Dw{9%7kM zVN=%xa$y5QkyWN~%g?lhS^HX^M2Y2awM_J>$W?7ovfY&@(0oKUFR!$Dy3~x^j^=wT zvnni_njyLhC#5g%bxUK&bne+0S&=oZ`>gkq>; znH5&eGEiNjX@ygJQ(H2mru0R8&n%d%tM;L zXm5hfA?6%yx*1fR*wl13^m(X9)0apc_tVXmF}4=hnis}1s^4s>NYoMf(zZKsDg#5a zRq8sBT{XbkPig{IVZX4`{o z$%n3H$;_=x%lr}NSH+UOFetF9HCNZwyXt%1472^!8Tsebe5!93EEKY==`ZjA=_>gL zA{!VolFP0ZUXBeZpHTEQFt$Rq_^V4`#iEjnX3CY^rM;>rDig|>1;1AQC8*pd&(qcw zooL(~eY$vW<8A+MCE1Nfow-XMH};skEVXP*R{374-*@E6BS#1X)>LFz6i~_NVZBhFQH730B zdtLaT|F)BGk$2x_6YiqAJ|-3YBE>#4LBV4CF6c-vL|4MHp8UWWVeH*+L+*H$cdrcp zYdfcVYSa^bsqX8ssd5~>nsL848~U>1!RHBNf_F*O6~y;<21Wb})$SCG-tD=n<6c~- z&DV}2348PwcDzeECVR5;XYvouC0#3$!D%TEtha$7Zho6%LUM?1n_9Mw{WN6AJwSCR_%elBcFyl4IZN<>Bl-Lc;8R;j3jhf3dtK6?P7iRNXr#ENi zROyB`cjnHKdEBCsC&Ag)lAZ^ykt?D>dK(yGjy1f=*lN|?C|Z=S zbD&YZSXU;!v9CCpGqLe;F}Pl+0q@sqV2J)wcf9OKU`IVyd8?aky?lj?<=uMmias6X zdXb7pGOG0&6(2dH>bF$RgxCThqit$F)Y%4Hul28+YHcJ0}<{&l;g zFV?Em9pUV)y;Kif{Q}VywWhkV^>jc<_0QIGu5LBbtreDR)gN2_YUfvPYdI|4TOHLZ z%^6e^(+nO}hK;2}Syy@W<^-@-UGLR)xmoqUC)Z+m)!FVz+UixM-5%0Ol{dSMIDM+M z+MsPbh+QE|r`-v#_3D}WF*ww|bE=OCF?&zfDF|kG+lU(9vtE5lrNbncBG39x}OvWn{xst%Cq7d3& z4mv%NC(hpE&Vi4|Ne5f4K%b0aR$g6L1)?6m}t`9j&K)R}-^;e)} z_lcZPcbD$W+-Wx1UElMz8kBVP=g(7m+|^ZJEBLQ_U;Z;D-HwVP@GM(Bbf;uMQ|Id9 z2Dh1==_N7NmpcBI^6J0p=qc@2%IwG}y)O8uQ@*r=$+a!C!V6>BiH( zqgvNGqCKR#RKKC^YV~v_mbS^&%LG@nJ+1C$Drjk{h3>kA==D!%OKv>k+R+x&_`&K% z>$k@1`aG=#jms5hw+c2c6Vz{&Xgti6*euvs3Q-Rs{eHBXbQ-%xwYqgWSnX{2+_6_* zpv9s?MDcBNbBC1RlV;g=6{hQrTN>X$)I&&*h((2d@pktY+5|e8WG+Y#{-zPRKqJgg z^65)TgZ0%$4f?mqun$Uoa3^WKD)8&}Meiae^`KX-lf9!b}E z3uA6@ET3N-8_B@XcP9nBzO)p)9=n0TZT4K==()Bgb97_Z7#*6OAK#~Td)CiH6^X;M z_a?sLm_GYlQUC)(k8>tiedS7s3*Fdf*(6!nw9L#;zGL`p#-7wLHHR7QY26a;Gv21N zaWu^ENsnh>=)9K)9=EB5?z?eKnZ6_Ah4tO(JXxBCanmBQ9aL9Ly_CZx{(G8FjyFf? zRQ{ax3=HkZO7tPNKuDLPQzz%|v-X`sfuUtn z?J0;Y5YqYNB*)qbR=E?u)xI?_n&@BqL*?*5+_MZsn z2$F4JiBbv+$d8HDiAs)Lnjje$=(Rs-Ym%T@VM=mpqg;IQwDd2G)wK=Tl5;NlwMKCC zi3I6I=hwA_Zi?HN#}O%*_$eko#yOSEb9Fp>`Zv>tgc(`$W!EMc<&-gY*QVs3pLNS~ zO_E)YweNwHoi*a%;)@DvV5^#g({4*YQ0My z&3NHzlatbw?YTMkXSI>mvM$KNz2gY%MjBsgJr<#>Tj; z)~vF7I+vqaSw+WbH?DGv%6(py>$-k%p&JxU8mi6}EXf@OO5UZ**nrSf0V?+1Y+2+}d|?yQphSz}mKIBfUV= zHbv?5&{J)b7!TEQG#X6$YQZ+ezBSeMz@)OWpH6Ql97)e}pV4m`w$poe?=_b@eph<7 z86NhR=#iE-3|ZfOn(;)<-$s*3#%BC;x3uiD{xqAttkBVEMq4_I8|O6dupBS@DakHN zeIqA5Hth6`n-n1RJ@|b82gb8CUmGnZH%IOBeb?$7n;4`}79IaL%rdPusVho9v@zvp z>~Ck=bn(P~eg6!Hl#ODmGE39IBYU}*CRT>d44>J2HDY(vzf#@kZE;?y^>Mw4Wg&|b z4O1$d8j`cpz4Ugb#Aa?6^Gi#}x&=yyMH~8O1w2XgY+?$@O}<_{Gkj-SKnhdT`Hc0! zVX;fIJ~<}Gf6Nuoy_hgJ@0RGsUskFLiX3KwEGe+TX#kKYuJH$PLcMwl==vet_FtA4yWk$c{O$JZ0)>x)4g5Va^vUu z%e9{MpAuBp>TDMga;4?I_UsU!mLnpev5Q*3Gjt6M9SiM0O!!~D$>mi4+T2H;27O-f zjJ|3;pZ%EwrgmSjJsotX>!-GEkbBoL5v|zQo#64P28Q%4g8a| zD`$J?rI5tDh{$G_WBGSuejE1}Y9|QGUnyLZWXWz^zAae*=C??CF8l$wj#lPU5NFd9Mv~(^3mufLPDN{VV;L39=W4Vu`vGb17N zeB-g`hY=eam-z)m8#NZ&FNjrZ^w%$qJ<{kc%M(}E*ui$AB)>5es>?ROxyv$reemMW zozZ4t^E!U`ZjRLIP`77~7Heo|ikv-4vT!VUQrku)OYB61YWLaVwuc=XL0veb5ZH6lf}0fh3oXnSdVP_?wB7Y-j4E})_0SSKLp74Q?Le$c z^zOF)z{)u8HgT5)@sC?O%{mh~S~bQORNh_~;~QcI6Z?CuoakYdsKnUTNFv|$Itg(;7#czmNG?^Nvw z_~FN1-4W8{$Xt^We%Gj^)+g$=;*`3ESYDnp4GUr`K_ z`TQ;470v3PRk0-YhT)0Iri5TcnX2?8L7pu&Ym#h1y0XCI6?I<{KNc>JX%3GqdKWM5 z{jNkPae}>mDSz^HgI}f3QZFbpmQ|$7@zhj0rb~fz<%faD28M(UxmQz+!ld&9(@eZJ z6im;MwKFeVlX>4juBa|MQvPbu<{Wz-gR+Pm@SI2qbmlj{B`YTTMJRI)OK!a9lHAO^ zJ+?Y|-T9yOEAssde#(32%NBNU|0}*w2;MsnvczLw)|}E3 zo2=~PWlDPIb4toK$TMf(F8j;X!TveuQ%^L3O`G;!3p#f|C#yn5*YBma5l9Jo(=w6$q*vxM2obJ=K zS$B2%=B6&$H)*e$wsUvo#WbPJJjNs?TrIQ05;gX;HbgRshqZS` z#jq5%UyTOubjUOX`L0eXyrSMOxW>1o{%Tm4Q)NR!WTBZ(!^aqD4dKR(ah_ryn~me0 zS$bPI62M`Y3%!pc%%eIgYO_yBjeM+wV|C5R_*JHMwegA9)r0Gpk|&B~*Zoe>XX$F# zmI{vFVik~G4Gf{$<%<%(dK*?uO8)B*RvDW5#3Z8fd-^Q3j;i{MXQG#@eq`#i6xZI# z0?#;9faAJ>Aw;UgGSl5lvot8{oPB7SevX-OQrU&v9MwnV=6MmK?&U3caV$~QnfZ@F zw$v1X$OeXBwL+bO)t=5p`GvdfT8dMOmKiN9VJl8oH7~I(el5yc(q4R-C8^T66lJ6$ zC@`DyjKF^_?P41y=PNSYj#`HK;?}1|b7gv+UbGx##CF zw!O5ulk3=4VQ86quJyBuU~Wq5Z4rUIC9OMH0xPyQfk&2LcKN*TUEp=yIiWYp&&=X# zZ*yR#&febtAue*E{qbSpJPi}?hJ9mT=NF0abFU|I}O^LP9 zy59CV-dg5P`;~+i?k64d681ANG>4>uZ{jHHfavnBZcMxwnk?3!_x>-3{TZ^%| zF=fAuLW^PQYVMAf?WufMm^>41+s{9&oXxD>FQCNJr zUM{)aw8y5s%%$mpQGU5X(|mQSa?2)fDV4IKrf9Bn6((yJQ7&I3(;k7K6Q^ji&@CjzQCJ0 zI#XwcBq?}La|lZl%$u<=T%Vb9s%WG=14HAw6mUzvlo6uK&T*1hXoacOB+2lH+H#ZZ zqL}2ZCS8wSAh2M{;TU(lL@GGmRFb+l(SYE0;Onw>4n*6Eb}k>9>^N%l3S zW$ny)1|XG{&^bpCyMe)4v{kb})9_2{zk>JbKibL*D`k4y_7`s9d)~ILu#IV2%h3|> z{%Fvh@`x2&Ry9q#%ef3=o6ncmsF$^*mami1YnfiYf^Tt)XZa+iyk@2<@ah*>{6g%q z;%!(}r*81P@mrn0I(O5WIz#ElO=s#D`6f2S)afyGHg?p3do-xJ7#RNlN8sGF5+eo% z1_l;pP6h@>5DN)o;WIKYFflMNsj$eh-eS+>xXES4-O6*E_dma(K%8K=(01WRqTFIe z;^7jNk~5^XN?($BFQ+OWsnD*tN$HmIe^q5Q7xgraHqGT)$F*PRa_DL3dl+OIb{Z`+ zK4fyw^tZW$g{ftrRjzfX%~IP#cK7UmI0`yxIyk?}vSh;Ehy{vWgCjNsFzB>x!S9ur_gD()r{EDIe3A(uFdVGmW#H zvV(Hsa?|q)^Q#J)3ww&D6wfJHT)L`kWBK-qy_JWnPE?<*IahnO?o9pZhLerQn~pXg zYT4hqyKQ^>=8kopE4!9-&+D1dJF%~=zj{K!#FR-9lYOQ*Of{aSHeGTC&y4>wKh1hF z``Vlnb9c{MJAeLyzJ)c5vKEIgab0S>Okp|S@;@tHt-QYK=<3aD7Ow4ISGzuYL*z#H zO=g=_wg_!y*!p(ct?egvY~8td*M!}5d$RXN?sMO7dO+!*z`=iq-W7M(2od*IBzC66~X!qlJPpY4WKQn&L_x#0+gD+>jDtztnM)u8zw};aWD#n!jKFS^hWXANRj4|D!;uhw%mTa#kI-7WVxd z&$(E*#du_R<@jXyB?ZIdw-esz1@7*Ra#5&A8d5(X`&I-n`zT!LrG! z-n!1F#eLj!mY`nk_P| z0^lb5sC8w6|UAA%gvK6yePF&T#x_(Xh+Wd9t>k~FaZ4BAu zzu9Mt=T^6EuG?L9xbAe@<+0mqkKf*)ec}6K4{hSeD8|`FAu-E^7`qUukTpi3w==dsPoCcZ76=c7%0?cSUqZ_D1zbPmGxyJ1uTT{Op9eiSv^d zBri-^oVp}!S^Dyf6`3ouR%NfsS)IE&Z*~6af|Z3Uik22HE?H1Iw`^wl)QX9fJyq@1 zO*J*OWp(-WnGK1JQB8r(9xZmQrfu5oiXGyeJY7s(-@D)TJnFsCceelVgq;)DPg**8 z&Xh@0JEt{Fub5FVGiz4z?6^6Rb3^9^%@0`MztDeCz~Z1Kp-Ur|#V=1=k+-s9RnzLe zHFMUkUblPwnGN?he%{QvMPaMOw!rN!05!@Z3A6!$wHNIlqoXw~6!M?M}C zJ#Kj-?qt)cWv5S_d3#RaywQb_izSz)T;6o${MFaj*>1?)G`r<~Q_;>R^-+vGP7lPuS@g{RGD<@kBdp*ZA&V^h{xaads=569D z;ExyZ5i}Q46y_BEAaYG~x7d8~W{F10TB#E0G?`FYM>!pNaRmm2SBjUF_9`z^nV?#w zmZI*bVX3LAC7|_J`<2dh-6MJ%_2(J%7*-mk8;6>>m>QWWnG0GlT70y8WOdp4h|N~p zWp*>{yBumA^PQ5MLtQ*wZQKmpl|95gxjp}TefECgbI13B-%X{xBg4R?Z!h*E1G*- zidw_ltlJejSUX;Ip6}Y+J)@_#H>uCPUw4AggdY>{O*%4p)s%@-E2bq(cb}m@Q(_k5 ztXH$I%-KJ8)x2r*n->%=j9=ux*nWw@Ql(|0%Q=?+UGaJ4t5uIy-(GWd?S*xx*B{?- zWaFVt2R9$wa%k((Z6~&$-En#6?Ol&|zuog=AIpBh0}2NX4mlhSI+Av@>RA8rWheHX zymsp28J@FR=iJXHUud{E|I+@;53Vv_Q@`$Wqxk0RTSsoczbkdm?SAotg%8g^W_sfL zbmp_?FU(%Hy}I#6`)$L!>mLk1PWbfxi|^M}-&uY{{apR)+aIgH)&F+?|NkF+bLKPu z`g8RWXJ^*0s5`smR{hMn$~hwSi|bOGed>?ZwPv-}|EoI?xW6H}-qw<#QK*6c&(XS? zZj&cl>ykTj&N$S?wx8KNt1hoCZPtyt8LiGu5_LCQ{4=BK^_$ZJ*43|XT4*8CP}cbD z*PdFlX@!q|*BVTobn0}i-GuX-tZFm+;$}{+UDKn}@V<_{ODV&zuCzng|6n~&8-uxH z{fp)`KOWcUE!_UlvBr4r{*%TvzB4~;I8@U*EqsP+&Hc$z^`~q7`#-0L)n4q`>i52` zrqkD~y*|A)=DT@y@>=HmORLkCzdpXIx_vR%`h@C}^D?LXsL`JJqi$2p`l;K~@@kzY zI{N9={_UwYeOmXW?fut1Ri}1@-qWu-zDeYmbJdeIBI_ipb(SSgy;D7N!L8aQH7c_s zQ>WIPn7YEZsdi$2qiJ;A#E$qcTElge@?FaexC96jmpQz91j1g{IvJU>hD!nTi;A! zs@kzmrADDTdYMCtM~%STr#|^LuckaU>8$EB@}cT83#a*T)~ugyY+_rxuY23O;EvmMX4l)=kJKJIFu(0^ zZNbW()@QY$lY&~cYD=rxTiR-mB_C=2SZC_f-&|4m(sUB&hTb=}?X?}JuZgr3v^(t2 zZf$OTydt?}cgw+vaxK!$_bab7PifXon$s-X)ayN|>2Q;n$&IE7jR#*JYYg8RywIy*|HfZk7a9^*?Jmh~&|4f6 zr`f?n)Y4}Icwf{?NsEpUybYsXD#Sx$lEF0rQ9I6VNvm| z`bR6+Vz<{HoA=j!b^V2@VTO0=e|KHKCp7U<&4v^2`ajkrZ{FA^QDZgFx+kN?y`#75 zUQK_|(ay|Tu2{kLKea2|tJ`MQO*RT_wXFYmM{B~Cw&};G^c`#s+BB)>ON-51v+nTb z==Q$OCr#T5FLiV@*~VzM8#mr?+u8cEagpKamPL(oZ!PZcn=tj5W$%i<@Qp>?cYEyS zh<1f{6|_}!{OGt@aG`x`dq%WJTY2jrH`Z3SmidMuEt1V9H=X)s&zgSZM$i7~IUCr! z*{5XBI?>rQaY<`Xhh@KP{>^sQo)uBetv9;VT=QFYwf7smX{`$M#hfAg$Ztvk- z(70|_SM;3OGy6O4&3Mvc)!sYRKkq|Z_Qb1^=UTn`Ok7^H*mgx5Ol&r7L8&8_LP+wU&dYHDkny|62{ytQifg@}bMNmDPl2sIb?=NPay z^>&0^Inea<{FD4wTzLmA2ue7E- ztfNP%*3xNO=b^d)eW!M(`bTHx&f;&mw6k%#P4m8GY*VH;U7chyNuf!lPPqSatkh4OVRZIyQ{=_qL7(p%al-Sq2};taXzecL6bCQsS9`1GWclNcvRPYCbt zsgdo|?G4OO=n?7G42kIc+40liQ~T|lgLsxrjXQG~7t4Zs^<8P+jSe3Bl-xQ^#*B7pv zIB8))A9ugyT*E4#Ue1|JY16xYOgR^9*70FNiGxAg`|iuS|66Xf9X$4XTFU1ATNEa* zTNk$A`b7Dati6tXCl+6X60>udjHq`V?>dRc^Qt_|HZHZuNXP3*|T|wC$X4A#&SG74#;MU#I;?ptV zXzSGV#|k%{o%CnF%>2#?Mca>c|Lc?8P+n2p{d=WGszT?#g`0w;+W*dcV_(oFIPs9~ z{1&NBhy4mm+N;*CIl16hRqw3&xiwYOIz(p4SKTNrns%=`ENRQ+r8PVOS`(scUfMqF zc~_^PlhtWme|hhs#dDeqRzI5msi|h>xjDs+Tif$y$~UT(9G&{U;ZhRUq~i_i{5$*m z8yjgi+p39`@={IMc>Hpa}b$VUzp<>}FDcxri zW=ss}eCC(dXVU)5W>eSiHUS;s_LdgGT}u~A%{{#0<=nnmsned%Qk-tmvT)k1DQZPF zlUGi(kAF5{WnZ@M!`>;~wKj=e`5k52f7?Y{ZFlZj(7$Zf3b{Fd7iCUUnb|Whq51wa z&sp__9h0@Et&jJepfu^0Z&|Ns-(wr4&VOCowO_SuZ*$%8c7ekBsO1TBx>iL@&6_E; zw6NK9>g@%q3cgP|GW&Jh_5S_SMSbOZmQUig{?IwQ=YaO@wv2YI9p>|o@8Dc^aE|UK z^(oh8>{%1hv~+6SvN;9Cld=~)iOcOTn9bvJy(eFC@r zcb!I++WfASXRA2-`j*yJN!K8aG(&k-RakH_hk8Mdy!-blE3j!LVviHw1YEX)*ox$HA>)AW`RD+qNV!wC8 zWX%U%*^QR#%GYFf&7a4#{Cmgu-k`;E+pBBb=NGrRXA94cZS{zJIo-9T*i&jUck?=n zCw;S<1vKAvo^P7CcFXG7lg`i8TW&HTtEYI;<36M6>UkS`OtWHUE$%9a44F2mU3{Dx#sPvzq7v1$yzpT`jzfgi#(@1ui7$Ca*|HwhM7P6ncKS8pf}qhs^>%JdM)0Lyw)qL=dFCdI&QYh(uQR#y80ICE|RF6JC|YZ z`i#vp-p>pP|2yT`l&9`TC+wc!Yhl;Z(cP{k(jn8fbT!+`>6SGU zDh=n%TP&XuGGp@G+u<9gOr25VK6ygcq&F5?J*K^?T9WNI+Cx?~uk_iSGAn$^$t^EB zw=5`K*IIFPj_(S`4E7mri#Wq8rg+cZ>Yg`2f2y&Ccn@=5la^fj;`Yaj9&Z0rd3-YC zrZbg`n{C#vs@zdrx?)}lXB7F@o#enqnOqMrKp;E1`g_4AxRPXASZ%~WTSOGBvoo*v0Y znT7V-+&Y~m-rmUBzM;u~^^G>)qLyWcS}l`SEL_(T6ZCpcTk|^SrPH;VMNGveHaD$M z|I}U3l(b;`)}jf|Cc12}>s#8mak$ueoD^&X(gd+9zyZKWXZeM#)u~lWrD9FZG$=pSWy+aqr6@<=Habvz^ta zp6hfl`7yz{?TLm*S7J-={MlQa7N|}zU(Yh9vSIPcYcrV&-YwZRbx)$p{3Vk*1Fz1i z>koDMIn|;^#N=)N{*HqhnVsKT^XBVq-nD!~|Fv~hiyay~SNhCnE|{~#bk?VYzw=e6 zy$f78i)qqrr)yJI_pLH{+V9qtrqSBDpiO_?_RTTtCHs5V@vJ=Cz_;Skk}U;si#N_c zn{a5}(pkR(3un%nCg`+hO2|Z3lc#;}x^HRB?u=|ZKhJkF*S7S2o3-mUnAD$MQM}5a zKx1+El9Yrw^8)5=35=fUG2^|{mMH?0c}-sRZR-`%Slg-49ys;Q!M~OD?MAylRR&Z{ z-1?(3Df7?z|CNWL(^tN(%J6x!cwx1_-Rrr0HA#l8(^zXStCsZT*RPyvb5O0}M%%^R z67@eTT(^qU$7HTs&tK0TExO`!-5;N2i(kTv2-fCt&&zdZz zOxz#Puh%BBGo+WJylJz4w`9iKwKko(Q5nlsJD7Y_7d&m-YF9TazO}?~$K;llV6~PW zk7mCqPWvWL^JqP`W76cxa^p>16JBM^TvOFIIZAa|L{F;sj|J*oA$Hj_*L2tzo}Tom z%~-J;%D-9 zT{gTsDYX5W+Q06gR?*3wdz+W|wOVb@SioO)WMkkQfeicAjx)R?Z!FcHvdH_$ygw5@ z+C|K0?$tGXGx1Jms=7|s*Vbc`efKi17H;L+_H-Fn+42o%7rJHWtlB?kf8@y}n`Z=h z@0vGp@>RRg8It`jhQB5jcCA+r>{{6tHJM@0qK#WyK5Z*my}xY!hQMV)8S1Mn7wn8Y zvqWchpZD>3Les+S@}}>aC}<=x(V+X7dVW`4+r`eQXH+T+s=ppJtJKI#+m}(PpYUdT zUuA#rgbfu{Hg1_KIji+7Z!I*h@zGaEsPir-#R_{NOR9}{-zqhaM zYQmOnbLu*Rqt_SIb-Q^k|5kU=^5z2BdK*3G>BsB8s2KPCX?WRbd`hZase1b1tkwm2 z9D63WgeSCbo!VRwY_cw~>9m{KvR6$BmQUx4Hwo!AOuN?jM`c5wS(9+5{z=*1ebt?Z z(z}=EzSupX^L#?qmW~dGVEMH%ZNJVZAuwmk?+-JMy_vd6r{B2?A zqd3;fo;>vb3g1nJ0&HdbkoU+Q-k$aFX?;k7O=#($J0uG⁣P`tnnDwkxO} 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ȋH1e1{a2424{v?21kYr1_y>x2788920Mo7 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�Zvf>Pj<<%JGD;hJ*QLdDY#8pzOK8o^L!8qZj3n#Nddmd99WTEII-R-5 zYzcFL*%p?3vlA@2X3tr2%>FQEoBao2rYy7nOj)K7{K|lV;j$G2!y!iohRx0l3`;>{ zA9f53Q>_>nCYUiW^qBH8beKypv{p9RAR}D{n#C6CwTeB&YcG4S*B$mCuWxKY zUjJExJpZ!6irBnEgg#s>s4#s)+%Mf)c(Mfztjhx-?? zg!^3&L*b8j7F&|m& zqW`nlMS(H1UF3ge`^f*y2Ll)wHbyZpER1Dfm=MFj&;%L-ie_NQjb>m-jAmenj%8p7 zi(_C2O5kM(NEB!AOHyL+P10fTNj7EhO15M0Om<^%PxfPQOAcdnNseQ5O3q+%NG@i! zOKxPgNuI!Bm9&t>GHDB|Me|ivg(-3GJBa#GUqcJXKrFP%skC(nDLg`F#SKX zVcLIYqtyS*Mkx@yJ(_`GWeNksv=j!0wqyo|iev_c+++rZloSSr$W#V~fD8r(&uj(; z=Uf&Bhde$8yL<@-+k7Pkn*wbHs{#`S%R*ZQi$Yfh^Flucv%+u&lfpzsqrzN9!@?>? z{lYFL-NHFc+J)HS#F2rD5A;Vx)p~_%bsmEYYY0jWu zY0scn>A|2=6~v%j6~mxamBFACJ_d;COHPxCUpjtCVd9wW(x+TW+w*4W^V?CmM{kSmLvwbmO=)Z zmL>-2mZ=O;7R zUC6)?SIoc=QpUjGS;@d)U(3K?-pIh9-@?G4-oe12(9Oyq-OI-y)ho&%*(=8&(WlNJ z-ec(BIF%-@k-`uYWfKZ~p@ZzTRI9{N4W< z1iJn+2y{a5!YT%azDfp$x^f1FqH+d?lnMrhh-wA~-#P{crzQpl%QglE{VoOu^*#m$ zg^3Id5>pu%gl4cZ@Xg|5;GHGHz%xshfqRx31NSTg2CiAw44kvv7&vAHGqBB0WMG|D z#K1DEje%*_YzBr|8yOg9o@Zd1`GJ9H#(xHu>His6r$O+{Mh1rVdIpB7ItGU9ItGT= zMh1p}Rt5&wP6h_+UIqrkNem1c(-;`!XEHEI%w=E@T)@DlU|4pTfnn)O28N}7 z7#NoRXJA+Y!4umV7@FD`7>e2;>u^GQ7#KV!GBDUq1FgYfV9=Pyz#zYffkAv31B1Xy z1_tgm3=Aym85kHgvN14hj1L z038UvwT*#c>s$tgt=kwFw%%c2*z%o$VatCw?(Sz`sOn>2$ePH&5IvQF!FLt|gTs6V z2Gb=B3|cD~7!=kpFo$;aDI8!*S3d=@kqN$0sr{9AC-6aQrv}!|^u^49EX5FdY96#?8|i7z$@G zFeHM`!dc9~;JT85!D1Z)gU)6K28Hbm3}U+&82I)wFt8nfj=vmdU|;}^g@D(iFfcHj zWoBSF$H~BOfscXVk}w0q6=?>B8>$Qpw~ZJW?m96r+znx1xR=SmaIcYp;ockuhWlF? z8194i<$Q+k$tefzg<8hI5V@9t!D}-EgY^yu2Ho8Z4D$OK7(@;+Fz|rZzkuvK108?4 z3R{N)9S;HRk$C_b4`F3sc*4!V@LT|LM#)Mg^$ZL?+Zh;a_cAc(9%NvUhwee*293YK*1v$p zUqE(&)`P&;pkNydVP|0Y$;ZI(M~s01Jb`P>!0_K4dNwL(KMd%8n3W6+|MxL4{J+7# z@c%Z$e+CI~9~ZLb0K^8Z2~lVG&j8y40y+}}_xJ=M29Xe!$m!fYyD0_M?EtA6`P&L_pSEfW{v{7}W0Z6LWei^!)-ily*vasb;W)#4 zh6fDq7(RhdCjp&M0>Yp@DWEkNpz(-%pnW>vbr+!iJ}<+61`rlz_|E_e3vK9lkSoJK zh5&}&3{ea}7?K&jGGsG+W+-C#$WY1fo}r%M9YY(#8-^Z+R}7OFUNX#Nc+RkZ;Tgk9 zh9?Z086GkmV0gfAnc*J8Ylb@vzZpQGev9Eh0|?)QuE)3pasxZaUQUMp3~UVl89+2Y zIDURJs51OuFk<-1V9)T0!HeN7LkPnwhFFH@45Y z6^7Ximl&2XoM%|eaF$^w!)b<-3?~_$Fq~lc#&8TeN(G{iGyG?O;s0E04F4HnNAR*R z{Ab{1_`)E>@SZ`Q;T3}p!&3$ehDQv}40jp)7;Z9zGhAVaXSm3a&Tx()m*EUU3BxId zDuxpb4GhN^+8K^A^f4S}n8t9BVIISNh7}BZ88$QQVmQRGli@bQc7_iOpcO-)lXO8e zGX4)b-i8I@hJOqU4Br@-8D22(GCW`qXSm6r!f=tnkl`$Y4Z|r0cZOpOfeeQkA{h=a zBrxn_NN3o?kjJo#p@d;4Lp8&8h9-us44n*{874ApVwlCSfnf>5I)?QOYZ&%2tYWyp zu!7+=!*Yh-;FDxPr^zgZ?&<>3;H_os3=Cg585mxHw%@TZFx+BbXE@Iw$Z&!|hT#x{ zCc{1kQ-<9P4h-8Fyco7H1T$=6h-TQpki@W#A%kHJLq5Z5hEj%=47Cg^7+M&XG4wJl zVVK6Sm|+3KLWb20^BH$C%w;~qFo)#@!z{L+3^UpPGtA)l&oCVcgO2$5F2KO>LWF_g zjwl1eIY9=7W4sIuhgi57_ArPrY-dzt*u<>Iu#VM=VKtiz!wL>xhGiU~3`;m;7#49Q zGc4fBVwlfe$S{|?f?*DK1H&wyPKKF0lNqM-%ww3!yNY27?+%7Zyk{6D@V#Q_6Zpf> zBk-T08wqy_{Ac(r%)szgih<#-0t3StMFxibvJ4E{K~)f_D&pp4Sj{WRu$)hgVKKik z!+ZfdhPi_746_6S7-k5CGfWeTW0)$O$}m|thhdU%F~bCr8isz6R)${Deui$*SqxpG z%NaVvwlcJdon&Ycf6mY(@tdJR@;^g83`_iHsF(Q9@KuU|;fXQ>!+A{xh67p*44c&$ z7*;7UFf5f}U|1r`!LUF?m|?bg?!>M<}Z&|+Yit;WDGLy?hTs+<7B1O;h^UPTRtPGw_; zb`@KORuwmfW>r6iMzv6edbJpaI<;hm8ue_3YV~4S$H{AbM8_|N!4gMs0K5d*^k3kHUD<_ruAO&J(w7%?zR z(q&-i(_~=iR_9@8*AQoD)>39@(AH67`luZ7}^XN7@GAs8S3?g8LAEB87hpl8On@J8A^=p z7>Z2X7z#}M81hX+8FEcy7;;Qg7_v-r7&A;u8PiQ07*kDq7?VwBF(sOdhD! zs!doJ%1s3rO3Y;#3N6$b@-2-RaxJYHvaOsMvaGxrGOU9b(yb#IQmqpildUruldOvv z6Rc|)=@!)Tp40reHo%% zLl`1mV;Cb`Qy9Zsa~VTiE0}^@TbTk~CNulHEN1p~-NNkSdWPBC^)0iv%YP;?cK*-g z;{?H{>=_t#dN437^I~9_>dC;+?!mxN>(0PX>dL^7=fuE}>CC{8>cYv8#o5N<6*=QFLZ6?&-x4<{88g;u*;p?3u_I=$Xyv?^(v=>)FKQ?KzRz%X1;K zhv#Nych6JIZk}(L-8}v?fv~&#e14g#NZKT#o!+9#NZb0#o!Vi#NZqr#o!p8!srm5 z$7mN`&14ha&14lmo5>=4Et7fp5hnBS=S=2df0@if|1+6~{AV%`{?B9){GVx;KLf+c zFb0OHp$rVIAq)%^Aq)(;Aq)&DAq)%=Aq)&bVGIm@;S3C3k(>VZYvHlFUvEdBXv55>;u{n$uv6YNwu^o&iu``*BV^=d7#vWoa zjCsmr82yLIFzP>(VdQ@%qsae^MiKuRw}mh;EQw@bm=M9h&=A4EP#n&{kQvUvkPyMZ z5E9A2;1|un;1SEf;2h7w;E=$_V3#P)V4JAGV4bANV3lOVV3}maV3F*^V4m#FV3r)h zV3HimV4R%6V3=ISsGr=*sFysAQ73sNqjvIsMy=$>j9N**8MPArGit{}aom5#jgbrt z^I{knx?>m^s-qbg@}n6TQll9dVqzE=0^=AMJQElgoRb(BY*HB*EYi6cOf!TSOfsYy zj5Adjj52i@3^Pp`^s{Uk^s?L-bhG>!bh08Dw6jwgG_#8sG_so*)UqctsAMl^P|n`V zpp^B1K{@j$qjLIxM&&dJR!RNOxF&&tVFqY*Pyz!(Sv&)HWl&-Q14DQM1A}ie1A|K% z1A}b_1A|#M1A{>x3xiGpAA?q*D1&C99D_!o8iRU~K7(43IfH7E1A|JD7lTq!2!mpA z0)s+vE`wZgErV?F1P1Bi#SBu#I~gR4?=VOeerJ#>_|G7n|DQoR??0n-?tezmX+aZH z85rtQ7#Ipu7#Px07#Lzx7#M=m7#KV<85rzy7#Pg+85j(T85lIn7#Nf)IT+-t1sLS2 z#TjI(y>!zw-ohSkCh z3~MAA7}hE=Fs##NU|4U?z_8wxfnj|JWH}b-imr827#P;AW?)!%l7V5}d&mkE&?=R+ z{}~!v7#Ip$7#I@U85n}Q85rCqFfdq7V_?vm&A_0%fPq132?K-B3I+xq*oe#~1_p+0 z3=9n0L70hwVFw2T!%kiXhFwAo47(*581^bMFznNYG}R7xFfbg5VqiF!$G~u~je+6d z0tSYIyBHV_K4xGz@RNbzz<)5V>}6ocn83ggIfa42dlmzO?E(e{!=;c_F;eRp7z8&n zFmUf+U|`w}8i`?GU^oa`nZm%paFl_8;TQu0189`w1SDQ*UaGyDt;=R_G8F32-5 zT-Ih_xN60~aMg!_;aUO%!;NwVh8vR@7;da#V7Pgbf#K#G28Nrz85nN-XDFD-z>qMH zfgx}S1B3G_$j&5&JZQh70`*Tpi^TV7=AH$GkjwRW%$ex$MBIMjo}?bF2fs!5{B0dRSYi~8W^54 zv@twm=w*1qFqz>I!)%5J42v1=F|1{{!?2U#7Q-oq>kQ8rt}y&y0F8ja@HvM63?~`> zgGVVKD>0a%mjZ!kUWPvmVhrCIlo&oU=rO!!uwr<_;L7lV!Jpv?Lj=P^h6ILt4CxHF z8FCqJGL$e}WvF7f%+SDak)fU8JVPJDS%#?$ry1rkoMc$eaGYT?!%>Dq42K!+FdSs~ z$grQ`KNy4V_5tC&4F4H+gGOdR2k#=`Zwwp^?-&Fbo-;@@JY-O3xXWP7aFfA~;WC3K z!+C}vhSLm@3?~>88ICceGaO;aWjMr8%y59AieW!P1H)d14u;(f6Bu?f%wX8Tu!vzR z!&-*T47(XNGMr=B!0?J;J;NXHxwdN={xhsY!vC2dBO-qp7#Kb=Fff3U`8@_6hRY11 z3}+Y=8BQ?hFdSj9U^vL&#ITpan_(A2FvAXpD28nei40p9(it`}8D-iz6#lY}^kAdMKXhWg^1H&O+28P}2prV+IVIzYO!x{!Th7}B&3`-eI7#1nG92y3K%9cS1?RuZeWpF%`wtWok95)!+I6pA7aQ$a!=0?Te1Q-~ei8C-%;eN#n8sznFooNZVG@rQ!vvl{hCbd1h92HHhHlaQ)vf7hSGV4G^KY8smlKuQb1VgKSK%#EB6?HUXWEh-EQO$rT2lswxh4z@6F{ROh71f1x(p08+6)Yp8q5r3>H-W!noThC&X7G|R)ZiausQ!NjFxLCe5UTf|;esIp!(J-}h830!4AU(b7`n_E7#hqN z7^;jI7)lKo7>e{581nRZ8M5`o7%~kM8PW{38B&Z)7?O=_84`_M7!r)V8RAWX7-CJL z7-CG47@|zF86r(f8NyAQ7(z`aFou}UXACmkz!+$Hj4{CUIitVnUq*k^|BU`7P;C64 z@w6EO!wy>phQ&4v43lga7+S3v7^X8N#gM8A7Zw7=o>e83L{98U3w#8U3v0GWuAp zWAwH<%;;tHl+n}b52L5$e+aht&*)|GpYgaA1H)zq28Ma|3=Dnt3=EBS3=HMA3=9R< z3=CNo3=C-&3=Bz@>Lsp25#mgTcqmkipx{lEKT}k-^j5gTcc+fWgf@ zg2B~2k-^y`hr!9Cg3-aFozc!?I-`xpN=9pseT-Hf_Zh9+e=u6P{b#gt{m*C(!Y=mD(B#g*Q0C6SknPUEknG055beys5a!Cj5aiCl;OD``;NvO8;N>a9 z;Nhjp;O?cz;O1?{;OcG1;Oyz80x$rt8y~DK;u6Q451zj z3;|vY3_jir44yvh3~s&x3@(0>3{L(^437TV3=RRt4E6!m40Zv|3^svY4Az0c3|4_L z3>Jau4CaBw45ooi490X+~Ui?FxQuX zq05(np~{zmA?AO;5a zU3a zlR_968bTNt3PTte(n1&*VnP@gLP8lByuuh5oFf<*Y@!($%wicB3=&uwbQAd)v=c=c zw31{QG?P>rG?Mff)RWB^)ROHORFmBql#>G)lu}|C6jL%8{O zCxSsdCzU}gr-VTyr;R~4XBLA{&UyyHoKp;f+3y*IGXFCOXFzfKe}+IjSSqSQyI8QS21vu9A@Aw zdCtI9{Fi~d@IM0&2p9Zkn3x1PrKcc~fgvT4fgvi9fx$nCfx$JEfx#w&fx$S3fk8W; zfkCB+fkC#6fkC{IfkCi_g@L!8hk?6Zh=HqKl7X{ciGibDi-E1)gn_l*o`I#_n}Ml5 zf`PFKo0{0 zcRvFI%OnN{hAC_e3{!a+7^Vs^FiaC=V3;n$z%WCFfnkOo1H(*928NlSLHIBRhM5@* z3^QvXS0c|?&A>4I1OvmgcMJ^E{xdL4h2ZKE28R4%28P6928Q4=1_rk(1_tYT1_px` z1_reb1_s$)1_qHy3=DkJ7#KKbGB7aCVPIfbz`($;kb!|=5gP-;A|3{YC7@L*B9LjZ z*tIa z7|y#eFkFaWV7QRSz;LmHf#Jdu28Ig<85k};V_>-WgMs1Ve}?pa28Qq{3=E#L7#OS< zGBD^ZXJAlV%fKMEnSp_C2Ll7!9tH*mkX@jiLC2uuAZHmE7|uagihy>_Tw#EWhumUf zV7SA{z;K_Rf#I<@1H&^F28QQm3=A(k85my1GcdfWU|@JXg@NJqdIpBqXBZgXykKB> z^Nk^X9s@(b5(WmR)eHb}}$X?qgu!JH)`i0vdk-je~&f1la`}bHUi513kSJ zv}@)a==2a)28OS^3=BWT7#RMjGBEtLWMKH`&%p3Moq^$h69dElxeN^dw=yvNKh41K zA9R~6X#4>*?f}9dHf&djKJ=6jcZUBAK@9&HK;sXf+gfrM{xcLqPw8l2_|MSB0J^p1 zAH!sZzYH@Oelsj&_{Ff2;RnMOhVKlA7``#wV))AN5xg4)b}Gk92FUJ^8_*LfAUiO) z8U8bX#vnj6$Q__lNSB5HvFANO~pBUO0 zJ}~q$yl0rg@RngV!yASr;N2-N8Fn!|XE@97l;I`A6NcXmj~V_mz{XxcV;^Ur_xnOt zVt`gcFf#mS0MVfF7|==?6^6eI1`NL$tQo#DxG{WY2w-^65Xta{A%Wo)LpsBAhCGI6 z3?&Rt7^)Z^F*GndU}$H!$I!=chhZwiErxjv*BDkXTw&PEaFO9K!+D1L4CffWfbY>c z&G4TAghA)Yg2p5EfX5#|J5nJ1|NjgO41XE88NM?JGkj!_V|dG;#qf&3l;Jsp1H&T* zFNV7eK@2w;q8P3+Br;rLNN2dfkjrq6p_t(eLlwg*h6aWc4DAfZ82TBGFw9^$#ITUz z0K-~_eGI!9_Ap#v*v0UcVJE{sh8+z5!5DPE&t~XdKOlQy_$O!#fPt0aDFYwFJq8Je z8w|<}ml*UI&NEmtoMv!lIL_e1aD*X*;UGga!+wTDhCK}F47(X}8Fn%hGi+z5V%W;i z$gqW>lVKCXB!&$Pvl-SiEN585u!UhY!!huhndJ;WFji%N?j3^J{}p;DF=!Fi1qLpL z6AVHOhZtlT_AzKM>}D`#*vVkau$94$VH1Nd!v=;>hP4dQ3~Lw?8CEf*Gpu09WmwKo z%&?T9ieU*u6T>2g9)<-B(-`J6EM%C=u#RCi!#;+Y3^y32GkgT!^8;Gj1iJeOhCyxs z+5eo8fdQ1wL5su=Ft9M}VBlle%pk_FoYr3I;QVWeoNViy7P*7BcuV%x4H? zn9C5&Fq^%A!FMo$?qP!ApP-Aecp!&UALe0T*v`qouz?9wBy%z>V-R3i#302mk3p4THiH4f z3Jatsp~H5q!Dj2XI^Z5TROoEh3!y%}2B0vVdw!Wo*_;}{y) zQyA(wau{kkN*HQ5>KLjxI~giCr!kasEoLa?+RRYQeVn0)=NUr*?{9_z-v12wNce>q z1H%P528Nxo3=At}7#QYCF)&OOV_=vd%)rpk$IQ^j#mCUeEzZ!!qs-9EtIN>9YsOH= zXU9;(=f+UY=gUyZAIwl85XDd?kjPLfkik$aP{>dySj|u%*v^nAIE5ica1lec&?bgV zq2ml0!p|Afg#R+6iu{LQ;r|S&!v7iW%R$CqHmEQ#EKp`(n4-wQ&@Iov&?e2m&@9ft z&?LmcP%kLNP$MMEP${CpP$pu?P$Fu@P$cHaP$=fXkT34fkS89-kRu+;kS&qIkSUSN zkRe&lkS5v8kRmyOAz5lZL!#7rh6Jf23~|y=7-D69GsMXJXNZwTV9@TQy;=+mD>NAx zW@s`n^k^_JG^;W&)G9GBRLV0jR7f*3lu7b46iG=ih6FW7hIlm(hFCR!h8XoQhG_LzhDh}^h6s%UhA@p9h7gS|hG5N^ z41t=f7y>l+G5BlVWAM}b&fu&0AA&XhGx%xzXEMSBgc)cvgc=$%1RGj01Q|Io1R8lV1Q-P{_!&nq_!=iNcpGOkco~;7c$l;@xSLF6 za5Y)R;B2y!!O7$rgOkY@1}BsM3{J-X8JvtD7_>rYxdj8mWD5p{W(x*}atj8ATyqA7 zG&2T@0UM*jip@u(ABiU}N#0!PXp#&Hgj& zwq{^hWX-_PZ_U6^Z_U6^3>ts20*$>eFvOZOFhrO!Foc*hFa%m~Gx%EyGx%D{FnC+3 zGI&|(GI&^wp}z>ws?z!2@gzz|~3z~E=kz~JS;z~JV{%HZO}$Kd2F#^B&A&tUJO z&S2-F&tT(X&S33o$6)2^#$f5{$6(Z=#9-={$6)MM!(iyv%V6L(pFz)UGlQ<% z83tXq_YAtO{~7dL{xj$~L+~1B28LCJd%t)(j?I&J4z0J`6@)p$rDz z@eKOj*$legRSY`b-3(gZa~U+eH!`SupJGt=e#@Zl^`Ak*^FM=z$A1P*_x}vb-53}q zx-l@+yD=~nxG^xKg2sT{7#Kp_7#Muq85mqV7#Qrm7#OU*85qocI2lZR1sII|Bp8hR z6c`NsH5d&14H)$OEg1Ct9T;>1JQ%bCf*7;{Vi+_6G8ohY${ADxIv7*}W-}-StY=UR zIKiM0@R~u<|38D0-+u-r-~SBCzW*5(dNMHdcrq|lc``8Mcrh>}dND9WctOU1JiQqh z9DEoUto;}mOamAg41-u0bc1;rbV5WJv_fPUG(%MwG(vS4)I*IK)Ix0-RKr{uRKoli zl)@qz6vI*(m2EGzz2Ci~02G()`2F7wx28MDO28MDK28Ie<28IfA z28Ie}28N0N28N0_28N1!28N0j28IgIu@4&<7|PBvFqD2^U?~01z)%9gb@2=gdGQPk zNpTDek#P(RzVQqUPDu<5mZ=O31{n+t>NyMy@&ybG5+w`_Lgfq$ywwa09CZu~Obr|i z42`@D42^;e3{Bz;49#*349#i`3@ru>3@z3S3@sjzqmWuM7#Lb=7#Lb6GcYu-Vqj=G z%D~Y0nt`G59|J?fe=sgjWnjnzozRoazz~$ez~G+Fz+jWjz+jlqz@Smgz@Sjhz#vh> zz#v%9z`)bYz`)kdz`)SOz`)SM%)rpY$-vOd$H34h$iUDq&cHB1j)7sKIs?Nb(9%?U z28KzXGG$;`?83mXIFx~5G3ctW1_p*jvlti_Zf0Ou zaD#zi!8Znm`TxN0dWoL0ra5MIl`;Mv5$VAIaPpx?*9pge_v zL1GpIgTQ!@R$v{p^1S(XC(uJ{00UF;cW~I+#tV!>;#R2fb0W}gMjP+tp@?!ngd#Y0_qro zcFe#|D}n8rc?-H(my3bniy#BT4|xWLpGFJ}zdRTie#bK~{HbDK_&c3};qQ6|hQG%d z82&zCfQ&zYc4dH0qyY8%VY@lwZ<>|yxKaGv2K!yE8fsj$;IK;sbC8U8bX)HX51>;i1Q;NvmVnlyfOg2(GW=(7XZXhu$ncvXlHn&qBEvU^42CZZc?_Q! zN*F#eR583~Xk>WD(9ZCNp^xDe!!(8$4D-ReQyw#HWq8DJjNt*pV}|<-Kj62cfKCVn zt-m+~J=66+18Cg^Z2SQ<4gv}j5r)4E3Jkv(v>CoLm@#~2aAbJT;LY%cA%x)tLo~xP zh9ri^3>gd$8S)tJGn6pgVW?ub#n8xbgQ0`r3d013OAIp@&ND1xILok(;WWb@hLa4J z8ICi20I&Ht!tkE~gh6XBwlVx?0F6O_`rXL*I|B#92L=I#*9=k&&lyx1o-i0NJY=wD zxWnMeaFxNA;UYsQ!#Rd%hSLm53?~`V8ICjLG8|0Ik6Q-FLhk92bx<0PRWv9me~Vfr;S`124m6 z1`&p{4Dt-87_=CUGng+!5{GW3j+fv ziGvOYI?BMou#Z82VJCwm!&U}mhRqCm3>z5C8P+m5Fsx$mU|7N6&#;sslwmPLG{Yi> z1cn6+X$I>lk<#Rx$`PEM<^oSj3>tuz0Th8YZ= z4AU6=8Ky9VGE8QOW|+v3z%YR!ouQ8*m!X%Tl%boUj-ivGlc9rQDnlE?B8FCmjSS5U zM;ICzo-i~p`~=^>3>sC0;V(=K3=cRN7>;u=Fl=XMU|7S33je%hT12;ntgCIjEgA_v>g9<}4gC0X8gBe3TgB?RHg9}3qgEvDJLm)#X zLpVb@Lo7oXLkdF)Lk>eRV<|%+V*^7zQ!hgv(=3J@=2Z;Y%)1#fS*|f;uzh66VE@mM zj)d=vFfbezXJA+-&cHBFjDcaYC<8;c5CcP-00Tn{4--Q(8!tlxvj{^Cs~kfmy9Pr! zhXF$=hXq41rvpO~ryD~7mk&ceS1>~^cO*j&cOpX;cP2w7PZ2{pPaQ)VPd7sf?@Wdy z-jxiAyt^3^cyBPo@qK29<@=9I}(Z`V5KU<_rnqb_{V6t_-mf z-V8C4K@3rnQ4EoiNetmqISgS^7(Axy!8Awe&)^2aivJn*XfZG>(Pm(nsLjC8q{F~arp>^RtHr>O zrpdsNq{hGyufo6(tHi<(t;oj^p(Mr-rYz48qN2eNtYW|rq-xF(plZk9ujb0&r{=@p zqZY#8tscYRsh-B*pQDYN>gT`qFdyTgY_8R}e*g^e20|;-| zWnh@E$H35|&%jWt&%jWq&%ltO$H0)N%fJw;&A3=A1u4J;U(4eS}54BZ(V4gDD$ z48s}h3=#<<}VoZ&HgbMnEr=glm84W%@`OanK3Xlm@_aGLD#>4#$UqB85jc07#O@w7#Q45 z85ms5m>C?+c^T|2L>TNWWEgBLRT!)-br`HHjTtPhtQah;oEXfkyckTaf*DM#V;PLB zGZ+l4%NX>n+ZlANXENwmuVK)#KFpwL{ft4&>Mw(q)qe(U%l`~I7XKNRSTHd3Su!xx zSTQii$qG#y$PG#sWgs5z`+P<1%SpyKe9 zLB;+LgR0$s1~pp-&}GBGP+`l!kY&rj5O2%C5N6B3;BU*o;AzXi;AG3dU}ML? zU}?|5VCKldVB*NnVB{pmVCW>rpzo~8py#a1pzCbHpyOi0pzY$qpylGrpy3k1pzfN? zpz2!4pzPYjpyWE0LBVwegS_j02053<4Dv3&8RVV+GblLyXHazf&oIl5fuYr&fuY2K zfg#<2fg#3$fg#v|fx!nf{^P*FVCTrdVByTbVB*TaVBp5gpzF@dpzR^VpyeUOpy{E+ zpy8>>pzdkNpz3MKpyKJspzP(vpyUhGb_3h6v~wkf$>PgOdvbgS9IIgQ+_MgMlXl zgSIyVgPJcVgNmO3gOZ;ZgQCAIgMz;*gS@{EgPgx9gRH+TgG_)sgH%8ugJeJ~gLptT zgIGWfgGfL>gK)qS2El+`41xjo7zF))FbMhmXAt)N&miLapP}ECfuY)sfg#(Cfg#?V zfg#kLfx*|Efx*q4fx+ILfx+C1fx*y+fkE4kfk7>Rfk7ddnL#F$he0Y#kU=s`f{MVqlLeW?+qLV_=S(&A=45k%1}p3oPE=n?n|OrTZ~3q{lEYq~|g)q&F}yq)laDNL$0ekb0bf zA@wx_L&_fphLryd49Wi)s)868vVs{HVuK)i!MuYQ7@UF`7%W2>7z`p97&M|87!>0f z7^IRI7(`MT7z8pH7IWMIgD&cKlOhk+sYKNuHBFfgQsGcZJjGcW{( zF)+A+#(<(27>r^W7_<@@7?e^N7^E^77({Xy82IuT7`TcU7+A^}7#J#885ke}>#x28M(f28M9ZI-FPr28VbC2Ge8)2JLhP2IXu92B~}o2H|1` z2EK9z299b52Bta&28JdE28L!v28I?k28LE{28K3%28Iq{28K>a28J%sM36RQO-hd& z14DNh14DNv14DNM14H*r=z5eJ3=AFL;pNTl85s2P7#LKF z85pE07#M_W85npQ85r1F85kHk85kIP89)t91_sc26cC=m%D^y{i-BP}9|OY-AqIw7 z5)2Hp6&V=j=rS%+h>2Xs7883V)Yi3|+0S2HloI?2E=>jMMB%>N7wGyXHA zg7!jXGB9}NFfiB_GB6mFF)*msFfd3rGB60WGcfSgC=3h?pz(>N zj0_CR*%=sC@-Q&05@cXlE5X39UWtKWy#WKmdeF96(7qhdb=j>94C@v$Fs$3hz_9ii z1H+m>;8SDc3Klqj{S{WE*dl(pmCowSa%wS+(2HClY0n*?Hjk$o< zp@7CEHZm|UY-V6!0Id%J?au*?iR@xwVA#XOz_1T=YKb@l!(kQ3VqMTN@<-wr7><@R zFdUuCz;JXu1H;ja3=D@qfp5+Ut6^YpZ(?Au>R@2d>1SY2n8v^$GM9mYcQFG4Gidw; zWG84J5NHn&Xv_t)2IUX~0|N+y#wK86BCxd@;Jq@S(_8r%7;Z~2Fx*vVV7O<+z;Hi+ zf#E?01H*$B28M?V85kb!Wng&th=Jk37Y4s>1_p;o3=Bpy85mR-GB8N2U|`@|&%nS6 z8h_cvz`y{q^9Tb2!wKm6lZy5dXpJE+BpH{|u}QkbNnjQ&SZg{xg7X zNdcYM>df$$!H3}|LkPonh8Tt~49N_i7%~|?Fyu45V<=^K!%)reilK?&1w$vpbB2iw zPZ(w~JYrbF@PJ_h!(E0047V8WFx+7H0=^*ybSnyI4aPy}{twVP2vENp6>~BCWe{Ze z$so<}jX|B^3xg5E2L>C4HwrSP!*GZpk>LPCI>SDO zT!uXi#SFU`su*@KG%;*r=w{f$FpXgo!$O7)4C@)zF&t!A%kThvj_fLi{|qY`{)5+I zfbJRwjYGiP0J?w(vXh4Eq`M8TK$(FzjG(WZ25!!LW(J zAG{7@9Rq9~MjFEkh8*ZRjB19(3@r=`8TuIJGt6R`%dnhbHp32vSqv8#W`fU@{m%ee zdjVR90lIf+5_BBq8+6MTXy^}=-F7puGHhkwW7xnT%CLq(o?#V(Cc_E_BZj36Rt$?6 zoER1`crwgm@MoCA5Xvx%A&OxJLjuDzhBSt$3^@#w8A=!?G1M|lU}$IPW0=g)!?2K{ zn_&Y(7sFA84u)q8?F_%ctC>LeFM}{>Wz!GnrBI;ZN6`2OsMrA&MT;4@80IqwGR$U> zWSGgI%rKonhhZv%3Bx1?8-@uC&J2AFo(w$<{tR6VAq<@iQ4H-22@GuvX$&n4c?``A zvl(g_RxwmF>|v;4xD7sUw*q|b4e0C}2nG#jUSwim*v-Viu!fO= z0aPT;W?*2L#=y!jk%5 zGQ%c@M23?L2@Ee85*Yq4fOg)&@C5+|hHZij42y&q7$yrbFmwnqFf{NpFx2oeFjR6f zGE^{gGn6t2G88jNF%&Q;GvqO9GvqKDGh{JYGGsD4Fr+iPF{H8hFr=~sF(k7_G9*28Kdm28KKV28LW-R)$1%s>DKL%H^{|v685WH2MfnlB^14FkG14E4x14E$_ zWb7kJo`E4=mVqHgih&_ooQWYyl$Rk~OoSm+OqL-;T$Le6LYE;>!i2$J!kWQP(uu)W z(u2WUDuBUDDuTg7Dv7~eDwn}kx{ASBx|6|4dKQC&^cn_x=|c>5GEW(7W&SYO$^2)q zlZN2+%8;eFZK@0mk&I+LnP73i14vJX}_KM{Uwub$_#dz+6=auMhrGumJHTf4h)uB9t;-R0Sso^Q4FTqsSL*2MGS`8O$-J)QyBDg zmNV$+>|xN>xyPWR^MgT0`#*!O76dN@Ez8zrV5rn%V93^IU`Wu1jK2ixF);Y(F)(=O zFfh1kGcY)6Gcefea5LEI2r^jfN-|jKDKc2;0}YD!FL9A{r?OaAguSFVU8XHL%RV3 zLzy81Lk4IJ$cTX<)QEw>&yaz^!;pc&#ejjqL7#!a#(;sr%8--6+)#kQ%t(yE)JTrO z*jSap$XJKL(Ab#4z{HwC-^7_g*TjcG$0UqF%QTTe(=?Ak-L#HD)pP=bvgu+5CDWY@ zil#Ri6ivP{D4G0cP&WS0pltM?VTK_CL$fhtEl{cn14EQ414E!GWc7!u7H z7{bjN82ro`7(C1w7@W)*7;MZL7)&h~7>q0#81$`}7<8<;8MJH!88mGq7&L6<8Psgm z7*uWb7*uRc8IRR8076@7-a1;8Kmti8Kmrc7$oc$Fo@Z2We~Ny#2{w( znL*t4KZAq~1oxRUFjQGEFl1RWFvLN}fV{037+gW)KUNG3mR1Z5Mm7u#dUgy9nhp#M zYK|NXDo%V1N=_mSicZoD3eL(5^3GZea?VB!GR{^E(k{*nQZBv>5-yPp;x6e7qAukO z!Y*A5LN4O!gMe2G1HV@Z1D{tr1FzR?1|F{s3|wBP7`Q#(Fz|T%XW(^*;AT4p zhC+MDTA(lo1_oaT1_oCL1_pZv1_nz<1_mQ11_o_c1_m{E1_nh>1_l{#1_m)db_U@9 zJ_exxVFtkfNd|!cMF#!=O$NRILk8XeYX;sxHwNy&KnAYBcm~eEd3f3j>3*GXsN-3j>3x zD+7a`I|GBd7XyQ$4+DdYKLdk!AOnL?2r~m;I2QwVga89qgeU_?gbV|FgbD*&gbo91 zgc$>KgaZR(gbxElL=*!X*^tQi;*+!+`WLKqklk{K8h$`}|Dx)~Va z7cnrz?`B|#f5gBL_mhDk_CFZsdowU3`YU6h($9n2*xom@Fp-Ya3nJ@Fr~3GFr@P^Fr@P{Fk}cbFl0(HFk~q*Fl1>mFl3o9 zFl0F}Fl6~MFl2$QVajJ<$ZBO^$ePQ*khzV4A>%FsL&kRohV=go3~B!vG6NYHVgeW# zf&v&Ay!;s$>;o7WOoJI1bi)`JR3aG|WMdf^#6aUeDGUre=?n~PSquyec?=8;`OFLq z1sn_vg}e+5MFI>AB_a$ArP2%xWy%Z;#!IY$}$)j%IX*x%BC|glx}2T zD7nnQQ2dpFq4+-oL(zYRw*<=O=(R2m| zfgA<~t^x)ImSP45hB5{QhAIXIh8hrNW?-n}U|^`{VPI$!U|?txVPI&HW?*PlVPI&} zXJBZvg)DpmT}{`4R>O(MkpezIp}*_7>>)OCJMd>}48sEy^qg1_n?A z95g;LAGAM*nSo(32Lr=WUIvEc!jMJEt27uGR#`GItny}HSe3}Yu(FDQVZ}@ah80^G z7?$59s!on02gH#`{_ zZYD4=+^S(3xQqV0ax(xprEE)bYxG?-@ z0IdZHW%$n!%kZB8v?nHu;XgwG!(WCnhTjY|3_lr~8NM@gLC@rv&G3O?8TdSo*9=F% zyHK7p`~=?=3p$4bGzI}Wm2*D>wlgR|`$0hN0G&?)+7AOdkHZ)|7W0R}o#6+AKf@P> zaE6Zzu?+7Rk{RAGWHP*B$Y*%LP|EO(p@!iJLo>r8hHi%Y3{x5IFwAGT$*`K?D#LDu zOAJ>S&NF-h-;QzydP3+fhW`wpF^CP&emAWD524u@elqYgd}R=4_{^Zh@R326;VpwX zbT5i0!+nMThT9C`4A&WA8LluSGhAfIU^vf^$8d(Bl;IRZ4Z{hB7KWn?y$pvKW-uIJ zSi-QEVH3k{hGPsn8D22#VED@b8h6>o@E?30259{S=zLj-y^yh>uM7+fuNfE_o-pt* z++z@CxXB>HaG61k;Ua?p!x;uEh7$}<3`ZEe7!EK5FzjUrW7y3Q!?2SfkzqSSI>T0m zT!zgIB@7!GY8citv@)z^n82`#VGhFzhE)v974V(4I)!7znk8p9%nDd62PCmAL(yhb?( zqle)?Ll?t;2GAM|(8bW8%dtU6|A2-AH!?6WtY+Y0Sk55Cu!KRHVIhMG!vY2!hItI8 z46_+*7-ldyGfZRfWSGL>&oGH0gkb_h6hl8lJVP%-8bdcjE<-0n8AAs{14A2lAIL25 z>Xb%?eGH)8OAXL981)R0Q*P=Q{(~>11`RWUhCD&zAE0G$plyjW8Q2-7GVn1>Vi0AR zz#zxa$Dqd0%b>^5#bCzJ&S1;X%HYhy%$7`CxPiux%W3=Ey@3=B=o3=E(us+xg~p`3w_p_D16p^!nDA)i5;A(z33 zA&0?&A&bF|A(O#{A)UdKA&tSGA(bJFA(#hFk_N zhHM4_hD-)AhI9rwhExVMhGYg^hC~Kqh6DynhIj^hhFAtyh8PBKhG>Q$hA4(eh6siv zhH!=)hERqIhG2#^h9HJ%41o;G83Gt~Gx#&!X7FSB!r;gJpTUpiKbYPjz`(Fjh=HL` zn1P{Qn1P{0n1LZjh=CzpfPo>EkAWeXo0%b*jfWwTMUWwmS&|`!MUf$zRf8dtO`jox z&6FXG-I^hk-H9QD-Gd>R!=E9LBa9({GoHbZGn2uWvy8!;tA)XnYYKx0*D?lou3Zdn zTsIh8xj!?w^8AP64I&H-GsPGf+9enmDkK>gawQlTQpFh<;>8#kVuTqOq68TjqWIVt zqIh^2!g)j(LV08uf_YUKf_SwV0(cD>{P`>x{P^q`eED1%y!m_?y!b*HJow`n-1##Y zT=`2GoCR7K90jH_I0!6buoKwLU@LHk!B+4agRS6y23vvu40Zzl8CFU%FietWU}%(K zU?`GhU`Ur`V2GDtV2G4vU28Jj_28IxM28IAR1_obg1_mEV z1_p02HU>{IJ_dJjQ3h9W83q>#6$U2>Ee1ykLk0&)3kG{hdj?xcHwGIie+Db52nI{3 zWCnBTd=~w=?KVUuMvk`OKg%{hz@Ais#BRFmxy}FqA7ZFl4GQ zFvO`aFodZvFa#(wFnB95FnB01Fu2JwFu2MvF*wWcFgVHxG1$vWGT6x~GT6weGg!;% zF<8l)GFZynFqq4`Fqp~vFqkNWF&HZ(Fc>Q2GUzMRFz71wG3Y2RV9-+B%Al!ufk9L8 z6N9GWe+Dgu{|wp+{~2Z~F)*~KGB6aYF)*a6GcZJ}GcW|JGcfpo#ywOS7+h2s7@QOt z80-}p7;F_e8LSlr7%Y{<7%Y_J7|fJa8BCS68BA1+7>rdc8H`jM84Ogs81z+x8FW?S z7_?Qh8MIWZ7&KIS7}QkfGpML;W>8i=$DpkGfk8#}KZB|Y1W!?AU}#WhV8{op!O>!1 z2-jj@@YiBs@YG~raM563a8PGpuvKGVuu^4UFjr$^FjeDYFi{s_FjALhFw{_DFwoFs z(AO|v(A6|&(9yJK(AIQk(9{fM(9nuuP}9m}P|>PjP}b^VP}G{sAg{HFK~C!ogPhiT z26@f@3<{e685A}CGfdE6V5rezV93#CV2IaYUN05PnlPyA*)XW-xiYBe`7chAfi@tp$qKXJ81_XJGKu zXJByFXJD|?V_>k_F<4U4rh=yPGOKTDPfQ>X=4yGnZ+PtypBQG_ymKn@f!vaoG8t=rb^+g4O{UGBEfVF)+9pF)%n7GB8*hGBB7KGB6k#GB9WxGcahF zFfgc^vN0%|@iHiy2{9;`OESotD=^5Jt24-2=rKrJm@!CM*fU64cru7vhBAm+CNYRu z7BUD~wlD}<&R`I*T+6^`ah!qA;x&VS#eW6?^ZyKjX8#$Q4H*~;j2IXaO&AzLO(0`H zE+z~Nwk8Y=7A6b~#wH95x~2>a8s-cPDwYfk3RX-Evew)T(l!DNlD47@61Fl7;ae0GftJa$tVxb0RlaM>MX;Ie(fz-{}R zfyd@Q1F!XehFZ{`G&9IvtU%}(kfS*RgEeRj$ee+}z?^|W%aVaX)tZ4p!IptR#-4#e z+>wnz#F>{t$XSR%&{={(&{>{Az(t*b-$kE+&&85~*TtEE$Hk9<+a;QT(P+`HqkZ#Gq5NXB0;0GN8va@1fu&`oa zFt%b~(6we@P`71ZP;_8mka1#Q5O-l<5O!l`;P>QW;Pv8X;PDb+;P#Sc;Pg^v;PBFB zVD~a%VD++NVDa)~U;-T|;+4w4;03zwwwr;$Yas)J=S~I&&$|o^o?jUlJpO}mkqrYw zk}U&6s2u}?mmLFS9S~>?$d-XYA36r5?8Lwz>&n0&?#{pB}M z94N@Z5Gc;T5GcpM5U2)8)Pa@^41u6Ql|aySKMV|kpiKqs3=DyD85jb$GB5<(U|bkJ}V149(( zfQv>3hRB%=43Qfd7$Pn*FhqP|Ux5tA>NCDAsDm{ z$CH7<*@J<>(vyKf--m%g-JgL$K8S%qB9wtaD3XDJH>!J63P9Il7c(&A_cAc#FK1xL zJI26}`<{Uz=RX)n`7WP`?E7#J9e7#J8z7#J8z85kJKSr`~9I2jnKco`UK1Q-}<#TXds?qgu6c?mferRqOJSO^1yUoZoMQwRftc^CtO zP80)!Qal5LL^1<|U|Z$FiD<)VUi95!z614hDp8*44^|`CRQ;p^iOAC=-sST`{X_-^l{5wh$s7g-!6F6*u5tzjCXk(=^)Dd1K;tf;u@F$hdopxy4yYjx zS|0))4`E?on9s$)u!x_5VF~Ca9YqF)Wrhq4%bXb)mWDGhEGb}MSlq|Juy{2C!@>&; z3=6)3_v82_GB7x#FfbTrGBBv;F)&D%g3h2}VBl^>8h-)V2igY&8gl`ihXP)I0v($G ztBF)(aDz`(Hm z6$8WeKMZc!3=Eb93=G=k3=H!13=G0;3=G_T3=E8*{YN0bf$Rh=JO|kWvIEo+0<8%F zVNj0|PUtqXioW0oe&!>jIjH26e_jYfnIS zfG}u+8a5UJS{DN9Fv7+`KoS?N3sP;23{AOTc_{PA?@R327;Vpw4!y5(-hL;RR438PC8SXN;Fx+79X1L4{ z$Z&xng5fMfEW>GrWQLOr84Sl5@)?dWlrbD)sAJgA(9W=jVG_eGhWQNJ8P+mvWjM&N ziQx&uMuxu(>lywttbyK4vVh?~!yKe>81Pw~&~*@Z7&sU%GYBx8XOLhx&7j0^l0lo{ z7=sDJK?Ylfy$mi4yBNF~wlf4WY-I>z*u)USuz?|wVI4y{!y1M>hE)t@3@aGw8J010 zF)U`7#;}lKDZ_k*Z47f6E;7tv_{=aHYVS0L{|u8EAb0+N!U41f<2eK5_+LMM!mwpn%;3VXkim;#K7&8QT!v7F*$hz(vltQ> zW-z2NOk>Dnn8HxbFo~g&VFE)RLm$H&h8~8s3|$O|89EtWFo4d!=w$fM(9ZCm0d&G{ z6T^Ro&kPI&L$m!1EDYTYJPaKSLJaK;k_@d3 ziVQ6bnhZ@01`PEK<_xtAwhT24&J0xy9t@QXz6|9I!3<>#kqjjai3~*ynGA&t#SHlj z_2Atxpq)Bd4C@&(8BQ={FuY{|t*%1Gpfxa{?7x(OfdN$Pf|dn>ie=F7cnt#wLnQ+r zLpg&8Lm7h%LkWX2LotIkLm`79Lq3B!Lmq=ILk@#8LpFm4Ll%P{Lk2?#Lpnn=Ln=cu zLo!1yLlQ#;LjprPLp;MYhFFFb46zLR7-ATnFvKwYW{6?<567TlXB8s@!whByhE5g+ zhI%Fjh6-r4Sir!-kjucskj)^-kjWs>={BBTp5BHycq%+f*1lAq8R)cQW$(0@)>*>Y8kv3dKo+! z=7U!?xig$$aA$ZAzAGGb8WISv0UZg($H34mz`#%{z`&3#z`&5q&%hAJ$G{NH!@v;5 z$;1%J!o?8Iz|RoMAj%NTAj1&Epv(}+pvmCRpwHmPV9MajXwBfm=*Zy3&2 z6wctroXFtHoXgnuZ5V9%of)hJycw(nLKrLr z;uy>XvKdSSDjAFfx)=-v<}m0BY+%q8ILV+Z_=Z7O@IQl|;C}{vf&UEC#TXcxBpDbA zLCsOn_=^k!L!b-;gO4-=gS!+1gNp|DgOe~5gQE~PgM**|gPo8#gN=|JgSD_K zgO#v0gN3jWgSoIJgPDi}gNcX-gRw{;gP}+agMnxUgPv$PgN|qigO=zl1`W}54C6wqrkvmDaXKIA#bBwxg!Am73uFF&0@R(>^uwESTPY5C_2 z((->9Waa-e$jSX@=u}`}C{D*&{O1M&`}g%&{h;>&{C3N&`?rlP*>7qP*XNwP*t{IP*!$iP*U+?P*e$J zkXK1$kX0#QkXC78kW`t?;EY%noOw|||3{@Ez^i&uav{e}xG*#Id)YbSHRMmtTRMaIIl+_g& zl+@K36gBi16g12j-r27`!^0fVrSC4-Q$GlQV9AA^8#Gy|V;CIhc=6$6iP9|M>1A_fkloeUgC zHyJpLzA$hZ{%7De{LfIX&A^bR%fJw!$H3qV9Rsq_V_-1TV_+}@jsNH|Flg#AFen=^ zFvuG*Fi0CSFo>J7GKiS*FbJ6oG6qUi zGjLj@GO$~eF|b;6F)&-qXJ9nn%D`xTnSsgtBLlP9e+E{w{|v=?3=ByI3=ARQJy;A3 zj)n{jmWB)rCWZ_Q`Uar!Ck6&pBL)TqV+ICkGX@563kC*ZD<%d38%_pZTRsLJTVV!n zTS*2kTSW#=TTKQITSEpmJ8K43J2wVqyC4QeyF>;CyCMb#yEX;}+c^vjwwo9jY%ee{ z*nD7Mu=x+hpnYkvpuJ!w3=D223=DQAkTpO?#taO)#taPVCJYQpW(*9n77Pp$RtyXx zwhRmc_Dl@CjvNe}&b$n4E`kiqE@BK!F0u^Z!Auuj&}J?M1{X&L1{XgD2A3EH2A5n0 z2A4(#2A3HO49@Er7@W^CFgSf+U~u{m#u;V|3=!rG3_cbN49*tNF(5Mr1_Lt&22FDY z24zbI203d61_@gR24M#V1_37q23}W21`c<224+tl1_n=lNP+GR8crwoC85rC_=kfS5Fc|nVFsKDHFvvtOFbKymFz_ZaFtCBfeL!~RgY1H?MX3a> zLt$WG0F6!5GcYiK8o=u!8Ib z`440#$Ue~iAJ94!(3%j?SO{oc$U^9T9MJd#sB;1uqX4a&*vQPlu!Wm}VTT|C!%olv zdio3uJDeF9wns5AY%OD8*fO1gVarwqhK-LH7&iQ2uuoxNFwA6NP|asxkSJ$h;ID_C z0R!^m6wvuA&^f{HG=^Uc*$h7ziWt5zRDjPW{m9VC@Sb53!yAUV3@;g0 zF+5|~!|<5l4#Rzh@8GjIKx;5SdqK7`{AU2IzW|Lvfco927_>G8avsNj26=}644MqT z8H^deGuSeGW^iSA&*01Oh9Q{Y1w$mmQ-*kk#|)_q4;Zo-?lKfI++wI;xW>@HaEYOd z;XK1shBFL{7)~&3VmQihlHm};TZRMBwI?9ES1|l%0G+`J+6Mx&A9NQ9Xden_FT@81 zPKGxOf($PhBpIGFC^I}|&}F#CV8(Eb!H(e~gB!zH1|Nn~3_%Ph7$O*sGQ=_*W=Li@ zz>vwXkD-8J4?_jRPKHK??F_vPTNq|BY-Cu;u#RC5!y1N%467LaFo5g^jeX2y_zyml z6SNNmiXnz!1w$gkGKLI>#S8@u3mGaI<}z?{AZ|U_|H(u@Sou&0|Uc#2FP_#pzUvlfpq*VHoXhZ^0d(r`E$CJ>&{8na z_y?%S>tTQ_&1+)dWT*&;uy3nu^e1Iurd@d@G#^t2r}d_h%@9c$T4Iys4`?S=rE)+7&4?W zm@}j>*fJzDI58wKcrYX|_%XyYgfhf3#4^M%q%lM>6fs0HG%$oSfKE?c%n-`3lOcrR z9zzJjZ-x+t{|ulNUmy(HatJDRLH2{H1kiLq9s>hICU}~Hks+CZlOd6Tk0F6Um?54) zk|B;kfgzSbjUk#rharl=h#`W(oFSaSmLZJ6nIV+HlOdQPfFXz>f+3J0k-?uKhry4b ziou7Wi@}>=4ucoNMg~uYa}1sgpBX$E{(~{-o@~$<3}_o@6FUP#2?qm176+tB0Gg%& zH5DQmSQ)|@co@PM1Qcgc!UT#2LI8|oYdC`$ zYZ8MATLFU+TLXh3+av}9wxtaEth*WXSno3Ev3+IGW&h8h$NryTB53+Ykbxmbn1LZ) zgn=Pcgn_|Ngn_|Bn1R7Xh=IXTfPuk*kAcB~myN-Ji-*CEQ-HySQ;flyONPOcONqgP zOM}6jTaUqv+mykS+nT|c+nK?L$A`gyCyYU#Cy_yyC!ax^r=CHJXA*-3&r$|;p4|+p zJa-vXdA~BK@&0E}=lu^p3#MFzfgxQCwC{$2Ay9&W!Bd=p!C9Pv!CsVs!A69E!AgjM z!BUWs!IGbY!Ge#M!JJQs!IV#e!Guqq!H7?l!H{2v!GPb0L0`a%L07&sK}{f^K}Dc}L0MojgQCE426=(K3~~Yw7~}-MGsp}4XHXFM&(J2qz)&pCz>qA- zzz{A4S$pCt#lYYo#lT=K$-rPC!N6cD#=u}A!oXlG#KK@C#LZwRB*36AB+8&GB*UO1 zti+%#tjVAyY`~x)Y|fxAV$Yx^;=!OI63n0^63?I@n#&+BTE`$OI*~zIbSZ&cUE9#>b#3F3g}IF3F%Sp}?Rjp~j#hq068wVZxv!Y0ID>>Bb-@8OR_j z8OtComCYb2Rl^`I)z2U*wU|LfaumQayJ97@_Ys!v5+`4WIT)IIF z9J&b%Y`O&uEV|7MOu91|7wgv-(x;g`cvN{8UyaoespCK;;ub~hF zkD)jNx1k&Zm!TR1hmjrwyOB8qtC14}vymSIqfrb4gHa9xgHb&LgV9t52E#QB42H)U z7z|!9Fc|z{U@-U(J`*`Yi-ExhvoPE?>oPDX=`t|L>N7A%7&0)37&9;km@+W%nKLqQS+O&)S#vWm+3+zi*a|T)*oiYR z*vT<4*r_ov*nteQVqmayV_>igVPLRJVPLQ;XJD}FXJD{h&cI-Mn1R9OB?E)aUj_#2 z{|s>k3=9FFyktQZ&sY#A7M9T*rmofsHcTp1V`+?g2|JlGi+yto+{y!jXyd;}R7{6rZT{AC~m zt^WE94E{C@4E|mW4E|9J41S=CPFfild>1e<`0Qa|@P5v~;Qfz*!RtRmuq6Y7yCnmI zoh1WNYRpkLE46aLDU{H{=?(Sz`*Xoz`*3iz`)?kz`)?oz`zj5!oU#3 z&cG1D&A<@K$G{LS$iNUO&cF}_DsVIz7$VIW7$RL57$QNJKc_P=MAS1dgwJAN2;0uU z5c-&bA>=OuL&$#yKU)R{XV7^(HVh1=)(i|fHVh0Zb_@(MjtmTZw9|J=QXc4Le14FtJ14Eh~149~U^Or9JLuvv8 zLuxq#Lkeg;%0>o;#Jda(34a(E;{P*vIx#RfIx;X=*)uR0fcBv|Gcd@xF))aFF)#@D zF)(liF)%QPF)%PhF)%R1LdRb~>rqmn;~}6%Up6BHLoO==Lp~P+LlGYXL#Yr0Lpf+~ zjv50)8R$?bHwK21NCt+Idg^axiB!yjb>n&Q^vqBa~cD~%&iOz)1ERg zO#R1TAH=|56bd>EnSnt%fq_9Voq>Tf7dp8J@*l`f(1a(*E|5J_pcA2>^(UacDxgL= zXq*7FHUuNO9qCm0SpXVvKSaPbuut)SjE7w z?mPp-+OG`eF$@gai3|*KpmT@|7#O%g{spbM0r?Z;KhPKtXgmUB7swvacnhdQ1hNM- zF%24<0PT?hP1Np&c9=lpAfWXir=e>>E=n^nT+m}+IPc29a5kQS;dC7X!^wFJ3@7$6 zFdTi!pr6UWpj^PfAXdo$J_m*oAzm@CGCXJCV|c_M%J7gu zj^QDL2Ez>oLxv0Bdr=%1PB6GL9A)rjIK&Xlu%97l*5{4BFI~bNR++kSE@Ed#1LQhtQ2!g0y+Pw2pdz4;fsvt`fs3J&L4cuyL6o7LL6)JN zL6xC}L5HDLjpq) zLmWc`LoCB22GC8qQ4ISSA{kyXfcAZWFl-+PXy_AE41kJ2(D(o@ZGVn2^FbFdwGe|NdGbk`5GN>^mFz7JEF&Hw$Fqkt$GuSXhF*q?qFnBP8Gx#%v zF@!UOFeHFSWk9Eu1~7Cn_%qC7@MGA*;LC7}!I$ATc-I?f=Nkxv;vN+CAismEAM zW^iWUXK-Q=W^iPXU~puRW3XpXX0T(>WUyt>W3Xm0VX$JbVz6XzWUyfHWH4t4VlZQf zWiVmLVlZZ?VlZOpVK8J^$Y8**gF&C+9)mu^PX^E^v;pY$Elvi83LXZA3|43fr!uIpmog}` zw=*cQ&t_0y+rXf}cA7z+^(})u+dl?*_WukGe2^u z6F~+BBLM~m1AayZ170=;18!~xeJ%k8T`my@9d1bmEpB-RO>R{N4IXUWgcG!McxPo1>RH!Io?tR8Qu;CDc(5@lDr!kBzR6Si1WN=5a<2FAi?vWp<0lE zArrL!NR)xWPmF=VRg8hbR*ZqcLX?5QSd@XmK!kxoSD1l8TZn-{OMsa{i=Tr*laH4{ zgHMn_jZch0m0y-YgLg6NEKyZ2p4By@Rnd;aFS$Tu##k8Fp*$j zFc1fgc`z_&iZL*#i!v~%i7+y#3b8OK3vn|j3Gp*13W+c%2uU%>2`ezj3ac~72zGiIgx1inKEbh|FQ&6WPeXD{_i~SL8JVpYT5hKH>ii z#i9%hi4qJ9!BPwi9?}d9_R5`bnvx6*Y7z_#DiRC~O5zL*3Sx{5 za$+0|vSPdp(&9o4QsUwalH#%q5)vv5ViMX6q7o(yA`-R?LXsW~f|4N&0+LA#e3C^B zypk;pJd!gQxFpvya7r9w;FNgIz$x*IflK^9__)G2DF%iB83qPd=opZxECYkSECYj< z3k!`1_mQF1_o_41_m`%1_osn1_pW1_>&3)gSaXK zgNQlvxRcByORAXR}QD)ZHeh66H)3UAHsNGoFy&!jFyn_5 zXrKXA3k3!S3k?Pa3nK;wOIrp8OK%1S%V-7$i#!Gfi&h2(^Z5)6=DQde%$_hXnEnBe z!-Q%<&f~EKtpn15i~(tAF)*lTGBC(#F)&DKGcbtgGB610GcfQPGB9wNFfg#2F)%P$ zurM%Ku`@7Ob1^X3@-i^kfd;lk7#JL+85kT?7#JM%7#JKZAqRUngfTEUWHK-~G%zsO z&t_n-+s?pX`1= zgaO>K_Y7oU@JwM~@Tg{B@R-iP;J$@{!R-M9gXcX#ga2;^ z2EYFduCViX%orH-O&A!|Oc@yD%o!NOtr!>tZ5bGN92pqcU6AYqjll#kFfar&FffFI z)}$~nFhnphFhsL4FvM~*Fo4cVNfKsYNRnn?NK$8DNHSqyNOWajNC;IVZuVPs&)Vr5{+3ZY@){Vx_w{5SWMIhr$iR^CA95a!9Rq`&Jp+S^69a>k8v}!o7Xt&2KLY~`Xzfh| zbo>QmA870aHWre{z`y`%{DRIY0X0NH{dG`dypEZHp^=M$p_QM3pp%rvU zw;KaPQ!E2RV;KWO{WJ!Kx@`;$HP0Css{S+ByD%^qyD~6ncrY-?`Yi$|?qiNmm#cCj4Ts@Md7p@nc|62xedq1?_=K zU|?Vdt-AsF6Eyw;vJ*5O0UCShf{wX>)`Wn@B|wY9L1Po3j?n@J28PAZ{V}V-lhq6i zTR0gQK%2L>%P}x)HDF-a?8d;bF@b?$eH{bCngt9Ds}C|TtbE4+x|2#Jnt?$gk%56P zlYxO1YX*k1Aq)(s3K?3z~2R`4i+nkl#S|f$Rcx$Uye&VPIf@oe=^X2RQ>ixDs++Drf>5HU{#Ffq~&2 z4+FznDF%i&`V0)OJQ)~Xq%tr(Yhz$|vXp`05$IG>(AWnA|6yQc_`|@#@Q(qsA4Y`X zKLhAI4mF1V44@V`Xe|h+XX455k0F5JH$xc1PlgzVZwyHcUl=kNJ~8Aod|)VJc*{`F z@Ctk`=~RX%42u~aFl=SG&2WL?D#JI1Qw;wZKxbgAVE7Ln0|1>t0osQF8vg+8{{Zd5 z0PTYS;cpC_48Iuo82&PdG5lswVEE3U#qf#2nBgshHN#5=XNG4Co(zu|{2A^sgfiS_ zh-SFPkO00T7IG#>8N*4228Lq{Jq(8!W-;t%SjDiL;UL2fhL>RbLFaFP>;|2`*$X{` z0yO>sx(5XmWS}t!5PrhI$nb!Ho8dNtAj2&NDTdn&$_y77bQn%Cm@ph;ux2>K;KZ<> z!Gi&EH%c(W4u(jEZ4B`Yn;Fs=HZtTftYau=Si{iFu##aS!!m}242v1IGAv-Y!7z{E zHv?$=12pyl+W!F>g8-dD0UG}R?EwKr;bjH}22fH0jYI5YU}MRCJf6NtQnRtI5I3`aATOy;KMMNA&_A(M2g7^t-V@NcM;Y|CW6(GRX#4|o1_;P*&=>?L`GLj(<}xrc%w*tV zn86^xFoQviVLF2x!xRQJhKUTi4E+oy3_T213|$QN3>^%v4DAeF46O_S49yH-42|I4 zei}m^Lm@*ALoGukLoY))!vcm<@F>xJ29TYgTZTY;K++lhGl0e+K*<@D#6ejalnp>* z5TIh9l>u~2H7i2{12028gCIjag9JkZg91Y>gBn8>gDyikgE2!X^gPZY24{u>22X~3 z27iWJhA@U4hB$^Sh75)bhEnKRoYNRm7*;bRF`NY7GL!(_{{gxII*Q>x11LL#{0=H^ zK*e1h=!k9x1_n?OoX^0>kjucyki)>okj)^>kj)^;kj0?DkinqFkj9|Hkjh}hkj!At zki=lakig)?5YOPj5X<1t5W^785XF$l5Xq3s5YA8yzP&b-VG%9xQJV8@N3=9me46M-c z2R;U81|bG#25|-_23ZCN1|h5&ZR*oQMK z1A_xI1A`qS1A`3%GlMk)2ZI#@FM}0>0D~oi2!kbqB!fAF9D^ByGJ`3D27?KM9)mH1 z3D_kD49*Pt3_c8c4B-sA3@Hpc;N48^3|b6x7&IBSGH5c~0k41q?MMXO($&bqz>vqm zz!1;Hz!1z0nId!IW?-=8Vqmc3WMDAkU|=w1WneI2Vq-97;9@Xh;A1dk5M(f95M?l6 zkYdnhkY~_iP+`zv&|=VLFksMPFlW$YuxHR<@MKVD2mz0tsW9X-C^IxMC^1ZDP-Ixg zpvZ8BL6PAzgCfI!2G9vn)tn3r8KAvCybKI}d<+b(py^6J1_ldW1_onZ1_lEj1_nKD z1_oVDW(Hk04h9_-9tLeDeg-W@AqGuGaRv=W83uI*MFuqnbp}-iT?Q2f69#2QTLvXY zHwHzQFV zBpDRh>wktq&~beN3=E(x^KL?rDO)ok1_lEm1_o_G1_lj51_o6D1_osT z1_mWQ76wILb_PWrZUzNzJ_dPiAqH7)aRwP483t({B?c)TO$JFGLk0;RO9nAsX9iJT ze+FUR7zQEUYz6_|ItG5;Neq0v%Ncli_A&7CJYeAE`O3h{^PeGCfPo5C~x46NqKt7071b5vXC{7MQ@mDX^4*LtqaB zyTE-0c7ZPp?EL>3G6fkJB19M%yhRxp9K;wH%*7ZO48#~1w8R(~)I=E=ltdXA*feF2KMi zF3P|sF3rFzuEfA2uF1eHVZ^{GVZ*>K;m*J+5yHSCk<7p(QOdw5(apdhzL0@Id?y2g z_+17Dv9AmaV*eQuLFeE|K&H#Br66NK+ENS*s!|LLijoWrauN&-(h>{|65@sQ$tTOrxEHV}hOfoJE46=a? z46+Ff46;QG3^E-I3^EHC7^HVHFi78HV37L8z##P>yf4jPih;pNhJnFC1~LYuDZ{{^ zEW^McFAW*{k(6X$5SL_R5RqhJ5RzhM5RhhJ;FD!%;F05I;FRZMU{ereU{w%fU{;V} zU{q9QU{KU%U{ExL99*I3$H1T%%fO(R&%mJA#=xL3kAXp92LprrJq8B39}Em~{~4mB z85q1}85r#47#K{UV?gS13=B%p@gHd!1_lXf1_n`S1_mJ+1_l9HCI&uv76u+gHU>^5 zE(TU*UIr!=0Z8Iim4po5sDU;R88I-Z*)lMwc|j&m)p8gZ)S4L>ROc`-sBULqP`S^* zp!}18LHR#Js2pTHl8qu{9gwyn1B0pp1A~G*1B0v_1A~+-1A~|x1B0*}1A~A90|TET z0|SpT69b1TD+8-KCj)~9Hv@wfA0#8|fEG~6GBD_4|b{z%=W_<<*216zW24fZm22*wh26Is5 z!pp#5CBVR7Ey}=PEz7`Qtp+(@#@Y^Y$*^?-1A|pL1B2xx1_p}_3=HPC85qnU<1p@; z3=Gzwb9l5E7_>DJV?fgC3=EXo?IBt~v}1E|v`73zuD@85o=k85o>;85kT_GcY(@ zVqmcU#lT?qpTS9&fx$wLfk9uFfk9Inv=5DeK^D3ONl*_m{=;d)z`$b8z`$U|0IJ9t z80;As7(nA8pm7QCcnC8CgBLpkgAX^P;tLRl47vt@7Co6TF!(z&F!+Nm{>@@w@NHvY z@L9qD*%$N!d^U@n5d(v%Ap?V+K4dSLf*u2dq#*-?kTGce4+8_I6$1kkcP7#SEM*cce1xEUB?L6wjw14Enw14En+14FD014E1-14DE&14C3D z14G1I$T_v4pTKKTtjwV2@fa~Ms6h9D30pES@YymjaDe;@T7Ls-P=V}(jlX~zdZ4k8 zXz17ksNo4}1cJvWSQ!|yxfvMp1t9n4=aati~)(x(hs{tOIq zAq)&c(F_b+AU}ilAc4XaI{JF0WHi2b&fzClnu~xSwV*e zfYyS5)@XpnCBS1KEDQ`+`4|{3%Q7%rFk)ah>kYZ9_gFgv!=aT73xETFX@w&32;9|j+WUkpJE-x(qpzB0ryd}c^t_{fmO z@Q$H~;SEC-!%K!%hNlb@86Gk$V7SY$iQxvrIfhFN-xxsmuz>cyfbK#CjeSf2&22LL zX8?^qd}3f=0PVqe$-n^K3-N}5mEjWu55o@zA%^b^(hOf2R2e=n=rO!zFlTtiV8`%? z!Ij}IgEzwsh5&}k3}Flx7-AUCG9)paV#s1R!BE6-l%a;<5JLyUK89%wyBJn5Y-iZd zu!Z3T1Lz)D&>gHGyFvRuni(K_F+M=I4}tc8fPxUToCb6!$_)l~hKme*3>O(h87?u% zF`Q;lXE@5B&v1ajoMA76EyFGb7l!Q&o(x+V{24YegfeVkh-O&FkjSuxA(LSxLovg0 zhI)o24805s8Rjv}W7xzno8cWrgA=$XJDtIo zVJbr~!(@g?=w6g8h8~7ehAxI?h7N`)3~da{8JZamF*GrJ0I&N1-GK_){{cGTHiO|m z11K4RhVnqeZJ;C$%3h#;I4B!TWME^Mz`)BefkB9&pFxtLk3o^4n?Zx2gF&C6jlq^hlo`-j6rk}BP;v*^4I26cWkpby1nmQ2JHa>jYELWq5x%WP?iT3JD_3+ls!R36R4N~6_2S5EDXsE+ziPK z0u0Fvq72Cl(hP|ViVX1#>I|_AIt(!kMhsC5<_wVxwhZA6&J1A;-VC7(!3@C+F$_Tr z84LjoU$PmIH#t_6H%@D|-$l%YQ#^A@G&EUge$l%Rj&fvvh%izi2!r;!} z!{Ejc#^Az`2p%PJVrXP=WSGw2z_6adp5Z!p{|9Kr7bvHLXi&U^{GSh9q8JHXstKyD zKvN{3sSyMFuAZH3mlpZ3YJhLk2qra|T-m zI|dsDcLpnl00v8jXa)<0Oa^m?Dh4x#eg;#9Gi2<;nu&n{)N}$h-HaI+7>pQL8H^Y>8H^Zs84MW&7z`PN84MUC z81xxr8FU$x7<3pk7_=Gm7_=Bn!7D>F7~B}t83Gy97~&XI8S)rZ7@8QA!8Z8|d z2Of7&X86yb!tkE~v=lUzg@GZAje)_Noq@rLgMq;cH15I9z+k|}z@W>@z@Wp-z@W{* z%%H`<&Y;P_&7jG^$Dqj|$e_U>%An35$)Ls{$Dqof!l1&S#h}b!$e_ev$)L#K%%H&F z#~{xT#URI!$so&6!yv;jnL(Oi4TChpS@6wRpq-I2ptV}83=HuckTo!Fpz#-O1_o1Z z1_lFe1_o^|1_ljI1_o6Q1_l*&CI)2|HU?!TP6j1L9tI@_eg;JbAqE8oF$Q@CX$Cn4 z1qN9LH3k_5JqBq8GX^OJdj?4cF9r#Qa0YRPGzKw-3Iflq|yXL!oM&+v}{v`R9an}H#m7j*6k1A`qu1A{3)1A`tv1A_)X z1A_`51A_t|1A{Cd1A{a#BZDL_3xfm?JA(u_CxbXA4}&--AA=aD5Q8YE7=s9>G=ngw zB7+d827?f%0fQi?6@vh$D+51g5Cb1)A_FgHF#``r2Lm_9dw7U;QL>L&v zMHm=Fgc%uxg;*E_h1eMcgg6=agg6;^g*X|wg}E3wMR*z5Mfn-n#Dp1G#3UG)#pD^7 z#MBuW#0?l2#H|?^#6br~MldjlXE88{H83!U&17H@-NL{idXs@cq!w6gOnHp18BfP8nkFamw`drf`LKWje$WXlz~Ayoq<8RmVrTfIs=2$ zW(Eey+YAg6KN%Rr|1$)NF)%nwFff>d_FqXcFsMl}FepeO#(zY`7#V~`Ss4UHSs3_5 zSr~Z5SQxm)Ss6Gb*%;WQI2f2@xEL7Zco`TJ1Q-|;gdv(06d4#4wV-1$P7Dl+K@1EE zDGUq>RSXRBQyCcKH!?8D-DY5r{l&lly2D!%vL4Aq2C@fBMTUVvPMU#1N{WF&T!Mi? zM4X91NSuj5K!TBhSCWx|TZ)N+Lx!1wRhET;NuG^?L6L)jL7AI@L6whzK~0c>K@BvZ zCkNTcqi)2&pl;8=pytQGpq9YEpjOVnpgM_xL1jGygYqo~2BqH&42u65JV5J_Sa0jLC=eUK{tkhLAQv3L8p&_L3<4Y zgVq)JIE)Ku=?HW$n3^I3gMtDBgNz&lgM=&tgNQ5xgMb_Z1D`wt1Ggdr1G_Q<1G6dv z1A{sP1A`_51A`7D1A`tjq+&7VVqh=@E$$O!U@#MBU@()19CBl3#=u|(+Sm}zz+jro zz+lqJz+kk3fx+-R1B1aY@Ol_~=vp9c705m?&=`<3XbqAA1B0L<0|TEj0|S>T0|T1| z0|S#50|SFD0|NtS9L9)&fdN#hf+|-_W(EdpHU8TmVDX>9N`ryHK!brn6SNOYm4QKCnSnt>(4DM_U3|?Fe48DAj1F(GL z8Ni#aysa1*ynGlKJQEohJV2L@&Sqe6-Os?_{29C_$PBs;M_m)L7fc$u28d6Wfq~0_ zfq?~NFUYT;F&I#T#sO_T3TTZ6sL=%;n_z@A0zl`KL<=x5M1#(YRfSwg9^uBo5FW+A z5L&{(5Hgv8AqaF%?JMy4w8o(2RC){y>N*Sza=Hu*V)_gW0!9oBTxJXm%piL~jVX{n zL1R9i&`BmxV+%Ac0a}X!YJ7qE>Y()!ps^6pWL!EM14A|sTLy;o zAO?oCECz;@P6md=)eH>rcffb_7#cG$=om6EC>b#@NP^bjSVHz+F@fv_jr+jHUtnuO zKw~eUbts@dI;a5%8Y2LWO@JE2pmhtNH6fs}f?75Ph9+JHh9)rvh6WV|hB{LQh8j-> zhU!EHhKhOyhO+q#48_M77z(~K7@9FKs97*D$XGKl2stn?aJw=vFoD7sG!6n9e*xJE z@*l`P(B2r3T}5bTlYquTK%ElM#4MPtkbR(a8KC_spiUWRZ3gl< z2&l6LTMGi}yn)6gK%Ll2pz#PU28L^53=Eev85qtvGBBKqVPH5~!@zK8E(62Cz2NFZ zFouDF9Te7}a0WGUK^+c|UqK7tL7h)fM-1dQP=^$>?gX?a1~d)=vg;6Zu>i z4m79(4;ljjEo6AhzyLmA@(UjW!zVcghWBO+3~vG%7+&NtFg%&Sz;GYrcm@=}$jrjZ z#=*(O&CACxC?qT*CN3c*Eh8(hps1vxs-~f-rLC){Z(w9>VrFh(X>DU`=iun%;_Bw^ z>E-R~=N}Lh912*wozG*51+8 z-P6}UVdCT|Q>V?CIcv_`dGi-8TD)Z0@)fIAuUWf(!^X{9wr<<8bJy;@`}Q9^boj`z z<0np@K6Cc`g^QQ2T)lSv=B?Xz@7;g!=<$cs!8#ZnN z<%{j0jIn3$zWoP4S>q@uZ=5=P=Il98?zjxf9ye~@x_t+fK^{JO{NyPpi@XBmk@p`y ze)Vh^UyjgrtF9CuU@}?^XBclckkbS`0(-5r_Z0ieEItA+xPE3e*FCT>-X^r_D%#iMS3gyCp7jD`bpUK&jgqv>HZJwVdH zXgG|919BQbX8&IXZNn_LlK8*LS?T{CZ=?T*LtOtHi;entBBk*0v8?uM2l8j1-chvX z(8iKoyVsT<*|M_w?CQn!R~F4{y*+bQ-$P0<*bPe!`2Mf3692#1S?T{iZ^QpbLtKBJ zjER1KHo5Tenaqx>$8zVK++VP6@3x{{TQ-y)UcIW~)S{&|7iTVPyfI;J=UqxM+zqR& z#Q$$~R{DRy+wkv+VApSFqodzmOe}hMA-(hB>Fl|O4&<%fw!Lu2nvKN=7q2NhF>6KT zxk*dvu5>PFy+JAdzg(5=KPVhlTZ#YQ=B)Vtpts?#(?KquFGfYZx|vXP?^AW*tIxMAX}m%y2D@RI0pI_%R$~8mI4S-+;$`st zT#(C$YY|b;AH)@1yOq*$3_K#==}O_c+}%(F@@)Dr?l@qpE+aQ(d?y*_T{ag zu`_?$gsp{pIyROZY+P4yw0ceLNlNkm6)GS%@c!RmDf)k}ll=FSUi$BE1UNl=92$A& zMRdWjyUDHFE@n(!ejfsd3|lkHfjof#C<yewrnRh;phkpiyZv7mQw)ACU$@GWmb-lN< z+gh*Z_tal0npkzQbV}*@is^-Ct7qk$shdM7{=Z(C<^MKa&W|U|c<$b@6+ZjQP3zz{ zZ-;IF{R3Bhk4TvPJ~6xhMMg>Mlice12Zarl_ez>e?^LuE-Ky@)yHVGjeXXgNQv83T zGRv?1I&6=x=(C@DW-WH`v#a)&|DLuh{`>jN`x_oH@mpeI+sDkz`nUOcm9I*QN?(+h z7Cx^k&wE;1nf;`pI`eT$4W;=1Rwd@wrb*=fI=w13h%fH}%K~T>B(vYlwm0=lwYr@n1)JLTJ zX^Kkz-4;zLzH*+6;mBJdrmer#cvt*4lbreATDj-HqfWzrFO!P@!B&O;N38$vZE4Bxw&a&TT2tD2V@dVQbF=H0otWIR@lbEa&V3y{`*$@@Ji5Jp`sppT z3(l{rTyl|IJn9BW*o}t6XgDC}q0#g(njS{e10)S#4Tt#_qW@Pp$o=2!sr`Rvkj?+y zG5)`HrKY^ykz4U_Lvi=j6_s<&%&%Q_bb8~~{S#aF?ds_~x~;wc%%WyX1b8jtdT6mRQ{C|NG>wl0N7MhFvU*jPAf18K) z|Gj}W{|`h3{5qJN`sQF()xDhs{g*bDEE|- zm2KX)yz;<~#q}q*ENnZ!W=`+b#nYzTnl*9GovD5EZ;*?@ZkVsj^MA3q$p3W?vj2B@ zX#GDJVDs;2WWe_m32CoSrPtg&oICOSp2DR^x0Gz%yP@*Hwl(!9)-7*6zjR^O)j4w} z-kLgd&Yk`#^KX!g|1VTx{SR`(5_6IN8|-EN@AA<4e>lMU_lbyruczbFUY<{@xpOjm z(z(O=%MR`;+PZC1*?~1{s!uFgQGagElGZCz7WCfeoj>z-*PQt`$i-kcEYRiozsyYd z|3-V6|GPaj{~hzU{&6}y;M0Y;wC7h+YHyv-oP6SF?y_CG3%0D?T)cnr+Op%bR#csx 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

`, where `P` is another predicate type, the [handler selection procedure](#handler_selection_procedure) first checks if an error object of the type `E` required by `P` is available. If not, the handler is dropped. Otherwise, the handler is dropped if `P` evaluates to `true`. + +If the error handler is invoked, `matched` can be used to access the matched object `E`. + + + +| | | +| --- | --- | +| | +See also [Using Predicates to Handle Errors](#tutorial-predicates). + | + +Example: + + +``` +enum class my\_enum { e1, e2, e3 }; + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::if\_not> ) + { **(1)** + .... + } ); +``` + +[`try_handle_some`](#try_handle_some) | [`match`](#match) + + + +| | | +| --- | --- | +| **1** | The handler is selected if an object of type `my_enum`, which **does not** compare equal to `e1` or to `e2`, **is** associated with the detected error. | + + +--- + +### `match` +#include + + +``` +namespace boost { namespace leaf { + + template + class match + { + <> matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + +} } +``` + +[`is_predicate`](#is_predicate) + +When an error handler takes an argument of type `match`, the [handler selection procedure](#handler_selection_procedure) first checks if an error object `e` of type `E` is available. If it is not available, the handler is dropped. Otherwise, the handler is dropped if the following condition is not met: + +`p1 || p2 || …​ pn`. + +Generally, `pi` is equivalent to `e == Vi`, except if `Vi` is pointer to a function + +`bool (*Vi)(T x)`. + +In this case it is required that `Vi != 0` and that `x` can be initialized with `E const &`, and `pi` is equivalent to: + +`Vi(e)`. + +In particular, it is valid to pass pointer to the function `leaf::category` for any `Vi`, where: + +`std::is_error_code_enum::value || std::is_error_condition_enum::value`. + +In this case, `pi` is equivalent to: + +`&e.category() == &std::error_code(Enum{}).category()`. + +If the error handler is invoked, `matched` can be used to access `e`. + + + +| | | +| --- | --- | +| | +See also [Using Predicates to Handle Errors](#tutorial-predicates). + | + +Example 1: Handling of a subset of enum values. + + +``` +enum class my\_enum { e1, e2, e3 }; + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match m ) + { **(1)** + static\_assert(std::is\_same::value); + assert(m.matched == my\_enum::e1 || m.matched == my\_enum::e2); + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if an object of type `my_enum`, which compares equal to `e1` or to `e2`, is associated with the detected error. | + +Example 2: Handling of a subset of std::error\_code enum values (requires at least C++17, see Example 4 for a C++11-compatible workaround). + + +``` +enum class my\_enum { e1=1, e2, e3 }; + +namespace std +{ + template <> struct is\_error\_code\_enum: std::true\_type { }; +} + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match m ) + { **(1)** + static\_assert(std::is\_same::value); + assert(m.matched == my\_enum::e1 || m.matched == my\_enum::e2); + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if an object of type `std::error_code`, which compares equal to `e1` or to `e2`, is associated with the detected error. | + +Example 3: Handling of a specific std::error\_code::category (requires at least C++17). + + +``` +enum class enum\_a { a1=1, a2, a3 }; +enum class enum\_b { b1=1, b2, b3 }; + +namespace std +{ + template <> struct is\_error\_code\_enum: std::true\_type { }; + template <> struct is\_error\_code\_enum: std::true\_type { }; +} + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match, enum\_b::b2> m ) + { **(1)** + static\_assert(std::is\_same::value); + assert(&m.matched.category() == &std::error\_code(enum\_{}).category() || m.matched == enum\_b::b2); + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if an object of type `std::error_code`, which either has the same `std::error_category` as that of `enum_a` or compares equal to `enum_b::b2`, is associated with the detected error. | + +The use of the `leaf::category` template requires automatic deduction of the type of each `Vi`, which in turn requires C++17 or newer. The same applies to the use of `std::error_code` as `E`, but LEAF provides a compatible C++11 workaround for this case, using the template `condition`. The following is equivalent to Example 2: + +Example 4: Handling of a subset of std::error\_code enum values using the C++11-compatible API. + + +``` +enum class my\_enum { e1=1, e2, e3 }; + +namespace std +{ + template <> struct is\_error\_code\_enum: std::true\_type { }; +} + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match, my\_enum::e1, my\_enum::e2> m ) + { + static\_assert(std::is\_same::value); + assert(m.matched == my\_enum::e1 || m.matched == my\_enum::e2); + .... + } ); +``` + +Instead of a set of values, the `match` template can be given pointers to functions that implement a custom comparison. In the following example, we define a handler which will be selected to handle any error that communicates an object of the user-defined type `severity` with value greater than 4: + +Example 5: Handling of failures with severity::value greater than a specified threshold (requires at least C++17). + + +``` +struct severity { int value; } + +template +constexpr bool severity\_greater\_than( severity const & e ) noexcept +{ + return e.value > S; +} + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match> m ) + { + static\_assert(std::is\_same::value); + assert(m.matched.value > 4); + .... + } ); +``` + + +--- + +### `match_member` +#include + + +``` +namespace boost { namespace leaf { + + template + struct match\_member; + + template + struct match\_member + { + E const & matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + +} } +``` + +[`is_predicate`](#is_predicate) + +This predicate is similar to [`match_value`](#match_value), but able to bind any accessible data member of `E`; e.g. `match_member<&E::value, V…​>` is equivalent to `match_value`. + + + +| | | +| --- | --- | +| | +See also [Using Predicates to Handle Errors](#tutorial-predicates). + | + + + +| | | +| --- | --- | +| | `match_member` requires at least C++17, whereas `match_value` does not. + | + + +--- + +### `match_value` +#include + + +``` +namespace boost { namespace leaf { + + template + struct match\_value + { + E const & matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + +} } +``` + +[`is_predicate`](#is_predicate) + +This predicate is similar to [`match`](#match), but where `match` compares the available error object `e` of type `E` to the specified values `V…​`, `match_value` works with `e.value`. + + + +| | | +| --- | --- | +| | +See also [Using Predicates to Handle Errors](#tutorial-predicates). + | + +Example: + + +``` +struct e\_errno { int value; } + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match\_value m ) + { **(1)** + static\_assert(std::is\_same::value); + assert(m.matched.value == ENOENT); + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if an object of type [`e_errno`](#e_errno), with `.value` equal to `ENOENT`, is associated with the detected error. | + +Reference: Traits +----------------- + + + +| | | +| --- | --- | +| | +The contents of each Reference section are organized alphabetically. + | + +### `is_predicate` +#include > + + +``` +namespace boost { namespace leaf { + + template + struct is\_predicate: std::false\_type + { + }; + +} } +``` + +The `is_predicate` template is used by the [handler selection procedure](#handler_selection_procedure) to detect predicate types. See [Using Predicates to Handle Errors](#tutorial-predicates). + + +--- + +### `is_result_type` +#include > + + +``` +namespace boost { namespace leaf { + + template + struct is\_result\_type: std::false\_type + { + }; + +} } +``` + +The error-handling functionality provided by [`try_handle_some`](#try_handle_some) and [`try_handle_all`](#try_handle_all) — including the ability to [load](#tutorial-loading) error objects of arbitrary types — is compatible with any external `result` type R, as long as for a given object `r` of type `R`: + +* If `bool(r)` is `true`, `r` indicates success, in which case it is valid to call `r.value()` to recover the `T` value. +* Otherwise `r` indicates a failure, in which case it is valid to call `r.error()`. The returned value is used to initialize an `error_id` (note: `error_id` can be initialized by `std::error_code`). + +To use an external `result` type R, you must specialize the `is_result_type` template so that `is_result_type::value` evaluates to `true`. + +Naturally, the provided `leaf::[result](#result)` class template satisfies these requirements. In addition, it allows error objects to be transported across thread boundaries, using a `std::shared_ptr<[polymorphic\_context](#polymorphic_context)>`. + +Reference: Macros +----------------- + + + +| | | +| --- | --- | +| | +The contents of each Reference section are organized alphabetically. + | + + +--- +### `BOOST_LEAF_` +#### `ASSIGN` +#include + + +``` +#define BOOST\_LEAF\_ASSIGN(v, r)\ + auto && <> = r;\ + if( !<> )\ + return <>.error();\ + v = std::forward>)>(<>).value() +``` + +`BOOST_LEAF_ASSIGN` is useful when calling a function that returns `result` (other than `result`), if the desired behavior is to forward any errors to the caller verbatim. + +In case of success, the result `value()` of type `T` is assigned to the specified variable `v`, which must have been declared prior to invoking `BOOST_LEAF_ASSIGN`. However, it is possible to use `BOOST_LEAF_ASSIGN` to declare a new variable, by passing in `v` its type together with its name, e.g. `BOOST_LEAF_ASSIGN(auto && x, f())` calls `f`, forwards errors to the caller, while capturing successful values in `x`. + + + +| | | +| --- | --- | +| | +See also [`AUTO`](#BOOST_LEAF_AUTO). + | + + +--- + +#### `AUTO` +#include + + +``` +#define BOOST\_LEAF\_AUTO(v, r)\ + BOOST\_LEAF\_ASSIGN(auto v, r) +``` + +[`ASSIGN`](#BOOST_LEAF_ASSIGN) + +`BOOST_LEAF_AUTO` is useful when calling a function that returns `result` (other than `result`), if the desired behavior is to forward any errors to the caller verbatim. + +Example: + + +``` +leaf::result compute\_value(); + +leaf::result add\_values() +{ + BOOST\_LEAF\_AUTO(v1, compute\_value()); **(1)** + BOOST\_LEAF\_AUTO(v2, compute\_value()); **(2)** + return v1 + v2; +} +``` + + + +| | | +| --- | --- | +| **1** | Call `compute_value`, bail out on failure, define a local variable `v1` on success. | +| **2** | Call `compute_value` again, bail out on failure, define a local variable `v2` on success. | + +Of course, we could write `add_value` without using `BOOST_LEAF_AUTO`. This is equivalent: + + + +``` +leaf::result add\_values() +{ + auto v1 = compute\_value(); + if( !v1 ) + return v1.error(); + + auto v2 = compute\_value(); + if( !v2 ) + return v2.error(); + + return v1.value() + v2.value(); +} +``` + + + +| | | +| --- | --- | +| | +See also [`ASSIGN`](#BOOST_LEAF_ASSIGN). + | + + +--- + +#### `CHECK` +#include + + +``` +#define BOOST\_LEAF\_CHECK(r)\ + auto && <> = r;\ + if( <> )\ + ;\ + else\ + return <>.error() +``` + +`BOOST_LEAF_CHECK` is useful when calling a function that returns `result`, if the desired behavior is to forward any errors to the caller verbatim. + +Example: + + +``` +leaf::result send\_message( char const \* msg ); + +leaf::result compute\_value(); + +leaf::result say\_hello\_and\_compute\_value() +{ + BOOST\_LEAF\_CHECK(send\_message("Hello!")); **(1)** + return compute\_value(); +} +``` + + + +| | | +| --- | --- | +| **1** | Try to send a message, then compute a value, report errors using BOOST\_LEAF\_CHECK. | + +Equivalent implementation without `BOOST_LEAF_CHECK`: + + + +``` +leaf::result add\_values() +{ + auto r = send\_message("Hello!"); + if( !r ) + return r.error(); + + return compute\_value(); +} +``` + + +--- + +#### `EXCEPTION` +#include + + +``` +#define BOOST\_LEAF\_EXCEPTION <> +``` + + +Effects: + +`BOOST_LEAF_EXCEPTION(e…​)` is equivalent to `leaf::[exception](#exception)(e…​)`, except the current source location is automatically passed, in a `[`e_source_location`](#e_source_location)` object (in addition to all `e…​` objects). + +--- + +#### `NEW_ERROR` +#include + + +``` +#define BOOST\_LEAF\_NEW\_ERROR <> +``` + + +Effects: + +`BOOST_LEAF_NEW_ERROR(e…​)` is equivalent to `leaf::[new\_error](#new_error)(e…​)`, except the current source location is automatically passed, in a `[`e_source_location`](#e_source_location)` object (in addition to all `e…​` objects). + +--- + +#### `THROW_EXCEPTION` +#include + + +``` +#define BOOST\_LEAF\_THROW\_EXCEPTION throw BOOST\_LEAF\_EXCEPTION +``` + + +Effects: + +Throws the exception object returned by [`EXCEPTION`](#BOOST_LEAF_EXCEPTION). + + + + +Design +------ + +### Rationale + +Definition: + +Objects that carry information about error conditions are called error objects. For example, objects of type `std::error_code` are error objects. + + +| | | +| --- | --- | +| | +The following reasoning is independent of the mechanism used to transport error objects, whether it is exception handling or anything else. + | + + +Definition: + +Depending on their interaction with error objects, functions can be classified as follows: +* **Error-initiating**: functions that initiate error conditions by creating new error objects. +* **Error-neutral**: functions that forward to the caller error objects communicated by lower-level functions they call. +* **Error-handling**: functions that dispose of error objects they have received, recovering normal program operation. + +A crucial observation is that *error-initiating* functions are typically low-level functions that lack any context and can not determine, much less dictate, the correct program behavior in response to the errors they may initiate. Error conditions which (correctly) lead to termination in some programs may (correctly) be ignored in others; yet other programs may recover from them and resume normal operation. + +The same reasoning applies to *error-neutral* functions, but in this case there is the additional issue that the errors they need to communicate, in general, are initiated by functions multiple levels removed from them in the call chain, functions which usually are — and should be treated as — implementation details. An *error-neutral* function should not be coupled with error object types communicated by *error-initiating* functions, for the same reason it should not be coupled with any other aspect of their interface. + +Finally, *error-handling* functions, by definition, have the full context they need to deal with at least some, if not all, failures. In their scope it is an absolute necessity that the author knows exactly what information must be communicated by lower level functions in order to recover from each error condition. Specifically, none of this necessary information can be treated as implementation details; in this case, the coupling which is to be avoided in *error-neutral* functions is in fact desirable. + +We’re now ready to define our + + +Design goals: + + +* **Error-initiating** functions should be able to communicate all information available to them that is relevant to the failure being reported. +* **Error-neutral** functions should not be coupled with error types communicated by lower-level *error-initiating* functions. They should be able to augment any failure with additional relevant information available to them. +* **Error-handling** functions should be able to access all the information communicated by *error-initiating* or *error-neutral* functions that is needed in order to deal with failures. + +The design goal that *error-neutral* functions are not coupled with the static type of error objects that pass through them seems to require dynamic polymorphism and therefore dynamic memory allocations (the Boost Exception library meets this design goal at the cost of dynamic memory allocation). + +As it turns out, dynamic memory allocation is not necessary due to the following + + +Fact: + + +* **Error-handling** functions "know" which of the information *error-initiating* and *error-neutral* functions are able to communicate is actually needed in order to deal with failures in a particular program. Ideally, no resources should be used wasted storing or communicating information which is not currently needed to handle errors, even if it is relevant to the failure. + +For example, if a library function is able to communicate an error code but the program does not need to know the exact error code, then that information may be ignored at the time the library function attempts to communicate it. On the other hand, if an *error-handling* function needs that information, the memory needed to store it can be reserved statically in its scope. + +The LEAF functions [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) and [`try_catch`](#try_catch) implement this idea. Users provide error-handling lambda functions, each taking arguments of the types it needs in order to recover from a particular error condition. LEAF simply provides the space needed to store these types (in the form of a `std::tuple`, using automatic storage duration) until they are passed to a suitable handler. + +At the time this space is reserved in the scope of an error-handling function, `thread_local` pointers of the required error types are set to point to the corresponding objects within it. Later on, *error-initiating* or *error-neutral* functions wanting to communicate an error object of a given type `E` use the corresponding `thread_local` pointer to detect if there is currently storage available for this type: + +* If the pointer is not null, storage is available and the object is moved into the pointed storage, exactly once — regardless of how many levels of function calls must unwind before an *error-handling* function is reached. +* If the pointer is null, storage is not available and the error object is discarded, since no error-handling function makes any use of it in this program — saving resources. + +This almost works, except we need to make sure that *error-handling* functions are protected from accessing stale error objects stored in response to previous failures, which would be a serious logic error. To this end, each occurrence of an error is assigned a unique [`error_id`](#error_id). Each of the `E…​` objects stored in error-handling scopes is assigned an `error_id` as well, permanently associating it with a particular failure. + +Thus, to handle a failure we simply match the available error objects (associated with its unique `error_id`) with the argument types required by each user-provided error-handling function. In terms of C++ exception handling, it is as if we could write something like: + + + +``` +try +{ + auto r = process\_file(); + + //Success, use r: + .... +} + +catch(file\_read\_error &, e\_file\_name const & fn, e\_errno const & err) +{ + std::cerr << + "Could not read " << fn << ", errno=" << err << std::endl; +} + +catch(file\_read\_error &, e\_errno const & err) +{ + std::cerr << + "File read error, errno=" << err << std::endl; +} + +catch(file\_read\_error &) +{ + std::cerr << "File read error!" << std::endl; +} +``` + +Of course this syntax is not valid, so LEAF uses lambda functions to express the same idea: + + + +``` +leaf::try\_catch( + + [] + { + auto r = process\_file(); //Throws in case of failure, error objects stored inside the try\_catch scope + + //Success, use r: + .... + } + + [](file\_read\_error &, e\_file\_name const & fn, e\_errno const & err) + { + std::cerr << + "Could not read " << fn << ", errno=" << err << std::endl; + }, + + [](file\_read\_error &, e\_errno const & err) + { + std::cerr << + "File read error, errno=" << err << std::endl; + }, + + [](file\_read\_error &) + { + std::cerr << "File read error!" << std::endl; + } ); +``` + +[`try_catch`](#try_catch) | [`e_file_name`](#e_file_name) | [`e_errno`](#e_errno) + +Similar syntax works without exception handling as well. Below is the same snippet, written using `[result](#result)`: + + + +``` +return leaf::try\_handle\_some( + + []() -> leaf::result + { + BOOST\_LEAF\_AUTO(r, process\_file()); //In case of errors, error objects are stored inside the try\_handle\_some scope + + //Success, use r: + .... + + return { }; + } + + [](leaf::match, e\_file\_name const & fn, e\_errno const & err) + { + std::cerr << + "Could not read " << fn << ", errno=" << err << std::endl; + }, + + [](leaf::match, e\_errno const & err) + { + std::cerr << + "File read error, errno=" << err << std::endl; + }, + + [](leaf::match) + { + std::cerr << "File read error!" << std::endl; + } ); +``` + +[`result`](#result) | [`try_handle_some`](#try_handle_some) | [`match`](#match) | [`e_file_name`](#e_file_name) | [`e_errno`](#e_errno) + + + +| | | +| --- | --- | +| | +Please post questions and feedback on the Boost Developers Mailing List. + | + + +--- + +### Critique 1: Error Types Do Not Participate in Function Signatures +A knee-jerk critique of the LEAF design is that it does not statically enforce that each possible error condition is recognized and handled by the program. One idea I’ve heard from multiple sources is to add `E…​` parameter pack to `result`, essentially turning it into `expected`, so we could write something along these lines: + + + +``` +expected f() noexcept; **(1)** + +expected g() noexcept **(2)** +{ + if( expected r = f() ) + { + return r; //Success, return the T + } + else + { + return r.handle\_error( [] ( .... ) **(3)** + { + .... + } ); + } +} +``` + + + +| | | +| --- | --- | +| **1** | `f` may only return error objects of type `E1`, `E2`, `E3`. | +| **2** | `g` narrows that to only `E1` and `E3`. | +| **3** | Because `g` may only return error objects of type `E1` and `E3`, it uses `handle_error` to deal with `E2`. In case `r` contains `E1` or `E3`, `handle_error` simply returns `r`, narrowing the error type parameter pack from `E1, E2, E3` down to `E1, E3`. If `r` contains an `E2`, `handle_error` calls the supplied lambda, which is required to return one of `E1`, `E3` (or a valid `T`). | + +The motivation here is to help avoid bugs in functions that handle errors that pop out of `g`: as long as the programmer deals with `E1` and `E3`, he can rest assured that no error is left unhandled. + +Congratulations, we’ve just discovered exception specifications. The difference is that exception specifications, before being removed from C++, were enforced dynamically, while this idea is equivalent to statically-enforced exception specifications, like they are in Java. + +Why not use the equivalent of exception specifications, even if they are enforced statically? + + +> +> The short answer is that nobody knows how to fix exception specifications in any language, because the dynamic enforcement C++ chose has only different (not greater or fewer) problems than the static enforcement Java chose. …​ When you go down the Java path, people love exception specifications until they find themselves all too often encouraged, or even forced, to add `throws Exception`, which immediately renders the exception specification entirely meaningless. (Example: Imagine writing a Java generic that manipulates an arbitrary type `T`).[[1](#_footnotedef_1 "View footnote.")] +> +— Herb Sutter +Consider again the example above: assuming we don’t want important error-related information to be lost, values of type `E1` and/or `E3` must be able to encode any `E2` value dynamically. But like Sutter points out, in generic contexts we don’t know what errors may result in calling a user-supplied function. The only way around that is to specify a single type (e.g. `std::error_code`) that can communicate any and all errors, which ultimately defeats the idea of using static type checking to enforce correct error handling. + +That said, in every program there are certain *error-handling* functions (e.g. `main`) which are required to handle any error, and it is highly desirable to be able to enforce this requirement at compile-time. In LEAF, the `try_handle_all` function implements this idea: if the user fails to supply at least one handler that will match any error, the result is a compile error. This guarantees that the scope invoking `try_handle_all` is prepared to recover from any failure. + + +--- + +### Critique 2: LEAF Does Not Facilitate Mapping Between Different Error Types +Most C++ programs use multiple C and C++ libraries, and each library may provide its own system of error codes. But because it is difficult to define static interfaces that can communicate arbitrary error code types, a popular idea is to map each library-specific error code to a common program-wide enum. + +For example, if we have —  + + + +``` +namespace lib\_a +{ + enum error + { + ok, + ec1, + ec2, + .... + }; +} +``` + + + +``` +namespace lib\_b +{ + enum error + { + ok, + ec1, + ec2, + .... + }; +} +``` + + — we could define: + + + +``` +namespace program +{ + enum error + { + ok, + lib\_a\_ec1, + lib\_a\_ec2, + .... + lib\_b\_ec1, + lib\_b\_ec2, + .... + }; +} +``` + +An error-handling library could provide conversion API that uses the C++ static type system to automate the mapping between the different error enums. For example, it may define a class template `result` with value-or-error variant semantics, so that: + +* `lib_a` errors are transported in `result`, +* `lib_b` errors are transported in `result`, +* then both are automatically mapped to `result` once control reaches the appropriate scope. + +There are several problems with this idea: + +* It is prone to errors, both during the initial implementation as well as under maintenance. +* It does not compose well. For example, if both of `lib_a` and `lib_b` use `lib_c`, errors that originate in `lib_c` would be obfuscated by the different APIs exposed by each of `lib_a` and `lib_b`. +* It presumes that all errors in the program can be specified by exactly one error code, which is false. + +To elaborate on the last point, consider a program that attempts to read a configuration file from three different locations: in case all of the attempts fail, it should communicate each of the failures. In theory `result` handles this case well: + + + +``` +struct attempted\_location +{ + std::string path; + error ec; +}; + +struct config\_error +{ + attempted\_location current\_dir, user\_dir, app\_dir; +}; + +result read\_config(); +``` + +This looks nice, until we realize what the `config_error` type means for the automatic mapping API we wanted to define: an `enum` can not represent a `struct`. It is a fact that we can not assume that all error conditions can be fully specified by an `enum`; an error handling library must be able to transport arbitrary static types efficiently. + + +### Critique 3: LEAF Does Not Treat Low Level Error Types as Implementation Details +This critique is a combination of [Critique 1](#exception_specifications) and [Critique 2](#translation), but it deserves special attention. Let’s consider this example using LEAF: + + + +``` +leaf::result read\_line( reader & r ); + +leaf::result parse\_line( std::string const & line ); + +leaf::result read\_and\_parse\_line( reader & r ) +{ + BOOST\_LEAF\_AUTO(line, read\_line(r)); **(1)** + BOOST\_LEAF\_AUTO(parsed, parse\_line(line)); **(2)** + return parsed; +} +``` + +[`result`](#result) | [`AUTO`](#BOOST_LEAF_AUTO) + + + +| | | +| --- | --- | +| **1** | Read a line, forward errors to the caller. | +| **2** | Parse the line, forward errors to the caller. | + +The objection is that LEAF will forward verbatim the errors that are detected in `read_line` or `parse_line` to the caller of `read_and_parse_line`. The premise of this objection is that such low-level errors are implementation details and should be treated as such. Under this premise, `read_and_parse_line` should act as a translator of sorts, in both directions: + +* When called, it should translate its own arguments to call `read_line` and `parse_line`; +* If an error is detected, it should translate the errors from the error types returned by `read_line` and `parse_line` to a higher-level type. + +The motivation is to isolate the caller of `read_and_parse_line` from its implementation details `read_line` and `parse_line`. + +There are two possible ways to implement this translation: + +**1)** `read_and_parse_line` understands the semantics of **all possible failures** that may be reported by both `read_line` and `parse_line`, implementing a non-trivial mapping which both *erases* information that is considered not relevant to its caller, as well as encodes *different* semantics in the error it reports. In this case `read_and_parse_line` assumes full responsibility for describing precisely what went wrong, using its own type specifically designed for the job. + +**2)** `read_and_parse_line` returns an error object that essentially indicates which of the two inner functions failed, and also transports the original error object without understanding its semantics and without any loss of information, wrapping it in a new error type. + +The problem with **1)** is that typically the caller of `read_and_parse_line` is not going to handle the error, but it does need to forward it to its caller. In our attempt to protect the **one** error-handling function from "implementation details", we’ve coupled the interface of **all** intermediate error-neutral functions with the static types of errors they do not understand and do not handle. + +Consider the case where `read_line` communicates `errno` in its errors. What is `read_and_parse_line` supposed to do with e.g. `EACCESS`? Turn it into `READ_AND_PARSE_LINE_EACCESS`? To what end, other than to obfuscate the original (already complex and platform-specific) semantics of `errno`? + +And what if the call to `read` is polymorphic, which is also typical? What if it involves a user-supplied function object? What kinds of errors does it return and why should `read_and_parse_line` care? + +Therefore, we’re left with **2)**. There’s almost nothing wrong with this option, since it passes any and all error-related information from lower level functions without any loss. However, using a wrapper type to grant (presumably dynamic) access to any lower-level error type it may be transporting is cumbersome and (like Niall Douglas [explains](#interoperability)) in general probably requires dynamic allocations. It is better to use independent error types that communicate the additional information not available in the original error object, while error handlers rely on LEAF to provide efficient access to any and all low-level error types, as needed. + +Alternatives to LEAF +-------------------- + +* [Boost Exception](https://www.boost.org/doc/libs/release/libs/exception/doc/boost-exception.html) +* [Boost Outcome](https://ned14.github.io/outcome) +* [`tl::expected`](https://github.com/TartanLlama/expected) + +Below we offer a comparison of Boost LEAF to Boost Exception and to Boost Outcome. + +### Comparison to Boost Exception +While LEAF can be used without exception handling, in the use case when errors are communicated by throwing exceptions, it can be viewed as a better, more efficient alternative to Boost Exception. LEAF has the following advantages over Boost Exception: + +* LEAF does not allocate memory dynamically; +* LEAF does not waste system resources communicating error objects not used by specific error handling functions; +* LEAF does not store the error objects in the exception object, and therefore it is able to augment exceptions thrown by external libraries (Boost Exception can only augment exceptions of types that derive from `boost::exception`). + +The following tables outline the differences between the two libraries which should be considered when code that uses Boost Exception is refactored to use LEAF instead. + + + +| | | +| --- | --- | +| | +It is possible to access Boost Exception error information using the LEAF error handling interface. See [Boost Exception Integration](#tutorial-boost_exception_integration). + | + + +Table 1. Defining a custom type for transporting values of type T +| Boost Exception | LEAF | +| --- | --- | +| + + +``` +typedef error\_info my\_info; +``` + +[`boost::error_info`](https://www.boost.org/doc/libs/release/libs/exception/doc/error_info.html) + | + + +``` +struct my\_info { T value; }; +``` + + + | + +Table 2. Passing arbitrary info at the point of the throw +| Boost Exception | LEAF | +| --- | --- | +| + + +``` +throw my\_exception() << + my\_info(x) << + my\_info(y); +``` + +[`operator<<`](https://www.boost.org/doc/libs/release/libs/exception/doc/exception_operator_shl.html) + | + + +``` +throw leaf::exception( my\_exception(), + my\_info{x}, + my\_info{y} ); +``` + +[`exception`](#exception) + | + +Table 3. Augmenting exceptions in error-neutral contexts +| Boost Exception | LEAF | +| --- | --- | +| + + +``` +try +{ + f(); +} +catch( boost::exception & e ) +{ + e << my\_info(x); + throw; +} +``` + +[`boost::exception`](https://www.boost.org/doc/libs/release/libs/exception/doc/exception.html) | [`operator<<`](https://www.boost.org/doc/libs/release/libs/exception/doc/exception_operator_shl.html) + | + + +``` +auto load = leaf::on\_error( my\_info{x} ); + +f(); +``` + +[`on_error`](#on_error) + | + +Table 4. Obtaining arbitrary info at the point of the catch +| Boost Exception | LEAF | +| --- | --- | +| + + +``` +try +{ + f(); +} +catch( my\_exception & e ) +{ + if( T \* v = get\_error\_info(e) ) + { + //my\_info is available in e. + } +} +``` + +[`boost::get_error_info`](https://www.boost.org/doc/libs/release/libs/exception/doc/get_error_info.html) + | + + +``` +leaf::try\_catch( + [] + { + f(); // throws + } + [](my\_exception &, my\_info const & x) + { + //my\_info is available with + //the caught exception. + } ); +``` + +[`try_catch`](#try_catch) + | + +Table 5. Transporting of error objects +| Boost Exception | LEAF | +| --- | --- | +| +All supplied [`boost::error_info`](https://www.boost.org/doc/libs/release/libs/exception/doc/error_info.html) objects are allocated dynamically and stored in the [`boost::exception`](https://www.boost.org/doc/libs/release/libs/exception/doc/exception.html) subobject of exception objects. + | +User-defined error objects are stored statically in the scope of [`try_catch`](#try_catch), but only if their types are needed to handle errors; otherwise they are discarded. + | + +Table 6. Transporting of error objects across thread boundaries +| Boost Exception | LEAF | +| --- | --- | +| +[`boost::exception_ptr`](https://www.boost.org/doc/libs/release/libs/exception/doc/exception_ptr.html) automatically captures [`boost::error_info`](https://www.boost.org/doc/libs/release/libs/exception/doc/error_info.html) objects stored in a `boost::exception` and can transport them across thread boundaries. + | +Transporting error objects across thread boundaries requires the use of [`capture`](#capture). + | + +Table 7. Printing of error objects in automatically-generated diagnostic information messages +| Boost Exception | LEAF | +| --- | --- | +| +`boost::error_info` types may define conversion to `std::string` by providing `to_string` overloads **or** by overloading `operator<<` for `std::ostream`. + | +LEAF does not use `to_string`. Error types may define `operator<<` overloads for `std::ostream`. + | + + +| | | +| --- | --- | +| | +The fact that Boost Exception stores all supplied `boost::error_info` objects — while LEAF discards them if they aren’t needed — affects the completeness of the message we get when we print `leaf::[diagnostic\_info](#diagnostic_info)` objects, compared to the string returned by [`boost::diagnostic_information`](https://www.boost.org/doc/libs/release/libs/exception/doc/diagnostic_information.html). + + +If the user requires a complete diagnostic message, the solution is to use `leaf::[verbose\_diagnostic\_info](#verbose_diagnostic_info)`. In this case, before unused error objects are discarded by LEAF, they are converted to string and printed. Note that this allocates memory dynamically. + | + + +--- + +### Comparison to Boost Outcome +#### Design Differences +Like LEAF, the [Boost Outcome](https://ned14.github.io/outcome) library is designed to work in low latency environments. It provides two class templates, `result<>` and `outcome<>`: + +* `result` can be used as the return type in `noexcept` functions which may fail, where `T` specifies the type of the return value in case of success, while `EC` is an "error code" type. Semantically, `result` is similar to `std::variant`. Naturally, `EC` defaults to `std::error_code`. +* `outcome` is similar to `result<>`, but in case of failure, in addition to the "error code" type `EC` it can hold a "pointer" object of type `EP`, which defaults to `std::exception_ptr`. + + + +| | | +| --- | --- | +| | `NVP` is a policy type used to customize the behavior of `.value()` when the `result<>` or the `outcome<>` object contains an error. + | + +The idea is to use `result<>` to communicate failures which can be fully specified by an "error code", and `outcome<>` to communicate failures that require additional information. + +Another way to describe this design is that `result<>` is used when it suffices to return an error object of some static type `EC`, while `outcome<>` can also transport a polymorphic error object, using the pointer type `EP`. + + + +| | | +| --- | --- | +| | +In the default configuration of `outcome` the additional information — or the additional polymorphic object — is an exception object held by `std::exception_ptr`. This targets the use case when an exception thrown by a lower-level library function needs to be transported through some intermediate contexts that are not exception-safe, to a higher-level context able to handle it. LEAF directly supports this use as well, see [`exception_to_result`](#exception_to_result). + | + +Similar reasoning drives the design of LEAF as well. The difference is that while both libraries recognize the need to transport "something else" in addition to an "error code", LEAF provides an efficient solution to this problem, while Outcome shifts this burden to the user. + +The `leaf::result<>` template deletes both `EC` and `EP`, which decouples it from the type of the error objects that are transported in case of a failure. This enables lower-level functions to freely communicate anything and everything they "know" about the failure: error code, even multiple error codes, file names, URLs, port numbers, etc. At the same time, the higher-level error-handling functions control which of this information is needed in a specific client program and which is not. This is ideal, because: + +* Authors of lower-level library functions lack context to determine which of the information that is both relevant to the error *and* naturally available to them needs to be communicated in order for a particular client program to recover from that error; +* Authors of higher-level error-handling functions can easily and confidently make this determination, which they communicate naturally to LEAF, by simply writing the different error handlers. LEAF will transport the needed error objects while discarding the ones handlers don’t care to use, saving resources. + + + +| | | +| --- | --- | +| | +The LEAF examples include an adaptation of the program from the [Boost Outcome `result<>` tutorial](https://ned14.github.io/outcome/tutorial/essential/result/). You can [view it on GitHub](https://github.com/boostorg/leaf/blob/master/example/print_half.cpp?ts=4). + | + + + +| | | +| --- | --- | +| | +Programs using LEAF for error-handling are not required to use `leaf::result`; for example, it is possible to use `outcome::result` with LEAF. + | + + +#### The Interoperability Problem +The Boost Outcome documentation discusses the important problem of bringing together multiple libraries — each using its own error reporting mechanism — and incorporating them in a robust error handling infrastructure in a client program. + +Users are advised that whenever possible they should use a common error handling system throughout their entire codebase, but because this is not practical, both the `result<>` and the `outcome<>` templates can carry user-defined "payloads". + +The following analysis is from the Boost Outcome documentation: + + + +If library A uses `result`, and library B uses `result` and so on, there becomes a problem for the application writer who is bringing in these third party dependencies and tying them together into an application. As a general rule, each third party library author will not have built in explicit interoperation support for unknown other third party libraries. The problem therefore lands with the application writer. + +The application writer has one of three choices: + +1. In the application, the form of result used is `result>` where `E1, E2 …` are the failure types for every third party library in use in the application. This has the advantage of preserving the original information exactly, but comes with a certain amount of use inconvenience and maybe excessive coupling between high level layers and implementation detail. +2. One can translate/map the third party’s failure type into the application’s failure type at the point of the failure exiting the third party library and entering the application. One might do this, say, with a C preprocessor macro wrapping every invocation of the third party API from the application. This approach may lose the original failure detail, or mis-map under certain circumstances if the mapping between the two systems is not one-one. +3. One can type erase the third party’s failure type into some application failure type, which can later be reconstituted if necessary. **This is the cleanest solution with the least coupling issues and no problems with mis-mapping**, but it almost certainly requires the use of `malloc` which the previous two did not. + + + +The analysis above (emphasis added) is clear and precise, but LEAF and Boost Outcome tackle the interoperability problem differently: + +* The Boost Outcome design asserts that the "cleanest" solution based on type-erasure is suboptimal ("almost certainly requires the use of `malloc`"), and instead provides a system for injecting custom converters into the `outcome::convert` namespace, used to translate between library-specific and program-wide error types, even though this approach "may lose the original failure detail". +* The LEAF design asserts that coupling the signatures of [error-neutral](#rationale) functions with the static types of the error objects they need to forward to the caller [does not scale](#translation), and instead transports error objects directly to error-handling scopes where they are stored statically, effectively implementing the third choice outlined above (without the use of `malloc`). + +Further, consider that Outcome aims to hopefully become *the* one error-handling API all libraries would use, and in theory everyone would benefit from uniformity and standardization. But the reality is that this is wishful thinking. In fact, that reality is reflected in the design of `outcome::result<>`, in its lack of commitment to using `std::error_code` for its intended purpose: to be *the* standard type for transporting error codes. The fact is that `std::error_code` became *yet another* error code type programmers need to understand and support. + +In contrast, the design of LEAF acknowledges that C++ programmers don’t even agree on what a string is. If your project uses 10 different libraries, this probably means 15 different ways to report errors, sometimes across uncooperative interfaces (e.g. C APIs). LEAF helps you get the job done. + + +Benchmark +--------- + +[This benchmark](https://github.com/boostorg/leaf/blob/master/benchmark/benchmark.md) compares the performance of LEAF, Boost Outcome and `tl::expected`. + + + +Running the Unit Tests +---------------------- + +The unit tests can be run with [Meson Build](https://mesonbuild.com) or with Boost Build. To run the unit tests: + +### Meson Build +Clone LEAF into any local directory and execute: + + + +``` +cd leaf +meson bld/debug +cd bld/debug +meson test +``` + +See `meson_options.txt` found in the root directory for available build options. + + +### Boost Build +Assuming the current working directory is `/libs/leaf`: + + + +``` +../../b2 test +``` + +Configuration Macros +-------------------- + +The following configuration macros are recognized: + +* `BOOST_LEAF_DIAGNOSTICS`: Defining this macro to `0` stubs out both [`diagnostic_info`](#diagnostic_info) and [`verbose_diagnostic_info`](#verbose_diagnostic_info), which could improve the performance of the error path in some programs (if the macro is left undefined, LEAF defines it as `1`). +* `BOOST_LEAF_NO_EXCEPTIONS`: Disables all exception handling support. If left undefined, LEAF defines it based on the compiler configuration (e.g. `-fno-exceptions`). +* `BOOST_LEAF_NO_THREADS`: Disable all multi-thread support. + + + +Limitations +----------- + +LEAF requires C++11, including `thread_local` support, except when compiled with `BOOST_LEAF_NO_THREADS` (which can be useful on some embedded platforms). + +When using dynamic linking, it is required that error types are declared with `default` visibility, e.g.: + + + +``` +struct \_\_attribute\_\_ ((visibility ("default"))) my\_error\_info +{ + int value; +}; +``` + +This works as expected except on Windows, where thread-local storage is not shared between the individual binary modules. For this reason, to transport error objects across DLL boundaries, it is required that they’re captured in a [`polymorphic_context`](#polymorphic_context), just like when [Transporting Error Objects Between Threads](#tutorial-async). + + + +| | | +| --- | --- | +| | +When using dynamic linking, it is always best to define module interfaces in terms of C (and implement them in C++ if appropriate). + | + + + +Acknowledgements +---------------- + +Special thanks to Peter Dimov and Sorin Fetche. + +Ivo Belchev, Sean Palmer, Jason King, Vinnie Falco, Glen Fernandes, Augustín Bergé — thanks for the valuable feedback. + +Documentation rendered by [Asciidoctor](https://asciidoctor.org/) with [these customizations](https://github.com/zajo/asciidoctor_skin). + + + +--- +[1](#_footnoteref_1). + diff --git a/doc/libs/1_77_0/libs/qvm/doc/html/index.html b/doc/libs/1_77_0/libs/qvm/doc/html/index.html new file mode 100644 index 0000000..46839ec --- /dev/null +++ b/doc/libs/1_77_0/libs/qvm/doc/html/index.html @@ -0,0 +1,6070 @@ +--- +title: QVM +copyright: © 2008-2021 Emil Dotchevski. Distributed under the Boost Software License, Version 1.0. +revised: +--- + +QVM + +function switch\_style() +{ + var i, tag; + for( i=0, tag=document.getElementsByTagName("link"); i rx = rotx\_quat(3.14159f); +``` + +Similarly, a matrix that translates by a given vector can be created as follows: + + + +``` +vec v = {0,0,7}; +mat tr = translation\_mat(v); +``` + +The usual quaternion, vector and matrix operations work on these QVM types, however the operations are decoupled from any specific type: they work on any suitable type that has been registered by specializing the [`quat_traits`](#quat_traits), [`vec_traits`](#vec_traits) and [`mat_traits`](#mat_traits) templates. + +For example, a user-defined 3D vector type `float3` can be introduced to QVM as follows: + + + +``` +struct float3 { float a[3]; }; + +namespace boost { namespace qvm { + + template <> + struct vec\_traits { + + static int const dim=3; + typedef float scalar\_type; + + template + static inline scalar\_type & write\_element( float3 & v ) { + return v.a[I]; + } + + template + static inline scalar\_type read\_element( float3 const & v ) { + return v.a[I]; + } + + static inline scalar\_type & write\_element\_idx( int i, float3 & v ) { + return v.a[i]; + } //optional + + static inline scalar\_type read\_element\_idx( int i, float3 const & v ) { + return v.a[i]; + } //optional + + }; + +} } +``` + +Equivalently, using the [`vec_traits_defaults`](#vec_traits_defaults) template the above can be shortened to: + + + +``` +namespace boost { namespace qvm { + + template <> + struct vec\_traits: vec\_traits\_defaults { + + template + static inline scalar\_type & write\_element( float3 & v ) { + return v.a[I]; + } + + static inline scalar\_type & write\_element\_idx( int i, float3 & v ) { + return v.a[i]; + } //optional + + }; + +} } +``` + +After a similar specialization of the [`mat_traits`](#mat_traits) template for a user-defined 3x3 matrix type `float33`, the full range of vector and matrix operations defined by QVM headers becomes available automatically: + + + +``` +float3 v; +X(v) = 0; +Y(v) = 0; +Z(v) = 7; +float vmag = mag(v); +float33 m = rotx\_mat<3>(3.14159f); +float3 vrot = m \* v; +``` + +User-defined quaternion types are similarly introduced to QVM by specializing the [`quat_traits`](#quat_traits) template. + + +--- + +### C Arrays +In `boost/qvm/quat_traits_array.hpp`, `vec_traits_array.hpp` and `mat_traits_array.hpp`, QVM defines appropriate [`quat_traits`](#quat_traits), [`vec_traits`](#vec_traits) and [`mat_traits`](#mat_traits) specializations that allow QVM functions to operate directly on plain old C arrays: + + + +``` +float v[3] = {0,0,7}; +float3 vrot = rotx\_mat<3>(3.14159f) \* v; +``` + +Naturally, operator overloads cannot kick in if all elements of an expression are of built-in types. The following is still illegal: + + + +``` +float v[3] = {0,0,7}; +v \*= 42; +``` + +The [`vref`](#vref) and [`mref`](#mref) function templates can be used to work around this issue: + + + +``` +float v[3] = {0,0,7}; +vref(v) \*= 42; +``` + + +--- + +### View proxies +QVM defines various function templates that provide static mapping between (possibly user-defined) quaternion, vector and matrix types. The example below multiplies column 1 (QVM indexes are always zero-based) of the matrix `m` by a scalar: + + + +``` +void multiply\_column1( float33 & m, float scalar ) { + col<1>(m) \*= scalar; +} +``` + +The expression [`col<1>(m)`](#col) is an lvalue of an unspecified 3D vector type that refers to column 1 of `m`. Note however that this does not create any temporary objects; instead `operator*=` above works directly with a reference to `m`. + +Here is another example, multiplying a transposed view of a matrix by a vector of some user-defined type `float3`: + + + +``` +float3 v = {0,0,7}; +float3 vrot = transposed(rotx\_mat<3>(3.14159f)) \* v; +``` + +In general, the various view proxy functions return references of unspecified, non-copyable types that refer to the original object. They can be assigned from or converted to any compatible vector or matrix type. + + +--- + +### Swizzling +QVM allows accessing vector elements by swizzling, exposing vector views of different dimensions, and/or views with reordered elements. The example below rotates `v` around the X axis, and stores the resulting vector back in `v` but with the X and Y elements swapped: + + + +``` +float3 v = {0,0,7}; +YXZ(v) = rotx\_mat<3>(3.14159f) \* v; +``` + +A special case of swizzling provides next-dimension-view of a vector object, adding either 0 or 1 as its last component. Assuming `float3` is a 3D vector type, and `float4` is a 4D vector type, the following statements are valid: + + + +``` +float3 v = {0,0,7}; +float4 point = XYZ1(v); //{0,0,7,1} +float4 vector = XYZ0(v); //{0,0,7,0} +``` + +It is also valid for swizzling to address vector elements more than once: + + + +``` +float3 v = {0,0,7}; +float4 v1 = ZZZZ(v); //{7,7,7,7} +``` + +QVM defines all permutations of `X`, `Y`, `Z`, `W` for 1D, 2D, 3D and 4D swizzling, plus each dimension defines variants with 0 or 1 used at any position (if 0 or 1 appear at the first position, the swizzling function name begins with underscore, e.g. `_1XY`). + +The swizzling syntax can also be used to bind scalars as vectors. For example: + + + +``` +float3 v = \_00X(42.0f); //{0,0,42} +``` + + +--- + +### SFINAE/enable\_if +SFINAE stands for Substitution Failure Is Not An Error. This refers to a situation in C++ where an invalid substitution of template parameters (including when those parameters are deduced implicitly as a result of an unqualified call) is not in itself an error. + +In absence of concepts support, SFINAE can be used to disable function template overloads that would otherwise present a signature that is too generic. More formally, this is supported by the Boost `enable_if` library. + +For example, QVM defines `operator*` overload which works with any user-defined matrix and vector types. The naive approach would be to declare this overload as follows: + + + +``` +template +Vector operator\*( Matrix const & m, Vector const & v ); +``` + +Even if the function definition might contain code that would compile only for `Matrix` and `Vector` types, because the function declaration itself is valid, it will participate in overload rezolutions when multiplying objects of any two types whatsoever. This typically renders overload resolutions ambiguous and the compiler (correctly) issues an error. + +Using `enable_if`, QVM declares such overloads in a way that preserves their generic signature but only participate in overload resolutions if the passed parameters make sense depending on the semantics of the operation being defined: + + + +``` +template +typename enable\_if\_c< + is\_mat::value && is\_vec::value && mat\_traits::cols==vec\_traits::dim, //Condition + B>::type //Return type +operator\*( A const & a, B const & b ); +``` + +For brevity, function declarations throughout this documentation specify the condition which controls whether they are enabled or not without specifying exactly what `enable_if` construct is used to achieve this effect. + + +--- + +### Interoperability +An important design goal of QVM is that it works seamlessly with 3rd-party quaternion, vector and matrix types and libraries. Even when such libraries overload the same C++ operators as QVM, it is safe to bring the entire `boost::qvm` namespace in scope by specifying: + + + +``` +using namespace boost::qvm; +``` + +The above using directive does not introduce ambiguities with function and operator overloads defined by a 3rd-party library because: + +* Most `boost::qvm` function overloads and all operator overloads use SFINAE/`enable_if`, which makes them "disappear" unless an expression uses types that have the appropriate QVM-specific type traits defined; +* Whenever such overloads are compatible with a given expression, their signature is extremely generic, which means that any other (user-defined) compatible overload will be a better match in any overload resolution. + + + +| | | +| --- | --- | +| | +Bringing the entire boost::qvm namespace in scope may introduce ambiguities when accessing types (as opposed to functions) defined by 3rd-party libraries. In that case, you can safely bring namespace `boost::qvm::sfinae` in scope instead, which contains only function and operator overloads that use SFINAE/`enable_if`. + | + +#### Specifying return types for binary operations +Bringing the `boost::qvm` namespace in scope lets you mix vector and matrix types that come from different APIs into a common, type-safe framework. In this case however, it should be considered what types should be returned by binary operations that return an object by value. For example, if you multiply a 3x3 matrix `m1` of type `user_matrix1` by a 3x3 matrix `m2` of type `user_matrix2`, what type should that operation return? + +The answer is that by default, QVM returns some kind of compatible matrix type, so it is always safe to write: + + + +``` +auto & m = m1 \* m2; // auto requires C++11 +``` + +However, the type deduced by default converts implicitly to any compatible matrix type, so the following is also valid, at the cost of a temporary: + + + +``` +user\_matrix1 m = m1 \* m2; +``` + +While the temporary object can be optimized away by many compilers, it can be avoided altogether by specializing the [`deduce_mat2`](#deduce_mat2) template. For example, to specify that multiplying a `user_matrix1` by a `user_matrix2` should always produce a `user_matrix1` object, you could write: + + + +``` +namespace boost { namespace qvm { + + template <> + struct deduce\_mat2 { + typedef user\_matrix1 type; + }; + + template <> + struct deduce\_mat2 { + typedef user\_matrix1 type; + }; + +} } +``` + + + +| | | +| --- | --- | +| | +Be mindful of potential ODR violation when using [`deduce_quat2`](#deduce_quat2), [`deduce_vec2`](#deduce_vec2) and [`deduce_mat2`](#deduce_mat2) in independent libraries. For example, this could happen if `lib1` defines `deduce_vec2::type` as `lib1::vec` and in the same program `lib2` defines `deduce_vec2::type` as `lib2::vec`. + + +It is best to keep such specializations out of `lib1` and `lib2`. Of course, it is always safe for `lib1` and `lib2` to use [`convert_to`](#convert_to) to convert between the `lib1::vec` and `lib2::vec` types as needed. + | + + +#### Specifying return types for unary operations +Perhaps surprisingly, unary operations that return an object by value have a similar, though simpler issue. That’s because the argument they’re called with may not be copyable, as in: + + + +``` +float m[3][3]; +auto & inv = inverse(m); +``` + +Above, the object returned by [`inverse`](#mat_inverse) and captured by `inv` can not be of type `float[3][3]`, because that type isn’t copyable. By default, QVM "just works", returning an object of suitable matrix type that is copyable. This deduction process can be controlled, by specializing the [`deduce_mat`](#deduce_mat) template. + + +#### Converting between different quaternion, vector and matrix types +Any time you need to create a matrix of a particular C++ type from any other compatible matrix type, you can use the [`convert_to`](#convert_to) function: + + + +``` +user\_matrix2 m=convert\_to(m1 \* m2); +``` + + +Reference +--------- + +### Header Files +QVM is split into multiple headers to allow different compilation units to `#include` only the components they need. Each function in this document specifies the exact header that must be `#included` in order to use it. + +The tables below list commonly used components and the headers they’re found in. Header names containing a number define functions that only work with objects of that dimension; e.g. `vec_operations2.hpp` contains only functions for working with 2D vectors. + +The header `boost/qvm/all.hpp` is provided for convenience. It includes all other QVM headers. + +In addition, Boost QVM is available in single-header format for maximum portability. See [Distribution](#_distribution). + + +Table 1. Quaternion header files +| Quaternion traits | +``` +#include +#include +#include +``` + | +| Quaternion element access | +``` +#include +``` + | +| Quaternion operations | +``` +#include +``` + | +| [`quat`](#quat) class template | +``` +#include +``` + | + +Table 2. Vector header files +| Vector traits | +``` +#include +#include +#include +``` + | +| Vector element access | +``` +#include +``` + | +| Vector [swizzling](#swizzling) | +``` +#include +#include +#include +#include +``` + | +| Vector operations | +``` +#include +#include +#include +#include +``` + | +| Quaternion-vector operations | +``` +#include +``` + | +| Vector-matrix operations | +``` +#include +``` + | +| Vector-matrix [view proxies](#view_proxy) | +``` +#include +``` + | +| [`vec`](#vec) class template | +``` +#include +``` + | + +Table 3. Matrix header files +| Matrix traits | +``` +#include +#include +#include +``` + | +| Matrix element access | +``` +#include +``` + | +| Matrix operations | +``` +#include +#include +#include +#include +``` + | +| Matrix-matrix [view proxies](#view_proxy) | +``` +#include +``` + | +| Matrix-vector [view proxies](#view_proxy) | +``` +#include +``` + | +| [`mat`](#mat) class template | +``` +#include +``` + | + +### Type Traits System +QVM is designed to work with user-defined quaternion, vector and matrix types, as well as user-defined scalar types. This section formally defines the way such types can be integrated. + + +--- +#### Scalar Requirements +A valid scalar type `S` must have accessible destructor, default constructor, copy constructor and assignment operator, and must support the following operations: + + + +``` +S operator\*( S, S ); +S operator/( S, S ); +S operator+( S, S ); +S operator-( S, S ); + +S & operator\*=( S &, S ); +S & operator/=( S &, S ); +S & operator+=( S &, S ); +S & operator-=( S &, S ); + +bool operator==( S, S ); +bool operator!=( S, S ); +``` + +In addition, the expression `S(0)` should construct a scalar of value zero, and `S(1)` should construct a scalar of value one, or else the [`scalar_traits`](#scalar_traits) template must be specialized appropriately. + + +--- + +#### `is_scalar` +#include + + +``` +namespace boost { namespace qvm { + + template + struct is\_scalar { + static bool const value=false; + }; + + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + template <> struct is\_scalar { static bool const value=true; }; + +} } +``` + +This template defines a compile-time boolean constant value which can be used to determine whether a type `T` is a valid scalar type. It must be specialized together with the [`scalar_traits`](#scalar_traits) template in order to introduce a user-defined scalar type to QVM. Such types must satisfy the [scalar requirements](#scalar_requirements). + + +--- + +#### `scalar_traits` +#include + + +``` +namespace boost { namespace qvm { + + template + struct scalar\_traits { + + BOOST\_QVM\_INLINE\_CRITICAL + static Scalar value( int v ) { + return Scalar(v); + } + + }; + +} } +``` + +This template may be specialized for user-defined scalar types to define the appropriate conversion from `int`; this is primarily used whenever QVM needs to deduce a zero or one value. + + +--- + +#### `deduce_scalar` +#include + + +``` +namespace boost { namespace qvm { + + template + struct deduce\_scalar + { + typedef typename /\*exact definition unspecified\*/ type; + }; + +} } +``` + + +Requires: + +`A` and `B` satisfy the [scalar requirements](#scalar_requirements). +Returns: + +If `A` and `B` are the same type, `scalar_traits::type` is defined as that type. Otherwise for the following types: +* `signed`/`unsigned char`, +* `signed`/`unsigned short`, +* `signed`/`unsigned int`, +* `signed`/`unsigned long`, +* `float`, +* `double`, + +the deduction logic is as follows: + +* if either of `A` and `B` is `double`, the result is `double`; +* else, if one of `A` or `B` is an integer type and the other is `float`, the result is `float`; +* else, if one of `A` or `B` is a signed integer and the other type is unsigned integer, the signed type is changed to unsigned, and then the lesser of the two integers is promoted to the other. + +For any other types `scalar_traits::type` is defined as `void`. It can be specialized for user-defined scalar types. + + + +| | | +| --- | --- | +| | +This template is used by generic binary operations that return a scalar, to deduce the return type based on the (possibly different) scalars of their arguments. + | + + +--- + +#### `scalar` +#include + + +``` +namespace boost { namespace qvm { + + template + struct scalar { + typedef /\*exact definition unspecified\*/ type; + }; + +} } +``` + +The expression [`quat_traits::scalar_type`](#quat_traits) evaluates to the scalar type of the quaternion type `T` (if [`is_quat::value`](#is_quat) is `true`). + +The expression [`vec_traits::scalar_type`](#vec_traits) evaluates to the scalar type of the vector type `T` (if [`is_vec::value`](#is_vec) is `true`). + +The expression [`mat_traits::scalar_type`](#mat_traits) evaluates to the scalar type of the matrix type `T` (if [`is_mat::value`](#is_mat) is `true`). + +The expression `scalar::type` is similar, except that it automatically detects whether `T` is a vector or a matrix or a quaternion type. + + +--- + +#### `is_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + struct is\_quat { + + static bool const value = false; + + }; + +} } +``` + +This type template defines a compile-time boolean constant value which can be used to determine whether a type `T` is a quaternion type. For quaternion types, the [`quat_traits`](#quat_traits) template can be used to access their elements generically, or to obtain their `scalar type`. + + +--- + +#### `quat_traits` +#include + + +``` +namespace boost { namespace qvm { + + template + struct quat\_traits { + + /\*main template members unspecified\*/ + + }; + + /\* + User-defined (possibly partial) specializations: + + template <> + struct quat\_traits { + + typedef <> scalar\_type; + + template + static inline scalar\_type read\_element( Quaternion const & q ); + + template + static inline scalar\_type & write\_element( Quaternion & q ); + + }; + \*/ + +} } +``` + +The `quat_traits` template must be specialized for (user-defined) quaternion types in order to enable quaternion operations defined in QVM headers for objects of those types. + + + +| | | +| --- | --- | +| | +QVM quaternion operations do not require that quaternion types are copyable. + | + +The main `quat_traits` template members are not specified. Valid specializations are required to define the following members: + +* `scalar_type`: the expression `quat_traits::scalar_type` must be a value type which satisfies the [`scalar requirements`](#scalar_requirements). + +In addition, valid specializations of the `quat_traits` template must define at least one of the following access functions as static members, where `q` is an object of type `Quaternion`, and `I` is compile-time integer constant: + +* `read_element`: the expression `quat_traits::read_element(q)` returns either a copy of or a `const` reference to the `I`-th element of `q`. +* `write_element`: the expression `quat_traits::write_element(q)` returns mutable reference to the `I`-th element of `q`. + + + +| | | +| --- | --- | +| | +For the quaternion `a + bi + cj + dk`, the elements are assumed to be in the following order: `a`, `b`, `c`, `d`; that is, `I`=`0`/`1`/`2`/`3` would access `a`/`b`/`c`/`d`. + | + +It is illegal to call any of the above functions unless `is_quat::value` is true. Even then, quaternion types are allowed to define only a subset of the access functions. + +Below is an example of a user-defined quaternion type, and its corresponding specialization of the quat\_traits template: + + + +``` +#include + +struct fquat { float a[4]; }; + +namespace boost { namespace qvm { + + template <> + struct quat\_traits { + + typedef float scalar\_type; + + template + static inline scalar\_type & write\_element( fquat & q ) { + return q.a[I]; + } + + template + static inline scalar\_type read\_element( fquat const & q ) { + return q.a[I]; + } + + }; + +} } +``` + +Equivalently, using the [`quat_traits_defaults`](#quat_traits_defaults) template the above can be shortened to: + + + +``` +namespace boost { namespace qvm { + + template <> + struct quat\_traits: quat\_traits\_defaults { + + template + static inline scalar\_type & write\_element( fquat & q ) { + return q.a[I]; + } + + }; + +} } +``` + + +--- + +#### `quat_traits_defaults` +#include + + +``` +namespace boost { namespace qvm { + + template + struct quat\_traits\_defaults { + + typedef QuatType quat\_type; + + typedef ScalarType scalar\_type; + + template + static BOOST\_QVM\_INLINE\_CRITICAL + scalar\_type read\_element( quat\_type const & x ) { + return quat\_traits::template + write\_element(const\_cast(x)); + } + + }; + +} } +``` + +The `quat_traits_defaults` template is designed to be used as a public base for user-defined specializations of the [`quat_traits`](#quat_traits) template, to easily define the required members. If it is used, the only member that must be defined by the user in a `quat_traits` specialization is `write_element`; the `quat_traits_defaults` base will define `read_element`, as well as `scalar_type` automatically. + + +--- + +#### `deduce_quat` +#include + + +``` +namespace boost { namespace qvm { + + template ::scalar\_type> + struct deduce\_quat { + typedef Q type; + }; + +} } +``` + + +Requires: + + +* `[is\_quat](#is_quat)::value` is `true`; +* `[is\_scalar](#is_scalar)::value` is `true`; +* `[is\_quat](#is_quat)::type>::value` must be `true`; +* `[quat\_traits](#quat_traits)::type>::scalar_type` must be the same type as `S`; +* `deduce_quat::type` must be copyable. + +This template is used by QVM whenever it needs to deduce a copyable quaternion type from the quaternion type `Q`, with a scalar type `S`. Note that `Q` itself may be non-copyable. + +The main template definition returns an unspecified quaternion type, except if `S` is the same type as `[quat\_traits](#quat_traits)::scalar_type`, in which case it returns `Q`, which is only suitable if `Q` is copyable. QVM also defines (partial) specializations for the non-copyable quaternion types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the `deduce_quat` template is for specifying the preferred quaternion type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + +#### `deduce_quat2` +#include + + +``` +namespace boost { namespace qvm { + + template ::type, + typename scalar::type>::type> + struct deduce\_quat2 { + typedef /\*unspecified\*/ type; + }; + +} } +``` + + +Requires: + + +* Both `[scalar](#scalar)::type` and `scalar::type` are well defined; +* `[is\_quat](#is_quat)::value` || `is_quat::value` is `true`; +* `[is\_scalar](#is_scalar)::value` is `true`; +* `is_quat::type>::value` must be `true`; +* `[quat\_traits](#quat_traits)::type>::scalar_type` must be the same type as `S`; +* `deduce_quat2::type` must be copyable. + +This template is used by QVM whenever it needs to deduce a quaternion type from the types of two user-supplied function parameters, with scalar type `S`. The returned type must have accessible copy constructor (the `A` and `B` types themselves could be non-copyable, and either one of them may not be a quaternion type.) + +The main template definition returns an unspecified quaternion type with [`scalar_type`](#quat_traits) `S`, except if `A` and `B` are the same quaternion type `Q`, in which case `Q` is returned, which is only suitable for copyable types. QVM also defines (partial) specializations for the non-copyable quaternion types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the `deduce_quat2` template is for specifying the preferred quaternion type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + +#### `is_vec` +#include + + +``` +namespace boost { namespace qvm { + + template + struct is\_vec { + + static bool const value = false; + + }; + + } } +``` + +This type template defines a compile-time boolean constant value which can be used to determine whether a type `T` is a vector type. For vector types, the [`vec_traits`](#vec_traits) template can be used to access their elements generically, or to obtain their dimension and `scalar type`. + + +--- + +#### `vec_traits` +#include + + +``` +namespace boost { namespace qvm { + + template + struct vec\_traits { + + /\*main template members unspecified\*/ + + }; + + /\* + User-defined (possibly partial) specializations: + + template <> + struct vec\_traits { + + static int const dim = <>; + + typedef <> scalar\_type; + + template + static inline scalar\_type read\_element( Vector const & v ); + + template + static inline scalar\_type & write\_element( Vector & v ); + + static inline scalar\_type read\_element\_idx( int i, Vector const & v ); + static inline scalar\_type & write\_element\_idx( int i, Vector & v ); + + }; + \*/ + +} } +``` + +The `vec_traits` template must be specialized for (user-defined) vector types in order to enable vector and matrix operations defined in QVM headers for objects of those types. + + + +| | | +| --- | --- | +| | +QVM vector operations do not require that vector types are copyable. + | + +The main `vec_traits` template members are not specified. Valid specializations are required to define the following members: + +* `dim`: the expression `vec_traits::dim` must evaluate to a compile-time integer constant greater than 0 that specifies the vector size. +* `scalar_type`: the expression `vec_traits::scalar_type` must be a value type which satisfies the [`scalar requirements`](#scalar_requirements). + +In addition, valid specializations of the `vec_traits` template may define the following access functions as static members, where `v` is an object of type `Vector`, `I` is a compile-time integer constant, and `i` is a variable of type `int`: + +* `read_element`: the expression `vec_traits::read_element(v)` returns either a copy of or a const reference to the `I`-th element of `v`. +* `write_element`: the expression `vec_traits::write_element(v)` returns mutable reference to the `I`-th element of `v`. +* `read_element_idx`: the expression `vec_traits::read_element_idx(i,v)` returns either a copy of or a `const` reference to the `i`-th element of `v`. +* `write_element_idx`: the expression `vec_traits::write_element_idx(i,v)` returns mutable reference to the `i`-th element of `v`. + +It is illegal to call any of the above functions unless `is_vec::value` is true. Even then, vector types are allowed to define only a subset of the access functions. The general requirements are: + +* At least one of `read_element` or `write_element` must be defined; +* If `read_element_idx` is defined, `read_element` must also be defined; +* If `write_element_idx` is defined, `write_element` must also be defined. + +Below is an example of a user-defined 3D vector type, and its corresponding specialization of the `vec_traits` template: + + + +``` +#include + +struct float3 { float a[3]; }; + +namespace boost { namespace qvm { + + template <> + struct vec\_traits { + + static int const dim=3; + + typedef float scalar\_type; + + template + static inline scalar\_type & write\_element( float3 & v ) { + return v.a[I]; + } + + template + static inline scalar\_type read\_element( float3 const & v ) { + return v.a[I]; + } + + static inline scalar\_type & write\_element\_idx( int i, float3 & v ) { + return v.a[i]; + } //optional + + static inline scalar\_type read\_element\_idx( int i, float3 const & v ) { + return v.a[i]; + } //optional + + }; + +} } +``` + +Equivalently, using the [`vec_traits_defaults`](#vec_traits_defaults) template the above can be shortened to: + + + +``` +namespace boost { namespace qvm { + + template <> + struct vec\_traits: vec\_traits\_defaults + { + + template + static inline scalar\_type & write\_element( float3 & v ) { + return v.a[I]; + } + + static inline scalar\_type & write\_element\_idx( int i, float3 & v ) { + return v.a[i]; + } //optional + + }; + +} } +``` + + +--- + +#### `vec_traits_defaults` +#include + + +``` +namespace boost { namespace qvm { + + template + struct vec\_traits\_defaults { + + typedef VecType vec\_type; + typedef ScalarType scalar\_type; + static int const dim=Dim; + + template + static BOOST\_QVM\_INLINE\_CRITICAL + scalar\_type write\_element( vec\_type const & x ) { + return vec\_traits::template write\_element(const\_cast(x)); + } + + static BOOST\_QVM\_INLINE\_CRITICAL + scalar\_type read\_element\_idx( int i, vec\_type const & x ) { + return vec\_traits::write\_element\_idx(i,const\_cast(x)); + } + + protected: + + static BOOST\_QVM\_INLINE\_TRIVIAL + scalar\_type & write\_element\_idx( int i, vec\_type & m ) { + /\* unspecified \*/ + } + }; + +} } +``` + +The `vec_traits_defaults` template is designed to be used as a public base for user-defined specializations of the [`vec_traits`](#vec_traits) template, to easily define the required members. If it is used, the only member that must be defined by the user in a `vec_traits` specialization is `write_element`; the `vec_traits_defaults` base will define `read_element`, as well as `scalar_type` and `dim` automatically. + +Optionally, the user may also define `write_element_idx`, in which case the `vec_traits_defaults` base will provide a suitable `read_element_idx` definition automatically. If not, `vec_traits_defaults` defines a protected implementation of `write_element_idx` which may be made publicly available by the deriving `vec_traits` specialization in case the vector type for which it is being specialized can not be indexed efficiently. This `write_element_idx` function is less efficient (using meta-programming), implemented in terms of the required user-defined `write_element`. + + +--- + +#### `deduce_vec` +#include + + +``` +namespace boost { namespace qvm { + + template ::dim, + class S=typename vec\_traits::scalar\_type> + struct deduce\_vec { + + typedef /\*unspecified\*/ type; + + }; + +} } +``` + + +Requires: + + +* `[is\_vec](#is_vec)::value` is `true`; +* `[is\_scalar](#is_scalar)::value` is `true`; +* `is_vec::type>::value` must be `true`; +* `deduce_vec::type` must be copyable; +* `vec_traits::type>::dim==D`; +* `vec_traits::type>::scalar_type` is the same type as `S`. + +This template is used by QVM whenever it needs to deduce a copyable vector type of certain dimension from a single user-supplied function parameter of vector type. The returned type must have accessible copy constructor. Note that `V` may be non-copyable. + +The main template definition returns an unspecified copyable vector type of size `D` and scalar type `S`, except if `[vec\_traits](#vec_traits)::dim==D` and `[vec\_traits](#vec_traits)::scalar_type` is the same type as `S`, in which case it returns `V`, which is suitable only if `V` is a copyable type. QVM also defines (partial) specializations for the non-copyable vector types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the `deduce_vec` template is for specifying the preferred vector type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + +#### `deduce_vec2` +#include + + +``` +namespace boost { namespace qvm { + + template ::type, + typename scalar::type>::type> + struct deduce\_vec2 { + typedef /\*unspecified\*/ type; + }; + +} } +``` + + +Requires: + + +* Both `[scalar](#scalar)::type` and `scalar::type` are well defined; +* `[is\_vec](#is_vec)::value || is_vec::value` is `true`; +* `[is\_scalar](#is_scalar)::value` is `true`; +* `is_vec::type>::value` must be `true`; +* `deduce_vec2::type` must be copyable; +* `vec_traits::type>::dim==D`. +* `vec_traits::type>::scalar_type` is the same type as `S`. + +This template is used by QVM whenever it needs to deduce a vector type of certain dimension from the types of two user-supplied function parameters. The returned type must have accessible copy constructor (the `A` and `B` types themselves could be non-copyable, and either one of them may be a non-vector type.) + +The main template definition returns an unspecified vector type of the requested dimension with [`scalar_type`](#vec_traits) `S`, except if `A` and `B` are the same vector type `V`, in which case `V` is returned, which is only suitable for copyable types. QVM also defines (partial) specializations for the non-copyable vector types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the `deduce_vec2` template is for specifying the preferred vector type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + +#### `is_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + struct is\_mat { + + static bool const value = false; + + }; + +} } +``` + +This type template defines a compile-time boolean constant value which can be used to determine whether a type `T` is a matrix type. For matrix types, the [`mat_traits`](#mat_traits) template can be used to access their elements generically, or to obtain their dimensions and scalar type. + + +--- + +#### `mat_traits` +#include + + +``` +namespace boost { namespace qvm { + + template + struct mat\_traits { + + /\*main template members unspecified\*/ + + }; + + /\* + User-defined (possibly partial) specializations: + + template <> + struct mat\_traits { + + static int const rows = <>; + static int const cols = <>; + typedef <> scalar\_type; + + template + static inline scalar\_type read\_element( Matrix const & m ); + + template + static inline scalar\_type & write\_element( Matrix & m ); + + static inline scalar\_typeread\_element\_idx( int r, int c, Matrix const & m ); + static inline scalar\_type & write\_element\_idx( int r, int c, Matrix & m ); + + }; + \*/ + +} } +``` + +The `mat_traits` template must be specialized for (user-defined) matrix types in order to enable vector and matrix operations defined in QVM headers for objects of those types. + + + +| | | +| --- | --- | +| | +The matrix operations defined by QVM do not require matrix types to be copyable. + | + +The main `mat_traits` template members are not specified. Valid specializations are required to define the following members: + +* `rows`: the expression `mat_traits::rows` must evaluate to a compile-time integer constant greater than 0 that specifies the number of rows in a matrix. +* `cols` must evaluate to a compile-time integer constant greater than 0 that specifies the number of columns in a matrix. +* `scalar_type`: the expression `mat_traits::scalar_type` must be a value type which satisfies the scalar requirements. + +In addition, valid specializations of the `mat_traits` template may define the following access functions as static members, where `m` is an object of type `Matrix`, `R` and `C` are compile-time integer constants, and `r` and `c` are variables of type `int`: + +* `read_element`: the expression `mat_traits::read_element(m)` returns either a copy of or a const reference to the element at row `R` and column `C` of `m`. +* `write_element`: the expression `mat_traits::write_element(m)` returns mutable reference to the element at row `R` and column `C` of `m`. +* `read_element_idx`: the expression `mat_traits::read_element_idx(r,c,m)` returns either a copy of or a const reference to the element at row `r` and column `c` of `m`. +* `write_element_idx`: the expression `mat_traits::write_element_idx(r,c,m)` returns mutable reference to the element at row `r` and column `c` of `m`. + +It is illegal to call any of the above functions unless `is_mat::value` is true. Even then, matrix types are allowed to define only a subset of the access functions. The general requirements are: + +* At least one of `read_element` or `write_element` must be defined; +* If `read_element_idx` is defined, `read_element` must also be defined; +* If `write_element_idx` is defined, `write_element` must also be defined. + +Below is an example of a user-defined 3x3 matrix type, and its corresponding specialization of the `mat_traits` template: + + + +``` +#include + +struct float33 { float a[3][3]; }; + +namespace boost { namespace qvm { + + template <> + struct mat\_traits { + + static int const rows=3; + static int const cols=3; + typedef float scalar\_type; + + template + static inline scalar\_type & write\_element( float33 & m ) { + return m.a[R][C]; + } + + template + static inline scalar\_type read\_element( float33 const & m ) { + return m.a[R][C]; + } + + static inline scalar\_type & write\_element\_idx( int r, int c, float33 & m ) { + return m.a[r][c]; + } + + static inline scalar\_type read\_element\_idx( int r, int c, float33 const & m ) { + return m.a[r][c]; + } + + }; + +} } +``` + +Equivalently, we could use the < + struct mat\_traits: mat\_traits\_defaults { + + template static inline scalar\_type & write\_element( float33 & m ) { return m.a[R][C]; } + + static inline scalar\_type & write\_element\_idx( int r, int c, float33 & m ) { + return m.a[r][c]; + } + + }; + +} } +``` + + +--- + +#### `mat_traits_defaults` +#include + + +``` +namespace boost { namespace qvm { + + template + struct mat\_traits\_defaults + { + typedef MatType mat\_type; + typedef ScalarType scalar\_type; + static int const rows=Rows; + static int const cols=Cols; + + template + static BOOST\_QVM\_INLINE\_CRITICAL + scalar\_type write\_element( mat\_type const & x ) { + return mat\_traits::template write\_element(const\_cast(x)); + } + + static BOOST\_QVM\_INLINE\_CRITICAL + scalar\_type read\_element\_idx( int r, int c, mat\_type const & x ) { + return mat\_traits::write\_element\_idx(r,c,const\_cast(x)); + } + + protected: + + static BOOST\_QVM\_INLINE\_TRIVIAL + scalar\_type & write\_element\_idx( int r, int c, mat\_type & m ) { + /\* unspecified \*/ + } + }; + +} } +``` + +The `mat_traits_defaults` template is designed to be used as a public base for user-defined specializations of the [`mat_traits`](#mat_traits) template, to easily define the required members. If it is used, the only member that must be defined by the user in a `mat_traits` specialization is `write_element`; the `mat_traits_defaults` base will define `read_element`, as well as `scalar_type`, `rows` and `cols` automatically. + +Optionally, the user may also define `write_element_idx`, in which case the `mat_traits_defaults` base will provide a suitable `read_element_idx` definition automatically. Otherwise, `mat_traits_defaults` defines a protected implementation of `write_element_idx` which may be made publicly available by the deriving `mat_traits` specialization in case the matrix type for which it is being specialized can not be indexed efficiently. This `write_element_idx` function is less efficient (using meta-programming), implemented in terms of the required user-defined `write_element`. + + +--- + +#### `deduce_mat` +#include + + +``` +namespace boost { namespace qvm { + + template < + class M, + int R=mat\_traits::rows, + int C=mat\_traits::cols, + class S=typename mat\_traits::scalar\_type> + struct deduce\_mat { + + typedef /\*unspecified\*/ type; + + }; + +} } +``` + + +Requires: + + +* `[is\_mat](#is_mat)::value` is `true`; +* `is_mat::type>::value` must be `true`; +* `deduce_mat::type` must be copyable; +* `[mat\_traits](#mat_traits)::type>::rows==R`; +* `mat_traits::type>::cols==C`, +* `mat_traits::type::scalar_type` is the same type as `S`. + +This template is used by QVM whenever it needs to deduce a copyable matrix type of certain dimensions from a single user-supplied function parameter of matrix type. The returned type must have accessible copy constructor. Note that M itself may be non-copyable. + +The main template definition returns an unspecified copyable matrix type of size `R` x `C` and scalar type `S`, except if `[mat\_traits](#mat_traits)::rows==R` and `mat_traits::cols==Cols` and `mat_traits::scalar_type` is S, in which case it returns `M`, which is suitable only if `M` is a copyable type. QVM also defines (partial) specializations for the non-copyable matrix types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the deduce\_mat template is for specifying the preferred matrix type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + +#### `deduce_mat2` +#include + + +``` +namespace boost { namespace qvm { + + template ::type, + typename scalar::type>::type + struct deduce\_mat2 { + + typedef /\*unspecified\*/ type; + + }; + +} } +``` + + +Requires: + + +* Both `[scalar](#scalar)::type` and `scalar::type` are well defined; +* `[is\_mat](#is_mat)::value || is_mat::value` is `true`; +* `[is\_scalar](#is_scalar)::value` is `true`; +* `is_mat::type>::value` must be `true`; +* `deduce_mat2::type` must be copyable; +* `[mat\_traits](#mat_traits)::type>::rows==R`; +* `mat_traits::type>::cols==C`; +* `mat_traits::type>::scalar_type` is the same type as `S`. + +This template is used by QVM whenever it needs to deduce a matrix type of certain dimensions from the types of two user-supplied function parameters. The returned type must have accessible copy constructor (the `A` and `B` types themselves could be non-copyable, and either one of them may be a non-matrix type.) + +The main template definition returns an unspecified matrix type of the requested dimensions with [`scalar_type`](#mat_traits) `S`, except if `A` and `B` are the same matrix type `M`, in which case `M` is returned, which is only suitable for copyable types. QVM also defines (partial) specializations for the non-copyable matrix types it produces. Users can define other (partial) specializations for their own types. + +A typical use of the `deduce_mat2` template is for specifying the preferred matrix type to be returned by the generic function template overloads in QVM depending on the type of their arguments. + + +--- + + +### Built-in Quaternion, Vector and Matrix Types +QVM defines several class templates (together with appropriate specializations of [`quat_traits`](#quat_traits), [`vec_traits`](#vec_traits) and [`mat_traits`](#mat_traits) templates) which can be used as generic quaternion, vector and matrix types. Using these types directly wouldn’t be typical though, the main design goal of QVM is to allow users to plug in their own quaternion, vector and matrix types. + +#### `quat` +#include + + +``` +namespace boost { namespace qvm { + + template + struct quat { + + T a[4]; + + template + operator R() const { + R r; + assign(r,\*this); + return r; + } + + }; + + template + struct quat\_traits; + + template + struct quat\_traits< quat > { + + typedef T scalar\_type; + + template + static scalar\_type read\_element( quat const & x ) { + return x.a[I]; + } + + template + static scalar\_type & write\_element( quat & x ) { + return x.a[I]; + } + + }; + +} } +``` + +This is a simple quaternion type. It converts to any other quaternion type. + +The partial specialization of the [`quat_traits`](#quat_traits) template makes the `quat` template compatible with the generic operations defined by QVM. + + +--- + +#### `vec` +#include + + +``` +namespace boost { namespace qvm { + + template + struct vec { + + T a[Dim]; + + template + operator R() const { + R r; + assign(r,\*this); + return r; + } + + }; + + template + struct vec\_traits; + + template + struct vec\_traits< vec > { + + typedef T scalar\_type; + static int const dim=Dim; + + template + static scalar\_type read\_element( vec const & x ) { + return x.a[I]; + } + + template + static scalar\_type & write\_element( vec & x ) { + return x.a[I]; + } + + static scalar\_type read\_element\_idx( int i, vec const & x ) { + return x.a[i]; + } + + static scalar\_type & write\_element\_idx( int i, vec & x ) { + return x.a[i]; + } + }; + +} } +``` + +This is a simple vector type. It converts to any other vector type of compatible size. + +The partial specialization of the [`vec_traits`](#vec_traits) template makes the `vec` template compatible with the generic operations defined by QVM. + + +--- + +#### `mat` +#include + + +``` +namespace boost { namespace qvm { + + template + struct mat { + + T a[Rows][Cols]; + + template + operator R() const { + R r; + assign(r,\*this); + return r; + } + + }; + + template + struct mat\_traits; + + template + struct mat\_traits< mat > { + + typedef T scalar\_type; + static int const rows=Rows; + static int const cols=Cols; + + template + static scalar\_type read\_element( mat const & x ) { + return x.a[Row][Col]; + } + + template + static scalar\_type & write\_element( mat & x ) { + return x.a[Row][Col]; + } + + static scalar\_type read\_element\_idx( int row, int col, mat const & x ) { + return x.a[row][col]; + } + + static scalar\_type & write\_element\_idx( int row, int col, mat & x ) { + return x.a[row][col]; + } + + }; + +} } +``` + +This is a simple matrix type. It converts to any other matrix type of compatible size. + +The partial specialization of the [`mat_traits`](#mat_traits) template makes the `mat` template compatible with the generic operations defined by QVM. + + +--- + + +### Element Access +#### Quaternions +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value + + template -unspecified-return-type- S( Q & q ); + template -unspecified-return-type- V( Q & q ); + template -unspecified-return-type- X( Q & q ); + template -unspecified-return-type- Y( Q & q ); + template -unspecified-return-type- Z( Q & q ); + +} } +``` + +An expression of the form `S(q)` can be used to access the scalar component of the quaternion `q`. For example, + + + +``` +S(q) \*= 42; +``` + +multiplies the scalar component of `q` by the scalar 42. + +An expression of the form `V(q)` can be used to access the vector component of the quaternion `q`. For example, + + + +``` +V(q) \*= 42 +``` + +multiplies the vector component of `q` by the scalar 42. + +The `X`, `Y` and `Z` elements of the vector component can also be accessed directly using `X(q)`, `Y(q)` and `Z(q)`. + + + +| | | +| --- | --- | +| | +The return types are lvalues. + | + + +#### Vectors +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + + template -unspecified-return-type- A( V & v ); + template -unspecified-return-type- A0( V & v ); + template -unspecified-return-type- A1( V & v ); + ... + template -unspecified-return-type- A9( V & v ); + + template -unspecified-return-type- X( V & v ); + template -unspecified-return-type- Y( V & v ); + template -unspecified-return-type- Z( V & v ); + template -unspecified-return-type- W( V & v ); + +} } +``` + +An expression of the form of `A(v)` can be used to access the `I`-th element a vector object `v`. For example, the expression: + + + +``` +A<1>(v) \*= 42; +``` + +can be used to multiply the element at index 1 (indexing in QVM is always zero-based) of a vector `v` by 42. + +For convenience, there are also non-template overloads for `I` from 0 to 9; an alternative way to write the above expression is: + + + +``` +A1(v) \*= 42; +``` + +`X`, `Y`, `Z` and `W` act the same as `A0`/`A1`/`A2`/`A3`; yet another alternative way to write the above expression is: + + + +``` +Y(v) \*= 42; +``` + + + +| | | +| --- | --- | +| | +The return types are lvalues. + | + + +#### Vector Element Swizzling +#include + + +``` +namespace boost { namespace qvm { + + //\*\*\* Accessing vector elements by swizzling \*\*\* + + //2D view proxies, only enabled if: + // is\_vec::value + template -unspecified-2D-vector-type- XX( V & v ); + template -unspecified-2D-vector-type- XY( V & v ); + template -unspecified-2D-vector-type- XZ( V & v ); + template -unspecified-2D-vector-type- XW( V & v ); + template -unspecified-2D-vector-type- X0( V & v ); + template -unspecified-2D-vector-type- X1( V & v ); + template -unspecified-2D-vector-type- YX( V & v ); + template -unspecified-2D-vector-type- YY( V & v ); + template -unspecified-2D-vector-type- YZ( V & v ); + template -unspecified-2D-vector-type- YW( V & v ); + template -unspecified-2D-vector-type- Y0( V & v ); + template -unspecified-2D-vector-type- Y1( V & v ); + template -unspecified-2D-vector-type- ZX( V & v ); + template -unspecified-2D-vector-type- ZY( V & v ); + template -unspecified-2D-vector-type- ZZ( V & v ); + template -unspecified-2D-vector-type- ZW( V & v ); + template -unspecified-2D-vector-type- Z0( V & v ); + template -unspecified-2D-vector-type- Z1( V & v ); + template -unspecified-2D-vector-type- WX( V & v ); + template -unspecified-2D-vector-type- WY( V & v ); + template -unspecified-2D-vector-type- WZ( V & v ); + template -unspecified-2D-vector-type- WW( V & v ); + template -unspecified-2D-vector-type- W0( V & v ); + template -unspecified-2D-vector-type- W1( V & v ); + ... + //2D view proxies, only enabled if: + // is\_scalar::value + template -unspecified-2D-vector-type- X0( S & s ); + template -unspecified-2D-vector-type- X1( S & s ); + template -unspecified-2D-vector-type- XX( S & s ); + ... + -unspecified-2D-vector-type- \_00(); + -unspecified-2D-vector-type- \_01(); + -unspecified-2D-vector-type- \_10(); + -unspecified-2D-vector-type- \_11(); + + //3D view proxies, only enabled if: + // is\_vec::value + template -unspecified-3D-vector-type- XXX( V & v ); + ... + template -unspecified-3D-vector-type- XXW( V & v ); + template -unspecified-3D-vector-type- XX0( V & v ); + template -unspecified-3D-vector-type- XX1( V & v ); + template -unspecified-3D-vector-type- XYX( V & v ); + ... + template -unspecified-3D-vector-type- XY1( V & v ); + ... + template -unspecified-3D-vector-type- WW1( V & v ); + ... + //3D view proxies, only enabled if: + // is\_scalar::value + template -unspecified-3D-vector-type- X00( S & s ); + template -unspecified-3D-vector-type- X01( S & s ); + ... + template -unspecified-3D-vector-type- XXX( S & s ); + template -unspecified-3D-vector-type- XX0( S & s ); + ... + -unspecified-3D-vector-type- \_000(); + -unspecified-3D-vector-type- \_001(); + -unspecified-3D-vector-type- \_010(); + ... + -unspecified-3D-vector-type- \_111(); + + //4D view proxies, only enabled if: + // is\_vec::value + template -unspecified-4D-vector-type- XXXX( V & v ); + ... + template -unspecified-4D-vector-type- XXXW( V & v ); + template -unspecified-4D-vector-type- XXX0( V & v ); + template -unspecified-4D-vector-type- XXX1( V & v ); + template -unspecified-4D-vector-type- XXYX( V & v ); + ... + template -unspecified-4D-vector-type- XXY1( V & v ); + ... + template -unspecified-4D-vector-type- WWW1( V & v ); + ... + //4D view proxies, only enabled if: + // is\_scalar::value + template -unspecified-4D-vector-type- X000( S & s ); + template -unspecified-4D-vector-type- X001( S & s ); + ... + template -unspecified-4D-vector-type- XXXX( S & s ); + template -unspecified-4D-vector-type- XX00( S & s ); + ... + -unspecified-4D-vector-type- \_0000(); + -unspecified-4D-vector-type- \_0001(); + -unspecified-4D-vector-type- \_0010(); + ... + -unspecified-4D-vector-type- \_1111(); + +} } +``` + +Swizzling allows zero-overhead direct access to a (possibly rearranged) subset of the elements of 2D, 3D and 4D vectors. For example, if `v` is a 4D vector, the expression `YX(v) is a 2D view proxy whose `X` element refers to the `Y` element of `v`, and whose `Y` element refers to the `X` element of `v`. Like other view proxies `YX` is an lvalue, that is, if `v2` is a 2D vector, one could write: + + + +``` +YX(v) = v2; +``` + +The above will leave the `Z` and `W` elements of `v` unchanged but assign the `Y` element of `v2` to the `X` element of `v` and the `X` element of `v2` to the `Y` element of `v`. + +All permutations of `X`, `Y`, `Z`, `W`, `0`, `1` for 2D, 3D and 4D swizzling are available (if the first character of the swizzle identifier is `0` or `1`, it is preceded by a `_`, for example `_11XY`). + +It is valid to use the same vector element more than once: the expression `ZZZ(v)` is a 3D vector whose `X`, `Y` and `Z` elements all refer to the `Z` element of `v`. + +Finally, scalars can be "swizzled" to access them as vectors: the expression `_0X01(42.0f)` is a 4D vector with `X`=0, `Y`=42.0, `Z`=0, `W`=1. + + +#### Matrices +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value + + template -unspecified-return-type- A( M & m ); + + template -unspecified-return-type- A00( M & m ); + template -unspecified-return-type- A01( M & m ); + ... + template -unspecified-return-type- A09( M & m ); + template -unspecified-return-type- A10( M & m ); + ... + template -unspecified-return-type- A99( M & m ); + +} } +``` + +An expression of the form `A(m)` can be used to access the element at row `R` and column `C` of a matrix object `m`. For example, the expression: + + + +``` +A<4,2>(m) \*= 42; +``` + +can be used to multiply the element at row 4 and column 2 of a matrix `m` by 42. + +For convenience, there are also non-template overloads for `R` from `0` to `9` and `C` from `0` to `9`; an alternative way to write the above expression is: + + + +``` +A42(m) \*= 42; +``` + + + +| | | +| --- | --- | +| | +The return types are lvalues. + | + + +--- + + +### Quaternion Operations +#### `assign` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + A & assign( A & a, B const & b ); + +} } +``` + + +Effects: + +Copies all elements of the quaternion `b` to the quaternion `a`. +Returns: + +`a`. + +--- + +#### `convert_to` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + R convert\_to( A const & a ); + + //Only enabled if: + // is\_quat::value && is\_mat::value && + // mat\_traits::rows==3 && mat\_traits::cols==3 + template + R convert\_to( A const & m ); + +} } +``` + + +Requires: + +`R` must be copyable. +Effects: + + +* The first overload is equivalent to: `R r; assign(r,a); return r;` +* The second overload assumes that `m` is an orthonormal rotation matrix and converts it to a quaternion that performs the same rotation. + + +--- + +#### `operator-=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + A & operator-=( A & a, B const & b ); + +} } +``` + + +Effects: + +Subtracts the elements of `b` from the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator-` (unary) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename deduce\_quat::type + operator-( A const & a ); + +} } +``` + + +Returns: + +A quaternion of the negated elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_quat`](#deduce_quat) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `operator-` (binary) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + typename deduce\_quat2::type + operator-( A const & a, B const & b ); + +} } +``` + + +Returns: + +A quaternion with elements equal to the elements of `b` subtracted from the corresponding elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator+=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + A & operator+=( A & a, B const & b ); + +} } +``` + + +Effects: + +Adds the elements of `b` to the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator+` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value && + template + typename deduce\_quat2::type + operator+( A const & a, B const & b ); + +} } +``` + + +Returns: + +A quaternion with elements equal to the elements of `a` added to the corresponding elements of `b`. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator/=` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value && is\_scalar::value + template + A & operator/=( A & a, B b ); + +} } +``` + + +Effects: + +This operation divides a quaternion by a scalar. +Returns: + +`a`. + +--- + +#### `operator/` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value && is\_scalar::value + template + typename deduce\_quat2>::type + operator/( A const & a, B b ); + +} } +``` + + +Returns: + +A quaternion that is the result of dividing the quaternion `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator*=` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value && is\_scalar::value + template + A & operator\*=( A & a, B b ); + +} } +``` + + +Effects: + +This operation multiplies the quaternion `a` by the scalar `b`. +Returns: + +`a`. + +--- + +#### `operator*=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + A & operator\*=( A & a, B const & b ); + +} } +``` + + +Effects: + +As if: + + +``` +A tmp(a); +a = tmp \* b; +return a; +``` + + +--- + +#### `operator*` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value && is\_scalar::value + template + typename deduce\_quat2::type + operator\*( A const & a, B b ); + +} } +``` + + +Returns: + +A quaternion that is the result of multiplying the quaternion `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator*` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + typename deduce\_quat2::type + operator\*( A const & a, B const & b ); + +} } +``` + + +Returns: + +The result of multiplying the quaternions `a` and `b`. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator==` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + bool operator==( A const & a, B const & b ); + +} } +``` + + +Returns: + +`true` if each element of `a` compares equal to its corresponding element of `b`, `false` otherwise. + +--- + +#### `operator!=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + bool operator!=( A const & a, B const & b ); + +} } +``` + + +Returns: + +`!(a == b)`. + +--- + +#### `cmp` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + bool cmp( A const & a, B const & b, Cmp pred ); + +} } +``` + + +Returns: + +Similar to [`operator==`](#quat_eq), except that it uses the binary predicate `pred` to compare the individual quaternion elements. + +--- + +#### `mag_sqr` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename quat\_traits::scalar\_type + mag\_sqr( A const & a ); + +} } +``` + + +Returns: + +The squared magnitude of the quaternion `a`. + +--- + +#### `mag` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename quat\_traits::scalar\_type + mag( A const & a ); + +} } +``` + + +Returns: + +The magnitude of the quaternion `a`. + +--- + +#### `normalized` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename deduce\_quat::type + normalized( A const & a ); + +} } +``` + + +Effects: + +As if: + + +``` +typename deduce\_quat::type tmp; +assign(tmp,a); +normalize(tmp); +return tmp; +``` + + + +| | | +| --- | --- | +| | +The [`deduce_quat`](#deduce_quat) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `normalize` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void normalize( A & a ); + +} } +``` + + +Effects: + +Normalizes `a`. +Ensures: + +`mag(a)==scalar_traits::scalar_type>::value(1).` +Throws: + +If the magnitude of `a` is zero, throws [`zero_magnitude_error`](#zero_magnitude_error). + +--- + +#### `dot` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value + template + typename deduce\_scalar::type + dot( A const & a, B const & b ); + +} } +``` + + +Returns: + +The dot product of the quaternions `a` and `b`. + + +| | | +| --- | --- | +| | +The [`deduce_scalar`](#deduce_scalar) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `conjugate` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename deduce\_quat::type + conjugate( A const & a ); + +} } +``` + + +Returns: + +Computes the conjugate of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_quat`](#deduce_quat) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `inverse` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + typename deduce\_quat::type + inverse( A const & a ); + +} } +``` + + +Returns: + +Computes the multiplicative inverse of `a`, or the conjugate-to-norm ratio. +Throws: + +If the magnitude of `a` is zero, throws [`zero_magnitude_error`](#zero_magnitude_error). + + +| | | +| --- | --- | +| | +If `a` is known to be unit length, `conjugate` is equivalent to [`inverse`](#quat_inverse), yet it is faster to compute. + | + + + +| | | +| --- | --- | +| | +The [`deduce_quat`](#deduce_quat) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `slerp` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_quat::value && is\_scalar + template + typename deduce\_quat2 >::type + slerp( A const & a, B const & b, C c ); + +} } +``` + + +Preconditions: + +`t>=0 && t<=1`. +Returns: + +A quaternion that is the result of Spherical Linear Interpolation of the quaternions `a` and `b` and the interpolation parameter `c`. When `slerp` is applied to unit quaternions, the quaternion path maps to a path through 3D rotations in a standard way. The effect is a rotation with uniform angular velocity around a fixed rotation axis. + + +| | | +| --- | --- | +| | +The [`deduce_quat2`](#deduce_quat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `zero_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- zero\_quat(); + +} } +``` + + +Returns: + +A read-only quaternion of unspecified type with [`scalar_type`](#scalar_traits) `T`, with all elements equal to [`scalar_traits::value(0)`](#scalar_traits). + +--- + +#### `set_zero` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void set\_zero( A & a ); + +} } +``` + + +Effects: + +As if: + + +``` +assign(a, + zero\_quat::scalar\_type>()); +``` + + +--- + +#### `identity_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- identity\_quat(); + +} } +``` + + +Returns: + +An identity quaternion with scalar type `S`. + +--- + +#### `set_identity` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void set\_identity( A & a ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + identity\_quat::scalar\_type>()); +``` + + +--- + +#### `rot_quat` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && vec\_traits::dim==3 + template + -unspecified-return-type- rot\_quat( A const & axis, typename vec\_traits::scalar\_type angle ); + +} } +``` + + +Returns: + +A quaternion of unspecified type which performs a rotation around the `axis` at `angle` radians. +Throws: + +In case the axis vector has zero magnitude, throws [`zero_magnitude_error`](#zero_magnitude_error). + + +| | | +| --- | --- | +| | +The `rot_quat` function is not a [view proxy](#view_proxy); it returns a temp object. + | + + +--- + +#### `set_rot` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && + // is\_vec::value && vec\_traits::dim==3 + template + void set\_rot( A & a, B const & axis, typename vec\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + rot\_quat(axis,angle)); +``` + + +--- + +#### `rotate` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && + // is\_vec::value && vec\_traits::dim==3 + template + void rotate( A & a, B const & axis, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a *= [rot\_quat](#rot_quat)(axis,angle)`. + +--- + +#### `rotx_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- rotx\_quat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) quaternion of unspecified type and scalar type `Angle`, which performs a rotation around the X axis at `angle` radians. + +--- + +#### `set_rotx` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void set\_rotx( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + rotx\_quat(angle)); +``` + + +--- + +#### `rotate_x` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void rotate\_x( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a *= [rotx\_quat](#rotx_quat)(angle)`. + +--- + +#### `roty_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- roty\_quat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) quaternion of unspecified type and scalar type `Angle`, which performs a rotation around the Y axis at `angle` radians. + +--- + +#### `set_roty` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void set\_rotz( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + roty\_quat(angle)); +``` + + +--- + +#### `rotate_y` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void rotate\_y( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a *= [roty\_quat](#roty_quat)(angle)`. + +--- + +#### `rotz_quat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- rotz\_quat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) quaternion of unspecified type and scalar type `Angle`, which performs a rotation around the Z axis at `angle` radians. + +--- + +#### `set_rotz` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void set\_rotz( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + rotz\_quat(angle)); +``` + + +--- + +#### `rotate_z` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + void rotate\_z( A & a, typename quat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a *= [rotz\_quat](#rotz_quat)(angle)`. + +--- + +#### `scalar_cast` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + -unspecified-return\_type- scalar\_cast( A const & a ); + +} } +``` + + +Returns: + +A read-only [view proxy](#view_proxy) of `a` that looks like a quaternion of the same dimensions as `a`, but with [`scalar_type`](#quat_traits) `Scalar` and elements constructed from the corresponding elements of `a`. + +--- + +#### `qref` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_quat::value + template + -unspecified-return-type- qref( A & a ); + +} } +``` + + +Returns: + +An identity view proxy of `a`; that is, it simply accesses the elements of `a`. + + +| | | +| --- | --- | +| | `qref` allows calling QVM operations when `a` is of built-in type, for example a plain old C array. + | + + +--- + + +### Vector Operations +#### `assign` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + A & assign( A & a, B const & b ); + +} } +``` + + +Effects: + +Copies all elements of the vector `b` to the vector `a`. +Returns: + +`a`. + +--- + +#### `convert_to` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + R convert\_to( A const & a ); + +} } +``` + + +Requires: + +`R` must be copyable. +Effects: + +As if: `R r; assign(r,a); return r;` + +--- + +#### `operator-=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + A & operator-=( A & a, B const & b ); + +} } +``` + + +Effects: + +Subtracts the elements of `b` from the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator-` (unary) +operator-(vec) + +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + typename deduce\_vec::type + operator-( A const & a ); + +} } +``` + + +Returns: + +A vector of the negated elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_vec`](#deduce_vec) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `operator-` (binary) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + typename deduce\_vec2::dim>::type + operator-( A const & a, B const & b ); + +} } +``` + + +Returns: + +A vector of the same size as `a` and `b`, with elements the elements of `b` subtracted from the corresponding elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator+=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + A & operator+=( A & a, B const & b ); + +} } +``` + + +Effects: + +Adds the elements of `b` to the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator+` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + typename deduce\_vec2::dim>::type + operator+( A const & a, B const & b ); + +} } +``` + + +Returns: + +A vector of the same size as `a` and `b`, with elements the elements of `b` added to the corresponding elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator/=` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value && is\_scalar::value + template + A & operator/=( A & a, B b ); + +} } +``` + + +Effects: + +This operation divides a vector by a scalar. +Returns: + +`a`. + +--- + +#### `operator/` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value && is\_scalar::value + template + typename deduce\_vec2::dim>::type + operator/( A const & a, B b ); + +} } +``` + + +Returns: + +A vector that is the result of dividing the vector `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator*=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value && is\_scalar::value + template + A & operator\*=( A & a, B b ); + +} } +``` + + +Effects: + +This operation multiplies the vector `a` by the scalar `b`. +Returns: + +`a`. + +--- + +#### `operator*` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value && is\_scalar::value + template + typename deduce\_vec2::dim>::type + operator\*( A const & a, B b ); + + //Only enabled if: is\_scalar::value && is\_vec::value + template + typename deduce\_vec2::dim>::type + operator\*( B b, A const & a ); + +} } +``` + + +Returns: + +A vector that is the result of multiplying the vector `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator==` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + bool operator==( A const & a, B const & b ); + +} } +``` + + +Returns: + +`true` if each element of `a` compares equal to its corresponding element of `b`, `false` otherwise. + +--- + +#### `operator!=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + bool operator!=( A const & a, B const & b ); + +} } +``` + + +Returns: + +`!(a == b)`. + +--- + +#### `cmp` + + +``` +.#include + +namespace boost +{ + namespace qvm + { + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + bool cmp( A const & a, B const & b, Cmp pred ); + +} } +``` + + +Returns: + +Similar to [`operator==`](#vec_eq), except that the individual elements of `a` and `b` are passed to the binary predicate `pred` for comparison. + +--- + +#### `mag_sqr` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + template + typename vec\_traits::scalar\_type + mag\_sqr( A const & a ); + +} } +``` + + +Returns: + +The squared magnitude of the vector `a`. + +--- + +#### `mag` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + template + typename vec\_traits::scalar\_type + mag( A const & a ); + +} } +``` + + +Returns: + +The magnitude of the vector `a`. + +--- + +#### `normalized` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + template + typename deduce\_vec::type + normalized( A const & a ); + +} } +``` + + +Effects: + +As if: + + +``` +typename deduce\_vec::type tmp; +assign(tmp,a); +normalize(tmp); +return tmp; +``` + + + +| | | +| --- | --- | +| | +The [`deduce_vec`](#deduce_vec) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `normalize` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + template + void normalize( A & a ); + +} } +``` + + +Effects: + +Normalizes `a`. + + + +Ensures: + +`mag(a)==[scalar\_traits](#scalar_traits)::scalar\_type](#vec_traits)>::value(1)`. + + +Throws: + +If the magnitude of `a` is zero, throws [`zero_magnitude_error`](#zero_magnitude_error). + +--- + +#### `dot` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==vec\_traits::dim + template + typename deduce\_scalar::type + dot( A const & a, B const & b ); + +} } +``` + + +Returns: + +The dot product of the vectors `a` and `b`. + + +| | | +| --- | --- | +| | +The [`deduce_scalar`](#deduce_scalar) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `cross` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==3 && vec\_traits::dim==3 + template + typename deduce\_vec2::type + cross( A const & a, B const & b ); + + //Only enabled if: + // is\_vec::value && is\_vec::value && + // vec\_traits::dim==2 && vec\_traits::dim==2 + template + typename deduce\_scalar< + typename vec\_traits::scalar\_type, + typename vec\_traits::scalar\_type>::type + cross( A const & a, B const & b ); + +} } +``` + + +Returns: + +The cross product of the vectors `a` and `b`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) (and [`deduce_scalar`](#deduce_scalar)) templates can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `zero_vec` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- zero\_vec(); + +} } +``` + + +Returns: + +A read-only vector of unspecified type with [`scalar_type`](#vec_traits) `T` and size `S`, with all elements equal to [`scalar_traits::value(0)`](#scalar_traits). + +--- + +#### `set_zero` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value + template + void set\_zero( A & a ); + +} } +``` + + +Effects: + +As if: + + +``` +assign(a, + zero\_vec< + typename vec\_traits::scalar\_type, + vec\_traits::dim>()); +``` + + +--- + +#### `scalar_cast` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return\_type- scalar\_cast( A const & a ); + +} } +``` + + +Returns: + +A read-only [view proxy](#view_proxy) of `a` that looks like a vector of the same dimensions as `a`, but with [`scalar_type`](#vec_traits) `Scalar` and elements constructed from the corresponding elements of `a`. + +--- + +#### `vref` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return-type- vref( A & a ); + +} } +``` + + +Returns: + +An identity [view proxy](#view_proxy) of `a`; that is, it simply accesses the elements of `a`. + + +| | | +| --- | --- | +| | `vref` allows calling QVM operations when `a` is of built-in type, for example a plain old C array. + | + + +--- + + +### Matrix Operations +#### `assign` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + A & assign( A & a, B const & b ); + +} } +``` + + +Effects: + +Copies all elements of the matrix `b` to the matrix `a`. +Returns: + +`a`. + +--- + +#### `convert_to` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + R convert\_to( A const & a ); + +} } +``` + + +Requires: + +`R` must be copyable. + + + +Effects: + +As if: `R r; [assign](#mat_assign)(r,a); return r;` + + +--- + +#### `operator-=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + A & operator-=( A & a, B const & b ); + +} } +``` + + +Effects: + +Subtracts the elements of `b` from the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator-` (unary) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + typename deduce\_mat::type + operator-( A const & a ); + +} } +``` + + +Returns: + +A matrix of the negated elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_mat`](#deduce_mat) template can be specialized to deduce the desired return type from the type `A`. + | + + +--- + +#### `operator-` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator-( A const & a, B const & b ); + +} } +``` + + +Returns: + +A matrix of the same size as `a` and `b`, with elements the elements of `b` subtracted from the corresponding elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_mat2`](#deduce_mat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator+=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + A & operator+=( A & a, B const & b ); + +} } +``` + + +Effects: + +Adds the elements of `b` to the corresponding elements of `a`. +Returns: + +`a`. + +--- + +#### `operator+` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator+( A const & a, B const & b ); + +} } +``` + + +Returns: + +A matrix of the same size as `a` and `b`, with elements the elements of `b` added to the corresponding elements of `a`. + + +| | | +| --- | --- | +| | +The [`deduce_mat2`](#deduce_mat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator/=` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value && is\_scalar::value + template + A & operator/=( A & a, B b ); + +} } +``` + + +Effects: + +This operation divides a matrix by a scalar. +Returns: + +`a`. + +--- + +#### `operator/` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value && is\_scalar::value + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator/( A const & a, B b ); + +} } +``` + + +Returns: + +A matrix that is the result of dividing the matrix `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_mat2`](#deduce_mat2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator*=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::cols && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + A & operator\*=( A & a, B const & b ); + +} } +``` + + +Effects: + +As if: + + +``` +A tmp(a); +a = tmp \* b; +return a; +``` + + +--- + +#### `operator*=` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value && is\_scalar::value + template + A & operator\*=( A & a, B b ); + +} } +``` + + +Effects: + +This operation multiplies the matrix `a` matrix by the scalar `b`. +Returns: + +`a`. + +--- + +#### `operator*` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::cols==mat\_traits::rows + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator\*( A const & a, B const & b ); + +} } +``` + + +Returns: + +The result of [multiplying](https://en.wikipedia.org/wiki/Matrix_multiplication) the matrices `a` and `b`. + + +| | | +| --- | --- | +| | +The [`deduce_mat2`](#deduce_mat2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `operator*` (scalar) +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value && is\_scalar::value + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator\*( A const & a, B b ); + + //Only enabled if: is\_scalar::value && is\_mat::value + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + operator\*( B b, A const & a ); + +} } +``` + + +Returns: + +A matrix that is the result of multiplying the matrix `a` by the scalar `b`. + + +| | | +| --- | --- | +| | +The [`deduce_mat2`](#deduce_mat2) template can be specialized to deduce the desired return type from the types `A` and `B`. + | + + +--- + +#### `operator==` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + bool operator==( A const & a, B const & b ); + +} } +``` + + +Returns: + +`true` if each element of `a` compares equal to its corresponding element of `b`, `false` otherwise. + +--- + +#### `operator!=` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + bool operator!=( A const & a, B const & b ); + +} } +``` + + +Returns: + +`!( a [==](#mat_eq) b )`. + +--- + +#### `cmp` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_mat::value && + // mat\_traits::rows==mat\_traits::rows && + // mat\_traits::cols==mat\_traits::cols + template + bool cmp( A const & a, B const & b, Cmp pred ); + +} } +``` + + +Returns: + +Similar to [`operator==`](#mat_eq), except that the individual elements of `a` and `b` are passed to the binary predicate `pred` for comparison. + +--- + +#### `inverse` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_scalar::value + // mat\_traits::rows==mat\_traits::cols + + template + typename deduce\_mat2::rows,mat\_traits::cols>::type + inverse( A const & a, B det ); + + template + typename deduce\_mat::type + inverse( A const & a ); + +} } +``` + + +Preconditions: + +`det!=0` +Returns: + +Both overloads compute the inverse of `a`. The first overload takes the pre-computed determinant of `a`. +Throws: + +The second overload computes the determinant automatically and throws [`zero_determinant_error`](#zero_determinant_error) if the computed determinant is zero. + + +| | | +| --- | --- | +| | +The [`deduce_mat`](#deduce_mat) (and [`deduce_mat2`](#deduce_mat2)) templates can be specialized to deduce the desired return type from the type `A` (and `B`). + | + + +--- + +#### `zero_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- zero\_mat(); + + template + -unspecified-return-type- zero\_mat(); + +} } +``` + + +Returns: + +A read-only matrix of unspecified type with [`scalar_type`](#mat_traits) `T`, `R` rows and `C` columns (or `D` rows and `D` columns), with all elements equal to [`scalar_traits::value(0)`](#scalar_traits). + +--- + +#### `set_zero` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value + template + void set\_zero( A & a ); + +} } +``` + + +Effects: + +As if: + + +``` +assign(a, + zero\_mat< + typename mat\_traits::scalar\_type, + mat\_traits::rows, + mat\_traits::cols>()); +``` + + +--- + +#### `identity_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- identity\_mat(); + +} } +``` + + +Returns: + +An identity matrix of size `D` x `D` and scalar type `S`. + +--- + +#### `set_identity` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && + // mat\_traits::cols==mat\_traits::rows + template + void set\_identity( A & a ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + identity\_mat< + typename mat\_traits::scalar\_type, + mat\_traits::rows, + mat\_traits::cols>()); +``` + + +--- + +#### `rot_mat` / Euler angles +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_vec::value && vec\_traits::dim==3 + template + -unspecified-return-type- + rot\_mat( A const & axis, Angle angle ); + + template + -unspecified-return-type- + rot\_mat\_xzy( Angle x1, Angle z2, Angle y3 ); + + template + -unspecified-return-type- + rot\_mat\_xyz( Angle x1, Angle y2, Angle z3 ); + + template + -unspecified-return-type- + rot\_mat\_yxz( Angle y1, Angle x2, Angle z3 ); + + template + -unspecified-return-type- + rot\_mat\_yzx( Angle y1, Angle z2, Angle x3 ); + + template + -unspecified-return-type- + rot\_mat\_zyx( Angle z1, Angle y2, Angle x3 ); + + template + -unspecified-return-type- + rot\_mat\_zxy( Angle z1, Angle x2, Angle y3 ); + + template + -unspecified-return-type- + rot\_mat\_xzx( Angle x1, Angle z2, Angle x3 ); + + template + -unspecified-return-type- + rot\_mat\_xyx( Angle x1, Angle y2, Angle x3 ); + + template + -unspecified-return-type- + rot\_mat\_yxy( Angle y1, Angle x2, Angle y3 ); + + template + -unspecified-return-type- + rot\_mat\_yzy( Angle y1, Angle z2, Angle y3 ); + + template + -unspecified-return-type- + rot\_mat\_zyz( Angle z1, Angle y2, Angle z3 ); + + template + -unspecified-return-type- + rot\_mat\_zxz( Angle z1, Angle y2, Angle z3 ); + +} } +``` + + +Returns: + +A matrix of unspecified type, of `Dim` rows and `Dim` columns parameter, which performs a rotation around the `axis` at `angle` radians, or Tait–Bryan angles (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z), or proper Euler angles (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x, y-x-y). See [Euler angles](https://en.wikipedia.org/wiki/Euler_angles). +Throws: + +In case the axis vector has zero magnitude, throws [`zero_magnitude_error`](#zero_magnitude_error). + + +| | | +| --- | --- | +| | +These functions are not view proxies; they return a temp object. + | + + +--- + +#### `set_rot` / Euler angles +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols && + // is\_vec::value && vec\_traits::dim==3 + template + void set\_rot( A & a, B const & axis, typename vec\_traits::scalar\_type angle ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_xzy( A & a, Angle x1, Angle z2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_xyz( A & a, Angle x1, Angle y2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_yxz( A & a, Angle y1, Angle x2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_yzx( A & a, Angle y1, Angle z2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_zyx( A & a, Angle z1, Angle y2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_zxy( A & a, Angle z1, Angle x2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_xzx( A & a, Angle x1, Angle z2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_xyx( A & a, Angle x1, Angle y2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_yxy( A & a, Angle y1, Angle x2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_yzy( A & a, Angle y1, Angle z2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_zyz( A & a, Angle z1, Angle y2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_zxz( A & a, Angle z1, Angle x2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rot\_xzy( A & a, Angle x1, Angle z2, Angle y3 ); + +} } +``` + + +Effects: + +Assigns the return value of the corresponding [`rot_mat`](#rot_mat) function to `a`. + +--- + +#### `rotate` / Euler angles +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols && + // is\_vec::value && vec\_traits::dim==3 + template + void rotate( A & a, B const & axis, typename mat\_traits::scalar\_type angle ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_xzy( A & a, Angle x1, Angle z2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_xyz( A & a, Angle x1, Angle y2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_yxz( A & a, Angle y1, Angle x2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_yzx( A & a, Angle y1, Angle z2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_zyx( A & a, Angle z1, Angle y2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_zxy( A & a, Angle z1, Angle x2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_xzx( A & a, Angle x1, Angle z2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_xyx( A & a, Angle x1, Angle y2, Angle x3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_yxy( A & a, Angle y1, Angle x2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_yzy( A & a, Angle y1, Angle z2, Angle y3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_zyz( A & a, Angle z1, Angle y2, Angle z3 ); + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_zxz( A & a, Angle z1, Angle x2, Angle z3 ); + +} } +``` + + +Effects: + +Multiplies the matrix `a` in-place by the return value of the corresponding [`rot_mat`](#rot_mat) function. + +--- + +#### `rotx_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- rotx\_mat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) matrix of unspecified type, of `Dim` rows and `Dim` columns and scalar type `Angle`, which performs a rotation around the `X` axis at `angle` radians. + +--- + +#### `set_rotx` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rotx( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + rotx\_mat::rows>(angle)); +``` + + +--- + +#### `rotate_x` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_x( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a [\*=](#mat_mul_eq) [rotx\_mat](#rotx_mat)<[mat\_traits::rows](#mat_traits)>(angle)`. + +--- + +#### `roty_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- roty\_mat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) matrix of unspecified type, of `Dim` rows and `Dim` columns and scalar type `Angle`, which performs a rotation around the `Y` axis at `angle` radians. + +--- + +#### `set_roty` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_roty( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + roty\_mat::rows>(angle)); +``` + + +--- + +#### `rotate_y` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_y( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a [\*=](#mat_mul_eq) [roty\_mat](#roty_mat)<[mat\_traits::rows](#mat_traits)>(angle)`. + +--- + +#### `rotz_mat` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- rotz\_mat( Angle const & angle ); + +} } +``` + + +Returns: + +A [view proxy](#view_proxy) matrix of unspecified type, of `Dim` rows and `Dim` columns and scalar type `Angle`, which performs a rotation around the `Z` axis at `angle` radians. + +--- + +#### `set_rotz` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void set\_rotz( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: + + +``` +assign( + a, + rotz\_mat::rows>(angle)); +``` + + +--- + +#### `rotate_z` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows>=3 && + // mat\_traits::rows==mat\_traits::cols + template + void rotate\_z( A & a, typename mat\_traits::scalar\_type angle ); + +} } +``` + + +Effects: + +As if: `a [\*=](#mat_mul_eq) [rotz\_mat](#rotz_mat)<[mat\_traits::rows](#mat_traits)>(angle)`. + +--- + +#### `determinant` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && mat\_traits::rows==mat\_traits::cols + template + mat\_traits::scalar\_type + determinant( A const & a ); + +} } +``` + +This function computes the [determinant](https://en.wikipedia.org/wiki/Determinant) of the square matrix `a`. + + +--- + +#### `perspective_lh` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- + perspective\_lh( T fov\_y, T aspect, T zn, T zf ); + +} } +``` + + +Returns: + +A 4x4 projection matrix of unspecified type of the following form: + + + +| `xs` | 0 | 0 | 0 | +| 0 | `ys` | 0 | 0 | +| 0 | 0 | `zf`/(`zf`-`zn`) | -`zn`\*`zf`/(`zf`-`zn`) | +| 0 | 0 | 1 | 0 | +where `ys` = cot(`fov_y`/2) and `xs` = `ys`/`aspect`. + + +--- + +#### `perspective_rh` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- + perspective\_rh( T fov\_y, T aspect, T zn, T zf ); + +} } +``` + + +Returns: + +A 4x4 projection matrix of unspecified type of the following form: + + + +| `xs` | 0 | 0 | 0 | +| 0 | `ys` | 0 | 0 | +| 0 | 0 | `zf`/(`zn`-`zf`) | `zn`\*`zf`/(`zn`-`zf`) | +| 0 | 0 | -1 | 0 | +where `ys` = cot(`fov_y`/2), and `xs` = `ys`/`aspect`. + + +--- + +#### `scalar_cast` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + -unspecified-return\_type- scalar\_cast( A const & a ); + +} } +``` + + +Returns: + +A read-only [view proxy](#view_proxy) of `a` that looks like a matrix of the same dimensions as `a`, but with [`scalar_type`](#mat_traits) `Scalar` and elements constructed from the corresponding elements of `a`. + +--- + +#### `mref` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + -unspecified-return-type- mref( A & a ); + +} } +``` + + +Returns: + +An identity view proxy of `a`; that is, it simply accesses the elements of `a`. + + +| | | +| --- | --- | +| | `mref` allows calling QVM operations when `a` is of built-in type, for example a plain old C array. + | + + +--- + + +### Quaternion-Vector Operations +#### `operator*` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_quat::value && is\_vec::value && + // is\_vec::value && vec\_traits::dim==3 + template + typename deduce\_vec2::rows>::type + operator\*( A const & a, B const & b ); + +} } +``` + + +Returns: + +The result of transforming the vector `b` by the quaternion `a`. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + + +### Matrix-Vector Operations +#### `operator*` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_vec::value && + // mat\_traits::cols==vec\_traits::dim + template + typename deduce\_vec2::rows>::type + operator\*( A const & a, B const & b ); + +} } +``` + + +Returns: + +The result of multiplying the matrix `a` and the vector `b`, where `b` is interpreted as a matrix-column. The resulting matrix-row is returned as a vector type. + + +| | | +| --- | --- | +| | +The [`deduce_vec2`](#deduce_vec2) template can be specialized to deduce the desired return type, given the types `A` and `B`. + | + + +--- + +#### `transform_vector` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_vec::value && + // mat\_traits::rows==4 && mat\_traits::cols==4 && + // vec\_traits::dim==3 + template + deduce\_vec2 >::type + transform\_vector( A const & a, B const & b ); + +} } +``` + + +Effects: + +As if: `return a [\*](#mat_vec_mul) [XYZ0](#swizzling)(b)`. + +--- + +#### `transform_point` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && is\_vec::value && + // mat\_traits::rows==4 && mat\_traits::cols==4 && + // vec\_traits::dim==3 + template + deduce\_vec2 >::type + transform\_point( A const & a, B const & b ); + +} } +``` + + +Effects: + +As if: `return a [\*](#mat_vec_mul) [XYZ1](#swizzling)(b)`. + +--- + + +### Matrix-to-Matrix View Proxies +#### `del_row` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- del\_row(); + +} } +``` + +The expression `del_row(m)` returns an lvalue [view proxy](#view_proxy) that looks like the matrix `m` with row `R` deleted. + + +--- + +#### `del_col` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- del\_col(); + +} } +``` + +The expression `del_col(m)` returns an lvalue [view proxy](#view_proxy) that looks like the matrix `m` with column `C` deleted. + + +--- + +#### `del_row_col` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- del\_row\_col(); + +} } +``` + +The expression `del_row_col(m)` returns an lvalue [view proxy](#view_proxy) that looks like the matrix `m` with row `R` and column `C` deleted. + + +--- + +#### `neg_row` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- neg\_row(); + +} } +``` + +The expression `neg_row(m)` returns a read-only [view proxy](#view_proxy) that looks like the matrix `m` with row `R` negated. + + +--- + +#### `neg_col` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- neg\_col(); + +} } +``` + + + +``` +The expression `neg\_col(m)` returns a read-only <> that looks like the matrix `m` with column `C` negated. +``` + + +--- + +#### `swap_rows` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- swap\_rows(); + +} } +``` + +The expression `swap_rows(m)` returns an lvalue [view proxy](#view_proxy) that looks like the matrix `m` with rows `R1` and `R2` swapped. + + +--- + +#### `swap_cols` +#include + + +``` +namespace boost { namespace qvm { + + template + -unspecified-return-type- swap\_cols(); + +} } +``` + +The expression `swap_cols(m)` returns an lvalue [view proxy](#view_proxy) that looks like the matrix `m` with columns `C1` and `C2` swapped. + + +--- + +#### `transposed` +#include + + +``` +namespace boost { namespace qvm { + + -unspecified-return-type- transposed(); + +} } +``` + +The expression `transposed(m)` returns an lvalue [view proxy](#view_proxy) that transposes the matrix `m`. + + +--- + + +### Vector-to-Matrix View Proxies +#### `col_mat` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return-type- col\_mat( A & a ); + +} } +``` + +The expression `col_mat(v)` returns an lvalue [view proxy](#view_proxy) that accesses the vector `v` as a matrix-column. + + +--- + +#### `row_mat` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return-type- row\_mat( A & a ); + +} } +``` + +The expression `row_mat(v)` returns an lvalue [view proxy](#view_proxy) that accesses the vector `v` as a matrix-row. + + +--- + +#### `translation_mat` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return-type- translation\_mat( A & a ); + +} } +``` + +The expression `translation_mat(v)` returns an lvalue [view proxy](#view_proxy) that accesses the vector `v` as translation matrix of size 1 + [`vec_traits::dim`](#vec_traits). + + +--- + +#### `diag_mat` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_vec::value + template + -unspecified-return-type- diag\_mat( A & a ); + +} } +``` + +The expression `diag_mat(v)` returns an lvalue [view proxy](#view_proxy) that accesses the vector `v` as a square matrix of the same dimensions in which the elements of `v` appear as the main diagonal and all other elements are zero. + + + +| | | +| --- | --- | +| | +If `v` is a 3D vector, the expression `diag_mat(XYZ1(v))` can be used as a scaling 4D matrix. + | + + +--- + + +### Matrix-to-Vector View Proxies +#### `col` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + -unspecified-return-type- col( A & a ); + +} } +``` + +The expression `col(m)` returns an lvalue [view proxy](#view_proxy) that accesses column `C` of the matrix `m` as a vector. + + +--- + +#### `row` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + -unspecified-return-type- row( A & a ); + +} } +``` + +The expression `row(m)` returns an lvalue [view proxy](#view_proxy) that accesses row `R` of the matrix `m` as a vector. + + +--- + +#### `diag` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: is\_mat::value + template + -unspecified-return-type- diag( A & a ); + +} } +``` + +The expression `diag(m)` returns an lvalue [view proxy](#view_proxy) that accesses the main diagonal of the matrix `m` as a vector. + + +--- + +#### `translation` +#include + + +``` +namespace boost { namespace qvm { + + //Only enabled if: + // is\_mat::value && + // mat\_traits::rows==mat\_traits::cols && mat\_traits::rows>=3 + template + -unspecified-return-type- translation( A & a ); + +} } +``` + +The expression `translation(m)` returns an lvalue [view proxy](#view_proxy) that accesses the translation component of the square matrix `m`, which is a vector of size `D`-1, where `D` is the size of `m`. + + +--- + + +### Exceptions +#### `error` +#include + + +``` +namespace boost { namespace qvm { + + struct error: virtual boost::exception, virtual std::exception { }; + +} } +``` + +This is the base for all exceptions thorwn by QVM. + + +--- + +#### `zero_magnitude_error` +#include + + +``` +namespace boost { namespace qvm { + + struct zero\_magnitude\_error: virtual error { }; + +} } +``` + +This exception indicates that an operation requires a vector or a quaternion with non-zero magnitude, but the computed magnitude is zero. + + +--- + +#### `zero_determinant_error` +#include + + +``` +namespace boost { namespace qvm { + + struct zero\_determinant\_error: virtual error { }; + +} } +``` + +This exception indicates that an operation requires a matrix with non-zero determinant, but the computed determinant is zero. + + +--- + + +### Macros and Configuration: BOOST\_QVM\_ +#### `INLINE` +##### `BOOST_QVM_INLINE` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_INLINE + #define BOOST\_QVM\_INLINE inline + #endif + +} } +``` + +This macro is not used directly by QVM, except as the default value of other macros from ``. A user-defined `BOOST_QVM_INLINE` should expand to a value that is valid substitution of the `inline` keyword in function definitions. + + +--- + + +#### `FORCE_INLINE` +##### `BOOST_QVM_FORCE_INLINE` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_FORCE\_INLINE + #define BOOST\_QVM\_FORCE\_INLINE /\*platform-specific\*/ + #endif + +} } +``` + +This macro is not used directly by QVM, except as the default value of other macros from ``. A user-defined `BOOST_QVM_FORCE_INLINE` should expand to a value that is valid substitution of the `inline` keyword in function definitions, to indicate that the compiler must inline the function. Of course, actual inlining may or may not occur. + + +--- + + +#### `INLINE_TRIVIAL` +##### `BOOST_QVM_INLINE_TRIVIAL` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_INLINE\_TRIVIAL + #define BOOST\_QVM\_INLINE\_TRIVIAL BOOST\_QVM\_FORCE\_INLINE + #endif + +} } +``` + +QVM uses `BOOST_QVM_INLINE_TRIVIAL` in definitions of functions that are not critical for the overall performance of the library but are extremely simple (such as one-liners) and therefore should always be inlined. + + +--- + + +#### `INLINE_CRITICAL` +##### `BOOST_QVM_INLINE_CRITICAL` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_INLINE\_CRITICAL + #define BOOST\_QVM\_INLINE\_CRITICAL BOOST\_QVM\_FORCE\_INLINE + #endif + +} } +``` + +QVM uses `BOOST_QVM_INLINE_CRITICAL` in definitions of functions that are critical for the overall performance of the library, such as functions that access individual vector and matrix elements. + + +--- + + +#### `INLINE_OPERATIONS` +##### `BOOST_QVM_INLINE_OPERATIONS` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_INLINE\_OPERATIONS + #define BOOST\_QVM\_INLINE\_OPERATIONS BOOST\_QVM\_INLINE + #endif + +} } +``` + +QVM uses `BOOST_QVM_INLINE_OPERATIONS` in definitions of functions that implement various high-level operations, such as matrix multiplication, computing the magnitude of a vector, etc. + + +--- + + +#### `INLINE_RECURSION` +##### `BOOST_QVM_INLINE_RECURSION` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_INLINE\_RECURSION + #define BOOST\_QVM\_INLINE\_RECURSION BOOST\_QVM\_INLINE\_OPERATIONS + #endif + +} } +``` + +QVM uses `BOOST_QVM_INLINE_RECURSION` in definitions of recursive functions that are not critical for the overall performance of the library (definitions of all critical functions, including critical recursive functions, use [`BOOST_QVM_INLINE_CRITICAL`](#BOOST_QVM_INLINE_CRITICAL)). + + +--- + + +#### `ASSERT` +##### `BOOST_QVM_ASSERT` +#include + + +``` +namespace boost { namespace qvm { + +#ifndef BOOST\_QVM\_ASSERT +#include +#define BOOST\_QVM\_ASSERT BOOST\_ASSERT +#endif + +} } +``` + +This is the macro QVM uses to assert on precondition violations and logic errors. A user-defined `BOOST_QVM_ASSERT` should have the semantics of the standard `assert`. + + +--- + + +#### `STATIC_ASSERT` +##### `BOOST_QVM_STATIC_ASSERT` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_STATIC\_ASSERT + #include + #define BOOST\_QVM\_STATIC\_ASSERT BOOST\_STATIC\_ASSERT + #endif + +} } +``` + +All static assertions in QVM use the `BOOST_QVM_STATIC_ASSERT` macro. + + +--- + + +#### `THROW_EXCEPTION` +##### `BOOST_QVM_THROW_EXCEPTION` +#include + + +``` +namespace boost { namespace qvm { + + #ifndef BOOST\_QVM\_THROW\_EXCEPTION + #include + #define BOOST\_QVM\_THROW\_EXCEPTION BOOST\_THROW\_EXCEPTION + #endif + +} } +``` + +This macro is used whenever QVM throws an exception. Users who override the standard `BOOST_QVM_THROW_EXCEPTION` behavior must ensure that when invoked, the substituted implementation does not return control to the caller. Below is a list of all QVM functions that invoke `BOOST_QVM_THROW_EXCEPTION`: + +* Quaternion operations: + + + [`inverse`](#quat_inverse) + + [`rot_quat`](#rot_quat) + + [`normalize`](#quat_normalize) + + [`normalized`](#quat_normalized) +* Vector operations: + + + [`normalize`](#vec_normalize) + + [`normalized`](#vec_normalized) +* Matrix operations: + + + [`inverse`](#mat_inverse) + + [`rot_mat`](#rot_mat) + + + +Design Rationale +---------------- + +C++ is ideal for 3D graphics and other domains that require 3D transformations: define vector and matrix types and then overload the appropriate operators to implement the standard algebraic operations. Because this is relatively straight-forward, there are many libraries that do this, each providing custom vector and matrix types, and then defining the same operations (e.g. matrix multiply) for these types. + +Often these libraries are part of a higher level system. For example, video game programmers typically use one set of vector/matrix types with the rendering engine, and another with the physics simulation engine. + +QVM proides interoperability between all these different types and APIs by decoupling the standard algebraic functions from the types they operate on — without compromising type safety. The operations work on any type for which proper traits have been specialized. Using QVM, there is no need to translate between the different quaternion, vector or matrix types; they can be mixed in the same expression safely and efficiently. + +This design enables QVM to generate types and adaptors at compile time, compatible with any other QVM or user-defined type. For example, transposing a matrix needs not store the result: rather than modifying its argument or returning a new object, it simply binds the original matrix object through a generated type which remaps element access on the fly. + +In addition, QVM can be helpful in selectively optimizing individual types or operations for maximum performance where that matters. For example, users can overload a specific operation for specific types, or define highly optimized, possibly platform-specific or for some reason cumbersome to use types, then mix and match them with more user-friendly types in parts of the program where performance isn’t critical. + + + +Code Generator +-------------- + +While QVM defines generic functions that operate on matrix and vector types of arbitrary static dimensions, it also provides a code generator that can be used to create compatible header files that define much simpler specializations of these functions for specific dimensions. This is useful during debugging since the generated code is much easier to read than the template metaprogramming-heavy generic implementations. It is also potentially friendlier to the optimizer. + +The code generator is a command-line utility program. Its source code can be found in the `boost/libs/qvm/gen` directory. It was used to generate the following headers that ship with QVM: + +* 2D, 3D and 4D matrix operations: + + + `boost/qvm/gen/mat_operations2.hpp` (matrices of size 2x2, 2x1 and 1x2, included by `boost/qvm/mat_operations2.hpp`) + + `boost/qvm/gen/mat_operations3.hpp` (matrices of size 3x3, 3x1 and 1x3, included by `boost/qvm/mat_operations3.hpp`) + + `boost/qvm/gen/mat_operations4.hpp` (matrices of size 4x4, 4x1 and 1x4, included by `boost/qvm/mat_operations4.hpp`) +* 2D, 3D and 4D vector operations: + + + `boost/qvm/gen/v2.hpp` (included by `boost/qvm/vec_operations2.hpp`) + + `boost/qvm/gen/v3.hpp` (included by `boost/qvm/vec_operations3.hpp`) + + `boost/qvm/gen/v4.hpp` (included by `boost/qvm/vec_operations4.hpp`) +* 2D, 3D and 4D vector-matrix operations: + + + `boost/qvm/gen/vm2.hpp` (included by `boost/qvm/vec_mat_operations2.hpp`) + + `boost/qvm/gen/vm3.hpp` (included by `boost/qvm/vec_mat_operations3.hpp`) + + `boost/qvm/gen/vm4.hpp` (included by `boost/qvm/vec_mat_operations4.hpp`) +* 2D, 3D and 4D vector swizzling operations: + + + `boost/qvm/gen/sw2.hpp` (included by `boost/qvm/swizzle2.hpp`) + + `boost/qvm/gen/sw3.hpp` (included by `boost/qvm/swizzle3.hpp`) + + `boost/qvm/gen/sw4.hpp` (included by `boost/qvm/swizzle4.hpp`) + +Any such generated headers must be included before the corresponding generic header file is included. For example, if one creates a header `boost/qvm/gen/m5.hpp`, it must be included before `boost/qvm/mat_operations.hpp` in included. However, the generic headers (`boost/qvm/mat_operations.hpp`, `boost/qvm/vec_operations.hpp`, `boost/qvm/vec_mat_operations.hpp` and `boost/qvm/swizzle.hpp`) already include the generated headers from the list above, so the generated headers don’t need to be included manually. + + + +| | | +| --- | --- | +| | +headers under `boost/qvm/gen` are not part of the public interface of QVM. For example, `boost/qvm/gen/mat_operations2.hpp` should not be included directly; `#include ` instead. + | + + + +Known Quirks and Issues +----------------------- + +### Capturing View Proxies with `auto` +By design, [view proxies](#view_proxy) must not return temporary objects. They return reference to an argument they take by (`const`) reference, cast to reference of unspecified type that is not copyable. Because of this, the return value of a view proxy can not be captured by value with `auto`: + + + +``` +auto tr = transposed(m); //Error: the return type of transposed can not be copied. +``` + +The correct use of auto with view proxies is: + + + +``` +auto & tr = transposed(m); +``` + + + +| | | +| --- | --- | +| | +Many view proxies are not read-only, that is, they’re lvalues; changes made on the view proxy operate on the original object. This is another reason why they can not be captured by value with `auto`. + | + + +--- + +### Binding QVM Overloads From an Unrelated Namespace +The operator overloads in namespace `boost::qvm` are designed to work with user-defined types. Typically it is sufficient to make these operators available in the namespace where the operator is used, by `using namespace boost::qvm`. A problem arises if the scope that uses the operator is not controlled by the user. For example: + + + +``` +namespace ns1 { + + struct float2 { float x, y; }; + +} + +namespace ns2 { + + using namespace boost::qvm; + + void f() { + ns1::float2 a, b; + a==b; //OK + ns1::float2 arr1[2], arr2[2]; + std::equal(arr1,arr1+2,arr2); //Error: operator== is inaccessible from namespace std + } + +} +``` + +In the `std::equal` expression above, even though `boost::qvm::operator==` is made visible in namespace `ns2` by `using namespace boost::qvm`, the call originates from namespace `std`. In this case the compiler can’t bind `boost::qvm::operator==` because only namespace `ns1` is visible through ADL, and it does not contain a suitable declaration. The solution is to declare `operator==` in namespace ns1, which can be done like this: + + + +``` +namespace ns1 { + + using boost::qvm::operator==; + +} +``` + + +--- + +### Link Errors When Calling Math Functions with `int` Arguments +QVM does not call standard math functions (e.g. sin, cos, etc.) directly. Instead, it calls function templates declared in `boost/qvm/math.hpp` in namespace `boost::qvm`. This allows the user to specialize these templates for user-defined scalar types. + +QVM itself defines specializations of the math function templates only for `float` and `double`, but it does not provide generic definitions. This is done to protect the user from unintentionally writing code that binds standard math functions that take `double` when passing arguments of lesser types, which would be suboptimal. + +Because of this, a call to e.g. `[rot\_mat](#rot_mat)(axis,1)` will compile successfully but fail to link, since it calls e.g. `boost::qvm::sin`, which is undefined. Because rotations by integer number of radians are rarely needed, in QVM there is no protection against such errors. In such cases the solution is to use `rot_mat(axis,1.0f)` instead. + +Q&A +--- + +1. *What is the motivation behind QVM? Why not just use uBLAS/Eigen/CML/GLM/etc?* + + +The primary domain of QVM is realtime graphics and simulation applications, so it is not a complete linear algebra library. While (naturally) there is some overlap with such libraries, QVM puts the emphasis on 2, 3 and 4 dimensional zero-overhead operations (hence domain-specific features like Swizzling). +2. *How does the `qvm::[vec](#vec)` (or `qvm::[mat](#mat)`, or `qvm::[quat](#quat)`) template compare to vector types from other libraries?* + + +The `qvm::vec` template is not in any way central to the vector operations defined by QVM. The operations are designed to work with any user-defined vector type or with 3rd-party vector types (e.g. `D3DVECTOR`), while the `qvm::vec` template is simply a default return type for expressions that use arguments of different types that would be incompatible outside of QVM. For example, if the [`deduce_mat2`](#deduce_mat2) hasn’t been specialized, calling [`cross`](#cross) with a user-defined type `vec3` and a user-defined type `float3` returns a `qvm::vec`. +3. *Why doesn’t QVM use [] or () to access vector and matrix elements?* + + +Because it’s designed to work with user-defined types, and the C++ standard requires these operators to be members. Of course if a user-defined type defines `operator[]` or `operator()` they are available for use with other QVM functions, but QVM defines its own mechanisms for [accessing quaternion elements](#quat_access), [accessing vector elements](#vec_access) (as well as [swizzling](#swizzling)), and [accessing matrix elements](#mat_access). + + +--- +Documentation rendered by [Asciidoctor](https://asciidoctor.org/) with [these customizations](https://github.com/zajo/asciidoctor_skin). + +© 2008-2020 Emil Dotchevski and Reverge Studios, Inc. + + diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BA_idm35151229096240.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BA_idm35151229096240.html new file mode 100644 index 0000000..1963a3b --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BA_idm35151229096240.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BASE_FROM_MEMBER_MAX_ARITY +copyright: +revised: +--- + + +Macro BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](boost/base_fro_idm35151229100080.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](utility/utilities/binary_integer_literals.html) + +Macro BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY +------------------------------------------- + + +BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY +Synopsis +-------- +``` +// In header: <[boost/utility/base\_from\_member.hpp](utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp "Header ")> + +BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](boost/base_fro_idm35151229100080.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](utility/utilities/binary_integer_literals.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY.html new file mode 100644 index 0000000..9baac23 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY +copyright: +revised: +--- + + +Macro BOOST\_BINARY + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](utility/utilities/binary_integer_literals.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_U.html) + +Macro BOOST\_BINARY +------------------- + + +BOOST\_BINARY +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](utility/utilities/binary_integer_literals.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_U.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_L.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_L.html new file mode 100644 index 0000000..d8d246d --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_L.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_L +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_L + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_U.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_UL.html) + +Macro BOOST\_BINARY\_L +---------------------- + + +BOOST\_BINARY\_L +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_L(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_U.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_UL.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LITERAL_D.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LITERAL_D.html new file mode 100644 index 0000000..42ca003 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LITERAL_D.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_LITERAL_D +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_LITERAL\_D + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_SU_idm35151229112752.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](utility/utilities/call_traits.html) + +Macro BOOST\_BINARY\_LITERAL\_D +------------------------------- + + +BOOST\_BINARY\_LITERAL\_D +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_LITERAL\_D(d, bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_SU_idm35151229112752.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](utility/utilities/call_traits.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LL.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LL.html new file mode 100644 index 0000000..80a0a9c --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LL.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_LL +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_LL + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LU.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_ULL.html) + +Macro BOOST\_BINARY\_LL +----------------------- + + +BOOST\_BINARY\_LL +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_LL(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LU.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_ULL.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LLU.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LLU.html new file mode 100644 index 0000000..d28e9e9 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LLU.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_LLU +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_LLU + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_ULL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_SU_idm35151229114032.html) + +Macro BOOST\_BINARY\_LLU +------------------------ + + +BOOST\_BINARY\_LLU +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_LLU(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_ULL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_SU_idm35151229114032.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LU.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LU.html new file mode 100644 index 0000000..35dd3f4 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_LU.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_LU +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_LU + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_UL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LL.html) + +Macro BOOST\_BINARY\_LU +----------------------- + + +BOOST\_BINARY\_LU +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_LU(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_UL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LL.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_U.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_U.html new file mode 100644 index 0000000..6090d47 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_U.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_U +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_U + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_L.html) + +Macro BOOST\_BINARY\_U +---------------------- + + +BOOST\_BINARY\_U +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_U(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_L.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_UL.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_UL.html new file mode 100644 index 0000000..349c19c --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_UL.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_UL +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_UL + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_L.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LU.html) + +Macro BOOST\_BINARY\_UL +----------------------- + + +BOOST\_BINARY\_UL +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_UL(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_L.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LU.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_ULL.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_ULL.html new file mode 100644 index 0000000..3b5333d --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_BINARY_ULL.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_BINARY_ULL +copyright: +revised: +--- + + +Macro BOOST\_BINARY\_ULL + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LLU.html) + +Macro BOOST\_BINARY\_ULL +------------------------ + + +BOOST\_BINARY\_ULL +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_BINARY\_ULL(bit\_groupings) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LL.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LLU.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229112752.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229112752.html new file mode 100644 index 0000000..5edee04 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229112752.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_SUFFIXED_BINARY_LITERAL_D +copyright: +revised: +--- + + +Macro BOOST\_SUFFIXED\_BINARY\_LITERAL\_D + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_SU_idm35151229114032.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LITERAL_D.html) + +Macro BOOST\_SUFFIXED\_BINARY\_LITERAL\_D +----------------------------------------- + + +BOOST\_SUFFIXED\_BINARY\_LITERAL\_D +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_SUFFIXED\_BINARY\_LITERAL\_D(d, bit\_groupings, suffix) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_SU_idm35151229114032.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_BINARY_LITERAL_D.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229114032.html b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229114032.html new file mode 100644 index 0000000..08c522d --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/BOOST_SU_idm35151229114032.html @@ -0,0 +1,42 @@ +--- +title: Macro BOOST_SUFFIXED_BINARY_LITERAL +copyright: +revised: +--- + + +Macro BOOST\_SUFFIXED\_BINARY\_LITERAL + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LLU.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_SU_idm35151229112752.html) + +Macro BOOST\_SUFFIXED\_BINARY\_LITERAL +-------------------------------------- + + +BOOST\_SUFFIXED\_BINARY\_LITERAL +Synopsis +-------- +``` +// In header: <[boost/utility/binary.hpp](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp "Header ")> + +BOOST\_SUFFIXED\_BINARY\_LITERAL(bit\_groupings, suffix) +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../doc/src/images/prev.png)](BOOST_BINARY_LLU.html)[![Up](../../../../doc/src/images/up.png)](utility/utilities/binary_integer_literals.html#header.boost.utility.binary_hpp)[![Home](../../../../doc/src/images/home.png)](index.html)[![Next](../../../../doc/src/images/next.png)](BOOST_SU_idm35151229112752.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/base_fro_idm35151229100080.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/base_fro_idm35151229100080.html new file mode 100644 index 0000000..c8169f1 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/base_fro_idm35151229100080.html @@ -0,0 +1,62 @@ +--- +title: Class template base_from_member +copyright: +revised: +--- + + +Class template base\_from\_member + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](base_from_member.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../BOOST_BA_idm35151229096240.html) + +Class template base\_from\_member +--------------------------------------------------------- + + +boost::base\_from\_member +Synopsis +-------- +``` +// In header: <[boost/utility/base\_from\_member.hpp](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp "Header ")> + +template +class [base\_from\_member](base_fro_idm35151229100080.html "Class template base_from_member") { +public: + // [construct/copy/destruct](base_fro_idm35151229100080.html#boost.base_fro_idm35151229100080construct-copy-destruct) + explicit [base\_from\_member](base_fro_idm35151229100080.html#idm35151229097392-bb)(MemberType &) noexcept; +}; +``` + + +Description +----------- +### +`base_from_member` + public + construct/copy/destruct + + +1. ``` +explicit base\_from\_member(MemberType & x) noexcept; +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](base_from_member.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../BOOST_BA_idm35151229096240.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/base_from_member.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/base_from_member.html new file mode 100644 index 0000000..74b50ab --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/base_from_member.html @@ -0,0 +1,70 @@ +--- +title: Class template base_from_member +copyright: +revised: +--- + + +Class template base\_from\_member + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/base_from_member.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](base_fro_idm35151229100080.html) + +Class template base\_from\_member +--------------------------------- + + +boost::base\_from\_member +Synopsis +-------- +``` +// In header: <[boost/utility/base\_from\_member.hpp](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp "Header ")> + +template +class [base\_from\_member](base_from_member.html "Class template base_from_member") { +public: + // [construct/copy/destruct](base_from_member.html#boost.base_from_memberconstruct-copy-destruct) + template::type> + explicit [base\_from\_member](base_from_member.html#idm35151229103152-bb)(T &&...) noexcept(noexcept((::new((void \*) 0) MemberType(static\_cast< T && >(x)...))))); +}; +``` + + +Description +----------- +### +`base_from_member` + public + construct/copy/destruct + + +1. ``` +template::type> + explicit base\_from\_member(T &&... x) noexcept(noexcept((::new((void \*) 0) MemberType(static\_cast< T && >(x)...))))); +``` +### Specializations + + +* [Class template base\_from\_member](base_fro_idm35151229100080.html "Class template base_from_member") + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/base_from_member.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/base_from_member.html#header.boost.utility.base_from_member_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](base_fro_idm35151229100080.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/basic_string_view.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/basic_string_view.html new file mode 100644 index 0000000..38d94ed --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/basic_string_view.html @@ -0,0 +1,406 @@ +--- +title: Class template basic_string_view +copyright: +revised: +--- + + +Class template basic\_string\_view + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/string_view.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/string_view.html#header.boost.utility.string_view_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/value_init.html) + +Class template basic\_string\_view +---------------------------------- + + +boost::basic\_string\_view +Synopsis +-------- +``` +// In header: <[boost/utility/string\_view.hpp](../utility/utilities/string_view.html#header.boost.utility.string_view_hpp "Header ")> + +template +class [basic\_string\_view](basic_string_view.html "Class template basic_string_view") { +public: + // types + typedef traits traits\_type; + typedef charT value\_type; + typedef charT \* pointer; + typedef const charT \* const\_pointer; + typedef charT & reference; + typedef const charT & const\_reference; + typedef const\_pointer const\_iterator; + typedef const\_iterator iterator; + typedef std::reverse\_iterator< const\_iterator > const\_reverse\_iterator; + typedef const\_reverse\_iterator reverse\_iterator; + typedef std::size\_t size\_type; + typedef std::ptrdiff\_t difference\_type; + + // [construct/copy/destruct](basic_string_view.html#boost.basic_string_viewconstruct-copy-destruct) + [basic\_string\_view](basic_string_view.html#idm35151228455472-bb)() noexcept; + [basic\_string\_view](basic_string_view.html#idm35151228455088-bb)(const [basic\_string\_view](basic_string_view.html "Class template basic_string_view") &); + template + [basic\_string\_view](basic_string_view.html#idm35151228452272-bb)(const std::basic\_string< charT, traits, Allocator > &) noexcept; + [basic\_string\_view](basic_string_view.html#idm35151228450736-bb)(const charT \*); + [basic\_string\_view](basic_string_view.html#idm35151228449968-bb)(const charT \*, size\_type); + [basic\_string\_view](basic_string_view.html "Class template basic_string_view") & [operator=](basic_string_view.html#idm35151228453936-bb)(const [basic\_string\_view](basic_string_view.html "Class template basic_string_view") &); + + // [public member functions](basic_string_view.html#idm35151228357424-bb) + constexpr const\_iterator [begin](basic_string_view.html#idm35151228357040-bb)() const noexcept; + constexpr const\_iterator [cbegin](basic_string_view.html#idm35151228356272-bb)() const noexcept; + constexpr const\_iterator [end](basic_string_view.html#idm35151228355504-bb)() const noexcept; + constexpr const\_iterator [cend](basic_string_view.html#idm35151228354736-bb)() const noexcept; + const\_reverse\_iterator [rbegin](basic_string_view.html#idm35151228353968-bb)() const noexcept; + const\_reverse\_iterator [crbegin](basic_string_view.html#idm35151228353200-bb)() const noexcept; + const\_reverse\_iterator [rend](basic_string_view.html#idm35151228352432-bb)() const noexcept; + const\_reverse\_iterator [crend](basic_string_view.html#idm35151228351664-bb)() const noexcept; + constexpr size\_type [size](basic_string_view.html#idm35151228350896-bb)() const noexcept; + constexpr size\_type [length](basic_string_view.html#idm35151228350128-bb)() const noexcept; + constexpr size\_type [max\_size](basic_string_view.html#idm35151228349360-bb)() const noexcept; + constexpr bool [empty](basic_string_view.html#idm35151228348592-bb)() const noexcept; + constexpr const\_reference [operator[]](basic_string_view.html#idm35151228347824-bb)(size\_type) const noexcept; + constexpr const\_reference [at](basic_string_view.html#idm35151228346544-bb)(size\_t) const; + constexpr const\_reference [front](basic_string_view.html#idm35151228345264-bb)() const; + constexpr const\_reference [back](basic_string_view.html#idm35151228344496-bb)() const; + constexpr const\_pointer [data](basic_string_view.html#idm35151228343728-bb)() const noexcept; + void [clear](basic_string_view.html#idm35151228342960-bb)() noexcept; + constexpr void [remove\_prefix](basic_string_view.html#idm35151228342192-bb)(size\_type); + constexpr void [remove\_suffix](basic_string_view.html#idm35151228341040-bb)(size\_type); + constexpr void [swap](basic_string_view.html#idm35151228339888-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view") &) noexcept; + template + explicit [operator std::basic\_string< charT, traits, Allocator >](basic_string_view.html#idm35151228338352-bb)() const; + template > + std::basic\_string< charT, traits, Allocator > + [to\_string](basic_string_view.html#idm35151228336816-bb)(const Allocator & = Allocator()) const; + size\_type [copy](basic_string_view.html#idm35151228334384-bb)(charT \*, size\_type, size\_type = 0) const; + constexpr [basic\_string\_view](basic_string_view.html "Class template basic_string_view") [substr](basic_string_view.html#idm35151228331824-bb)(size\_type, size\_type = npos) const; + constexpr int [compare](basic_string_view.html#idm35151228329520-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view")) const noexcept; + constexpr int + [compare](basic_string_view.html#idm35151228393648-bb)(size\_type, size\_type, [basic\_string\_view](basic_string_view.html "Class template basic_string_view")) const noexcept; + constexpr int + [compare](basic_string_view.html#idm35151228391216-bb)(size\_type, size\_type, [basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type, size\_type) const; + constexpr int [compare](basic_string_view.html#idm35151228387760-bb)(const charT \*) const; + constexpr int [compare](basic_string_view.html#idm35151228386480-bb)(size\_type, size\_type, const charT \*) const; + constexpr int [compare](basic_string_view.html#idm35151228384176-bb)(size\_type, size\_type, const charT \*, size\_type) const; + constexpr bool [starts\_with](basic_string_view.html#idm35151228381360-bb)(charT) const noexcept; + constexpr bool [starts\_with](basic_string_view.html#idm35151228380080-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view")) const noexcept; + constexpr bool [ends\_with](basic_string_view.html#idm35151228378672-bb)(charT) const noexcept; + constexpr bool [ends\_with](basic_string_view.html#idm35151228377392-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view")) const noexcept; + constexpr size\_type [find](basic_string_view.html#idm35151228375984-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = 0) const noexcept; + constexpr size\_type [find](basic_string_view.html#idm35151228373808-bb)(charT, size\_type = 0) const noexcept; + constexpr size\_type [find](basic_string_view.html#idm35151228371760-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type [find](basic_string_view.html#idm35151228369456-bb)(const charT \*, size\_type = 0) const noexcept; + constexpr size\_type + [rfind](basic_string_view.html#idm35151228367408-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = npos) const noexcept; + constexpr size\_type [rfind](basic_string_view.html#idm35151228365232-bb)(charT, size\_type = npos) const noexcept; + constexpr size\_type + [rfind](basic_string_view.html#idm35151228363184-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type [rfind](basic_string_view.html#idm35151228426416-bb)(const charT \*, size\_type = npos) const noexcept; + constexpr size\_type + [find\_first\_of](basic_string_view.html#idm35151228424368-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = 0) const noexcept; + constexpr size\_type [find\_first\_of](basic_string_view.html#idm35151228422192-bb)(charT, size\_type = 0) const noexcept; + constexpr size\_type + [find\_first\_of](basic_string_view.html#idm35151228420144-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type + [find\_first\_of](basic_string_view.html#idm35151228417840-bb)(const charT \*, size\_type = 0) const noexcept; + constexpr size\_type + [find\_last\_of](basic_string_view.html#idm35151228415792-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = npos) const noexcept; + constexpr size\_type [find\_last\_of](basic_string_view.html#idm35151228413616-bb)(charT, size\_type = npos) const noexcept; + constexpr size\_type + [find\_last\_of](basic_string_view.html#idm35151228411568-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type + [find\_last\_of](basic_string_view.html#idm35151228409264-bb)(const charT \*, size\_type = npos) const noexcept; + constexpr size\_type + [find\_first\_not\_of](basic_string_view.html#idm35151228407216-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = 0) const noexcept; + constexpr size\_type [find\_first\_not\_of](basic_string_view.html#idm35151228405040-bb)(charT, size\_type = 0) const noexcept; + constexpr size\_type + [find\_first\_not\_of](basic_string_view.html#idm35151228402992-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type + [find\_first\_not\_of](basic_string_view.html#idm35151228400688-bb)(const charT \*, size\_type = 0) const noexcept; + constexpr size\_type + [find\_last\_not\_of](basic_string_view.html#idm35151228398640-bb)([basic\_string\_view](basic_string_view.html "Class template basic_string_view"), size\_type = npos) const noexcept; + constexpr size\_type [find\_last\_not\_of](basic_string_view.html#idm35151228396464-bb)(charT, size\_type = npos) const noexcept; + constexpr size\_type + [find\_last\_not\_of](basic_string_view.html#idm35151228459952-bb)(const charT \*, size\_type, size\_type) const noexcept; + constexpr size\_type + [find\_last\_not\_of](basic_string_view.html#idm35151228457648-bb)(const charT \*, size\_type = npos) const noexcept; + + // [private member functions](basic_string_view.html#idm35151228448688-bb) + template + size\_type [reverse\_distance](basic_string_view.html#idm35151228448304-bb)(r\_iter, r\_iter) const noexcept; + template + Iterator [find\_not\_of](basic_string_view.html#idm35151228445872-bb)(Iterator, Iterator, [basic\_string\_view](basic_string_view.html "Class template basic_string_view")) const noexcept; + + // public data members + static constexpr size\_type npos; +}; +``` + + +Description +----------- +### +`basic_string_view` + public + construct/copy/destruct + + +1. ``` +basic\_string\_view() noexcept; +``` +2. ``` +basic\_string\_view(const [basic\_string\_view](basic_string_view.html "Class template basic_string_view") & rhs); +``` +3. ``` +template + basic\_string\_view(const std::basic\_string< charT, traits, Allocator > & str) noexcept; +``` +4. ``` +basic\_string\_view(const charT \* str); +``` +5. ``` +basic\_string\_view(const charT \* str, size\_type len); +``` +6. ``` +[basic\_string\_view](basic_string_view.html "Class template basic_string_view") & operator=(const [basic\_string\_view](basic_string_view.html "Class template basic_string_view") & rhs); +``` +### +`basic_string_view` public member functions + + +1. ``` +constexpr const\_iterator begin() const noexcept; +``` +2. ``` +constexpr const\_iterator cbegin() const noexcept; +``` +3. ``` +constexpr const\_iterator end() const noexcept; +``` +4. ``` +constexpr const\_iterator cend() const noexcept; +``` +5. ``` +const\_reverse\_iterator rbegin() const noexcept; +``` +6. ``` +const\_reverse\_iterator crbegin() const noexcept; +``` +7. ``` +const\_reverse\_iterator rend() const noexcept; +``` +8. ``` +const\_reverse\_iterator crend() const noexcept; +``` +9. ``` +constexpr size\_type size() const noexcept; +``` +10. ``` +constexpr size\_type length() const noexcept; +``` +11. ``` +constexpr size\_type max\_size() const noexcept; +``` +12. ``` +constexpr bool empty() const noexcept; +``` +13. ``` +constexpr const\_reference operator[](size\_type pos) const noexcept; +``` +14. ``` +constexpr const\_reference at(size\_t pos) const; +``` +15. ``` +constexpr const\_reference front() const; +``` +16. ``` +constexpr const\_reference back() const; +``` +17. ``` +constexpr const\_pointer data() const noexcept; +``` +18. ``` +void clear() noexcept; +``` +19. ``` +constexpr void remove\_prefix(size\_type n); +``` +20. ``` +constexpr void remove\_suffix(size\_type n); +``` +21. ``` +constexpr void swap([basic\_string\_view](basic_string_view.html "Class template basic_string_view") & s) noexcept; +``` +22. ``` +template + explicit operator std::basic\_string< charT, traits, Allocator >() const; +``` +23. ``` +template > + std::basic\_string< charT, traits, Allocator > + to\_string(const Allocator & a = Allocator()) const; +``` +24. ``` +size\_type copy(charT \* s, size\_type n, size\_type pos = 0) const; +``` +25. ``` +constexpr [basic\_string\_view](basic_string_view.html "Class template basic_string_view") substr(size\_type pos, size\_type n = npos) const; +``` +26. ``` +constexpr int compare([basic\_string\_view](basic_string_view.html "Class template basic_string_view") x) const noexcept; +``` +27. ``` +constexpr int +compare(size\_type pos1, size\_type n1, [basic\_string\_view](basic_string_view.html "Class template basic_string_view") x) const noexcept; +``` +28. ``` +constexpr int +compare(size\_type pos1, size\_type n1, [basic\_string\_view](basic_string_view.html "Class template basic_string_view") x, size\_type pos2, + size\_type n2) const; +``` +29. ``` +constexpr int compare(const charT \* x) const; +``` +30. ``` +constexpr int compare(size\_type pos1, size\_type n1, const charT \* x) const; +``` +31. ``` +constexpr int +compare(size\_type pos1, size\_type n1, const charT \* x, size\_type n2) const; +``` +32. ``` +constexpr bool starts\_with(charT c) const noexcept; +``` +33. ``` +constexpr bool starts\_with([basic\_string\_view](basic_string_view.html "Class template basic_string_view") x) const noexcept; +``` +34. ``` +constexpr bool ends\_with(charT c) const noexcept; +``` +35. ``` +constexpr bool ends\_with([basic\_string\_view](basic_string_view.html "Class template basic_string_view") x) const noexcept; +``` +36. ``` +constexpr size\_type +find([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = 0) const noexcept; +``` +37. ``` +constexpr size\_type find(charT c, size\_type pos = 0) const noexcept; +``` +38. ``` +constexpr size\_type +find(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +39. ``` +constexpr size\_type find(const charT \* s, size\_type pos = 0) const noexcept; +``` +40. ``` +constexpr size\_type +rfind([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = npos) const noexcept; +``` +41. ``` +constexpr size\_type rfind(charT c, size\_type pos = npos) const noexcept; +``` +42. ``` +constexpr size\_type +rfind(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +43. ``` +constexpr size\_type +rfind(const charT \* s, size\_type pos = npos) const noexcept; +``` +44. ``` +constexpr size\_type +find\_first\_of([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = 0) const noexcept; +``` +45. ``` +constexpr size\_type find\_first\_of(charT c, size\_type pos = 0) const noexcept; +``` +46. ``` +constexpr size\_type +find\_first\_of(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +47. ``` +constexpr size\_type +find\_first\_of(const charT \* s, size\_type pos = 0) const noexcept; +``` +48. ``` +constexpr size\_type +find\_last\_of([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = npos) const noexcept; +``` +49. ``` +constexpr size\_type find\_last\_of(charT c, size\_type pos = npos) const noexcept; +``` +50. ``` +constexpr size\_type +find\_last\_of(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +51. ``` +constexpr size\_type +find\_last\_of(const charT \* s, size\_type pos = npos) const noexcept; +``` +52. ``` +constexpr size\_type +find\_first\_not\_of([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = 0) const noexcept; +``` +53. ``` +constexpr size\_type +find\_first\_not\_of(charT c, size\_type pos = 0) const noexcept; +``` +54. ``` +constexpr size\_type +find\_first\_not\_of(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +55. ``` +constexpr size\_type +find\_first\_not\_of(const charT \* s, size\_type pos = 0) const noexcept; +``` +56. ``` +constexpr size\_type +find\_last\_not\_of([basic\_string\_view](basic_string_view.html "Class template basic_string_view") s, size\_type pos = npos) const noexcept; +``` +57. ``` +constexpr size\_type +find\_last\_not\_of(charT c, size\_type pos = npos) const noexcept; +``` +58. ``` +constexpr size\_type +find\_last\_not\_of(const charT \* s, size\_type pos, size\_type n) const noexcept; +``` +59. ``` +constexpr size\_type +find\_last\_not\_of(const charT \* s, size\_type pos = npos) const noexcept; +``` +### +`basic_string_view` private member functions + + +1. ``` +template + size\_type reverse\_distance(r\_iter first, r\_iter last) const noexcept; +``` +2. ``` +template + Iterator find\_not\_of(Iterator first, Iterator last, [basic\_string\_view](basic_string_view.html "Class template basic_string_view") s) const noexcept; +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/string_view.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/string_view.html#header.boost.utility.string_view_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/value_init.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228605104.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228605104.html new file mode 100644 index 0000000..5e8b674 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228605104.html @@ -0,0 +1,49 @@ +--- +title: Struct template call_traits +copyright: +revised: +--- + + +Struct template call\_traits + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_tra_idm35151228608944.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/compressed_pair.html) + +Struct template call\_traits +---------------------------------- + + +boost::call\_traits +Synopsis +-------- +``` +// In header: <[boost/detail/call\_traits.hpp](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp "Header ")> + +template +struct [call\_traits](call_tra_idm35151228605104.html "Struct template call_traits") { + // types + typedef const T \* value\_type; + typedef array\_type & reference; + typedef const array\_type & const\_reference; + typedef const T \*const param\_type; +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_tra_idm35151228608944.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/compressed_pair.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228608944.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228608944.html new file mode 100644 index 0000000..bbfb97c --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228608944.html @@ -0,0 +1,49 @@ +--- +title: Struct template call_traits +copyright: +revised: +--- + + +Struct template call\_traits + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_tra_idm35151228613424.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228605104.html) + +Struct template call\_traits +--------------------------------- + + +boost::call\_traits +Synopsis +-------- +``` +// In header: <[boost/detail/call\_traits.hpp](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp "Header ")> + +template +struct [call\_traits](call_tra_idm35151228608944.html "Struct template call_traits") { + // types + typedef T & value\_type; + typedef T & reference; + typedef const T & const\_reference; + typedef T & param\_type; +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_tra_idm35151228613424.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228605104.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228613424.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228613424.html new file mode 100644 index 0000000..e0e181e --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_tra_idm35151228613424.html @@ -0,0 +1,49 @@ +--- +title: Struct template call_traits +copyright: +revised: +--- + + +Struct template call\_traits + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_traits.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228608944.html) + +Struct template call\_traits +---------------------------------------- + + +boost::call\_traits +Synopsis +-------- +``` +// In header: <[boost/detail/call\_traits.hpp](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp "Header ")> + +template +struct [call\_traits](call_tra_idm35151228613424.html "Struct template call_traits") { + // types + typedef const T \* value\_type; + typedef array\_type & reference; + typedef const array\_type & const\_reference; + typedef const T \*const param\_type; +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](call_traits.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228608944.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/call_traits.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_traits.html new file mode 100644 index 0000000..cc97d01 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/call_traits.html @@ -0,0 +1,49 @@ +--- +title: Struct template call_traits +copyright: +revised: +--- + + +Struct template call\_traits + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/call_traits.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228613424.html) + +Struct template call\_traits +---------------------------- + + +boost::call\_traits +Synopsis +-------- +``` +// In header: <[boost/detail/call\_traits.hpp](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp "Header ")> + +template +struct [call\_traits](call_traits.html "Struct template call_traits") { + // types + typedef T value\_type; + typedef T & reference; + typedef const T & const\_reference; + typedef *unspecified* param\_type; +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/call_traits.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/call_traits.html#header.boost.detail.call_traits_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](call_tra_idm35151228613424.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/compress_idm35151228634288.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/compress_idm35151228634288.html new file mode 100644 index 0000000..88ad512 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/compress_idm35151228634288.html @@ -0,0 +1,106 @@ +--- +title: Class template compressed_pair +copyright: +revised: +--- + + +Class template compressed\_pair + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](compressed_pair.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/in_place_factory.html) + +Class template compressed\_pair +------------------------------------- + + +boost::compressed\_pair +Synopsis +-------- +``` +// In header: <[boost/detail/compressed\_pair.hpp](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp "Header ")> + +template +class [compressed\_pair](compress_idm35151228634288.html "Class template compressed_pair") { +public: + // types + typedef T first\_type; + typedef T second\_type; + typedef call\_traits< first\_type >::param\_type first\_param\_type; + typedef call\_traits< second\_type >::param\_type second\_param\_type; + typedef call\_traits< first\_type >::reference first\_reference; + typedef call\_traits< second\_type >::reference second\_reference; + typedef call\_traits< first\_type >::const\_reference first\_const\_reference; + typedef call\_traits< second\_type >::const\_reference second\_const\_reference; + + // [construct/copy/destruct](compress_idm35151228634288.html#boost.compress_idm35151228634288construct-copy-destruct) + [compressed\_pair](compress_idm35151228634288.html#idm35151228688304-bb)(); + [compressed\_pair](compress_idm35151228634288.html#idm35151228688048-bb)(first\_param\_type, second\_param\_type); + explicit [compressed\_pair](compress_idm35151228634288.html#idm35151228686768-bb)(first\_param\_type); + + // [public member functions](compress_idm35151228634288.html#idm35151228627632-bb) + first\_reference [first](compress_idm35151228634288.html#idm35151228627248-bb)(); + first\_const\_reference [first](compress_idm35151228634288.html#idm35151228626608-bb)() const; + second\_reference [second](compress_idm35151228634288.html#idm35151228625840-bb)(); + second\_const\_reference [second](compress_idm35151228634288.html#idm35151228625200-bb)() const; + void [swap](compress_idm35151228634288.html#idm35151228624432-bb)(::[boost::compressed\_pair](compressed_pair.html "Class template compressed_pair")< T, T > &); +}; +``` + + +Description +----------- +### +`compressed_pair` + public + construct/copy/destruct + + +1. ``` +compressed\_pair(); +``` +2. ``` +compressed\_pair(first\_param\_type x, second\_param\_type y); +``` +3. ``` +explicit compressed\_pair(first\_param\_type x); +``` +### +`compressed_pair` public member functions + + +1. ``` +first\_reference first(); +``` +2. ``` +first\_const\_reference first() const; +``` +3. ``` +second\_reference second(); +``` +4. ``` +second\_const\_reference second() const; +``` +5. ``` +void swap(::[boost::compressed\_pair](compressed_pair.html "Class template compressed_pair")< T, T > & y); +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](compressed_pair.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/in_place_factory.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/compressed_pair.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/compressed_pair.html new file mode 100644 index 0000000..9f59435 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/compressed_pair.html @@ -0,0 +1,114 @@ +--- +title: Class template compressed_pair +copyright: +revised: +--- + + +Class template compressed\_pair + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/compressed_pair.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](compress_idm35151228634288.html) + +Class template compressed\_pair +------------------------------- + + +boost::compressed\_pair +Synopsis +-------- +``` +// In header: <[boost/detail/compressed\_pair.hpp](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp "Header ")> + +template +class [compressed\_pair](compressed_pair.html "Class template compressed_pair") { +public: + // types + typedef T1 first\_type; + typedef T2 second\_type; + typedef call\_traits< first\_type >::param\_type first\_param\_type; + typedef call\_traits< second\_type >::param\_type second\_param\_type; + typedef call\_traits< first\_type >::reference first\_reference; + typedef call\_traits< second\_type >::reference second\_reference; + typedef call\_traits< first\_type >::const\_reference first\_const\_reference; + typedef call\_traits< second\_type >::const\_reference second\_const\_reference; + + // [construct/copy/destruct](compressed_pair.html#boost.compressed_pairconstruct-copy-destruct) + [compressed\_pair](compressed_pair.html#idm35151228637616-bb)(); + [compressed\_pair](compressed_pair.html#idm35151228637360-bb)(first\_param\_type, second\_param\_type); + explicit [compressed\_pair](compressed_pair.html#idm35151228636080-bb)(first\_param\_type); + explicit [compressed\_pair](compressed_pair.html#idm35151228635184-bb)(second\_param\_type); + + // [public member functions](compressed_pair.html#idm35151228642352-bb) + first\_reference [first](compressed_pair.html#idm35151228641968-bb)(); + first\_const\_reference [first](compressed_pair.html#idm35151228641328-bb)() const; + second\_reference [second](compressed_pair.html#idm35151228640560-bb)(); + second\_const\_reference [second](compressed_pair.html#idm35151228639920-bb)() const; + void [swap](compressed_pair.html#idm35151228639152-bb)([compressed\_pair](compressed_pair.html "Class template compressed_pair") &); +}; +``` + + +Description +----------- +### +`compressed_pair` + public + construct/copy/destruct + + +1. ``` +compressed\_pair(); +``` +2. ``` +compressed\_pair(first\_param\_type x, second\_param\_type y); +``` +3. ``` +explicit compressed\_pair(first\_param\_type x); +``` +4. ``` +explicit compressed\_pair(second\_param\_type y); +``` +### +`compressed_pair` public member functions + + +1. ``` +first\_reference first(); +``` +2. ``` +first\_const\_reference first() const; +``` +3. ``` +second\_reference second(); +``` +4. ``` +second\_const\_reference second() const; +``` +5. ``` +void swap([compressed\_pair](compressed_pair.html "Class template compressed_pair") & y); +``` +### Specializations + + +* [Class template compressed\_pair](compress_idm35151228634288.html "Class template compressed_pair") + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/compressed_pair.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](compress_idm35151228634288.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/in_place_factory_base.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/in_place_factory_base.html new file mode 100644 index 0000000..ac0e927 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/in_place_factory_base.html @@ -0,0 +1,44 @@ +--- +title: Class in_place_factory_base +copyright: +revised: +--- + + +Class in\_place\_factory\_base + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/in_place_factory.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/in_place_factory.html#header.boost.utility.in_place_factory_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](typed_in_idm35151228676656.html) + +Class in\_place\_factory\_base +------------------------------ + + +boost::in\_place\_factory\_base +Synopsis +-------- +``` +// In header: <[boost/utility/in\_place\_factory.hpp](../utility/utilities/in_place_factory.html#header.boost.utility.in_place_factory_hpp "Header ")> + + +class [in\_place\_factory\_base](in_place_factory_base.html "Class in_place_factory_base") { +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/in_place_factory.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/in_place_factory.html#header.boost.utility.in_place_factory_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](typed_in_idm35151228676656.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized.html new file mode 100644 index 0000000..6e07718 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized.html @@ -0,0 +1,92 @@ +--- +title: Class template initialized +copyright: +revised: +--- + + +Class template initialized + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/value_init.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](initialized_value_t.html) + +Class template initialized +-------------------------- + + +boost::initialized +Synopsis +-------- +``` +// In header: <[boost/utility/value\_init.hpp](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp "Header ")> + +template +class [initialized](initialized.html "Class template initialized") { +public: + // [construct/copy/destruct](initialized.html#boost.initializedconstruct-copy-destruct) + [initialized](initialized.html#idm35151228682032-bb)(); + explicit [initialized](initialized.html#idm35151228680240-bb)(T const &); + + // [public member functions](initialized.html#idm35151228840880-bb) + T const & [data](initialized.html#idm35151228840496-bb)() const; + T & [data](initialized.html#idm35151228839728-bb)(); + void [swap](initialized.html#idm35151228839088-bb)([initialized](initialized.html "Class template initialized") &); + [operator T const &](initialized.html#idm35151228837680-bb)() const; + [operator T&](initialized.html#idm35151228680112-bb)(); +}; +``` + + +Description +----------- +### +`initialized` + public + construct/copy/destruct + + +1. ``` +initialized(); +``` +2. ``` +explicit initialized(T const & arg); +``` +### +`initialized` public member functions + + +1. ``` +T const & data() const; +``` +2. ``` +T & data(); +``` +3. ``` +void swap([initialized](initialized.html "Class template initialized") & arg); +``` +4. ``` +operator T const &() const; +``` +5. ``` +operator T&(); +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/value_init.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](initialized_value_t.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value.html new file mode 100644 index 0000000..78b152d --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value.html @@ -0,0 +1,42 @@ +--- +title: Global initialized_value +copyright: +revised: +--- + + +Global initialized\_value + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](value_initialized.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities0.html) + +Global initialized\_value +------------------------- + + +boost::initialized\_value +Synopsis +-------- +``` +// In header: <[boost/utility/value\_init.hpp](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp "Header ")> + +[initialized\_value\_t](initialized_value_t.html "Class initialized_value_t") const initialized\_value; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](value_initialized.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities0.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value_t.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value_t.html new file mode 100644 index 0000000..a1c24ae --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/initialized_value_t.html @@ -0,0 +1,61 @@ +--- +title: Class initialized_value_t +copyright: +revised: +--- + + +Class initialized\_value\_t + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](initialized.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](value_initialized.html) + +Class initialized\_value\_t +--------------------------- + + +boost::initialized\_value\_t +Synopsis +-------- +``` +// In header: <[boost/utility/value\_init.hpp](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp "Header ")> + + +class [initialized\_value\_t](initialized_value_t.html "Class initialized_value_t") { +public: + + // [public member functions](initialized_value_t.html#idm35151228681264-bb) + template [operator T](initialized_value_t.html#idm35151228680368-bb)() const; +}; +``` + + +Description +----------- +### +`initialized_value_t` public member functions + + +1. ``` +template operator T() const; +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](initialized.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](value_initialized.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/result_of.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/result_of.html new file mode 100644 index 0000000..42736d9 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/result_of.html @@ -0,0 +1,44 @@ +--- +title: Struct template result_of +copyright: +revised: +--- + + +Struct template result\_of + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/result_of.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](tr1_result_of.html) + +Struct template result\_of +-------------------------- + + +boost::result\_of +Synopsis +-------- +``` +// In header: <[boost/utility/result\_of.hpp](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp "Header ")> + +template +struct [result\_of](result_of.html "Struct template result_of") { +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../utility/utilities/result_of.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](tr1_result_of.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/tr1_result_of.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/tr1_result_of.html new file mode 100644 index 0000000..d3033e5 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/tr1_result_of.html @@ -0,0 +1,44 @@ +--- +title: Struct template tr1_result_of +copyright: +revised: +--- + + +Struct template tr1\_result\_of + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](result_of.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/string_view.html) + +Struct template tr1\_result\_of +------------------------------- + + +boost::tr1\_result\_of +Synopsis +-------- +``` +// In header: <[boost/utility/result\_of.hpp](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp "Header ")> + +template +struct [tr1\_result\_of](tr1_result_of.html "Struct template tr1_result_of") { +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](result_of.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/result_of.html#header.boost.utility.result_of_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/string_view.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/typed_in_idm35151228676656.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/typed_in_idm35151228676656.html new file mode 100644 index 0000000..668d63f --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/typed_in_idm35151228676656.html @@ -0,0 +1,44 @@ +--- +title: Class typed_in_place_factory_base +copyright: +revised: +--- + + +Class typed\_in\_place\_factory\_base + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](in_place_factory_base.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/in_place_factory.html#header.boost.utility.typed_in_place_factory_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/operators.html) + +Class typed\_in\_place\_factory\_base +------------------------------------- + + +boost::typed\_in\_place\_factory\_base +Synopsis +-------- +``` +// In header: <[boost/utility/typed\_in\_place\_factory.hpp](../utility/utilities/in_place_factory.html#header.boost.utility.typed_in_place_factory_hpp "Header ")> + + +class [typed\_in\_place\_factory\_base](typed_in_idm35151228676656.html "Class typed_in_place_factory_base") { +}; +``` + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](in_place_factory_base.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/in_place_factory.html#header.boost.utility.typed_in_place_factory_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](../utility/utilities/operators.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/boost/value_initialized.html b/doc/libs/1_78_0/libs/utility/doc/html/boost/value_initialized.html new file mode 100644 index 0000000..fe176a1 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/boost/value_initialized.html @@ -0,0 +1,88 @@ +--- +title: Class template value_initialized +copyright: +revised: +--- + + +Class template value\_initialized + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](initialized_value_t.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](initialized_value.html) + +Class template value\_initialized +--------------------------------- + + +boost::value\_initialized +Synopsis +-------- +``` +// In header: <[boost/utility/value\_init.hpp](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp "Header ")> + +template +class [value\_initialized](value_initialized.html "Class template value_initialized") { +public: + // [construct/copy/destruct](value_initialized.html#boost.value_initializedconstruct-copy-destruct) + [value\_initialized](value_initialized.html#idm35151228597808-bb)(); + + // [public member functions](value_initialized.html#idm35151228654640-bb) + T const & [data](value_initialized.html#idm35151228654256-bb)() const; + T & [data](value_initialized.html#idm35151228654128-bb)(); + void [swap](value_initialized.html#idm35151228652848-bb)([value\_initialized](value_initialized.html "Class template value_initialized") &); + [operator T const &](value_initialized.html#idm35151228651440-bb)() const; + [operator T&](value_initialized.html#idm35151228599600-bb)(); +}; +``` + + +Description +----------- +### +`value_initialized` + public + construct/copy/destruct + + +1. ``` +value\_initialized(); +``` +### +`value_initialized` public member functions + + +1. ``` +T const & data() const; +``` +2. ``` +T & data(); +``` +3. ``` +void swap([value\_initialized](value_initialized.html "Class template value_initialized") & arg); +``` +4. ``` +operator T const &() const; +``` +5. ``` +operator T&(); +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](initialized_value_t.html)[![Up](../../../../../doc/src/images/up.png)](../utility/utilities/value_init.html#header.boost.utility.value_init_hpp)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](initialized_value.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/index.html b/doc/libs/1_78_0/libs/utility/doc/html/index.html new file mode 100644 index 0000000..cf52a2f --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/index.html @@ -0,0 +1,64 @@ +--- +title: Chapter 1. Boost.Utility +copyright: +revised: +--- + + +Chapter 1. Boost.Utility + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../index.html) | [Libraries](../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../more/index.htm) | + +--- + + +[![Next](../../../../doc/src/images/next.png)](utility/overview.html) +Chapter 1. Boost.Utility +------------------------- + + +### +Beman Dawes + + +Copyright © 2001 Beman Dawes + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + + +**Table of Contents** +[Overview](utility/overview.html) +[Utilities](utility/utilities.html) + +[Base from Member](utility/utilities/base_from_member.html) +[Binary + Integer Literals](utility/utilities/binary_integer_literals.html) +[Call Traits](utility/utilities/call_traits.html) +[Compressed Pair](utility/utilities/compressed_pair.html) +[In-place + Factory](utility/utilities/in_place_factory.html) +[Operators](utility/utilities/operators.html) +[Result of](utility/utilities/result_of.html) +[String View](utility/utilities/string_view.html) +[Value + Init](utility/utilities/value_init.html) + +[More Utilities](utility/utilities0.html) +[Quick Reference](utility/ref.html) + + +| | | +| --- | --- | +| Last revised: December 09, 2021 at 01:40:56 GMT | | + +--- + + +[![Next](../../../../doc/src/images/next.png)](utility/overview.html) + + diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/overview.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/overview.html new file mode 100644 index 0000000..540aeb6 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/overview.html @@ -0,0 +1,154 @@ +--- +title: Overview +copyright: +revised: +--- + + +Overview + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../index.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](utilities.html) +[Overview](overview.html "Overview") +------------------------------------- + Boost.Utility is a collection of small, useful, and general-purpose components + for language support. + + Over time, + + + +* several components have been moved to more appropriate Boost libraries + and +* many of these components had variants accepted into the C++ standard + + + When the component has moved to another Boost library, Boost.Utility headers + still lead to the appropriate headers in other libraries. + +**Table 1.1. Components** + + +| + Boost.Utility + | + Moved to Boost + | + C++ Standard variant + | +| --- | --- | --- | +| +[`addressof`](../../../../../libs/core/doc/html/core/addressof.html) + | +[Boost.Core](../../../../../libs/core/index.html) + | + C++11 [`std::addressof`](https://en.cppreference.com/w/cpp/memory/addressof) + | +| +[`base\_from\_member`](../boost/base_from_member.html "Class template base_from_member") + | | | +| +[`BOOST\_BINARY`](utilities/binary_integer_literals.html#sec:BOOST_BINARY) + | | + C++14 [Binary + integer literal](https://en.cppreference.com/w/cpp/language/integer_literal) + | +| +[`call\_traits`](../boost/call_traits.html "Struct template call_traits") + | | | +| +[`checked\_delete`](../../../../../libs/core/doc/html/core/checked_delete.html) + | +[Boost.Core](../../../../../libs/core/index.html) + | | +| +[`compressed\_pair`](../boost/compressed_pair.html "Class template compressed_pair") + | | | +| +[`declval`](../../../../../libs/type_traits/doc/html/boost_typetraits/reference/declval.html) + | +[Boost.TypeTraits](../../../../../libs/type_traits/index.html) + | + C++11 [`std::declval`](https://en.cppreference.com/w/cpp/utility/declval) + | +| +[`enable\_if`](../../../../../libs/core/doc/html/core/enable_if.html) + | +[Boost.Core](../../../../../libs/core/index.html) + | + C++11 [`std::enable\_if`](https://en.cppreference.com/w/cpp/types/enable_if) + | +| +[generator + iterator adaptors](../../../../../libs/iterator/doc/generator_iterator.htm) + | +[Boost.Iterator](../../../../../libs/iterator/index.html) + | | +| +[`in\_place\_factory`](utilities/in_place_factory.html#sec:in_place_factory) + | | | +| +[`iterator\_adaptors`](../../../../../libs/iterator/index.html) + | +[Boost.Iterator](../../../../../libs/iterator/index.html) + | | +| +[`next` / `prior`](../../../../../libs/iterator/doc/html/iterator/algorithms/next_prior.html) + | +[Boost.Iterator](../../../../../libs/iterator/index.html) + | + C++11 [`std::next`](https://en.cppreference.com/w/cpp/iterator/next) / [`std::prev`](https://en.cppreference.com/w/cpp/iterator/prev) + | +| +[`noncopyable`](../../../../../libs/core/doc/html/core/noncopyable.html) + | +[Boost.Core](../../../../../libs/core/index.html) + | | +| +[`operators`](utilities/operators.html#sec:operators) + | | | +| +[`ostream\_string`](../../../../../libs/io/doc/html/io.html) + | +[Boost.IO](../../../../../libs/io/index.html) + | | +| +[`result\_of`](../boost/result_of.html "Struct template result_of") + | | + C++11 [`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of) + | +| +[`string\_view`](../boost/basic_string_view.html "Class template basic_string_view") + | | + C++17 [`std::string\_view`](https://en.cppreference.com/w/cpp/string/basic_string_view) + | +| +[`throw\_exception`](../../../../../libs/throw_exception/doc/html/throw_exception.html#using_boost_throw_exception) + | +[Boost.ThrowException](../../../../../libs/throw_exception/index.html) + | | +| +[`value\_init`](utilities/value_init.html#sec:value_init) + | | + C++11 [List + initialization](https://en.cppreference.com/w/cpp/language/list_initialization) + | + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../index.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](utilities.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/ref.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/ref.html new file mode 100644 index 0000000..5bc0115 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/ref.html @@ -0,0 +1,270 @@ +--- +title: Quick Reference +copyright: +revised: +--- + + +Quick Reference + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](utilities0.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html) +[Quick Reference](ref.html "Quick Reference") +---------------------------------------------- + + + + +| +Base from Member | +Call Traits | +Compressed Pair | +In-place Factory | +| --- | --- | --- | --- | +| +Classes + +| | +| --- | +| [base\_from\_member](../boost/base_from_member.html "Class template base_from_member") | + + | +Type Traits + +| | +| --- | +| [call\_traits](../boost/call_traits.html "Struct template call_traits") | +| [call\_traits](../boost/call_traits.html "Struct template call_traits") | +| [call\_traits](../boost/call_traits.html "Struct template call_traits") | +| [call\_traits](../boost/call_traits.html "Struct template call_traits") | + + | +Classes + +| | +| --- | +| [compressed\_pair](../boost/compressed_pair.html "Class template compressed_pair") | + + +Functions + +| | +| --- | +| [swap](utilities/compressed_pair.html#header.boost.detail.compressed_pair_hpp "Header ") | + + | +Classes + +| | +| --- | +| [in\_place\_factory\_base](../boost/in_place_factory_base.html "Class in_place_factory_base") | +| [typed\_in\_place\_factory\_base](utilities/in_place_factory.html#boost.typed_in_place_factory_base) | + + | + + + + +| +Operators | +| --- | +| +Classes (1 of 5) + +| | +| --- | +| [additive1](utilities/operators.html#sec:arithmetic) | +| [additive2](utilities/operators.html#sec:arithmetic) | +| [arithmetic1](utilities/operators.html#sec:arithmetic) | +| [arithmetic2](utilities/operators.html#sec:arithmetic) | +| [bidirectional\_iteratable](utilities/operators.html#sec:arithmetic) | +| [bidirectional\_iterator\_helper](utilities/operators.html#sec:arithmetic) | +| [bitwise1](utilities/operators.html#sec:arithmetic) | +| [bitwise2](utilities/operators.html#sec:arithmetic) | +| [decrementable](utilities/operators.html#sec:arithmetic) | +| [dereferenceable](utilities/operators.html#sec:arithmetic) | +| [equality\_comparable1](utilities/operators.html#sec:arithmetic) | +| [equality\_comparable2](utilities/operators.html#sec:arithmetic) | +| [equivalent1](utilities/operators.html#sec:arithmetic) | + + | +Classes (2 of 5) + +| | +| --- | +| [equivalent2](utilities/operators.html#sec:arithmetic) | +| [euclidean\_ring\_operators1](utilities/operators.html#sec:arithmetic) | +| [euclidean\_ring\_operators2](utilities/operators.html#sec:arithmetic) | +| [field\_operators1](utilities/operators.html#sec:arithmetic) | +| [field\_operators2](utilities/operators.html#sec:arithmetic) | +| [forward\_iteratable](utilities/operators.html#sec:arithmetic) | +| [forward\_iterator\_helper](utilities/operators.html#sec:arithmetic) | +| [incrementable](utilities/operators.html#sec:arithmetic) | +| [indexable](utilities/operators.html#sec:arithmetic) | +| [input\_iteratable](utilities/operators.html#sec:arithmetic) | +| [input\_iterator\_helper](utilities/operators.html#sec:arithmetic) | +| [integer\_arithmetic1](utilities/operators.html#sec:arithmetic) | +| [integer\_arithmetic2](utilities/operators.html#sec:arithmetic) | + + | +Classes (3 of 5) + +| | +| --- | +| [integer\_multiplicative1](utilities/operators.html#sec:arithmetic) | +| [integer\_multiplicative2](utilities/operators.html#sec:arithmetic) | +| [is\_chained\_base](utilities/operators.html#sec:arithmetic) | +| [less\_than\_comparable1](utilities/operators.html#sec:arithmetic) | +| [less\_than\_comparable2](utilities/operators.html#sec:arithmetic) | +| [multiplicative1](utilities/operators.html#sec:arithmetic) | +| [multiplicative2](utilities/operators.html#sec:arithmetic) | +| [operators](utilities/operators.html#sec:arithmetic) | +| [operators2](utilities/operators.html#sec:arithmetic) | +| [operators](utilities/operators.html#sec:arithmetic) | +| [ordered\_euclidean\_ring\_operators1](utilities/operators.html#sec:arithmetic) | +| [ordered\_euclidean\_ring\_operators2](utilities/operators.html#sec:arithmetic) | +| [ordered\_euclidian\_ring\_operators1](utilities/operators.html#sec:arithmetic) | + + | +Classes (4 of 5) + +| | +| --- | +| [ordered\_euclidian\_ring\_operators2](utilities/operators.html#sec:arithmetic) | +| [ordered\_field\_operators1](utilities/operators.html#sec:arithmetic) | +| [ordered\_field\_operators2](utilities/operators.html#sec:arithmetic) | +| [ordered\_ring\_operators1](utilities/operators.html#sec:arithmetic) | +| [ordered\_ring\_operators2](utilities/operators.html#sec:arithmetic) | +| [output\_iteratable](utilities/operators.html#sec:arithmetic) | +| [output\_iterator\_helper](utilities/operators.html#sec:arithmetic) | +| [partially\_ordered1](utilities/operators.html#sec:arithmetic) | +| [partially\_ordered2](utilities/operators.html#sec:arithmetic) | +| [random\_access\_iteratable](utilities/operators.html#sec:arithmetic) | +| [random\_access\_iterator\_helper](utilities/operators.html#sec:arithmetic) | +| [ring\_operators1](utilities/operators.html#sec:arithmetic) | +| [ring\_operators2](utilities/operators.html#sec:arithmetic) | + + | +Classes (5 of 5) + +| | +| --- | +| [shiftable1](utilities/operators.html#sec:arithmetic) | +| [shiftable2](utilities/operators.html#sec:arithmetic) | +| [totally\_ordered1](utilities/operators.html#sec:arithmetic) | +| [totally\_ordered2](utilities/operators.html#sec:arithmetic) | +| [unit\_steppable](utilities/operators.html#sec:arithmetic) | + + +Type Traits + +| | +| --- | +| [is\_chained\_base](utilities/operators.html#sec:arithmetic) | + + | + + + + +| +Result of | +String View | +Value Init | +| --- | --- | --- | +| +Type Traits + +| | +| --- | +| [result\_of](../boost/result_of.html "Struct template result_of") | +| [tr1\_result\_of](../boost/tr1_result_of.html "Struct template tr1_result_of") | + + | +Aliases + +| | +| --- | +| [string\_view](../boost/basic_string_view.html "Class template basic_string_view") | +| [u16string\_ref](../boost/basic_string_view.html "Class template basic_string_view") | +| [u16string\_view](../boost/basic_string_view.html "Class template basic_string_view") | +| [u32string\_ref](../boost/basic_string_view.html "Class template basic_string_view") | +| [u32string\_view](../boost/basic_string_view.html "Class template basic_string_view") | +| [wstring\_ref](../boost/basic_string_view.html "Class template basic_string_view") | +| [wstring\_view](../boost/basic_string_view.html "Class template basic_string_view") | +| [string\_ref](../boost/basic_string_view.html "Class template basic_string_view") | + + | +Classes + +| | +| --- | +| [basic\_string\_ref](../boost/basic_string_view.html "Class template basic_string_view") | +| [basic\_string\_view](../boost/basic_string_view.html "Class template basic_string_view") | + + +Functions + +| | +| --- | +| [hash\_range](utilities/string_view.html#boost.hash_range) | +| [hash\_value](utilities/string_view.html#boost.hash_value) | + + | +Operators + +| | +| --- | +| [operator==](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator!=](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator<](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator<=](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator>](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator>=](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | +| [operator<<](utilities/string_view.html#header.boost.utility.string_view_hpp "Header ") | + + | +Classes + +| | +| --- | +| [initialized](../boost/initialized.html "Class template initialized") | +| [initialized\_value\_t](../boost/initialized_value_t.html "Class initialized_value_t") | +| [value\_initialized](../boost/value_initialized.html "Class template value_initialized") | + + +Functions + +| | +| --- | +| [get](utilities/value_init.html#header.boost.utility.value_init_hpp "Header ") | +| [swap](utilities/value_init.html#header.boost.utility.value_init_hpp "Header ") | + + +Constants + +| | +| --- | +| [initialized\_value](../boost/initialized_value.html "Global initialized_value") | + + | + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](utilities0.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities.html new file mode 100644 index 0000000..727c3ba --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities.html @@ -0,0 +1,60 @@ +--- +title: Utilities +copyright: +revised: +--- + + +Utilities + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](overview.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](utilities/base_from_member.html) +[Utilities](utilities.html "Utilities") +---------------------------------------- +[Base from Member](utilities/base_from_member.html) +[Binary + Integer Literals](utilities/binary_integer_literals.html) +[Call Traits](utilities/call_traits.html) +[Compressed Pair](utilities/compressed_pair.html) +[In-place + Factory](utilities/in_place_factory.html) +[Operators](utilities/operators.html) +[Result of](utilities/result_of.html) +[String View](utilities/string_view.html) +[Value + Init](utilities/value_init.html) + + + The entire contents of Boost.Utility are in `namespace +boost`. + + +| | | +| --- | --- | +| [Warning] | Warning | +| + Direct use of the header [``](../../../../../boost/utility.hpp) + is discouraged and it will be deprecated. + + + Please include the headers relative to individual components instead. + | + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](overview.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](utilities/base_from_member.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/base_from_member.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/base_from_member.html new file mode 100644 index 0000000..5bcc71b --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/base_from_member.html @@ -0,0 +1,441 @@ +--- +title: Base from Member +copyright: +revised: +--- + + +Base from Member + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../utilities.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/base_from_member.html) + + +### +[Base from Member](base_from_member.html "Base from Member") +[Introduction](base_from_member.html#utility.utilities.base_from_member.introduction) +[Synopsis](base_from_member.html#utility.utilities.base_from_member.synopsis) +[Basic + Usage](base_from_member.html#utility.utilities.base_from_member.basic_usage) +[Multiple + Sub-Objects](base_from_member.html#utility.utilities.base_from_member.multiple_sub_objects) +[Reference](base_from_member.html#base_from_member.reference) +[Acknowledgments](base_from_member.html#utility.utilities.base_from_member.acknowledgments) + + +#### +[Introduction](base_from_member.html#utility.utilities.base_from_member.introduction "Introduction") + The class templates [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") support the base-from-member + idiom. When developing a class, sometimes a base class needs to be initialized + with a member of the current class. As a naïve example: + +``` +#include /\* for std::streambuf \*/ +#include /\* for std::ostream \*/ + +class fdoutbuf + : public [`std::streambuf`](https://en.cppreference.com/w/cpp/header/streambuf) +{ +public: + explicit fdoutbuf( int fd ); + //... +}; + +class fdostream + : public [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream) +{ +protected: + fdoutbuf buf; +public: + explicit fdostream( int fd ) + : buf( fd ), [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream)( &buf ) {} + //... +}; + +``` + + + This is undefined because C++'s initialization order mandates that the + base class is initialized before the member it uses. [R. + Samuel Klatchko](http://www.moocat.org) developed a way around this by using the initialization + order in his favor. Base classes are initialized in order of declaration, + so moving the desired member to another base class, that is initialized + before the desired base class, can ensure proper initialization. + + A custom base class can be made for this idiom: + +``` +#include /\* for std::streambuf \*/ +#include /\* for std::ostream \*/ + +class fdoutbuf + : public [`std::streambuf`](https://en.cppreference.com/w/cpp/header/streambuf) +{ +public: + explicit fdoutbuf( int fd ); + //... +}; + +struct fdostream\_pbase +{ + fdoutbuf sbuffer; + + explicit fdostream\_pbase( int fd ) + : sbuffer( fd ) {} +}; + +class fdostream + : private fdostream\_pbase + , public [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream) +{ + typedef fdostream\_pbase pbase\_type; + typedef [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream) base\_type; + +public: + explicit fdostream( int fd ) + : pbase\_type( fd ), base\_type( &sbuffer ) {} + //... +}; + +``` + + + Other projects can use similar custom base classes. The technique is basic + enough to make a template, with a sample template class in this library. + The main template parameter is the type of the enclosed member. The template + class has several (explicit) constructor member templates, which implicitly + type the constructor arguments and pass them to the member. The template + class uses implicit copy construction and assignment, cancelling them if + the enclosed member is non-copyable. + + Manually coding a base class may be better if the construction and/or copying + needs are too complex for the supplied template class, or if the compiler + is not advanced enough to use it. + + Since base classes are unnamed, a class cannot have multiple (direct) base + classes of the same type. The supplied template class has an extra template + parameter, an integer, that exists solely to provide type differentiation. + This parameter has a default value so a single use of a particular member + type does not need to concern itself with the integer. + + +#### +[Synopsis](base_from_member.html#utility.utilities.base_from_member.synopsis "Synopsis") +``` +#include /\* exposition only \*/ + +#ifndef BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY +#define BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY 10 +#endif + +template < typename MemberType, int UniqueID = 0 > +class [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") +{ +protected: + MemberType member; + +#if *C++11 is in use* + template< typename ...T > + explicit constexpr [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")( T&& ...x ) + noexcept( [`std::is\_nothrow\_constructible`](https://en.cppreference.com/w/cpp/types/is_constructible)::value ); +#else + [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")(); + + template< typename T1 > + explicit [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")( T1 x1 ); + + template< typename T1, typename T2 > + [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")( T1 x1, T2 x2 ); + + //... + + template< typename T1, typename T2, typename T3, typename T4, + typename T5, typename T6, typename T7, typename T8, typename T9, + typename T10 > + [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, + T8 x8, T9 x9, T10 x10 ); +#endif +}; + +template < typename MemberType, int UniqueID > +class [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") +{ +protected: + MemberType& member; + + explicit constexpr [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")( MemberType& x ) + noexcept; +}; + +``` + + + The class template has a first template parameter `MemberType` + representing the type of the based-member. It has a last template parameter + `UniqueID`, that is an `int`, to differentiate between multiple base + classes that use the same based-member type. The last template parameter + has a default value of zero if it is omitted. The class template has a + protected data member called `member` + that the derived class can use for later base classes or itself. + + If the appropriate features of C++11 are present, there will be a single + constructor template. It implements *perfect forwarding* + to the best constructor call of `member` + if any. The constructor template is marked both `constexpr` + and `explicit`. The former will + be ignored if the corresponding inner constructor call of `member` does not have the marker. The + latter binds the other way; always taking effect, even when the inner constructor + call does not have the marker. The constructor template propagates the + `noexcept` status of the inner + constructor call. The constructor template has a trailing parameter with + a default value that disables the template when its signature is too close + to the signatures of the automatically-defined non-template copy- and/or + move-constructors of [`base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member"). + + On earlier-standard compilers, there is a default constructor and several + constructor member templates. These constructor templates can take as many + arguments (currently up to ten) as possible and pass them to a constructor + of the data member. + + A specialization for member references offers a single constructor taking + a `MemberType&`, + which is the only way to initialize a reference. + + Since C++ does not allow any way to explicitly state the template parameters + of a templated constructor, make sure that the arguments are already close + as possible to the actual type used in the data member's desired constructor. + Explicit conversions may be necessary. + + The `BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY` + macro constant specifies the maximum argument length for the constructor + templates. The constant may be overridden if more (or less) argument configurations + are needed. The constant may be read for code that is expandable like the + class template and needs to maintain the same maximum size. (Example code + would be a class that uses this class template as a base class for a member + with a flexible set of constructors.) This constant is ignored when C++11 + features are present. + + +#### +[Basic + Usage](base_from_member.html#utility.utilities.base_from_member.basic_usage "Basic Usage") + With the starting example, the `fdoutbuf` + sub-object needs to be encapsulated in a base class that is inherited before + `[`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream)`. + +``` +#include + +#include // for std::streambuf +#include // for \_\_std\_ostream\_\_ + +class fdoutbuf + : public [`std::streambuf`](https://en.cppreference.com/w/cpp/header/streambuf) +{ +public: + explicit fdoutbuf( int fd ); + //... +}; + +class fdostream + : private [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") + , public [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream) +{ + // Helper typedef's + typedef [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") pbase\_type; + typedef [`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream) base\_type; + +public: + explicit fdostream( int fd ) + : pbase\_type( fd ), base\_type( &member ){} + //... +}; + +``` + + + The base-from-member idiom is an implementation detail, so it should not + be visible to the clients (or any derived classes) of `fdostream`. + Due to the initialization order, the `fdoutbuf` + sub-object will get initialized before the `[`[`std::ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream)`](https://en.cppreference.com/w/cpp/io/basic_ostream)` + sub-object does, making the former sub-object safe to use in the latter + sub-object's construction. Since the `fdoutbuf` + sub-object of the final type is the only sub-object with the name `member` that name can be used unqualified + within the final class. + + +#### +[Multiple + Sub-Objects](base_from_member.html#utility.utilities.base_from_member.multiple_sub_objects "Multiple Sub-Objects") + The base-from-member class templates should commonly involve only one base-from-member + sub-object, usually for attaching a stream-buffer to an I/O stream. The + next example demonstrates how to use multiple base-from-member sub-objects + and the resulting qualification issues. + +``` +#include + +#include /\* for NULL \*/ + +struct an\_int +{ + int y; + + an\_int( float yf ); +}; + +class switcher +{ +public: + switcher(); + switcher( double, int \* ); + //... +}; + +class flow\_regulator +{ +public: + flow\_regulator( switcher &, switcher & ); + //... +}; + +template < unsigned Size > +class fan +{ +public: + explicit fan( switcher ); + //... +}; + +class system + : private [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") + , private [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") + , private [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") + , private [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") + , protected flow\_regulator + , public fan<6> +{ + // Helper typedef's + typedef [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") pbase0\_type; + typedef [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") pbase1\_type; + typedef [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") pbase2\_type; + typedef [`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member") pbase3\_type; + + typedef flow\_regulator base1\_type; + typedef fan<6> base2\_type; + +public: + system( double x ); + //... +}; + +system::system( double x ) + : pbase0\_type( 0.2 ) + , pbase1\_type() + , pbase2\_type( -16, &this->pbase0\_type::member.y ) + , pbase3\_type( x, static\_cast(NULL) ) + , base1\_type( pbase3\_type::member, pbase1\_type::member ) + , base2\_type( pbase2\_type::member ) +{ + //... +} + +``` + + + The final class has multiple sub-objects with the name `member`, + so any use of that name needs qualification by a name of the appropriate + base type. Using `typedef`s + ease mentioning the base types. + + However, the fix introduces a new problem when a pointer is needed. Using + the address operator with a sub-object qualified with its class's name + results in a pointer-to-member (here, having a type of `an\_int +[`boost::base\_from\_member`](../../boost/base_from_member.html "Class template base_from_member")::\*`) + instead of a pointer to the member (having a type of `an\_int\*`). The new problem is fixed by qualifying + the sub-object with `this->` + and is needed just for pointers, and not for references or values. + + There are some argument conversions in the initialization. The constructor + argument for `pbase0\_type` + is converted from `double` to + `float`. The first constructor + argument for `pbase2\_type` + is converted from `int` to + `double`. + + The second constructor argument for `pbase3\_type` + is a special case of necessary conversion; all forms of the null-pointer + literal in C++ (except `nullptr` + from C++11) also look like compile-time integral expressions, so C++ always + interprets such code as an integer when it has overloads that can take + either an integer or a pointer. + + The last conversion is necessary for the compiler to call a constructor + form with the exact pointer type used in `switcher`'s + constructor. (If C++11's [`nullptr`](https://en.cppreference.com/w/cpp/language/nullptr) is used, it still needs + a conversion if multiple pointer types can be accepted in a constructor + call but `[`std::nullptr\_t`](https://en.cppreference.com/w/cpp/types/nullptr_t)` cannot.) + + +#### +Reference +##### +Header <[boost/utility/base\_from\_member.hpp](../../../../../../boost/utility/base_from_member.hpp)> +``` + + +[BOOST\_BASE\_FROM\_MEMBER\_MAX\_ARITY](../../BOOST_BA_idm35151229096240.html "Macro BOOST_BASE_FROM_MEMBER_MAX_ARITY") +``` + + +``` +namespace boost { + template class [base\_from\_member](../../boost/base_from_member.html "Class template base_from_member"); + + template + class [base\_from\_member](../../boost/base_fro_idm35151229100080.html "Class template base_from_member"); +} +``` + +#### +[Acknowledgments](base_from_member.html#utility.utilities.base_from_member.acknowledgments "Acknowledgments") + Author: Walker, Daryle + + Copyright 2001, 2003, 2004, 2012 Daryle Walker + + + +* [Ed Brey](http://www.boost.org/people/ed_brey.htm) + suggested some interface changes. +* [R. Samuel Klatchko](http://www.moocat.org) ([rsk@moocat.org](mailto:rsk%40moocat.org), [rsk@brightmail.com](mailto:rsk%40brightmail.com)) + invented the idiom of how to use a class member for initializing a + base class. +* [Dietmar + Kuehl](http://www.boost.org/people/dietmar_kuehl.htm) popularized the base-from-member idiom in his [IOStream + example classes](http://www.informatik.uni-konstanz.de/~kuehl/c++/iostream/). +* Jonathan Turkanis supplied an implementation of generating the constructor + templates that can be controlled and automated with macros. The implementation + uses the [Preprocessor + library](../../../../../../libs/preprocessor/index.html). +* [Walker](http://www.boost.org/people/daryle_walker.html%22%3eDaryle) + started the library. Contributed the test file [base\_from\_member\_test.cpp](../../../../../test/base_from_member_test.cpp). + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../utilities.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/base_from_member.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/binary_integer_literals.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/binary_integer_literals.html new file mode 100644 index 0000000..fdd2440 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/binary_integer_literals.html @@ -0,0 +1,121 @@ +--- +title: Binary Integer Literals +copyright: +revised: +--- + + +Binary Integer Literals + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../BOOST_BA_idm35151229096240.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../BOOST_BINARY.html) + + +### +[Binary + Integer Literals](binary_integer_literals.html "Binary Integer Literals") +[Introduction](binary_integer_literals.html#utility.utilities.binary_integer_literals.introduction) +[Example](binary_integer_literals.html#utility.utilities.binary_integer_literals.example) +[Reference](binary_integer_literals.html#boost_binary.reference) +[Acknowledgments](binary_integer_literals.html#utility.utilities.binary_integer_literals.acknowledgments) + + +#### +[Introduction](binary_integer_literals.html#utility.utilities.binary_integer_literals.introduction "Introduction") + The macro `BOOST\_BINARY` + is used for the representation of binary literals. It takes as an argument + a binary number arranged as an arbitrary amount of 1s and 0s in groupings + of length 1 to 8, with groups separated by spaces. The macro serves as + a replacement for [binary + integer literals](https://en.cppreference.com/w/cpp/language/integer_literal), adopted in C++14. + + The type of the literal yielded is determined by the same rules as those + of [hex + and octal literals](https://en.cppreference.com/w/cpp/language/integer_literal). By implementation, this macro expands directly + to an octal literal during preprocessing, so there is no overhead at runtime + and the result is usable in any place that an octal literal would be. + + In order to directly support binary literals with suffixes, additional + macros of the form `BOOST\_BINARY\_XXX` + are also provided, where `XXX` + is a standard integer suffix in all capital letters. + + In addition, LL and ULL suffixes may be used for representing `long long` + and `unsigned long +long` types in compilers which provide + them as an extension. + + The `BOOST\_BINARY` family + of macros resides in the header [](../../../../../../boost/utility/binary.hpp). + + +#### +[Example](binary_integer_literals.html#utility.utilities.binary_integer_literals.example "Example") +``` +void foo( int ); + +void foo( unsigned long ); + +void bar() +{ + int value1 = BOOST\_BINARY( 100 111000 01 1 110 ); + + unsigned long value2 = BOOST\_BINARY\_UL( 100 001 ); // unsigned long + + long long value3 = BOOST\_BINARY\_LL( 11 000 ); // long long if supported + + [`assert`](https://en.cppreference.com/w/cpp/error/assert)( BOOST\_BINARY( 10010 ) + & BOOST\_BINARY( 11000 ) + == BOOST\_BINARY( 10000 ) + ); + + foo( BOOST\_BINARY( 1010 ) ); // calls the first foo + + foo( BOOST\_BINARY\_LU( 1010 ) ); // calls the second foo +} + +``` +#### +Reference +##### +Header <[boost/utility/binary.hpp](../../../../../../boost/utility/binary.hpp)> +``` + + +[BOOST\_BINARY](../../BOOST_BINARY.html "Macro BOOST_BINARY")(bit\_groupings) +[BOOST\_BINARY\_U](../../BOOST_BINARY_U.html "Macro BOOST_BINARY_U")(bit\_groupings) +[BOOST\_BINARY\_L](../../BOOST_BINARY_L.html "Macro BOOST_BINARY_L")(bit\_groupings) +[BOOST\_BINARY\_UL](../../BOOST_BINARY_UL.html "Macro BOOST_BINARY_UL")(bit\_groupings) +[BOOST\_BINARY\_LU](../../BOOST_BINARY_LU.html "Macro BOOST_BINARY_LU")(bit\_groupings) +[BOOST\_BINARY\_LL](../../BOOST_BINARY_LL.html "Macro BOOST_BINARY_LL")(bit\_groupings) +[BOOST\_BINARY\_ULL](../../BOOST_BINARY_ULL.html "Macro BOOST_BINARY_ULL")(bit\_groupings) +[BOOST\_BINARY\_LLU](../../BOOST_BINARY_LLU.html "Macro BOOST_BINARY_LLU")(bit\_groupings) +[BOOST\_SUFFIXED\_BINARY\_LITERAL](../../BOOST_SU_idm35151229114032.html "Macro BOOST_SUFFIXED_BINARY_LITERAL")(bit\_groupings, suffix) +[BOOST\_SUFFIXED\_BINARY\_LITERAL\_D](../../BOOST_SU_idm35151229112752.html "Macro BOOST_SUFFIXED_BINARY_LITERAL_D")(d, bit\_groupings, suffix) +[BOOST\_BINARY\_LITERAL\_D](../../BOOST_BINARY_LITERAL_D.html "Macro BOOST_BINARY_LITERAL_D")(d, bit\_groupings) +``` + +#### +[Acknowledgments](binary_integer_literals.html#utility.utilities.binary_integer_literals.acknowledgments "Acknowledgments") + Contributed by Matt Calabrese. + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../BOOST_BA_idm35151229096240.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../BOOST_BINARY.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/call_traits.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/call_traits.html new file mode 100644 index 0000000..bf6cdf4 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/call_traits.html @@ -0,0 +1,766 @@ +--- +title: Call Traits +copyright: +revised: +--- + + +Call Traits + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../BOOST_BINARY_LITERAL_D.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/call_traits.html) + + +### +[Call Traits](call_traits.html "Call Traits") +[Introduction](call_traits.html#utility.utilities.call_traits.introduction) +[Copy + constructibility](call_traits.html#utility.utilities.call_traits.copy_constructibility) +[Examples](call_traits.html#utility.utilities.call_traits.examples) +[Rationale](call_traits.html#utility.utilities.call_traits.rationale) +[Reference](call_traits.html#call_traits.reference) + + +#### +[Introduction](call_traits.html#utility.utilities.call_traits.introduction "Introduction") + All of the contents of [``](../../../../../../boost/call_traits.hpp) are defined inside `namespace boost`. + + The template class [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") encapsulates the "best" + method to pass a parameter of some type `T` + to or from a function, and consists of a collection of `typedef`s + defined as in the table below. The purpose of [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") is to ensure that + problems like ["references to references"](call_traits.html#sec:refs) + never occur, and that parameters are passed in the most efficient manner + possible, as in the [examples](call_traits.html#sec:examples). In each + case, if your existing practice is to use the type defined on the left, + then replace it with the [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") defined type on the + right. + + Note that for compilers that do not support either partial specialization + or member templates, no benefit will occur from using [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"): the [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") defined types will + always be the same as the existing practice in this case. In addition if + only member templates and not partial template specialisation is support + by the compiler (for example Visual C++ 6) then [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") cannot be used with + array types, although it can still be used to solve the reference to reference + problem. + +**Table 1.2. [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + types** + + + +| + Existing practice + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + equivalent + | + Description + | + Notes + | +| --- | --- | --- | --- | +| +`T` + + + (return by value) + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::value\_type` + | + Defines a type that represents the "value" of type + `T`. + + + Use this for functions that return by value, or possibly for + stored values of type `T`. + | + 2 + | +| +`T&` + + + (return value) + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::reference` + | + Defines a type that represents a reference to type `T`. + + + Use for functions that would normally return a `T&`. + | + 1 + | +| +`const T&` + + + (return value) + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::const\_reference` + | + Defines a type that represents a constant reference to type + `T`. + + + Use for functions that would normally return a `const T&`. + | + 1 + | +| +`const T&` + + + (function parameter) + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::param\_type` + | + Defines a type that represents the "best" way to pass + a parameter of type `T` + to a function. + | + 1,3 + | + + + Notes: + + + +1. If `T` is already reference + type, then [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + is defined such that ["references to references"](call_traits.html#sec:refs) + do not occur (requires partial specialization). +2. If `T` is an array type, + then [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + defines `value\_type` + as a "constant pointer to type" rather than an "array + of type" (requires partial specialization). Note that if you are + using `value\_type` as + a stored value then this will result in storing a "constant pointer + to an array" rather than the array itself. This may or may not + be a good thing depending upon what you actually need (in other words + take care!). +3. If `T` is a small built + in type or a pointer, then `param\_type` + is defined as `T const`, + instead of `T const&`. This can improve the ability + of the compiler to optimize loops in the body of the function if they + depend upon the passed parameter, the semantics of the passed parameter + is otherwise unchanged (requires partial specialization). +#### +[Copy + constructibility](call_traits.html#utility.utilities.call_traits.copy_constructibility "Copy constructibility") + The following table defines which [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") types can always be + copy-constructed from which other types: + +**Table 1.3. Which [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + types can always be copy-constructed from which other types** + + +| | + To `T` + | + To `value\_type` + | + To `reference` + | + To `const\_reference` + | + To `param\_type` + | +| --- | --- | --- | --- | --- | --- | +| + From `T` + | + iff `T` is copy + constructible + | + iff `T` is copy + constructible + | + Yes + | + Yes + | + Yes + | +| + From `value\_type` + | + iff `T` is copy + constructible + | + iff `T` is copy + constructible + | + No + | + No + | + Yes + | +| + From `reference` + | + iff `T` is copy + constructible + | + iff `T` is copy + constructible + | + Yes + | + Yes + | + Yes + | +| + From `const\_reference` + | + iff `T` is copy + constructible + | + No + | + No + | + Yes + | + Yes + | +| + From `param\_type` + | + iff `T` is copy + constructible + | + iff `T` is copy + constructible + | + No + | + No + | + Yes + | + + + If `T` is an assignable type + the following assignments are possible: + +**Table 1.4. Which [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + types are assignable from which other types** + + +| | + To `T` + | + To `value\_type` + | + To `reference` + | + To `const\_reference` + | + To `param\_type` + | +| --- | --- | --- | --- | --- | --- | +| + From `T` + | + Yes + | + Yes + | + - + | + - + | + - + | +| + From `value\_type` + | + Yes + | + Yes + | + - + | + - + | + - + | +| + From `reference` + | + Yes + | + Yes + | + - + | + - + | + - + | +| + From `const\_reference` + | + Yes + | + Yes + | + - + | + - + | + - + | +| + From `param\_type` + | + Yes + | + Yes + | + - + | + - + | + - + | + +#### +[Examples](call_traits.html#utility.utilities.call_traits.examples "Examples") + The following table shows the effect that [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") has on various types. + +**Table 1.5. Examples of [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + types** + + +| | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::`value\_type` + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::`reference` + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::`const\_reference` + | +[`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::`param\_type` + | + Applies to: + | +| --- | --- | --- | --- | --- | --- | +| + From `my\_class` + | +`my\_class` + | +`my\_class&` + | +`const my\_class&` + | +`my\_class const&` + | + All user-defined types + | +| + From `int` + | +`int` + | +`int&` + | +`const int&` + | +`int const` + | + All small built-in types + | +| + From `int\*` + | +`int\*` + | +`int\*&` + | +`int\* +const &` + | +`int\* +const` + | + All pointer types + | +| + From `int&` + | +`int&` + | +`int&` + | +`const int&` + | +`int&` + | + All reference types + | +| + From `const int&` + | +`const int&` + | +`const int&` + | +`const int&` + | +`const int&` + | + All constant reference types + | +| + From `int[3]` + | +`const int\*` + | +`int(&)[3]` + | +`const int(&)[3]` + | +`const int\* const` + | + All array types + | +| + From `const int[3]` + | +`const int\*` + | +`const int(&)[3]` + | +`const int(&)[3]` + | +`const int\* const` + | + All constant array types + | + + + The table assumes the compiler supports partial specialization: if it does + not then all types behave in the same way as the entry for "`my\_class`", and [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") can not be used with + reference or array types. + +##### +[Example + 1:](call_traits.html#utility.utilities.call_traits.examples.example_1 "Example 1:") + The following class is a trivial class that stores some type `T` by value (see the [`call\_traits\_test.cpp`](../../../../../test/call_traits_test.cpp) file). The aim is to illustrate + how each of the available [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") `typedef`s + may be used: + +``` +template +struct contained +{ + // define our typedefs first, arrays are stored by value + // so value\_type is not the same as result\_type: + typedef typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::param\_type param\_type; + typedef typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::reference reference; + typedef typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::const\_reference const\_reference; + typedef T value\_type; + typedef typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type result\_type; + + // stored value: + value\_type v\_; + + // constructors: + contained() {} + contained(param\_type p) : v\_(p){} + // return byval: + result\_type value() { return v\_; } + // return by\_ref: + reference get() { return v\_; } + const\_reference const\_get()const { return v\_; } + // pass value: + void call(param\_type p){} + +}; + +``` +##### +[Example + 2 (the reference to reference problem):](call_traits.html#utility.utilities.call_traits.examples.example_2_the_reference_to_refer "Example 2 (the reference to reference problem):") + Consider the definition of [`std::binder1st`](https://en.cppreference.com/w/cpp/utility/functional/binder12): + +``` +template +class binder1st : + public [`std::unary\_function`](https://en.cppreference.com/w/cpp/utility/functional/unary_function) +{ +protected: + Operation op; + typename Operation::first\_argument\_type value; +public: + binder1st(const Operation& x, const typename Operation::first\_argument\_type& y); + typename Operation::result\_type operator()(const typename Operation::second\_argument\_type& x) const; +}; + +``` + + + Now consider what happens in the relatively common case that the functor + takes its second argument as a reference, that implies that `Operation::second\_argument\_type` is a reference + type, `operator()` + will now end up taking a reference to a reference as an argument, and + that is not currently legal. The solution here is to modify `operator()` + to use [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"): + +``` +typename Operation::result\_type operator()(typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::param\_type x) const; + +``` + + + Now in the case that `Operation::second\_argument\_type` + is a reference type, the argument is passed as a reference, and the no + "reference to reference" occurs. + + +##### +[Example + 3 (the `make\_pair` problem):](call_traits.html#utility.utilities.call_traits.examples.example_3_the_make_pair_problem "Example 3 (the make_pair problem):") + If we pass the name of an array as one (or both) arguments to `[`std::make\_pair`](https://en.cppreference.com/w/cpp/utility/pair/make_pair)`, then template + argument deduction deduces the passed parameter as "const reference + to array of `T`", + this also applies to string literals (which are really array literals). + Consequently instead of returning a pair of pointers, it tries to return + a pair of arrays, and since an array type is not copy-constructible the + code fails to compile. One solution is to explicitly cast the arguments + to [`std::make\_pair`](https://en.cppreference.com/w/cpp/utility/pair/make_pair) to pointers, but + [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + provides a better automatic solution that works safely even in generic + code where the cast might do the wrong thing: + +``` +template +[`std::pair`](https://en.cppreference.com/w/cpp/utility/pair)< + typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type, + typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type> + make\_pair(const T1& t1, const T2& t2) +{ + return [`std::pair`](https://en.cppreference.com/w/cpp/utility/pair)< + typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type, + typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type>(t1, t2); +} + +``` + + + Here, the deduced argument types will be automatically degraded to pointers + if the deduced types are arrays, similar situations occur in the standard + binders and adapters: in principle in any function that "wraps" + a temporary whose type is deduced. Note that the function arguments to + [`std::make\_pair`](https://en.cppreference.com/w/cpp/utility/pair/make_pair) are not expressed + in terms of [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"): + doing so would prevent template argument deduction from functioning. + + +##### +[Example + 4 (optimising fill):](call_traits.html#utility.utilities.call_traits.examples.example_4_optimising_fill "Example 4 (optimising fill):") + The [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + template will "optimize" the passing of a small built-in type + as a function parameter. This mainly has an effect when the parameter + is used within a loop body. + + In the following example (see [`fill\_example.cpp`](../../../../../../libs/type_traits/examples/fill_example.cpp)), a version of [`std::fill`](https://en.cppreference.com/w/cpp/algorithm/fill) is optimized in two ways: + if the type passed is a single byte built-in type then [`std::memset`](https://en.cppreference.com/w/cpp/string/byte/memset) is used to effect the + fill, otherwise a conventional C++ implementation is used, but with the + passed parameter "optimized" using [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"): + +``` +template +struct filler +{ + template + static void do\_fill(I first, I last, typename [`boost::call\_traits`](../../boost/call_traits.html "Struct template call_traits")::param\_type val) + { + while(first != last) + { + \*first = val; + ++first; + } + } +}; + +template <> +struct filler +{ + template + static void do\_fill(I first, I last, T val) + { + [`std::memset`](https://en.cppreference.com/w/cpp/string/byte/memset)(first, val, last-first); + } +}; + +template +inline void fill(I first, I last, const T& val) +{ + enum { can\_opt = boost::is\_pointer::value + && boost::is\_arithmetic::value + && (sizeof(T) == 1) }; + typedef filler filler\_t; + filler\_t::template do\_fill(first, last, val); +} + +``` + + + The reason that this is "optimal" for small built-in types + is that with the value passed as `T +const` instead of `const T&` the compiler is able to tell both + that the value is constant and that it is free of aliases. With this + information the compiler is able to cache the passed value in a register, + unroll the loop, or use explicitly parallel instructions: if any of these + are supported. Exactly how much mileage you will get from this depends + upon your compiler - we could really use some accurate benchmarking software + as part of boost for cases like this. + + Note that the function arguments to fill are not expressed in terms of + [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"): + doing so would prevent template argument deduction from functioning. + Instead fill acts as a "thin wrapper" that is there to perform + template argument deduction, the compiler will optimise away the call + to fill all together, replacing it with the call to `filler<>::do\_fill`, + which does use [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"). + + + +#### +[Rationale](call_traits.html#utility.utilities.call_traits.rationale "Rationale") + The following notes are intended to briefly describe the rationale behind + choices made in [`call\_traits`](../../boost/call_traits.html "Struct template call_traits"). + + All user-defined types follow "existing practice" and need no + comment. + + Small built-in types, what the standard calls [fundamental + types](https://en.cppreference.com/w/cpp/language/types), differ from existing practice only in the `param\_type` `typedef`. + In this case passing `T const` is compatible with existing practice, + but may improve performance in some cases (see [Example + 4](call_traits.html#sec:example4)). In any case this should never be any worse than existing practice. + + Pointers follow the same rationale as small built-in types. + + For reference types the rationale follows [Example + 2](call_traits.html#sec:refs) - references to references are not allowed, so the [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") members must be defined + such that these problems do not occur. There is a proposal to modify the + language such that "a reference to a reference is a reference" + (issue #106, submitted by Bjarne Stroustrup). [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::value\_type` + and [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")`::param\_type` both provide the same effect + as that proposal, without the need for a language change. In other words, + it's a workaround. + + For array types, a function that takes an array as an argument will degrade + the array type to a pointer type: this means that the type of the actual + parameter is different from its declared type, something that can cause + endless problems in template code that relies on the declared type of a + parameter. + + For example: + +``` +template +struct A +{ + void foo(T t); +}; + +``` + + + In this case if we instantiate `A` + then the declared type of the parameter passed to member function `foo` is `int[2]`, + but its actual type is `const int\*`. If + we try to use the type `T` + within the function body, then there is a strong likelihood that our code + will not compile: + +``` +template +void A::foo(T t) +{ + T dup(t); // doesn't compile for case that T is an array. +} + +``` + + + By using [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + the degradation from array to pointer is explicit, and the type of the + parameter is the same as it's declared type: + +``` +template +struct A +{ + void foo(typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type t); +}; + +template +void A::foo(typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type t) +{ + typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::value\_type dup(t); // OK even if T is an array type. +} + +``` + + + For `value\_type` (return + by value), again only a pointer may be returned, not a copy of the whole + array, and again [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + makes the degradation explicit. The `value\_type` + member is useful whenever an array must be explicitly degraded to a pointer + - [Example 3](call_traits.html#sec:example3) provides the test case. + + Footnote: the array specialisation for [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") is the least well + understood of all the [`call\_traits`](../../boost/call_traits.html "Struct template call_traits") + specialisations. If the given semantics cause specific problems for you, + or does not solve a particular array-related problem, then I would be interested + to hear about it. Most people though will probably never need to use this + specialisation. + + +#### +Reference +##### +Header <[boost/detail/call\_traits.hpp](../../../../../../boost/detail/call_traits.hpp)> +``` +namespace boost { + template struct [call\_traits](../../boost/call_traits.html "Struct template call_traits"); + + template struct [call\_traits](../../boost/call_tra_idm35151228613424.html "Struct template call_traits"); + template struct [call\_traits](../../boost/call_tra_idm35151228608944.html "Struct template call_traits"); + template struct [call\_traits](../../boost/call_tra_idm35151228605104.html "Struct template call_traits"); +} +``` + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../BOOST_BINARY_LITERAL_D.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/call_traits.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/compressed_pair.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/compressed_pair.html new file mode 100644 index 0000000..0e517ad --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/compressed_pair.html @@ -0,0 +1,137 @@ +--- +title: Compressed Pair +copyright: +revised: +--- + + +Compressed Pair + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/call_tra_idm35151228605104.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/compressed_pair.html) + + +### +[Compressed Pair](compressed_pair.html "Compressed Pair") +[Introduction](compressed_pair.html#utility.utilities.compressed_pair.introduction) +[Synopsis](compressed_pair.html#utility.utilities.compressed_pair.synopsis) +[Reference](compressed_pair.html#compressed_pair.reference) +[Acknowledgments](compressed_pair.html#utility.utilities.compressed_pair.acknowledgments) + + +#### +[Introduction](compressed_pair.html#utility.utilities.compressed_pair.introduction "Introduction") + All of the contents of [``](../../../../../../boost/compressed_pair.hpp) are defined inside `namespace boost`. + + The class [`compressed\_pair`](../../boost/compressed_pair.html "Class template compressed_pair") + is very similar to [`std::pair`](https://en.cppreference.com/w/cpp/utility/pair). However, if either of the + template arguments are empty classes, then the [*empty + base-class optimisation*](https://en.cppreference.com/w/cpp/language/ebo) is applied to compress the size + of the pair. + + +#### +[Synopsis](compressed_pair.html#utility.utilities.compressed_pair.synopsis "Synopsis") +``` +cpp +template +class [`compressed\_pair`](../../boost/compressed_pair.html "Class template compressed_pair") +{ +public: + typedef T1 first\_type; + typedef T2 second\_type; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::param\_type first\_param\_type; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::param\_type second\_param\_type; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::reference first\_reference; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::reference second\_reference; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::const\_reference first\_const\_reference; + typedef typename [`call\_traits`](../../boost/call_traits.html "Struct template call_traits")::const\_reference second\_const\_reference; + + compressed\_pair() : base() {} + compressed\_pair(first\_param\_type x, second\_param\_type y); + explicit compressed\_pair(first\_param\_type x); + explicit compressed\_pair(second\_param\_type y); + + compressed\_pair& operator=(const compressed\_pair&); + + first\_reference first(); + first\_const\_reference first() const; + + second\_reference second(); + second\_const\_reference second() const; + + void swap(compressed\_pair& y); +}; + +``` + + + The two members of the pair can be accessed using the member functions + `first()` + and `second()`. + Note that not all member functions can be instantiated for all template + parameter types. In particular [`compressed\_pair`](../../boost/compressed_pair.html "Class template compressed_pair") can be instantiated + for reference and array types, however in these cases the range of constructors + that can be used is limited. If types `T1` + and `T2` are the same type, + then there is only one version of the single-argument constructor, and + this constructor initialises both values in the pair to the passed value. + + Note that if either member is a [POD](https://en.cppreference.com/w/cpp/named_req/PODType) + type, then that member is not zero-initialized by the [`compressed\_pair`](../../boost/compressed_pair.html "Class template compressed_pair") default constructor: + it is up to you to supply an initial value for these types if you want + them to have a default value. + + Note that [`compressed\_pair`](../../boost/compressed_pair.html "Class template compressed_pair") + can not be instantiated if either of the template arguments is a union + type, unless there is compiler support for [`boost::is\_union`](../../../../../../libs/type_traits/index.html), or if [`boost::is\_union`](../../../../../../libs/type_traits/index.html) is specialised for the + union type. + + Finally, a word of caution for Visual C++ 6 users: if either argument is + an empty type, then assigning to that member will produce memory corruption, + unless the empty type has a "do nothing" assignment operator + defined. This is due to a bug in the way VC6 generates implicit assignment + operators. + + +#### +Reference +##### +Header <[boost/detail/compressed\_pair.hpp](../../../../../../boost/detail/compressed_pair.hpp)> +``` +namespace boost { + template class [compressed\_pair](../../boost/compressed_pair.html "Class template compressed_pair"); + + template class [compressed\_pair](../../boost/compress_idm35151228634288.html "Class template compressed_pair"); + template + void swap([compressed\_pair](../../boost/compressed_pair.html "Class template compressed_pair")< T1, T2 > & x, [compressed\_pair](../../boost/compressed_pair.html "Class template compressed_pair")< T1, T2 > & y); +} +``` + +#### +[Acknowledgments](compressed_pair.html#utility.utilities.compressed_pair.acknowledgments "Acknowledgments") + Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and + John Maddock. + + Maintained by [John Maddock](mailto:john%40johnmaddock.co.uk). + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/call_tra_idm35151228605104.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/compressed_pair.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/in_place_factory.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/in_place_factory.html new file mode 100644 index 0000000..01bfc84 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/in_place_factory.html @@ -0,0 +1,393 @@ +--- +title: In-place Factory +copyright: +revised: +--- + + +In-place Factory + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/compress_idm35151228634288.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/in_place_factory_base.html) + + +### +[In-place + Factory](in_place_factory.html "In-place Factory") +[Introduction](in_place_factory.html#utility.utilities.in_place_factory.introduction) +[Framework](in_place_factory.html#utility.utilities.in_place_factory.framework) +[Specification](in_place_factory.html#utility.utilities.in_place_factory.specification) +[Container-side + Usage](in_place_factory.html#utility.utilities.in_place_factory.container_side_usage) +[User-side + Usage](in_place_factory.html#utility.utilities.in_place_factory.user_side_usage) +[Reference](in_place_factory.html#in_place_factory.reference) +[Acknowledgments](in_place_factory.html#utility.utilities.in_place_factory.acknowledgments) + + +#### +[Introduction](in_place_factory.html#utility.utilities.in_place_factory.introduction "Introduction") + Suppose we have a class + +``` +struct X +{ + X ( int, [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) ) ; +}; + +``` + + + And a container for it which supports an empty state. That is, a container + which can contain zero objects: + +``` +struct C +{ + C() : contained\_(0) {} + ~C() { delete contained\_ ; } + X\* contained\_ ; +}; + +``` + + + A container designed to support an empty state typically does not require + the contained type to be [*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible), + but it typically requires it to be [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + as a mechanism to initialize the object to store: + +``` +struct C +{ + C() : contained\_(0) {} + C ( X const& v ) : contained\_ ( new X(v) ) {} + ~C() { delete contained\_ ; } + X\* contained\_ ; +}; + +``` + + + There is a subtle problem with this: since the mechanism used to initialize + the stored object is copy construction, there must exist a previously constructed + source object to copy from. This object is likely to be temporary and serve + no purpose besides being the source: + +``` +void foo() +{ + // Temporary object created. + C c( X(123,"hello") ) ; +} + +``` + + + A solution to this problem is to support direct construction of the contained + object right in the container's storage. + + In this scheme, the user supplies the arguments for the `X` + constructor directly to the container: + +``` +struct C +{ + C() : contained\_(0) {} + C ( X const& v ) : contained\_ ( new X(v) ) {} + C ( int a0, [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) a1 ) : contained\_ ( new X(a0,a1) ) {} + ~C() { delete contained\_ ; } + X\* contained\_ ; +}; + +``` + + +``` +void foo() +{ + // Wrapped object constructed in-place + // No temporary created. + C c(123,"hello"); +} + +``` + + + Clearly, this solution does not scale well since the container must duplicate + all the constructor overloads from the contained type, or at least all + those which are to be supported directly in the container. + + +#### +[Framework](in_place_factory.html#utility.utilities.in_place_factory.framework "Framework") + This library proposes a framework to allow some containers to directly + construct contained objects in-place without requiring the entire set of + constructor overloads from the contained type. It also allows the container + to remove the [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + requirement from the contained type since objects can be directly constructed + in-place without need of a copy. + + The only requirement on the container is that it must provide proper storage. + That is, the container should be correctly aligned and sized. Naturally, + the container will typically support uninitialized storage to avoid the + in-place construction to override a fully-constructed object, as this would + defeat the purpose of in-place construction. + + For this purpose, the framework provides two concepts called: InPlaceFactories + and TypedInPlaceFactories. Helpers to declare these classes are declared + in [``](../../../../../../boost/utility/in_place_factory.hpp) and [``](../../../../../../boost/utility/typed_in_place_factory.hpp). + + Essentially, these classes hold a sequence of actual parameters and a method + to construct an object in place using these parameters. Each member of + the family differs only in the number and type of the parameter list. The + first family takes the type of the object to construct directly in method + provided for that purpose, whereas the second family incorporates that + type in the factory class itself. From the container point of view, using + the framework amounts to calling the factory's method to contruct the object + in place. From the user point of view, it amounts to creating the right + factory object to hold the parameters and pass it to the container. + + The following simplified example shows the basic idea. A complete example + follows the formal specification of the framework: + +``` +struct C +{ + template + C ( InPlaceFactory const& aFactory ) + : + contained\_ ( uninitialized\_storage() ) + { + aFactory.template apply(contained\_); + } + + ~C() + { + contained\_ -> X::~X(); + delete[] contained\_ ; + } + + char\* uninitialized\_storage() { return new char[sizeof(X)] ; } + + char\* contained\_ ; +}; + +void foo() +{ + C c( in\_place(123,"hello") ) ; +} + +``` +#### +[Specification](in_place_factory.html#utility.utilities.in_place_factory.specification "Specification") + The following is the first member of the family of `InPlaceFactory` + classes, along with its corresponding helper template function. The rest + of the family varies only in the number and type of template and constructor + parameters. + +``` +namespace boost { + +struct [`in\_place\_factory\_base`](../../boost/in_place_factory_base.html "Class in_place_factory_base") {}; + +template +class in\_place\_factory : public [`in\_place\_factory\_base`](../../boost/in_place_factory_base.html "Class in_place_factory_base") +{ + public: + in\_place\_factory ( A0 const& a0 ) : m\_a0(a0) {} + + template< class T > + void apply ( void\* address ) const + { + new (address) T(m\_a0); + } + + private: + A0 const& m\_a0 ; +}; + +template +in\_place\_factory in\_place ( A0 const& a0 ) +{ + return in\_place\_factory(a0); +} + +} + +``` + + + Similarly, the following is the first member of the family of `typed\_in\_place\_factory` classes, along + with its corresponding helper template function. The rest of the family + varies only in the number and type of template and constructor parameters. + +``` +namespace boost { + +struct [`typed\_in\_place\_factory\_base`](in_place_factory.html#boost.typed_in_place_factory_base) {}; + +template +class typed\_in\_place\_factory : public [`typed\_in\_place\_factory\_base`](in_place_factory.html#boost.typed_in_place_factory_base) +{ + public: + typed\_in\_place\_factory ( A0 const& a0 ) : m\_a0(a0) {} + + void apply ( void\* address ) const + { + new (address) T(m\_a0); + } + + private: + A0 const& m\_a0 ; +}; + +template +typed\_in\_place\_factory in\_place ( A0 const& a0 ) +{ + return typed\_in\_place\_factory(a0); +} +} + +``` + + + As you can see, the `in\_place\_factory` + and `typed\_in\_place\_factory` + template classes vary only in the way they specify the target type: in + the first family, the type is given as a template argument to the apply + member function while in the second it is given directly as part of the + factory class. + + When the container holds a unique non-polymorphic type, such as the case + of [Boost.Optional](../../../../../../libs/optional/index.html), + it knows the exact dynamic-type of the contained object and can pass it + to the `apply()` + method of a non-typed factory. In this case, end users can use an `in\_place\_factory` instance which can be + constructed without the type of the object to construct. + + However, if the container holds heterogeneous or polymorphic objects, such + as the case of [Boost.Variant](../../../../../../libs/variant/index.html), + the dynamic-type of the object to be constructed must be known by the factory. + In this case, end users must use a `typed\_in\_place\_factory` + instead. + + +#### +[Container-side + Usage](in_place_factory.html#utility.utilities.in_place_factory.container_side_usage "Container-side Usage") + As shown in the introductory simplified example, the container class must + contain methods that accept an instance of these factories and pass the + object's storage to the factory's apply method. + + However, the type of the factory class cannot be completely specified in + the container class because that would defeat the whole purpose of the + factories which is to allow the container to accept a variadic argument + list for the constructor of its contained object. + + The correct function overload must be based on the only distinctive and + common characteristic of all the classes in each family: the base class. + + Depending on the container class, you can use `enable\_if` + to generate the right overload, or use the following dispatch technique, + which is used in the [Boost.Optional](../../../../../../libs/optional/index.html) + class: + +``` +struct C +{ + C() : contained\_(0) {} + C ( X const& v ) : contained\_ ( new X(v) ) {} + + template + C ( Expr const& expr ) + : + contained\_ ( uninitialized\_storage() ) + { + construct(expr,&expr); + } + + ~C() { delete contained\_ ; } + + template + void construct ( InPlaceFactory const& aFactory, boost::[`in\_place\_factory\_base`](../../boost/in_place_factory_base.html "Class in_place_factory_base")\* ) + { + aFactory.template apply(contained\_); + } + + template + void construct ( TypedInPlaceFactory const& aFactory, boost::[`typed\_in\_place\_factory\_base`](in_place_factory.html#boost.typed_in_place_factory_base)\* ) + { + aFactory.apply(contained\_); + } + + X\* uninitialized\_storage() { return static\_cast(new char[sizeof(X)]) ; } + + X\* contained\_ ; +}; + +``` +#### +[User-side + Usage](in_place_factory.html#utility.utilities.in_place_factory.user_side_usage "User-side Usage") + End users pass to the container an instance of a factory object holding + the actual parameters needed to construct the contained object directly + within the container. For this, the helper template function `in\_place` is used. + + The call `in\_place(a0,a1,a2,...,an)` constructs + a (non-typed) `in\_place\_factory` + instance with the given argument list. + + The call `in\_place(a0,a1,a2,...,an)` constructs + a `typed\_in\_place\_factory` + instance with the given argument list for the type `T`. + +``` +void foo() +{ + C a( in\_place(123, "hello") ) ; // in\_place\_factory passed + C b( in\_place(456, "world") ) ; // typed\_in\_place\_factory passed +} + +``` +#### +Reference +##### +Header <[boost/utility/in\_place\_factory.hpp](../../../../../../boost/utility/in_place_factory.hpp)> +``` +namespace boost { + class [in\_place\_factory\_base](../../boost/in_place_factory_base.html "Class in_place_factory_base"); +} +``` +##### +Header <[boost/utility/typed\_in\_place\_factory.hpp](../../../../../../boost/utility/typed_in_place_factory.hpp)> +``` +namespace boost { + class [typed\_in\_place\_factory\_base](../../boost/typed_in_idm35151228676656.html "Class typed_in_place_factory_base"); +} +``` + +#### +[Acknowledgments](in_place_factory.html#utility.utilities.in_place_factory.acknowledgments "Acknowledgments") + Copyright Fernando Luis Cacciola Carballal, 2004 + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/compress_idm35151228634288.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/in_place_factory_base.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/operators.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/operators.html new file mode 100644 index 0000000..236226e --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/operators.html @@ -0,0 +1,2254 @@ +--- +title: Operators +copyright: +revised: +--- + + +Operators + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/typed_in_idm35151228676656.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](result_of.html) + + +### +[Operators](operators.html "Operators") +[Introduction](operators.html#utility.utilities.operators.introduction) +[Rationale](operators.html#utility.utilities.operators.rationale) +[Example](operators.html#utility.utilities.operators.example) +[Usage](operators.html#utility.utilities.operators.usage) +[Arithmetic + Operators](operators.html#utility.utilities.operators.arithmetic_operators) +[Dereference + Operators and Iterator Helpers](operators.html#utility.utilities.operators.dereference_operators_and_iterat) +[Note + for Users of Older Versions](operators.html#utility.utilities.operators.note_for_users_of_older_versions) +[Acknowledgments](operators.html#utility.utilities.operators.acknowledgments) + + +#### +[Introduction](operators.html#utility.utilities.operators.introduction "Introduction") + The header [``](../../../../../../boost/operators.hpp) + supplies several sets of class templates in `namespace +boost`. These templates define + operators at namespace scope in terms of a minimal number of fundamental + operators provided by the class. + + +#### +[Rationale](operators.html#utility.utilities.operators.rationale "Rationale") + Overloaded operators for class types typically occur in groups. If you + can write `x + +y`, you probably also want to + be able to write `x += +y`. If you can write `x < y,` you + also want `x > +y`, `x +>= y,` and `x +<= y`. + + Moreover, unless your class has really surprising behavior, some of these + related operators can be defined in terms of others (e.g. `x >= y` is equivalent to `!(x < y)`). + + Replicating this boilerplate for multiple classes is both tedious and error-prone. + The [``](../../../../../../boost/operators.hpp) + templates help by generating operators for you at namespace scope based + on other operators you have defined in your class. + + If, for example, you declare a class like this: + +``` +class MyInt + : boost::[`operators`](operators.html#sec:arithmetic) +{ + bool operator<(const MyInt& x) const; + bool operator==(const MyInt& x) const; + MyInt& operator+=(const MyInt& x); + MyInt& operator-=(const MyInt& x); + MyInt& operator\*=(const MyInt& x); + MyInt& operator/=(const MyInt& x); + MyInt& operator%=(const MyInt& x); + MyInt& operator|=(const MyInt& x); + MyInt& operator&=(const MyInt& x); + MyInt& operator^=(const MyInt& x); + MyInt& operator++(); + MyInt& operator--(); +}; + +``` + + + then the [`operators`](operators.html#sec:arithmetic)<> + template adds more than a dozen additional operators, such as `operator>`, + `operator<=`, + `operator>=`, + and the binary `operator+`. + +[Two-argument forms](operators.html#sec:two_arg) of the templates + are also provided to allow interaction with other types. + +This is a *Summary of Template Semantics*: + + + +1. Each operator template completes the concept(s) it describes by defining + overloaded operators for its target class. +2. The name of an operator class template indicates the [concept](operators.html#sec:concepts_note) + that its target class will model. +3. Usually, the target class uses an instantiation of the operator class + template as a base class. Some operator templates support an [alternate method](operators.html#sec:explicit_instantiation). +4. The concept can be compound, i.e. it may represent a common combination + of other, simpler concepts. +5. Most operator templates require their target class to support operations + related to the operators supplied by the template. In accordance with + widely accepted [coding + style recommendations](http://www.gotw.ca/gotw/004.htm), the target class is often required to + supply the assignment counterpart operator of the concept's "main + operator." For example, the `addable` + template requires `operator+=(T const&)` + and in turn supplies `operator+(T const&, +T const&)`. + + +*Note on the use of concepts*: + The discussed concepts are not necessarily the standard library's concepts, + such as [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible), + although some of them could be; they are what we call *concepts + with a small 'c'*. In particular, they are different from the + former ones in that they *do not* describe precise semantics + of the operators they require to be defined, except the requirements that + (a) the semantics of the operators grouped in one concept should be consistent + (e.g. effects of evaluating of `a ++= b` + and `a = +a + +b` expressions should be the same), + and (b) that the return types of the operators should follow semantics + of return types of corresponding operators for built-in types (e.g. `operator<` + should return a type convertible to `bool`, + and `T::operator-=` + should return type convertible to `T`). + Such "loose" requirements make `operators` + library applicable to broader set of target classes from different domains, + i.e. eventually more useful. + + +#### +[Example](operators.html#utility.utilities.operators.example "Example") + This example shows how some of the [arithmetic + operator templates](operators.html#sec:arithmetic) can be used with a geometric point class template. + +``` +template +class point // note: private inheritance is OK here! + : boost::addable< point // point + point + , boost::subtractable< point // point - point + , boost::dividable2< point, T // point / T + , boost::multipliable2< point, T // point \* T, T \* point + > > > > +{ +public: + point(T, T); + T x() const; + T y() const; + + point operator+=(const point&); + // point operator+(point, const point&) automatically + // generated by addable. + + point operator-=(const point&); + // point operator-(point, const point&) automatically + // generated by subtractable. + + point operator\*=(T); + // point operator\*(point, const T&) and + // point operator\*(const T&, point) auto-generated + // by multipliable. + + point operator/=(T); + // point operator/(point, const T&) auto-generated + // by dividable. +private: + T x\_; + T y\_; +}; + +// now use the point<> class: +template +T length(const point p) +{ + return sqrt(p.x()\*p.x() + p.y()\*p.y()); +} + +const point right(0, 1); +const point up(1, 0); +const point pi\_over\_4 = up + right; +const point pi\_over\_4\_normalized = pi\_over\_4 / length(pi\_over\_4); + +``` +#### +[Usage](operators.html#utility.utilities.operators.usage "Usage") + + +###### + +[Two-Argument + Template Forms](operators.html#utility.utilities.operators.usage.two_argument_template_forms) +The arguments to a binary operator commonly + have identical types, but it is not unusual to want to define operators + which combine different types. For [example](operators.html#sec:example), + one might want to multiply a mathematical vector by a scalar. The two-argument + template forms of the arithmetic operator templates are supplied for this + purpose. When applying the two-argument form of a template, the desired + return type of the operators typically determines which of the two types + in question should be derived from the operator template. + + For example, if the result of `T ++ U` + is of type `T`, then `T` (not `U`) + should be derived from [`addable`](operators.html#table:addable2). + The comparison templates [`less\_than\_comparable`](operators.html#table:less_than_comparable2), [`equality\_comparable`](operators.html#table:equality_comparable2), [`equivalent`](operators.html#table:equivalent2), and [`partially\_ordered`](operators.html#table:partially_ordered2) are exceptions to this guideline, + since the return type of the operators they define is `bool`. + + On compilers which do not support partial specialization, the two-argument + forms must be specified by using the names shown below with the trailing + `'2'`. The single-argument forms + with the trailing `'1'` are provided + for symmetry and to enable certain applications of the [base + class chaining](operators.html#sec:chaining) technique. + +*Mixed Arithmetics*: + Another application of the two-argument template forms is for mixed arithmetics + between a type `T` and a + type `U` that is convertible + to `T`. In this case there + are two ways where the two-argument template forms are helpful: one is + to provide the respective signatures for operator overloading, the second + is performance. + + With respect to the operator overloading assume e.g. that `U` is `int`, + that `T` is an user-defined + unlimited integer type, and that `double +operator-(double, const T&)` exists. + + If one wants to compute `int - T` and + does not provide `T operator-(int, +const T&)`, the compiler will consider `double operator-(double, const T&)` + to be a better match than `T operator-(const T&, const T&)`, + which will probably be different from the user's intention. + + To define a complete set of operator signatures, additional 'left' forms + of the two-argument template forms are provided [`subtractable2\_left`](operators.html#table:subtractable2_left), [`dividable2\_left`](operators.html#table:dividable2_left), and [`modable2\_left`](operators.html#table:modable2_left) that define the signatures for + non-commutative operators where `U` + appears on the left hand side (`operator-(const U&, const T&)`, `operator/(const U&, const T&)`, `operator%(const U&, const T&)`). + + With respect to the performance observe that when one uses the single type + binary operator for mixed type arithmetics, the type `U` + argument has to be converted to type `T`. + In practice, however, there are often more efficient implementations of, + say `T::operator-=(const U&)` that avoid unnecessary conversions + from `U` to `T`. + + The two-argument template forms of the arithmetic operator create additional + operator interfaces that use these more efficient implementations. There + is, however, no performance gain in the 'left' forms: they still need a + conversion from `U` to `T` and have an implementation equivalent + to the code that would be automatically created by the compiler if it considered + the single type binary operator to be the best match. + + + +###### + +[Base + Class Chaining and Object Size](operators.html#utility.utilities.operators.usage.base_class_chaining_and_object_s) + Every operator class template, except the [arithmetic + examples](operators.html#sec:ex_oprs) and the [iterator helpers](operators.html#sec:iterator), + has an additional, but optional, template type parameter `B`. This parameter will be a publicly-derived + base class of the instantiated template. This means it must be a class + type. It can be used to avoid the bloating of object sizes that is commonly + associated with multiple-inheritance from several empty base classes. See + the [note for users of older versions](operators.html#sec:old_lib_note) + for more details. + + To provide support for a group of operators, use the `B` + parameter to chain operator templates into a single-base class hierarchy, + demostrated in the [usage example](operators.html#sec:example). The + technique is also used by the composite operator templates to group operator + definitions. If a chain becomes too long for the compiler to support, try + replacing some of the operator templates with a single grouped operator + template that chains the old templates together; the length limit only + applies to the number of templates directly in the chain, not those hidden + in group templates. + +*Caveat*: to chain to a base class which is *not* + a Boost operator template when using the [single-argument + form](operators.html#sec:two_arg) of a Boost operator template, you must specify the operator + template with the trailing `'1'` + in its name. Otherwise the library will assume you mean to define a binary + operation combining the class you intend to use as a base class and the + class you're deriving. + + + +###### + +[Separate + Explicit Instantiation](operators.html#utility.utilities.operators.usage.separate_explicit_instantiation) + On some compilers (e.g. Borland, GCC) even single-inheritance seems to + cause an increase in object size in some cases. If you are not defining + a class template, you may get better object-size performance by avoiding + derivation altogether, and instead explicitly instantiating the operator + template as follows: + +``` +class my\_class // lose the inheritance... +{ + //... +}; + +// explicitly instantiate the operators I need. +template struct less\_than\_comparable; +template struct equality\_comparable; +template struct incrementable; +template struct decrementable; +template struct addable; +template struct subtractable; + +``` + + + Note that some operator templates cannot use this workaround and must be + a base class of their primary operand type. Those templates define operators + which must be member functions, and the workaround needs the operators + to be independent `friend` functions. + The relevant templates are: + + + +* [`dereferenceable<>`](operators.html#table:dereferenceable) +* [`indexable<>`](operators.html#table:indexable) +* Any composite operator template that includes at least one of the above + + + As Daniel Krugler pointed out, this technique violates C++11 §14.6.5/2 [temp.inject] + and is thus non-portable. The reasoning is, that the operators injected + by the instantiation of e.g. `less\_than\_comparable` can not be found by ADL according to + the rules given by C++11 §3.4.2/2 [basic.lookup.argdep], since `my\_class` is not an associated class of + `less\_than\_comparable`. + Thus only use this technique if all else fails. + + + +###### + +[Requirement + Portability](operators.html#utility.utilities.operators.usage.requirement_portability) + Many compilers (e.g. MSVC 6.3, GCC 2.95.2) will not enforce the requirements + in the operator template tables unless the operations which depend on them + are actually used. This is not standard-conforming behavior. In particular, + although it would be convenient to derive all your classes which need binary + operators from the [`operators<>`](operators.html#table:operators1) and [`operators2<>`](operators.html#table:operators2) + templates, regardless of whether they implement all the requirements of + those templates, this shortcut is not portable. Even if this currently + works with your compiler, it may not work later. + + +#### +[Arithmetic + Operators](operators.html#utility.utilities.operators.arithmetic_operators "Arithmetic Operators") + The arithmetic operator templates ease the task of creating a custom numeric + type. Given a core set of operators, the templates add related operators + to the numeric class. These operations are like the ones the standard arithmetic + types have, and may include comparisons, adding, incrementing, logical + and bitwise manipulations, etc. Further, since most numeric types need + more than one of these operators, some templates are provided to combine + several of the basic operator templates in one declaration. + + The requirements for the types used to instantiate the simple operator + templates are specified in terms of expressions which must be valid and + the expression's return type. The composite operator templates only list + what other templates they use. The supplied operations and requirements + of the composite operator templates can be inferred from the operations + and requirements of the listed components. + + + +###### + +[Simple + Arithmetic Operators](operators.html#utility.utilities.operators.arithmetic_operators.simple_arithmetic_operators) + These templates are "simple" since they provide operators based + on a single operation the base type has to provide. They have an additional + optional template parameter `B`, + which is not shown, for the [base class chaining](operators.html#sec:chaining) + technique. + + The primary operand type `T` + needs to be of class type, built-in types are not supported. + +**Table 1.6. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + primary operand type + | +| +`t,t1` + | + values of type `T` + | +| +`U` + | + alternate operand type + | +| +`u` + | + value of type `U` + | + + +**Table 1.7. Simple Arithmetic Operator Template Classes** + + + +| + Template + | + Supplied Operations + | + Requirements + | + Propagates constexpr + | +| --- | --- | --- | --- | +| +`less\_than\_comparable` + + +[`less\_than\_comparable1`](operators.html#sec:arithmetic)`` + | +`bool operator>(const +T&, +const T&)` + + +`bool operator<=(const +T&, +const T&)` + + +`bool operator>=(const +T&, +const T&)` + | +`t < +t1`. + + + Return convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering) + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`less\_than\_comparable` + + +[`less\_than\_comparable2`](operators.html#sec:arithmetic)`` + | +`bool operator<=(const +T&, +const U&)` + + +`bool operator>=(const +T&, +const U&)` + + +`bool operator>(const +U&, +const T&)` + + +`bool operator<(const +U&, +const T&)` + + +`bool operator<=(const +U&, +const T&)` + + +`bool operator>=(const +U&, +const T&)` + | +`t < +u`. `t +> u`. + + + Returns convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering). + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`equality\_comparable` + + +[`equality\_comparable1`](operators.html#sec:arithmetic)`` + | +`bool operator!=(const +T&, +const T&)` + | +`t == +t1`. + + + Return convertible to `bool`. + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`equality\_comparable` + + +[`equality\_comparable2`](operators.html#sec:arithmetic)`` + | +`bool operator==(const +U&, +const T&)` + + +`bool operator!=(const +U&, +const T&)` + + +`bool operator!=(const +T&, +const U&)` + | +`t == +u`. + + + Return convertible to `bool`. + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`addable` + + +`addable1` + | +`T operator+(const +T&, +const T&)` + | +`T temp(t); temp ++= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`addable` + + +`addable2` + | +`T operator+(const +T&, +const U&)` + + +`T operator+(const +U&, +const T& )` + | +`T temp(t); temp ++= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`subtractable` + + +`subtractable1` + | +`T operator-(const +T&, +const T&)` + | +`T temp(t); temp +-= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`subtractable` + + +`subtractable2` + | +`T operator-(const +T&, +const U&)` + | +`T temp(t); temp +-= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`subtractable2\_left` + | +`T operator-(const +U&, +const T&)` + | +`T temp(u); temp +-= t`. + + + Return convertible to `T`. + | + No + | +| +`multipliable` + + +`multipliable1` + | +`T operator\*(const +T&, +const T&)` + | +`T temp(t); temp +\*= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`multipliable` + + +`multipliable2` + | +`T operator\*(const +T&, +const U&)` + + +`T operator\*(const +U&, +const T&)` + | +`T temp(t); temp +\*= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`dividable` + + +`dividable1` + | +`T operator/(const +T&, +const T&)` + | +`T temp(t); temp +/= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`dividable` + + +`dividable2` + | +`T operator/(const +T&, +const U&)` + | +`T temp(t); temp +/= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`dividable2\_left` + | +`T operator/(const +U&, +const T&)` + | +`T temp(u); temp +/= t`. + + + Return convertible to `T`. + | + No + | +| +`modable` + + +`modable1` + | +`T operator%(const +T&, +const T&)` + | +`T temp(t); temp +%= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`modable` + + +`modable2` + | +`T operator%(const +T&, +const U&)` + | +`T temp(t); temp +%= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`modable2\_left` + | +`T operator%(const +U&, +const T&)` + | +`T temp(u); temp +%= t`. + + + Return convertible to `T`. + | + No + | +| +`orable` + + +`orable1` + | +`T operator|(const +T&, +const T&)` + | +`T temp(t); temp +|= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`orable` + + +`orable2` + | +`T operator|(const +T&, +const U&)` + + +`T operator|(const +U&, +const T&)` + | +`T temp(t); temp +|= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`andable` + + +`andable1` + | +`T operator&(const +T&, +const T&)` + | +`T temp(t); temp +&= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`andable` + + +`andable2` + | +`T operator&(const +T&, +const U&)` + + +`T operator&(const +U&, +const T&)` + | +`T temp(t); temp +&= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`xorable` + + +`xorable1` + | +`T operator^(const +T&, +const T&)` + | +`T temp(t); temp +^= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`xorable` + + +`xorable2` + | +`T operator^(const +T&, +const U&)` + + +`T operator^(const +U&, +const T&)` + | +`T temp(t); temp +^= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`incrementable` + | +`T operator++(T&, int)` + | +`T temp(t); ++t` + + + Return convertible to `T`. + | + No + | +| +`decrementable` + | +`T operator--(T&, int)` + | +`T temp(t); --t;` + + + Return convertible to `T`. + | + No + | +| +`left\_shiftable` + + +`left\_shiftable1` + | +`T operator<<(const +T&, +const T&)` + | +`T temp(t); temp +<<= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`left\_shiftable` + + +`left\_shiftable2` + | +`T operator<<(const +T&, +const U&)` + | +`T temp(t); temp +<<= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`right\_shiftable` + + +`right\_shiftable1` + | +`T operator>>(const +T&, +const T&)` + | +`T temp(t); temp +>>= t1`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`right\_shiftable` + + +`right\_shiftable2` + | +`T operator>>(const +T&, +const U&)` + | +`T temp(t); temp +>>= u`. + + + Return convertible to `T`. + See the [Symmetry Note](operators.html#sec:symmetry). + | + No + | +| +`equivalent` + + +[`equivalent1`](operators.html#sec:arithmetic)`` + | +`bool operator==(const +T&, +const T&)` + | +`t < +t1`. + + + Return convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering). + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`equivalent` + + +[`equivalent2`](operators.html#sec:arithmetic)`` + | +`bool operator==(const +T&, +const U&)` + | +`t < +u`. `t +> u`. + + + Returns convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering). + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`partially\_ordered` + + +[`partially\_ordered1`](operators.html#sec:arithmetic)`` + | +`bool operator>(const +T&, +const T&)` + + +`bool operator<=(const +T&, +const T&)` + + +`bool operator>=(const +T&, +const T&)` + | +`t < +t1`. `t +== t1`. + + + Returns convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering). + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | +| +`partially\_ordered` + + +[`partially\_ordered2`](operators.html#sec:arithmetic)`` + | +`bool operator<=(const +T&, +const U&)` + + +`bool operator>=(const +T&, +const U&)` + + +`bool operator>(const +U&, +const T&)` + + +`bool operator<(const +U&, +const T&)` + + +`bool operator<=(const +U&, +const T&)` + + +`bool operator>=(const +U&, +const T&)` + | +`t < +u`. `t +> u`. + `t == +u`. + + + Returns convertible to `bool`. + See the [Ordering Note](operators.html#sec:ordering). + | + Since `C++11`, except [MSVC + < v19.22](https://developercommunity.visualstudio.com/content/problem/414193/rejects-valid-constexpr-marked-friend-function-def.html) + | + + +*Ordering Note*: The [`less\_than\_comparable`](operators.html#table:less_than_comparable1) and [`partially\_ordered`](operators.html#table:partially_ordered1) + templates provide the same set of operations. However, the workings of + [`less\_than\_comparable`](operators.html#table:less_than_comparable1) assume that all values of type + `T` can be placed in a total + order. If that is not true (e.g. Not-a-Number values in IEEE floating point + arithmetic), then [`partially\_ordered`](operators.html#table:partially_ordered1) + should be used. The [`partially\_ordered`](operators.html#table:partially_ordered1) + template can be used for a totally-ordered type, but it is not as efficient + as [`less\_than\_comparable`](operators.html#table:less_than_comparable1). This rule also applies for + [`less\_than\_comparable`](operators.html#table:less_than_comparable2) + and [`partially\_ordered`](operators.html#table:partially_ordered2) + with respect to the ordering of all `T` + and `U` values, and for both + versions of [`equivalent<>`](operators.html#table:equivalent1). The solution for [`equivalent<>`](operators.html#table:equivalent1) is to write a custom `operator==` + for the target class. + +*Symmetry Note*: Before talking + about symmetry, we need to talk about optimizations to understand the reasons + for the different implementation styles of operators. Let's have a look + at `operator+` + for a class `T` as an example: + +``` +T operator+( const T& lhs, const T& rhs ) +{ + return T( lhs ) += rhs; +} + +``` + + + This would be a normal implementation of `operator+`, but it is not an efficient one. An unnamed + local copy of `lhs` is created, + `operator+=` + is called on it and it is copied to the function return value (which is + another unnamed object of type `T`). + The standard doesn't generally allow the intermediate object to be optimized + away: + +> +> *C++11 §3.7.3/3 [basic.stc.auto]: Automatic storage duration:* +> If a variable with automatic storage duration has initialization or a +> destructor with side effects, it shall not be destroyed before the end +> of its block, nor shall it be eliminated as an optimization even if it +> appears to be unused, except that a class object or its copy/move may +> be eliminated as specified in 12.8. +> +> +> + The reference to §12.8 is important for us: + +> +> +> *C++11 §12.8/31 [class.copy]: Copying and moving class objects:* +> When certain criteria are met, an implementation is allowed to omit the +> copy/move construction of a class object, even if the copy/move constructor +> and/or destructor for the object have side effects. (…) This elision of +> copy/move operations, called *copy elision*, is permitted +> in the following circumstances (which may be combined to eliminate multiple +> copies): +> +> +> +> +> — in a `return` statement in +> a function with a class return type, when the expression is the name +> of a non-volatile automatic object (other than a function or catch-clause +> parameter) with the same cv- unqualified type as the function return +> type, the copy/move operation can be omitted by constructing the automatic +> object directly into the function's return value +> +> +> +> +> (…) +> +> +> +> + This optimization is known as the named return value optimization ([NRVO](https://en.cppreference.com/w/cpp/language/copy_elision#Non-mandatory_elision_of_copy.2Fmove_.28since_C.2B.2B11.29_operations)), + which leads us to the following implementation for `operator+`: + +``` +T operator+( const T& lhs, const T& rhs ) +{ + T nrv( lhs ); + nrv += rhs; + return nrv; +} + +``` + + + Given this implementation, the compiler is allowed to remove the intermediate + object. Sadly, not all compilers implement the NRVO, some even implement + it in an incorrect way which makes it useless here. Without the NRVO, the + NRVO-friendly code is no worse than the original code showed above, but + there is another possible implementation, which has some very special properties: + +``` +T operator+( T lhs, const T& rhs ) +{ + return lhs += rhs; +} + +``` + + + The difference to the first implementation is that `lhs` + is not taken as a constant reference used to create a copy; instead, `lhs` is a by-value parameter, thus it + is already the copy needed. This allows another optimization (C++11 §12.2/2 + [class.temporary]) for some cases. + + Consider `a + +b + +c` where the result of `a + b` is not copied when used as `lhs` when adding `c`. + This is more efficient than the original code, but not as efficient as + a compiler using the NRVO. For most people, it is still preferable for + compilers that don't implement the NRVO, but the `operator+` now has a different function signature. + Also, the number of objects created differs for `(a + b ) + c` and + `a + +( b ++ c +)`. + + Most probably, this won't be a problem for you, but if your code relies + on the function signature or a strict symmetric behaviour, you should set + `BOOST\_FORCE\_SYMMETRIC\_OPERATORS` + in your user-config. This will force the NRVO-friendly implementation to + be used even for compilers that do not implement the NRVO. + + + +###### + +[Grouped + Arithmetic Operators](operators.html#utility.utilities.operators.arithmetic_operators.grouped_arithmetic_operators) + The following templates provide common groups of related operations. For + example, since a type which is addable is usually also subtractable, the + [`additive`](operators.html#table:additive1) + template provides the combined operators of both. The grouped operator + templates have an additional optional template parameter `B`, which is not shown, for the [base class chaining](operators.html#sec:chaining) technique. + +**Table 1.8. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + primary operand type + | +| +`U` + | + alternate operand type + | + + +**Table 1.9. Grouped Arithmetic Operator Template Classes** + +| + Template + | + Component Operator Templates + | +| --- | --- | +| +`totally\_ordered` + + +[`totally\_ordered1`](operators.html#sec:arithmetic)`` + | +[`less\_than\_comparable`](operators.html#table:less_than_comparable1) + + +[`equality\_comparable`](operators.html#table:equality_comparable1) + | +| +`totally\_ordered` + + +[`totally\_ordered2`](operators.html#sec:arithmetic)`` + | +[`less\_than\_comparable`](operators.html#table:less_than_comparable2) + + +[`equality\_comparable`](operators.html#table:equality_comparable2) + | +| +`additive` + + +[`additive1`](operators.html#sec:arithmetic)`` + | +[`addable`](operators.html#table:addable1) + + +[`subtractable`](operators.html#table:subtractable1) + | +| +`additive` + + +[`additive2`](operators.html#sec:arithmetic)`` + | +[`addable`](operators.html#table:addable2) + + +[`subtractable`](operators.html#table:subtractable2) + | +| +`multiplicative` + + +[`multiplicative1`](operators.html#sec:arithmetic)`` + | +[`multipliable`](operators.html#table:multipliable1) + + +[`dividable`](operators.html#table:dividable1) + | +| +`multiplicative` + + +[`multiplicative2`](operators.html#sec:arithmetic)`` + | +[`multipliable`](operators.html#table:multipliable2) + + +[`dividable`](operators.html#table:dividable2) + | +| +`integer\_multiplicative` + + +[`integer\_multiplicative1`](operators.html#sec:arithmetic)`` + | +[`multiplicative`](operators.html#table:multiplicative1) + + +[`modable`](operators.html#table:modable1) + | +| +`integer\_multiplicative` + + +[`integer\_multiplicative2`](operators.html#sec:arithmetic)`` + | +[`multiplicative`](operators.html#table:multiplicative2) + + +[`modable`](operators.html#table:modable2) + | +| +`arithmetic` + + +[`arithmetic1`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive1) + + +[`multiplicative`](operators.html#table:multiplicative1) + | +| +`arithmetic` + + +[`arithmetic2`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive2) + + +[`multiplicative`](operators.html#table:multiplicative2) + | +| +`integer\_arithmetic` + + +[`integer\_arithmetic1`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive1) + + +[`integer\_multiplicative`](operators.html#table:integer_multiplicative1) + | +| +`integer\_arithmetic` + + +[`integer\_arithmetic2`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive2) + + +[`integer\_multiplicative`](operators.html#table:integer_multiplicative2) + | +| +`bitwise` + + +[`bitwise1`](operators.html#sec:arithmetic)`` + | +[`xorable`](operators.html#table:xorable1) + + +[`andable`](operators.html#table:andable1) + + +[`orable`](operators.html#table:orable1) + | +| +`bitwise` + + +[`bitwise2`](operators.html#sec:arithmetic)`` + | +[`xorable`](operators.html#table:xorable2) + + +[`andable`](operators.html#table:andable2) + + +[`orable`](operators.html#table:orable2) + | +| +`unit\_steppable` + | +[`incrementable`](operators.html#table:incrementable) + + +[`decrementable`](operators.html#table:decrementable) + | +| +`shiftable` + + +[`shiftable1`](operators.html#sec:arithmetic)`` + | +[`left\_shiftable`](operators.html#table:left_shiftable1) + + +[`right\_shiftable`](operators.html#table:right_shiftable1) + | +| +`shiftable` + + +[`shiftable2`](operators.html#sec:arithmetic)`` + | +[`left\_shiftable`](operators.html#table:left_shiftable2) + + +[`right\_shiftable`](operators.html#table:right_shiftable2) + | +| +`ring\_operators` + + +[`ring\_operators1`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive1) + + +[`multipliable`](operators.html#table:multipliable1) + | +| +`ring\_operators` + + +[`ring\_operators2`](operators.html#sec:arithmetic)`` + | +[`additive`](operators.html#table:additive2) + + +[`subtractable2\_left`](operators.html#table:subtractable2_left) + + +[`multipliable`](operators.html#table:multipliable2) + | +| +`ordered\_ring\_operators` + + +[`ordered\_ring\_operators1`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators1) + + +[`totally\_ordered`](operators.html#table:totally_ordered1) + | +| +`ordered\_ring\_operators` + + +[`ordered\_ring\_operators2`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators2) + + +[`totally\_ordered`](operators.html#table:totally_ordered2) + | +| +`field\_operators` + + +[`field\_operators1`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators1) + + +[`dividable`](operators.html#table:dividable1) + | +| +`field\_operators` + + +[`field\_operators2`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators2) + + +[`dividable`](operators.html#table:dividable2) + + +[`dividable2\_left`](operators.html#table:dividable2_left) + | +| +`ordered\_field\_operators` + + +[`ordered\_field\_operators1`](operators.html#sec:arithmetic)`` + | +[`field\_operators`](operators.html#table:field_operators1) + + +[`totally\_ordered`](operators.html#table:totally_ordered1) + | +| +`ordered\_field\_operators` + + +[`ordered\_field\_operators2`](operators.html#sec:arithmetic)`` + | +[`field\_operators`](operators.html#table:field_operators2) + + +[`totally\_ordered`](operators.html#table:totally_ordered2) + | +| +`euclidean\_ring\_operators` + + +[`euclidean\_ring\_operators1`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators1) + + +[`dividable`](operators.html#table:dividable1) + + +[`modable`](operators.html#table:modable1) + | +| +`euclidean\_ring\_operators` + + +[`euclidean\_ring\_operators2`](operators.html#sec:arithmetic)`` + | +[`ring\_operators`](operators.html#table:ring_operators2) + + +[`dividable`](operators.html#table:dividable2) + + +[`dividable2\_left`](operators.html#table:dividable2_left) + + +[`modable`](operators.html#table:modable2) + + +[`modable2\_left`](operators.html#table:modable2_left) + | +| +`ordered\_euclidean\_ring\_operators` + + +[`ordered\_euclidean\_ring\_operators1`](operators.html#sec:arithmetic)`` + | +[`euclidean\_ring\_operators`](operators.html#table:euclidean_ring_operators1) + + +[`totally\_ordered`](operators.html#table:totally_ordered1) + | +| +`ordered\_euclidean\_ring\_operators` + + +[`ordered\_euclidean\_ring\_operators2`](operators.html#sec:arithmetic)`` + | +[`euclidean\_ring\_operators`](operators.html#table:euclidean_ring_operators2) + + +[`totally\_ordered`](operators.html#table:totally_ordered2) + | + + +*Spelling: euclidean vs. euclidian*: Older versions + of the Boost.Operators library used "`euclidian`", + but it was pointed out that "`euclidean`" + is the more common spelling. To be compatible with older version, the library + now supports both spellings. + + + +###### + +[Example + Templates](operators.html#utility.utilities.operators.arithmetic_operators.example_templates) + The arithmetic operator class templates [`operators<>`](operators.html#table:operators1) + and [`operators2<>`](operators.html#table:operators2) are examples of non-extensible + operator grouping classes. These legacy class templates, from previous + versions of the header, cannot be used for [base + class chaining](operators.html#sec:chaining). + +**Table 1.10. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + primary operand type + | +| +`U` + | + alternate operand type + | + + +**Table 1.11. Final Arithmetic Operator Template Classes** + +| + Template + | + Component Operator Templates + | +| --- | --- | +| +[`operators`](operators.html#sec:arithmetic)`` + | +[`totally\_ordered`](operators.html#table:totally_ordered1) + + +[`integer\_arithmetic`](operators.html#table:integer_arithmetic1) + + +[`bitwise`](operators.html#table:bitwise1) + + +[`unit\_steppable`](operators.html#table:unit_steppable) + | +| +[`operators`](operators.html#sec:arithmetic)`` + + +[`operators2`](operators.html#sec:arithmetic)`` + | +[`totally\_ordered`](operators.html#table:totally_ordered2) + + +[`integer\_arithmetic`](operators.html#table:integer_arithmetic2) + + +[`bitwise`](operators.html#table:bitwise2) + | + + +*Arithmetic Operators Demonstration and + Test Program*: The [`operators\_test.cpp`](../../../../../test/operators_test.cpp) program demonstrates the + use of the arithmetic operator templates, and can also be used to verify + correct operation. Check the compiler status report for the test results + with selected platforms. + + +#### +[Dereference + Operators and Iterator Helpers](operators.html#utility.utilities.operators.dereference_operators_and_iterat "Dereference Operators and Iterator Helpers") + The [iterator helper](operators.html#sec:iterator) templates ease + the task of creating a custom iterator. Similar to arithmetic types, a + complete iterator has many operators that are "redundant" and + can be implemented in terms of the core set of operators. + + The [dereference operators](operators.html#sec:dereference) were motivated + by the [iterator helpers](operators.html#sec:iterator), but are often + useful in non-iterator contexts as well. Many of the redundant iterator + operators are also arithmetic operators, so the iterator helper classes + borrow many of the operators defined above. In fact, only two new operators + need to be defined: the pointer-to-member `operator->` and the subscript `operator[]`. + + The requirements for the types used to instantiate the dereference operators + are specified in terms of expressions which must be valid and their return + type. The composite operator templates list their component templates, + which the instantiating type must support, and possibly other requirements. + + + +###### + +[Dereference + Operators](operators.html#utility.utilities.operators.dereference_operators_and_iterat.dereference_operators) + All the dereference operator templates in this table accept an optional + template parameter (not shown) to be used for [base + class chaining](operators.html#sec:chaining). + +**Table 1.12. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + operand type + | +| +`D` + | +`difference\_type` + | +| +`i` + | + object of type `T` + (an iterator) + | +| +`P` + | +`pointer` type + | +| +`R` + | +`reference` type + | +| +`n` + | + object of type `D` + (an index) + | + + +**Table 1.13. Dereference Operator Template Classes** + + +| + Template + | + Supplied Operations + | + Requirements + | +| --- | --- | --- | +| +[`dereferenceable`](operators.html#sec:arithmetic)`` + | +`P operator->() const` + | +`\*i`. + Address of the returned value convertible to `P`. + | +| +[`indexable`](operators.html#sec:arithmetic)`` + | +`R operator[](D +n) +const` + | +`\*(i ++ n)`. Return of type `R`. + | + +###### + +[Grouped + Iterator Operators](operators.html#utility.utilities.operators.dereference_operators_and_iterat.grouped_iterator_operators) + There are five iterator operator class templates, each for a different + category of iterator. The following table shows the operator groups for + any category that a custom iterator could define. These class templates + have an additional optional template parameter `B`, + which is not shown, to support [base class + chaining](operators.html#sec:chaining). + +**Table 1.14. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + operand type + | +| +`D` + | +`difference\_type` + | +| +`V` + | +`value\_type` + | +| +`P` + | +`pointer` type + | +| +`R` + | +`reference` type + | + + +**Table 1.15. Iterator Operator Class Templates** + +| + Template + | + Component Operator Templates + | +| --- | --- | +| +[`input\_iteratable`](operators.html#sec:arithmetic)`` + | +[`equality\_comparable`](operators.html#table:equality_comparable1) + + +[`incrementable`](operators.html#table:incrementable) + + +[`dereferenceable`](operators.html#table:dereferenceable) + | +| +[`output\_iteratable`](operators.html#sec:arithmetic)`` + | +[`incrementable`](operators.html#table:incrementable) + | +| +[`forward\_iteratable`](operators.html#sec:arithmetic)`` + | +[`input\_iteratable`](operators.html#table:input_iteratable) + | +| +[`bidirectional\_iteratable`](operators.html#sec:arithmetic)`` + | +[`forward\_iteratable`](operators.html#table:forward_iteratable) + + +[`decrementable`](operators.html#table:decrementable) + | +| +[`random\_access\_iteratable`](operators.html#sec:arithmetic)`` + | +[`bidirectional\_iteratable`](operators.html#table:bidirectional_iteratable) + + +[`totally\_ordered`](operators.html#table:totally_ordered1) + + +[`additive`](operators.html#table:additive2) + + +[`indexable`](operators.html#table:indexable) + | + +###### + +[Iterator + Helpers](operators.html#utility.utilities.operators.dereference_operators_and_iterat.iterator_helpers) + There are also five iterator helper class templates, each corresponding + to a different iterator category. These classes cannot be used for [base class chaining](operators.html#sec:chaining). The following summaries + show that these class templates supply both the iterator operators from + the [iterator operator class templates](operators.html#sec:grpd_iter_oprs) + and the iterator `typedef`s + required by the C++ standard, such as `iterator\_category` + and `value\_type`. + +**Table 1.16. Notation** + +| + Key + | + Description + | +| --- | --- | +| +`T` + | + operand type + | +| +`D` + | +`difference\_type` + | +| +`V` + | +`value\_type` + | +| +`P` + | +`pointer` type + | +| +`R` + | +`reference` type + | +| +`x1`, `x2` + | + objects of type `T` + | + + +**Table 1.17. Helper Class Templates** + +| + Template + | + Operations and Requirements + | +| --- | --- | +| +[`input\_iterator\_helper`](operators.html#sec:arithmetic)`` + | + Supports the operations and has the requirements of [`input\_iteratable`](operators.html#table:input_iteratable) + | +| +[`output\_iterator\_helper`](operators.html#sec:arithmetic)`` + | + Supports the operations and has the requirements of [`output\_iteratable`](operators.html#table:output_iteratable) + + + See also [[1](operators.html#note:1)], [[2](operators.html#note:2)]. + | +| +[`forward\_iterator\_helper`](operators.html#sec:arithmetic)`` + | + Supports the operations and has the requirements of [`forward\_iteratable`](operators.html#table:forward_iteratable) + | +| +[`bidirectional\_iterator\_helper`](operators.html#sec:arithmetic)`` + | + Supports the operations and has the requirements of [`bidirectional\_iteratable`](operators.html#table:bidirectional_iteratable) + | +| +[`random\_access\_iterator\_helper`](operators.html#sec:arithmetic)`` + | + Supports the operations and has the requirements of [`random\_access\_iteratable`](operators.html#table:random_access_iteratable) + + + To satisfy [*RandomAccessIterator*](https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator), + `x1 - +x2` with return convertible + to `D` is also + required. + | + + +*Iterator Helper Notes*: + + + +1. Unlike other iterator helpers templates, [`output\_iterator\_helper`](operators.html#sec:arithmetic) + takes only one template parameter - the type of its target class. Although + to some it might seem like an unnecessary restriction, the standard + requires `difference\_type` + and `value\_type` of any + output iterator to be `void` + (C++11 §24.4.1 [lib.iterator.traits]), and [`output\_iterator\_helper`](operators.html#sec:arithmetic) template + respects this requirement. Also, output iterators in the standard have + void `pointer` and `reference` types, so the [`output\_iterator\_helper`](operators.html#sec:arithmetic) does + the same. +2. As self-proxying is the easiest and most common + way to implement output iterators (see, for example, insert (C++11 + §24.5.2 [insert.iterators]) and stream iterators (C++11 §24.6 [stream.iterators]) + in the standard library), [`output\_iterator\_helper`](operators.html#sec:arithmetic) supports + the idiom by defining `operator\*` and `operator++` member functions which just return + a non-const reference to the iterator itself. Support for self-proxying + allows us, in many cases, to reduce the task of writing an output iterator + to writing just two member functions - an appropriate constructor and + a copy-assignment operator. For example, here is a possible implementation + of [`boost::function\_output\_iterator`](../../../../../../libs/iterator/doc/function_output_iterator.html) + adaptor: + + +``` +template +struct function\_output\_iterator + : boost::[`output\_iterator\_helper`](operators.html#sec:arithmetic)< function\_output\_iterator > +{ + explicit function\_output\_iterator(UnaryFunction const& f = UnaryFunction()) + : func(f) {} + + template + function\_output\_iterator& operator=(T const& value) + { + this->func(value); + return \*this; + } + +private: + UnaryFunction func; +}; + +``` + + + Note that support for self-proxying does not prevent you from using [`output\_iterator\_helper`](operators.html#sec:arithmetic) + to ease any other, different kind of output iterator's implementation. + If [`output\_iterator\_helper`](operators.html#sec:arithmetic)'s + target type provides its own definition of `operator\*` or/and `operator++`, then these operators will get used and + the ones supplied by [`output\_iterator\_helper`](operators.html#sec:arithmetic) + will never be instantiated. + + + +###### + +[Iterator + Demonstration and Test Program](operators.html#utility.utilities.operators.dereference_operators_and_iterat.iterator_demonstration_and_test_) + The [`iterators\_test.cpp`](../../../../../test/iterators_test.cpp) + program demonstrates the use of the iterator templates, and can also be + used to verify correct operation. The following is the custom iterator + defined in the test program. It demonstrates a correct (though trivial) + implementation of the core operations that must be defined in order for + the iterator helpers to "fill in" the rest of the iterator operations. + +``` +template +struct test\_iter + : public boost::[`random\_access\_iterator\_helper`](operators.html#sec:arithmetic)< + test\_iter, T, [`std::ptrdiff\_t`](https://en.cppreference.com/w/cpp/types/ptrdiff_t), P, R + > +{ + typedef test\_iter self; + typedef R Reference; + typedef [`std::ptrdiff\_t`](https://en.cppreference.com/w/cpp/types/ptrdiff_t) Distance; + +public: + explicit test\_iter(T\* i =0); + test\_iter(const self& x); + self& operator=(const self& x); + Reference operator\*() const; + self& operator++(); + self& operator--(); + self& operator+=(Distance n); + self& operator-=(Distance n); + bool operator==(const self& x) const; + bool operator<(const self& x) const; + friend Distance operator-(const self& x, const self& y); +}; + +``` + + + Check the [compiler + status report](http://www.boost.org/development/testing.html) for the test results with selected platforms. + + +#### +[Note + for Users of Older Versions](operators.html#utility.utilities.operators.note_for_users_of_older_versions "Note for Users of Older Versions") + The [changes in the library interface and recommended + usage](operators.html#sec:chaining) were motivated by some practical issues described below. The + new version of the library is still backward-compatible with the former + one, so you are not *forced* to change any existing + code, but the old usage is deprecated. + + Though it was arguably simpler and more intuitive than using [base + class chaining](operators.html#sec:chaining), it has been discovered that the old practice of + deriving from multiple operator templates can cause the resulting classes + to be much larger than they should be. Most modern C++ compilers significantly + bloat the size of classes derived from multiple empty base classes, even + though the base classes themselves have no state. For instance, the size + of `point` + from the [example](operators.html#sec:example) above was 12-24 bytes + on various compilers for the Win32 platform, instead of the expected 8 + bytes. + + Strictly speaking, it was not the library's fault – the language rules allow + the compiler to apply the [empty + base class optimization](https://en.cppreference.com/w/cpp/language/ebo) in that situation. In principle an arbitrary + number of empty base classes can be allocated at the same offset, provided + that none of them have a common ancestor (see §10 [class.derived] paragraph + 8 of the C++11 standard). + + But the language definition also does not *require* + implementations to do the optimization, and few if any of today's compilers + implement it when multiple inheritance is involved. What's worse, it is + very unlikely that implementors will adopt it as a future enhancement to + existing compilers, because it would break binary compatibility between + code generated by two different versions of the same compiler. As Matt + Austern said, "One of the few times when you have the freedom to do + this sort of thing is when you are targeting a new architecture…". + On the other hand, many common compilers will use the empty base optimization + for single inheritance hierarchies. + + Given the importance of the issue for the users of the library (which aims + to be useful for writing light-weight classes like `MyInt` + or `point<>`), + and the forces described above, we decided to change the library interface + so that the object size bloat could be eliminated even on compilers that + support only the simplest form of the empty base class optimization. The + current library interface is the result of those changes. Though the new + usage is a bit more complicated than the old one, we think it's worth it + to make the library more useful in real world. Alexy Gurtovoy contributed + the code which supports the new usage idiom while allowing the library + to remain backward-compatible. + + +#### +[Acknowledgments](operators.html#utility.utilities.operators.acknowledgments "Acknowledgments") + + +* [Dave Abrahams](http://www.boost.org/people/dave_abrahams.htm): + Started the library and contributed the arithmetic operators in [`boost/operators.hpp`](../../../../../../boost/operators.hpp). +* [Jeremy Siek](http://www.boost.org/people/jeremy_siek.htm): + Contributed the [dereference operators and + iterator helpers](operators.html#sec:deref) in [boost/operators.hpp](../../../../../../boost/operators.hpp). + Also contributed [iterators\_test.cpp](../../../../../test/iterators_test.cpp). +* [Aleksey + Gurtovoy](http://www.boost.org/people/aleksey_gurtovoy.htm): Contributed the code to support [base + class chaining](operators.html#sec:chaining) while remaining backward-compatible with old + versions of the library. +* [Beman Dawes](http://www.boost.org/people/beman_dawes.html): + Contributed [`operators\_test.cpp`](../../../../../test/operators_test.cpp). +* [Daryle + Walker](http://www.boost.org/people/daryle_walker.html): Contributed classes for the shift operators, equivalence, + partial ordering, and arithmetic conversions. Added the grouped operator + classes. Added helper classes for input and output iterators. +* Helmut Zeisel: Contributed the 'left' operators and added some grouped + operator classes. +* Daniel Frey: Contributed the NRVO-friendly and symmetric implementation + of arithmetic operators. + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/typed_in_idm35151228676656.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](result_of.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/result_of.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/result_of.html new file mode 100644 index 0000000..687d4e4 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/result_of.html @@ -0,0 +1,475 @@ +--- +title: Result of +copyright: +revised: +--- + + +Result of + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](operators.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/result_of.html) + + +### +[Result of](result_of.html "Result of") +[Introduction](result_of.html#utility.utilities.result_of.introduction) +[Usage guidelines for `boost::result\_of`](result_of.html#utility.utilities.result_of.usage_guidelines_for_boost_resul) +[Usage + guidelines for the TR1 result\_of protocol](result_of.html#utility.utilities.result_of.usage_guidelines_for_the_tr1_res) +[Known differences between `boost::result\_of` + and `boost::tr1\_result\_of`](result_of.html#utility.utilities.result_of.known_differences_between_boost_) +[Known differences between + `boost::result\_of` + and C++11 result\_of](result_of.html#utility.utilities.result_of.known_differences_between_boost0) +[Reference](result_of.html#result_of.reference) +[Acknowledgments](result_of.html#utility.utilities.result_of.acknowledgments) + + +#### +[Introduction](result_of.html#utility.utilities.result_of.introduction "Introduction") + The class template [`result\_of`](../../boost/result_of.html "Struct template result_of") + helps determine the type of a call expression. For example, given an lvalue + `f` of type `F` and lvalues `t1`,`t2`, ..., `tN` + of types `T1`, `T2`, ..., `TN`, + respectively, the type [`result\_of`](../../boost/result_of.html "Struct template result_of")`::type` + defines the result type of the expression `f(t1, +t2, +...,tN)`. + + This implementation permits the type `F` + to be a function pointer, function reference, member function pointer, + or class type. By default, N may be any value between 0 and 16. To change + the upper limit, define the macro `BOOST\_RESULT\_OF\_NUM\_ARGS` + to the maximum value for N. Class template [`result\_of`](../../boost/result_of.html "Struct template result_of") resides in the header + [``](../../../../../../boost/utility/result_of.hpp). + + If your compiler's support for [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) is adequate, [`result\_of`](../../boost/result_of.html "Struct template result_of") automatically uses it + to deduce the type of the call expression, in which case [`result\_of`](../../boost/result_of.html "Struct template result_of")`::type` names the type [`decltype`](https://en.cppreference.com/w/cpp/language/decltype)`(boost::declval()(boost::declval(), boost::declval(), ..., boost::declval()))`, as in the following example. + +``` +struct functor { + template + T operator()(T x) + { + return x; + } +}; + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type type; // type is int + +``` + + + You can test whether [`result\_of`](../../boost/result_of.html "Struct template result_of") + is using [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) by checking if the macro + `BOOST\_RESULT\_OF\_USE\_DECLTYPE` + is defined after including `result\_of.hpp`. + You can also force [`result\_of`](../../boost/result_of.html "Struct template result_of") + to use [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) by defining `BOOST\_RESULT\_OF\_USE\_DECLTYPE` prior to + including `result\_of.hpp`. + + If [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) is not used, then automatic + result type deduction of function objects is not possible. Instead, [`result\_of`](../../boost/result_of.html "Struct template result_of") + uses the following protocol to allow the programmer to specify a type. + When `F` is a class type + with a member type `result\_type`, + `result\_of::type` is `F::result\_type`. + When `F` does not contain + `result\_type`, `result\_of::type` is `F::result::type` + when `N > +0` or `void` + when `N = +0`. + + Note that it is the responsibility of the programmer to ensure that function + objects accurately advertise their result type via this protocol, as in + the following example. + +``` +struct functor { + template struct result; + + template + struct result { + typedef T type; + }; + + template + T operator()(T x) + { + return x; + } +}; + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type type; // type is int + +``` + + + Since [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) is a language feature standardized + in C++11, if you are writing a function object to be used with [`result\_of`](../../boost/result_of.html "Struct template result_of"), for maximum portability, + you might consider following the above protocol even if your compiler has + proper [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) support. + + If you wish to continue to use the protocol on compilers that support + [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), there are two options: + + + +* You can use [`boost::tr1\_result\_of`](../../boost/tr1_result_of.html "Struct template tr1_result_of"), + which is also defined in [``](../../../../../boost/utility/result_of.hpp). +* Alternatively, you can define the macro `BOOST\_RESULT\_OF\_USE\_TR1`, + which causes [`result\_of`](../../boost/result_of.html "Struct template result_of") + to use the protocol described above instead of [`decltype`](https://en.cppreference.com/w/cpp/language/decltype). If you choose to follow + the protocol, take care to ensure that the `result\_type` + and `result<>` + members accurately represent the return type of `operator()` given a call expression. + + + Additionally, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + provides a third mode of operation, which some users may find convenient. + When `BOOST\_RESULT\_OF\_USE\_TR1\_WITH\_DECLTYPE\_FALLBACK` + is defined, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + behaves as follows. If the function object has a member type `result\_type` or member template `result<>`, + then [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + will use the TR1 protocol. + + Otherwise, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + will use [`decltype`](https://en.cppreference.com/w/cpp/language/decltype). Using TR1 with a [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) fallback may workaround + certain problems at the cost of portability. For example: + + + +* Deficient compiler: If your code requires [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") to work with incomplete + return types but your compiler's [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) implementation does + not support incomplete return types, then you can use the TR1 protocol + as a workaround. Support for incomplete return types was added late + in the C++11 standardization process (see [N3276](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf)) + and is not implemented by some compilers. +* Deficient legacy code: If your existing TR1 function object advertises + a different type than the actual result type deduced by [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), then using TR1 with + a [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) fallback will allow + you to work with both your existing TR1 function objects and new C++11 + function object. This situation could occur if your legacy function + objects misused the TR1 protocol. See the documentation on known [differences](result_of.html#sec:result_of_tr1_diff) between [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") and TR1. +* This implementation of [`result\_of`](../../boost/result_of.html "Struct template result_of") requires class template + partial specialization, the ability to parse function types properly, + and support for SFINAE. If [`result\_of`](../../boost/result_of.html "Struct template result_of") is not supported + by your compiler, including the header [``](../../../../../boost/utility/result_of.hpp) will define the macro + `BOOST\_NO\_RESULT\_OF`. + + + For additional information about [`result\_of`](../../boost/result_of.html "Struct template result_of"), see the C++ Library + Technical Report, [N1836](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf), + or, for motivation and design rationale, the [`result\_of`](../../boost/result_of.html "Struct template result_of") [proposal](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1454.html). + + +#### +Usage guidelines for [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + The following are general suggestions about when and how to use [`boost::result\_of`](../../boost/result_of.html "Struct template result_of"). + + + +1. If you are targeting C++11 and are not concerned about portability + to non-compliant compilers or previous versions of the standard, then + use `[`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of)`. If `[`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of)` meets your + needs, then there's no reason to stop using it. +2. If you are targeting C++11 but may port your code to legacy compilers + at some time in the future, then use [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") with [`decltype`](https://en.cppreference.com/w/cpp/language/decltype). When [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) is used [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") and `[`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of)` are usually + interchangeable. See the documentation on known [differences](result_of.html#sec:result_of_cxx11_diff) + between [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + and C++11 [`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of). +3. If compiler portability is required, use [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") with the TR1 protocol + + + Regardless of how you configure [`boost::result\_of`](../../boost/result_of.html "Struct template result_of"), it is important to + bear in mind that the return type of a function may change depending on + its arguments, and additionally, the return type of a member function may + change depending on the cv-qualification of the object. [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") must be passed the appropriately + cv-qualified types in order to deduce the corresponding return type. + + For example: + +``` +struct functor { + int& operator()(int); + int const& operator()(int) const; + + float& operator()(float&); + float const& operator()(float const&); +}; + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")< + functor(int) +>::type type1; // type1 is int & + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")< + const functor(int) +>::type type2; // type2 is int const & + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")< + functor(float&) +>::type type3; // type3 is float & + +typedef [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")< + functor(float const&) +>::type type4; // type4 is float const & + +``` +#### +[Usage + guidelines for the TR1 result\_of protocol](result_of.html#utility.utilities.result_of.usage_guidelines_for_the_tr1_res "Usage guidelines for the TR1 result_of protocol") + On compliant C++11 compilers, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") can use [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) to deduce the type of any + call expression, including calls to function objects. However, on pre-C++11 + compilers or on compilers without adequate decltype support, additional + scaffolding is needed from function objects as described above. The following + are suggestions about how to use the TR1 protocol. + + + +* When the return type does not depend on the argument types or the cv-qualification + of the function object, simply define `result\_type`. + There is no need to use the `result` + template unless the return type varies. +* Use the protocol specified type when defining function prototypes. + This can help ensure the actual return type does not get out of sync + with the protocol specification. For example: + + +``` +struct functor { + typedef int result\_type; + result\_type operator()(int); +}; + +``` + +* Always specify the `result` + specialization near the corresponding `operator()` overload. This can make it easier + to keep the specializations in sync with the overloads. For example: + + +``` +struct functor { + template struct result; + + template + struct result { + typedef int& type; + }; + result::type operator()(int); + + template + struct result { + typedef int const& type; + }; + result::type operator()(int) const; +}; + +``` + +* Use type transformations to simplify the `result` + template specialization. For example, the following uses [Boost.TypeTraits](../../../type_traits/doc/html/index.html) + to specialize the `result` + template for a single `operator()` that can be called on both a const + and non-const function object with either an lvalue or rvalue argument. + + +``` +struct functor { + template struct result; + + template + struct result + : boost::remove\_cv< + typename boost::remove\_reference::type + > + {}; + + template + T operator()(T const& x) const; +}; + +``` +#### +Known differences between [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + and [`boost::tr1\_result\_of`](../../boost/tr1_result_of.html "Struct template tr1_result_of") + When using [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") ignores the TR1 protocol + and instead deduces the return type of function objects directly via [`decltype`](https://en.cppreference.com/w/cpp/language/decltype). In most situations, users + will not notice a difference, so long as they use the protocol correctly. + The following are situations in which the type deduced by [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") is known to differ depending + on whether [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) or the TR1 protocol is + used. + + TR1 protocol misusage: When using the TR1 protocol, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") cannot detect whether + the actual type of a call to a function object is the same as the type + specified by the protocol, which allows for the possibility of inadvertent + mismatches between the specified type and the actual type. When using + [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), these subtle bugs may + result in compilation errors. For example: + +``` +struct functor { + typedef short result\_type; + int operator()(short); +}; + +#ifdef BOOST\_RESULT\_OF\_USE\_DECLTYPE + +BOOST\_STATIC\_ASSERT(( + boost::is\_same<[`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, int>::value +)); + +#else + +BOOST\_STATIC\_ASSERT(( + boost::is\_same<[`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, short>::value +)); + +#endif + +``` + + + Note that the user can force [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") to use the TR1 protocol + even on platforms that support [`decltype`](https://en.cppreference.com/w/cpp/language/decltype) by defining `BOOST\_RESULT\_OF\_USE\_TR1`. + + Nullary function objects: When using the TR1 protocol, [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") cannot always deduce + the type of calls to nullary function objects, in which case the type defaults + to void. When using [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") always gives the actual + type of the call expression. For example: + +``` +struct functor { + template struct result { + typedef int type; + }; + int operator()(); +}; + +#ifdef BOOST\_RESULT\_OF\_USE\_DECLTYPE + +BOOST\_STATIC\_ASSERT(( + boost::is\_same<[`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, int>::value +)); + +#else + +BOOST\_STATIC\_ASSERT(( + boost::is\_same<[`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, void>::value +)); + +#endif + +``` + + + Note that there are some workarounds for the nullary function problem. + So long as the return type does not vary, `result\_type` + can always be used to specify the return type regardless of arity. If the + return type does vary, then the user can specialize [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") itself for nullary calls. + + Non-class prvalues and cv-qualification: When using the TR1 protocol, + [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + will report the cv-qualified type specified by `result\_type` + or the `result` template + regardless of the actual cv-qualification of the call expression. When + using [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") will report the actual + type of the call expression, which is not cv-qualified when the expression + is a non-class prvalue. For example: + +``` +struct functor { + template struct result; + template struct result { + typedef const T type; + }; + + const short operator()(const short); + int const & operator()(int const &); +}; + +// Non-prvalue call expressions work the same with or without decltype. + +BOOST\_STATIC\_ASSERT(( + boost::is\_same< + [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, + int const & +::value +)); + +// Non-class prvalue call expressions are not actually cv-qualified, +// but only the decltype-based result\_of reports this accurately. + +#ifdef BOOST\_RESULT\_OF\_USE\_DECLTYPE + +BOOST\_STATIC\_ASSERT(( + boost::is\_same< + [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, + short +::value +)); + +#else + +BOOST\_STATIC\_ASSERT(( + boost::is\_same< + [`boost::result\_of`](../../boost/result_of.html "Struct template result_of")::type, + const short +::value +)); + +#endif + +``` +#### +Known differences between + [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + and C++11 result\_of + When using [`decltype`](https://en.cppreference.com/w/cpp/language/decltype), [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") implements most of the + C++11 [`std::result\_of`](https://en.cppreference.com/w/cpp/types/result_of) specification. One + known exception is that [`boost::result\_of`](../../boost/result_of.html "Struct template result_of") + does not implement the requirements regarding pointers to member data. + + +#### +Reference +##### +Header <[boost/utility/result\_of.hpp](../../../../../../boost/utility/result_of.hpp)> +``` +namespace boost { + template struct [result\_of](../../boost/result_of.html "Struct template result_of"); + template struct [tr1\_result\_of](../../boost/tr1_result_of.html "Struct template tr1_result_of"); +} +``` + +#### +[Acknowledgments](result_of.html#utility.utilities.result_of.acknowledgments "Acknowledgments") + Created by Doug Gregor. Contributions from Daniel Walker, Eric Niebler, + Michel Morin and others. + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](operators.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/result_of.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/string_view.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/string_view.html new file mode 100644 index 0000000..663f430 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/string_view.html @@ -0,0 +1,455 @@ +--- +title: String View +copyright: +revised: +--- + + +String View + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/tr1_result_of.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/basic_string_view.html) + + +### +[String View](string_view.html "String View") +[Introduction](string_view.html#utility.utilities.string_view.introduction) +[Examples](string_view.html#utility.utilities.string_view.examples) +[Synopsis](string_view.html#utility.utilities.string_view.reference) +[History](string_view.html#utility.utilities.string_view.history) +[Reference](string_view.html#string_view.reference) +[Acknowledgments](string_view.html#utility.utilities.string_view.acknowledgments) + + +#### +[Introduction](string_view.html#utility.utilities.string_view.introduction "Introduction") + The class [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + and other classes derived from [`basic\_string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") represent references + to strings or substrings. When you are parsing/processing strings from + some external source, frequently you want to pass a piece of text to a + procedure for specialized processing. Before [`std::string\_view`](https://en.cppreference.com/w/cpp/string/basic_string_view), the canonical way + to do this used to be a [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string), but that has certain + drawbacks: + + 1) If you are processing a buffer of text (say a HTTP response or the contents + of a file), then you have to create the string from the text you want to + pass, which involves memory allocation and copying of data. + + 2) If a routine receives a constant [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) and wants to pass a portion + of that string to another routine, then it must create a new string of + that substring. + + 3) If a routine receives a constant [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) and wants to return a + portion of the string, then it must create a new string to return. + +[`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + is designed to solve these efficiency problems. A [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") is a read-only reference + to a contiguous sequence of characters, and provides much of the functionality + of [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string). A [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") is cheap to create, + copy and pass by value, because it does not actually own the storage that + it points to. + + A [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + is implemented as a small struct that contains a pointer to the start of + the character `data` and + a `count`. A [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") is cheap to create + and cheap to copy. + +[`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + acts as a container; it includes all the methods that you would expect + in a container, including iteration support, `operator[]`, `at` + and `size`. It can be used + with any of the iterator-based algorithms in the STL - as long as you do + not need to change the underlying data. For example, [`std::sort`](https://en.cppreference.com/w/cpp/algorithm/sort) and [`std::remove`](https://en.cppreference.com/w/cpp/algorithm/remove) will not work. + + Besides generic container functionality, [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") provides a subset + of the interface of [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string). This makes it easy to + replace parameters of type `const +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) &` + with [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"). + Like [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string), [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") has a static member + variable named `npos` to + denote the result of failed searches, and to mean "the end". + + +| | | +| --- | --- | +| [Caution] | Caution | +| + Because a [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + does not own the data that it refers to, it introduces lifetime issues + into code that uses it. The programmer must ensure that the data that + a [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + refers to exists as long as the [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") does. + | + +| | | +| --- | --- | +| [Note] | Note | +| + Boost.Utility also includes the class [`string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view"): + + + - [`string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view") + is the initial implementation of Jeffrey Yaskin's [N3442: + string\_ref: a non-owning reference to a string](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html). + + + - [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + is an updated implementation to reflect the Library Fundamentals TS + [N4480: + [string.view]](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html). + + + Please prefer [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + / [`basic\_string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + over [`string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view") + / [`basic\_string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view"): + + + - The [`basic\_string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + class better matches [`std::basic\_string\_view`](https://en.cppreference.com/w/cpp/string/basic_string_view). + + + - [`basic\_string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + has WAY more constexpr support. + + + - Code that uses [`basic\_string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view") should continue + to work. + + + - Not much code depends on [`basic\_string\_ref`](../../boost/basic_string_view.html "Class template basic_string_view") anymore. + | + +#### +[Examples](string_view.html#utility.utilities.string_view.examples "Examples") + Integrating [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + into your code is fairly simple. Wherever you pass a `const +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) &` + or [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) as a parameter, that's + a candidate for passing a [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"). + +``` +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) extract\_part ( const [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) &bar ) { + return bar.substr ( 2, 3 ); +} + +if ( extract\_part ( "ABCDEFG" ).front() == 'C' ) { /\* do something \*/ } + +``` + + + Let's figure out what happens in this contrived example. + + + +* First, a temporary string is created from the string literal `"ABCDEFG"`, and it is passed + (by reference) to the routine `extract\_part`. +* Then a second string is created in the call `[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string)::substr` and returned to `extract\_part` (this copy may be elided + by RVO). +* Then `extract\_part` returns + that string back to the caller (again this copy may be elided). +* The first temporary string is deallocated, and `front` + is called on the second string, and then it is deallocated as well. + + + Two [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) s are created, and two + copy operations. That is potentially four memory allocations and deallocations, + and the associated copying of data. + + Now let's look at the same code with [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"): + +``` +[`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") extract\_part ( [`boost::string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") bar ) { + return bar.substr ( 2, 3 ); +} + +if ( extract\_part ( "ABCDEFG" ).front() == "C" ) { /\* do something \*/ } + +``` + + + No memory allocations. No copying of character data. No changes to the + code other than the types. There are two [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") s created, and two + [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + s copied, but those are cheap operations. + + +#### +[Synopsis](string_view.html#utility.utilities.string_view.reference "Synopsis") + The header file [``](../../../../../../boost/utility/string_view.hpp) defines a template [`boost::basic\_string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"), and four specializations + [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"), + [`wstring\_view`](../../boost/basic_string_view.html "Class template basic_string_view"), + [`u16string\_view`](../../boost/basic_string_view.html "Class template basic_string_view"), + [`u32string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + - for `char` / `wchar\_t` / `char16\_t` + / `char32\_t`. + +`#include ` + + Construction and copying: + +``` +constexpr basic\_string\_view (); // Constructs an empty string\_view +constexpr basic\_string\_view(const charT\* str); // Constructs from a NULL-terminated string +constexpr basic\_string\_view(const charT\* str, size\_type len); // Constructs from a pointer, length pair +template +basic\_string\_view(const [`std::basic\_string`](https://en.cppreference.com/w/cpp/string/basic_string)& str); // Constructs from a std::string +basic\_string\_view (const basic\_string\_view &rhs); +basic\_string\_view& operator=(const basic\_string\_view &rhs); + +``` + + +[`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + does not define a move constructor nor a move-assignment operator because + copying a [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + is just a cheap as moving one. + + Basic container-like functions: + +``` +constexpr size\_type size() const ; +constexpr size\_type length() const ; +constexpr size\_type max\_size() const ; +constexpr bool empty() const ; + +// All iterators are const\_iterators +constexpr const\_iterator begin() const ; +constexpr const\_iterator cbegin() const ; +constexpr const\_iterator end() const ; +constexpr const\_iterator cend() const ; +const\_reverse\_iterator rbegin() const ; +const\_reverse\_iterator crbegin() const ; +const\_reverse\_iterator rend() const ; +const\_reverse\_iterator crend() const ; + +``` + + + Access to the individual elements (all of which are const): + +``` +constexpr const charT& operator[](size\_type pos) const ; +const charT& at(size\_t pos) const ; +constexpr const charT& front() const ; +constexpr const charT& back() const ; +constexpr const charT\* data() const ; + +``` + + + Modifying the [`string\_view`](../../boost/basic_string_view.html "Class template basic_string_view") + (but not the underlying data): + +``` +void clear(); +void remove\_prefix(size\_type n); +void remove\_suffix(size\_type n); + +``` + + + Searching: + +``` +size\_type find(basic\_string\_view s) const ; +size\_type find(charT c) const ; +size\_type rfind(basic\_string\_view s) const ; +size\_type rfind(charT c) const ; +size\_type find\_first\_of(charT c) const ; +size\_type find\_last\_of (charT c) const ; + +size\_type find\_first\_of(basic\_string\_view s) const ; +size\_type find\_last\_of(basic\_string\_view s) const ; +size\_type find\_first\_not\_of(basic\_string\_view s) const ; +size\_type find\_first\_not\_of(charT c) const ; +size\_type find\_last\_not\_of(basic\_string\_view s) const ; +size\_type find\_last\_not\_of(charT c) const ; + +``` + + + String-like operations: + +``` +constexpr basic\_string\_view substr(size\_type pos, size\_type n=npos) const ; // Creates a new string\_view +bool starts\_with(charT c) const ; +bool starts\_with(basic\_string\_view x) const ; +bool ends\_with(charT c) const ; +bool ends\_with(basic\_string\_view x) const ; + +``` +#### +[History](string_view.html#utility.utilities.string_view.history "History") + + +###### + +[boost + 1.71](string_view.html#utility.utilities.string_view.history.boost_1_71) + + +* Glen Fernandes updated the implementation of the stream insertion operator + to write directly to the `basic\_streambuf` + and refactored that functionality into a common utility. + +###### + +[boost + 1.53](string_view.html#utility.utilities.string_view.history.boost_1_53) + + +* Introduced +#### +Reference +##### +Header <[boost/utility/string\_view.hpp](../../../../../../boost/utility/string_view.hpp)> +``` +namespace boost { + template class [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view"); + template + constexpr bool + operator==([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator!=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator==([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator==(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator==([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator==(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator!=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator!=(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator!=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator!=(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator<(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator<(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator>(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator>(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator<=(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator<=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator<=(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, + const std::basic\_string< charT, traits, Allocator > & y); + template + constexpr bool + operator>=(const std::basic\_string< charT, traits, Allocator > & x, + [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + constexpr bool + operator>=([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > x, const charT \* y); + template + constexpr bool + operator>=(const charT \* x, [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > y); + template + std::basic\_ostream< charT, traits > & + operator<<(std::basic\_ostream< charT, traits > & os, + const [basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > & str); + template std::size\_t hash\_range(It, It); + template + std::size\_t hash\_value([basic\_string\_view](../../boost/basic_string_view.html "Class template basic_string_view")< charT, traits > s); +} +``` + +#### +[Acknowledgments](string_view.html#utility.utilities.string_view.acknowledgments "Acknowledgments") + Author: Clow, Marshall + + Copyright 2012 Marshall Clow + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/tr1_result_of.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/basic_string_view.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/value_init.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/value_init.html new file mode 100644 index 0000000..0a3b5e8 --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities/value_init.html @@ -0,0 +1,724 @@ +--- +title: Value Init +copyright: +revised: +--- + + +Value Init + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../../index.html) | [Libraries](../../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../../more/index.htm) | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/basic_string_view.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/initialized.html) + + +### +[Value + Init](value_init.html "Value Init") +[Introduction](value_init.html#utility.utilities.value_init.introduction) +[Details](value_init.html#utility.utilities.value_init.details) +[Types + and objects](value_init.html#utility.utilities.value_init.types_and_objects) +[References](value_init.html#utility.utilities.value_init.references) +[Reference](value_init.html#value_init.reference) +[Acknowledgements](value_init.html#utility.utilities.value_init.acknowledgements) + + +#### +[Introduction](value_init.html#utility.utilities.value_init.introduction "Introduction") + Constructing and initializing objects in a generic way is difficult in + C++. The problem is that there are several different rules that apply for + initialization. Depending on the type, the value of a newly constructed + object can be zero-initialized (logically 0), default-constructed (using + the default constructor), or indeterminate. When writing generic code, + this problem must be addressed. The template [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") provides a solution + with consistent syntax for value initialization of scalar, union and class + types. Moreover, [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") offers a workaround + to various compiler issues regarding value-initialization. + + Furthermore, a `const` object + [`initialized\_value`](../../boost/initialized_value.html "Global initialized_value") + is provided, to avoid repeating the type name when retrieving the value + from a `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")` object. + + There are various ways to initialize a variable, in C++. The following + declarations all *may* have a local variable initialized + to its default value: + +``` +T1 var1; +T2 var2 = 0; +T3 var3 = {}; +T4 var4 = T4(); + +``` + + + Unfortunately, whether or not any of those declarations correctly initialize + the variable very much depends on its type. The first declaration is valid + for any [*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible) + type by definition. + + However, it does not always do an initialization. It correctly initializes + the variable when it's an instance of a class, and the author of the class + has provided a proper default constructor. On the other hand, the value + of `var1` is *indeterminate* + when its type is an arithmetic type, like `int`, + `float`, or `char`. + + An arithmetic variable is of course initialized properly by the second + declaration, `T2 var2 += 0`. + But this initialization form will not usually work for a class type, unless + the class was especially written to support being initialized that way. + + The third form, `T3 var3 += {}`, + initializes an aggregate, typically a "C-style" `struct` or a "C-style" array. However, + at the time this library was developed, the syntax did not allow for a + class that has an explicitly declared constructor. + + The fourth form is the most generic form of them, as it can be used to + initialize arithmetic types, class types, aggregates, pointers, and other + types. The declaration, `T4 var4 = T4()`, + should be read as follows: First a temporary object is created, by `T4()`. + This object is [value-initialized](value_init.html#sec:valueinit). + Next the temporary object is copied to the named variable, `var4`. Afterwards, the temporary is destroyed. + While the copying and the destruction are likely to be optimized away, + C++ still requires the type `T4` + to be [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible). + So `T4` needs to be *both* +[*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible) +*and* [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible). + + A class may not be CopyConstructible, for example because it may have a + private and undefined copy constructor, or because it may be derived from + `boost::noncopyable`. Scott Meyers [[2](value_init.html#sec:references)] + explains why a class would be defined like that. + + There is another, less obvious disadvantage to the fourth form, `T4 var4 += T4()`: It suffers from various [compiler + issues](value_init.html#sec:compiler_issues), causing a variable to be left uninitialized in some compiler + specific cases. + + The template [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + offers a generic way to initialize an object, like `T4 +var4 = +T4()`, + but without requiring its type to be [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible). + And it offers a workaround to those compiler issues regarding value-initialization + as well. It allows getting an initialized variable of any type; it *only* + requires the type to be [*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + A properly *value-initialized* object of type `T` is constructed by the following declaration: + +``` +value\_initialized var; + +``` + + + The template [`initialized`](../../boost/initialized.html "Class template initialized") + offers both value-initialization and direct-initialization. It is especially + useful as a data member type, allowing the very same object to be either + direct-initialized or value-initialized. + + The `const` object [`initialized\_value`](../../boost/initialized_value.html "Global initialized_value") allows value-initializing + a variable as follows: + +``` +T var = initialized\_value; + +``` + + + This form of initialization is semantically equivalent to `T4 var4 += T4()`, but robust against the aforementioned + compiler issues. + + +#### +[Details](value_init.html#utility.utilities.value_init.details "Details") + The C++ standard [[3](value_init.html#sec:references)] contains the + definitions of `zero-initialization` and `default-initialization`. + Informally, zero-initialization means that the object is given the initial + value `0` converted to the type + and default-initialization means that [POD](https://en.cppreference.com/w/cpp/named_req/PODType) + [[4](value_init.html#sec:references)] types are zero-initialized, while + non-POD class types are initialized with their corresponding default constructors. + + A *declaration* can contain an *initializer*, + which specifies the object's initial value. The initializer can be just + '()', which states that the object shall be value-initialized (but see + below). However, if a *declaration* has no *initializer* + and it is of a non-`const`, + non-`static` POD type, the initial + value is indeterminate: (see §8.5, [dcl.init], for the accurate definitions). + +``` +int x; // no initializer. x value is indeterminate. +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) s; // no initializer, s is default-constructed. + +int y = int(); +// y is initialized using copy-initialization +// but the temporary uses an empty set of parentheses as the initializer, +// so it is default-constructed. +// A default constructed POD type is zero-initialized, +// therefore, y == 0. + +void foo ( [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) ) ; +foo ( [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string)() ) ; +// the temporary string is default constructed +// as indicated by the initializer () + +``` + +###### + +[value-initialization](value_init.html#utility.utilities.value_init.details.value_initialization) + The first [Technical + Corrigendum for the C++ Standard](http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html) (TC1), whose draft was released + to the public in November 2001, introduced [Core + Issue 178](http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#178), among many other issues. + + That issue introduced the new concept of `value-initialization`, + and also fixed the wording for zero-initialization. Informally, value-initialization + is similar to default-initialization with the exception that in some cases + non-static data members and base class sub-objects are also value-initialized. + + The difference is that an object that is value-initialized will not have, + or at least is less likely to have, indeterminate values for data members + and base class sub-objects; unlike the case of an object default constructed + (see Core Issue 178 for a normative description). + + In order to specify value-initialization of an object we need to use the + empty-set initializer: `()`. + + As before, a declaration with no initializer specifies default-initialization, + and a declaration with a non-empty initializer specifies copy (`=xxx`) + or direct (`xxx`) initialization. + +``` +template void eat(T); + +int x ; // indeterminate initial value. + +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) s; // default-initialized. + +eat ( int() ) ; // value-initialized + +eat ( [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string)() ) ; // value-initialized + +``` + +###### + +[value-initialization + syntax](value_init.html#utility.utilities.value_init.details.value_initialization_syntax) + Value initialization is specified using `()`. + However, the empty set of parentheses is not permitted by the syntax of + initializers because it is parsed as the declaration of a function taking + no arguments: + +``` +int x() ; // declares function int(\*)() + +``` + + + Thus, the empty `()` must be + put in some other initialization context. + + One alternative is to use copy-initialization syntax: + +``` +int x = int(); + +``` + + + This works perfectly fine for POD types. But for non-POD class types, copy-initialization + searches for a suitable constructor, which could be, for instance, the + copy-constructor. It also searches for a suitable conversion sequence but + this does not apply in this context. + + For an arbitrary unknown type, using this syntax may not have the value-initialization + effect intended because we don't know if a copy from a default constructed + object is exactly the same as a default constructed object, and the compiler + is allowed, in some cases, but never required to, optimize the copy away. + + One possible generic solution is to use value-initialization of a non static + data member: + +``` +template +struct W +{ + // value-initialization of 'data' here. + W() : data() {} + + T data; +}; + +W w; +// w.data is value-initialized for any type. + +``` + + + This is the solution as it was supplied by earlier versions of the `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")` template class. Unfortunately this + approach suffered from various compiler issues. + + + +###### + +[Compiler + issues](value_init.html#utility.utilities.value_init.details.compiler_issues) + Various compilers have not yet fully implemented value-initialization. + So when an object should be *value-initialized* according + to the C++ Standard, it *may* in practice still be left + uninitialized, because of those compiler issues. It is hard to make a general + statement on what those issues are like, because they depend on the compiler + you are using, its version number, and the type of object you would like + to have value-initialized. + + All compilers we have tested so far support value-initialization for arithmetic + types properly. However, various compilers may leave some types of *aggregates* + uninitialized, when they should be value-initialized. Value-initialization + of objects of a pointer-to-member type may also go wrong on various compilers. + + At the moment of writing, May 2010, the following reported issues regarding + value-initialization are still there in current compiler releases: + + + +* [Microsoft + Visual Studio Feedback ID 100744, Value-initialization in new-expression](https://connect.microsoft.com/VisualStudio/feedback/details/100744): + Reported by Pavel Kuznetsov (MetaCommunications Engineering), 2005. +* [Microsoft + Visual Studio Feedback ID 484295, VC++ does not value-initialize members + of derived classes without user-declared constructor](http://connect.microsoft.com/VisualStudio/feedback/details/484295) Reported + by Sylvester Hesp, 2009. +* [Microsoft + Visual Studio Feedback ID 499606, Presence of copy constructor breaks + member class initialization](https://connect.microsoft.com/VisualStudio/feedback/details/499606) Reported by Alex Vakulenko, 2009 +* [Embarcadero/C++Builder + Report 83751, Value-initialization: arrays should have each element + value-initialized](http://qc.embarcadero.com/wc/qcmain.aspx?d=83751) Reported by Niels Dekker (LKEB), 2010. +* [Embarcadero/C++Builder + Report 83851, Value-initialized temporary triggers internal backend + error C1798](http://qc.embarcadero.com/wc/qcmain.aspx?d=83851) Reported by Niels Dekker, 2010. +* [Embarcadero/C++Builder + Report 84279, Internal compiler error (F1004), value-initializing member + function pointer by "new T()"](http://qc.embarcadero.com/wc/qcmain.aspx?d=84279) Reported by Niels Dekker, + 2010 +* Sun CR 6947016, Sun 5.10 may fail to value-initialize an object of + a non-POD aggregate. Reported to Steve Clamage by Niels Dekker, 2010. +* IBM's XL V10.1 and V11.1 may fail to value-initialize a temporary of + a non-POD aggregate. Reported to Michael Wong by Niels Dekker, 2010. +* Intel support issue 589832, Attempt to value-initialize pointer-to-member + triggers internal error on Intel 11.1. Reported by John Maddock, 2010. + + + Note that all known GCC issues regarding value-initialization are fixed + with GCC version 4.4, including [GCC + Bug 30111](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111). Clang also has completely implemented value-initialization, + as far as we know, now that [Clang + Bug 7139](http://llvm.org/bugs/show_bug.cgi?id=7139) is fixed. + + New versions of [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + (Boost release version 1.35 or higher) offer a workaround to these issues: + [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + may now clear its internal data, prior to constructing the object that + it contains. It will do so for those compilers that need to have such a + workaround, based on the [compiler + defect macro](../../../../../../libs/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_defects) `BOOST\_NO\_COMPLETE\_VALUE\_INITIALIZATION`. + + +#### +[Types + and objects](value_init.html#utility.utilities.value_init.types_and_objects "Types and objects") +##### +[`template class +value\_initialized`](value_init.html#utility.utilities.value_init.types_and_objects.template_class_value_initialized "template class value_initialized") +``` +namespace boost { + +template +class [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") +{ + + public : + + [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")() : x() {} + + operator T const &() const { return x ; } + + operator T&() { return x ; } + + T const &data() const { return x ; } + + T& data() { return x ; } + + void swap( [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")& ); + + private : + + [unspecified] x ; + +} ; + +template + +T const& get ( [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") const& x ) +{ + return x.data(); +} + +template +T& get ( [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")& x ) +{ + return x.data(); +} + +template +void swap ( [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")& lhs, [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")& rhs ) +{ + lhs.swap(rhs); +} + +} // namespace boost + +``` + + + An object of this template class is a `T`-wrapper + convertible to `'T&'` whose + wrapped object (data member of type `T`) + is [value-initialized](value_init.html#sec:valueinit) upon default-initialization + of this wrapper class: + +``` +int zero = 0; +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") x; +assert( x == zero ) ; + +[`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) def; +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")< [`std::string`](https://en.cppreference.com/w/cpp/string/basic_string) > y; +assert( y == def ) ; + +``` + + + The purpose of this wrapper is to provide a consistent syntax for value + initialization of scalar, union and class types (POD and non-POD) since + the correct syntax for value initialization varies (see [value-initialization + syntax](value_init.html#sec:valueinitsyn)). + + The wrapped object can be accessed either through the conversion operator + `T&`, + the member function `data()`, or the non-member function `get()`: + +``` +void watch(int); + +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") x; + +watch(x) ; // operator T& used. +watch(x.data()); +watch( get(x) ) // function get() used + +``` + + + Both `const` and non-`const` objects can be wrapped. Mutable + objects can be modified directly from within the wrapper but constant + objects cannot: + + When `T` is a [*Swappable*](https://en.cppreference.com/w/cpp/named_req/Swappable) + type, `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")` is swappable as well, by calling + its `swap` member function + as well as by calling `boost::swap`. + +``` +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") x; +static\_cast(x) = 1 ; // OK +get(x) = 1 ; // OK + +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") y ; +static\_cast(y) = 1 ; // ERROR: cannot cast to int& +static\_cast(y) = 1 ; // ERROR: cannot modify a const value +get(y) = 1 ; // ERROR: cannot modify a const value + +``` +| | | +| --- | --- | +| [Warning] | Warning | +| + The [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + implementation of Boost version 1.40.0 and older allowed *non-const* + access to the wrapped object, from a constant wrapper, both by its + conversion operator and its `data()` member function. + + + For example: + + +``` +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") const x\_c; +int& xr = x\_c ; // OK, conversion to int& available even though x\_c is itself const. +xr = 2 ; + +``` + + + The reason for this obscure behavior was that some compilers did not + accept the following valid code: + + +``` +struct X +{ + operator int&() ; + operator int const&() const ; + }; + X x ; + (x == 1) ; // ERROR HERE! + +``` + + + The current version of [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") no longer + has this obscure behavior. As compilers nowadays widely support overloading + the conversion operator by having a `const` + and a `non-const` version, we have decided to fix + the issue accordingly. So the current version supports the idea of + logical constness. + | + + +###### + +[Recommended + practice: The non-member get() idiom](value_init.html#utility.utilities.value_init.types_and_objects.template_class_value_initialized.recommended_practice_the_non_mem) + The obscure behavior of being able to modify a non-`const` + wrapped object from within a constant wrapper (as was supported by previous + versions of [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")) + can be avoided if access to the wrapped object is always performed with + the `get()` + idiom: + +``` +value\_initialized x; +get(x) = 1; // OK +value\_initialized cx; +get(x) = 1; // ERROR: Cannot modify a const object + +value\_initialized const x\_c; +get(x\_c) = 1; // ERROR: Cannot modify a const object + +value\_initialized const cx\_c; +get(cx\_c) = 1; // ERROR: Cannot modify a const object + +``` +##### +[`template class +initialized`](value_init.html#utility.utilities.value_init.types_and_objects.template_class_initialized_t "template class initialized") +``` +namespace boost { + +template +class [`initialized`](../../boost/initialized.html "Class template initialized") +{ + + public : + + [`initialized`](../../boost/initialized.html "Class template initialized")() : x() {} + + explicit [`initialized`](../../boost/initialized.html "Class template initialized")(T const & arg) : x(arg) {} + + operator T const &() const; + + operator T&(); + + T const &data() const; + + T& data(); + + void swap( [`initialized`](../../boost/initialized.html "Class template initialized")& ); + + private : + + [unspecified] x ; + +}; + +template +T const& get ( [`initialized`](../../boost/initialized.html "Class template initialized") const& x ); + +template +T& get ( [`initialized`](../../boost/initialized.html "Class template initialized")& x ); + +template +void swap ( [`initialized`](../../boost/initialized.html "Class template initialized")& lhs, [`initialized`](../../boost/initialized.html "Class template initialized")& rhs ); + +} // namespace boost + +``` + + + The template class `boost::[`initialized`](../../boost/initialized.html "Class template initialized")` + supports both value-initialization and direct-initialization, so its + interface is a superset of the interface of `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")`: + Its default-constructor value-initializes the wrapped object just like + the default-constructor of `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")`, + but `boost::[`initialized`](../../boost/initialized.html "Class template initialized")` also offers an extra `explicit` constructor, which direct-initializes + the wrapped object by the specified value. + +`[`initialized`](../../boost/initialized.html "Class template initialized")` is especially useful when the wrapped + object must be either value-initialized or direct-initialized, depending + on runtime conditions. For example, `[`initialized`](../../boost/initialized.html "Class template initialized")` + could hold the value of a data member that may be value-initialized by + some constructors, and direct-initialized by others. + + On the other hand, if it is known beforehand that the object must *always* + be value-initialized, `[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")` + may be preferable. And if the object must always be direct-initialized, + none of the two wrappers really needs to be used. + + +##### +[`initialized\_value`](value_init.html#utility.utilities.value_init.types_and_objects.initialized_value "initialized_value") +``` +namespace boost { +class [`initialized\_value\_t`](../../boost/initialized_value_t.html "Class initialized_value_t") +{ + public : + template operator T() const ; +}; + +[`initialized\_value\_t`](../../boost/initialized_value_t.html "Class initialized_value_t") const initialized\_value = {} ; + +} // namespace boost + +``` + + +[`initialized\_value`](../../boost/initialized_value.html "Global initialized_value") + provides a convenient way to get an initialized value: its conversion + operator provides an appropriate *value-initialized* + object for any [*CopyConstructible*](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + type. + + Suppose you need to have an initialized variable of type `T`. You could do it as follows: + +``` +T var = T(); + +``` + + + But as mentioned before, this form suffers from various compiler issues. + The template [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + offers a workaround: + +``` +T var = get( [`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized")() ); + +``` + + + Unfortunately both forms repeat the type name, which is rather short + now (`T`), but could of + course be more like `Namespace::Template::Type`. + + Instead, one could use [`initialized\_value`](../../boost/initialized_value.html "Global initialized_value") as follows: + +``` +T var = [`initialized\_value`](../../boost/initialized_value.html "Global initialized_value"); + +``` + +#### +[References](value_init.html#utility.utilities.value_init.references "References") + + +1. Bjarne Stroustrup, Gabriel Dos Reis, and J. Stephen Adamczyk wrote + various papers, proposing to extend the support for brace-enclosed + *initializer lists* in C++. This [feature](https://en.cppreference.com/w/cpp/language/list_initialization) + has now been available since C++11. This would allow a variable `var` of any [*DefaultConstructible*](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible) + type `T` to be *value-initialized* + by doing `T var += {}`. + The papers are listed at Bjarne's web page, [My + C++ Standards committee papers](http://www.research.att.com/~bs/WG21.html). +2. Scott Meyers, Effective C++, Third Edition, item 6, *Explicitly + disallow the use of compiler-generated functions you do not want*, + [Scott Meyers: Books + and CDs](http://www.aristeia.com/books.html) +3. The C++ Standard, Second edition (2003), ISO/IEC 14882:2003 +4. POD stands for ["Plain + Old Data"](https://en.cppreference.com/w/cpp/named_req/PODType) +#### +Reference +##### +Header <[boost/utility/value\_init.hpp](../../../../../../boost/utility/value_init.hpp)> +``` +namespace boost { + template class [initialized](../../boost/initialized.html "Class template initialized"); + class [initialized\_value\_t](../../boost/initialized_value_t.html "Class initialized_value_t"); + template class [value\_initialized](../../boost/value_initialized.html "Class template value_initialized"); + + [initialized\_value\_t](../../boost/initialized_value_t.html "Class initialized_value_t") const [initialized\_value](../../boost/initialized_value.html "Global initialized_value"); + template T const & get([initialized](../../boost/initialized.html "Class template initialized")< T > const & x); + template T & get([initialized](../../boost/initialized.html "Class template initialized")< T > & x); + template + void swap([initialized](../../boost/initialized.html "Class template initialized")< T > & lhs, [initialized](../../boost/initialized.html "Class template initialized")< T > & rhs); + template T const & get([value\_initialized](../../boost/value_initialized.html "Class template value_initialized")< T > const & x); + template T & get([value\_initialized](../../boost/value_initialized.html "Class template value_initialized")< T > & x); + template + void swap([value\_initialized](../../boost/value_initialized.html "Class template value_initialized")< T > & lhs, [value\_initialized](../../boost/value_initialized.html "Class template value_initialized")< T > & rhs); +} +``` + +#### +[Acknowledgements](value_init.html#utility.utilities.value_init.acknowledgements "Acknowledgements") +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + was developed by Fernando Cacciola, with help and suggestions from David + Abrahams and Darin Adler. + + Special thanks to Bjorn Karlsson who carefully edited and completed this + documentation. + +[`value\_initialized`](../../boost/value_initialized.html "Class template value_initialized") + was reimplemented by Fernando Cacciola and Niels Dekker for Boost release + version 1.35 (2008), offering a workaround to various compiler issues. + +`boost::[`initialized`](../../boost/initialized.html "Class template initialized")` + was very much inspired by feedback from Edward Diener and Jeffrey Hellrung. + +[`initialized\_value`](../../boost/initialized_value.html "Global initialized_value") + was written by Niels Dekker, and added to Boost release version 1.36 (2008). + + Developed by [Fernando + Cacciola](mailto:fernando_cacciola%40hotmail.com). The latest version of this file can be found at [www.boost.org](http://www.boost.org). + + + + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../../doc/src/images/prev.png)](../../boost/basic_string_view.html)[![Up](../../../../../../doc/src/images/up.png)](../utilities.html)[![Home](../../../../../../doc/src/images/home.png)](../../index.html)[![Next](../../../../../../doc/src/images/next.png)](../../boost/initialized.html) diff --git a/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities0.html b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities0.html new file mode 100644 index 0000000..793713a --- /dev/null +++ b/doc/libs/1_78_0/libs/utility/doc/html/utility/utilities0.html @@ -0,0 +1,56 @@ +--- +title: More Utilities +copyright: +revised: +--- + + +More Utilities + + + + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| Boost C++ Libraries | [Home](../../../../../index.html) | [Libraries](../../../../../libs/libraries.htm) | [People](http://www.boost.org/users/people.html) | [FAQ](http://www.boost.org/users/faq.html) | [More](../../../../../more/index.htm) | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../boost/initialized_value.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](ref.html) +[More Utilities](utilities0.html "More Utilities") +--------------------------------------------------- + Some utilities have been moved from Boost.Utilities to more appropriate Boost + libraries: + + + +1. Moved to [Boost.Core](../../../../../libs/core/index.html) + + 1. [addressof](../../../../../libs/core/doc/html/core/addressof.html) + 2. [checked\_delete](../../../../../libs/core/doc/html/core/checked_delete.html) + 3. [enable\_if](../../../../../libs/core/doc/html/core/enable_if.html) + 4. [noncopyable](../../../../../libs/core/doc/html/core/noncopyable.html) +2. Moved to [Boost.TypeTraits](../../../../../libs/type_traits/index.html) + + 1. [declval](../../../../../libs/type_traits/doc/html/boost_typetraits/reference/declval.html) +3. Moved to [Boost.Iterator](../../../../../libs/iterator/index.html) + + 1. [generator + iterator adaptors](../../../../../libs/iterator/doc/generator_iterator.htm) + 2. [next/prior](../../../../../libs/iterator/doc/html/iterator/algorithms/next_prior.html) +4. Moved to [Boost.IO](../../../../../libs/io/index.html) + + 1. [ostream\_string](../../../../../libs/io/doc/html/io.html) +5. Moved to [Boost.ThrowException](../../../../../libs/throw_exception/index.html) + + 1. [throw\_exception](../../../../../libs/throw_exception/doc/html/throw_exception.html#using_boost_throw_exception) + +| | | +| --- | --- | +| | Copyright © 2001 Beman Dawes + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE\_1\_0.txt or copy at ) + + | + +--- +[![Prev](../../../../../doc/src/images/prev.png)](../boost/initialized_value.html)[![Up](../../../../../doc/src/images/up.png)](../index.html)[![Home](../../../../../doc/src/images/home.png)](../index.html)[![Next](../../../../../doc/src/images/next.png)](ref.html) diff --git a/doc/libs/1_79_0/libs/atomic/index.html b/doc/libs/1_79_0/libs/atomic/index.html new file mode 100644 index 0000000..e862f15 --- /dev/null +++ b/doc/libs/1_79_0/libs/atomic/index.html @@ -0,0 +1,19 @@ +--- +title: +copyright: +revised: +--- + +Automatic redirection failed, please go to +   + +--- + + +© Copyright Beman Dawes, 2001 + + +Distributed under the Boost Software License, Version 1.0. (See accompanying +file [LICENSE\_1\_0.txt](../../LICENSE_1_0.txt) or copy +at [www.boost.org/LICENSE\_1\_0.txt](http://www.boost.org/LICENSE_1_0.txt)) + diff --git a/doc/libs/common/boost.png b/doc/libs/common/boost.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d51fcd5c9149fd77f5ca6ed2b6b1b70e8fe24f GIT binary patch literal 6308 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 literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/alert.png b/doc/libs/common/doc/src/images/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..b4645bc7e7cd81f2818bf22aa898e95f89f7b154 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZVAW?*1oN<7}ez`(#Bl2vQw%VQUVy#($c(b7<_!Z&&*`7 zwYIFTuIA!kP?6(!`t<3^g$y0J3{Q73WQH(YSjJ#(AQj-}VXe>LZ_gkv$q?hiVP&Xj ztS4or%^)MjpsB?1|Nnp9pi5p13=F0vL4Lvi$p8#BTQ7jZgtNdSvY3H^>jMZgI;}C8 z!N9FSxfgB=H7N+NC77H_+N#nawR{=RqTMBX)(LXL|IjinhDSdCyWWZ3S$0kBOZbahGm>{cU3L4X z*xaKNrl+L*2&>`tT{GF}sK6TCoSy58@94C>csZ@3se0z)OD!J`ePg?KNk!eRu!nuZ zwIuy5g5`UyU*2!`JMiPV^UIVvmW1t{f1*^~1#9h_jDIZO*R6JmbN8&QBXd?)zY=(& z`HG+Mis#k2-hNM1nwI_8efYU@yAuCZhY42|Be;Juo!svFUA16}A_D^hgQu&X%Q~lo FCIA+53ZVc1 literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/blank.png b/doc/libs/common/doc/src/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..764bf4f0c3bb4a09960b04b6fa9c9024bca703bc GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4kiW$2A`O3a~K#HSkfJR9T^xl_H+M9WMyDr z)b(_645^s&_M)R8g96V1g9H1Y`?|@Qa8+HmHda4(nQ?zM!!?FAj1kNm*b;aTNHv%; cj9>w=gf!;AOne?`3=9kmp00i_>zopr0Be8NW(e>Jab;j&;NV~o5MYpy zU{F+KFf?Rva$<;zVn|MA$j)XcE@r5%W@u?)XlW_#>0#*UDemd%nKFf8%9P?MQ>y38 zVVEwkZjIWyHF@jSt$X(}?A@Du?i|Cp zbLXyIW4Lzh+_h`h?%iX!chB(NJdh*`E$$X&!4}4&+z{J`|sZwzJC|^ z{$1kxcf;@BzyJTw@c+NS|Nj#IN5NBISn~R-X--a%afBxQ|J!3zMjr_SU zk_iHr)f*lf{$5^Qz}I)@3FlWvw(w~u=1P@VsTP+$RNGvxbHL-(%M6nc6`{zlU zjGQJeveps+!&Jb&mD)L@hA} z1_tL6*NBqf{Irtt#G+IN2MuLS&)mfHRNut(%;anZ6Fnn63k6F{eFF=914D)6qRirw zN{8Ia;*!i{z0_j8l+uFyyb`_S{M?DV6n8K%Fld2|%S_KpEGaEYWk@zRFt#waFg8d` zG)YZPF-fe)lBATd3a!N{b-$VA&f+n^|#(~yCI Ofx*+&&t;ucLK6T%G-N*j literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/draft.png b/doc/libs/common/doc/src/images/draft.png new file mode 100644 index 0000000000000000000000000000000000000000..0084708c9b8287c51efa6b40b8d492854191455e GIT binary patch literal 17454 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 YsPxZ;53A2HFfcH9y85}Sb4q9e0Fi|iga7~l literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/home.png b/doc/libs/common/doc/src/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..5584aacb097a80e66a5320312b6e4eb017af1a06 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&Dfg?(A@OuseF>a6(*+nzF*onKLh6zO-%YmOy{sw6wJU|Nk%gvq74Hfq|za z$S?Rm0x$^OKX;CSfq}EYBeIx*fm;ZK886+f`@_J%pjzS@Q4*Y=R#Ki=l*-_nm|T>f zo0^iDsNj}alvU8YOY t9}F9JU6`43jMG5vNQA&8NcoN_f;wr$vARr(hAt9lu zscC6x>EvV>6{VS+EaBwj6ciMco$ZvI98_E!l$@NLot<4>UER|o(bHqOcQ41TYc{y!?kM?_wFg)yJvXsp5^oB z9Pi&Vyniq7|3Ab3{~Z7S3p{_W`TV)z`}cpO z$(;G%_wGG* z?AW<;=dNA5cJJQ3=g*(NfB*jb_wWDz|6hCQ@I3|w2F4_BcNgdM3%p4T42R|DNig) zWpL0?*7VFxOi%SqOwUZtRxr^s(z8&owA44S&^IttNG{4OE~#|Ltt>9dOx8;+)=McZ z$j>X$OU}=oxJz*d0|SE=*tpE}yu^~yqEv=t literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/next.png b/doc/libs/common/doc/src/images/next.png new file mode 100644 index 0000000000000000000000000000000000000000..59800b4e87f60c0e3383ede2b384b9be0f5ffe8d GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&Dfg?(8r&Hr}>%OQ656nzF)*4nJa0`Jj)#l9-t%+}PK^d+g590~2^trx_V+aGYt)W#Kgko@Q{~>i6>w}LxPb)_bi1gN;4a>^d{wcn;SkfJR9T^xl_SO6joXo($ zppfhlZ{Pm>`SaViZ};!tyLt1*|NsBbojZ3P6EBL3=9l=JzX3_ zD&{0TNo#1Z_o+&KnDHU@)Rs;LG+GiER_Ffe$!`njxgN@xNAPfH=1 literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/note.png b/doc/libs/common/doc/src/images/note.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c3c645ab9af6318035b026dd86944b9ddc9114 GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^OiAAEE({E-dXuv&t)U99M06BF~bt=lC3t1z!y3OU-_; z>3=1k>J3(3i_72APIz-IDqpqc+E%+vGv;(%KfZ!%@4A+C&xmZ75-RagX8L}A{%x+r zX<~gz))PX{awr=ezabJ<%O$qq%HpE?3}IarYhrI#g}e)4`)(-lYr?KO{@fm?UzpsD z&F7x?_G;CcbIZ>^o0GCAMe@{JfwtZgS9s0dn=t$|`IrrC3yU6#%a-U6G$wZz0 z>m`@($9HNPdGJ4#pEvb;3eT@>Ck6%v=MvY5lHmNblJdl&R0anPWlhiA#Pn3(#PrPM zYy}fNBRvZROG|wN3w;Aah2)~l;*v^-+{)sT%w)aPV!f2og8aM^z2yAdiMtecFfcG^ zfsM;d&r2*RElOoDPD(L1F;6y4H8Hg?FgGwTOER!DNJ%kHHBU4$OExhPxjgw70|Nse jNLN5&dMbmFNrjP#wt==mQ8cF^C=xwg{an^LB{Ts5w*0vf literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/prev.png b/doc/libs/common/doc/src/images/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..d88a40f923e3c554125f01cd366707c60cfcad04 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&DdqOG`60Hr}>%%ZlYo1O0u~loc*tzSP~>;p||S5Et|R|Noh1c$yg)73T~N2spa`a*~JRJ5eh~I1}5!gYtAz;Fo=OPI2WZRmSpDVDTHL^rZN~B=o=X8 z8<-ql-^0nkz!2u?;uumfC;0|1OPoRyGxLNShYX~Tl_Wf9G1_imu)%RA9}mw<0X2^e zQioc&m}WXSvRw^OFi2qFa&lm1W^U?K=~^Ook|m{hVvche^Q6-g?(V)Vn8U=toEqFE UkjD9gfq{X+)78&qol`;+00?PtqyPW_ literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/prev_disabled.png b/doc/libs/common/doc/src/images/prev_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3c17e02d156e7494dbab2f9cd66af46af2358c GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhlO-<`D(~2b}=LHv2RC7dZWAVCrDh<7Ss(U_A1L-MNQRp<#x>RYL|A z0d8w%7gb?npBLs13>ys`SR)0#F|i0-(0!9|ZvFp)$&5@KPtr;p8yJ{=^Qv)(GIJ<+ zNI0-0Zew5(Fj?c!G-tyG77m3Osc(4d6PFVdQ&MBb@ E0L^J1b^rhX literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/smiley.png b/doc/libs/common/doc/src/images/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..30a77f71ce16872d046a1a5d6fd698a2f65a3f62 GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uV36QoW?*1YTQtp`fq{X!*vT`5gM;JtL;nX1 z42*&SJ|V8+B7&<|tz5IBw4@*~EXexT*H!m!O?Pp!sH>^CckiyDuKJ|Dl+(w%CQay1 zOYu8%=FGd73zHKgmoF}|u{3I~kKDVXVbQ_`9c`_Fz7{iQrl~4QMTGi1fByW=jcKLD z*?C#s*_rWAAIx@f)c16=+qAB-t1T`u&hzVsWjnTSn>lml<@5cSX&!B@jUfSci{|F_ z_w^KKXB!)+#6)_3`t<4gwQEt~&MzL%J+!ao-_JD<@64PzGws6Z-hv$8-Me=7btN{` zl~t96rKP3$c$&I9TcsogXQl?mL%y{W;-5&-92C)*?h!W?b)Wnj^{5*w_%-mE4Lj!$7BYguC zr{Y6*7#J8-K`Mgt(@M${i&7bU6O)Vbb5m0?6BXPti&D$;i?WLqd?OT$3=B-#%hsG{ zU|`huba4!+n3FrHHoVC|#v<-Y&ynX`2+ z)ci{*-@n^>-frGI_MA-9eHCQCFMs-NiTvCzJ8a&6h<9#D<(d3(^{E}JLTitR9GSK2 z$*O4*8tU!OHS*&Yg~mSMD)7~hd93j+u`cf5MM<4*zJ;yfFKhYEn9bv3Xeg3g;K-G= z;q?Q<5Qk-d*rznCncd{p+umG~t-YZ3L%_f9;YyrSd?k7nE}0j~xg-T!p1r_pXw_8J z^q9XtRP=q)pSk7_!?YePxacL!`8E4~v$oZii_iB4y^t?YSBana!LlH(Q{_whcc+EB z6^^opPM-68`QEg&=hc<^;brIeKBf1+k=uTZ@Aa)4^R8_EExPXM@|~g)-OB%bBP#i` ie0$=QHXfdLO8@!p%oni+1)dBH3=E#GelF{r5}E*N2(Kal literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/stable_vector.png b/doc/libs/common/doc/src/images/stable_vector.png new file mode 100644 index 0000000000000000000000000000000000000000..26af7af6d86dbb3d2e843003ef8d5f3807fc92e8 GIT binary patch literal 7163 zcmeAS@N?(olHy`uVBq!ia0y~yV4BCk!0?-cje&vT@P#SC3=9mM1s;*b3=G`DAk4@x zYmNj10|QICqpu?a!^Xav-+_}E7#I|iJ%W507^+km7#f-x7=Hd|U}$*Bz))(y!0;-8 zfx&791A}<}r1+z53=GnRo-U3d6}R3TG-PC8;9yp`ZoefeNq#~tGXq1adczF2<^++R zra%KOw}ToItcw#wE-*8&2%OFk;E_LY;)I11$6}~_o2bOx8M1K<3Jq@VHttZx5S@&% z3=RxsuOk>37#I>J?Ek7$ChGc#li`38qlwj3JD-CEGiN!(*%`?EF?lr~WYgt$E9yNy zpVyEe(X<U+$ zgG!88^EWu{960!5%ZZGbeu(86k;YsZpa=#f^bJiHUrxGcAqy(}dYUe7N)ri?hFSj2 z3lu3}nQQvU9^Y;Sj}JLX))Gbr#v?!KO-g&dX~8u#U37b+v4EL@W5Gqi^H2|fO=<#1 zM#EhzF_0%Dp5)th$GT3eU}D(d!2r&lhnW@pH%~UwbzHY^;k)+_#rU>-dF{b9JJ5iO zEm_hu=yc``I|19MZ#?p#C{>oj2fE7Ul^44kTvhHo}+{(XNuV+MnLOSXkZ;GvP z6dSKC)FIOfS5B;SuRgsvq2%mUP=b1TC*ZsM)>lUY9pWKM1n*@?teaW3#n5Gc--V2W zpv;(IX&zPH%ap|Ez|cGIvE?DI*$*!$IO`R-ou45C_U!e(y9N5sJ8b6*FJrTmaXbG_ zW)~!Z9^O(Q_13VDDJz8GMbcvBlOX>wdA-(2IxYC+Q@hCC#R(snAZ1w-FH6l#k@(~y zlf!*Y7yFKb+?KH7O6Ha;)?93Skkrs(CgUb83o-+oh+eM?bjXJ|`r^EY8WOB2ODA45 zF$E`!wYS|ES3=yd*!EbU!K^;F%jdvmZsC&#rxs9|@Kz9>7g!gU-qBdV4N5C*&olfB zMS7YpGS!1~W7PCscu5fUZgGOhgelkDxc`7+;9!QWCD#dP3G>YM$i*`jTyD~nz)pO4 zqe4b^cbgi-NRC%Wd($p~^=L@29^U%c+UkOl34;SeubEAIA)D;kmcY|Y|?Ey+e;zptBn z|Kg|Y7odR6t>By7V?Ik0o+Zla+}Y#UtRZePI5T1K%sdgEr+t^eK_k-BSH%ZS28nT< z{b|Pn9afuI%-RNa)fJY-i{~jbL!x3v>XD0Q%(&dFHNk$Jc!^O?_i&pW#9V>%8H;BY zi0~ZW0x2`!GW1XLJS+^+DUo{MqK_F@Tal_E*tM)vu4OMyz4U+`QlK7^%rW`g+q7_! z9MsJUuhw5I%K5<90IpCPddxuu_bzErF!W4IUYuY6DWmy>95UDEYza5#YIC-d1IspD z{8d=N4A#eY_};CI{Cp9frC(sh#@7cY7$H`^J=@z9XaM!);;&B-$v{6JlnhKvzz$u@ z?+!1is|yz=i14g3u?5SpF8=!T12hr5z1!Oq=untwJL?-b)E0kzq@lnD@%onUW+2BW zLUgS)M>4MzWZte*iQojs<@WmcLs*{926;6ggby6ffd*0aeD%;YfA0<`)>yxS$b>EP zWZ=nq?GaGe>8=2gtc$;XfO|+_%^i2+Ga3@QHy~0^PiLf8X+RUo$5Rz1%Dqhs?@a`! zv7V+zjd(Zf$)(SCQ4$ApV5`8lYe5@^8H z<~7sg*1~1>&?IrnX0c?7NY9sZ*TBvd35Yt@Q?`O#3=%ROVFwmVri<___X8J72_ifp zlE$|jm+3=wpEOx4nJmI{obL)mH;>CslUt5*7LbrojEL+{n-OSm!`f?c?^SRfOVFF{ zc6wzaGbDzYW~Q1r_cTq6gI1M{TVJ2NSd^6j$zSY=X%c5OpyA8q##sCM@I^*9nh?_~WTWtQ_2bJJVO(yWKq7RW=> zvQ^m=Xdd{s!|kBP0`G%1vz9@kvGjum*vRJ@{y8E&O^$Q_LBtcbtdq5a7`WJWEy$kB zFTvrrrAA8kF|2iQi&>g=aYNqA!Yv9AyRPk2hE~5@+Cio1g7rL*q@1wDPfiYI9;&<7 zR=^>%R{D1|ZyN%V_709$u)S0y}R=71t5I?*Po0puVqx7Y6`@tal#e>xwFDx zy$f$=$jE+O!UM^h4BE#p9P-q{O+Td9Y9IRG`7F4w<(#;NWiaKVH6t zN0}dLu~g6E&Qg({vJ=qcS1~nmF|*GRNH(~nxUf&{7|2ja*nMca80h~CD!22X#Vil^ zgBkZE-!1@~%q9n_+jt-@?iGHKp(Mk)xH4snGN?q>keDa?>|#+*2{?59t;{6cg`a~Q z4M~eztj{oCtdoFdO%tCPi#tK}0@P}&gpwmZo zR6lMe(=Kkn~1f88{S+Sap;+3mLY4oKe3jM3-`JGMAM<%xJ!_>#qyX`tll z@V@VJLasZHIW$m1iWYMgyeKtrd))KyWsS)hcaVi#ZO+Flw;1=zgJXR1vDQNwipE@S zpU-E+LAoMqcGYh=a~PC~j+onI-sG0_EpgtwL9%!I#S&0)ka5$<=yA`qLKCZ3oS@p= z>XB!&Q)8U-_r(cY7MjdCT(V_?9P8qr2_igSE2MpyXMm!qY|6JB8h6YzAj@Pko57*vGUlEsWS#?17 zpMj*_%QBOB?#Jd{TYS0Y3*+LacQP!^Z+(-9`N$*Spj>yPxFi=;#DL=&lptP^vWMnNRAvqqb zDPwoa15l*h5Ilb|4${a5MV0}V+im$Tpt3IsWX)W#HTS_fG$eHIvw^DV4w;WKvTs2t z*knE|$^3K!HAa*dJ+!onf;2uMc3mtxbpX`zDpa1gcrmzY6*~hmvnkNvmYk#ngMfq1 z;;C0OB>W2PZf%sPV>K>{Yuo7lxKgC2Y=_&yg8tVJqs}pc2Eo*1Sr2Q@bC*_I{1Ke? zZppJcZ!NYJdL*ULFvHEsO*VH%-=1?vp%KNpII~`)=h)W=%nXc2Or+jIt%Nqx8bEbd zoA2StQ{)b2_!pYYb3d421B%93-`o#o#9Rg?!WSJ#86Tt%)Fn8OC(8|rSe{SY=N(e_RQ2xQ2x9@5Kow>)QFi(sC0QCv4en!Q}=D!lsK` z?77??R~3L-FtLvCNGh;fqQOS&3xsH#}- z*H+)f2^CEjE982?edo*nH6(hU2RitJN*8QFihWG#kkwVYAiY)cSq-;>ITwGlkvhLP z;m48B8WO($7eBqDA;AU8gIJ>oyLniX09^xTkh-8FbxGxni4z4|K?9r@Lk!M5t~Tj& zcZ-uddmfbhr}ZyR_`ux2kR*9Zvh9i&`)oNU$^0!v(sCbdZgoi7eeBV%ODtOQLKYOo z=SzC>KQPDNS{7y{t1It*&;hJ3la*cT>vV4KJofT znM-uO?d@wiD0*Ju>yjhaGi>5Z*2QxtKuW>|rLwN)9jAasfrJ=X1i1Gai?7_f{^A*<66s&y z#B`!0_Ty9*Ty7uuDa4m6oouFYWkt!AVv!ye1_1}3X2r$*VKT~#9prnTU#wUb znrb_1ncKktzvD}C?lmqgcd8KSX*$RS8Vy}l3ogx57#BXC3bHke7gUJ1S%V6R#xp4= zcAs>2*J;a7w30f%_@m9O7c#7iU(VRG#rBqiEbC!j29^sQ5+9G4wl?XQ&6)|SN~{dq#+UYu_woFVH>#MJvgJUFgMO=TlbaOt>AE< z0;-u-oONwkcLCBq0+m-FZ?J;<0T05{F71A3e(QqFzK=Fi+Yj5%bAMbR!t=GnXU)wk zWrs8FNwPMB+PV|=ubw+ExEka-SP6gOWrYH0jGb{Qg93wfInrn~mr6f)663-I*^f)Y z^@~cXl0fAvq+*zK`Fh4aN!BYY42&jLkA{3fO2@K7K`f`Kr>AGJqA}9}c;);OR5^dv zSfCEd7Nm^G{*dQzYle-DK$`m^7o-?iE?}*$4H$05>gRml&sYqq<2+scT-G@yGywpx CFT|e! literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/tip.png b/doc/libs/common/doc/src/images/tip.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4aab3bb3543191c360387c4af9a3cbaa051345 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BV36QoU|?X-y2mNSz`($iDJ87yAgr${wU6ATeb^ycE^w7cIp z?_W?xU6%d(bb~@Shbi-aG=ETBbm~(ogOmrW&bwBIxdt+K+A3yD;V_t}R>0LF5GN)x zed{W(mq$!1ciVpPy1}W+9bm)Xrgda~bSbG?a3DdjluYV+O9SdLnMpASqX+9EZY3c7C@7#N&OTq83NAIrA4U>si~GJ7Ut&0mS)MRMrP)TsYwQg=9VeOrfC+2Nk)mu rLdL(;85kJ&K)M1F(^DCYOe>5`v<1B4~iR4S3j3^P6tl1hi%%HopDWWCg4y_C{| z{JavqiARt`YJFJnVhX)qGzOMplv!L->5yAl zT#}irms+fsQd*FoSE84kpF44v;tmD|1}(60ndy0nC8b5F42emG<`xDZ$;L?r7Ky3J=GDKJX@I;2(iM=Hp2}coT4AYeplx7Y_5oxZgQu&X%Q~lo FCIGT9P(J_w literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/up.png b/doc/libs/common/doc/src/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..17d9c3ec491ae1ba22188ce85985623c92ffa9be GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?X- z3h)VW6&DdqOG|Thu-mqE%ZlYoyE{8BU%nLR@2jS)FmvY2qel)W#Kk;%^zi@x|I?Un z*fKCM@RbDl1^-6|46X<6oM2#J;4JWnEM{Qf76M_$OLy!3FfcHvmbgZg1m~xflqVLY zGWaGY7v<-srer26xMdclmgg5`7c2NiC>R+Sn6#IzInThrAO_OlT$Gwvl9`{U5R#dj z%3x@qZ(yu%U~+tY4<`cyLy@P8V@SoEspmFwHW&!FJyeg_(XezvV9WvAI|r@_>dZZG zPW6aiOT!J--9O?NG0%AP;}ge|4lDQN4=-}8`?JGwx}?mMnO)OdyQdu$nQCjPRV}jm z$u!Qa8E-cQ-r3Nz>Y(YPTd#BPEH+&8GWqfD!}4*53%dA!%#3$cIv;a~fq{X+)78&q Iol`;+0POUaApigX literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/up_disabled.png b/doc/libs/common/doc/src/images/up_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e22bc8712192df3a8faa3264b0ec71ff3aaaa96c GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhl|Nrwy-~uYR zhzc&Dg3GAj3M#mY3a+7o>!{!cD!7RXZlQwPsNfDNxQhzzp@RFU-~lRlhzcH|g2$-f z2`YGs3Z9{Y=cwQXDtL(sUZH~5sNfAMc#8_&p@R3Q-~%f7hzdTTg3qYn3o7`E3cjI& z@2KDhD)@;CexZWjsNfGO_=^hup@RP~@T}IQi-CcGuO!GX7$yd$8C(zCIl;idaKO{W zF{ENn(v#GNhX4QTi=1XMFdktN{`IZ@p>>FWLcsvS9SfKMdlAq$6s7@ONV`8frfZ~QMdG-hBC2vApc;y96* zmcYQFpvLCIAmDK02m=$xYzYU3L}6wQg@_sdlHD~JI1CtW_~{utEVY`?z`(%Z>FVdQ I&MBb@06Fw0-2eap literal 0 HcmV?d00001 diff --git a/doc/libs/common/doc/src/images/warning.png b/doc/libs/common/doc/src/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..1c33db8f34a8b42b373179b46a2d8d8a10e061a9 GIT binary patch literal 1241 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NW(e>JaphoO5CF?5GB9W| zFc>m0I59AIF)#!%FhnshWHT@nGcZ&$Ftji*^e`|?VPKe2T|Fl#Xiikroa*YO3=B&x zEth(EEp2I8I%UezrAyZ`FswB+TsvjTRtAQxnwndCdbZA)vvujxty{P5WnkF5cJ1D+ zTaPg?91{>YCLwX`*s*gA4Ce#{&Phm|)6~4iz;I1d^V+p*_ZS%N-Mjakf#JEL;`8Uv z-!m}0=iqq%{{43bhVS3M|7T$MKMF=efJz}yVEuRs0|NtNlDE4HLkFv@2Ll7c3r`ov zkcwNmlWOyu3izvS7ejxP>R-!INP5f(XN|IS^C^Iyp?`SUk1vQO?s(K&l| zi|Nkt0@~*ymDp65*E-HED6u(s{Mfrxmah{JrgAMTIq)Du?nC5nnYTRgThA|azEdIl zD^uvV>~q(b?>`Fd;xnAbe7so1I$-&keKN}|vNNOCvX<~g{)wp7{&hR__v^cBU*Gq* zV3YS!cBPWsl#eNWc|~nAXWMOB8tQWBuXo=4>}cytyX_5F^Az{bVJ>7~U~n#RjVKAu zPb(=;EJ|f?&`{R&%uP&B^-WCAOwLv?(KFJsP_VSrH?Yt*FjPn`$}BFabjYnNF3C*R zOD)z*DJ{s)E742N&z-nSaR&nfgBIAh%=Em(lG377hGY|?B=Z!b6jL*k#Ka_13kwTN zLrZf@a|7cv1EVApQ-8txlNlHo_&~Y>64O%|j7%zwOtcNO4T_>U4H+017(8A5T-G@y GGywozG)2h( literal 0 HcmV?d00001 diff --git a/doc/tools.html b/doc/tools.html new file mode 100644 index 0000000..8b5878e --- /dev/null +++ b/doc/tools.html @@ -0,0 +1,57 @@ +--- +title: Boost Tools +copyright: Rene Rivera 2007. +revised: +--- + + +Boost Tools + + + +Boost Tools +=========== + +Boost developers, testers, and maintainers have developed + various programs to help with the administration of the Boost + Libraries. Like everything else about Boost, these tools are + available in source form, and are part of the regular Boost + distribution. + + +Users may find these tools useful when porting Boost + libraries to a new platform, or for use with their own + applications. +[Boost.Build](/build/) +The Boost build system, including the full Boost version + of the jam sources. +[Regression](tools/regression/index.html) +The Boost regression testing system reporting + sources. +[Inspect](tools/inspect/index.html) +The inspection tool used to detect errors in the Boost + directory hierarchy. +[BoostBook](../doc/html/boostbook.html) +A Boost documentation system, based on [DocBook](http://www.docbook.org/) and the [Extensible Stylesheet Language + (XSL)](http://www.w3.org/Style/XSL/), used by some Boost libraries. +[bcp](tools/bcp/) +A utility to extract subsets of Boost; to determine which + parts of Boost your code is using; and to print reports on + Boost usage (including Licence information). +[QuickBook](tools/quickbook/index.html) +QuickBook is a WikiWiki style documentation tool geared + towards C++ documentation using simple rules and markup for + simple formatting tasks. QuickBook generates [BoostBook](../doc/html/boostbook.html) XML. +[Wave](../libs/wave/doc/wave_driver.html) +A Standards conformant C/C++ preprocessor usable on top + of any other compiler. Usable for instance for the debugging + of the expansion of macros in your code or as a replacement + for your built-in preprocessor. + + + + + + + + diff --git a/donate/index.html b/donate/index.html new file mode 100644 index 0000000..590ec07 --- /dev/null +++ b/donate/index.html @@ -0,0 +1,121 @@ +--- +title: Donate to the Boost C++ Libraries +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2007. +revised: 2014-08-25 01:40:46 +0100 +--- + + +Donate to the Boost C++ Libraries + +/\* + /\*]]>\*/ + + + + + +Donate to the Boost C++ Libraries +================================= + +According to [OpenHub's + Boost page](https://www.openhub.net/p/boost/estimated_cost), as of August 2014 there are 14.2 million lines + of code in Boost. Given the high quality of coding needed to + pass Boost's community review process, and the extensive unit + and functional testing required, a cost of US$20/line is not + unreasonable. By that metric, the Boost C++ Libraries would + cost US$284 million to rewrite from scratch in a commercial + organization. + + +If you want more of the same, please donate generously. We + will use donations to fund Boost infrastructure, help finance + [the annual C++ Now conference](http://cppnow.org/), + and help fund students to work on Boost code without having to + worry as much about finding the time or money to do so. You + should be aware we may also use donations for any other purpose + the Boost steering committee feels appropriate. +Why ask for donations for the first time in fifteen + years? +----------------------------------------------------------- + + +Boost was not generated, for the most part, by any + commercial organization. It is available in the public interest + as one of the purest forms of open source: its license, + [the Boost + Software License](/LICENSE_1_0.txt), is highly permissive and allows + unrestricted commercial use. Most of the code was written, + documented, and tested in the spare and family time of some of + the very best C++ engineers in the world, many of whom are also + involved in the ISO C++ standardization process. Many of the + additions to the C++ 11 standard library started life in the + Boost libraries, and so will many of the additions and changes + to the next C++ standard library. + + +Yet, for its first fifteen years, Boost has never asked for + donations of money from its users. So why begin now? + + +As Boost grows, more time and resources are being spent on + dealing with the size and complexity of Boost, especially as + libraries are transitioned to make full use of the new language + features in C++ 11/14. If you wish to support those efforts to + bring more Boost libraries into first tier support for the + latest generation of C++, please donate generously. +Why you should donate with a recurring monthly + donation +-------------------------------------------------------- + + +Boost has participated in [Google's + Summer of Code](https://en.wikipedia.org/wiki/Google_Summer_of_Code) since 2007. This is an annual student open-source programming stipend program lasting three months during + which experienced Boost developers mentor students who work on + improving Boost libraries, usually in all the boring, thankless + stuff none of us like to do. The problem with the three month + duration is that the student is only just getting familiar + enough with the Boost libraries to ramp up their + productivity and rate of output when the program ends. This + leads to these outcomes: + + +* We don't reap the full rewards of what we should given + the substantial investment in mentoring our developers invest + into students each year. +* The student is just getting into the Boost libraries when + they need to return to concentrating on their studies, and + often back to the part time work needed to finance the high + expense of university study nowadays. +* Students, when they graduate, get pulled into the + development of proprietary rather than open-source software, + or they end up gravitating to one of the many open source + projects much better at running a student-to-developer + pipeline than Boost historically has been. + + +Whatever the case, Boost is not benefiting as it should from + enthusiastic students with great ideas about where C++ should + go next, and we hope that *you* can help us change + that. + + +So, if you or your company or organization has benefited + from the Boost C++ Libraries, or you would like to assist + promising young C++ engineers develop their talents to the + full, please strongly consider making a regular monthly + donation to Boost! Please donate generously. Thank you in + advance! + + + + + + + + + diff --git a/generated/download-items.html b/generated/download-items.html new file mode 100644 index 0000000..771747f --- /dev/null +++ b/generated/download-items.html @@ -0,0 +1,32 @@ +--- +title: +copyright: +revised: +---* [Current Release](#live) +* [Old Boost Releases](#history) +* [Git Repositories](#repository) + + +Current Release +--------------- + + +### Version 1.80.0 + + +August 10th, 2022 21:25 GMT + + Updated Libraries: Asio, Atomic, Filesystem, GIL, Histogram, Iterator, JSON, + LEAF, Locale, Log, Math, Multiprecision, Multi-index Containers, Nowide, Optional, + STLInterfaces, System, Unordered, Utility, Wave. +* [Release Notes](/users/history/version_1_80_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/) +* [Documentation](/doc/libs/1_80_0/) + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_80\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.bz2) | 1e19565d82e43bc59209a168f5ac899d3ba471d55c7610c677d4ccf2c9c500c0 | +| [boost\_1\_80\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz) | 4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 | +| windows | [boost\_1\_80\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.7z) | d12a2af721e22dbfb984ef061ee4c4ab2387f1904f6d65bc5acebaa34d6366ec | +| [boost\_1\_80\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.zip) | e34756f63abe8ac34b35352743f17d061fcc825969a2dd8458264edb38781782 | + + diff --git a/generated/history-items.html b/generated/history-items.html new file mode 100644 index 0000000..a6c9473 --- /dev/null +++ b/generated/history-items.html @@ -0,0 +1,1236 @@ +--- +title: +copyright: +revised: +--- + +[Version 1.80.0](/users/history/version_1_80_0.html) +----------------------------------------------------- + + +August 10th, 2022 21:25 GMT + + Updated Libraries: Asio, Atomic, Filesystem, GIL, Histogram, Iterator, JSON, + LEAF, Locale, Log, Math, Multiprecision, Multi-index Containers, Nowide, Optional, + STLInterfaces, System, Unordered, Utility, Wave. + + +* [Release Notes](/users/history/version_1_80_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/) +* [Documentation](/doc/libs/1_80_0/) +[Version 1.79.0](/users/history/version_1_79_0.html) +----------------------------------------------------- + + +April 13th, 2022 14:22 GMT + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, Filesystem, + Geometry, Integer, IO, Iterator, JSON, Log, Multi-index Containers, Nowide, + Optional, Predef, Smart Pointers, System, ThrowException, Unordered, Variant2, + Wave, LEAF, QVM. + + +* [Release Notes](/users/history/version_1_79_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/) +* [Documentation](/doc/libs/1_79_0/) +[Version 1.78.0](/users/history/version_1_78_0.html) +----------------------------------------------------- + + +December 8th, 2021 03:45 GMT + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, DLL, Filesystem, + Geometry, JSON, Lambda2, Log, Math, MultiIndex, Multiprecision, Nowide, PFR, + Predef, Regex, System, Utility, Variant2. + + +* [Release Notes](/users/history/version_1_78_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/) +* [Documentation](/doc/libs/1_78_0/) +[Version 1.77.0](/users/history/version_1_77_0.html) +----------------------------------------------------- + + +August 11th, 2021 14:25 GMT + + New Libraries: Describe, Lambda2. Updated Libraries: Any, Asio, Atomic, Beast, + Conversion, Core, DLL, Filesystem, JSON, LexicalCast, Log, Mp11, MultiIndex, + Nowide, PFR, PropertyTree, System, UUID. + + +* [Release Notes](/users/history/version_1_77_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/) +* [Documentation](/doc/libs/1_77_0/) +[Version 1.76.0](/users/history/version_1_76_0.html) +----------------------------------------------------- + + +April 16th, 2021 21:05 GMT + + Updated Libraries: Asio, Atomic, Beast, Bind, Container, Core, DLL, Filesystem, + GIL, Intrusive, Interprocess, JSON, LexicalCast, Log, Math, Move, Multiprecision, + Nowide, Optional, Outcome, Parameter, PFR, PolyCollection, Predef, PropertyTree, + Regex, StackTrace, TypeTraits, Variant2. + + +* [Release Notes](/users/history/version_1_76_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/) +* [Documentation](/doc/libs/1_76_0/) +[Version 1.75.0](/users/history/version_1_75_0.html) +----------------------------------------------------- + + +December 11th, 2020 19:50 GMT + + New Libraries: JSON, LEAF, PFR. Updated Libraries: Asio, Atomic, Beast, Container, + Endian, Filesystem, GIL, Histogram, Interprocess, Intrusive, Log, Move, Mp11, + Optional, Outcome, Polygon, Preprocessor, Rational, Signal2, System, uBLAS, + VMD, Wave. + + +* [Release Notes](/users/history/version_1_75_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/) +* [Documentation](/doc/libs/1_75_0/) +[Version 1.74.0](/users/history/version_1_74_0.html) +----------------------------------------------------- + + +August 14th, 2020 05:02 GMT + + New Libraries: STLInterfaces. Updated Libraries: Asio, Atomic, Beast, Bimap, + Config, Core, DLL, Endian, Filesystem, Flyweight, Format, Geometry, GIL, Heap, + Integer, Iterator, LexicalCast, Log, Mp11, MultiIndex, Nowide, Outcome, PolyCollection, + Polygon, SmartPtr, Stacktrace, System, TypeTraits, Variant, Variant2, Wave, + YAP. + + +* [Release Notes](/users/history/version_1_74_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/) +* [Documentation](/doc/libs/1_74_0/) +[Version 1.73.0](/users/history/version_1_73_0.html) +----------------------------------------------------- + + +April 28th, 2020 03:57 GMT + + New Libraries: Nowide, StaticString. Updated Libraries: Align, Any, Asio, Assert, + Atomic, Beast, Context, Conversion, DateTime, DLL, DynamicBitset, Flyweight, + Geometry, GIL, Histogram, ICL, IO, LexicalCast, Log, Math, Mp11, MultiIndex, + Multiprecision, Outcome, PolyCollection, Stacktrace, Test, ThrowException, + TTI, TypeIndex, Utility, Variant, Variant2, WinAPI. + + +* [Release Notes](/users/history/version_1_73_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/) +* [Documentation](/doc/libs/1_73_0/) +[Version 1.72.0](/users/history/version_1_72_0.html) +----------------------------------------------------- + + +December 11th, 2019 18:06 GMT + + Updated Libraries: Asio, Atomic, Beast, Circular Buffer, Context, Endian, Filesystem, + Functional/Factory, GIL, Histogram, Log, MPI, Math, Multiprecision, Outcome, + PolyCollection, Preprocessor, Smart Pointers, Test, VMD. + + +* [Release Notes](/users/history/version_1_72_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/) +* [Documentation](/doc/libs/1_72_0/) +[Version 1.71.0](/users/history/version_1_71_0.html) +----------------------------------------------------- + + +August 19th, 2019 15:31 GMT + + New Libraries: Variant2. Updated Libraries: Align, Any, Asio, Beast, CircularBuffer, + Container, Context, Conversion, Core, DynamicBitset, Endian, Fiber, Filesystem, + Flyweight, Histogram, Iostreams, Interprocess, Intrusive, LexicalCast, Log, + Math, Metaparse, Move, MultiArray, MultiIndex, Outcome, Parameter, PtrContainer, + PolyCollection, SmartPtr, Stacktrace, Test, Utility, Uuid, Variant, Yap. + + +* [Release Notes](/users/history/version_1_71_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/) +* [Documentation](/doc/libs/1_71_0/) +[Version 1.70.0](/users/history/version_1_70_0.html) +----------------------------------------------------- + + +April 12th, 2019 06:04 GMT + + New Libraries: Outcome, Histogram. Updated Libraries: Asio, Beast, Context, + Coroutine2, Dll, DynamicBitset, Fiber, Filesystem, Integer, Log, Math, Mp11, + MultiIndex, Multiprecision, Polycollection, Spirit, Stacktrace, Test, TypeIndex, + TypeTraits, Variant, Ublas. + + +* [Release Notes](/users/history/version_1_70_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/) +* [Documentation](/doc/libs/1_70_0/) +[Version 1.69.0](/users/history/version_1_69_0.html) +----------------------------------------------------- + + +December 12th, 2018 02:58 GMT + + New Libraries: Safe Numerics. Updated Libraries: Any, Asio, Assign, Beast, + CircularBuffer, Concept Check, Core, DLL, Dynamic Bitset, Fiber, Filesystem, + Flyweight, Geometry, Integer, Iostreams, Iterator, LexicalCast, Log, Logic, + Math, Mp11, MultiArray, Multi-index Containers, Multiprecision, PolyCollection, + Pool, Preprocessor, Rational, Spirit, Stacktrace, System, Test, TypeIndex, + Utility, Variant, YAP. Discontinued Libraries: Signals. + + +* [Release Notes](/users/history/version_1_69_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/) +* [Documentation](/doc/libs/1_69_0/) +[Version 1.68.0](/users/history/version_1_68_0.html) +----------------------------------------------------- + + +August 9th, 2018 03:46 GMT + + New Libraries: YAP. Updated Libraries: Beast, Context, Coroutine2, Fiber, Fusion, + Geometry, GIL, Graph, Lexical Cast, Log, Math, Multiprecision, Optional, Predef, + Program Options, Python, Rational, System, Signals, Spirit, Stacktrace, Test, + TypeIndex, Uuid. + + +* [Release Notes](/users/history/version_1_68_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/) +* [Documentation](/doc/libs/1_68_0/) +[Version 1.67.0](/users/history/version_1_67_0.html) +----------------------------------------------------- + + +April 14th, 2018 20:37 GMT + + New Libraries: Contract, HOF. Updated Libraries: Asio, Atomic, Beast, Container + Hash, Context, Core, Coroutine2, DateTime, DLL, Fiber, Filesystem, Fusion, + Locale, Log, Math, Multi-index Containers, Multiprecision, Optional, Phoenix, + PolyCollection, Python, Spirit, Stacktrace, Test, TypeIndex, TypeTraits, Unordered, + Units, Uuid, Utility, Variant. + + +* [Release Notes](/users/history/version_1_67_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/) +* [Documentation](/doc/libs/1_67_0/) +[Version 1.66.0](/users/history/version_1_66_0.html) +----------------------------------------------------- + + +December 18th, 2017 13:58 GMT + + New Libraries: Beast, CallableTraits, Mp11. Updated Libraries: Asio, Atomic, + DateTime, Fiber, Format, Fusion, Geometry, Iterator, Log, Multi-index Containers, + Optional, PolyCollection, Predef, Stacktrace, Thread, Utility, Uuid, Variant. + + +* [Release Notes](/users/history/version_1_66_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/) +* [Documentation](/doc/libs/1_66_0/) +[Version 1.65.1](/users/history/version_1_65_1.html) +----------------------------------------------------- + + +September 7th, 2017 17:31 GMT + + Bug fixes: Config, Context, Fiber, Smart Pointers, Stacktrace, Thread + + +* [Release Notes](/users/history/version_1_65_1.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/source/) +* [Documentation](/doc/libs/1_65_1/) +[Version 1.65.0](/users/history/version_1_65_0.html) +----------------------------------------------------- + + +August 21st, 2017 20:50 GMT + + New Libraries: PolyCollection, Stacktrace. Removed Libraries: TR1. Updated + Libraries: Asio, Context, Config, Core, Coroutine2, DLL, Fiber, Fusion, Geometry, + Hash, Log, Phoenix, Predef, Program Options, Python, Smart Pointers, Test, + Thread, TypeIndex, Typeof, Unordered, Utility, Variant. + + +* [Release Notes](/users/history/version_1_65_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/source/) +* [Documentation](/doc/libs/1_65_0/) +[Version 1.64.0](/users/history/version_1_64_0.html) +----------------------------------------------------- + + +April 19th, 2017 17:42 GMT + + New Library: Process. Updated Libraries: Any, Atomic, Config, Container, Context, + Conversion, Core, Coroutine2, DLL, Fiber, Geometry, Hash, Interprocess, Intrusive, + LexicalCast, Math, Multi-index Containers, Multiprecision, Predef, Regex, Smart + Pointers, Test, TypeIndex, TypeTraits, Unordered, Variant. + + +* [Release Notes](/users/history/version_1_64_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/) +* [Documentation](/doc/libs/1_64_0/) +[Version 1.63.0](/users/history/version_1_63_0.html) +----------------------------------------------------- + + +December 26th, 2016 23:43 GMT + + Updated Libraries: Atomic, Container, Context, Fiber, Fusion, Geometry, Hash, + Interprocess, Intrusive, LexicalCast, Log, Metaparse, Move, Optional, Phoenix, + Python, Test, TypeIndex, Units, Unordered. + + +* [Release Notes](/users/history/version_1_63_0.html) +* [Download](https://sourceforge.net/projects/boost/files/boost/1.63.0/) +* [Documentation](/doc/libs/1_63_0/) +[Version 1.62.0](/users/history/version_1_62_0.html) +----------------------------------------------------- + + +September 28th, 2016 15:17 GMT + + New Libraries: Fiber, QVM Updated Libraries: Chrono, Circular Buffer, Container, + Context, Coroutine2, DLL, Functional/Forward, Geometry, Interprocess, Intrusive, + Lexical Cast, Log, Math, Phoenix, Regex, Test, Thread, TypeIndex, Unordered, + Variant. + + +* [Release Notes](/users/history/version_1_62_0.html) +* [Download](https://sourceforge.net/projects/boost/files/boost/1.62.0/) +* [Documentation](/doc/libs/1_62_0/) +[Version 1.61.0](/users/history/version_1_61_0.html) +----------------------------------------------------- + + +May 13th, 2016 02:58 GMT + + New Libraries: Compute, DLL, Hana, Metaparse. Updated Libraries: Any, Container, + Context, Coroutine, Coroutine2, Fusion, Geometry, Interprocess, Intrusive, + Lexical Cast, Log, Move, Optional, Test, Variant. + + +* [Release Notes](/users/history/version_1_61_0.html) +* [Download](https://sourceforge.net/projects/boost/files/boost/1.61.0/) +* [Documentation](/doc/libs/1_61_0/) +[Version 1.60.0](/users/history/version_1_60_0.html) +----------------------------------------------------- + + +December 17th, 2015 15:52 GMT + + New Libraries: VMD Updated Libraries: Atomic, Chrono, Container, Context, Core, + Filesystem, Flyweight, Fusion, Interprocess, Intrusive, Lexical Cast, Locale, + Log, Move, Multi-index Containers, odeint, Optional, Predef, Test, Thread, + UUID. + + +* [Release Notes](/users/history/version_1_60_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.60.0/) +* [Documentation](/doc/libs/1_60_0/) +[Version 1.59.0](/users/history/version_1_59_0.html) +----------------------------------------------------- + + +August 13th, 2015 15:23 GMT + + New Libraries: Convert, Coroutine2. Updated Libraries: Container, Context, + Coroutine, Fusion, Geometry, Interprocess, Intrusive, Lexical Cast, Log, Move, + Multi-index Containers, Predef, Program Options, Property Tree, Test, TypeIndex, + Variant. + + +* [Release Notes](/users/history/version_1_59_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.59.0/) +* [Documentation](/doc/libs/1_59_0/) +[Version 1.58.0](/users/history/version_1_58_0.html) +----------------------------------------------------- + + +April 17th, 2015 07:53 GMT + + New Libraries: Endian, Sort. Updated Libraries: Asio, Chrono, Container, Context, + Conversion, DateTime, Flyweight, Function, Functional/Factory, Fusion, Geometry, + Hash, Interprocess, Intrusive, Lexical Cast, Log, Math, Move, Multi-index Containers, + Multiprecision, Optional, Phoenix, Predef, Random, Thread, TypeErasure, TypeIndex, + Units, Unordered, Variant. + + +* [Release Notes](/users/history/version_1_58_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.58.0/) +* [Documentation](/doc/libs/1_58_0/) +[Version 1.57.0](/users/history/version_1_57_0.html) +----------------------------------------------------- + + +November 3rd, 2014 21:55 GMT + + Updated Libraries: Any, Asio, Circular Buffer, Config, Container, Coroutine, + Flyweight, Geometry, Interprocess, Intrusive, Iterator, Lexical Cast, Math, + Move, MultiArray, Multiprecision, Multi-Index Containers, Preprocessor, Thread, + TypeIndex, TypeTraits, Units, Unordered, Utility, uBLAS. + + +* [Release Notes](/users/history/version_1_57_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.57.0/) +* [Documentation](/doc/libs/1_57_0/) +[Version 1.56.0](/users/history/version_1_56_0.html) +----------------------------------------------------- + + +August 7th, 2014 16:08 GMT + + New libraries: Align, TypeIndex. New modules from existing code: Assert, Core, + Lexical\_Cast, Throw\_Exception. Updated libraries: Accumulators, Any, Asio, + Assign, Atomic, Circular Buffer, Concept Check, Container, Context, Coroutine, + Dynamic Bitset, Chrono, Flyweight, Fusion, Geometry, Hash, Interprocess, Intrusive, + Log, Math, Move, MPL, MultiArray, Multi-index Containers, Multiprecision, Odeint, + Optional, Predef, Preprocessor, Program Options, Regex, Smart Pointers, Thread, + TTI, Unordered, Utility, UUID, Variant. Deprecated Libraries: TR1 + + +* [Release Notes](/users/history/version_1_56_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.56.0/) +* [Documentation](/doc/libs/1_56_0/) +[Version 1.55.0](/users/history/version_1_55_0.html) +----------------------------------------------------- + + +November 11th, 2013 19:50 GMT + + New Libraries: Predef. Updated Libraries: Accumulators, Any, Asio, Atomic, + Config, Chrono, Circular Buffer, Container, Context, Coroutine, Filesystem, + Fusion, Geometry, Graph, Hash, Interprocess, Intrusive, Lexical Cast, Log, + Math, Meta State Machine, Move, Multiprecision, Multi-index Containers, MPI, + Phoenix, Polygon, PropertyMap, Rational, Thread, Timer, Type Traits, Unordered, + Utility, Variant, Wave, xpressive. + + +* [Release Notes](/users/history/version_1_55_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.55.0/) +* [Documentation](/doc/libs/1_55_0/) +[Version 1.54.0](/users/history/version_1_54_0.html) +----------------------------------------------------- + + +July 1st, 2013 17:10 GMT + + Changes to supported CPUs. New Libraries: Log, TTI, Type Erasure. Updated Libraries: + Accumulators, Algorithm, Any, Asio, Chrono, Circular Buffer, Container, Context, + Coroutine, Geometry, Graph, Interprocess, Intrusive, Iostreams, Lexical Cast, + Math, Meta State Machine, Move, Multiprecision, Polygon, Property Map, Range, + Thread, Type Traits, uBLAS, Unordered, Utility, Variant, Wave, xpressive Deprecated + Library: Signals. + + +* [Release Notes](/users/history/version_1_54_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.54.0/) +* [Documentation](/doc/libs/1_54_0/) +[Version 1.53.0](/users/history/version_1_53_0.html) +----------------------------------------------------- + + +February 4th, 2013 18:29 GMT + + New Libraries: Atomic, Coroutine, Lockfree, Multiprecision, Odeint. Updated + Libraries: Algorithm, Array, Asio, Bimap, Chrono, Container, Context, Geometry, + GIL, Graph, Hash, Interprocess, Intrusive, Lexical Cast, Locale, Math, MinMax, + Move, Polygon, Random, Range, Ratio, Regex, Smart Pointers, StringAlgo, Thread, + Utility, Unordered, Variant, Wave and xpressive. + + +* [Release Notes](/users/history/version_1_53_0.html) +* [Download](https://sourceforge.net/projects/boost/files/boost/1.53.0/) +* [Documentation](/doc/libs/1_53_0/) +[Version 1.52.0](/users/history/version_1_52_0.html) +----------------------------------------------------- + + +November 5th, 2012 16:05 GMT + + Updated Libraries: Accumulators, Config, Chrono, Container, DateTime, Foreach, + Function, Graph, Hash, Interprocess, Iterator, Lexical Cast, Math, Phoenix, + Polygon, Proto, Ratio, Result\_of, Thread, uBLAS, Unordered, Uuid, Wave, xpressive. + + +* [Release Notes](/users/history/version_1_52_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.52.0/) +* [Documentation](/doc/libs/1_52_0/) +[Version 1.51.0](/users/history/version_1_51_0.html) +----------------------------------------------------- + + +August 20th, 2012 23:00 GMT + + New Libraries: Context. Updated Libraries: Algorithm, Asio, Config, Chrono, + Geometry, Graph, Hash, Lexical Cast, Math, MSM, Proto, Ratio, Regex, Thread, + Unordered, Wave, xpressive + + +* [Release Notes](/users/history/version_1_51_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.51.0/) +* [Documentation](/doc/libs/1_51_0/) +[Version 1.50.0](/users/history/version_1_50_0.html) +----------------------------------------------------- + + +June 28th, 2012 12:48 GMT + + New Libraries: Algorithm, Functional/OverloadedFunction, LocalFunction, Utility/IdentityType. + Updated Libraries: Accumulators, Array, Asio, Bimap, Chrono, Concept Check, + Filesystem, Foreach, Graph, Geometry, Hash, Iostreams, Iterator, MultiArray, + Lexical cast, Locale, MSM, Program Options, PropertyMap, Proto, Ratio, ScopeExit, + Thread, Unordered, Wave, xpressive + + +* [Release Notes](/users/history/version_1_50_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.50.0/) +* [Documentation](/doc/libs/1_50_0/) +[Version 1.49.0](/users/history/version_1_49_0.html) +----------------------------------------------------- + + +February 24th, 2012 21:20 GMT + + New Library: Heap. Updated Libraries: Asio, Chrono, Container, Filesystem, + Foreach, Geometry, Graph, Icl, Interprocess, Intrusive, Lexical Cast, Locale, + Move, Property Tree, Proto, Spirit, Thread, Unordered, Uuid, xpressive. + + +* [Release Notes](/users/history/version_1_49_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.49.0/) +* [Documentation](/doc/libs/1_49_0/) +[Version 1.48.0](/users/history/version_1_48_0.html) +----------------------------------------------------- + + +November 15th, 2011 15:47 GMT + + New Libraries: Container, Locale, Move. Updated Libraries: Asio, Chrono, Config, + Fusion, Geometry, Graph, Interprocess, Intrusive, Lexical cast, Math, MSM, + Numeric Conversion, Proto, Regex, Spirit, TypeTraits, Unordered, Wave + + +* [Release Notes](/users/history/version_1_48_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.48.0/) +* [Documentation](/doc/libs/1_48_0/) +[Version 1.47.0](/users/history/version_1_47_0.html) +----------------------------------------------------- + + +July 11th, 2011 22:19 GMT + + New Libraries: Chrono, Geometry, Phoenix and Ratio. Updated Libraries: Accumulators, + Asio, Config, DateTime, Dynamic Bitset, Foreach, Function, Function Types, + Graph, Iostreams, Iterator, Lexical Cast, Logic, Math, Meta State Machine, + MultiIndex, Proto, Random, Range, Spirit, Tokenizer, Utility, Uuid, Wave + + +* [Release Notes](/users/history/version_1_47_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.47.0/) +* [Documentation](/doc/libs/1_47_0/) +[Version 1.46.1](/users/history/version_1_46_1.html) +----------------------------------------------------- + + +March 12th, 2011 15:45 GMT + + Bug fixes: Asio, Fusion, Graph, Icl, Math, Polygon, Proto, Property Tree, Signals2, + TR1, Unordered. + + +* [Release Notes](/users/history/version_1_46_1.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.46.1/) +* [Documentation](/doc/libs/1_46_1/) +[Version 1.46.0](/users/history/version_1_46_0.html) +----------------------------------------------------- + + +February 21st, 2011 20:36 GMT + + New Libraries: Icl. Updated Libraries: Array, Asio, Bind, Concept Check, Filesystem, + Fusion, Hash, Iostreams, Iterator, Math, Meta State Machine, Optional, Pool, + Program Options, Proto, Signals, Spirit, Tokenizer, Unordered, Wave. Updated + Tools: Boostbook, Inspect, Quickbook. + + +* [Release Notes](/users/history/version_1_46_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.46.0/) +* [Documentation](/doc/libs/1_46_0/) +[Version 1.45.0](/users/history/version_1_45_0.html) +----------------------------------------------------- + + +November 19th, 2010 16:00 GMT + + Updated Libraries: Asio, Config, Flyweight, Foreach, Fusion, Graph, Interprocess, + Math, Meta State Machine, MultiArray, Proto, Spirit, TypeTraits, uBLAS, Unordered, + Wave, Xpressive. Updated tools: Boostbook, Quickbook + + +* [Release Notes](/users/history/version_1_45_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.45.0/) +* [Documentation](/doc/libs/1_45_0/) +[Version 1.44.0](/users/history/version_1_44_0.html) +----------------------------------------------------- + + +August 13th, 2010 17:00 GMT + + New Libraries: Meta State Machine, Polygon. Updated Libraries: Accumulators, + Asio, Config, Filesystem, Foreach, Fusion, Hash, Iostreams, Math, MPL, Multi-index + Containers, Proto, Regex, Spirit, Thread, TR1, Type Traits, uBLAS, Utility, + Uuid, Wave, Xpressive. Updates for Quickbook and Boostbook. + + +* [Release Notes](/users/history/version_1_44_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.44.0/) +* [Documentation](/doc/libs/1_44_0/) +[Version 1.43.0](/users/history/version_1_43_0.html) +----------------------------------------------------- + + +May 6th, 2010 12:00 GMT + + New Libraries: Functional/Factory, Functional/Forward. Major Update: Range. + Updated Libraries: Accumulators, Array, Asio, Fusion, Iostreams, Multi-index + Containers, Proto, Random, Spirit, Thread, Unordered, Uuid, Wave, Xpressive. + Also, updates to the build system and quickbook. + + +* [Release Notes](/users/history/version_1_43_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.43.0/) +* [Documentation](/doc/libs/1_43_0/) +[Version 1.42.0](/users/history/version_1_42_0.html) +----------------------------------------------------- + + +February 2nd, 2010 14:00 GMT + + New Libraries: Uuid. Updated Libraries: Asio, Circular Buffer, Fusion, Graph, + Integer, Iostreams, Program.Options, PropertyMap, Proto, Regex, Spirit, Unordered, + Xpressive. + + +* [Release Notes](/users/history/version_1_42_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.42.0/) +* [Documentation](/doc/libs/1_42_0/) +[Version 1.41.0](/users/history/version_1_41_0.html) +----------------------------------------------------- + + +November 17th, 2009 17:00 GMT + + New Library: Property Tree. Updated libraries: DateTime, Filesystem, Iostreams, + Math, Multi-index Containers, Proto, Python, Regex, Spirit, System, Thread, + Unordered, Utility, Wave, Xpressive. Updates to boost build and quickbook. + The CMake build system for Boost, still under development [here](http://sodium.resophonic.com/boost-cmake/current-docs/), + has been removed from the main release to avoid confusion. + + +* [Release Notes](/users/history/version_1_41_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.41.0/) +* [Documentation](/doc/libs/1_41_0/) +[Version 1.40.0](/users/history/version_1_40_0.html) +----------------------------------------------------- + + +August 27th, 2009 17:00 GMT + + Build System improvements. Updated Libraries: Accumulators, Asio, Circular + Buffer, Foreach, Function, Fusion, Graph, Hash, Interprocess, Intrusive, MPL, + Program.Options, Property Map, Proto, Random, Serialization, Unordered, Xpressive. + + +* [Release Notes](/users/history/version_1_40_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.40.0/) +* [Documentation](/doc/libs/1_40_0/) +[Version 1.39.0](/users/history/version_1_39_0.html) +----------------------------------------------------- + + +May 2nd, 2009 12:00 GMT + + New Libraries: Signals2. Updated Libraries: Asio, Flyweight, Foreach, Hash, + Interprocess, Intrusive, Program.Options, Proto, PtrContainer, Range, Unordered, + Xpressive. Updated Tools: Boostbook, Quickbook. + + +* [Release Notes](/users/history/version_1_39_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.39.0/) +* [Documentation](/doc/libs/1_39_0/) +[Version 1.38.0](/users/history/version_1_38_0.html) +----------------------------------------------------- + + +February 8th, 2009 12:00 GMT + + New Libraries: Flyweight, ScopeExit, Swap. Updated Libraries: Accumulators, + Any, Asio, Config, Date\_Time, Exception, Filesystem, Graph, Hash, Interprocess, + Intrusive, Lexical Cast, Math, Multi-index Containers, Proto, Regex, Thread, + TR1, Type Traits, Unordered, Xpressive. Other Changes: Experimental CMake build + system. + + +* [Release Notes](/users/history/version_1_38_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.38.0/) +* [Documentation](/doc/libs/1_38_0/) +[Version 1.37.0](/users/history/version_1_37_0.html) +----------------------------------------------------- + + +November 3rd, 2008 12:00 GMT + + New Library: Proto. Updated Libraries: Asio, Circular Buffer, Dynamic Bitset, + Exception, Hash, Interprocess, Intrusive, Math, Type Traits, Unordered + + +* [Release Notes](/users/history/version_1_37_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.37.0/) +* [Documentation](/doc/libs/1_37_0/) +[Version 1.36.0](/users/history/version_1_36_0.html) +----------------------------------------------------- + + +August 14th, 2008 12:00 GMT + + New Libraries: Accumulators, Exception, Units, Unordered. Updated Libraries: + Asio, Assign, Circular Buffer, Foreach, Function, Hash, Interprocess, Intrusive, + Math, Multi-index Containers, MPI, PtrContainer, Spirit, Thread, Wave, Xpressive. + + +* [Release Notes](/users/history/version_1_36_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.36.0/) +* [Documentation](/doc/libs/1_36_0/) +[Version 1.35.0](/users/history/version_1_35_0.html) +----------------------------------------------------- + + +March 29th, 2008 12:00 GMT + + New Libraries: Asio, Bimap, Circular Buffer, Function Types, Fusion, GIL, Interprocess, + Intrusive, Math/Special Functions, Math/Statistical Distributions, MPI, System. + Updated Libraries: Graph, Hash, Iostreams, Multi Array, Multi-index Containers, + Serialization, Thread, Wave, Xpressive. + + +* [Release Notes](/users/history/version_1_35_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.35.0/) +* [Documentation](/doc/libs/1_35_0/) +[Version 1.34.1](/users/history/version_1_34_1.html) +----------------------------------------------------- + + +July 24th, 2007 12:00 GMT + + Bugfix Release. + + +* [Release Notes](/users/history/version_1_34_1.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.34.1/) +* [Documentation](/doc/libs/1_34_1/) +[Version 1.34.0](/users/history/version_1_34_0.html) +----------------------------------------------------- + + +May 12th, 2007 12:00 GMT + + New Libraries: Foreach, Statechart, TR1, Typeof, Xpressive. Updated Libraries: + Assign, Date\_time, Filesystem, Function, Hash, Graph, MultiArray, Multi-Index, + Optional, Parameter, Pointer Container, Python, Signals, Smart Pointer, String + Algorithm, Wave + + +* [Release Notes](/users/history/version_1_34_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.34.0/) +* [Documentation](/doc/libs/1_34_0/) +[Version 1.33.1](/users/history/version_1_33_1.html) +----------------------------------------------------- + + +December 5th, 2006 12:00 GMT + + Updated Libraries: Any, Config, Python, Smart Pointer, Regex, Iostreams, Functional/Hash, + Multi-index Containers, Graph, Signals, Thread, and Wave. + + +* [Release Notes](/users/history/version_1_33_1.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.33.1/) +* [Documentation](/doc/libs/1_33_1/) +[Version 1.33.0](/users/history/version_1_33_0.html) +----------------------------------------------------- + + +August 11th, 2005 12:00 GMT + + New Libraries: Iostream, Hash, Parameter, Pointer Container, Wave. Updated + Libraries: Any, Assignment, Bind, Date-Time, Graph, Multi-Index, Program Options, + Property Map, Python, Random Number, Range, Regex, Serialization, Signals. + + +* [Release Notes](/users/history/version_1_33_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.33.0/) +[Version 1.32.0](/users/history/version_1_32_0.html) +----------------------------------------------------- + + +November 19th, 2004 12:00 GMT + + New Libraries: Assignment, Minmax, Multi-Index, Numeric Conversion, Program + Options, Range, Serialization, String, Tribool. Updated Libraries: Graph, MPL, + Python, Signals, Utility, Test. Removed Libraries: Compose. + + +* [Release Notes](/users/history/version_1_32_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.32.0/) +* [Documentation](/doc/libs/1_32_0/) +[Version 1.31.0](/users/history/version_1_31_0.html) +----------------------------------------------------- + + +January 26th, 2004 12:00 GMT + + New Libraries: enable\_if, Variant. Updated Libraries: Date Time, Filesystem, + Iterator, MultiArray, Python, Random Number, Regex, Spirit, Test. Deprecated + Libraries: Compose. + + +* [Release Notes](/users/history/version_1_31_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.31.0/) +* [Documentation](/doc/libs/1_31_0/) +[Version 1.30.2](/users/history/version_1_30_2.html) +----------------------------------------------------- + + +August 19th, 2003 12:00 GMT + + Bugfix release + + +* [Release Notes](/users/history/version_1_30_2.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.30.2/) +[Version 1.30.1](/users/history/version_1_30_1.html) +----------------------------------------------------- + + +August 4th, 2003 12:00 GMT + + Withdrawn bug fix release, fixes for Lambda, Spirit, MPL, Function, Config, + Format, Regex, Smart Pointers, Python + + +* [Release Notes](/users/history/version_1_30_1.html) +[Version 1.30.0](/users/history/version_1_30_0.html) +----------------------------------------------------- + + +March 19th, 2003 12:00 GMT + + New Libraries: Filesystem, Optional, Interval, MPL, Spirit Updated Libraries: + Smart Pointers, Utility, Date-Time, Function, Operators, Test + + +* [Release Notes](/users/history/version_1_30_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.30.0/) +[Version 1.29.0](/users/history/version_1_29_0.html) +----------------------------------------------------- + + +October 10th, 2002 12:00 GMT + + New Libraries: Date-Time, Dynamic Bitset, Format. Updated Libraries: Function, + Multi-Array, Preprocessor, Python, Signals, uBLASH. + + +* [Release Notes](/users/history/version_1_29_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.29.0/) +[Version 1.28.0](/users/history/version_1_28_0.html) +----------------------------------------------------- + + +May 15th, 2002 12:00 GMT + + New Libraries: Lambda, I/O State Saver. Updated Libraries: Configuration, Random + Number, Smart Pointers, Function Utility. + + +* [Release Notes](/users/history/version_1_28_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.28.0/) +[Version 1.27.0](/users/history/version_1_27_0.html) +----------------------------------------------------- + + +February 5th, 2002 12:00 GMT + + Updated Libraries: Python, Integer, Function, Quaternions, Octonions, Smart + Pointers, Preprocessor, Threads. + + +* [Release Notes](/users/history/version_1_27_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.27.0/) +[Version 1.26.0](/users/history/version_1_26_0.html) +----------------------------------------------------- + + +November 30th, 2001 12:00 GMT + + New Libraries: Common Factor, Preprocessor. Updated Libraries: Iterator Adaptor, + Random Number, Operators. + + +* [Release Notes](/users/history/version_1_26_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.26.0/) +[Version 1.25.1](/users/history/version_1_25_1.html) +----------------------------------------------------- + + +November 5th, 2001 12:00 GMT + + Updated Libraries: Graph, Thread, Function. + + +* [Release Notes](/users/history/version_1_25_1.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.25.1/) +[Version 1.25.0](/users/history/version_1_25_0.html) +----------------------------------------------------- + + +October 1st, 2001 12:00 GMT + + New Libraries: Thread, Bind. Updated Libraries: Utility, Array, Config, Random + Number, Math, Tokenizer. + + +* [Release Notes](/users/history/version_1_25_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.25.0/) +[Version 1.24.0](/users/history/version_1_24_0.html) +----------------------------------------------------- + + +August 19th, 2001 12:00 GMT + + New Library: Tuple. + + +* [Release Notes](/users/history/version_1_24_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.24.0/) +[Version 1.23.0](/users/history/version_1_23_0.html) +----------------------------------------------------- + + +July 6th, 2001 12:00 GMT + + New Libraries: Any, Function, Tokenizer, Special functions, Octonions, Quaternions. + Updated Library: Smart Pointer. + + +* [Release Notes](/users/history/version_1_23_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.23.0/) +[Version 1.22.0](/users/history/version_1_22_0.html) +----------------------------------------------------- + + +May 25th, 2001 12:00 GMT + + New Libary: CRC. Updated Libraries: Graph, Integer, Regex, Smart Pointer, Utility. + + +* [Release Notes](/users/history/version_1_22_0.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.22.0/) +[Version 1.21.2](/users/history/version_1_21_2.html) +----------------------------------------------------- + + +April 24th, 2001 12:00 GMT + + New Libraries: Compatibility. Updated Libraries: Random Number, Integer, Graph. + + +* [Release Notes](/users/history/version_1_21_2.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.21.2/) +[Version 1.21.1](/users/history/version_1_21_1.html) +----------------------------------------------------- + + +March 14th, 2001 12:00 GMT + + Updated Libraries: Graph, Python, Regex. + + +* [Release Notes](/users/history/version_1_21_1.html) +* [Download](http://sourceforge.net/projects/boost/files/boost/1.21.1/) +[Version 1.21.0](/users/history/version_1_21_0.html) +----------------------------------------------------- + + +March 9th, 2001 12:00 GMT + + New Libraries: Iterator Adaptor, Pool, Test. Updated Libraries: Graph, Python, + Regular Expression, Type Traits. + + +* [Release Notes](/users/history/version_1_21_0.html) +[Version 1.20.2](/users/history/version_1_20_2.html) +----------------------------------------------------- + + +February 10th, 2001 12:00 GMT + + Updated Libraries: Array traits, Graph, Integer, Random Number, Rational Number, + Regular Expression, Smart Pointer, Timer. + + +* [Release Notes](/users/history/version_1_20_2.html) +* [Download](http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041&release_id=138112) +[Version 1.20.1](/users/history/version_1_20_1.html) +----------------------------------------------------- + + +January 10th, 2001 12:00 GMT + + Updated Libraries: Compressed Pair, Graph Library, Regular Expression. + + +* [Release Notes](/users/history/version_1_20_1.html) +[Version 1.20.0](/users/history/version_1_20_0.html) +----------------------------------------------------- + + +January 6th, 2001 12:00 GMT + + New Library: Conversion. Updated Libraries: Array, Graph, Regular Expression. + + +* [Release Notes](/users/history/version_1_20_0.html) +[Version 1.19.0](/users/history/version_1_19_0.html) +----------------------------------------------------- + + +December 10th, 2000 12:00 GMT + + New Libraries: Concept Check, Python, Static Assert, Property Map Concepts. + Updated Libraries: Graph, Regular Expression. + + +* [Release Notes](/users/history/version_1_19_0.html) +[Version 1.18.3](/users/history/version_1_18_3.html) +----------------------------------------------------- + + +November 18th, 2000 12:00 GMT + + Updated Libraries: Graph, Regular Expression, Cast. + + +* [Release Notes](/users/history/version_1_18_3.html) +[Version 1.18.2](/users/history/version_1_18_2.html) +----------------------------------------------------- + + +November 3rd, 2000 12:00 GMT + + Updated Libraries: Case, Graph, Regular Expression, Configuration. Utility + library split into separate libraries. + + +* [Release Notes](/users/history/version_1_18_2.html) +[Version 1.18.1](/users/history/version_1_18_1.html) +----------------------------------------------------- + + +October 15th, 2000 12:00 GMT + + Updated Libraries: Graph, Random, Regular Expression, Configuration. + + +* [Release Notes](/users/history/version_1_18_1.html) +[Version 1.18.0](/users/history/version_1_18_0.html) +----------------------------------------------------- + + +September 28th, 2000 12:00 GMT + + New Libraries: Graph, Regular Expression. Updated Libraries: Array, Functional, + Utility, Integer. + + +* [Release Notes](/users/history/version_1_18_0.html) +[Version 1.17.0](/users/history/version_1_17_0.html) +----------------------------------------------------- + + +August 3rd, 2000 12:00 GMT + + Added Library: Array. Updated Libraries: Array Traits, Random Number, Smart + Pointer. + + +* [Release Notes](/users/history/version_1_17_0.html) +[Version 1.16.1](/users/history/version_1_16_1.html) +----------------------------------------------------- + + +July 5th, 2000 12:00 GMT + + Updated Libraries: Integer, Random Number, Cast, Call Traits, Operators. + + +* [Release Notes](/users/history/version_1_16_1.html) +[Version 1.16.0](/users/history/version_1_16_0.html) +----------------------------------------------------- + + +June 28th, 2000 12:00 GMT + + New Libraries: Functional, iterator header, Updated Libraries: Random Number, + Rational, Cast, Smart Pointer, Config. + + +* [Release Notes](/users/history/version_1_16_0.html) +[Version 1.15.1](/users/history/version_1_15_1.html) +----------------------------------------------------- + + +June 21st, 2000 12:00 GMT + + Updated Libraries: Cast, Operators, Config. + + +* [Release Notes](/users/history/version_1_15_1.html) +[Version 1.15.0](/users/history/version_1_15_0.html) +----------------------------------------------------- + + +June 17th, 2000 12:00 GMT + + Added Library: Random Number. Updated Libraries: Utility, Config, Cast. + + +* [Release Notes](/users/history/version_1_15_0.html) +[Version 1.14.3](/users/history/version_1_14_3.html) +----------------------------------------------------- + + +May 29th, 2000 12:00 GMT + + Updated Libraries: Config, Type Traits. + + +* [Release Notes](/users/history/version_1_14_3.html) +[Version 1.14.2](/users/history/version_1_14_2.html) +----------------------------------------------------- + + +May 9th, 2000 12:00 GMT + + Documentation updates. + + +* [Release Notes](/users/history/version_1_14_2.html) +[Version 1.14.1](/users/history/version_1_14_1.html) +----------------------------------------------------- + + +March 17th, 2000 12:00 GMT + + Updated Libraries: Rational, Smart Pointer, Call Traits, Compressed Pair, Type + Traits. + + +* [Release Notes](/users/history/version_1_14_1.html) +[Version 1.14.0](/users/history/version_1_14_0.html) +----------------------------------------------------- + + +March 5th, 2000 12:00 GMT + + Updated Libraries: Integer. Experimental libraries moved to vault. + + +* [Release Notes](/users/history/version_1_14_0.html) +[Version 1.13.0](/users/history/version_1_13_0.html) +----------------------------------------------------- + + +February 29th, 2000 12:00 GMT + + Added Libraries: Utility, Type Traits, Call Traits, Compressed Pair. + + +* [Release Notes](/users/history/version_1_13_0.html) +[Version 1.12.0](/users/history/version_1_12_0.html) +----------------------------------------------------- + + +February 23rd, 2000 12:00 GMT + + Updated Library: Integer. + + +* [Release Notes](/users/history/version_1_12_0.html) +[Version 1.11.2](/users/history/version_1_11_2.html) +----------------------------------------------------- + + +February 21st, 2000 12:00 GMT + + Updated Libraries: Smart Pointer. + + +* [Release Notes](/users/history/version_1_11_2.html) +[Version 1.11.1](/users/history/version_1_11_1.html) +----------------------------------------------------- + + +February 2nd, 2000 12:00 GMT + + Minor fix for cast.hpp. + + +* [Release Notes](/users/history/version_1_11_1.html) +[Version 1.11.0](/users/history/version_1_11_0.html) +----------------------------------------------------- + + +February 1st, 2000 12:00 GMT + + New Library: Rational Number. Updated Libraries: Case, Config, Smart Pointer, + Utility. + + +* [Release Notes](/users/history/version_1_11_0.html) +[Version 1.10.4](/users/history/version_1_10_4.html) +----------------------------------------------------- + + +December 31st, 1999 12:00 GMT + + Updated Libraries: Smart Pointer, Cast. + + +* [Release Notes](/users/history/version_1_10_4.html) +[Version 1.10.3](/users/history/version_1_10_3.html) +----------------------------------------------------- + + +December 30th, 1999 12:00 GMT + + Updated Libraries: Compse, Operators, Cast, Config, Smart Pointer First release + with a version number. + + +* [Release Notes](/users/history/version_1_10_3.html) +[Old Versions](/users/history/old_versions.html) +------------------------------------------------- + + +December 14th, 1999 12:00 GMT + + Early releases of boost without version numbers. + + +* [Release Notes](/users/history/old_versions.html) + + diff --git a/generated/home-items.html b/generated/home-items.html new file mode 100644 index 0000000..951fb2f --- /dev/null +++ b/generated/home-items.html @@ -0,0 +1,42 @@ +--- +title: +copyright: +revised: +--- +Downloads +--------- +### Current Release + + +* [Version 1.80.0](/users/history/version_1_80_0.html)[Release Notes](/users/history/version_1_80_0.html) | [Download](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/) | [Documentation](/doc/libs/1_80_0/)August 10th, 2022 21:25 GMT +[More Downloads...](/users/download/) ([RSS](feed/downloads.rss)) + +News +---- + + +* [Version 1.80.0](/users/history/version_1_80_0.html) + + Updated Libraries: Asio, Atomic, Filesystem, GIL, Histogram, Iterator, JSON, + LEAF, Locale, Log, Math, Multiprecision, Multi-index Containers, Nowide, Optional, + STLInterfaces, System, Unordered, Utility, Wave. + +August 10th, 2022 21:25 GMT +* [Version 1.79.0](/users/history/version_1_79_0.html) + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, Filesystem, + Geometry, Integer, IO, Iterator, JSON, Log, Multi-index Containers, Nowide, + Optional, Predef, Smart Pointers, System, ThrowException, Unordered, Variant2, + Wave, LEAF, QVM. + +April 13th, 2022 14:22 GMT +* [Version 1.78.0](/users/history/version_1_78_0.html) + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, DLL, Filesystem, + Geometry, JSON, Lambda2, Log, Math, MultiIndex, Multiprecision, Nowide, PFR, + Predef, Regex, System, Utility, Variant2. + +December 8th, 2021 03:45 GMT + + +[More News...](/users/news/) ([RSS](feed/news.rss)) diff --git a/generated/menu-doc.html b/generated/menu-doc.html new file mode 100644 index 0000000..8e34299 --- /dev/null +++ b/generated/menu-doc.html @@ -0,0 +1,75 @@ +--- +title: +copyright: +revised: +--- #### [Documentation >](/doc/) + + +* [Getting Started + >](/doc/libs/release/more/getting_started/) +* [Libraries >](/doc/libs) + + [1.80.0 - Current + Release >](/doc/libs/1_80_0/) + + [1.79.0 >](/doc/libs/1_79_0/) + + [1.78.0 >](/doc/libs/1_78_0/) + + [1.77.0 >](/doc/libs/1_77_0/) + + [1.76.0 >](/doc/libs/1_76_0/) + + [1.75.0 >](/doc/libs/1_75_0/) + + [1.74.0 >](/doc/libs/1_74_0/) + + [1.73.0 >](/doc/libs/1_73_0/) + + [1.72.0 >](/doc/libs/1_72_0/) + + [1.71.0 >](/doc/libs/1_71_0/) + + [1.70.0 >](/doc/libs/1_70_0/) + + [1.69.0 >](/doc/libs/1_69_0/) + + [1.68.0 >](/doc/libs/1_68_0/) + + [1.67.0 >](/doc/libs/1_67_0/) + + [1.66.0 >](/doc/libs/1_66_0/) + + [1.65.1 >](/doc/libs/1_65_1/) + + [1.65.0 >](/doc/libs/1_65_0/) + + [1.64.0 >](/doc/libs/1_64_0/) + + [1.63.0 >](/doc/libs/1_63_0/) + + [1.62.0 >](/doc/libs/1_62_0/) + + [1.61.0 >](/doc/libs/1_61_0/) + + [1.60.0 >](/doc/libs/1_60_0/) + + [1.59.0 >](/doc/libs/1_59_0/) + + [1.58.0 >](/doc/libs/1_58_0/) + + [1.57.0 >](/doc/libs/1_57_0/) + + [1.56.0 >](/doc/libs/1_56_0/) + + [1.55.0 >](/doc/libs/1_55_0/) + + [1.54.0 >](/doc/libs/1_54_0/) + + [1.53.0 >](/doc/libs/1_53_0/) + + [1.52.0 >](/doc/libs/1_52_0/) + + [1.51.0 >](/doc/libs/1_51_0/) + + [1.50.0 >](/doc/libs/1_50_0/) + + [1.49.0 >](/doc/libs/1_49_0/) + + [1.48.0 >](/doc/libs/1_48_0/) + + [1.47.0 >](/doc/libs/1_47_0/) + + [1.46.1 >](/doc/libs/1_46_1/) + + [1.46.0 >](/doc/libs/1_46_0/) + + [1.45.0 >](/doc/libs/1_45_0/) + + [1.44.0 >](/doc/libs/1_44_0/) + + [1.43.0 >](/doc/libs/1_43_0/) + + [1.42.0 >](/doc/libs/1_42_0/) + + [1.41.0 >](/doc/libs/1_41_0/) + + [1.40.0 >](/doc/libs/1_40_0/) + + [1.39.0 >](/doc/libs/1_39_0/) + + [1.38.0 >](/doc/libs/1_38_0/) + + [1.37.0 >](/doc/libs/1_37_0/) + + [1.36.0 >](/doc/libs/1_36_0/) + + [1.35.0 >](/doc/libs/1_35_0/) + + [1.34.1 >](/doc/libs/1_34_1/) + + [1.34.0 >](/doc/libs/1_34_0/) + + [1.33.1 >](/doc/libs/1_33_1/) + + [1.32.0 >](/doc/libs/1_32_0/) + + [1.31.0 >](/doc/libs/1_31_0/) +* [Tools >](/doc/tools.html) + + [Boost Build >](/tools/build/) + + [Regression >](/tools/regression/) + + [Inspect >](/tools/inspect/) + + [BoostBook >](/doc/html/boostbook.html) + + [QuickBook >](/tools/quickbook/) + + [bcp >](/tools/bcp/) + + [Wave >](/libs/wave/doc/wave_driver.html) + + [AutoIndex >](/tools/auto_index/) + + diff --git a/generated/news-items.html b/generated/news-items.html new file mode 100644 index 0000000..dad5300 --- /dev/null +++ b/generated/news-items.html @@ -0,0 +1,76 @@ +--- +title: +copyright: +revised: +---* [Version 1.80.0](#iversion_1_80_0) +* [Version 1.79.0](#iversion_1_79_0) +* [Version 1.78.0](#iversion_1_78_0) +* [Version 1.77.0](#iversion_1_77_0) +* [Boost has moved downloads to JFrog Artifactory](#iboost_has_moved_downloads_to_jfr) +[Version 1.80.0](/users/history/version_1_80_0.html) +----------------------------------------------------- + + +August 10th, 2022 21:25 GMT + + Updated Libraries: Asio, Atomic, Filesystem, GIL, Histogram, Iterator, JSON, + LEAF, Locale, Log, Math, Multiprecision, Multi-index Containers, Nowide, Optional, + STLInterfaces, System, Unordered, Utility, Wave. + + +* [Release Notes](/users/history/version_1_80_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/) +* [Documentation](/doc/libs/1_80_0/) +[Version 1.79.0](/users/history/version_1_79_0.html) +----------------------------------------------------- + + +April 13th, 2022 14:22 GMT + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, Filesystem, + Geometry, Integer, IO, Iterator, JSON, Log, Multi-index Containers, Nowide, + Optional, Predef, Smart Pointers, System, ThrowException, Unordered, Variant2, + Wave, LEAF, QVM. + + +* [Release Notes](/users/history/version_1_79_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/) +* [Documentation](/doc/libs/1_79_0/) +[Version 1.78.0](/users/history/version_1_78_0.html) +----------------------------------------------------- + + +December 8th, 2021 03:45 GMT + + Updated Libraries: Asio, Assert, Atomic, Beast, Core, Describe, DLL, Filesystem, + Geometry, JSON, Lambda2, Log, Math, MultiIndex, Multiprecision, Nowide, PFR, + Predef, Regex, System, Utility, Variant2. + + +* [Release Notes](/users/history/version_1_78_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/) +* [Documentation](/doc/libs/1_78_0/) +[Version 1.77.0](/users/history/version_1_77_0.html) +----------------------------------------------------- + + +August 11th, 2021 14:25 GMT + + New Libraries: Describe, Lambda2. Updated Libraries: Any, Asio, Atomic, Beast, + Conversion, Core, DLL, Filesystem, JSON, LexicalCast, Log, Mp11, MultiIndex, + Nowide, PFR, PropertyTree, System, UUID. + + +* [Release Notes](/users/history/version_1_77_0.html) +* [Download](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/) +* [Documentation](/doc/libs/1_77_0/) +[Boost has moved downloads to JFrog Artifactory](/users/news/boost_has_moved_downloads_to_jfr.html) +---------------------------------------------------------------------------------------------------- + + +April 29th, 2021 18:00 GMT + + New Location for downloads + + +* [Release Notes](/users/news/boost_has_moved_downloads_to_jfr.html) diff --git a/gfx/boost-dark-trans.png b/gfx/boost-dark-trans.png new file mode 100644 index 0000000000000000000000000000000000000000..093e301579fba661a69acb62e5782d530eedf5ef GIT binary patch literal 8312 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 literal 0 HcmV?d00001 diff --git a/gfx/boost_1_33_0.jpg b/gfx/boost_1_33_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f26ef38d3eedfba01a5a577d61e3396e862550a GIT binary patch literal 10736 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 literal 0 HcmV?d00001 diff --git a/gfx/borland_logo.gif b/gfx/borland_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0165fb44ef82f78f328a021bf6abef2fa8f94789 GIT binary patch literal 395 zcmZ?wbhEHbbYoCt*v!E2|Nnmm28P|cce}W_baZqG3JSh^_fAPk>F(XTGiS~`bLLEF zXlPnmnz6C*s#UAX%gc2b7#J8pdKp;$3!Ly=z1QOP+1>vWH2P99=Vh!~m-Bj`fy|jN zK0PdJ`L-ko@O$M}a6e7kEyo-v$>)09p-4?afaj3h0yRUPW`@Rd%O>;ir%B~c^EiKv z@!(Rm=XrCRH_YnU!@tqbira2M^1Ww+_RW}H!2G1}+44soukQxExp(1X)(g?i%k<-| z8Sc#adAevN8)M@)KCzN=0r?&Iw=`aMbR1cvQ}^3JAnMoG^PNoQrnd^FeA*~5sV?Z! z-pXSW+!~dHC2pjA%3|8&$oNSnhehFF5A*vZjo4FLR$g8nu-I#^*Va{6`2-mltO4{9 Bt6~5E literal 0 HcmV?d00001 diff --git a/gfx/google_logo_25wht.gif b/gfx/google_logo_25wht.gif new file mode 100644 index 0000000000000000000000000000000000000000..151f527a95ff4584ddcd55fa7a4f5555c3df09d6 GIT binary patch literal 1607 zcmZ?wbhEHb^kz_C_2Q^#~CEIF-Wgu5UF5LKf<7U zoqFuR0;CYxU-{8g8?Uz4|>O zd&=6kwol#D)V+Aqj#G>l`y^a9Y6NX}NZcA(yfLNzU`XctjH(s+)w33@Ju!LKnsYZk ztlhMq%j-(%#PbtYJ$m@$HDAOt!=#g5<>#^|KTm1DnB8|{|Iv$&UVPcMW6#gu{~tVj zTsiwj`;yyDvro+4bbHg@i^tC0iR!#oviReqwYOI9y|eYivy)d}Ucd8X@42UUA3pu` z^~ayT|L)$q|N7(CUw{8Ueevq$+xOpo{Je7e?x%0x{`~)c{^G@-|9-F9vS!(a6%1(% z3<(U3xr`DX687!(W^rcq$LjkI_szLHC$%nh;);m}?;Px$(K&zR{FmQe-gt83`_Jzm zKYe`n{+(!}NWz}@h7d)*RSvY|NsB??aS@kH-G*5`Q_7# zPuEgzo$7qPjqAe^jSqJweB00YVYl$(O+xqYTzayMp(j`3^a_Vln+q09Oucb#z9$P7xEKdOlg0%ape^$ z)@z!=r=z@&b~e2@u>0iNRqF*94hb`!G*jPUrnxQ9V^d7%`n-%wQ~E!gKXZkfp~Kv0 zu9Ho>m)rG4^RDgQd7O=*MMgYFUZ&2+t0y7u;+oZ)rcc|ubjfuFhAYerdl(ruF)%D= zV3^FzP|Cm%!NAbN%$UK-Tp=NTZ2R_`moNYQ`SaDwmv7#@VHhBw_>+Z^f#C*&4#<8` zo?zhk&#;kG#$&^RgUuYmS}`X!EIiyUpzJlrW8NM5zX$G~N=vQ!Me*4AX;=xuPLD`~&?#-^< z2mIIOiSAz7eN8y0i(lMCh^hH-z(yzD5+D%r3re z@1Y(MrqoMa2FG-+G_&xVu$TO3^&FK}*YVdCRpIW88N z;LK%meNR)D?r}pA7Z%Ppi5G-DR5r2*l}}*msbIN#(97iVhmRb}td4>wROeh-z`(Ll zQQ$#??z~H94EJ?>5|HLr*dXd?c_)C0S1+T1SL-B4@&wI`0f*a_J0-rbt4`%mbYRNi zP;p_nnJCOAuDflMPp#n01PA760xUvi_A(AnHBLAA!)*)%2X=g!0N7H z$i&CodQr-3hl22##r(DZlMXV997zZe6b|V0)jj>iNkHv_$%z(aZ=oqCRl0dneAzPk zR>q3!Zd%x5v`xh1vQwZ+Km(JT$Q5UXm!XWjCOddsy4N#l8l6;`$x(7#xm4_lGmEsq z7dG*5*~@2)Hdi$H>g@=*JV97Sz~BIf*$;-p+)@P%S*3d|lDoCH-f3cW?3OU%RGO)n zBp_@jqrku!oUr(~cw9r^v7^Ua9`l%-{V<8!WyY2dj9hXn6pn0V-TLvg{v?Gdol5h* zSO&FBE&SEni{=bVwS+TmJ+!2zzQ%PdD&Dn(RW8DCD_ zE6B@i5*5IlvU~4DPNsql(X8n=Rn|_Fm1ZzF$m_t6$jo{DhpZ5vWk1^{uvwORlG literal 0 HcmV?d00001 diff --git a/gfx/imc.jpg b/gfx/imc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94378431ec275e367cfbd9aa7d847aac22104907 GIT binary patch literal 80249 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 Ze>E#!f7-&>$ar{ndz3M#L!kcuO#s=FT?YUF literal 0 HcmV?d00001 diff --git a/gfx/imc.png b/gfx/imc.png new file mode 100644 index 0000000000000000000000000000000000000000..b5dfdcc63e7012aa518c64b25d0c4522a6d19b2c GIT binary patch literal 16366 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 K{R(hkum%8Ke@`|5 literal 0 HcmV?d00001 diff --git a/gfx/kai_logo.gif b/gfx/kai_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..42defced07ae1c2dc627210a4cf6486cc778c7d0 GIT binary patch literal 553 zcmZ?wbhEHbbYzfbIKse?(&}jvFZk>C&+aAVJ5Q|jF4A4IZ{FD(N9SzpK6HNjjRzN> zzkTxI%ex29Z>xqd{Qv*|z<~n{qyWXAEQ|~c0t`AJO&~iRSpO?1^rjqC8xWQ}*=vPezto8iLf zt~t*k(U+0ipE)ihZbC&oOAsqldA#%7b^c88O&j4=%?~IQzxrbm<>g22l-% zwCfFxA$}Yj4J-V57#9{eus8@Xh-mS!7%2Q`@j4!GV1X@|NkvppB=jO*?r=z58wVsmR@}D_NPV1^~ERNUVQv5 zZSe!mx+|0Sy$qjqw`}c`O&32fkOFi-ia~ZUu>Mz2=u63*m$7PH&g*>zI_FDr?^mpQ zU-SO|fdvH~I#T^7mK2?|;hPt5q=TWAiy_p>xJ{r!a$7^i8d2V3$&5_A_qOpo-`ME5 zLOOwG%MP9k@5Pf@^YnN#*ck*;3|g!Bl`5;a>^WG1G^Uhlm9mtpW=xvE$ZS}c5zfF_ z$6FBC&&!^~%2^Z2z|Gvw!pYjmIai6LPM}7Kn`^!jhkphu^YM-T3@m&)b&TN)Gq?{X zE3sW;F9;Q=_1|Qa4w6R~h<}PPM z9)rGNyMWCWwFC0Dh99-IIu=fd-{uf;Y)#emhD4q2#tZ))3KINebPW5JEMzn=JYY7N zRl&k}bIzH`te4CdRdfdWG`EXgU2wBJ*JWx8qs&ZemYg)-z}0RHQo_bdX4EA=D&=W7 zE^xS0jalGDM8X?=f8&##j8R*oqbkaUjw%Jd>auhfOSEVxH*bhDTyf07f=7|nzcQmP zmv=(nM0rn_$Gr-_9^97DbUC?iL(b=Sjk6d!xL&-j;0c(c@NXYcM%~9Xv)AvgF8|&qY%=I5;TZT0>w=h{{ zoipPx-{F@jnGioAOz7@Yp+Rey_s>Q&tAknWkJNPW`o$1CP#C(iL#M8d+{&IxXYUjca}y zFFRJW>qrYGD7GGOC_T_P%~Y+4!Nt&VJ_8HK(k4chii=ZALZfE#b8=iLKd+F`rul3} Y%CyX9Gc%U0d^Rg*+siZ|MFs|I07J$pm;e9( literal 0 HcmV?d00001 diff --git a/gfx/space.png b/gfx/space.png new file mode 100644 index 0000000000000000000000000000000000000000..a17badc20303e98c89d4ed92de83b7b9c56476c5 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0y~yU|<4aMrH;E29JvQ=?n}E%mF?juK)l4Uw%aT1Oo#D zV@Z%-FoVOh8)+a;lDE4HLkFv@2Ll5GXMsm#F#`j)FbFd;%$g&?z`(#>;_2(kewB@v wPgUsA&9)~D3=BM;E{-7;w~`YQ5*Qd5SQr>jyn6kUfq{X+)78&qol`;+0H}u~eEllbP0l+XkK6eJ>* literal 0 HcmV?d00001 diff --git a/style-v2/css_0/alpha_white_75.png b/style-v2/css_0/alpha_white_75.png new file mode 100644 index 0000000000000000000000000000000000000000..6b918e03d242eb12c43348e8815b2ddf9f9b9e49 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4SkfJR9T^xl_H+M9WMyDr zU`z6LcVXBMg8w*-yBHW4I14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_Uqhi%sh-93p6bm z7#PGnT^vIyZYBTu|NlQDn@vM!BZGt-7sKsj=Cju|HU%&+Ffe$!`njxgN@xNAbLAxH literal 0 HcmV?d00001 diff --git a/style-v2/css_0/bkg.png b/style-v2/css_0/bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..150e81eb0eaa6ffa92d2a7efbb8e638ba2023d03 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0y~yU;weX7?~Lu7`Fe3{l~z-z#QNc;>r-v@S*bYItB&? z&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6{VFG;h@8kf`$K9B3=G_!E{-7_*OLw=gf!;AOne?`3=9kmp00i_>zopr0Bep!NI}F$;rjV#m&vl z!^6YN%ge{d$Is6%ARr(pC@3T(BrGf}A|fIxDk>%>CN3^6At50tDJdl-B`qy2BO@a# zD=Q}_CoeCrprD|rsHmi*q^zv0qN1Xzs;Z`@rmn88p`oFvsi~!4qobp%tE;D{ zr?0PXU|?WqXlP_)WNd6~Vq#)yYHDU?W^Qh7VPRouX=!C;Wo>P3V`F1$Yinm`XK!!s z;Nals=;-9+gwj^=I-w9;o;%w>FMR=+9#|=kM(9qD>*x1z6)ZE)2+uPUI*WceiVZwxo6DLlZG->kW$y26GnL2gq zv}x0(PoF+x#*CRWXU>{6YxeBfbLPyMJ9qB9dGqGapTA(if`tngE?Tr`@#4ixmMmGi zbm_8X%a$)+zGB6Sl`B`STD5BR>eXx3tXaEu?YedA)~{c`VZ(-v8#iv+v}yC^&0Dr? z*}8S>wr$(CZ{NOS$BvylckbG?YxnNmd-m+vyLa!tef#$B-+$o1frAGR9y)aB@ZrNp zjvP69^ysl;$BrLAe&WQ5lP6D}I(6#w>C-O#2ckbM|d-v|Wd-v|&zyILDgNF|vK6>=% z@#Du&o;-Q_^y#x_&z?Vj{^G@pmoHzwdiCn{>(_7Iym|Zf?YnpH-oJnU;lqcIA3uKj z^y%~G&tJZL`TF(iw{PFRfB*jD$B&;sfByRQ>-X>9fByXW`}gm^fB*jf|F8Iyg^`Ql iKZ6b^CxG$<1BW2P|G&%%0SX5j8HD6)G6E7D7_0&1z=?bS literal 0 HcmV?d00001 diff --git a/style-v2/css_0/caution.png b/style-v2/css_0/caution.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5d348314a40c4e44d4310e15347ce447e1523 GIT binary patch literal 7476 zcmeAS@N?(olHy`uVBq!ia0y~yU{GdYVEn?t#K6E{@ts+hfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=ut^mS#w#w5a~puxGt>;eOW%wF!dt-gqq(+ARyY{YFOL6W39u+ob zx4I-HDTxydLUor)oMs8Q@_eZd{TjE>MKSS$vvBDm=HAY>M&H|pCIRn5_ht!SP_R#2 zV7u7*qU6RvWo4&=luH~;wRv|xTkiNiZ}<6oucNEC3&h81ZGX4-{hZowan)<{YhR~J z|1AGe|5NgWE(7z9>g4aI7!EP${5O{Pet+X(dE?y^QvYxL>i*lB@%GjGAAab6{=Va1 z{#WOZRki9;JPe-34GVOejT=}Tj8DIhw}19fsX_MMlXp>W&4v?=H>z%b!jsdfYf$`u zx9axY*B?xqbF%W5PyIjf_*u(3Z%k^>PZL+%ex&TD$nXAVf8V5XH+}uJ=H8rTzn81~ z*Sx*?zvA1?`ubn@jvvqF|4~2H|Ix$0F7J+QV(t6??)cV!<+GMep6oC5*?j-c^e2B_ zoP4}n{qU!)hq-muZ~iX4;qG6f-`oG)%~>{ivUkYm9cWf5EmrtIY%yw`0ues{~Ud?ou`+4O3|AWuxSG^KDFnO~2 z@|Ui1`{%^#{(qk{`>b$;ZphCnh8Oy)inWwmzrv@9VQ^R(tGI#%b7) zXY=c>=DoW2;a9lKvr4t+gaCNaIhI(OM?^LLXz z&$aI7TfBA~$My%`a`UTs8_M_p{(4}~e_Nm57LU%&bwBy@SMTo2Y0P;Cf8Tg(mM6Sv z>Fi}MkM&kFyubJJ!VaIPZL6MqTbo~N+R!dn^)~A)zf_`3;rDax4L^_dR$n%GJN3Dr z(hSZ=kNfR^-zmQT>&)`{WPPTu`rGm=Pp@X!^LDL$_@4cHN)^Gwd$@nEiMwJKwUi0k390^37ZJ^Ua_4jB#=Q zer^4m_TXXQ+YHlb_Y03aJ^K5^&u2Hqmt`JGx?gccZOy$qKC@@1$16NP-Tl2+nNR*~ zwe;yTSx@#q?l^t=yU^#eoAvX|E`R#BWoF&)?fd?8h1WcaeZTAX+x-0nTQn~}dv;U2 z@#m*cd%K-hu08guQEamr-;O;MEHloZ+h^lDdv1yC-!JC#{>`qh{dn}P{ol{^|1Qec z=awJMyftTTE$0ko9e3{D1k8(}v&*Nt<EdX_*&O6ojFqbz;4Hko=Wpx@$K?#m1X~~X5N}(^Q-Op zzHd(%39Z9^KCbx8Pi}m9Zx3}N-JG1|f_I&1N-RJiu%bYY7(h9s7cqje$ zz4Gz%)QO|l>5`P4VlLFKcDQceUrSuBDW^t;8oT=cg`<8SkW@=+x`2tl`rMI zS{j#xGv_T;W_q}F&yx9v<@pXwv#{d*G^@m}h;dI*Ia|{1@5y4KzJ(`WIl1>|eJr2C zUpQy)UE{*1Dzfs)@8#v@+emlbyg2iA^(2*V`$WIjZ>wImQ|4J#K=sd4$Gk7h;AGLA z?09>3db?m@y|Uist6k>YU^Jb|`--1-W zls45DwaafDJL>d4wSP{x{X)?-2NNs5A4*w$FzVkwrCRICt<4_A-+jJ&mn!{a^Z&TP zvh(+TsS`Wz=*VSm`hVs2#cj(xPrbC>vpv~v&%w2+)1x~6+Nb=y$B_5^)!nk{YF?Fc z?S%H(smfcwUY{^oZ)VGkx8)D~-pf`@XD)8un)t{o=X<$w_shhuFUo$*YLscH+QIm0D9K62mm7ps}~xu{)?NnAE9 zvuo#-{ZWAGeLaeE4Xp_Un|LW?3G^`!*g`+Vt;}V2)(Ya%GS6R=N%<*Q>tF`<*c} zXKDXii|{+1E_wI4t_F8R=Jo8aQoj3M*S6rx-TvtC!Ki1`F2~&l&G*|U}7_4>5@oqk%! zj=nkeK`G;CfJeQC=p*MO(~E1$R95%*P2U#v>`(RbJ7ER3`C+k(3~FBOdUuPzAoO#h z|J8Y|nQsHmyW5>wD3GLG6E3J-%--nG)A>ZFXlqW)`u&x^W=+-9{bzk8nP&* zHS68-+tZW2I=s1XZEMMfT_VP-ALg8_QjOtUlRH^kf49E+=V{mX*m}QLULAI2;`%=` zAJyhvN?EURxg{)RUGJ2oX&ql)Tb5tFA=fI(yzy0_1ed5)&e^!bK{+{JG)t|vm8mwK zUh`|(2G7|6`cwN)T$>8_lkN$rn$jci`!?t{qn7r4w>lj3xcy_kXDLv^YB zo#ij@ELk_zYomqZGX9@lr|$;E=qzmg{BD`v&kZUjOeaONPoMA*{#}0bOvUD?Gl`2D zcDNj!BDVX;l8D_7#+sXAB|ptdGwEChUoi~E zJ7V~qE0#W(=p?3-qo*A!t}~Bw4iEpb+fBV|`j>9x(z!A@GW+4B`c0)7YL5^62{qgp z&HP}VLd&TwQ=&V5P37UgrgS{k_Q|97KaR>Bp2Sz1b;#RrFJp|&VNpHvfa-gV@n;RT z1^$xa*_*WbjFf2u=YpF80?LiW2Pdr2=V+I$@>x^H)~d?ep_#E~yTwCK!B>_lM!wE7 zJ_Ki_TeFrOZM9Hau;kI9KI`piJufVsFC0n}-B!3*gn7$%&&1Lz*QQNdv&~;XKz&>9 zvX22TS4NsfS6Q`UH~%ZUYsIxLK?YaYpn2nYBle|%hR z8pbGE<+kJi%d?4hRmI(WnH+pVawouwpj{+aiaKk&@81vyJMnXg;5>{$Ei9d7e15S!6G^YnA)W>`k$+HVRB~{CSD*l&DL)`@0~aQ{Fyy zKNj`xiS*om$T{Y7YS<0+iYnEPY^5ucTQzvq9{K02wY0qzwewn7MEM56uEpPYBp;nC zdOqvtGrn2VV)q^{x^=o^N#^baN_V|)6o{TT*8COb(if}Z)BF1D9?xa=??gUWG;Ypi ze4DfHrDRjbG|pV<4PP$QEnedp@R8yBw5__|H%{#8-kGSKF)6a}>lwowW6=%lmNSq4 z)05}byUTx&ZB@vlgug2m@qWzpiB30_DlXmWeIoirTJV|ZvyyyS|D(G%FLGr*(h6tmi+q4ZE+-Nv+ha=F|?qq^R`0gu|!JD`UICmYiq$1xeh@D^>QU z1*v6q7Cf0@_q;c3*AcCW)v~%WHRYG361ks9);>$U5$Ziv!z@6yc+v4DU6C25HY6`R zz4p9k(=^!^6RKu9hkiILa^hz10yaiI?T9A1zsqc@w>|L9yj!hNw^U(8Wu{o+p#wTQ zIc2^)+jB#)V6hY9Vm|$&7muh2`z<=$C0jZbd!X;H12iBeS&gf*AL^eB5xN zV0C7jR)NpjX||>p#g56WT^h+{>BD2rJC*agqV3crlh=g46g-eAeCp8D^GEXP!ddlv z*?CsJ5iS)dNk1`lhUvdx+XXB)o(a=|8+_K#j8DM zoKI{0az2>F;<9X#L#C?Z-guNWEo(yBB9=W{3dDSrOgZ-#2y`VhZ(GFi zNm+;IdV%cMgw=94HeES-M8m)24<^!|hr97EfzuL8X-YEKMlvnbK zScZI1TeT(n*#gG4tpyr??ntORtG{=e?6^9^g0-!;*P|eub%T&g(8}3sSp2_TSXk*T zb~|dFX;k9IM?tDw+)A;_Y9+XO)*ZO)uy^(2Ety$I9|!$isool|+HvvooRIux#XNxn zeHTQ2O)8qa)3Cc@dp>LuxSZ?vW)X;bz#8Ch(;%8?YOtg znpIq7&6U47F4n)!?e{@N+R8Re^wwt9BWzy+uNI0*J5|TJ9cDh_{dTeTyj5o3JXN*U zi}g=j*53E<*`gUt6=%5kHy+(9Dm>$TqsRnF0Y4*W)kPCrH%(|W$e&?b67hDYig~;C z0@lZOWnIF8_>aF*TGP-};y!In^ZnB6M(fV6(Vrx-j?1(&y!ew|Q1Pls8b72m7Rgzi z4S79p2_M_+Q=&uZ#B&Nz9)X@Tskt6o`*6GD@xotqU_(iKqpNk`J?={o+T zT??$jwVN~b_gr>UxbsX~(|m2qiskoQCiN}qoxHWje2+lbTkhQpT3ut96ZZ?9zPHHZ zUbEgb+f#AIM`tGGulyR!`sLE%ckMzVZkr|=uisO=?ZnO*oYTIx@U+g3OWRaE`>L^N zv-Q~>>$8N8m!3T4>?PN` zpH0)sKI~i07uZu~tUggLLi$F${bSA93ycL{MJa9(ne^)P%{BZV7MB}-;)>xEmYAIv zvp93Drp)cDTY{r`U%g7>-d(h#)ZO*yeXmV9b8oW9reu_|`UEPW#_}@xpa2L)3xw z>weWd`RKs?*P-OfyB)Z%p7J7Zc{?iQSN zsux*h)N)F1i&WBzYo%cys#ghZ{AQ}l!@ujX2iNK2b$JXGo2UJIZ6kJhmPK96=cdA# z+xIuEQ)Bydh4a_7i*nssN|N4t7FC}q&heI=7{B9KSl-3?nQJ97mW3qDvbfT-L4jqK z`GQkwWy=rUICgT~G^@0v1&1TvOxgdc`QQfUw_LjH4ElTrg0%&s|Ep#A*=2~lQIK@o zV|zC*TZ~O|rAWV}lKb`R98m_dwk^4k`|#8W!#&z&wpuTY44zKnJ9}Y3+U@PC2fU6&z#l4T28J~Kwq~KNa3QZ@cP{}DR8#J6-_fJ`; zJ$+i}8{-diLgZz*ANu}V5*E(ne0$@MnBE1Y$4&_yOMTA4rCu7W&vHxSo9Tsz*+xFD z9*z&rIBDOxDJ8m9b;*KHJ}WL(Rr#hwOucJfW4+p3ht+i1B+Vehz*WpnIUBuxE=hjV zuCS&ntXV;F%9lBxS@!a5Jju~lUs&5Aq8=5<@NvPT?k{KEo!r-1mDEe8x6e5D;?2wN z+_GwgoPTCrmzq+Vxhc=_V9?#Y6G~0f7^)<~a%R8!oFBUXsl&u*4#O3tGv3U-UlP9H zviyR|{mN}y`}(|XvFL-?=FeHwN-v&*w+ z38S7?YG-Bo!Mkt)~^;dqhog$yj~zN^+yczmRA#B>3m-D zF7Wpy$Bj!qt)3gf8-158X@&Hg)N7mA=T3dBRurZEc2z_ZOQZ75wVn@`hFhjbi9T5w z8g?#f2|PbnXrJjaF4^0~{P{0y*X4sTuHh0v_siQ~bi~WQa+}+9GelC; z?o`jB`H2tAG^33-OtqDqJf)Cn>V5q)htgu!JqnCmYxj8d0%7Z{i8t43>28-|EKO8A zlCkXZ#%)sGFYY=WW7LsOFy##uy>6iXgcT~;4r6qLbjo7(a{SF?ztDd*}!M85}{7Z;w( zt?6saJm(a~#Qt04&~{gk$IBHYGGr$no)NZH%6-A(kIcKKFS=i3_hQASeUkS1mBd@PkJda{q*})7eWe}w7K6K`_1JR>Gw{*Ru}UsbLRaN#|McsgxrrD*uT71 z#W~S&!t1uK*P#a=?5JnCb7CXs4F3K*nNd|0l8h%ymbAoiE3~wyILYss7ZP#IX2$jj z;s<9=I%Vp2;RwG?(k!u!^<9&l-(JmA_r|}-JzrEURxH){sge( zW!A3yC+`3ZkX`4i+L&QOS_UZ-6LmfeSgHQ zuA6pt$NZ?o?RMd^>3O9*4Qt;7WNW&awtMb;))l(s`U3qICP8I&oqMnEXk>S}8~5<2 z3ajyy_vwj}1rJUvTku4A-MVhAa9fq4js+Lqn+cR$?ezMz_g2f4@?)L-yhVW~hYzTB z{cZVhCiTTVai0FW&9hIQ>s!EBVk++ZdTZSBKD}F9>W)j?qb@Ku%JC)Mn9TL-#W9+(2!;vAULmXO3OW)RJWbG=a-Q=%fjP|&9tnmo}IHIHyC)Z+&!>At~Eth zFktFBtrv@w_&FbOoQwEUtC-^AuhNz%#=V$JuU#kEbmQBXK35%A7i!PCnq0X2OGU?~ z^k4_p1%rg&N?VaqzlsZ2~c5%kRXNidy8lN*h zG@P;VP?`PGf~Ua`)U|6GKeQybZVY-*ti4q_gjFl5&D6TfK-|QR$z087(k%hgs>Z&m z(eIZxzX;|@3=U&u>INk=!w8HR@E1Bd>f}If4P;SyE^;yN^Q5L$xil$=kDm8 zXzcB{yJe5QhwgdJ6FrT3PeZdpz7G*A2QGOmSZmWQp# zdM_b%@2IEag@sc#?Vs2x(Utfo3=k6%{fD)#N9llhfH&MKkD zch1@9eQd?9y(gz1o4F@ea%W`Sqt6fT`7oOK{ zyl^gbp6b(OjSda3=B!JS34L=}>346~`Hv44EMBsRec8>KH)K|``uQ%q8Z~?WXZ4+) pe~+x{T=VjgUxBbUGDq;8-IJzl^bZYNdFq&_HF%>I2sgw)Q7JN zaWX7AvyxSZ;a1dY28NFFCccr=a%;t-jiT=}Ffh!2v1?uK?S1dJ@0+Om6fE+-G`4(a z%(Bc`&m%QMr#-z^zJ*sSlffZoT1%K$@8gP{F?`Yf!JfU_`BK`3qL>MOAHOUUuyq5 zICVEaF;V1YxN#ua^vhOdFq+Vq?0GvRL+{f#=!FFy#0R*{}(!^yB1~4a?5`E z?UbRy5=I8a2^aW5^u37}`W2TjGSp4Hz^}Z7kwI?ag=~RK3=HueFQ#&2GBk+W3Eh$? zp3@Tc#)6IEL!;C!PA4gb2RHuzz5oC0=QrPGvHN5kEih*|u(tl+&-RwG)(LD37Kd%N zMDvt0Gu%m#yJe}B$j<_p{S z`X{h4{5g~DB<(Cw+xMN7;RAF1+$5DR-z%~i818?Zav?Qx(gpiRcNrOKI$Q3EVZQOhM844`yo-LdjblF7I)zQiNNHizIaZud+@W@y?<=U^W zU$0(1+TS^Wt%3QYA%E@JsNbJHIr;5&@?bs?_+v)A#4c^Nc6ly95Le=X|V>0PXf zybQayPnY^7_4SKxh75Ba^6n_@{HPUk^XF*WT5G`GDR} zzl@(#4J>tQQ=WWrZ!uwb)8F56Eo#5_i>KF5zFaGCiD85BJfU4Wr~5hg{<*(vUH2k| z<;;rfD> zIkUqavo}xovDT*S1F2Yf!)>R%t6w$93_Zu zpICRx(n*S8(T49WVo$b2x0o>G==Xw{ASF3EOF>L+kf`R~7O{gxzs}FM=X`GRdI@8K z@k+HXON4d-uB#!zHuxn?JubPWH|r@+J5E7(AvLs-6G5EOX1X zb$Sw&PTbd0Z5u2z8Ezaf@qKKuEq8a(tTKJhy$kOD*8BZq8IwcOCY{rt_pEzu`f%6o zmar?A%NI>zYdE`R9&m{<5EfJPbifU%&LGel$9@_j^m&oAXs3>`;Jd=DGM=uP)OzW1{Ci|pLnzvRAeyY}zj-|G0s_gYLCT%N4{`7-6% z!u^5@%dg&hwp{p+1sj8O)K1Hj%m3bU_sCcpa@pid^?p!dIJaltzEdi%Pc7NGZaM!X zkfXC(Oc-`3F8AMcD&*wLb+0$+So=9~7gafWFgGw?f9|~d)XU0w%QH`H(mCn3@%_Zh zO%vD}wyqP7+Hoo~d+qAOo66efgteG3todTN@aV;7lWG-~^P9IYG4Rz+z2LR7a$f4i z&F_0WCH{h(Y4c)si`bJdRg*67OMklfY^IYGgWShtkY#(9Wv*If_3YohGoH)`?&kTt zVEuggb?eOeb#--mr!T$szSHU@#qjR)r%y%UPTH?B#SfkF-@k9)x7zn#Ro{UM8(Fz| zdsLQR=Qg&N4Fy$A1*@mNb$#-s%E(@JLBGzVIca`U40(@MF-By^PE-ASIa?;ZZkCr6 zL*26tU#~}b+wQ$o_zYAP{y4}yH|hTD=an+Y3uPov*W7R{nl*u~;r)*r&z!R7KChhj zy#4O<+nvf^CW6Y$_)ilrteIK1I`{Uv*Uu`y{nCm)3#x_>Jok7J%duJhW*FGhHBBw| zCNg}!9QE3_2o#wW{Vn$vt6WbF^khCzuduLO>ttQNRwl!b?bZJ0cCd2F1|@wpnQFrD zr~C8Q3tcUIdK*h4LoP8a5LtXD({tIpWs}$#;;pAmxDXBD6qH=Ku+nP*NW36po{-h~ zVxg*H&M(!$p3D|{Sud1tl-l~L@`6hB<{MxCm`pWkP)@S_a`DX;unvng?RE?1p7R&J z#L(9o`0ntnWKiJowY1pnxck&Zk@tayN5+c1V3t4xf3NFhlhDw&N}!N>`FYFh^m)&H zFHg8o9diAv9w?k9Sky1Rqw;0l)l%92JIob%6;l7X?eu)Xa>U-=*Mr$ZZ1J5RfloeP zZZT;v`DtA{sm0Id%;(EF+*}Hd^UD4%Y4f}BwCLq7y=}G5E0-`XId*y7e3g=0kJf-} z^IRCr!{2QHV!m7u%%gpD8psrv4RTU`E?etn9W!LmOqe2_=X%NAO_ev{yGMqF_(_lp z67G9sR0uhPJXO}y(iT4ZJjkoxx?0>AZohl)`&gnOHp$lqo=ZMel1xbk(B=F^q;cWZR5TGh4aLR7FPbB8QvFGuC79rjxdll*1g4j5jAv&H1Ob zP*jmu!Aa$d)MXRP`tKhWw-^7K-4f=tk%ikK#^Z(Qu|k=)M2WUSnc2&3{wnKx+E^NS zUww2a^?lbJYJZ-^LpVrEj2ZA(&dL=YxUcw z-=7LLo^$=;JC*Z(NIXpD)IITXZAA8a-;ASHnG6pnUdZ-vnt%TJ@qatMOx##!wTE2@ z6q+1o+?}%5b}zEP@J9sd2G`7SYzN+!v`m%}dS*|&rn`9 zf8KM~K$ZV&@1zuY59rsMmRvSD$$sWk+`IfIm2sh=p`qv2^R&Ns$M!&Q@ty37wF^C8 z#4eb`_JDiwo$LT-XTeJhHkGxtrSmR$Y2N($*@E-!s_D@Y*`6Dz9m1`%Nz)MR(UO| z+V?`{thl(iXO-W+3q^mtuIc9VUPO`ifNHW&>~+_`375Ywnl3Fbc!@#g^roIU`@}hW z{RJ;E+)-Zs-pT1Ps2bLvHmB_NqCb92mb&TD6EFM#X%;{Ea+A)a`-Ab4{KtVa$1u@%i$V3l(R+{V!vbxv=n6W>$txkC)Vew7vlU-?ulq*u9u= zA#?F0whc3%eE&Y}>jk^44542NE0!?k=v=L;l6+eBZ$|2r-xgqjlRqIS2 z;Wzn0LF)uIf!36wSuJhOXFQoZPS~8!z5TAdZdOZMbc;#DjyLAZQ@4t8^0rI7V-pZh z_PK1bTl#yP-+YyY4+Ru?6|8oj&h+117nSY#qFH$fjr`SP(D_xIP|pM6=yq$YWXw8ND{XZ+89u6e)1oU@mKBa>lc z_lEwQmmPDn$YXh}TwPapZqu8~|6i9* z*{ySW*SfoLV!J`bpm|eo_5OYP>V8=s2zH9jPMtEl<(PHIC5AG$S1$e;PhDRj3@Jrjj46FUjNE`?vZgv^@>W$tzV$rmCzOD{28+Vb;P zrjXR@Ku>0mYi(amIC<4MG8r^)r`!(^l3FKli9tx*V!3CA#gREC4PRR4%s=;ePD`71 z$R!3o#T&cU?0dgF^V2UO3qB{Q1A#3kUsleGkBd8zY2oO>Y%#&$@4Y7`F&D4hTKk@n zp=s9how?EXKVLpJBYuBfYUH!`suOIqG8x(r?=b(?G=Z(a<%vmIV1OsI-Jp=GLUkU#gXzK>f|f_c}zTnlKo=>-7)>RrHp< z8iJP`VvZGlsbyl>=j5kscE*!gu(G!H?eBd$-j?qIG@t%9;iwTwtBcD1`}=$Tv*jOc zouoQiRla9SMWnp*j79FDfVxq_DtOw03p;eRnk zjK{K8 zU$StE$p*%D&bzPsbiA)w}59Y=epBMg~ zA;A&Wj(*BKPEs6+pIhR%UfY~c)fds+WWHzV-o^K&83isil+RZGV!f$&rpUF*dD>jB z-2?p(n>$H;(B9S}=AEc(J^g9rxoHpj6_-C0RphM@Nq5@+dEExJRqsW0md~F*KlKUo zaYqm4eQ%T&uJ??-c`2st_QcB{S|+gVkvRVG?c3a0%hu*U$vZYf=k%&or#AIG+XRws zoWQnc!?jcAlB{_x*KT#$YSN-T>vW!j-(gE9sSl|#$EQ!9zW0B}Nj;5A@ovR8`%h%< zaP?r`=X3eWw%qHboGi0@s?B|sn;&xi>HVX)98|zmTq(VK`}XbR`mpR+5my_@{IyeC zrtJ-Q!Tg`ik~f?q^T6WFS?8XAHsIm^6PcYGd%bdAyqTDx`Yw%5B7C5{zN`Fm*2{a1%mcw(XsX6o%$v$W-DzJ9bK z>UI47x`~%Pm6kB>U$ZsH$G)aDet(^A>8h45$xC;J2YvT0o_TH7frtSAWL_t!4|y`j zL8kvX{@JF!s%qE0?U9Riz222MOGzhsdh@mnJ>kSxnMGEfEhZ1s~L)`X6`V!uA}_x(^=`>ZJG;mNW{i*_xl9Uwhxarghb-dGqG&`?demi}$;q3`98(648`&wRG|^Yz8tU!}EG#|@7k zNPX8l=U6XCrosep`EjhUW=Dt4=}nol-fun|r7h2ql3Ciqy4t2Vg&~IP_3NGAlqbyj zcK5xn-}1%@Y)lj1)Kp9lD72dUYS+G}<$aGWe1ltdPvxxqB;vZ!{pq0Iwr6k zimX4e<=U^GKYt#3yH{mis$7WGfyG%&@h9}2ZpwOXF}o+o|FKw$iNKUKN2`AH>sL>> zYwe=bz3Td#m5;6(vFQcB_gbmk(>VF^4?#s<7E_+XKWpNGebOVp{rU69;b`XCsq>6H zTQj)BlFw|)(*9}q!N79ulwW^;n_KR62N}BcTa8_L?Dl6|sgZW}_V&{@oo4u9bN;b~ zU5#|y$zso02bM0heR#;~%%3ev%fEL{U~8IG`Dps|>84XBU;9;JH8u5TfvL`RMc)S( z-L{_iZ1eM((W}gw)(LD*lbx4^uj|)39ptyM<_Fg$7qh;{Hs_yzj{JK!%f#a$e!ceWZ9Rtj>;Hcf z^xNd-UFO(XrvAZoT53>4dgL^RkoJ==ZO*6a&fh=%Kvhi-liB3wKMi=a)0h3;H~n0C zc)9A6o3YoouDLSFu3)?V!wF|r#_LVrwN73a0?<;ik2-^(WFH=l{{{wiP0B3A!)7yq66yVmHOUNXDU$f~ZzWP@bq z-p@bx7RC|eqn$e5GcWf4$-BDvs|n}c>=u&^ zdkbaaV6`-@O#PjAz0@_3 zCGYdUwj5qv<99(3$7Qa5wmGfwHz;Cys^mk7AHA*a^sd-o?l z?-8kgZJy8R+;?=!+W@6IJKy}Sn$_aRHq}IcH9I#n^svF2m8M&-70Pkwa;m3?KCRTd zJ+eDmGEJ!h+%)AB|ysgBk+6IADhWgjs!{(JGOVD!iGX_`yd zY!$i`8tNG;dy=<)&GKGDQ1|`hf=O&iilVoFO_-*-#zE#k3R-HMlAxKpK6zE zou=%Ta%|VS?8pcEzSiztzg+UEAOBPnfr**3Zf$$JD=#(XYH6+2+?cyl^Nrr=-kw%z z>v&V~CG+{uF|!_T`&*&-^^1uwXfV4|aY^G2i^%TOp317Ku7y{2&ov4EUVFbZ_Dty3 z2`4in*QmCB-FCKW)6`vGcH~w_7xX>MQ_xF|)HB}7KlwoS^3yNHjIL`}cjwjW+fOzR z^QxC*p8oRH+OS+t{i+Azt_(H7jXOMimwjCosF(frXU(*&*ZJO`-Cij3^v7x0+HC># z=6>?W1NlBqc^j}I15^bbam|jMwselh)@Mpynkzqi6RJ3DaN@`-x#tg__)c39H|und zVdcE{?~K_O9hzezAp4SeSB#$a`e2cxpFe-r6H2HvIb5-O-1(Vnwg@#`J#UtIO zcqlXTx#^ZSk2g;5d|Ns1=@h}p^`W7nt)_Oas=P@IMS3k^|_p3cGJE564v1ZGmFpf-xvi$t~*z0Tec+7jg{Bq{)w{vS% zN&-dhZ$Em{>{;&ZQzjc$Pv>(m(^>s`mhaB~p7*u_)|v9rH-%J>EAHO4l$~YuLi>Ma zmcl-LHzx7A#oTQU|FqJ{uk+qT1BN?FOB!!j-mH%{_e2#|o!7?_RrgV!yJNcI3S0DqkiFUUGN?s`A&oZ=H5{R@WkqKNrgP$^E+5BKB$f zx&Mq@!<v^32&Rz^S#YKa7TWxrgfrGm0vfJq-?^~KV=zqUq1yRC_nXh)~wXKR`^Yh5y zaFV*wUODgny?fWpbzcn$QOSewzjHvhA zaJglln)8>Sh;~V4^@Sfb|CusWD@nVp+u0P-^^eQtIp^A~d~+^%t<*W4@_YL7<;xjv zcTTwQgKMhE26adk72jQIHTQ`Hd$_rp(29lkCpxR7a*If^mD{oTIX#wMGnwt%5sBc? zt51s}iv>OBR?fToj(e^f@86GdQ-UhzonE!Ja$YLWovYt+RZRA|doWig^%PE8Q+r?B z^`XI%%d5fW^%|Z(f8IO&=BeD%9vOc?o>;bO)xP)F^@XL{4u<;WZ`Cia2#PrE^m&oS zG+8(K9alEJPS2@#cWIr#R(32(+dXfMWZ~7Q(~Nzu&Dr9!UYLsS6w7teej_k2rJH6$ZidT*PrTL5u@e>Qf)%SW&Kb`vYMaiedckWMq?;0BF@9)3-@=Bf4 z(f8U@=*5pz9Ap!_VwGhZJ(?nr=3*1-0%ADpztr{$PnGouNHmt_pN^Ot8=%( z9o{$n*P{A7=Pk?h_0+xV-~ZOm&8dD$>P(#tVO}SfJ$;|X=#g=!+e_-k>TS8#-wS1d zipgE(%ROI2>pU+z^I7Nef8Wan{JpyaJehZ=tkvyuy2iA2XJ1Hld2hw!3+7Sh)=j&5 zH8j+7<=(HgiT)g!3DcLPYM$Qo)!KV|u6FOK?SImQe#M=Z*s;~@>VD-v594_@gh##p z+U|Ese!pQ!?HkQ75!XYUdncGRt$ok*`>?%K!u>fiRyRxU_U}J_dEI>9%M;=bg#Wnd zaOF+?tzTt}Ca2DPQ@3@J&#b!7(jFNJ!e=~{m4p~JtvL~8eSY&CN0sPoU0L%_t=FRJ zX73LcFL>i`c2Ue9!GmjekD=|23msudAtrtFa4_BynEeg&?I*Gem^H>>7=RzcKP{j*RGYuUjO>_xU7)W4Y8>vO_L<#+8oU)BNjy^eQhk5 zy7N`#y!ONizB^Jk-?i@buDn$L%TPsr75_p4yc2Ir@|1wIomdIG&X2{z6g}5>rj?Ocp&~dw+fWp4ZK1g2F?m z#`&H9{O8xNT|alUE@)%Bws=xo^0iyra)0mZUp}wez3TMxOfP-=9>dVkqXL&yOdhb< z+ZVX~IusWl|8&alwfWDjKihcEp8CdS*Vnf@L=H0*3P}~TKFr&pc)Rn+1?95oI;Z`X zPc}^ZoKUrcFAlSDpGEe?%g9nkpx6#i8?} z@1|urac951eLGr8@$K&8vjg)EnAdG7n7=Jo*e}EI{O8lBPp^x9=n@)Qv}7v3iirS& zee8~AovpWi={ZgK`Eu{|%Td|>w)f6BGbesvZi}9K{`u*ro4&@fC@oJbjotow&b6rD z7Va+DXKhRb*zA*ccs^*EmV03Reh&X{-|tob-t}b5VeU(sY%NDLBYs5AXql#Ca_q$A z`0U)Cjn~e7&gq%?ymFS>+OIa}4~8-HKepg$-k*7w0n~EIew#ME?%Be|100!u4rDt; zXRG#X)|t#O;s2g{-OhFWI^B~3Gb}TLKHV-)*q)o+v-0(=*Q+b0KCg_N7JGf|{wddH zwXiuUE%_+Bo>SK|=6dP8=bNs7S?*uo`7qTqFi<2Y)O)6O=G&KiM-6x)r@h@iZ(7o> z_rJg9PuaTd{qNZN6vl6@i?u$g)^o1iI&H1lCY|aXey$~w`+o0>xBn0jdi7-q*Usk}1t~2icF*+}KJ8I^X%+W>&2+;L``-WFC*O83zT(gI z`oGuf&d-^){Y8zP_0P)xUteFZJ1*K#o47-I{)Dd=@|e#@%}$MsoR%7y7WwSeqti2X z`s7$kUiteaG-XEla?vF`u{*NlU;mD);RCC!^71<&er~mcdheZe)(ld(Toe% zPinOf|5`lzf$tod8c!3aL~kp%o9maz^`d{tys{aWgJ!+AS~9&h`C7b} z-KGhb8}eIB?(`R(zEco;{r0-ZQ=8UgO0|nmY4zDH_tET_MWufVzr{_qyuVi&YFa1Q zSv@x`0ZruP%)9XFy<;!m@4c!s%VK?2@4qbIr&qc&M#!R6x1JX<`+Pj`> zGJP=NmrZx#Za;nC$qOI#>9@M(SiD?yHrkIbwqBD#-u0J9tNpp}Py33e{GPSND>d?2 zN*KQp;# zzhc+EW96~@M);gLJv(F68|O@W`sVfe#apNG1`AjCH{5vh;3k(kA81x4xo5J^q@|at z=T8e;cl-F9`MF#Uf|uAGomTIkowRQM!zqhatkP1?-neAOva`|!dFK8RHa#tI7CX~9 zUz)U)Jw3szE^qy;Qtr56?{?OXP+91g?9H>cPnJ%S{4y;zV@}9{Pajj?-(JQPc=PFEvF#RD<|UaI8R^bFkf!!N zCGy#m&E23n#^4dJ#g^;Kb@x4A+}2m)zfpSa`S8pxKh3VLMFl(dR$edF+-rGY+qb_5 zjxLvY`mfC}E!FRInwqBQB9dg<%+%npK=Iu#e@Z&XXV`z+FC%eB(j-M4P1NU+`7!>E3#@>5gGzKf@7uGa6| zHQ!@LR&BV~#mBrmCS5uF{e;I0>9e2rsM)9Nu-<4Cl@j?Z<-6h1DO2LA8q;5`wC^*U`T?H(KbI zUeT#1v$SOr|6F^xT)^r?!_-SPV)Bl+x8>fp+LQ2!Q#bX?tO?VM7YEhWw-_$d;0mAb zx@%psuGj{*Q~k4BCSK@|wEwlM?(n7`p0^jQUj4P!f42FD4O8ZySZOu?yvi5mHCwgY z7BJumR7>`ZbJyJbx~nqw;K_{I*Y9lCyI^C4&^3yL%!1YD|j zP;Y37OTL+!+H=wuJW7TpG^Ec15_1!z0Sz@RD=KZ-OStHYV53e+L+b8fL5}s zx&LmJ&S~bpQf|;x!McCHw5#7VGFzScTou2ht!%~x&iVX*dlMzDxjV&Pch8pGt+x7{ z%)I!QPm+ZTWZ0`x-naG#z6&|u{?F}t>GRK(PhCIRlnyrowRc>JW^$!s%!KTD?f>8mW6os4(hIq<*xVJZLAF2~6_@~yJ6 zfL~tbdyr8RyLF<=OHCDW*{jOj`=oAlE{)82DznP)S%7uv{}rpW!YyqLZc;B|jJh|}w?=OZ4ws@jGSGs23HR;vaUsjataO;QV%^7cgz1)_x`P#Y9H7mSa z|D9TQPSPG-=zOXUr~TK}xSdvu$QOnpK*sHw@LxRJ0y7MW0*0r`)s&su->)qoyzQ~L6@Fx?@>QK z=O%cj;*M!vq1D`=zv3J}+&uC%ef(Ct%%7Ae9Hkk09n>AWc5t7r=*}aXUAA8N;yuA# z=tj|ut3PY@J-w)C`_SEPAxlK(!*{wTAMaR~y>!a;Iez(fZdW>KFP*df=KZ|NSjpt+ z{+vOlPCt9N$?*BtNO9?VuipOe5|TU0cxb_-d-JYb&b?h_TcNPDFkhZic5P}x&CBEo zcP~7#->$VufBNa~-M@o>eP_$*n9#@c`SNz_5U2f{OIDvO52!lv*=D+Fa!^V;=NoV% z*8DS*=eZ3G4-N0gwi-OX$N8oD{O3QPJ{8?Co-%D$q}$Qy|B9DR+0w1QHeKlUKcn3m zT{h?K|GF*t7%9-fGPT5I#q#~-Po#dizgJszdef9^#*w|c+&g61wr#n-ci+B!w;j^< z|KHVM5$NgOQuRw(<;(YV%n?!>uHIMrT~#~X@R;Z8nJoJa(`GGuYNcZGKxS%5Nz>KK z)=|>M9|GS^U8fxBw_wuyf14C%RhevPPpqh{oVeaI;{dypm0M4B{N`)>_Us98w%&Lq z=(NEOpIGnLHr-Re>rDDo=*^^g9w=|vtq zoV*oI9>=?@X0`BTM&4IlspD>U`o@nBY$=AIdmGB)Qo^W2Wx?yeghbXvSb zUpp%!fxG3)ITg!yvdgANPZK?<7-%#Jzu(?3K+~9$ zq^eebeEzyKckNdLp3gSkMcPYKa_s+YEChF6_f}V*$*kv``~2tU&zo0I%-x>C6XUmJ z!o!bCRdo-^Zt%=dU~4Ji`Zo3QJRz&on{3YeFAok0{4UCwliZ`@DStfhlGUWM0iGEO zLMtvr+v1S^z7H(#QcA$M}~r2ONrH^^O^ppC4nNYfgzz= zFSpdCzvPLJI-g=!J!=_5y`zv+2bbbpk;-M|vDd%vy)Isr;M=#nMelUbts|E_UX-hB z*m})KZr_%9y3%WR{EeP`!6Ap^<&`6m{*y2G#k_AwTl@BRT-TeWKjJ>yO}OCD!ts)& zb>;H>`elxPs9m2Pp)I7fNPF?@^=@w9POJnK2`c0EB%+oo2 z=1Itwr6=~q-QRlU=BwLEvs>5}xvI`xBk?Lzs7m;K+NM^PZNDz)`8hEgDlZA%mg_h9 z!o&&lKdP=;8e4Odx3`5Y$<0GOZ?&C~kd@!{wdt?k3nr?V2;E_0otQ0joPIeR zda@;2#iT)5c}ah2yrr)bvxSAzuYzxrE~}U@2wZX(srQ?Ffnfp1%fnrk%RMs~1X{in z9-Rr2)ZuvP+^q`|+u`ORe|OU5qJ0nB%AK5;4_K$YmOk)JW%=t}(Gk!$ zq}RFcS-Um%y6(pq(3*zIdHPqkweO#xfAH1IZMjdMZqoVuU5jCZdwWEas^|xczH7HY zi$6EA4>gX`_|0seIM1Z~v6E zdn#0!cL5Sz&y4P)qFLwF423ytpzk0cA zopSy>u9=rz1K%X|Ff#1%QeTpK_sY+jX{w>o_s`wka?LdmylP|1eBBe73>=yh+aDP4 z)ZXuZyyK0-ChJR;c0A6J(<c z{a-AnKL6NWMwx5p=2dN~z45f@gPR*06 zyml*5LT`F^j(nNPXPbDv>6x=qW`?QorXDPs^?4J6%!Ryp<)3X%>!}|1$@sc`iCmkb z)UDUM`ckINs>^5ikRs2&yK>&`ZBuJ*{fgVBUOnmj=NhZIJ%)xnwfdI2i)H`Cy{NG> z_g#Ddrv%dS%m|<<{ zWs^;ds$N$IcFkd9SiXqwWhQ7@UdQwICj*K@LsKL3YW2NXW9)UGr%t@gASCvlxvyp4 zL?7np?6q4Bb(ZiM+ppca?7pA|jPkw&>L7}Lmh(}?3TQ1b=W>4ID?NYFA{E7Lqo?EV(6IO5jcg3o# z&+GE9r7|9b&%uZeJ`c&(@_dOcJ^7tn1@+`s>m=Qxf8Wep+3y}QQIkJ-c1#ed7TT>a_Y?^~`#g@=ZM^4$Ar z;`gVfzc;GRoVx0D)Ux*J2g=Idmrrona!t(D(U19nU#`84_MU4Og06UJnfn&o-h9(9 zayj<8XVhw4zdh$Rtp#@IGr|nG~w|6pk=33w!4&GFKs+r zG;7(u_o}=40{l1YaXTb!tDo@G@5LgGQ=6u+9(ma8C3Sh$vWb^hKap5HVX^q>iMQEL zX1dBtHnimY5&3*qQ*E~Uu??xqc(zF=r(7vNd5(c^#^o!Q87^&js(hy02{axgA$)S@ zX{T8ySFf^~fBv!wt99Au2FtU*G8s5;tSLMb?*mxtpUh;~E&L+$srACEV$xH8 zB=kh`weU^2TzlW!O-^O``RAWsmIOU9X_(9LamA-87ouJ-(ok6#tYke!)b(L?>m;jt zm62a2GTsn>e_qpn@13HOBS9rF-VgMa_*nH8%Rre0nLTHR=7 z_G#@zf6IOGtJh^qvfqo@Q0wQnJUCF~iAlqZ${MGis~7f9xbW(|&h8$uALlYHdo0`L z@R_|k`^Ti=$ImL8$|(N5G85i>+cc4T+GQizcV9#E1dWzIeednZ+%b82y71yV=S+P! z=lDE(sk&zC^wX|pj-S5>ZRf81x249{kGW&QZ+2nMx1OP)LR#~RqOxtz7hf-pdc8@f zcF&Q$--X}Ac>ipg!zLho++S7bmi9@%^_I3g%{ldA&Pf;F^FDYGV>ij;1q0KQlIx|% zB-WPlJfC9lj`zWdIkx>CFA{2=Z;7!v|5?H*>hImHZu`>iNFP|Z!?Lfbh0iDI&fnC| zt>3`>z`;7=E0(`;{?0 z+VypbRp#2-Ifo7V9vkpf&O3hDQEgh)uGd!b*SB9Y^Ig2PFZY1_0mnPv&wMT4Cd&EN z<+91Vdv5E~tJegIxJFK!_v+=c%u}0E)<_=+dsp$RLh9+XE=_r5u(s~%+W{`)lB6G;|FKLzs@&uU>4=$!AZw4PJ;_Mv$u9)7?KA9}hjBte-x+<(pTwZvK0l^LhJgFPro}-Z5qE#z;^rlVQ=PSk<>66?_gw zw<-;FPj9>vcX@65>r5djhn#&pne}_`sFWChM~W@azufm;_;hBrE+?;o)BN@=*W>bp ztTyagclTTJ`Oh}K!CQ5k^lQJi$ZQ7)B_ub5=kB#RPZ+~K9 zYSJ)cFMsBxG!Uh%9=$*QhJ1^eV`Wsd*o z&itC|7wpX3ac95ttjZT#EYH8poTZd6A6+x+vWiK=kH6YWcCTC9<~RG=E*s3^ z?TIs%oxIArw`w{_LF|dCL9y3=z7U!0yTtQFg~k2m9ErBdd2{tYeoDFd+{JGFgbNIh zrkBS)&s^-jbJ^Bun=2k)G&yVH%Xj|Xi{EyqH*xge`4JK*Qnb4IX9DAc2R;3<_Tsho zf4>ktemLdm#KS(lpC`P`PlkH=k0Vm$EfPxg(;bL^&oC#6>BAMdN$!U0 zVfo&3^^eOytxTD1=GOKC!VC-Uy|s8|y}Uh9VY#y6>$bTuUSdAhJ4F~C-1@B-|LW!A zf*m=ajYBm*QZ)On&zbjpW|fr?pL3N2Th$)M13S-OKW+4`mSvOboYh++YRnlA?9?~k zs<6EOfW+kIJ14()y8m702ouBheYY#Se!hIN^VSWQ?A*0aqd6J!{%){U`FuI^a@6z6 zcPYAJw)Yqw+&N!u5$wNQ_k3~knP1=U|9kpm9RtIwX%oV(TwbYt`qIgX(w9v>`m!*z z=hd2AcAsY8`QmH-Kb!M1-dqfPcLVJwUS2ur+s3cgXFi{qB*h@JD}Tb|IewE2)lP4k z>bhZT*}U|wOooCN?`C=wS=nB@wMZk(&-=8N&e3&h3=hsJpHD5aGK|Vj?pb~Hl3yMt z!vZ<(%%i*3h@?ht`^P(fS?9w%hJvRb1^uq2E_Lyn5mzs}FP`DSg;kjz$M#NMxOJN2 z`>EF-p7CNR$aw2KbB^D!UtY6hk24(5W&iCn@p5Lw{coz9FV-w)I3UWdxc0=$kTp8X zQde$SJ)4nX2WO_M-~0K7$4>IytLbMrAes(R@Hcwr%H^xSUSnW*XtYGsa&P+U-Mceo zm>IUqv~N*bUVb`Cn|tH6m=@Ith6fXVPY8SCzAakYJF#sy;{jcL#kDv3bLL;$KVQX! z!QzSb649?;_|~p(=FDU$IFan3{pw}x#LEk=@0sbBwv~~Ad%xn^7s|K!v)`UFUh`xM zpOX|r%tyIPU32bnu51pEJ0fw|oQWZZQ}B{jh~H-Qr&5nC*3~o5om0-qAkgR(#rjft zcZ}YY!v2XjUwoaqWpXzIgUgNyVP7V?`rO+)Rs7`VJ15`WXJ8QgHSyGr@|Kv|HIe%_ zYA`&w#nyj?!Sd{m?|Xmko4+jctmu|&mGgG*l4oeRrLsiy@4bnU`+s=pO?qxAe2L+~ zg|z0$J=Mn-zyCc|_|mngU%MC&?9@#cIQ*r0@@3G*wWki-e_3CP6=|Iu&BV~rd%K1S zDzo$b@2TPw_a2)O&%m&K+xw$S=iQs2^5vJgJ7`B7$mDC^6xaT_e)-9leZ27R(i_KE7-~9R9Q5*IzxMs_ubUZ5Ljpy%lrcB(3$|`i zTFyLa>&4f!T=8ot789}R7X+<4lI54?Fe*Kdz{MVwgbFY{BnaQnuJ!=|B z?LClM_NdpNf4+ILUWYw6$c?$dexrTj$;|ENo_{{I*+k4W@Ji|1CqWDi{zpOaSGGJi zI-GNEYGmy7oNK%cac>oth+4iqWWaOSz#>vY_jsm6@{8AO4C}uMUh0|?moCw^?|p1( zN%q>=%M#6`7;0``E}k~0uIJCyUF(WV4=&5hc*WMh@J-}W*PObJ+bw#hC$+FO7?g=! z>YB6f^3x*A`RCW&uBuXIU|>EAIu~HwvaNbuO>=iKD)jsX1ycSqvxQTGLPIwOn=`O% zK0P7q$rs*V`^slu0Iic_5V#cQ95wOseW|vC4{f#tostL^VU@khAaH5l{GCs}EN@HP z5u>+GEJkx_k6~)$wA7P_G8i~A?}K8Ae_Bh~4%r!o%Rpm43{1CcJ+%K@-YvZwS9B}b z$==?6@&yKgI4;GtHqW2JRT6F6 za__2b*&4>St9wyFsV~C;W+9%;(iwB6Nmb2K+itoAv;uhI1%?efO`M}-6_(rf7HKb? zH*emJf5Hq&3+CECTKsAM|KI!n>8%6pFIo5c!|c>a7Z?gyPKI4lI{EeTKcQWjvo`76 zjT2`0u;GYv6szR-yxV3Gpz*3zt8UDdW>_?-4&+^3-D`|Rx5}M1Kj30mRMasc%=5{X z{Vmgk*JV6sYq+6u&*EF(bvq-=!kw8?^0g`ZvNMFF7?et;ctyS0GEZ$G7tXF&lWN=T<3UM zf7539%yu@0J%{IfslSm`7o}7)OHD|MVZ(w+|M+KLxg6v?`2s^jImgTIOwUag-(hH2 zZ*b@DPJ_qyE}Klez|gQ>;8OgjxtAlSMP|Qz%EnOBI^kd6^*PhZyd}Cf;o02#20>cCer(fy2Ph<*7F&NV8P0kFUn@;L4th^6Y4IsfkVns;8Oo>70{rM z1)o#Z)B|9_g#wqdSx>**q~n>vU?JjktC7Jnc3Ns^sEP@L4A=4m%g68c=(z18K5z(2g*)X6Y`6qgsjegp75QS zp+jC#_S|yIy((L-S^d#vWJq%JVE?KI^1}ghj+YmvfwkX%yy8^uo_+f!U0`T<|JOc2 YsPxZ;53A2HFfcH9y85}Sb4q9e0Fi|iga7~l literal 0 HcmV?d00001 diff --git a/style-v2/css_0/get-boost.png b/style-v2/css_0/get-boost.png new file mode 100644 index 0000000000000000000000000000000000000000..281c13b71e95530d0279f6d617d2565a5c8e2df1 GIT binary patch literal 27054 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 literal 0 HcmV?d00001 diff --git a/style-v2/css_0/note.png b/style-v2/css_0/note.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6296a193a88d75cadf1e17fc3770edc797da6a GIT binary patch literal 13625 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 ExCz?iD{j$*C7geIVWv#;jx7^dSgMIX# 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 E0BskXga7~l literal 0 HcmV?d00001 diff --git a/style-v2/css_0/panel_bkg.png b/style-v2/css_0/panel_bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..740839c5f0d8ca230f1c96c8e06ab8ab0ed289e7 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0y~yVBlh4VASDYU|?Xlf4lY{0|NtRfk$L90|U1(2s1Lw znj^u$z`$PO>FdgVjftPhn04*c;8F$#W(7|d$B>F!Tc!sKJ>fXGD<7=G87X1*mqXW7shIUr z(DTKe4Bm%0A}8xdO`DjrQ_t;@@aE&29tpLuhlq$GxC^+!TQWgAx)*vvnhn-nZH@te(~=6BpHo+U+!FUQl+h zIAh_5wXrn;&tonIwQ=89I(A!Vli=aBC5esxvY!|4(A)L-wr=X?mbp#0-$mRizV?)V zlH_#<|F)V(eTQ8>C+PPD$p^IS-B_vk#GUu&}h(b3Nc?fLX@Qnj#;a8C!#P2E9MDs-$L3Q@gOs)v0N-B|hH2^tSu5*^0~h zI+q=`u6i3}v^(X6UBXeL)511|e^tH(wu&ZyafseixQ>H;_akZ7tE;-!hR)>ubfRPR zYuOT^H7+Mla9HPFTvA(_Y{SBnW*2aIUKIN-uf3Z0o~j1z9MkB?b_}9^L5zFf|+g~`nc?y#t}c`jXM{7)5?r>*elJk<#gi4m8XjC zT{C;3WcF6OJ-l<*vZ>egK20bxDSY4^o3eNPsUq9u(hA=hyK99D9-n?`VcWMQH~QYJ zU-^&sFPj?g`~8)!EyoGl`Ib?-^F`8*i*#{|tSk*?{?@%iPkWnK$@9B!%cm^z_^q|S z$ozYL)IagUNK@soZOOUwBm)n9TJ(C(%Vl@Ahwe2Dy`gsP^INVTjVcRva&%mGdvN8; zDW9Zu)6O-yFT6ilIsJ>|SIgk5-_~qb>zpeX^eOYupA$AE`aa>=?Hd=LyyU!pp`&Tj z*)7X2{z^SMfAhqXCPBs)Myti#G)tDrs&w9UR@r~!s=VHR<~e88B+Tx7{RGNep00i_ I>zopr0E;-EEdT%j literal 0 HcmV?d00001 diff --git a/style-v2/css_0/prev.png b/style-v2/css_0/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..d88a40f923e3c554125f01cd366707c60cfcad04 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&DdqOG`60Hr}>%%ZlYo1O0u~loc*tzSP~>;p||S5Et|R|Noh1c$yg)73T~N2spa`a*~JRJ5eh~I1}5!gYtAz;Fo=OPI2WZRmSpDVDTHL^rZN~B=o=X8 z8<-ql-^0nkz!2u?;uumfC;0|1OPoRyGxLNShYX~Tl_Wf9G1_imu)%RA9}mw<0X2^e zQioc&m}WXSvRw^OFi2qFa&lm1W^U?K=~^Ook|m{hVvche^Q6-g?(V)Vn8U=toEqFE UkjD9gfq{X+)78&qol`;+00?PtqyPW_ literal 0 HcmV?d00001 diff --git a/style-v2/css_0/prev_disabled.png b/style-v2/css_0/prev_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3c17e02d156e7494dbab2f9cd66af46af2358c GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhlO-<`D(~2b}=LHv2RC7dZWAVCrDh<7Ss(U_A1L-MNQRp<#x>RYL|A z0d8w%7gb?npBLs13>ys`SR)0#F|i0-(0!9|ZvFp)$&5@KPtr;p8yJ{=^Qv)(GIJ<+ zNI0-0Zew5(Fj?c!G-tyG77m3Osc(4d6PFVdQ&MBb@ E0L^J1b^rhX literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grape/header-bg.png b/style-v2/css_0/theme_grape/header-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..5be7cba7d5e84e819c4e7df057e7461c9cf4c181 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yU;wdGIG7k17!1~#9bjN!;4JWnEM{Qf76xHPhFNnY z7#JAXOFVsD*{`v2GU*!p?+KjBz`#)K>EaktaqI20gPaEpc$k-7+WG5^#NGNHzW`3H z9^a1r51Ss(>8*_C-}ktoXYvv&wiTHwTl{!Uww#Mu{_Mr2)6P~}t9}Q3J1O$&g8Jmz z8!#*Og8T?ZGZOQ>|%d4_w}!Sa$D*$y_fyOtHHp) Oz~JfX=d#Wzp$PyLFHVa9 literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grape/header-fg.png b/style-v2/css_0/theme_grape/header-fg.png new file mode 100644 index 0000000000000000000000000000000000000000..549c812e166e3e23fc154147813ed4376f2cfaa6 GIT binary patch literal 106318 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 z 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 literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/caution.png b/style-v2/css_0/theme_grass/caution.png new file mode 100755 index 0000000000000000000000000000000000000000..c73b0aa3f2fecab4543f474c5582156c71bd5b59 GIT binary patch literal 1816 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV36WqVqjpbg^(UuhNSX}`w$8hm`*Vy!8nRt1x`JcKS|KyIA{R@NH^(p7wFAFf- zKGL#8A%0`E_^o?fdG})EWJ*?qbVT%Azn&~Adg?8!xUjHVbhKgr^Z$zj+mk;XDLi@Y z?6x+m3l|%?TRZ%omsttU<;%`uYUjWGec%0w0`;}m^*-~r|KN~%up>3YV@KuXJMHob z*Vi#MGVHD{4_rT;mp3y+%fH^e5T3cP#tBHzr^Vu|3 zz0cS`cV3#sAH#Fco$cf`M8p;s-rrZt$jBHO8EG|@>qN?iB`oL9U0b%)#ND+dJZ#tW zX>!ia9I;h)mN_*-Pk5g zQtC`JU$$&jTib{KTpz7X+7vcFKgSuobJ=;m=4EOpo*$km+3~pJcI~e(nQYC0adCOu zZ!5MP{8+f7Slz=Xrl))72D3N68vEa8~HfOZZxY?Cp*=T8H%tnJg~TT{rdDdb83EmN@a0mV6bT0`6PLB<;=e&^`0Vg z#gAoa>6vA2<^TU zg*t8I_!$^n1D9X5y8U743(H%%v;OyTTzeikF-h+H=YWnS^=sQ__%#3auAcO$H2V7M zXswhZ|yK~EOP2Xg(}_U@hhdy>)Q)&2_ELML7YAAh&{YTD+TdE0l#==C3eTw-M^ z)q6J0IZ(t=p#AX214)K2woDd3cRxb>n%JA$f?jLWF5UK#tRdFIt$JhX(~6N--*bbHmWoG}UM(4_mX_;+ZpN&YW=i{fBdL$?hMR z_eMK6tov^}NXMTIW8{-wL;;;vT@<39d)&`|W|-JK^b zQ7bRpnJp*sJto8Ea`ES7RZ%PF&6_uSR#0E>$yB46E|-3XCVT7bK6$T(`y` z|HImtmwk8sy{+7PyQuZ&&Fw{-tTxBzpRL)Ndid8f2Kjl{_4ieM>OB2#-__O4exjm+ zERL`4MV6?yE`H{=YTo~=Jk|k{vKEq}7IJbG3E?p``G6W_+0ERGYZyuG6z z-`Es#u0YCt+AhawGWI(P|IS?^;dy9R+__!zc6bEFOfgVpbHWdu%cJpSjp)W2v|6d42`5{SCJID=hUjS?a4mZ`lMlTZhH(mIr(b z)|3y@s9zNDZQ@D!2`B4$IB$BZ{kOFH=j6-lDDa=y_2$bWef}q44$rjF6*2UngH*9b?N{B literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/footer-bg-left.png b/style-v2/css_0/theme_grass/footer-bg-left.png new file mode 100644 index 0000000000000000000000000000000000000000..92fb6aacf4414217df5a27f5bd45c8999e85ed08 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU`XL$Vqjq4JlQ@QL=|{M7Bet#3xhBt!>lD zxO@5ryiZZhV_;y?^K@|xskrqvJhp$ffxsQZE$cmJ{c8>OpZad$|Nr)`OeZba-n>2B zbnwWOe(&mCU7}7cDK?uoH&1Susj0V9_*~GJfHQOa<4!-Xi9e(BT*Yp_!rt%aET6~R z4v$D}lArO^w()9d?%J)_PPN{dqAGNT@#eO*Teq!RwQALtYsVy#ePXZY-nM$)B-qHG z{N!)l^{DBoks__@zWl7(7q@=->CPE5glwIEWzISlwR)>w*Q2uCEA?MJJ>GpP-;A)}Pcbrlccqf=)$MKN{Hn)aBUsG9{rTx{ z)zilBZH249`AmG~srk`2<$CGgw^a+{6c06C{Q5%Tz`32vGX0ht2l}^c+}x?mfACdO z!#Q!5G9{POXO0WsIhn%bA!r=9>mi4a3j+favw#^}qL>vMvqV?|>nE0@M~Y`z8?*#| zP)Kqr-x|QbiIc&~X_@_cfs`N$B zu|5+iIHO~x#Ok|zn|^PtSo!qEhJ@RT9?T3}D;;E|a(8CuMxS|)7lvi|NvM5{a-MCl z=DyiBV{eaZ(#w{G|%K9Vzywx`@T{FzjwMe{?_Mz^XVZxoy=K}v~ z-#l-alfG@Tq9xDo>bAG`}LF!W;89nIHcs9KJXEt$)gmclyuOTT|vI zUgW=StN3#UuRw9Vk@@c02L2C>b_dvhF#OMda9{BGs`)`rj{7q(Ffe$!`njxgN@xNA Dx0^hG literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/footer-bg-right.png b/style-v2/css_0/theme_grass/footer-bg-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e31044a8a57356c99c9aebb1e1c5dd8913b63be5 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU`XL$V_;xtTP<*gfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=ut^mS#w#?8pWrg_C~$^`}n2H6tVh!W@g+}zZ>5(ej@)Wnk16ovB4k_?5A zj8p}8Pv3y|DXMu43``}SE{-7;x88=w_RlsDm=hb#*eIfx``{Xa1h+y%M*VZ8`Mp_%WkBF?#PCSQePCsEp_5WVpXCzrb#Ophzn#GsCg} z0<-fh3z}3aUu_T;e6i2;C3E(6$>f|XJf@|oZ@x{+a4=>F`cWQZA|LKiNBQ#YGeZyemwLQxH#)ldHPa3Ty$0?FP)eQY4|_|+TkFi9 T8#ovk7#KWV{an^LB{Ts5G22fj literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/footer-bg.png b/style-v2/css_0/theme_grass/footer-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0d78523a386b921382c8bdd380efd5e47bb39c GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU`XL$V_;xtTP<*gfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=ut^mS#w#?8pW##aA+WhVmzgKUXwM2T~LZfrSG%=%9<*F8_GWMP!E3WbzI^0)8+0x1)`{mix;wU;Y!np^FE!0r_wGWhY^3$E zs3)>jC+!Y@N!a*j;?BeG^MCF;JWXHqH_y}k_gWRa8CfvEAKn^9=6YGq59>eGF)%PN Nc)I$ztaD0e0szuXUNQgx literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/header-bg.png b/style-v2/css_0/theme_grass/header-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3588b91b8d2022e082fff2938d598d9978efbc7a GIT binary patch literal 209 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 literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/home.png b/style-v2/css_0/theme_grass/home.png new file mode 100755 index 0000000000000000000000000000000000000000..f2047b8ffd79349ebd3208ef61d445cdf107bbf0 GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4kiW$hQCG&XEQJ`a29w(7Bet#3xP1>rMq>1 z7#LWXJzX3_D&~Ybz{S|QJTtnsltMyEt#Tl;v|NO;v9`l_))3dflS?I6H zS$jb(b8Yh49f>lyi&H+{FUwhqPozXyMAgO$PLw+`X@4OhhomGBmA=~_D1Q| z?(N^;kt-&UeO&ro!23z_CpvBXaP{id|0zp@PKp*eZJl6q)iCX`F;BBgsd=1hc4&a) zEyh_>uAVrSc;ahrP7&MLKNGHInTDUx&k)}w9vO34`!qEvb~Xy+uOKSNk6( zv>&s)yq>k+I;w5?&Zpg<%4gdDwqZYaQLJjmv+%jmwG|syM_%oVReo^o_PjjaM7Ish z%6k_b6+O8rr!cN%apG0A(wB=$YHNA-OxUBqxl-n{cURlZO&2dNS(0$Q<181K_wme! z!n{)kHWuM&S&UCb0aq0ZIGZW?u^!O<=L>-K(iWQ#!f&awIi~NtKn%sIO zysE`fPPtq4blT$3bj|?BBjQ%~?%&@&tBlv`vO)QZg=^(J6gAz#^&9)vzubFYGj(I{ z;}Tc-#3qy78U}A?EOcP#Q?apAnRvqG0f$UuEMI?tTUTx!%L4g}&z+lIz6|B7-m>kl z{@$C2P*-MY*kqgm~B%yI-s@dRDYk{?7W}Z?E5f|EK8s&W{ye*gx9diU zmOq8Ze{aYYzx3*^*y;8PBROw5)u6)m!yljToz+(LCcgfPjEu~jdGi)&tO}DlG?61f zZ+dF}*L%$?Zu8zQQ(T-`e_qx@ab<+kG!NC7_pvkDdvlNQojL3_|N8W^X@MeFn~tSu zvBuQxHhFhLMQQ74&b`&*29bNJ^)%*s9-q81#p>n93c2kQB5Z4agc-50<}GzhKbyAM zVQbXc`g6_Fw<;Ij$@`nI{ijW}qe`<%(8my~r=Ndorri2`P*7^B91lyN$XSIB$Mn-r zi|%i4dS;i`H0!41%9~HV{eEz!P;I84k|ayhf^~e)44$hl-W|W#tU>y=*Uqq|H?%~! z?7#ig{GS=TcFIjTcIC6 zg}t5zefbcecUez&&H3|QF5Z`Pn-4xMYkgo))FX0^>uAu&N1ql&t-W{W&L8ec{U2rK Uy!q45z`(%Z>FVdQ&MBb@04`<@YXATM literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/important.png b/style-v2/css_0/theme_grass/important.png new file mode 100755 index 0000000000000000000000000000000000000000..fc0c9cebc34470929ce3a4eba929ad54fc8458fc GIT binary patch literal 2303 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04kiW$hAlysUl|w}I14-?iy0WWg+Q3`(%rg0 z3=ACIo-U3d6?1y0y(|y;Dtqj?d?t6+Ro^)FYb_s(5B@v=(DVpi>^4s%6*dOcAWHFV|px&Okf zIblX?)N0&Y@>ecsH|Y7o5M=vcz2e2z3TdU~f_8q)?w#M0FUC&di#fNncGfZ*0bfl; zm(ZmvX3bQb$vJDT)47H_Jew|`=yANDe6{}x?}xb^TNR497HUapsP6l_s=B;S+tbZ0 z)$(`nZ~H~2zM)GdXi0daO?q}FWQ%i=Ly^N4XA@=f-aD}=>=X9!?GxUp)?)9zK;~cb zmCfxt>^wHQemt;1@*lP99OZK-c^6uPgqLWK#X`cIi8(vmgBq1<8E#J+Y}|ezxyPtwUR;?es1-7Lc9rH>7i= zkvx~hm&5VbuZ6w6u{Al{@gO@ZD{CvOs_O4Q%h-hS99Bp*8vXcocyI5ndx1C2m5=@1 z$gw)>)%OhF;3;doy zDioz=WV&Y`Qf|y3%VcNWX$6(U3c}y)H^T2 zrY8plip*W+>2++?NAt`ohMR^RX&&>c*QG|zm?g8nbho;Uugaw)1I1lVk;mq4DNfV8 z^;7v)J;S`W56lkloVH1uHBHs}s)WBv$t*36m4S!im#(x++2?$Y<09it_o*FP>M}aT zzrX3`D+qae{);##c*Y>+&}+%iMQ=@t?yo<%m-%>9R zk8chVZe>iCm-n^=SRObo)7<=b&1vbL=Qb1PT-A@b)9A9H|43Bk6K)pm_o^)KoOYNU z{AjgRclu268UJ|8-K$D(Zi(h8y%b^nBirM<;%D7W!UDbmxgjMTnXBXOmtRkK?9`+@ zBhe;P`?-kH^^7ea+hY#zmcA3V!|c$$Sy9uo&M0lmk34@iE!OO$*26HVT*p1!CtrJf zcf6o%-SiICyfU?zcbTe1^V<9sLpmKKYg|9PX?bmHalNrt z^qOi*<++>x|6D!C6+12cN&$1PnZmU;7x5pjJ?eVDmhr%6Kl&|&Ns8q3<@Pg&OtMFaT`>mUw&)WUo zp!V{`eV*sC-zzQTV)1%l&2V0C$LEJt(%;MvtZOMXG__qWF;8m0#r~E1LXIEbxn%de zU)}<19DZ0Rm3EjY+-iw1PSQ2GruAditmv%Uc|G6!D%8`y?D@?trO~>dEONq+Ct%BznU;P(vau@t1vM{S9TVUPNhgP~F zv%g;7;d@oDc<=pt0;Qo(Y}z~5chsG~%kEiWE?J8&fJQ3U&MsSVnR zwSv!D4Q!bo%as0_7~OmR$~=u^iOGJ-DhEHS9iF-*Rr=wlmAeJz$$ogZ?4GUR?RmRy z@o$&4i@f#a?8d&CUF&qpb>Eqar6Bd)EKQ-?comitW0S&3%fzrOLe ztNZ)t=(`A;b;>OoU1tizK6_+d`z2PI%e0;K&hIO8*BAX{JiKk=Lw~lfXKkHjZJlME ze;r%7JN4qsa?{(ZuWaL)w*SB$hGmroc8=+CeEjFLR@S_8DV=#TWm4+T-&z7JiC=E7 zUh}W^=s&B{eVos$EX)sW6DS!s`$8voOt>X>aF@U|R)h2G zpLJ$bCd^~{tTN-chOxEvx9*SY+E0ByfBt;^_Ln)UdsAHl|0L?)X;*8}SS7{5_WS)8 zvpHJ%E8@&c9-iOVSo!D1<(DVbTTfaZI`VksM|a_J`Jyjpb``zqJS=aw|MUF(Y18F* zR({@g|NZpTpY2OO*k2P?bh*5x#4305O}+SiF~5Iq6c%OuIyHNi)^yX_Z9jZmpU#ilQ*ttCOWPH(C)TB%__Kjr(EeCFL<&o8sg@?~IPkScMFC~+(;$;dBa o2+c`NOi>7~EG|jSE!I)+%uCigDQj28z`(%Z>FVdQ&MBb@0DJ6mYybcN literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/next.png b/style-v2/css_0/theme_grass/next.png new file mode 100755 index 0000000000000000000000000000000000000000..f3a1221df31c3c2ba4e3a72edad38c13703767b9 GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4kiW$hQCG&XEQJ`a29w(7Bet#3xP1>rMq>1 z7#Nr~dAc};RLp6eeB1w40K>80^1pI=K031Q+}6PA-o zut+zF-j;Gw?uf*D*{((14$Hcux3in6E_!$R{mVIjisa6HXWSoM6uZ0c{E^r9Ur$om zdhZ^4hON-~BYZ2GeK$N>`J?GiOJzY(!s6V|uRrr03%sLkr*1#v(teTeT^zk4U9DU7 zv%f8b6P+XKjO)LDUiZ<0p*o>#X6mOi#R1wP z8(l6)T21PWa1OIO8vZ)ea}qY-^=ZrWvbZQ6m)_kQvcrVw=bvte)59DYyUFcC9E$Tt4>&6 z+W%-jd;GDDoIH;dN(0uWOyTmnDE=b*gwcE+xwelYeE}Q`Hm&Y3XPNlB+x+oXzleq5 z0w#UgMVr)jUI2-(`lA6OUY& zu=Q|M1xs0v^{>u8Av+EoyuB{di7k}!tvm{Q)|ESyVT{*EHLXF20N@PNRO*vTc;nVG>kH2j-tEeVx#8P4@BjRN>Ropm;oHA%y^x5t(%-w` ajXhtHa_t{xfsG6d3=E#GelF{r5}E)mona0D literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/next_disabled.png b/style-v2/css_0/theme_grass/next_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f737996c4548a1d0dd77170b3d847b145e7e07 GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4h9AWhH&dl0R{#J#^NA%Cx&(BWL`2bFmM)l zL>4nJa0`JjXs!QP+AQGoS> zd3AL|yBnXBvf{r^u{x%UUR=_P58iX}-alzCYwyO5n>SoM)pY3Cxd{@=CM*{3`l8Fy zb^L_pKHK}JE1bv0#YL^$@bn`S28NHpHGAAD+fOC$yZfT%guJkz^44pIlc#CB&a`;; z?ssEkrS{wwmWI5XgIss2a-%f(_nkB2xbS$d5W|WPqv+VZ_w%(bwOziSIm6}czHhfu z=UVEE`z#r^+(0xR|^{9(AtGsW{+_hvg#h^|K4}`Zi%z`m&M=P?!Bm8`toV%{<_zD&;MlHEO~a$F8jN? zz8CK+U3KoK+_}l(EWeW-I5fK)4Ye93aSIyt1gac$;E4b7arpzA?_y3I3@Vz(gjJq= zdohFcabyyc_POm37mLMY92K-q;})@1>Tt+Yl-s`WckIh z zd3Q@1BhPKexr|{iAK2PPCnse0=B%B#)^Nl3uQ^-itu;I#ryZip@YCk<8s&ZNO@8$` z6VGjWb3TJZv1=l;(fz$ACmiroj9V7R-t}Zb1gBTXhh=PL5(|&8FR#g2+^Ktg)6%Sn zH7%}O1@&wlch9tRuM2gVyiFiPF7HHCKN_eoXC6?BTUIdZ)Wiulg^#2L>eTXh zi@Ut{OHMXhB*i(k-{P(RX(mg5RcWT1cl&;OtZ;8n@8Tt7lB9 zFnPA)MqYN<;-|s~C(C|bzWYylwb;3@tdrTDPC7q)l4vqjeC?Fu@3cOc)IIrQFw3Sz zjlXp=yVLVuOz~fToG}uBYz2^U<}(qn`I~`O&}a$9sjq_$iScjlVy=*ckSIqS*h7VgJ)}Kdax`TkDM~43N*S5Z#s*=+A2Bsn_8s8%Z+azyWL)B_4{Dd?|o6n z?O)IN{VKM7U-|a4Ni4jX2exG{mbWdD%_(@ly8P|xV!1V&|F6FHudw-T#Nwr4kIqY% z%*`}7@wKig#e&6Av-jWQsa;>nvU@B3U8uc0@Ak2~qRVW{pMAS$`hV@MU;k`xH?n^d zE3FW`yNIhkBK`OA+S|XcUfUZw&9?l^Zf&3Up%ULirB1osWoc`Gj8 zmnwa)b1g?JK>f~z9KB0}$`=HjnqQVEaq=K%R5oADr@L1ggIq<=Z`>ZS^I?~cUHCr3 z_?;^qzMkXtbz1oB?xdOTm)6Z`GHKu!{J-wf%(JeyTAa>Wo14t$3X%RS`f=x`wLdQ} zW!|>9eCuy+wWU$N7{oMk`kJaY~LHO_v5Tj`juTjVt(EZPkFt0;*Qgo_8#quR_^=GwZz?f30riB zN+zGL@n`Oc(CK-~)64f2J}X+C8M`dScUDU7uP3u5gA1oGEsQ*IZ1tvFocw-zYO}1FS*_!_@-I&^*wO!xI_)OC22~IOVH~ZXs zw_5mV^R@l=9pavM#XaxaUs#y*RrTX6lase2C-b|kb1msTvDYwqms#v4HQzl}p?h8( z`k}QhBYoeNq$7npN~}I!%4omvX-le@^xa21v6TwduU|KAHeK~c?sUBI(e?8l@1La; z@pJ8mts)PlV=n$|uWDA$n$^G5O!E4&zWv8U*ZK(l`}ya_{7I~Z;;l1%f1NqLi}yaC zdbm%fZ=KBYd41|_j0+9U%`d8%ak$@K@?@srlK%_3A9MYyNGmxSdGB=m=Qzvb@rPw^ z$7|RIw5-{yQ1ev!;OXZ-w9kE-R&Tn?%C%sdU-XsKJM;8z%s%&8H1cnw#Nmc`p3q6# zc3wDUclcXA`}QS$&$hnW9Nimj)Ne=T&bw4qKuc*n_ug5 z?ch)E-sQV{6U*!KU#6O`Jo`<+@zVKSJYtJ`u041wR(fdXJ>L5~MX#@J|8>@L>Zc#w zf1WOH|M%hOfk{jLse1nP_T$-8QdAIo>O}pi36t*ad~@9R_9Zv-nyZszm4jdY&6vW# z@P~_6F-1b4??Kkxn##>qA8Y=f5{~`-*`+mi*Y4(LZ_@6Hho0*9ns`|C(&MS0dXDcp z#d!K`-rjp;%b%bum9NlqnWv)9-06f7kArf{xjh$*a%}3HCCYdG?$zI2 zwyaM^d-juSEA{My(rvHAtO~6u^xkFNy#3YbcURS|`ks7xU0o8j*j}LP;+OSd^W!al zE&3MGQ&e?9bLsAV(dDZuYL5SG4E3C=ZI>JW@BX)^^S7=4vF7pD$8$SR*3OTUUY!xv zy=-onyM~bJjQAI|e81eY+eKX45AC=r>0~nRo?)@?bDzY;O3&pch4#j*4-eU%xtpbU zve)#JQXDLXO$)?d@6LF#zdf#okzs*`RoBFS49`9+DBiZ~nh@IQa?ANenzZMGiq{I-FCfkCRoHKN3^ tv?L?Hh#@p5H8DjYxU#q;HMdwt!80#e@1(3<83O|YgQu&X%Q~loCIFa0e)s?Y literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/prev.png b/style-v2/css_0/theme_grass/prev.png new file mode 100755 index 0000000000000000000000000000000000000000..f7f036150f816cbbd5abb1adc8b0b3a23cb18884 GIT binary patch literal 741 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4kiW$hQCG&XEQJ`a29w(7Bet#3xP1>rMq>1 z7#NtQd%8G=RLtp}eB1w4fK0=0`CmCb9}jX&i{|bS;8JZU(rk@m$+@m&*6<)z@HwyJ zLBqu}Z%$LK7D(P>EYqc@HB&Dyz50OU9-qHYtF3<)O)B0e|K<5fMusbOSCWJ`ZtmV( z?SA2M)XNP=j_wrOvh>T^FG0c#0e7^lB950N-a2-pjIV5-IU~dL@adCpdRAZ9_a#*` z{!B7Y*d48=`p-K!8CJ{-`^oZt`k$BQGc!ZI>O5v;Tz+xp#l7o$FFkbJ8MH1$`?&h? z3$bs%KYO=q^?g$dQ;Uyh&b<`7lXvi~plwP^$w$2x-&VbjzrJ&- z%)R#hz0%$L``hog-LyIVEOOle*YHJ`HeK;h5pH~StMYA(2iLU;rjt4iGTY`Tzhs?t zcH{r%+0PXi4xBq^rYPVtMZw*JcWt9)#Ods_fyMc&rk@J>qV#vdg&2;gzgv=)ojH?z z%qU^v?~<GESXNgP1H(Vx*XJ);U?7_^S|hIc3Yfca{P?#O1blEjvK!&?6Z15 zm7&ag_qPdqXTLv|G{f&oChJ<&M8i(Ct^R9yGfElf&buW2yNB)62aj6y`~FQE7aUr? zfhU^BnN6p0>&;vLu7+#LPu0G9>f_6gkB`Rx-Q$%Syn%b0ip~#CYoGmB{M1&%dzJIVTo@P_7(8A5T-G@yGywp< C*4nJa0`Jjamm^Vd)ASC>&BZ_Cj;?z+#s8}f z`>gYpx}cwZ zbFad>k~p4>WUVW)acgH7G=G(4a0%g!df(l-d1vD#Tlrscx2JYpz0{Gm$8O&1(jdXt zQ`NZ{4jft5!>*-tV&9^wvkb3Z#C;cDKV53!!k+6q1`D!wd^fo3+tQY_O4LYd*BtXh zjG4T?H{C5t^2`H!wtTv~eZkok3=95VyBzZ7e(su1LCJ5M_SIGy=9gAJd(V8~e$*}9 m<;g4!dpfwSg=_g4J}?LEY&zWZ-D4IgY&~85T-G@yGywq0#-FYL literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/tip.png b/style-v2/css_0/theme_grass/tip.png new file mode 100755 index 0000000000000000000000000000000000000000..66892d2110a3f20a749332f7a93a9a8b207eaeff GIT binary patch literal 1211 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04kiW$hAlysUl|w}I14-?iy0WWg+Q3`(%rg0 z3=Aypo-U3d6?4{J`|BSaD#8BYFMINX8*dZ@jf4dy(hQv+naoK2C_Z;rYvc`ybvG2J zY~QygfpbG5OOxX4b17aqFL}oUfJyW*doBr+FzAyKR&po~O z>#%H!c5bHB{5kh;)%|*6bHDif-G}_q0geuBbBn~Fsv&qO6x&(*be5B|V+2rz!Uc2j$4 z^0eMM-`ORWX>W^eNuF?V?&kV&+&IR#@S;K5%}ZNX9!lJ6c-xJ+++>SFcWuS~)H`Aq zia67>$|Sn~X}zBJuhTV7LwSkE!e^3m*tq5-sY@@Lv)E7zxiOI-Vf*bSARs+tb6w0X!yPNXSQ3u zsw?>Sqhl_skwf$(Ijb6@L#h-#BAC@ZrJ{{L%D=0r*cz)r-2eYr= zyY_XeNK)$A%etTM%+YA>$Yf=d{3Nv9!MEn>@0X0pzl@g)mpyxP^Jml9KYeq@Hg#XH5P$tJqW1bfvy|`m;ZC zme1GHt_rwlRd({I^}FS#ZAoQ-(3mg2XNL+kd`R&!4dT4l6F_Gc*f)@kmh#}rpD zeZHqVnzJIU)#inV<0~PRh1ox@KRNV7Vy&8Td47Q(5`Bplw@wFqPy1(ctsv$5%Ofp|{-#@%Yl8BmY2+l8D~AeeGE@I?|5nd@x{^JM|E1N}rTfEQ?C$Q5zrOF*q}n}S zZ=8tPzu{f8*MozcPTU>~Rvb6*oV3c$*#7E`ywmH>d#&~IUs}{DiAy(<+!6jCO$e^R#NiCzMrbD>}^&YZ=0E(E<3@I zl`Npg|5ivf@%OsQ2i-?%gVHV3UL4k+@XV#|bzVyu=OmSiiQO~ms@fiAb}6}P8eIH; zIPNivpK-~G)wSME*BaaTCQVqNTfHZbkySFGKLjskViIfkCRoHKN3^v?L?Hh#@p5H8DjYxU#q;HMdwt Z!80#e@1(3<83O|YgQu&X%Q~loCIItkJAwcJ literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/up.png b/style-v2/css_0/theme_grass/up.png new file mode 100755 index 0000000000000000000000000000000000000000..ef434074cab1625251ba558c14e5bf47c5add70b GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4kiW$hQCG&XEQJ`a29w(7Bet#3xP1>rMq>1 z7#Nr~c)B=-RLp6;bl3k@f(YA(e{|{j<+dCaBWI8i{UJGmx+J6bk>#`QET?BKe36&H*(nnSBa;ApSy0(ER7Nl zYjK~DdPMD3MyK4#Cy_?w)4JauzrJMaoGHfVq|e*WcV=C=Vc&MWXGed2*wbhhAslAX z7UinF)0wTSaiWO7tC8C-rFCD@tmMPc4`y z%U|lDdFu7GtxYm~?Q8wGlMTW1?_|wC`1<}Q_HE2> z^iIDmzSz7XK*VES&i%h3)A;-OuW+R<)KS~csg`gxduo+mZiGRCh}r2gmkfVB{P?~2 br+99$L2LK4shb%X7#KWV{an^LB{Ts5mN;Xz literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/up_disabled.png b/style-v2/css_0/theme_grass/up_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6fcf6b36a0daafb5fa90cb3eb1a6773151256a5c GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4h9AWhH&dl0R{#J#^NA%Cx&(BWL`2bFmM)l zL>4nJa0`Jj4VC#K2L4@@| z@w?giy=n{fg0j@v3%|PmkhktC(GfZL=s_C$OPyJ+FA@r0uun6|yd2Z+^0KVb;_%LP zE{2A_wbIwr*R(Cuuez2SkQK!j_4c6?|Johf_oo-`x7d(1<-PgpLp@r#KC4ew?`S!9 zD?a(E+H^bB;*N-$UsZC8x*fN)1u)%=>3zoF(mikeQidELmrb|5DFhrEr#a;bzGR}Ez#T6xH{nLk@xAgC>ndQ24@{W`V@2uv{+1yn3 zExGvBgfI4ayIFLY?3xcKF literal 0 HcmV?d00001 diff --git a/style-v2/css_0/theme_grass/warning.png b/style-v2/css_0/theme_grass/warning.png new file mode 100755 index 0000000000000000000000000000000000000000..e059a2da9ea5196fa3990825631f1be4959e1ff0 GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04kiW$hAlysUl|w}I14-?iy0WWg+Q3`(%rg0 z3=Ax%JY5_^D&`!$T%8jfD#QNaUwYD)_~ay?FY?JAJc@SHB!z|lC;Vofa#Cr>Ng1AF zZ8qNp+Cvi7ZwO^E3KS8LT{c_TbB5ExfKzR$ZyaAFOTWD~b=#KRvAgZ^s_#GlQ+M3H zP54HIh045||GU1I+gt8@US0BLqwd}RzRE^g#)%V_?wa`^DI~4qKVxqPhnCt|i8ape ztoKCrdm1-&@n4c}W1GM%V3e>-K9kLeS-_}4#-YW1k)YrThKqb1QWKX+GF{?v=@od( zpmnGI@%P2c_btg(=QIh<6v=F2Y&UUS8Yq;pER&sSrnT?YDPn)-x%e}1D#s)jus)QU zV9@z*85@6)scHJGjKbM(vX@O_UlBZQ*JRIbl~Ts7!54M=O*0Fn8_L$-FY=cXboACT z|CV(z*ukyh-=eEkZ(dv!>s~tbxvs;yY{SV#$@-y5|NGor7IYn&D|q}{@J-*XcI}U^ zPn%}DyZrsV?dvl$Hp~^0){winJN}{H=KcOp6*DgwCI5M#XPL#ArGCqG_1ELemL0ow z>(;Sjw?04T7d+duCA@FmMv(!=ecp~ z*RTEi=*`XMmKg$PLSCNlc_;qIZNaBAz4v{Ul^6nr&Mk3XueNJKTw2D$D|hZ+kBZ;F zc-gYF<9)eiw-cSLBQm;%}PyP;$X?+q~r3 zz590Uidw(E%#uIgt%0)cidxU7$(sF&hJQ>$f3jb6ICA3Yi>q&=PBk4lb3)Utj{WVE zA7>YvMtg7C6n8%I$EnhA%M(|9*19YeO4(~wsc|h{wV?i9Y4f`Uf`P(H6C2y6eCIgv zJm780E6!zG7NvBsX_-yYtN682oy)F5^NB8FqOh>JaiK9+w8GsJyI=3vH+Po6PIKNC z{uw*&N$LJ%Kczn7%BdE$Y3rQo7RzY=Pdk76yxr%N!{5w}?nFJgzWGbrN`?KAvooGm znJvqk!?fs}lky_9f*5~awE`9+*%S3gCyD9=nu!YO?!EEzoprwL^~^I@7cISfK5`L{ zaH_!iGZp21-$Pcud{81-`d_5kWAeQC9rw;}`Eh>6jgv`Fb+)Bh3B=mkMci0&{!?r$ zpYZDZ`lCtN24P-m+X`);PJU;ma4AG^d8XE}m`3i`Eb|%F?2dYHcCVSmSEM~PVdLiA zFMjyTTkqvV$g&o}tszltr&x122~6K!TWVSD=PKTCI>zaDz7pXbTL8=E4J)tp|rz2H#TgZ*2) zMIT$a1pL@=Jw(Zh`{3k$<)1lj7bf$+TRKTwzw)c?$*Jt`mcE#oo1-Fc^K;SW3)xx| zf6lgY3Apt5-ML2<&JI7<>?!zaJ?3oxI*c9hJ4OxNuxCW z?Wytk^~HITd8g%!()hPME$Ay-)U{p8$<)*9SL=-vi`~6`tyH_4bs{;cf8sxG6*WUv z0ai&x1_lPH64!_l$I_CF{33?XoYce=h2YBKlGNN{9R<(4WWAHJc4Z6<3=E#GelF{r G5}E*rGjJ9F literal 0 HcmV?d00001 diff --git a/style-v2/css_0/tip.png b/style-v2/css_0/tip.png new file mode 100644 index 0000000000000000000000000000000000000000..e2fed5bd8dc48da35ed9e87981a62fb85cca766f GIT binary patch literal 13239 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%0DMo*?&m%h$yQ)0)GWKdWz3&G+il|Lh{P(MRmy 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 F2>@x_+EoAm literal 0 HcmV?d00001 diff --git a/style-v2/css_0/toc-blank.png b/style-v2/css_0/toc-blank.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffad17a0c7a78deaae58716e8071cc40cb0b8e0 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9VBln7W?*2DUznZ3z`$S-;1lA?z`)P|#tmSq zfuVt+q2a)R0}Txg{}~t<{xkdsQ~$xN|NsB{3#)lDFfcGCdAqwXbg;^LFfcI4dAc}; zRNPAb@qhn+dx4sSAN-68Y+`}}843&7&M+`cx!`muLvG^(1_lP_64!{5;QX|b^2DN4 z1_upgP0!rK^itl1hi%%HopDWWCg4y_C{| z{JavqiARt`YJFJnVhX)qGzOMplv!L->5yAl zT#}irms+fsQd*FoSE84kpF44v;tmD|1}(60ndy0nC8b5F42emG<`xDZ$;L?r7Ky3J=GDKJX@I;2(iM=Hp2}coT4AYeplx7Y_5oxZgQu&X%Q~lo FCIGT9P(J_w literal 0 HcmV?d00001 diff --git a/style-v2/css_0/up.png b/style-v2/css_0/up.png new file mode 100644 index 0000000000000000000000000000000000000000..17d9c3ec491ae1ba22188ce85985623c92ffa9be GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?X- z3h)VW6&DdqOG|Thu-mqE%ZlYoyE{8BU%nLR@2jS)FmvY2qel)W#Kk;%^zi@x|I?Un z*fKCM@RbDl1^-6|46X<6oM2#J;4JWnEM{Qf76M_$OLy!3FfcHvmbgZg1m~xflqVLY zGWaGY7v<-srer26xMdclmgg5`7c2NiC>R+Sn6#IzInThrAO_OlT$Gwvl9`{U5R#dj z%3x@qZ(yu%U~+tY4<`cyLy@P8V@SoEspmFwHW&!FJyeg_(XezvV9WvAI|r@_>dZZG zPW6aiOT!J--9O?NG0%AP;}ge|4lDQN4=-}8`?JGwx}?mMnO)OdyQdu$nQCjPRV}jm z$u!Qa8E-cQ-r3Nz>Y(YPTd#BPEH+&8GWqfD!}4*53%dA!%#3$cIv;a~fq{X+)78&q Iol`;+0POUaApigX literal 0 HcmV?d00001 diff --git a/style-v2/css_0/up_disabled.png b/style-v2/css_0/up_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e22bc8712192df3a8faa3264b0ec71ff3aaaa96c GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhl|Nrwy-~uYR zhzc&Dg3GAj3M#mY3a+7o>!{!cD!7RXZlQwPsNfDNxQhzzp@RFU-~lRlhzcH|g2$-f z2`YGs3Z9{Y=cwQXDtL(sUZH~5sNfAMc#8_&p@R3Q-~%f7hzdTTg3qYn3o7`E3cjI& z@2KDhD)@;CexZWjsNfGO_=^hup@RP~@T}IQi-CcGuO!GX7$yd$8C(zCIl;idaKO{W zF{ENn(v#GNhX4QTi=1XMFdktN{`IZ@p>>FWLcsvS9SfKMdlAq$6s7@ONV`8frfZ~QMdG-hBC2vApc;y96* zmcYQFpvLCIAmDK02m=$xYzYU3L}6wQg@_sdlHD~JI1CtW_~{utEVY`?z`(%Z>FVdQ I&MBb@06Fw0-2eap literal 0 HcmV?d00001 diff --git a/style-v2/css_0/warning.png b/style-v2/css_0/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb17c93aa4da7c1878b6f7d7c2945f4c130294d GIT binary patch literal 6955 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 q-g!lNV%BNRxhYYh*Oq>|wEtwuC22{|44&YX zD>|i^j~D!1W&S7UyPUC#+*aSlXK~lBTud>TlGXe&TV1iJY?))ZXj!Xk|DOdbgPY&6 zE@s-j>Q{f}QL~c8hs`d$`kuA^T)?8~(fqOji+Lr&&RaQtR@s*C_z= z*9gsw_uCh&pLrxtux_^cd=vI7Xf33RFKB_aJAF|D!9q;vr77=QX-`kyexM9bp{Q{2L zA0-!wY$-P1(7$CHV_Ao7%Q1$hO_TRsv>s7sh)L4 zP5y@vL$S$j(zg0mRcoS`>pPlnmH%cL;>>d0T7H}3oLf#yCdc#LUazs0X_cw8%hb0i zKcsG~&DmvZq9kkk<=Zx2?I`!IMSShP8|E@4=Omkbkz!Ome??Drv;Ex8D#NeyFL29h z?lia^zGZ7vt5p)qY(wUaxjjxRTt7M|?ljL*n3pE}v^2}@@zDnHH9_3VCO!%K_JC{6 zCz~YBjD;CD%6K*@Vsxn&DOV%_h)eJp)#^~ae7MoK3)zIq|C_}HX3?pr^nz3@@y z&))Xw%lzt}}N#8pYfb zZ5TRi^sgR0eVpwT*X0ZEl&jxao4%D;$?m}DXRu*=@QZgbCttM2dB(QRRkI3Nuqd)t1lHqH?J2lad_acWRum8{|pjK1ryG+h|OnUU|{fc^>bP0 Hl+XkKF~^#8 literal 0 HcmV?d00001 diff --git a/support/_template_.html b/support/_template_.html new file mode 100644 index 0000000..3e170a2 --- /dev/null +++ b/support/_template_.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/users/_template_.html b/users/_template_.html new file mode 100644 index 0000000..3e170a2 --- /dev/null +++ b/users/_template_.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/users/bibliography.html b/users/bibliography.html new file mode 100644 index 0000000..3287d49 --- /dev/null +++ b/users/bibliography.html @@ -0,0 +1,465 @@ +--- +title: Boost Bibliography +copyright: Rene Rivera 2005. Beman Dawes 2003. +revised: +--- + + +Boost Bibliography + + + +Boost Bibliography +================== + +* [Print publications about + Boost or Boost Libraries](#Print_publications) +* [Online publications about + Boost or Boost Libraries](#Online_publications) +* [Print mentions of Boost or + Boost Libraries](#Print_mentions) +* [Online mentions of Boost or + Boost Libraries](#Online_mentions) +* [How to update this page](#update) +* [Acknowledgements](#Acknowledgements) + + +Print publications about Boost or + Boost Libraries +-------------------------------------------------- + + +### 2000 +[MaddockCleary00] +John Maddock and Steve Cleary, C++ Type + Traits. Dr. Dobb's Journal, Vol. 25, Issue 10, + October, 2000, page 38. [www.boost.org/libs/type\_traits/c++\_type\_traits.htm](https://www.boost.org/libs/type_traits/cxx_type_traits.htm) + +### 2001 +[Maddock01] +John Maddock, Regular Expressions in C++. + Dr. Dobb's Journal, Vol. 26, Issue 10, October, 2001, page + 21. +[SiekLumsdaine01] +Jeremy Siek and Andrew Lumsdaine, C++ Concept + Checking. Dr. Dobb's Journal, Vol. 26, Issue 6, June, + 2001, page 64. + +### 2002 +[Karlsson02] +Björn Karlsson, Smart Pointers in + Boost. C/C++ Users Journal, April, 2002. [www.cuj.com/documents/s=8014/cuj0204karlsson/](http://www.cuj.com/documents/s=8014/cuj0204karlsson/) +[Karlsson02a] +Björn Karlsson, C/C++ Tip #9: Lexical + Conversions. C/C++ Users Journal, November, 2002. + [www.cuj.com/documents/s=8470/cuj0211karlsson/](http://www.cuj.com/documents/s=8470/cuj0211karlsson/) +[Kempf02] +Bill Kempf, The Boost.Threads Library. C/C++ + Users Journal, May, 2002. [www.cuj.com/documents/s=8013/cuj0205kempf/](http://www.cuj.com/documents/s=8013/cuj0205kempf/) +[SiekLeeLumsdaine02] +Jeremy Siek, Lie-Quan Lee and Andrew Lumsdaine, The + Boost Graph Library. Addison-Wesley, 2002. ISBN: + 0-201-72914-8. [www.informit.com/store/product.aspx?isbn=0201729148](http://www.informit.com/store/product.aspx?isbn=0201729148). + + + A sample chapter is available at: [tinyurl.com/24666](http://tinyurl.com/24666) + +### 2003 +[AbrahamsGrosse-Kunstleve03] +David Abrahams and Ralf W. Grosse-Kunstleve, + Building Hybrid Systems with Boost.Python. C/C++ + Users Journal, July, 2003. [www.cuj.com/documents/s=8470/cuj0307abrahams/](http://www.cuj.com/documents/s=8470/cuj0307abrahams/) +[GuzmanNuffer03] +Joel de Guzman and Dan Nuffer, The Spirit Library: + Inline Parsing in C++. C/C++ Users Journal, September, + 2003, Vol. 21, Issue 9, page 22. +[Karlsson03] +Björn Karlsson, Lambda Expressions & + C++. C/C++ Users Journal, December, 2003, Vol. 21, + Issue 12, page 20. +[Sutter03] +Herb Sutter, Generalized Function Pointers. + C/C++ Users Journal, August, 2003. [www.cuj.com/documents/s=8464/cujcexp0308sutter/](http://www.cuj.com/documents/s=8464/cujcexp0308sutter/) + +### 2004 +[AbrahamsGurtovoy04] +David Abrahams and Aleksey Gurtovoy, C++ Template + Metaprogramming: Concepts, Tools, and Techniques from Boost + and Beyond. Addison-Wesley, November, 2004. ISBN: + 0-321-22725-5. [www.informit.com/store/product.aspx?isbn=0321227255](http://www.informit.com/store/product.aspx?isbn=0321227255) + + + Additional information and two sample chapters are available + at: [boost-consulting.com/tmpbook/](http://boost-consulting.com/tmpbook/) +[Inaba04] +Kazuhiro Inaba, Boost C++ Library + Programming. Shuwa System, May, 2004. ISBN: + 4-7980-0786-2. [www.shuwasystem.co.jp/books/7980/0786-2/0786-2.html](http://www.shuwasystem.co.jp/books/7980/0786-2/0786-2.html) + + + Additional information and a sample chapter are available at: + [www.kmonos.net/pub/BoostBook/](http://www.kmonos.net/pub/BoostBook/) +[López04] +Joaquín M López Muñoz, The + Boost Multi-Index Containers Library. C/C++ Users + Journal, September, 2004, Vol. 22, Issue 9, page 6. + +### 2005 +[Karlsson05] +Björn Karlsson, Beyond the C++ Standard + Library: An Introduction to Boost. Addison-Wesley, + August 31, 2005. ISBN: 0-3211-3354-4. [www.informit.com/store/product.aspx?isbn=0321133544](http://www.informit.com/store/product.aspx?isbn=0321133544) + + + A sample chapter is available at: [www.informit.com/content/images/0321133544/samplechapter/karlsson\_ch09.pdf](http://www.informit.com/content/images/0321133544/samplechapter/karlsson_ch09.pdf) + +### 2009 +[Schaeling09] +Boris Schaeling, Die Boost C++ + Bibliotheken. [www.highscore.de/cpp/boost/](http://www.highscore.de/cpp/boost/) + +### 2010 +[Demming11] +Robert Demming, Daniel J Duffy Introduction to the Boost C++ Libraries; Volume I - Foundations. + [www.datasim-press.com/BoostVolumeI.html/](http://www.datasim-press.com/BoostVolumeI.html) + + +[Demming12] +Robert Demming, Daniel J Duffy Introduction to the Boost C++ Libraries; Volume II - Advanced Libraries. + [www.datasim-press.com/BoostVolumeII.html/](http://www.datasim-press.com/BoostVolumeII.html) + +### 2011 +[Schaeling09] +Boris Schaeling, The Boost C++ Libraries. + [en.highscore.de/cpp/boost/](http://en.highscore.de/cpp/boost/) + +### 2013 +[Polukhin13] +Antony Polukhin, Boost C++ Application Development Cookbook. + + +[Torjo13] +John Torjo, Boost.Asio C++ Network Programming. + [www.packtpub.com/boost-asio-cplusplus-network-programming/book](http://www.packtpub.com/boost-asio-cplusplus-network-programming/book) + +### 2014 +[Schaeling14] +Boris Schaeling, The Boost C++ Libraries, Second Edition. + +### 2017 +[Polukhin17] +Antony Polukhin, Boost C++ Application Development Cookbook, Second Edition. + +### 2020 +[Polukhin20] +Antony Polukhin (Антон Полухин), Разработка приложений на C++ с использованием Boost, Dmk Press, + ISBN: 978-5-97060-868-5. + + +Online publications about Boost or + Boost Libraries +--------------------------------------------------- + + +### 2002 +[Brownell02] +David Brownell, C++ Techniques for Tomorrow That + Can be Implemented Today (a.k.a. Boosting your Code). + NWCPP, November 13, 2002. [www.nwcpp.org/Meetings/2002/11.html](http://www.nwcpp.org/Meetings/2002/11.html) +[Long02] +Matt Long, Adding Regular Expressions to Your App + with Regex++. The Code Project, June 18, 2002. + [www.codeproject.com/KB/string/regex\_\_.aspx](http://www.codeproject.com/KB/string/regex__.aspx) +[Siek02] +Jeremy G. Siek, The Boost Graph Library. + InformIT, March 1, 2002. [tinyurl.com/2hc27](http://tinyurl.com/2hc27) +[Siek02a] +Jeremy G. Siek, A Boost Graph Library + Tutorial. InformIT, March 1, 2002. [tinyurl.com/2sa4s](http://tinyurl.com/2sa4s) + +### 2003 +[Abrahams03] +David Abrahams, The Boost Metaprogramming + Library. ACCU, 2003. [www.boost-consulting.com/writing/ACCU\_MPL\_slides.ppt](http://www.boost-consulting.com/writing/ACCU_MPL_slides.ppt) +[Dawes03] +Beman Dawes, Multiplatform Software + Development. 2003. [www.esva.net/~beman/multiplat\_dev.ppt](http://www.esva.net/~beman/multiplat_dev.ppt) +[Halleux03] +Jonathan de Halleux, Opening a door towards Spirit: + a parser framework. The Code Project, March 24, 2003. + [www.codeproject.com/KB/recipes/spiritintro.aspx](http://www.codeproject.com/KB/recipes/spiritintro.aspx) +[Kaiser03] +Hartmut Kaiser, Wave: a Standard conformant C++ + preprocessor library. The Code Project, March 25, + 2003. [www.codeproject.com/KB/recipes/wave\_preprocessor.aspx](http://www.codeproject.com/KB/recipes/wave_preprocessor.aspx) +[Trentini03] +Matthew S. Trentini, Introduction to + Boost. +[Walker03] +Andrew Walker, An Introduction to Boost. The + Code Project, July 7, 2003. [www.codeproject.com/KB/stl/boostintro.aspx](http://www.codeproject.com/KB/stl/boostintro.aspx) + + + A short and straightforward introduction to Boost. + +### 2004 +[Dawes04] +Beman Dawes, Boost for Visual C++ + Developers. MSDN, May 17, 2004. [tinyurl.com/2lzyh](http://tinyurl.com/2lzyh) +[D'Agostino04] +Jim D'Agostino, Designing Robust Objects with + Boost. The Code Project, August 17, 2004. [www.codeproject.com/KB/architecture/Designing\_Robust\_Objects.aspx](http://www.codeproject.com/KB/architecture/Designing_Robust_Objects.aspx) +[Handley04] +Dave Handley, An Introduction to the Boost Spirit + Parser framework. The Code Project, October 9, 2004. + [www.codeproject.com/KB/stl/introduction\_spirit.aspx](http://www.codeproject.com/KB/stl/introduction_spirit.aspx) +[Handley04a] +Dave Handley, Implementing Semantic Actions in the + Boost Spirit Parser Framework. The Code Project, + October 10, 2004. [www.codeproject.com/KB/stl/spirit\_semantic\_actions.aspx](http://www.codeproject.com/KB/stl/spirit_semantic_actions.aspx) +[Hauptmann04] +Peter Hauptmann, Smart Pointers to boost your + code. The Code Project, September 27, 2004. [www.codeproject.com/KB/stl/boostsmartptr.aspx](http://www.codeproject.com/KB/stl/boostsmartptr.aspx) +[Hauptmann04a] +Peter Hauptmann, boost 2: shared\_ptr wraps resource + handles. The Code Project, October 4, 2004. [www.codeproject.com/KB/stl/boostsp\_handleref.aspx](http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) +[Wikipedia04] +Wikipedia, Boost (Programming). Wikipedia, + The Free Encyclopedia, 2004. [en.wikipedia.org/wiki/Boost\_(programming)](http://en.wikipedia.org/wiki/Boost_(programming)) +[Witt04] +Thomas Witt, The Boost Iterator Library. + ACCU Spring Conference, 2004. [www.accu.org/conference/presentations/Witt\_-\_Boost\_Iterator\_Library.pdf](http://www.accu.org/conference/presentations/Witt_-_Boost_Iterator_Library.pdf) + +### 2005 +[Karlsson05a] +Bjorn Karlsson, How the Boost Bind Library Can + Improve Your C++ Programs. InformIT, August 26, 2005. + [www.informit.com/articles/article.aspx?p=412354](http://www.informit.com/articles/article.aspx?p=412354) +[Cogswell05] +Jeff Cogswell, Adding an Easy File Save and File + Load Mechanism to Your C++ Program. InformIT, July 1, + 2005. [www.informit.com/articles/article.aspx?p=398702](http://www.informit.com/articles/article.aspx?p=398702) + + + Explains Boost.Serialization. +[Gurtovoy05] +Aleksey Gurtovoy and David Abrahams An In-Depth + Look at Metafunctions in C++. InformIT, April 1, 2005. + [www.informit.com/articles/article.aspx?p=375705](http://www.informit.com/articles/article.aspx?p=375705) + +### 2008 +[Schaeling08] +Boris Schaeling, The Boost C++ Libraries. + +### 2014 +[Douglas14] +Niall Douglas, Large Code Base Change Ripple Management in C++: + My thoughts on how a new Boost C++ Library could help. + +Print + mentions of Boost or Boost Libraries +------------------------------------------- + + +### 2001 +[HyslopSutter01] +Jim Hyslop and Herb Sutter, Conversations: I'd Hold + Anything for You. C/C++ Users Journal, December, 2001. + [www.cuj.com/documents/s=7988/cujcexp1912hyslop/](http://www.cuj.com/documents/s=7988/cujcexp1912hyslop/) + +`boost::any` +[Meyers01] +Scott Meyers, Item 50: Familiarize yourself with + STL-related web sites. Effective STL, Addison-Wesley, + 2001, page 221. ISBN: 0-201-74962-9 +[Sutter01] +Herb Sutter, The String Formatters of Manor + Farm. C/C++ Users Journal, Vol. 19, November, 2001. + [www.gotw.ca/publications/mill19.htm](http://www.gotw.ca/publications/mill19.htm) + +### 2002 +[Ablavsky02] +Vitaly Ablavsky, Applying BGL to Computational + Geometry. C/C++ Users Journal, August, 2002. [www.cuj.com/documents/s=8470/cuj0208ablavsky/](http://www.cuj.com/documents/s=8470/cuj0208ablavsky/) +[Alexandrescu02] +Andrei Alexandrescu, Generic: + Efficient Generic Sorting and Searching in C++ (I): In Search + of a Better Search. C/C++ Users Journal, October, + 2002. [www.cuj.com/documents/s=7978/cujcexp2010alexandr/](http://www.cuj.com/documents/s=7978/cujcexp2010alexandr/) + +`boost::type_traits` +[HyslopSutter02] +Jim Hyslop and Herb Sutter, Conversations: Getting + to the Point. C/C++ Users Journal, July, 2002. + [www.cuj.com/documents/s=7981/cujcexp2007hyslop/](http://www.cuj.com/documents/s=7981/cujcexp2007hyslop/) + + + smart pointer discussion. `boost::scoped_ptr, + shared_ptr, scoped_array, shared_array.` +[Sutter02] +Herb Sutter, The New C++: The Group of Seven - + Extensions under Consideration for the C++ Standard + Library. C/C++ Users Journal, April, 2002. [www.cuj.com/documents/s=7984/cujcexp2004sutter/](http://www.cuj.com/documents/s=7984/cujcexp2004sutter/) +[Sutter02a] +Herb Sutter, The New C++: Smart(er) + Pointers. C/C++ Users Journal, August, 2002. [www.cuj.com/documents/s=7980/cujcexp2008sutter/](http://www.cuj.com/documents/s=7980/cujcexp2008sutter/) + +### 2003 +[Besser03] +Mitch Besser, Generic Printable ENUM++. + C/C++ Users Journal, June, 2003. [www.cuj.com/documents/s=8470/cujboost0306besser/](http://www.cuj.com/documents/s=8470/cujboost0306besser/) + + + Mentions `BOOST_PP` +[Nasonov03] +Alexander Nasonov, I/O System: dynamic\_any + Campaign. C/C++ Users Journal, September, 2003. + [www.cuj.com/documents/s=8470/cujweb0309nasonov/](http://www.cuj.com/documents/s=8470/cujweb0309nasonov/) + + + Improved `boost::any` +[Sutter03a] +Herb Sutter, Generalizing Observer. C/C++ + Users Journal, September, 2003. [www.cuj.com/documents/s=8840/cujexp0309sutter/](http://www.cuj.com/documents/s=8840/cujexp0309sutter/) +[Tan03] +Kwee H. Tan, Exploring EDA Algorithms with the + Boost Graph Library. C/C++ Users Journal, July, 2003. + [www.cuj.com/documents/s=8470/cuj0307tan/](http://www.cuj.com/documents/s=8470/cuj0307tan/) +[VandervoordeJosuttis03] +David Vandevoorde and Nicolai M. Josuttis, Using + Templates in Practice. C/C++ Users Journal, February, + 2003. [www.cuj.com/documents/s=8208/cujweb0302vandevoorde/web0302b.htm](http://www.cuj.com/documents/s=8208/cujweb0302vandevoorde/web0302b.htm) + + + Concept Check Library + +### 2005 +[Meyers05] +Scott Meyers, Item 55: Familiarize yourself with + Boost. Effective C++, 3rd Edition, Addison-Wesley, May + 12, 2005. ISBN: 0-321-33487-6 + +### 2017 +[Polukhin17Online] +Antony Polukhin, Online Compilation and Examples: Boost C++ Application Development Cookbook. + + + Compile, modify and run online examples from the 'Boost Application Development Cookbook' without any need to install C++ compiler or Boost C++ Libraries. + +Online + mentions of Boost or Boost Libraries +-------------------------------------------- + + +### 2001 +[Siek01] +Jeremy G. Siek, An Implementation of Graph + Isomorphism Testing, December 9, 2001. [www.boost.org/libs/graph/doc/isomorphism-impl.pdf](https://www.boost.org/libs/graph/doc/isomorphism-impl.pdf) + +### 2002 +[Burnap02] +Steven R. Burnap, Boost::any, Kuro5hin, May + 1, 2002. [www.kuro5hin.org/story/2002/5/1/142321/9513](http://www.kuro5hin.org/story/2002/5/1/142321/9513) +[Carbon02] +David S?, Boost : The handy library of handy + libraries. Kuro5hin, July 18, 2002. [www.kuro5hin.org/story/2002/7/18/3313/01429](http://www.kuro5hin.org/story/2002/7/18/3313/01429) +[Curran02] +James Curran, Access Raw Data with Performance + Counters in Visual C++. DevX.com, October, 2002. + [www.devx.com/cplus/article/7951](http://www.devx.com/cplus/article/7951) + + Devotes several paragraphs to + `boost::shared_ptr<>`. +[Siek02b] +Jeremy G. Siek, Internet Packet Routing with the + Boost Graph Library. InformIT, March 1, 2002. [tinyurl.com/26dwj](http://tinyurl.com/26dwj) + +### 2003 +[Casad03] +Joe Casad, Introducing the Boost Corner. + C/C++ Users Journal, August, 2003. [www.cuj.com/documents/s=8470/cuj0308boostcorner/](http://www.cuj.com/documents/s=8470/cuj0308boostcorner/) +[Lischner03] +Ray Lischner, C++: Beyond the Standard + Library. O'Reilly Network, May 6, 2003. [www.oreillynet.com/lpt/a/3683](http://www.oreillynet.com/lpt/a/3683) + + Mentions `tuples, shared_ptr, lambda, + spirit`. + +### 2004 +[Inaba04a] +Kazuhiro Inaba, Let's Boost. 2004. [www.kmonos.net/alang/boost/](http://www.kmonos.net/alang/boost/) +[Stein04] +Sebastian Stein, How to use Boost Test for + automated testing. 2004. [www.hpfsc.de/boosttest/](http://www.hpfsc.de/boosttest/) + +### 2005 +[Lindrud05] +Jarl Lindrud, RMI for C++. The Code Project, + April 11, 2005. [www.codeproject.com/KB/threads/RMI\_For\_Cpp.aspx](http://www.codeproject.com/KB/threads/RMI_For_Cpp.aspx) + + + Uses Boost.Serialization. + +### 2013 +[Kormanyos13] +Christopher Kormanyos, + Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming. + + + + Uses C++11 including lambdas, templates, metatemplate programming for efficient + programming for microcontrollers including use of Boost.Math, Boost.Regex, Boost.Multiprecision + and other Boost libraries. + + +[Nakariakov13] +Sergei Nakariakov, + The Boost C++ Libraries: Generic Programming, ISBN 978-1484813911. + + + This book covers 24 Boost C++ Libraries with primary focus on generic programming + using Boost.TypeTraits, Boost.ConceptCheck, SFINAE, Generic Image Library, + Boost.Operators, Boost.TypeTraitsIntrospection and others. + + + Published by CreateSpace Independent Publishing Platform, and available from several distributors. + + +How to update this + page +------------------------ + + +Please help us keep this page updated - users can post new + citations to the mailing list, while Boost developers should + update the page directly in the repository. + + +* If a publication is available both in print and online, + cite it in the appropriate *print* section, with a + hyperlink to the online version. +* Bookmark the contents of [...] in the first column to + make it easy to link to the entry. +* Identify the first entry an author has in a given year + with just the two-digit year. Subsequent entries for the same + author and year should have **a-z** appended. +* Inside each section, entries are grouped by year and, + within a year, alphabetically sorted by author name. +* In the text, spell out absolute URL's so that printed + versions of this page include the full URL. + + +Acknowledgements +---------------- + + +Fredrik Blomqvist provided many of the initial citations. + + + + + + + + + diff --git a/users/download/boost_jam_3_1_18.html b/users/download/boost_jam_3_1_18.html new file mode 100644 index 0000000..209ad97 --- /dev/null +++ b/users/download/boost_jam_3_1_18.html @@ -0,0 +1,64 @@ +--- +title: Boost Jam 3.1.18 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Boost Jam 3.1.18 + + + + + + +Boost Jam 3.1.18 +================ + +Boost Jam 3.1.18 +---------------- + + +March 22nd, 2010 12:00 GMT + + +[Download this release.](http://sourceforge.net/projects/boost/files/boost-jam/3.1.18/) + + + After years of bjam developments.. This is going to be the last unbundled release + of the 3.1.x series. From this point forward bjam will only be bundled as part + of the larger Boost Build system. And hence will likely change name at some point. + As a side effect of this move people will get more frequent release of bjam (or + whatever it ends up being called). + +* New built-ins, MD5, SPLIT\_BY\_CHARACTERS, PRECIOUS, PAD, FILE\_OPEN, and UPDATE\_NOW. + -- *Vladimir P.* +* Ensure all file descriptors are closed when + executing actions complete on \*nix. -- *Noel B.* +* Fix warnings, + patch from Mateusz Loskot. -- *Vladimir P.* +* Add KEEP\_GOING + var to programatically override the '-q' option. -- *Vladimir P.* +* Add more parameters, up to 19 from 9, to rule invocations. Patch from Jonathan + Biggar. -- *Vladimir P.* +* Print failed command output even + if the normally quite '-d0' option. -- *Vladimir P.* +* Build + of bjam with vc10, aka Visual Studio 2010. -- *Vladimir P.* +* More macros for detection of OSPLAT, patch from John W. Bito. -- *Vladimir + P.* +* Add PARALLELISM var to programatically override the '-j' option. + -- *Vladimir P.* +* Tweak doc building to allow for PDF generation + of docs. -- *John M.* + + + + + + + + + + + diff --git a/users/download/index.html b/users/download/index.html new file mode 100644 index 0000000..337dcc9 --- /dev/null +++ b/users/download/index.html @@ -0,0 +1,60 @@ +--- +title: Boost Downloads +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Boost Downloads + + + +Boost Downloads +=============== + + +Other Downloads +--------------- + + +As well as the official releases, members of the community + provide other downloads for your convenience. Since these are + produced separately, there might be a delay before they're + available after a release and they're not be available for all + releases. + + +* [Prebuilt windows binaries](https://sourceforge.net/projects/boost/files/boost-binaries/). +* [PDF + documentation](https://sourceforge.net/projects/boost/files/boost-docs/) (only for BoostBook based + documentation). + + +Old Boost Releases +------------------ + + +Old versions of boost can be found on the [version history](/users/history/) page or from [the sourceforge + download page](http://sourceforge.net/projects/boost/files/). + + +Git + Repositories +----------------- + + +Boost uses [Git](http://git-scm.com/) to manage all of the data + associated with Boost's development, including the source code + to Boost, documentation for Boost libraries, and the Boost web + site. + + +Details of the git repositories are on the [Boost + wiki](https://svn.boost.org/trac/boost/wiki/ModularBoost). + + + + + + + diff --git a/users/faq.html b/users/faq.html new file mode 100644 index 0000000..b2035fe --- /dev/null +++ b/users/faq.html @@ -0,0 +1,279 @@ +--- +title: Boost FAQ +copyright: Beman Dawes 2001. +revised: +--- + + +Boost FAQ + + + +Boost FAQ +========= + +How do I download the + libraries? See the [downloads](download). + + +What do the Boost + version numbers mean? The scheme is x.y.z, where x is + incremented only for massive changes, such as a reorganization + of many libraries, y is incremented whenever a new library is + added, and z is incremented for maintenance releases. y and z + are reset to 0 if the value to the left changes. + + +Is there any + assurance libraries actually work as claimed? No. The + review process will hopefully eliminate the most seriously + flawed libraries, but a well constructed library with hidden + defects is likely to slip through. Encouraging ordinary users + to report their experience with a library is intended to + address such concerns. Consult the [test results](../development/testing.html) for an + indication of how well a library works on specific + platforms. + + +How can the Boost + libraries be used successfully for important projects? + Many of the Boost libraries are actively maintained and + improved, so backward compatibility with prior version isn't + always possible. Deal with this by freezing the version of the + Boost libraries used by your project. Only upgrade at points in + your project's life cycle where a bit of change will not cause + problems. Individual bug fixes can always be obtained from the + boost repository. + + +How can I contribute + to development? To participate in development, you need + to subscribe to the [Boost + developers' list](https://lists.boost.org/mailman/listinfo.cgi/boost). Once you've done that, some paths to + contribution are: + + +1. Submit patches for new features or bug fixes. Pick any + ticket from [our bug + tracking system](https://github.com/boostorg/) on GitHub and get started. If existing + library maintainers don't already know your work, this is + a good way to become known as someone they can trust to + do good work. +2. Become part of a particular library's community, and + become known to the library maintainer(s) by participating in + design discussions (some libraries, e.g. Spirit, have their + [own mailing + lists](/community/groups.html#projects) where you'd do that). +3. Become a library maintainer through the + [Boost + Library Official Maintainer Program](/community/official_library_maintainer_program.html) or as member of the + [Boost Community Maintenance Team](https://svn.boost.org/trac10/wiki/CommunityMaintenance) (CMT). To start, triage + existing issues and pull requests to make a list of all the ones + that seem trivial enough to begin with. Work on the issues in your + fork of the library and submit pull requests when ready. Make sure + the CI coverage is in place and the CI builds and tests pass. Then, + [contact the CMT](https://lists.boost.org/mailman/listinfo.cgi/boost-maint) requesting to review and merge your pull requests. + At some point, you will be granted a write access to repository + of the library. +4. Come up with a library idea of your own and begin the + [library submission + process](/development/submissions.html). + + +How is a library + accepted for posting on the site? See [Library Submission + Process](/development/submissions.html) + + +How does someone + submit a Formal Review comment? Send email to [boost@lists.boost.org](mailto:boost@lists.boost.org). See + the [Formal Review](/community/reviews.html) page + for more information. + + +How does someone + submit a library? See [Library Guidelines](/development/requirements.html) + + +Are commercial + libraries requiring a fee acceptable? No. However, a + library that a commercial enterprise makes available without + fee is acceptable. If the description of the library makes a + low-key plug for the supplier, that is acceptable as long as + the library delivers real value and isn't just a Trojan horse + for the plug. + + +Are shareware + libraries acceptable? No. Only free libraries will be + accepted. + + +Are open source + license libraries acceptable? Some are, many are not. + Open source licenses often require redistribution or + availability of source code, inclusion of license document with + machine-executable redistribution, give the initial developer + rights to licensee modifications, or need a lawyer to + understand. Boost aims to + avoid subjecting users to hard-to-comply-with license terms. + See [License + requirements](/development/requirements.html#License). + + +This is subject to review for a particularly + important piece of software, or as the industry changes. + + +Must full source code + be provided? Yes, these are source code libraries. + + +What about + documentation? A very simple library might be accepted + with only a well commented header file. For more substantial + libraries, some form of documentation is certainly going to be + expected. HTML is the preferred form. + + +Are platform specific + libraries acceptable? There is a preference for portable + libraries. Libraries will be accepted that have portable + interfaces but require platform specific implementations, as + long as the author supplies implementations for a couple of + disparate major operating systems. + + +Must a library do + useful work? No. A library meant as a teaching example + or demonstration might not actually do any work. + + +Can an existing + library be accepted by Boost? Yes, although it would + have to be "Boostified" to meet the requirements.  The + Boost Graph and Regex libraries are examples of libraries which + began life elsewhere. + + +Who owns the + libraries? Presumably many authors will copyright their + libraries. Others authors may wish to place their libraries in + the public domain. The Boost.org policy is to only accept + libraries with a clear copyright notice and meeting the + [License + requirements](/development/requirements.html#License). It is up to potential users to decide if the + terms acceptable, and not to use libraries with unacceptable + copyrights or licenses. + + +Is there a formal + relationship between Boost.org and the C++ Standards + Committee? No, although there is a strong informal + relationship in that many members of the committee participate + in Boost, and the people who started Boost were all committee + members. + + +Will the Boost.org + libraries become part of the next C++ Standard? Some + might, someday, but that is up to the standards committee. + Committee members who also participate in Boost will definitely + be proposing at least some Boost libraries for + standardization. + + +Libraries which are "existing practice" are most + likely to be accepted by the C++ committee for future + standardization. Having a library accepted by Boost is one way + to establish existing practice. + + +Where does the name + "Boost" come from? Boost began with Robert Klarer and I + fantasizing about a new library effort over dinner at a C++ + committee meeting in Sofia Antipolis, France, in 1998. Robert + mentioned that Herb Sutter was working on a spoof proposal for + a new language named Booze, which was supposed to be better + than Java. Somehow that kicked off the idea of "Boost" as a + name. We'd probably had a couple of glasses of good French wine + at that point. It was just a working name, but no one ever came + up with a replacement. (Beman Dawes) + + +Is the web site a + commercial business? No. The Boost Foundation is + incorporated as a nonprofit corporation, with a pending + application for 503(c)(3) tax exempt status. + + +Is there any charge + for submitting libraries or reviews to Boost.org? No. + Unlike the standards committees, you don't have to pay to + volunteer! + + +Will the site include + material beyond libraries? The main focus is on + libraries, but if people contribute occasional articles or + other material to make the site more interesting, that could be + a nice fit. + + +Why isn't there a + separate boost mailing list for my favorite library? One + of the reasons for boost's success has been the + cross-pollination of ideas between diverse library projects and + the occasional look into other threads by otherwise + uninterested parties. The more people participate, the less + they tend to be annoyed by "noise". + + +How can I cope with + the large volume of boost mailing list messages? One + approach is to use the "digest" option; that cuts the email + blizzard down to several (long) messages per day, so you can + glance over the subjects summary at the top and quickly read + what you think is important. The "no mail" option turns off + list email entirely. + + +Another approach is to follow the list traffic + via an NTTP newsgroup reader. See [Mailing List](/community/groups.html#newsgroup) newsgroup + information. + + +Why do Boost headers + have a .hpp suffix rather than .h or none at all? File + extensions communicate the "type" of the file, both to humans + and to computer programs. The '.h' extension is used for C + header files, and therefore communicates the wrong thing about + C++ header files. Using no extension communicates nothing and + forces inspection of file contents to determine type. Using + '.hpp' unambiguously identifies it as C++ header file, and + works well in actual practice. (Rainer Deyke) + + +What should I do if I + spot a bug in the Boost code or documentation? See the + suggestions on the [Bugs + page](/development/bugs.html). + + +How can I request a + new feature in a Boost Library? See the [Requesting New Features](/community/requests.html) + page. + + +Who's idea was + Boost? See the [original + proposal](proposal.pdf) (PDF). + + + + + + + + + diff --git a/users/history/in_progress.html b/users/history/in_progress.html new file mode 100644 index 0000000..ac41a10 --- /dev/null +++ b/users/history/in_progress.html @@ -0,0 +1,62 @@ +--- +title: In Progress Releases +copyright: Rene Rivera 2006-2007. +revised: +--- + + +In Progress Releases + + + + + + +In Progress Releases +==================== +Note: The release notes + on this page are for releases still under development. + Please don't use this page as a source of information, + it's here for development purposes only. Everything is + subject to change. +Version 1.81.0 +-------------- + + +In Progress + + +### New Libraries + + +* *TODO* + +### Updated Libraries + + +* *TODO* + +### Compilers Tested + Boost's primary test compilers are: + + + +* *TODO* + Boost's additional test compilers include: + + + +* *TODO* + +### Acknowledgements +*TODO* + + + + + + + + + + diff --git a/users/history/index.html b/users/history/index.html new file mode 100644 index 0000000..96f25fd --- /dev/null +++ b/users/history/index.html @@ -0,0 +1,25 @@ +--- +title: Boost Version History +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Boost Version History + + + + + +Boost Version History +===================== + + + + + + + + + + diff --git a/users/history/old_versions.html b/users/history/old_versions.html new file mode 100644 index 0000000..e3faba1 --- /dev/null +++ b/users/history/old_versions.html @@ -0,0 +1,116 @@ +--- +title: Old Versions +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Old Versions + +/\*\*/ + + + + + + + +Old Versions +============ + +Old Versions +------------ + + +December 14th, 1999 12:00 GMT + + +### 14 Dec 1999 +[Operators.hpp](/boost/operators.hpp) [documentation](/libs/utility/operators.htm) + improved. + + +### 13 Dec 1999 + Added iterator operators and helpers to [header + operators.hpp](/libs/utility/operators.htm), together with an iterator test program. This header + is maturing into something really useful for building arithmetic or iterator + user-defined types, so look it over even if you browsed one of the earlier + versions. + + +### 11 Dec 1999 + Added next() and prior() to [header utility.hpp](/libs/utility/utility.htm). + + +### 8 Dec 1999 + Minor improvements to the [smart pointer](/libs/smart_ptr/index.html) + library: `operator ==`, + `operator !=`, + and specializations for `std::swap` and + `std::less` now provided. + + +### 18 Nov 1999 + Minor improvements made to the [Operator + templates](/libs/utility/operators.htm). + + +### 15 Nov 1999 +[Operator templates](/libs/utility/operators.htm) have been + added to the [utility](/libs/utility/index.html) library. + + +### 11 Oct 1999 + Minor [smart pointer](/libs/smart_ptr/index.html) library + and [config.hpp](/boost/config.hpp) changes to improve portability. + + +### 26 Sep 1999 + Minor updates to several libraries: \* `polymorphic\_downcast<>` in the [utility](/libs/utility/index.html) + library [cast.hpp](/boost/cast.hpp) header now works for + multiple inheritance cases. \* `shared\_ptr<>` and `shared\_array<>` `swap()` functions added in the [smart + pointer](/libs/smart_ptr/index.html) library. \* [timer.hpp](/boost/timer.hpp) `elapsed\_max()` + and `elapsed\_min()` + functions added to the [timer](/libs/timer/index.html) library. + \* [integer](/libs/integer/index.html) library bin\_ubin.hpp + changes to eliminate compiler warning messages. \* [config.hpp](/boost/config.hpp) + minor changes to aid library developers. No impact on library users. + + +### 3 Sep 1999 + The cast functions in the [utility](/libs/utility/index.html) + library were considerably simplified. + + +### 1 Sep 1999 + The cast functions initially in [utility.hpp](/boost/utility.hpp) + have been moved to [cast.hpp](/boost/cast.hpp), still in + the [utility](/libs/utility/index.html) library. + + +### 1 Sep 1999 + The category "Experimental" has been added to the [library](/libs/libraries.htm) + page. The [integer](/libs/integer/index.html) library is + the first entry. + + + ...And the remainder are lost to the mists of time (for now, anyway).... + + + + + + + + + + + + diff --git a/users/history/version_1_10_3.html b/users/history/version_1_10_3.html new file mode 100644 index 0000000..f885dd6 --- /dev/null +++ b/users/history/version_1_10_3.html @@ -0,0 +1,58 @@ +--- +title: Version 1.10.3 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.10.3 + +/\*\*/ + + + + + + + +Version 1.10.3 +============== + +Version 1.10.3 +-------------- + + +December 30th, 1999 12:00 GMT + + + Minor fixes to the compose library examples, [operators + documentation](/libs/utility/operators.htm), [operators.hpp](/boost/operators.hpp), + [cast documentation](/libs/conversion/cast.htm), [cast.hpp](/boost/cast.hpp), + [config.hpp](/boost/config.hpp), and [smart\_ptr.hpp](/boost/smart_ptr.hpp). + + This is the first release with a version number. The version numbering scheme + is xxx.yyy.zzz. + + + +* xxx = Major version +* yyy = New library or feature added +* zzz = Bug fixes only + + + + + + + + + + + diff --git a/users/history/version_1_10_4.html b/users/history/version_1_10_4.html new file mode 100644 index 0000000..00c529e --- /dev/null +++ b/users/history/version_1_10_4.html @@ -0,0 +1,47 @@ +--- +title: Version 1.10.4 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.10.4 + +/\*\*/ + + + + + + + +Version 1.10.4 +============== + +Version 1.10.4 +-------------- + + +December 31st, 1999 12:00 GMT + + + Minor fixes to [smart\_ptr.hpp](/boost/smart_ptr.hpp) and [cast documentation](/libs/conversion/cast.htm). + + + + + + + + + + + + diff --git a/users/history/version_1_11_0.html b/users/history/version_1_11_0.html new file mode 100644 index 0000000..d1b402a --- /dev/null +++ b/users/history/version_1_11_0.html @@ -0,0 +1,51 @@ +--- +title: Version 1.11.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.11.0 + +/\*\*/ + + + + + + + +Version 1.11.0 +============== + +Version 1.11.0 +-------------- + + +February 1st, 2000 12:00 GMT + + + Added [Rational Number Library](/libs/rational/index.html). + Minor fixes to [cast.hpp](/boost/cast.hpp), [config.hpp](/boost/config.hpp), + [smart\_ptr.hpp](/boost/smart_ptr.hpp), [utility.hpp](/boost/utility.hpp), + and to the `min\_rand` sample programs. + Minor site cleanup (thanks to Paul Baxter). + + + + + + + + + + + + diff --git a/users/history/version_1_11_1.html b/users/history/version_1_11_1.html new file mode 100644 index 0000000..d5d92ae --- /dev/null +++ b/users/history/version_1_11_1.html @@ -0,0 +1,48 @@ +--- +title: Version 1.11.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.11.1 + +/\*\*/ + + + + + + + +Version 1.11.1 +============== + +Version 1.11.1 +-------------- + + +February 2nd, 2000 12:00 GMT + + + Minor fix to [cast.hpp](/boost/cast.hpp) (thanks to Doncho + Angelov). + + + + + + + + + + + + diff --git a/users/history/version_1_11_2.html b/users/history/version_1_11_2.html new file mode 100644 index 0000000..0c013c9 --- /dev/null +++ b/users/history/version_1_11_2.html @@ -0,0 +1,49 @@ +--- +title: Version 1.11.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.11.2 + +/\*\*/ + + + + + + + +Version 1.11.2 +============== + +Version 1.11.2 +-------------- + + +February 21st, 2000 12:00 GMT + + +[Smart pointer timings](/libs/smart_ptr/smarttests.htm) added + (thanks to Gavin Collings). Minor fix to the `min\_rand` + sample program. Minor fixes to [config.hpp](/boost/config.hpp). + + + + + + + + + + + + diff --git a/users/history/version_1_12_0.html b/users/history/version_1_12_0.html new file mode 100644 index 0000000..4b6311d --- /dev/null +++ b/users/history/version_1_12_0.html @@ -0,0 +1,49 @@ +--- +title: Version 1.12.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.12.0 + +/\*\*/ + + + + + + + +Version 1.12.0 +============== + +Version 1.12.0 +-------------- + + +February 23rd, 2000 12:00 GMT + + + Adds a [integer\_traits](/libs/integer/integer_traits.html) + header from Jens Maurer to the [Integer + Library](/libs/integer/index.html). + + + + + + + + + + + + diff --git a/users/history/version_1_13_0.html b/users/history/version_1_13_0.html new file mode 100644 index 0000000..872fff1 --- /dev/null +++ b/users/history/version_1_13_0.html @@ -0,0 +1,49 @@ +--- +title: Version 1.13.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.13.0 + +/\*\*/ + + + + + + + +Version 1.13.0 +============== + +Version 1.13.0 +-------------- + + +February 29th, 2000 12:00 GMT + + + Adds [Utility Library](/libs/utility/index.html) [type\_traits](/libs/type_traits/index.html), + [call\_traits](/libs/utility/call_traits.htm), and [compressed\_pair](/libs/utility/compressed_pair.htm) + headers from John Maddock, Steve Cleary and Howard Hinnant. + + + + + + + + + + + + diff --git a/users/history/version_1_14_0.html b/users/history/version_1_14_0.html new file mode 100644 index 0000000..761dcc6 --- /dev/null +++ b/users/history/version_1_14_0.html @@ -0,0 +1,49 @@ +--- +title: Version 1.14.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.14.0 + +/\*\*/ + + + + + + + +Version 1.14.0 +============== + +Version 1.14.0 +-------------- + + +March 5th, 2000 12:00 GMT + + +[Integer Library](/libs/integer/index.html) status upgraded + after removing bin\_bun.hpp. The "Experimental" library category has + been removed; the boost files/vault now serves the purpose. Minor fix to [smart\_ptr.hpp](/boost/smart_ptr.hpp) line endings. + + + + + + + + + + + + diff --git a/users/history/version_1_14_1.html b/users/history/version_1_14_1.html new file mode 100644 index 0000000..2396493 --- /dev/null +++ b/users/history/version_1_14_1.html @@ -0,0 +1,51 @@ +--- +title: Version 1.14.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.14.1 + +/\*\*/ + + + + + + + +Version 1.14.1 +============== + +Version 1.14.1 +-------------- + + +March 17th, 2000 12:00 GMT + + + Minor fix to [rational.hpp](/boost/rational.hpp). Minor documentation + changes to the [Smart Pointer](/libs/smart_ptr/index.html) + Library and [call\_traits](/libs/utility/call_traits.htm), + [compressed\_pair](/libs/utility/compressed_pair.htm), and type\_traits. + Updated [Library Guidelines](/more/lib_guide.htm) and [People](/users/people.html) page. + + + + + + + + + + + + diff --git a/users/history/version_1_14_2.html b/users/history/version_1_14_2.html new file mode 100644 index 0000000..57522be --- /dev/null +++ b/users/history/version_1_14_2.html @@ -0,0 +1,49 @@ +--- +title: Version 1.14.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.14.2 + +/\*\*/ + + + + + + + +Version 1.14.2 +============== + +Version 1.14.2 +-------------- + + +May 9th, 2000 12:00 GMT + + + No libraries updated. [Library Requirements and + Guidelines](/more/lib_guide.htm) expanded, [Library + Submission Process](/more/submission_process.htm) added. + + + + + + + + + + + + diff --git a/users/history/version_1_14_3.html b/users/history/version_1_14_3.html new file mode 100644 index 0000000..a0662cd --- /dev/null +++ b/users/history/version_1_14_3.html @@ -0,0 +1,50 @@ +--- +title: Version 1.14.3 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.14.3 + +/\*\*/ + + + + + + + +Version 1.14.3 +============== + +Version 1.14.3 +-------------- + + +May 29th, 2000 12:00 GMT + + + Minor additions to [config.hpp](/boost/config.hpp) for Borland + compilers. Minor fix to `type\_traits` + example. Minor web site fixes. [Library + Formal Review Process](/more/formal_review_process.htm) page added. + + + + + + + + + + + + diff --git a/users/history/version_1_15_0.html b/users/history/version_1_15_0.html new file mode 100644 index 0000000..ec7b884 --- /dev/null +++ b/users/history/version_1_15_0.html @@ -0,0 +1,50 @@ +--- +title: Version 1.15.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.15.0 + +/\*\*/ + + + + + + + +Version 1.15.0 +============== + +Version 1.15.0 +-------------- + + +June 17th, 2000 12:00 GMT + + +[Random Number Library](/libs/random/index.html) from Jens + Maurer added. Updated utility library [operators](/libs/utility/operators.htm) + eliminates code bloat. Minor additions to [config.hpp](/boost/config.hpp) + and [cast.hpp](/boost/cast.hpp) for Microsoft compilers. + + + + + + + + + + + + diff --git a/users/history/version_1_15_1.html b/users/history/version_1_15_1.html new file mode 100644 index 0000000..50d5181 --- /dev/null +++ b/users/history/version_1_15_1.html @@ -0,0 +1,51 @@ +--- +title: Version 1.15.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.15.1 + +/\*\*/ + + + + + + + +Version 1.15.1 +============== + +Version 1.15.1 +-------------- + + +June 21st, 2000 12:00 GMT + + + Fixes to [cast.hpp](/boost/cast.hpp) and [operators](/libs/utility/operators.htm) + fix. Minor additions to [config.hpp](/boost/config.hpp) for + Microsoft compilers. The 1.15.0 operators changes seem to have introduced incompatibilities. + We are working on fixing them, and have started to build a regression test to + prevent similar future problems. + + + + + + + + + + + + diff --git a/users/history/version_1_16_0.html b/users/history/version_1_16_0.html new file mode 100644 index 0000000..2a8ccbe --- /dev/null +++ b/users/history/version_1_16_0.html @@ -0,0 +1,64 @@ +--- +title: Version 1.16.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.16.0 + +/\*\*/ + + + + + + + +Version 1.16.0 +============== + +Version 1.16.0 +-------------- + + +June 28th, 2000 12:00 GMT + +* Added [Functional Library](/libs/functional/index.html) + - Enhanced function object adaptors from Mark Rodgers. +* Added missing [Random Number Library](/libs/random/index.html) + files. +* Updated [operators docs](/libs/utility/operators.htm) and + [operators.hpp](/boost/operators.hpp). +* New [iterator.hpp](/boost/iterator.hpp) header. +* Minor [rational.hpp](/boost/rational.hpp), [rational\_example.cpp](/libs/rational/rational_example.cpp), + and [integer\_traits\_test.cpp](/libs/integer/integer_traits_test.cpp) + changes to support more compilers. +* Revised [cast.hpp](/boost/cast.hpp): removed implicit\_cast, + plus fixes for broken compilers. +* Minor [smart\_ptr.hpp](/boost/smart_ptr.hpp) workaround + for some GCC builds. +* Several [config.hpp](/boost/config.hpp) changes for Microsoft, + Intel, and other compilers. +* Added [Configuration Header](/libs/config/index.html) page + and test program. +* Added Experimental [Compiler Status](/status/compiler_status.html) + page showing what library works with which compilers. + + + + + + + + + + + diff --git a/users/history/version_1_16_1.html b/users/history/version_1_16_1.html new file mode 100644 index 0000000..fe5b380 --- /dev/null +++ b/users/history/version_1_16_1.html @@ -0,0 +1,56 @@ +--- +title: Version 1.16.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.16.1 + +/\*\*/ + + + + + + + +Version 1.16.1 +============== + +Version 1.16.1 +-------------- + + +July 5th, 2000 12:00 GMT + +* [Integer](/libs/integer/index.html) library: fixed + [cstdint.hpp](/boost/cstdint.hpp) bug, added [cstdint\_test.cpp](/libs/integer/cstdint_test.cpp), + updated [docs](/libs/integer/cstdint.htm). +* [Random Number Library](/libs/random/index.html): minor + fixes to [random.hpp](/boost/random.hpp) and [random\_test.cpp](/libs/random/random_test.cpp) + to support more compilers. +* Updated [cast.hpp](/boost/cast.hpp) with more Microsoft + compiler workarounds. +* Updated [call\_traits docs](/libs/utility/call_traits.htm), + added [call\_traits\_test.cpp](/libs/utility/call_traits_test.cpp). +* Cleanup and bug fixes for [operators.hpp](/boost/operators.hpp) + and [operators\_test.cpp](/libs/utility/operators_test.cpp). + + + + + + + + + + + diff --git a/users/history/version_1_17_0.html b/users/history/version_1_17_0.html new file mode 100644 index 0000000..2aa20f3 --- /dev/null +++ b/users/history/version_1_17_0.html @@ -0,0 +1,59 @@ +--- +title: Version 1.17.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.17.0 + +/\*\*/ + + + + + + + +Version 1.17.0 +============== + +Version 1.17.0 +-------------- + + +August 3rd, 2000 12:00 GMT + +* [Array Library](/libs/array/index.html) added - An + STL compliant container wrapper for arrays of constant size from Nicolai + Josuttis. +* array traits header renamed array\_traits.hpp (was array.hpp). +* [Random Number Library](/libs/random/index.html): more + minor changes to support more compilers. +* [Smart Pointer Library](/libs/smart_ptr/index.html): + performance + reducing exception-specifications removed. +* Compiler and test program fixes for call\_traits, compressed\_pair, and type\_traits. +* Updated [cast.hpp](/boost/cast.hpp) to clear compiler warning + messages. +* Linux [Compiler Status](/status/compiler_status.html) added. +* Boost source code now lives in a publicly accessible Concurrent Versions + System (CVS) repository. + + + + + + + + + + + diff --git a/users/history/version_1_18_0.html b/users/history/version_1_18_0.html new file mode 100644 index 0000000..786750b --- /dev/null +++ b/users/history/version_1_18_0.html @@ -0,0 +1,64 @@ +--- +title: Version 1.18.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.18.0 + +/\*\*/ + + + + + + + +Version 1.18.0 +============== + +Version 1.18.0 +-------------- + + +September 28th, 2000 12:00 GMT + +* Preliminary release of two important new libraries: + + + [Graph Library](/libs/graph/doc/table_of_contents.html) - + Generic graph components and algorithms from Jeremy Siek and a University + of Notre Dame team. + + [Regular Expression Library](/libs/regex/index.html) - + Text pattern matching in all its glory from John Maddock. +* Other changes: + + + [Array Library](/libs/array/index.html) improvements + reflecting formal review comments. + + [functional.hpp](/boost/functional.hpp) compiler + workarounds added. + + `tie() + function template` + added to utility.hpp for easier handling of std::pair<> return + values. + + [Integer Library](/libs/integer/index.html) improved + handling of 64-bit integers. + + Minor web site page updates. + + + + + + + + + + + diff --git a/users/history/version_1_18_1.html b/users/history/version_1_18_1.html new file mode 100644 index 0000000..4072d24 --- /dev/null +++ b/users/history/version_1_18_1.html @@ -0,0 +1,53 @@ +--- +title: Version 1.18.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.18.1 + +/\*\*/ + + + + + + + +Version 1.18.1 +============== + +Version 1.18.1 +-------------- + + +October 15th, 2000 12:00 GMT + +* [Graph Library](/libs/graph/doc/table_of_contents.html), + [Random Number Library](/libs/random/index.html), and + [Regular Expression Library](/libs/regex/index.html): Minor + fixes. +* [Configuration Header](/libs/config/index.html) additions + for various compiler foibles. +* Portability Hints: Borland C++ 5.5.1 from Jens Maurer added. +* [Compiler Status](/status/compiler_status.html) updated + for latest versions of several compilers. + + + + + + + + + + + diff --git a/users/history/version_1_18_2.html b/users/history/version_1_18_2.html new file mode 100644 index 0000000..128ca63 --- /dev/null +++ b/users/history/version_1_18_2.html @@ -0,0 +1,57 @@ +--- +title: Version 1.18.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.18.2 + +/\*\*/ + + + + + + + +Version 1.18.2 +============== + +Version 1.18.2 +-------------- + + +November 3rd, 2000 12:00 GMT + +* [Cast Library](/libs/conversion/cast.htm) Fix numeric\_cast<> + bugs with floating types. +* [Graph Library](/libs/graph/doc/table_of_contents.html) + minor + fixes. +* [Regular Expression Library](/libs/regex/index.html) minor + fixes. +* [Configuration Header](/libs/config/index.html) more + fixes for broken compilers. +* Boost Header Dependencies page added. +* Terminology change: Several headers previously lumped together as a "utility" + library are now considered separate libraries. For historical reasons, their + non-header files still live in the "utility" sub-directory. + + + + + + + + + + + diff --git a/users/history/version_1_18_3.html b/users/history/version_1_18_3.html new file mode 100644 index 0000000..ea9013f --- /dev/null +++ b/users/history/version_1_18_3.html @@ -0,0 +1,55 @@ +--- +title: Version 1.18.3 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.18.3 + +/\*\*/ + + + + + + + +Version 1.18.3 +============== + +Version 1.18.3 +-------------- + + +November 18th, 2000 12:00 GMT + +* [Graph Library](/libs/graph/doc/table_of_contents.html) + minor + fixes and additions. +* [Regular Expression Library](/libs/regex/index.html) minor + fixes. +* [cast.hpp](/boost/cast.hpp) Borland compiler fixes. +* [cstdint.hpp](/boost/cstdint.hpp) changed to no longer + expose names to the global namespace. +* BeOS5/Intel compiler status contributed by John Maddock. +* [Compiler Status](/status/compiler_status.html) added + two additional test programs. + + + + + + + + + + + diff --git a/users/history/version_1_19_0.html b/users/history/version_1_19_0.html new file mode 100644 index 0000000..4933d7e --- /dev/null +++ b/users/history/version_1_19_0.html @@ -0,0 +1,60 @@ +--- +title: Version 1.19.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.19.0 + +/\*\*/ + + + + + + + +Version 1.19.0 +============== + +Version 1.19.0 +-------------- + + +December 10th, 2000 12:00 GMT + +* [Concept Check Library](/libs/concept_check/concept_check.htm) added + - tools for generic programming from Jeremy Siek. +* [Python Library](/libs/python/doc/index.html) added + - reflects C++ classes and functions into Python, from Dave Abrahams. +* [Static Assert Library](/libs/static_assert/static_assert.htm) added + - compile time assertions from John Maddock +* [Property Map Concepts](/libs/property_map/property_map.html) added + - interfaces which map key objects to value objects from Jeremy Siek. +* [Graph Library](/libs/graph/doc/table_of_contents.html) + minor + updates. +* [Regular Expression Library](/libs/regex/index.html) minor + updates. +* [Library Requirements and Guidelines](/more/lib_guide.htm) + - directory name policy added. +* [FAQ](/more/faq.htm) updated. + + + + + + + + + + + diff --git a/users/history/version_1_20_0.html b/users/history/version_1_20_0.html new file mode 100644 index 0000000..1d17dd0 --- /dev/null +++ b/users/history/version_1_20_0.html @@ -0,0 +1,58 @@ +--- +title: Version 1.20.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.20.0 + +/\*\*/ + + + + + + + +Version 1.20.0 +============== + +Version 1.20.0 +-------------- + + +January 6th, 2001 12:00 GMT + +* [Conversion Library](/libs/conversion/index.html) added + - [cast](/libs/conversion/cast.htm) and [lexical\_cast](/libs/conversion/lexical_cast.htm) + headers from Dave Abrahams and Kevlin Henney. +* Web site moved to a larger host after the old ISP collapsed unexpectedly. +* Regression tests now include execution testing. See [Compiler + Status](/status/compiler_status.html). +* [Discussion Policy](/more/discussion_policy.htm) page added. +* [Array Library](/libs/array/index.html) minor documentation + improvements. +* [Graph Library](/libs/graph/doc/table_of_contents.html) + minor + updates. +* [Regular Expression Library](/libs/regex/index.html) minor + updates. + + + + + + + + + + + diff --git a/users/history/version_1_20_1.html b/users/history/version_1_20_1.html new file mode 100644 index 0000000..ff926e1 --- /dev/null +++ b/users/history/version_1_20_1.html @@ -0,0 +1,52 @@ +--- +title: Version 1.20.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.20.1 + +/\*\*/ + + + + + + + +Version 1.20.1 +============== + +Version 1.20.1 +-------------- + + +January 10th, 2001 12:00 GMT + +* [compressed\_pair.hpp](/boost/compressed_pair.hpp) minor + update fixes test failures of other libraries under VC++. +* [Graph Library](/libs/graph/doc/table_of_contents.html) + minor + updates. +* [Regular Expression Library](/libs/regex/index.html) minor + updates. +* Minor website fixes including missing files in boost\_all.zip. + + + + + + + + + + + diff --git a/users/history/version_1_20_2.html b/users/history/version_1_20_2.html new file mode 100644 index 0000000..d67c55f --- /dev/null +++ b/users/history/version_1_20_2.html @@ -0,0 +1,74 @@ +--- +title: Version 1.20.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.20.2 + +/\*\*/ + + + + + + + +Version 1.20.2 +============== + +Version 1.20.2 +-------------- + + +February 10th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost-1.20.2.tar.bz2](https://sourceforge.net/projects/boost/files/boost/1.20.2/boost-1.20.2.tar.bz2) | +| [boost-1.20.2.tar.gz](https://sourceforge.net/projects/boost/files/boost/1.20.2/boost-1.20.2.tar.gz) | +| windows | [boost-1\_20\_2.zip](https://sourceforge.net/projects/boost/files/boost/1.20.2/boost-1_20_2.zip) | + +* Array traits: minor portability fix. +* [Graph Library](/libs/graph/doc/table_of_contents.html) - + Changes to [`breadth\_first\_search()`](/libs/graph/doc/breadth_first_search.html) + re: [BFSVisitor](/libs/graph/doc/BFSVisitor.html), added + max flow algorithms [`edmunds\_karp\_max\_flow()`](/libs/graph/doc/edmunds_karp_max_flow.html) + and [`push\_relabel\_max\_flow()`](/libs/graph/doc/push_relabel_max_flow.html), + added [`adjacency\_matrix`](/libs/graph/doc/adjacency_matrix.html) + graph class, added [`filtered\_graph`](/libs/graph/doc/filtered_graph.html) adaptor +* [Integer Library](/libs/integer/index.html): minor + fixes to integer.hpp and integer\_test.cpp +* [Portability Hints: Microsoft Visual C++](microsoft_vcpp.html) + added. +* [Random Number Library](/libs/random/index.html): Minor + portability fixes +* [Rational Number Library](/libs/rational/index.html): + documentation + updates, efficiency improvements, co-operates with user-defined types, regression + tests +* [Regular Expression Library](/libs/regex/index.html): minor + updates. +* [Smart Pointer Library](/libs/smart_ptr/index.html): + shared\_ptr + example added. +* [Timer Library](/libs/timer/index.html): changed + to an all inline implementation. + + + + + + + + + + + diff --git a/users/history/version_1_21_0.html b/users/history/version_1_21_0.html new file mode 100644 index 0000000..2f604a4 --- /dev/null +++ b/users/history/version_1_21_0.html @@ -0,0 +1,75 @@ +--- +title: Version 1.21.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.21.0 + +/\*\*/ + + + + + + + +Version 1.21.0 +============== + +Version 1.21.0 +-------------- + + +March 9th, 2001 12:00 GMT + +* [Iterator Adaptor + Library](/libs/utility/iterator_adaptors.htm) added. Adapt a base type into a standard conforming iterator, + and more, from Dave Abrahams, Jeremy Siek, and John Potter. +* [Pool Library](/libs/pool/doc/index.html) added. + Memory pool management from Steve Cleary. +* [Test Library](/libs/test/doc/index.html) added. + Support for program testing and execution from Beman Dawes. +* [Generic Programming Techniques](/more/generic_programming.html) + page added, contributed by Dave Abrahams. +* [Graph Library](/libs/graph/doc/table_of_contents.html): + Updated + use of iterator adaptors. Changed `operator +==` for `adjacency\_list::edge\_descriptor` + to improve semantics for multigraphs. Moved `adjacency\_iterator\_generator` + from namespace `detail` to + `boost` and added [documentation](/libs/graph/doc/adjacency_iterator.html). + Renamed `dynamic\_components()` to [`incremental\_components()`](/libs/graph/doc/incremental_components.html), + better matching graph literature terminology. Cleaned up interface of [`connected\_components()`](/libs/graph/doc/connected_components.html) and created separate [`strong\_components()`](/libs/graph/doc/strong_components.html) + function using Tarjan's more efficient algorithm. Fixed documentation figures + for [`adjacency\_list`](/libs/graph/doc/adjacency_list.html) + and [`adjacency\_matrix`](/libs/graph/doc/adjacency_matrix.html). + Added docs for [`cuthill\_mckee\_ordering()`](/libs/graph/doc/cuthill_mckee_ordering.html) + algorithm. +* [Python Library](/libs/python/doc/index.html) upgraded. + Better compatibility with Python 2.0, NULL pointers and smart-pointers get + converted to/from python None, massive documentation review/revision. +* [Regular Expression Library](/libs/regex/index.html): Minor + fixes for Unicode platforms. +* [Type Traits Library](/libs/type_traits/index.html) + upgraded: + Major revision. + + + + + + + + + + + diff --git a/users/history/version_1_21_1.html b/users/history/version_1_21_1.html new file mode 100644 index 0000000..47e4e05 --- /dev/null +++ b/users/history/version_1_21_1.html @@ -0,0 +1,57 @@ +--- +title: Version 1.21.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.21.1 + +/\*\*/ + + + + + + + +Version 1.21.1 +============== + +Version 1.21.1 +-------------- + + +March 14th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_21\_1.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.21.1/boost_1_21_1.tar.bz2) | +| [boost\_1\_21\_1.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.21.1/boost_1_21_1.tar.gz) | +| windows | [boost\_1\_21\_1.zip](http://sourceforge.net/projects/boost/files/boost/1.21.1/boost_1_21_1.zip) | + +* New download page. The .zip and .tar.gz files now live on the SourceForge + ftp site. +* [Graph Library](/libs/graph/doc/index.html): Minor + docs fixes. +* [Python Library](/libs/python/doc/index.html): Minor + docs fixes. +* [Regex Library](/libs/regex/index.html): Minor portability + fixes. + + + + + + + + + + + diff --git a/users/history/version_1_21_2.html b/users/history/version_1_21_2.html new file mode 100644 index 0000000..37f2225 --- /dev/null +++ b/users/history/version_1_21_2.html @@ -0,0 +1,67 @@ +--- +title: Version 1.21.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.21.2 + +/\*\*/ + + + + + + + +Version 1.21.2 +============== + +Version 1.21.2 +-------------- + + +April 24th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_21\_2.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.21.2/boost_1_21_2.tar.bz2) | +| [boost\_1\_21\_2.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.21.2/boost_1_21_2.tar.gz) | +| windows | [boost\_1\_21\_2.zip](http://sourceforge.net/projects/boost/files/boost/1.21.2/boost_1_21_2.zip) | + +* [Compatibility Library](/libs/compatibility/index.html) + added: + Help for non-conforming standard libraries missing CXX headers from Ralf + Grosse-Kunstleve, and help for missing standard library header + from Jens Maurer. (These are unreviewed implementation libraries, treated + as maintenance steps only.) +* [Random Number Library](/libs/random/index.html): Split + into separate headers, updated documentation, added lagged\_fibonacci generator. +* [Integer Library](/libs/integer/index.html): Minor + portability update. +* [Graph Library](/libs/graph/doc/table_of_contents.html): + Changed + algorithm interfaces to use named parameters technique. Added graph isomorphism + algorithm. +* Download refinements - files now available from either FTP or web server. +* [Tracker](http://sourceforge.net/tracker/?group_id=7586) + Added: View and submit bug, support, and feature requests. +* Minor portability fixes in several other libraries. + + + + + + + + + + + diff --git a/users/history/version_1_22_0.html b/users/history/version_1_22_0.html new file mode 100644 index 0000000..ce82755 --- /dev/null +++ b/users/history/version_1_22_0.html @@ -0,0 +1,62 @@ +--- +title: Version 1.22.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.22.0 + +/\*\*/ + + + + + + + +Version 1.22.0 +============== + +Version 1.22.0 +-------------- + + +May 25th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_22\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.22.0/boost_1_22_0.tar.bz2) | +| [boost\_1\_22\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.22.0/boost_1_22_0.tar.gz) | +| windows | [boost\_1\_22\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.22.0/boost_1_22_0.zip) | + +* [CRC Library](/libs/crc/index.html) added. Compute + cyclic redundancy codes from Daryle Walker. +* [Graph Library](/libs/graph/doc/index.html): Minor + fixes. +* [Integer Traits](/libs/integer/integer_traits.html): added + wchar\_t specialization, minor portability fixes. +* [Regex Library](/libs/regex/index.html): Minor portability + fixes. +* [Smart Pointer Library](/libs/smart_ptr/smart_ptr.htm): + fixed + bugs, tightened requirements, added examples. +* [Utility Library](/libs/utility/utility.htm): added + checked\_delete() and checked\_array\_delete() functions. + + + + + + + + + + + diff --git a/users/history/version_1_23_0.html b/users/history/version_1_23_0.html new file mode 100644 index 0000000..6e27ee3 --- /dev/null +++ b/users/history/version_1_23_0.html @@ -0,0 +1,64 @@ +--- +title: Version 1.23.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.23.0 + +/\*\*/ + + + + + + + +Version 1.23.0 +============== + +Version 1.23.0 +-------------- + + +July 6th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_23\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.23.0/boost_1_23_0.tar.bz2) | +| [boost\_1\_23\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.23.0/boost_1_23_0.tar.gz) | +| windows | [boost\_1\_23\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.23.0/boost_1_23_0.zip) | + +* [Any Library](/libs/any/index.html) added. Safe, + generic container for single values of different value types, from Kevlin + Henney. +* [Function Library](/libs/function/index.html) added. + Function object wrappers for deferred calls or callbacks, from Doug Gregor. +* [Tokenizer Library](/libs/tokenizer/index.html) added. + Break a string into a series of tokens, from John Bandela. +* [Special functions](/doc/html/boost_math/math_special_functions.html), + [octonions](/doc/html/boost_math/octonions.html), [quaternions](/doc/html/boost_math/quaternions.html) added, from + Hubert Holin. +* [Smart Pointer Library](/libs/smart_ptr/smart_ptr.htm): + shared\_ptr + polymorphic pointers now work on more broken compilers. +* IBM/Aix Compiler status table contributed by Toon Knapen. +* Minor fixes to a number of other libraries. + + + + + + + + + + + diff --git a/users/history/version_1_24_0.html b/users/history/version_1_24_0.html new file mode 100644 index 0000000..636cfd3 --- /dev/null +++ b/users/history/version_1_24_0.html @@ -0,0 +1,59 @@ +--- +title: Version 1.24.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.24.0 + +/\*\*/ + + + + + + + +Version 1.24.0 +============== + +Version 1.24.0 +-------------- + + +August 19th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_24\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.24.0/boost_1_24_0.tar.bz2) | +| [boost\_1\_24\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.24.0/boost_1_24_0.tar.gz) | +| windows | [boost\_1\_24\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.24.0/boost_1_24_0.zip) | + +* [Tuple Library](/libs/tuple/doc/tuple_users_guide.html) + added. + Tuples ease definition of functions returning multiple values, and more, + from Jaakko Jarvi. +* Minor fixes to some other libraries. +* [Boost Build System](/tools/build/index.html) added. + Preliminary release of an innovative build system for Boost libraries, from + Dave Abrahams and others. +* [Formal Review Schedule](/more/formal_review_schedule.html) + added. Shows current, future, and recent past review dates. + + + + + + + + + + + diff --git a/users/history/version_1_25_0.html b/users/history/version_1_25_0.html new file mode 100644 index 0000000..a46d3b7 --- /dev/null +++ b/users/history/version_1_25_0.html @@ -0,0 +1,74 @@ +--- +title: Version 1.25.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.25.0 + +/\*\*/ + + + + + + + +Version 1.25.0 +============== + +Version 1.25.0 +-------------- + + +October 1st, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_25\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.25.0/boost_1_25_0.tar.bz2) | +| [boost\_1\_25\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.25.0/boost_1_25_0.tar.gz) | +| windows | [boost\_1\_25\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.25.0/boost_1_25_0.zip) | + +* [Thread Library](/libs/thread/doc/index.html) added. + Portable C++ multi-programming at last, from William Kempf. +* [Base From Member](/libs/utility/base_from_member.html) + added to [Utility Library](/libs/utility/utility.htm). + Support for the base from member idiom, from Daryle Walker. +* [Bind](/libs/bind/bind.html) and [mem\_fn](/libs/bind/mem_fn.html) + added - Generalized binders for function/object/pointers and member functions, + from Peter Dimov. +* [Array Library](/libs/array/index.html): Minor updates, + from Nico Josuttis. +* [Config Library](/libs/config/config.htm): major + redesign with much improved and automated configuration of Boost libraries + for specific compilers, from John Maddock. +* [Random Number Library](/libs/random/index.html): Fixed + bug when copying normal\_distribution and improved the documentation, from + Michael Stevens and Jens Maurer. +* [Special functions](/doc/html/boost_math/math_special_functions.html), + [octonions](/doc/html/boost_math/octonions.html), [quaternions](/doc/html/boost_math/quaternions.html) updated, + now useable with many more compilers, plus three new special functions, from + Hubert Holin, Eric Ford, and others. +* [Tokenizer Library](/libs/tokenizer/index.html): + fixes/enhancements + to escaped\_list\_separator based on empty fields and tokens comments from + Johan Nillson and Jens Maurer. +* Coming Soon - A mailing list for Boost users! + + + + + + + + + + + diff --git a/users/history/version_1_25_1.html b/users/history/version_1_25_1.html new file mode 100644 index 0000000..11e0036 --- /dev/null +++ b/users/history/version_1_25_1.html @@ -0,0 +1,67 @@ +--- +title: Version 1.25.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.25.1 + +/\*\*/ + + + + + + + +Version 1.25.1 +============== + +Version 1.25.1 +-------------- + + +November 5th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_25\_1.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.25.1/boost_1_25_1.tar.bz2) | +| [boost\_1\_25\_1.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.25.1/boost_1_25_1.tar.gz) | +| windows | [boost\_1\_25\_1.zip](http://sourceforge.net/projects/boost/files/boost/1.25.1/boost_1_25_1.zip) | + +* [Boost Build System](/tools/build/index.html): Continued + improvements. +* [Config Library](/libs/config/config.htm): Continued + refinements. +* [Graph Library](/libs/graph/doc/index.html): Final + cleanup for upcoming the Boost Graph Library book. +* [Thread Library](/libs/thread/doc/index.html): Minor + fixes - tests now pass on most Win32 and POSIX systems including Linux and + Solaris. Semaphore removed as too error prone. +* [Function Library](/libs/function/index.html): direct + support for member function pointers and documentation updates. +* [Boost-Users](http://groups.yahoo.com/group/Boost-Users) + mailing list has been created to address topics of interest to users of Boost + libraries. +* [Boost + Wiki web](http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl) added. Provides a place for Boost users to openly discuss + and document the use of Boost libraries. It is not officially maintained + by Boost developers. + + + + + + + + + + + diff --git a/users/history/version_1_26_0.html b/users/history/version_1_26_0.html new file mode 100644 index 0000000..718cf8c --- /dev/null +++ b/users/history/version_1_26_0.html @@ -0,0 +1,68 @@ +--- +title: Version 1.26.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.26.0 + +/\*\*/ + + + + + + + +Version 1.26.0 +============== + +Version 1.26.0 +-------------- + + +November 30th, 2001 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_26\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.26.0/boost_1_26_0.tar.bz2) | +| [boost\_1\_26\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.26.0/boost_1_26_0.tar.gz) | +| windows | [boost\_1\_26\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.26.0/boost_1_26_0.zip) | + +* [Common Factor Library](/libs/math/doc/common_factor.html) + added. + Greatest common divisor and least common multiple, from Daryle Walker. +* [Preprocessor Library](/libs/preprocessor/doc/index.html) + added. + Preprocessor metaprogramming tools including repetition and recursion, from + Vesa Karvonen. +* [Iterator Adaptor + Library](/libs/utility/iterator_adaptors.htm): Added [generator + iterator](/libs/utility/generator_iterator.htm) adaptor, from Jens Maurer. +* [Random Number Library](/libs/random/index.html): Removed + iterator interface. Fixed overflows in uniform\_int<>. Both changes + cause random number sequences to differ compared to previous boost releases. +* [phase library..[operators.hpp](/libs/utility/operators.htm):] + Improvements from Daryle and Helmut Ziesel +* [Boost.Build](/tools/build/index.html): Continuing + improvements, including pre-built [Boost.Jam + executables](/tools/build/index.html). +* Minor fixes to a number of other libraries. + + + + + + + + + + + diff --git a/users/history/version_1_27_0.html b/users/history/version_1_27_0.html new file mode 100644 index 0000000..6977166 --- /dev/null +++ b/users/history/version_1_27_0.html @@ -0,0 +1,80 @@ +--- +title: Version 1.27.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.27.0 + +/\*\*/ + + + + + + + +Version 1.27.0 +============== + +Version 1.27.0 +-------------- + + +February 5th, 2002 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_27\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.27.0/boost_1_27_0.tar.bz2) | +| [boost\_1\_27\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.27.0/boost_1_27_0.tar.gz) | +| windows | [boost\_1\_27\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.27.0/boost_1_27_0.zip) | + +* [Python Library](/libs/python/doc/index.html): Scott + Snyder contributed inplace operator support. +* [Integer Library](/libs/integer/index.html): Daryle + Walker contributed enhancements to the [type + selection templates](/libs/integer/integer.htm), and added new compile-time [bit + mask](/libs/integer/doc/integer_mask.html), [binary logarithm](/libs/integer/doc/static_log2.html), + and [extrema](/libs/integer/doc/static_min_max.html) templates. +* [Function Library](/libs/function/index.html): user + may request that `boost::function` objects store a reference to a + function object target instead of a copy, using [`ref`](/libs/bind/ref.html). Stateless objects are optimized + so that they require no dynamic storage. +* [Quaternions](/doc/html/boost_math/quaternions.html): added + support for GCC 2.95.x. +* [Octonions](/doc/html/boost_math/octonions.html): added + support for GCC 2.95.x. +* [Smart Pointers Library](/libs/smart_ptr/index.html): Peter + Dimov contributed a new implementation that fixes some bugs and adds some + features including [thread + safety](/libs/smart_ptr/compatibility.htm#threadsafe) when manipulating the use count, [custom + delete functions](/libs/smart_ptr/shared_ptr.htm#constructors), a new [weak\_ptr](/libs/smart_ptr/weak_ptr.htm), + and shared\_static\_cast and shared\_dynamic\_cast. +* [Preprocessor Library](/libs/preprocessor/doc/index.html): + changed + macro prefix from BOOST\_PREPROCESSOR to BOOST\_PP, added support for list + data structure manipulation, added examples, made library ANSI C friendly, + added generalized [repetition](/libs/preprocessor/doc/ref/for.html) + and [iteration](/libs/preprocessor/doc/ref/while.html) + primitives, improved reference manual. +* [Threads Library](/libs/thread/doc/index.html): Mac + Carbon implementation contributed by Mac Murrett. +* Minor fixes to many libraries. + + + + + + + + + + + diff --git a/users/history/version_1_28_0.html b/users/history/version_1_28_0.html new file mode 100644 index 0000000..34077a8 --- /dev/null +++ b/users/history/version_1_28_0.html @@ -0,0 +1,72 @@ +--- +title: Version 1.28.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.28.0 + +/\*\*/ + + + + + + + +Version 1.28.0 +============== + +Version 1.28.0 +-------------- + + +May 15th, 2002 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_28\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.28.0/boost_1_28_0.tar.bz2) | +| [boost\_1\_28\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.28.0/boost_1_28_0.tar.gz) | +| windows | [boost\_1\_28\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.28.0/boost_1_28_0.zip) | + +* The Boost mailing lists are now also accessible as [newsgroups](/more/mailing_lists.htm#newsgroup). +* A powerful [mailing + list archive](http://aspn.activestate.com/ASPN/Mail/Archives/boost/) has been contributed by the [ActiveState + Programmer Network](http://aspn.activestate.com/ASPN). +* [Lambda Library](/libs/lambda/doc/index.html) added, + from Jaakko Jarvi and Gary Powell. Define small unnamed function objects + at the actual call site: for\_each( a.begin(), a.end(), std::cout << + \_1 << ' ' ); +* [I/O State Saver Library added](/libs/io/doc/ios_state.html) - + Save I/O state to prevent jumbled data, from Daryle Walker. +* [Configuration Library](/libs/config/config.htm): User + code should not use BOOST\_NO\_LIMITS. +* [Random Number Library](/libs/random/index.html): Avoid + compiler warnings. +* [Smart Pointers Library](/libs/smart_ptr/index.html): Added + shared\_polymorphic\_cast and shared\_polymorphic\_downcast. +* [Function Library](/libs/function/index.html): Now + supports function objects with the unary `&` + operator overloaded. +* [Utility Library](/libs/utility/utility.htm): Added + `addressof()` + function. +* The usual small fixes and tweaks. + + + + + + + + + + + diff --git a/users/history/version_1_29_0.html b/users/history/version_1_29_0.html new file mode 100644 index 0000000..4ee8877 --- /dev/null +++ b/users/history/version_1_29_0.html @@ -0,0 +1,81 @@ +--- +title: Version 1.29.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.29.0 + +/\*\*/ + + + + + + + +Version 1.29.0 +============== + +Version 1.29.0 +-------------- + + +October 10th, 2002 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_29\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.29.0/boost_1_29_0.tar.bz2) | +| [boost\_1\_29\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.29.0/boost_1_29_0.tar.gz) | +| windows | [boost\_1\_29\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.29.0/boost_1_29_0.zip) | + +* [Date-Time Library](/libs/date_time/doc/index.html) added + - Dates, times, leap seconds, infinity, and more, from Jeff Garland. +* [Dynamic Bitset](/libs/dynamic_bitset/dynamic_bitset.html) + added + - A runtime sized version of the `std::bitset` + class from Jeremy Siek and Chuck Allison. +* [Format Library](/libs/format/index.html) added - + Type-safe 'printf-like' format operations, from Samuel Krempp. +* [Function Library](/libs/function/index.html): Major + syntactic changes have been made. Some old syntax and little-used features + have been deprecated (and will be removed shortly), and the syntax for the + `boost::function` class template has been greatly + improved on conforming compilers. Please see the compatibility note for more + information. +* [Multi-array Library](/libs/multi_array/doc/index.html) + added + - Multidimensional containers and adaptors for arrays of contiguous data, + from Ron Garcia. +* [Preprocessor Library](/libs/preprocessor/index.html): + Major + upgrade, from Paul Mensonides. +* [Python Library](/libs/python/doc/index.html) - Version + 2 is released, from Dave Abrahams and others. This is a major rewrite which + works on many more compilers and platforms, with a completely new interface + and lots of new features. Boost.Python v2 requires Python 2.2 or later. +* [Signals Library](/libs/signals/doc/index.html) added + - Managed signals & slots callback implementation, from Doug Gregor. +* [Test Library](/libs/test/doc/index.html): Major + new version, including full unit test capabilities, from Gennadiy Rozental. +* [uBLAS Library](/libs/numeric/ublas/doc/index.htm) added + - Basic linear algebra for dense, packed and sparse matrices, from Joerg + Walter and Mathias Koch. + + + + + + + + + + + diff --git a/users/history/version_1_30_0.html b/users/history/version_1_30_0.html new file mode 100644 index 0000000..ec22b5c --- /dev/null +++ b/users/history/version_1_30_0.html @@ -0,0 +1,104 @@ +--- +title: Version 1.30.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.30.0 + +/\*\*/ + + + + + + + +Version 1.30.0 +============== + +Version 1.30.0 +-------------- + + +March 19th, 2003 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_30\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.30.0/boost_1_30_0.tar.bz2) | +| [boost\_1\_30\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.30.0/boost_1_30_0.tar.gz) | +| windows | [boost\_1\_30\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.30.0/boost_1_30_0.zip) | + +* [Filesystem Library](/libs/filesystem/doc/index.htm) added + - Portable paths, iteration over directories, and other useful filesystem + operations, from Beman Dawes. +* [Optional Library](/libs/optional/doc/optional.html) added + - A discriminated-union wrapper for optional values, from Fernando Cacciola. +* [Interval Library](/libs/numeric/interval/doc/interval.htm) + added + - Extends the usual arithmetic functions to mathematical intervals, from + Guillaume Melquiond, Herve Bronnimann and Sylvain Pion. +* [MPL](/libs/mpl/doc/index.html) added - Template + metaprogramming framework of compile-time algorithms, sequences and metafunction + classes, from Aleksey Gurtovoy. +* [Spirit Library](/libs/spirit/index.html) added - + An LL (unlimited lookahead) parser framework that represents parsers directly + as EBNF grammars in inlined C++ source code, complete with semantic actions, + ASTs and much more, from Joel de Guzman and team. +* [Smart Pointers Library](/libs/smart_ptr/index.html) - + cast functions are now spelled [static\_pointer\_cast](/libs/smart_ptr/shared_ptr.htm#static_pointer_cast) + / [dynamic\_pointer\_cast](/libs/smart_ptr/shared_ptr.htm#dynamic_pointer_cast); + [enable\_shared\_from\_this](/libs/smart_ptr/enable_shared_from_this.html) + added; shared\_ptr::shared\_ptr(), shared\_ptr::reset(), weak\_ptr::weak\_ptr(), + weak\_ptr::reset() no longer throw; [get\_deleter](/libs/smart_ptr/shared_ptr.htm#get_deleter) + added; weak\_ptr::get() removed; make\_shared is now spelled [weak\_ptr::lock()](/libs/smart_ptr/weak_ptr.htm#lock) + ; [intrusive\_ptr documentation](/libs/smart_ptr/intrusive_ptr.html) + added; some experimental undocumented shared\_ptr features have been removed; + a [page describing some smart + pointer programming techniques](/libs/smart_ptr/sp_techniques.html) has been added. +* [boost/assert.hpp](/libs/utility/assert.html), [boost/current\_function.hpp](/libs/utility/current_function.html), + [boost/throw\_exception.hpp](/libs/utility/throw_exception.html), + [boost/checked\_delete.hpp](/libs/utility/checked_delete.html) + have been documented. +* [Date-Time Library](/libs/date_time/doc/index.html) - + several fixes and small additions including an interface change to partial\_date. + See the Date-Time Change History for more details. +* [Function Library](/libs/function/index.html) - added + support for assignment to zero (to clear) and comparison against zero (to + check if empty). +* [Operators Library](/libs/utility/operators.htm#symmetry) - + now takes advantage of named return value optimization (NRVO) when available, + from Daniel Frey. +* [Regression Tests](/status/compiler_status.html) - Much + expanded, plus a very nice [summary + page](http://boost.sourceforge.net/regression-logs/) from Rene Rivera. +* [Test Library](/libs/test/index.html) - introduced + following new facilities: + + Automatic registration of unit tests + + XML log format + + XML report format + + BOOST\_CHECK\_NO\_THROW test tool + + BOOST\_BITWISE\_CHECK test + tool + + For a complete list of changes see the Test Library [release + notes](/libs/test/doc/release_notes.html#v1_30_0). +* Many fixes and enhancements to other libraries. + + + + + + + + + + + diff --git a/users/history/version_1_30_1.html b/users/history/version_1_30_1.html new file mode 100644 index 0000000..9a85561 --- /dev/null +++ b/users/history/version_1_30_1.html @@ -0,0 +1,78 @@ +--- +title: Version 1.30.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.30.1 + +/\*\*/ + + + + + + + +Version 1.30.1 +============== + +Version 1.30.1 +-------------- + + +August 4th, 2003 12:00 GMT + + + This release was withdrawn on the 12 Aug 2003. + + Fixes were made to the following libraries: \* The [Boost.Lambda](/libs/lambda/doc/index.html) + ..library is now usable with gcc-2.95.2 \* [Boost.Spirit](/libs/spirit/index.html): + \* + Fixed. Using MSVC++6 (SP5), calling the assign action with a string value on + parsers using the file\_iterator will not work. \* Fixed: using assign semantic + action in a grammar with a multi\_pass iterator adaptor applied to an std::istream\_iterator + resulted in a failure to compile under msvc 7.0. \* Fixed: There is a bug in the + range\_run::set(range const& r) + function in "../boost/spirit/utility/impl/chset/range\_run.ipp". \* Fixed: + handling of trailing whitespace bug (ast\_parse/pt\_parse related) \* Fixed: comment\_p + and end of data bug \* Fixed: Most trailing space bug \* Fixed: `chset<>::operator ~(range<>)` + bug, `operator &(chset<>, range<>)` + bug, `operator &(range<>, chset<>)` + bug \* Fixed: `impl::detach\_clear` bug \* Fixed: mismatch closure + return type bug \* Fixed: `access\_node\_d[]` and `access\_match\_d[]` iterator bugs \* Fixed a bug regarding thread + safety of Phoenix/Spirit closures. \* The Boost Template [Metaprogramming + Library (MPL)](/libs/mpl/doc/index.html)'s ..typeof implementation is now compatible with Metrowerks + CodeWarrior Pro8. \* [Boost.Function](/libs/function/index.html): workaround + for the new Borland patch (version 0x564) and MSVC++ .NET 2003. \* [Boost.Config](/libs/config/index.html), [Boost.Format](/libs/format/doc/format.html), + and [Boost.Regex](/libs/regex/index.html) ..have been adjusted + to avoid warnings with GCC-3.3, and Boost.Format also now works with string types + other than `std::string`. \* [Smart + Pointers](/libs/smart_ptr/index.html): + \* `checked\_delete` + now works on more platforms \* Compatibility with the SunPro compiler \* Added + missing `#include`s. \* [Boost.Python](/libs/python/index.html): + \* warning suppression for + finicky compilers \* fixed a crashing bug in the `raw\_function` + facility when no keyword arguments were passed. \* Improved conversion of NULL + `shared\_ptr`s to Python. + + + + + + + + + + + + diff --git a/users/history/version_1_30_2.html b/users/history/version_1_30_2.html new file mode 100644 index 0000000..972d7c3 --- /dev/null +++ b/users/history/version_1_30_2.html @@ -0,0 +1,73 @@ +--- +title: Version 1.30.2 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.30.2 + +/\*\*/ + + + + + + + +Version 1.30.2 +============== + +Version 1.30.2 +-------------- + + +August 19th, 2003 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_30\_2.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.30.2/boost_1_30_2.tar.bz2) | +| [boost\_1\_30\_2.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.30.2/boost_1_30_2.tar.gz) | +| windows | [boost\_1\_30\_2.zip](http://sourceforge.net/projects/boost/files/boost/1.30.2/boost_1_30_2.zip) | + +* [Boost Consulting](http://www.boost-consulting.com) is + now hosting Boost CVS mirrors - see our [download + page](/more/getting_started.html#CVS). +* Backported changes to the [config system](/libs/config/config.htm), + to better handle new compiler releases. +* Bugs in regression reporting in subproject tests were fixed. +* Tests are now run in the context of the user's PATH environment settings +* msvc-stlport and intel-win32-stlport toolsets now build static libraries + with multithreading enabled, to be compatible with the STLPort builds. +* intel-win32 toolset now handles `wchar\_t` + correctly when intel is installed over msvc6. +* Backported fixes from the main trunk which prevent errors building the [Boost.Test](/libs/test/doc/index.html) library in its default + configuration. +* Backported portability improvements for [checked\_delete](/libs/utility/checked_delete.html). +* Locale support for metrowerks (requiring a statically-linked runtime) is + more uniformly handled. +* Backported [conversion/lexical\_cast](/libs/conversion/lexical_cast.htm)'s + `wchar\_t` fixes from the main + trunk. +* intel-linux-tools: added rt to FINDLIBS in order to make + the `clock\_gettime()` + function available (backport of a patch in CVS HEAD). +* [regression/compiler\_status.cpp](/tools/regression/index.htm): + backported fixes in error log links generation. + + + + + + + + + + + diff --git a/users/history/version_1_31_0.html b/users/history/version_1_31_0.html new file mode 100644 index 0000000..b221597 --- /dev/null +++ b/users/history/version_1_31_0.html @@ -0,0 +1,169 @@ +--- +title: Version 1.31.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.31.0 + +/\*\*/ + + + + + + + +Version 1.31.0 +============== + +Version 1.31.0 +-------------- + + +January 26th, 2004 12:00 GMT + + +[Documentation](/doc/libs/1_31_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_31\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.31.0/boost_1_31_0.tar.bz2) | +| [boost\_1\_31\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.31.0/boost_1_31_0.tar.gz) | +| windows | [boost\_1\_31\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.31.0/boost_1_31_0.zip) | + + +### New License + A unified [Boost Software + License](/doc/libs/1_31_0/more/license_info.html) has been developed and will gradually replace the individual + licenses for most Boost libraries. The new license offers better legal protection + for both users and developers, and should speed user's legal reviews of Boost + libraries. Dave Abrahams led the Boost effort to develop better licensing. + The legal team was led by [Diane + Cabell](http://cyber.law.harvard.edu/people/cabell/index.html), Director, Clinical Programs, [Berkman + Center for Internet & Society](http://cyber.law.harvard.edu), Harvard Law School. [Devin + Smith](http://www.nixonpeabody.com/attorneys_detail1.asp?ID=121), attorney, [Nixon + Peabody LLP](http://www.nixonpeabody.com/default.asp), wrote the Boost License. Eva Chan, Harvard Law School, + contributed analysis of issues and drafts of various legal documents. + + Note: Many of the Boost libraries are still using earlier licenses, though + all conform to the [Boost + License Requirements](/doc/libs/1_31_0/more/lib_guide.htm#license). After this release we will begin an effort to + move toward uniform use of the new license. + + +### Build and Installation + + +* New [Getting Started](/doc/libs/1_31_0/more/getting_started.html) + procedures ease download and installation, from Rene Rivera and others. +* Improved support for libraries requiring [separate + compilation](/doc/libs/1_31_0/more/separate_compilation.html), from John Maddock and others. + +### New Libraries + + +* [enable\_if](/doc/libs/1_31_0/libs/utility/enable_if.html): Selective + inclusion of function template overloads, from Jaakko Jarvi, Jeremiah Willcock, + and Andrew Lumsdaine. This is an important new technique which exploits + the SFINAE (substitution-failure-is-not-an-error) principle. +* [Variant Library](/doc/libs/1_31_0/libs/variant/index.html): Safe, + generic, stack-based discriminated union container, from Eric Friedman + and Itay Maman. + +### Updated Libraries + + +* [Compose](/doc/libs/1_31_0/libs/compose/index.htm): This + library has been deprecated and will be removed in a future release. Use + [Bind](/doc/libs/1_31_0/libs/bind/bind.html) or [Lambda](/doc/libs/1_31_0/libs/lambda/doc/index.html) instead. +* [Date + Time Library](/doc/libs/1_31_0/libs/date_time/doc/index.html): A whole host of bug fixes, new features, and documentation + improvements. See the Date Time Change History for details. +* [Filesystem + Library](/doc/libs/1_31_0/libs/filesystem/doc/index.htm): + Several added functions, including improved checking for + directory and file name portability. +* [Iterator + Library](/doc/libs/1_31_0/libs/iterator/doc/index.html): Major version upgrade, with interface as proposed for the + C++ library TR, including an improved iterator\_adaptor + design plus several new components, from David Abrahams, Jeremy Siek, and + Thomas Witt. +* [MultiArray](/doc/libs/1_31_0/libs/multi_array/index.html): The + multi\_array class template now provides an element-preserving + resize operation as well as default construction (see the [reference + manual](/doc/libs/1_31_0/libs/multi_array/doc/reference.html) for more information). +* [Python Library](/doc/libs/1_31_0/libs/python/index.html): + + + Support for Python 2.3 and Intel C++ on Linux + + Container [Indexing + Suite](/doc/libs/1_31_0/libs/python/doc/v2/indexing.html) added. + + injected constructors and wrapped function objects. + + wrapping static data members. + + `std::wstring` conversions. + + Improved [keyword + arguments](/doc/libs/1_31_0/libs/python/doc/v2/args.html). + + Better error messages, including name demangling for GCC. + + Simpler [build + procedure](/doc/libs/1_31_0/libs/python/doc/building.html). + + *...and more....* +* [Random Number + Library](/doc/libs/1_31_0/libs/random/index.html): Interface changed to match the C++ [TR + proposal](/doc/libs/1_31_0/libs/random/wg21-proposal.html), from Jens Maurer. +* [Regex](/doc/libs/1_31_0/libs/regex/doc/index.html): Completely + new matching algorithm is now much faster than before, plus a selection + of [new features + and enhancements](/doc/libs/1_31_0/libs/regex/doc/history.html). +* [Boost.Spirit + 1.8.0](/doc/libs/1_31_0/libs/spirit/index.html): + + + Multiple grammar start rules + + Multiple Scanner rules (no more scanner business woes) + + More dynamic parsers + + Predefined actors + + Numerous bug fixes and QOI stuff + + *and more...* + + Starting from Spirit v1.8.0, ill conforming compilers will no longer be + supported. If you are still using one of these older compilers, please use + Spirit v1.6.x. See [@http://spirit.sf.net Spirit's Site] for more details. +* [Test Library](/doc/libs/1_31_0/libs/test/index.html): + + + Free function template based test case + + Custom exception translators support in execution monitor and + register\_exception\_translator added for unit test framework + + Added support for multi-module unit tests in automatic + registration facility + + Floating point comparison algorithm reworked (Is not backward + compatible!!!) + + Added support for custom users predicate returning both boolean + result code and possibly error message + + Documentation structure rework and update + + For a complete list of changes see the Test Library + [release notes](/doc/libs/1_31_0/libs/test/doc/release_notes.html#v1_31_0). + +### Miscellaneous + + +* Expanded testing and fixes for non-conforming compilers. +* Web site hosting now provided by [SourceForge](http://www.sourceforge.net/). + + + + + + + + + + + diff --git a/users/history/version_1_32_0.html b/users/history/version_1_32_0.html new file mode 100644 index 0000000..0cb5bd8 --- /dev/null +++ b/users/history/version_1_32_0.html @@ -0,0 +1,197 @@ +--- +title: Version 1.32.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.32.0 + +/\*\*/ + + + + + + + +Version 1.32.0 +============== + +Version 1.32.0 +-------------- + + +November 19th, 2004 12:00 GMT + + +[Documentation](/doc/libs/1_32_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_32\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.32.0/boost_1_32_0.tar.bz2) | +| [boost\_1\_32\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.32.0/boost_1_32_0.tar.gz) | +| windows | [boost\_1\_32\_0.exe](http://sourceforge.net/projects/boost/files/boost/1.32.0/boost_1_32_0.exe) | +| [boost\_1\_32\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.32.0/boost_1_32_0.zip) | + + +### Important + - New Toolset Names + The names of some the Boost.Build [toolsets](/doc/libs/1_32_0/more/getting_started.html#Tools) + have been changed to remove the "." (dot) character + and to fix some other naming inconsistencies. For example, vc7.1 + toolset was renamed to become vc-7\_1. Please refer to the + [Supported Toolsets](/doc/libs/1_32_0/more/getting_started.html#Tools) + section of the installation guide for the complete list of the current toolset + names. This change was made as a part of the effort to make the Boost distribution + compatible with ISO 9660 level 2 requirements. + + +### New Libraries + + +* [Assignment + Library](/doc/libs/1_32_0/libs/assign/index.html): Filling containers with constant or generated data has + never been easier, from Thorsten Ottosen. +* [Minmax + Library](/doc/libs/1_32_0/libs/algorithm/minmax/index.html): Standard library extensions for simultaneous min/max and + min/max element computations, from Herve Bronnimann. +* [Multi-index + Containers Library](/doc/libs/1_32_0/libs/multi_index/doc/index.html): Containers with multiple STL-compatible access + interfaces, from Joaquin M Lopez Munoz. +* [Numeric + Conversion Library](/doc/libs/1_32_0/libs/numeric/conversion/index.html): Optimized policy-based numeric conversions, + from Fernando Cacciola. +* [Program + Options Library](/doc/libs/1_32_0/doc/html/program_options.html): Access to configuration data given on command line, + in config files and other sources, from Vladimir Prus. +* [Range Library](/doc/libs/1_32_0/libs/range/index.html): a + new infrastructure for generic algorithms that builds on top of the new + iterator concepts, from Thorsten Ottosen. +* [Serialization + Library](/doc/libs/1_32_0/libs/serialization/doc/index.html): Serialization/de-serialization of arbitrary C++ data structures + to various formats including text, binary, and xml, from Robert Ramey. +* [String + Algorithms Library](/doc/libs/1_32_0/libs/algorithm/string/index.html): Collection of string related algorithms for + case conversion, trimming, find/replace operations and more, from Pavol + Droba. +* [Tribool](/doc/libs/1_32_0/doc/html/tribool.html): 3-state + boolean type library, from Doug Gregor. + +### Updated Libraries + + +* Compose: This deprecated library has been removed. +* [Graph](/doc/libs/1_32_0/libs/graph/index.html): + + + Added [bundled + properties](/doc/libs/1_32_0/libs/graph/doc/bundles.html) to the [`adjacency\_list`](/doc/libs/1_32_0/libs/graph/doc/adjacency_list.html) and [`adjacency\_matrix`](/doc/libs/1_32_0/libs/graph/doc/adjacency_matrix.html) class + templates, greatly simplifying the introduction of internal vertex + and edge properties. + + The [LEDA + graph adaptors](/doc/libs/1_32_0/libs/graph/doc/leda_conversion.html) have been ported to LEDA 4.5. + + Added algorithms for [betweenness + centrality](/doc/libs/1_32_0/libs/graph/doc/betweenness_centrality.html) and [betweenness + centrality clustering](/doc/libs/1_32_0/libs/graph/doc/bc_clustering.html). + + Added [circle + layout](/doc/libs/1_32_0/libs/graph/doc/circle_layout.html) and [undirected + spring layout](/doc/libs/1_32_0/libs/graph/doc/kamada_kawai_spring_layout.html) algorithms. +* [MPL Library](/doc/libs/1_32_0/libs/mpl/doc/index.html): + + + Updated to use the Boost Software License. + + New [documentation](/doc/libs/1_32_0/libs/mpl/doc/index.html), + including a complete [reference + manual.](/doc/libs/1_32_0/libs/mpl/doc/refmanual.html) + + Major interface changes and improvements, many of which are not backward + compatible. Please refer to the [1.32 + changelog](/doc/libs/1_32_0/libs/mpl/doc/tutorial/changes-in-boost-1-32-0.html) for the detailed information about upgrading to + the new version. +* [Python + Library](/doc/libs/1_32_0/libs/python/doc/index.html): + + + Updated to use the Boost Software License. + + a new, [better + method of wrapping classes with virtual functions](/doc/libs/1_32_0/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_virtual_functions) has been + implemented. + + Support for the new Python Bool type, thanks to Daniel Holth. + + Support for upcoming GCC symbol export control features have been + folded in, thanks to Niall Douglas. + + Improved support for `std::auto\_ptr`-like + types. + + Components used by other libraries have been moved out of python/detail + and into boost/detail to improve dependency relationships. + + Miscellaneous bug fixes and compiler workarounds. +* [Signals Library](/doc/libs/1_32_0/doc/html/signals.html): Introduced + deterministic slot ordering, permitting slots to be connected at the beginning + or end of slot groups or the slot list itself. Combiners may safely have + state and are accessible from the signal. +* [Utility](/doc/libs/1_32_0/libs/utility/utility.htm): class + template [result\_of](/doc/libs/1_32_0/libs/utility/utility.htm#result_of) + added. +* [Test Library](/doc/libs/1_32_0/libs/test/index.html): + + + namespace names gets shorten; old one still supported till next + release + + added proper encoding of XML PCDATA + + support for wide string comparison implemented + + For complete list of changes see Test Library + [release notes](/doc/libs/1_32_0/libs/test/doc/release_notes.html#v1_32_0). + +### Regression tests + This release has been extensively tested on a variety of different compilers + and platforms. It is known to contain no regressions against the previous reference + release on the compilers and configurations tested. Please refer to the corresponding + [regression + reports](http://www.meta-comm.com/engineering/boost-regression/1_32_0/index.html) to see how well your compiler performs on the new Boost codebase. + + +### Acknowledgements +![[]](http://boost.sourceforge.net/photos/aleksey_gurtovoy2.jpg) [Aleksey + Gurtovoy](/users/people/aleksey_gurtovoy.html) managed this release. [Managing + a release](/doc/libs/1_32_0/more/release_procedures.htm) at all is an enormous job, and Aleksey always goes beyond + merely meeting requirements by insisting on the highest possible quality. The + Boost membership owes him a debt of gratitude. + + This release wouldn't have been possible without the dedicated effort of many, + many members of the Boost community who generously contributed their outstanding + expertise, time and energy to making it happen. For patches, bug fixes, troubleshooting, + expert advice, and prompt responses to the release manager's requests we thank: + + David Abrahams, Misha Bergal, Jonathan Brandmeyer, Fernando Cacciola, Marshall + Clow, Christopher Currie, Pavol Droba, Caleb Epstein, Eric Friedman, Jeff Garland, + Michael Glassford, Doug Gregor, Joel de Guzman, Hubert Holin, Jaakko Jarvi, + Hartmut Kaiser, Bronek Kozicki, Tarjei Knapstad, Toon Knapen, Aaron W. LaFramboise, + Joaquin M Lopez Munoz, Christoph Ludwig, John Maddock, Paul Mensonides, Guillaume + Melquiond, Thorsten Ottosen, Vladimir Prus, Robert Ramey, Rene Rivera, Gennadiy + Rozental, Stefan Slapeta, Jonathan Turkanis, Pavel Vozenilek, Jonathan Wakely, + Daryle Walker, Victor A. Wagner Jr. and Martin Wille. + + Also, our special thanks go to: John Maddock for the managing the effort of + converting the majority of the Boost libraries to the [Boost + Software License](/doc/libs/1_32_0/more/license_info.html), Eric Niebler and Joel de Guzman for taking on the + important job of improving the Boost documentation's look and feel, and last, + but not least, to our regression test runners, without whom we simply would + never have released: Toon Knapen, Bronek Kozicki, Rene Rivera, Markus Schopflin, + Stefan Slapeta, Victor A. Wagner Jr. and Martin Wille. + + Thank you everybody! + + + + + + + + + + + + diff --git a/users/history/version_1_33_0.html b/users/history/version_1_33_0.html new file mode 100644 index 0000000..924d3bb --- /dev/null +++ b/users/history/version_1_33_0.html @@ -0,0 +1,244 @@ +--- +title: Version 1.33.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.33.0 + +/\*\*/ + + + + + + + +Version 1.33.0 +============== + +Version 1.33.0 +-------------- + + +August 11th, 2005 12:00 GMT + +Downloads| Platform | File | +| unix | [boost\_1\_33\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.33.0/boost_1_33_0.tar.bz2) | +| [boost\_1\_33\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.33.0/boost_1_33_0.tar.gz) | +| windows | [boost\_1\_33\_0.exe](http://sourceforge.net/projects/boost/files/boost/1.33.0/boost_1_33_0.exe) | +| [boost\_1\_33\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.33.0/boost_1_33_0.zip) | + + +### New Libraries + + +* [Iostreams + Library](/doc/libs/1_33_1/libs/iostreams/doc/index.html): + Framework for defining streams, stream buffers and i/o + filters, from Jonathan Turkanis. +* [Functional/Hash + Library](/doc/libs/1_33_1/libs/functional/hash/index.html): A TR1 hash function object that can be extended to hash + user defined types, from Daniel James. +* [Parameter + Library](/doc/libs/1_33_1/libs/parameter/doc/html/index.html): + Write functions that accept arguments by name: especially + useful when a function has more than one argument with a useful default + value, since named arguments can be passed in any order. +* [Pointer + Container Library](/doc/libs/1_33_1/libs/ptr_container/index.html): + Containers for storing heap-allocated polymorphic + objects to ease OO-programming, from Thorsten Ottosen. +* [Wave](/doc/libs/1_33_1/libs/wave/index.html): Standards + conformant implementation of the mandated C99/C++ preprocessor functionality + packed behind an easy to use iterator interface, from Hartmut Kaiser. + +### Updated Libraries + + +* [Any Library](/doc/libs/1_33_1/doc/html/any.html): `any\_cast` has been enhanced to allow direct + access to `any`'s held value. +* [Assignment + Library](/doc/libs/1_33_1/libs/assign/doc/index.html): Support for [Pointer + Container Library](/doc/libs/1_33_1/libs/ptr_container/index.html) and new efficient functions `ref\_list\_of()` and `cref\_list\_of()` for generating anonymous ranges. +* [Bind Library](/doc/libs/1_33_1/libs/bind/bind.html): Bind + expressions now support [comparisons + and negation](/doc/libs/1_33_1/libs/bind/bind.html#operators). Example: `bind(&X::name, \_1) < bind(&X::name, \_2)`. +* [Date-Time + Library](/doc/libs/1_33_1/doc/html/date_time.html): + + + Added [local + time and time zone classes](/doc/libs/1_33_1/doc/html/date_time/local_time.html). + + Added [format-based + Input/Output facets](/doc/libs/1_33_1/doc/html/date_time/date_time_io.html). + + For a complete list of changes, see the library [change + history](/doc/libs/1_33_1/doc/html/date_time/details.html#date_time.changes). +* [Graph Library](/doc/libs/1_33_1/libs/graph/doc/index.html): Introduced + several new algorithms and improved existing algorithms: + + + [Experimental + Python bindings](/doc/libs/1_33_1/libs/graph/doc/python.html), from Doug Gregor and Indiana University. + + [`floyd warshall + all pairs + shortest paths`](/doc/libs/1_33_1/libs/graph/doc/floyd_warshall_shortest.html), + from Lauren Foutz and Scott Hill. + + [`astar search`](/doc/libs/1_33_1/libs/graph/doc/astar_search.html), + from Kristopher Beevers and Jufeng Peng. + + [`fruchterman reingold + force directed + layout`](/doc/libs/1_33_1/libs/graph/doc/fruchterman_reingold.html), from Doug + Gregor and Indiana University. + + [`biconnected components` + and `articulation points`](/doc/libs/1_33_1/libs/graph/doc/biconnected_components.html), from Jeremy Siek, + Janusz Piwowarski, and Doug Gregor. + + [`sequential vertex + coloring`](/doc/libs/1_33_1/libs/graph/doc/sequential_vertex_coloring.html) has been + updated, tested, and documented. + + [`gursoy atun + layout`](/doc/libs/1_33_1/libs/graph/doc/gursoy_atun_layout.html), from Jeremiah + Willcock and Doug Gregor of Indiana University. + + [`king ordering`](/doc/libs/1_33_1/libs/graph/doc/king_ordering.html), + from D. Kevin McGrath of Indiana University. + + [`cuthill mckee + ordering`](/doc/libs/1_33_1/libs/graph/doc/cuthill_mckee_ordering.html) has been + recast as an invocation of `breadth + first search` + and now supports graphs with multiple components. + + [`dijkstra shortest + paths`](/doc/libs/1_33_1/libs/graph/doc/dijkstra_shortest_paths.html) now uses + a relaxed heap [[61](/doc/libs/1_33_1/libs/graph/doc/bibliography.html#driscoll88)] + as its priority queue, improving its complexity to O(V log V) and + improving real-world performance for larger graphs. + + [`read graphviz`](/doc/libs/1_33_1/libs/graph/doc/read_graphviz.html) + now has a new, Spirit-based parser that works for all graph types + and supports arbitrary properties on the graph, from Ron Garcia. + The old, Bison-based GraphViz reader has been deprecated and will + be removed in a future Boost release. [`write graphviz`](/doc/libs/1_33_1/libs/graph/doc/write-graphviz.html) + also supports dynamic properties. + + [`subgraph`](/doc/libs/1_33_1/libs/graph/doc/subgraph.html): `get\_property` now refers to the + subgraph property, not the root graph's property. + + See the [history](/doc/libs/1_33_1/libs/graph/doc/history.html#by-version) + for additional changes and bug fixes. +* [Multi-index + Containers Library](/doc/libs/1_33_1/libs/multi_index/doc/index.html): + + + New [hashed + indices](/doc/libs/1_33_1/libs/multi_index/doc/tutorial/indices.html#hashed_indices). + + Added [serialization + support](/doc/libs/1_33_1/libs/multi_index/doc/tutorial/creation.html#serialization). + + For a complete list of changes, see the library [release + notes](/doc/libs/1_33_1/libs/multi_index/doc/release_notes.html). +* [Program + Options Library](/doc/libs/1_33_1/libs/program_options/doc/index.html): + + + Option descriptions are now printed with word wrapping. + + Command line parser can bypass unregistered options, instread of + throwing. + + Removed support for "implicit" (optional) values. + + New customization method 'command\_line\_parser::extra\_style\_parser'. + Unlike 'additional\_parser', allows the user to parse several tokens + and return a vector of options, not just a single option. + + Work with disabled exceptions. +* [Property + Map Library](/doc/libs/1_33_1/libs/property_map/property_map.html): Introduced the [`dynamic properties`](/doc/libs/1_33_1/libs/property_map/doc/dynamic_property_map.html) + class, which provides dynamically-typed access to a set of property maps. +* [Boost.Python](/doc/libs/1_33_1/libs/python/doc/index.html): + + + Added support for docstrings on nonstatic properties. + + We now export the client-provided docstrings for `init >` + and *XXX*`\_FUNCTION\_OVERLOADS()` for only the last overload. + + Support for Embedded VC++ 4 and GCC-3.3 on MacOS added + + Introduced better support for rvalue from-python conversions of shared\_ptr. + + Support for exposing `vector` with the indexing suite. + + updated visual studio project build file. + + Added search feature to the index page. +* [Random Number + Library](/doc/libs/1_33_1/libs/random/index.html): + Improved initialization for `mersenne\_twister`, + algorithm by Makoto Matsumoto and Takuji Nishimura, implemented for Boost + by Jens Maurer. + + +Note: All test vectors for `mersenne\_twister`s + constructed or seeded without parameters or with a single `unsigned int` + parameter become invalid. +* [Range Library](/doc/libs/1_33_1/libs/range/index.html): Minor + addition of convenience functions to `iterator +range` like `front(), back()` and `operator[]()`. +* [Regex Library](/doc/libs/1_33_1/libs/regex/index.html): + + + Rewritten front end parser now supports (?imsx-imsx) constructs, + plus lookbehind assertions and conditional expressions. + + Thin wrapper classes improve integration with MFC/ATL code. + + Full (optional) Unicode support via the ICU library. Refer to the + [regex history + page](/doc/libs/1_33_1/libs/regex/doc/history.html) for more information on these and other small changes. +* [Serialization + Library](/doc/libs/1_33_1/libs/serialization/doc/index.html): + + + DLL version. + + Auto-linking. + + Serialization of variants. + + Improved serialization of shared pointers. +* [Signals Library](/doc/libs/1_33_1/doc/html/signals.html): added + slot blocking/unblocking, from Frantz Maerten. Huge improvements to signal + invocation performance from Robert Zeh. + +### Supported Compilers + Boost is tested on a wide range of compilers and platforms. Since Boost libraries + rely on modern C++ features not available in all compilers, not all Boost libraries + will work with every compiler. The following compilers and platforms have been + extensively tested with Boost, although many other compilers and platforms + will work as well. For more information, see the [regression + test results](https://www.boost.org/regression/release/user/). + + + +* [Apple GCC](http://developer.apple.com/) 3.x on Mac OS + X. +* [Borland C++](http://www.codegear.com/products/cppbuilder) + 5.6.4 on Windows. +* [GNU C++](http://gcc.gnu.org) 2.95.3 (with and without + STLport), 3.2.x., 3.3.x, 3.4.x, 4.0.x on Windows, Linux and Solaris. +* [Intel + C++](http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm) 8.1, 9.0 on Windows, Linux. +* [Metrowerks CodeWarrior](http://www.metrowerks.com) 8.3, + 9.4, 9.5 on Mac OS X and Windows. +* [Microsoft Visual C++](http://msdn.microsoft.com/visualc/) + 6.0 (sp5, with and without STLport), 7.0, 7.1, 8.0 beta. Note: due to intermittent + problems with Visual C++ 8.0 beta, and the presence of a variety of pre-release + compiler builds, we are unable to guarantee compatibility until the final + compiler is released. + +### Acknowledgements +![[]](/gfx/boost_1_33_0.jpg)[Douglas Gregor](/users/people/doug_gregor.html) + managed this release. + + A great number of people contributed their time and expertise to make this + release possible. Special thanks go to Aleksey Gurtovoy and Misha Bergal, who + managed to keep the regression testing system working throughout the release + process; David Abrahams, Beman Dawes, Aleksey Gurtovoy, Rene Rivera and Jonathan + Turkanis for greatly improving the quality of this release; Rene Rivera for + the new Boost web page design; and Zoltan "cad" Juhasz for the new + Boost logo. + + + + + + + + + + + + + diff --git a/users/history/version_1_33_1.html b/users/history/version_1_33_1.html new file mode 100644 index 0000000..27aff21 --- /dev/null +++ b/users/history/version_1_33_1.html @@ -0,0 +1,171 @@ +--- +title: Version 1.33.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.33.1 + +/\*\*/ + + + + + + + +Version 1.33.1 +============== + +Version 1.33.1 +-------------- + + +December 5th, 2006 12:00 GMT + + +[Documentation](/doc/libs/1_33_1/) + + +Downloads| Platform | File | +| unix | [boost\_1\_33\_1.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.33.1/boost_1_33_1.tar.bz2) | +| [boost\_1\_33\_1.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.33.1/boost_1_33_1.tar.gz) | +| windows | [boost\_1\_33\_1.exe](http://sourceforge.net/projects/boost/files/boost/1.33.1/boost_1_33_1.exe) | +| [boost\_1\_33\_1.zip](http://sourceforge.net/projects/boost/files/boost/1.33.1/boost_1_33_1.zip) | + + +### Updated Libraries + + +* [Any Library](/doc/libs/1_33_1/doc/html/any.html): Cast + to reference types introduced in 1.33.0 is now documented on `any\_cast` documentation page. +* [Bind Library](/doc/libs/1_33_1/libs/bind/bind.html): Bind + expressions now support [comparisons + and negation](/doc/libs/1_33_1/libs/bind/bind.html#operators). Example: `bind(&X::name, \_1) < bind(&X::name, \_2)`. +* [Config Library](/doc/libs/1_33_1/libs/config/index.html): Don't + undef `BOOST\_LIB\_TOOLSET` + after use. +* [Boost.Python](/doc/libs/1_33_1/libs/python/doc/index.html): + + + The build now assumes Python 2.4 by default, rather than 2.2 + + Support Python that's built without Unicode support + + Support for wrapping classes with overloaded address-of (`&`) operators +* [Smart Pointer + Library](/doc/libs/1_33_1/libs/smart_ptr/index.html): Fixed problems under Metrowerks CodeWarrior on PowerPC + (Mac OS X) with inlining on, GNU GCC on PowerPC 64. +* [Regex Library](/doc/libs/1_33_1/libs/regex/doc/index.html): Fixed + the supplied makefiles, and other small compiler specific changes. Refer + to the [regex + history page](/doc/libs/1_33_1/libs/regex/doc/history.html) for more information on these and other small changes. +* [Iostreams + Library](/doc/libs/1_33_1/libs/iostreams/doc/index.html): + Improved the interface for accessing a chain's components, + added `is\_open` members to + the file and file descriptor devices, fixed memory-mapped files on Windows, + and made minor changes to the documentation. +* [Boost.Python](/doc/libs/1_33_1/libs/python/doc/index.html): + + + Added support for docstrings on nonstatic properties. + + We now export the client-provided docstrings for `init >` + and *XXX*`\_FUNCTION\_OVERLOADS()` for only the last overload. + + Support for Embedded VC++ 4 and GCC-3.3 on MacOS added + + Introduced better support for rvalue from-python conversions of shared\_ptr. + + Support for exposing `vector` with the indexing suite. + + updated visual studio project build file. + + Added search feature to the index page. +* [Functional/Hash + Library](/doc/libs/1_33_1/libs/functional/hash/index.html): + Fixed the points example. +* [Multi-index + Containers Library](/doc/libs/1_33_1/libs/multi_index/doc/index.html): + Fixed a problem with multithreaded code, and + other minor changes. Refer to the library [release + notes](/doc/libs/1_33_1/libs/multi_index/doc/release_notes.html#boost_1_33_1) for further details. +* [Graph + Library](/doc/libs/1_33_1/libs/graph/doc/table_of_contents.html): + + + Fixed a problem with the relaxed heap on x86 Linux (fixes bug in + `dijkstra\_shortest\_paths`). + + Fixed problems with [`cuthill\_mckee\_ordering`](/doc/libs/1_33_1/libs/graph/doc/cuthill_mckee_ordering.html) + and [`king\_ordering`](/doc/libs/1_33_1/libs/graph/doc/king_ordering.html) producing + no results. + + Added `color\_map` parameter + to `dijkstra\_shortest\_paths`. +* [Signals + Library](/doc/libs/1_33_1/libs/signals/doc/index.html): Fixed problems with the use of Signals across shared library + boundaries. +* [Thread + library](/doc/libs/1_33_1/libs/thread/doc/index.html): +`read\_write\_mutex` + has been removed due to problems with deadlocks. +* [Wave library](/doc/libs/1_33_1/libs/wave/index.html) + (V1.2.1): Fixed a couple of problems, refer to the [change + log](/doc/libs/1_33_1/libs/wave/ChangeLog) for further details. + +### Supported Compilers + Boost is tested on a wide range of compilers and platforms. Since Boost libraries + rely on modern C++ features not available in all compilers, not all Boost libraries + will work with every compiler. The following compilers and platforms have been + extensively tested with Boost, although many other compilers and platforms + will work as well. For more information, see the [regression + test results](https://www.boost.org/regression/release/user/). + +*New for this release*: Support for building with the newest + STLport-5.0 was added. The support includes building with MinGW Runtime 3.8 + plus STLport-5.0 improved to support wide character operations. Apple GCC 4.0, + HP Tru64 C++, and Microsoft Visual C++ 8.0 are supported platforms. We have + added an experimental autoconf-like configure script for + Unix-like systems: run configure --help for more information. + + + +* [Apple GCC](http://developer.apple.com/) 3.3, 4.0 on + Mac OS X. +* [Borland C++](http://www.codegear.com/products/cppbuilder) + 5.6.4 on Windows. +* [GNU C++](http://gcc.gnu.org) 2.95.3 (with and without + STLport), 3.2.x., 3.3.x, 3.4.x, 4.0.x on Windows, Linux and Solaris. +* [HP C++ for Tru64 UNIX 7.1](http://h30097.www3.hp.com/cplus/). +* [Intel + C++](http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm) 8.1, 9.0 on Windows, Linux. +* [Metrowerks CodeWarrior](http://www.metrowerks.com) 8.3, + 9.4, 9.5 on Mac OS X and Windows. +* [Microsoft Visual C++](http://msdn.microsoft.com/visualc/) + 6.0 (sp5, with and without STLport), 7.0, 7.1, 8.0. Note: Boost does not + support the non-standard "Safe" C++ Library shipping with Visual + C++ 8.0, which may result in many spurious warnings from Boost headers + and other standards-conforming C++ code. To suppress these warnings, define + the macro `\_SCL\_SECURE\_NO\_DEPRECATE`. + +### Acknowledgements +![Medieval Mr. Gregor](/gfx/boost_1_33_0.jpg) +[Douglas + Gregor](/users/people/doug_gregor.html) managed this release. + + A great number of people contributed their time and expertise to make this + release possible. Special thanks go to Aleksey Gurtovoy and Misha Bergal, who + managed to keep the regression testing system working throughout the release + process; David Abrahams, Beman Dawes, Aleksey Gurtovoy, Bronek Kozicki, Rene + Rivera and Jonathan Turkanis for greatly improving the quality of this release; + Rene Rivera for the new Boost web page design; and Zoltan "cad" Juhasz + for the new Boost logo. + + + + + + + + + + + + diff --git a/users/history/version_1_34_0.html b/users/history/version_1_34_0.html new file mode 100644 index 0000000..1c3db98 --- /dev/null +++ b/users/history/version_1_34_0.html @@ -0,0 +1,318 @@ +--- +title: Version 1.34.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.34.0 + +/\*\*/ + + + + + + + +Version 1.34.0 +============== + +Version 1.34.0 +-------------- + + +May 12th, 2007 12:00 GMT + + +[Documentation](/doc/libs/1_34_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_34\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.34.0/boost_1_34_0.tar.bz2) | +| [boost\_1\_34\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.34.0/boost_1_34_0.tar.gz) | +| windows | [boost\_1\_34\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.34.0/boost_1_34_0.zip) | + + +### New Libraries + + +* [Foreach Library](/doc/libs/1_34_0/doc/html/foreach.html): `BOOST\_FOREACH` macro for easily iterating + over the elements of a sequence, from Eric Niebler. +* [Statechart + Library](/doc/libs/1_34_0/libs/statechart/doc/index.html): + Arbitrarily complex finite state machines can be implemented + in easily readable and maintainable C++ code, from Andreas Huber. +* [TR1 Library](/doc/libs/1_34_0/libs/tr1/index.html): An + implementation of the C++ Technical Report on Standard Library Extensions, + from John Maddock. This library does not itself implement the TR1 components, + rather it's a thin wrapper that will include your standard library's TR1 + implementation (if it has one), otherwise it will include the Boost Library + equivalents, and import them into namespace `std::tr1`. + Highlights include: Reference Wrappers, Smart Pointers, result\_of, Function + Object Binders, Polymorphic function wrappers, Type Traits, Random Number + Generators and Distributions, Tuples, Fixed Size Array, Hash Function Objects, + Regular Expressions, and Complex Number Additional Algorithms. +* [Typeof Library](/doc/libs/1_34_0/doc/html/typeof.html): Typeof + operator emulation, from Arkadiy Vertleyb and Peder Holt. +* [Xpressive + Library](/doc/libs/1_34_0/doc/html/xpressive.html): Regular expressions that can be written as strings or as + expression templates, and that can refer to each other and themselves recursively + with the power of context-free grammars, from Eric Niebler. + +### Updated Libraries + + +* [Assign Library](/doc/libs/1_34_0/libs/assign/index.html): + + + Support for `ptr\_map` via the new function `ptr\_map\_insert()` + + Support for initialization of [Pointer + Containers](/doc/libs/1_34_0/libs/ptr_container/index.html) when the containers hold pointers to an abstract + base class. +* [Date\_time + library](/doc/libs/1_34_0/doc/html/date_time.html): + + + Support for new US/Canada timezone rules and other bug fixes. See + [Change + History](/doc/libs/1_34_0/doc/html/date_time/details.html#changes) for details. +* [Filesystem + Library](/doc/libs/1_34_0/libs/filesystem/doc/index.htm): Major upgrade in preparation for submission to the C++ + Standards Committee for TR2. Changes include: + + + [Internationalization](/doc/libs/1_34_0/libs/filesystem/doc/i18n.html#Internationalization), + provided by class templates *basic\_path*, *basic\_filesystem\_error*, + *basic\_directory\_iterator*, and *basic\_directory\_entry*. + + [Simplification](/doc/libs/1_34_0/libs/filesystem/doc/i18n.html#Simplification) + of the path interface by eliminating special constructors to identify + native formats. + + [Rationalization](/doc/libs/1_34_0/libs/filesystem/doc/i18n.html#Rationalization) + of predicate function design, including the addition of several new + functions. + + Clearer specification by reference to [POSIX](/doc/libs/1_34_0/libs/filesystem/doc/design.htm#POSIX-01), + the ISO/IEEE Single Unix Standard, with provisions for Windows and + other operating systems. + + [Preservation](/doc/libs/1_34_0/libs/filesystem/doc/i18n.html#Preservation) + of existing user code whenever possible. + + [More + efficient](/doc/libs/1_34_0/libs/filesystem/doc/i18n.html#More_efficient) directory iteration. + + Addition of a [recursive + directory iterator](/doc/libs/1_34_0/libs/filesystem/doc/tr2_proposal.html#Class-template-basic_recursive_directory_iterator). +* [Function + Library](/doc/libs/1_34_0/libs/function/index.html): + Boost.Function now implements a small buffer optimization, + which can drastically improve the performance when copying or constructing + Boost.Function objects storing small function objects. For instance, `bind(&X:foo, &x, \_1, \_2)` requires no heap allocation when placed + into a Boost.Function object. +* [Functional/Hash + Library](/doc/libs/1_34_0/libs/functional/hash/index.html): + + + Use declarations for standard classes, so that the library doesn't + need to include all of their headers + + Deprecated the + headers. + + Add support for the `BOOST\_HASH\_NO\_EXTENSIONS` + macro, which disables the extensions to TR1 + + Minor improvements to the hash functions for floating point numbers. +* [Graph Library](/doc/libs/1_34_0/libs/graph/doc/index.html): + + + [`edmonds\_maximum\_cardinality\_matching`](/doc/libs/1_34_0/libs/graph/doc/maximum_matching.html), + from Aaron Windsor. + + [`lengauer\_tarjan\_dominator\_tree`](/doc/libs/1_34_0/libs/graph/doc/lengauer_tarjan_dominator.htm), + from JongSoo Park. + + [`compressed\_sparse\_row\_graph`](/doc/libs/1_34_0/libs/graph/doc/compressed_sparse_row.html), + from Jeremiah Willcock and Douglas Gregor of Indiana University. + + [`sorted\_erdos\_renyi\_iterator`](/doc/libs/1_34_0/libs/graph/doc/sorted_erdos_renyi_gen.html), + from Jeremiah Willcock of Indiana University. + + [`biconnected\_components`](/doc/libs/1_34_0/libs/graph/doc/biconnected_components.html) + now supports a visitor and named parameters, from Janusz Piwowarski. + + [`adjacency\_matrix`](/doc/libs/1_34_0/libs/graph/doc/adjacency_matrix.html) now models + the [Bidirectional + Graph](/doc/libs/1_34_0/libs/graph/doc/BidirectionalGraph.html) concept. + + [`dijkstra\_shortest\_paths`](/doc/libs/1_34_0/libs/graph/doc/dijkstra_shortest_paths.html) + now calls `vis.initialize\_vertex` for each vertex + during initialization. + + *Note:* the name of the compiled library for the + [GraphViz + reader](/doc/libs/1_34_0/libs/graph/doc/read_graphviz.html) has changed to boost\_graph (from + bgl-viz) to match Boost conventions. + + See the [complete + revision history](/doc/libs/1_34_0/libs/graph/doc/history.html#1.34.0) for more information. +* [MultiArray + Library](/doc/libs/1_34_0/libs/multi_array/index.html): + Boost.MultiArray now by default provides range-checking + for `operator[]`. + Range checking can be disabled by defining the macro `BOOST\_DISABLE\_ASSERTS` + before including multi\_array.hpp. A bug in `multi\_array::resize()` + related to storage orders was fixed. +* [Multi-index + Containers Library](/doc/libs/1_34_0/libs/multi_index/doc/index.html): + + + New [random + access indices](/doc/libs/1_34_0/libs/multi_index/doc/tutorial/indices.html#rnd_indices). + + Non key-based indices feature new [rearrange + facilities](/doc/libs/1_34_0/libs/multi_index/doc/tutorial/indices.html#rearrange). + + This version also includes a number of optimizations and usage improvements. + For a complete list of changes, see the library [release + notes](/doc/libs/1_34_0/libs/multi_index/doc/release_notes.html#boost_1_34). +* [Optional + Library](/doc/libs/1_34_0/libs/optional/index.html): + + + `boost::none\_t and + boost::none` now added to Optional's documentation + + Relational operators now directly support arguments of type `'T'` and `'none\_t'` + + operator->() now also works with reference types. + + Helper functions `make\_optional(val), make\_optional(cond,val) and get\_optional\_value\_or(opt,alternative\_value)` + added. + + Constructor taking a boolean condition (as well as a value) added. + + Member function `get\_value\_or(alternative\_value)` added. + + Incompatbility bug with mpl::apply<> fixed. + + Converting assignment bug with uninitialized lvalues fixed. +* [Parameter + Library](/doc/libs/1_34_0/libs/parameter/index.html): + + + Every ArgumentPack is now a valid [MPL + Forward Sequence.](/doc/libs/1_34_0/libs/mpl/doc/refmanual/forward-sequence.html) + + Support for unnamed arguments (those whose keyword is deduced from + their types) is added. + + Support for named and unnamed template arguments is added. + + New overload generation macros solve the [forwarding + problem](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm) directly. + + See also the Python library changes, below. +* [Pointer + Container Library](/doc/libs/1_34_0/libs/ptr_container/index.html): + + + Support for serialization via [Boost.Serialization.](/doc/libs/1_34_0/libs/serialization/index.html) + + Exceptions can be disabled by defining the macro BOOST\_PTR\_CONTAINER\_NO\_EXCEPTIONS + before including any header. This macro is defined by default if + BOOST\_NO\_EXCEPTIONS is defined. + + Additional `std::auto\_ptr` + overloads added s.t. one can also pass `std::auto\_ptr` instead of only `T\*` + arguments to member functions. + + `transfer()` + now has weaker requirements s.t. one can transfer objects from `ptr\_container` + to `ptr\_container`, +* [Python Library](/doc/libs/1_34_0/libs/python/index.html): + + + Boost.Python now automatically appends C++ signatures to docstrings. + The new [docstring\_options.hpp](/doc/libs/1_34_0/libs/python/doc/v2/docstring_options.html) + header is available to control the content of docstrings. + + [`stl\_input\_iterator`](/doc/libs/1_34_0/libs/python/doc/v2/stl_iterator.html#stl_input_iterator-spec), for + turning a Python iterable object into an STL input iterator, from + Eric Niebler. + + Support for `void\*` + conversions is added. + + Integrated support for wrapping C++ functions built with the parameter + library; keyword names are automatically known to docsstrings. + + Enhancements to the API for better embedding support (`boost::python::import()`, + `boost::python::exec()`, + and `boost::python::exec\_file()`). +* [Signals Library](/doc/libs/1_34_0/doc/html/signals.html): More + improvements to signal invocation performance from Robert Zeh. +* [Smart + Pointers Library](/doc/libs/1_34_0/libs/smart_ptr/smart_ptr.htm): + + + [Allocator + support](/doc/libs/1_34_0/libs/smart_ptr/shared_ptr.htm#allocator_constructor) as proposed in [N1851](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1851.pdf) + (162 Kb PDF). + + [`pointer\_cast`](/doc/libs/1_34_0/libs/smart_ptr/pointer_cast.html) and [`pointer\_to\_other`](/doc/libs/1_34_0/libs/smart_ptr/pointer_to_other.html) utilities + to allow pointer-independent code, from Ion Gaztanaga. +* [String + Algorithm Library](/doc/libs/1_34_0/libs/algorithm/string/index.html): + + + `lexicographical\_compare` + + `join` + + New comparison predicates `is\_less`, + `is\_not\_greater`. + + Negative indexes support (like Perl) in various algorihtms (`\*\_head/tail`, + `\*\_nth`). +* [Wave Library](/doc/libs/1_34_0/libs/wave/index.html): + + + Wave now correctly recognizes pp-number tokens as mandated by the + C++ Standard, which are converted to C++ tokens right before they + are returned from the library. + + Several new preprocessing hooks have been added. For a complete description + please refer to the related documentation page: [The + Context Policy](/doc/libs/1_34_0/libs/wave/doc/class_reference_ctxpolicy.html). + + Shared library (dll) support has been added for the generated Wave + libraries. + + The overall error handling has been improved. It is now possible + to recover and continue after an error or a warning was issued. + + Support for optional comment and/or full whitespace preservation + in the generated output stream has been added. + + The Wave library now performs automatic include guard detection to + avoid accessing header files more than once, if appropriate. + + Full interactive mode has been added to the Wave tool. Now the Wave + tool can be used just like Python or Perl for instance to interactively + try out your BOOST\_PP macros. Additionally it is now possible to + load and save the current state of an interactive session (macro + tables et.al.). + + The overall performance has been improved by upto 40-60%, depending + on the concrete files to process. + + Support for new pragmas has been added allowing to control certain + library features from inside the preprocessed sources (partial output + redirection, control of generated whitespace and #line directives). + + Optional support for #pragma message "..." has been added. + + This version also includes a number of bug fixes and usage improvements. + For a complete list of changes, see the libraries [change + log](/doc/libs/1_34_0/libs/wave/ChangeLog). + +### Supported Compilers + Boost is tested on a wide range of compilers and platforms. Since Boost libraries + rely on modern C++ features not available in all compilers, not all Boost libraries + will work with every compiler. The following compilers and platforms have been + extensively tested with Boost, although many other compilers and platforms + will work as well. For more information, see the [regression + test results](https://www.boost.org/regression/release/user/). + + + +* [Apple GCC](http://developer.apple.com/) 4.0.1 on Mac + OS X. +* [Borland C++](http://www.codegear.com/products/cppbuilder) + 5.8.2 on Windows. +* [GNU C++](http://gcc.gnu.org/) + + + 3.2.x., 3.3.x, 3.4.x, 4.0.x, 4.1.x on Linux + + 4.1.x on Solaris + + 3.4.x on Windows +* [HP aC++ A.06.14](http://h30097.www3.hp.com/cplus/). +* [Intel + C++](http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm) 9.1 on Windows, 9.0 on Linux. +* [Metrowerks CodeWarrior](http://www.metrowerks.com/) + 9.4 on Windows. +* [Microsoft Visual C++](http://msdn.microsoft.com/visualc/) + 6.0 (sp5, with and without STLport), 7.0, 7.1, 8.0. Note: Boost does not + support the non-standard "Safe" C++ Library shipping with Visual + C++ 8.0, which may result in many spurious warnings from Boost headers + and other standards-conforming C++ code. To suppress these warnings, define + the macro `\_SCL\_SECURE\_NO\_DEPRECATE`. +* [Sun + Studio 11](http://developers.sun.com/sunstudio/compilers_index.html) on Solaris. + +### Acknowledgements +[Thomas Witt](/users/people/thomas_witt.html) managed this + release. + + A great number of people contributed their time and expertise to make this + release possible. Special thanks go to Vladimir Prus for making Boost.Build + version 2 a reality, David Abrahams for authoring a new getting started guide + and Greg D. for answering countless questions. + + + + + + + + + + + + diff --git a/users/history/version_1_34_1.html b/users/history/version_1_34_1.html new file mode 100644 index 0000000..b05bf8f --- /dev/null +++ b/users/history/version_1_34_1.html @@ -0,0 +1,104 @@ +--- +title: Version 1.34.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.34.1 + +/\*\*/ + + + + + + + +Version 1.34.1 +============== + +Version 1.34.1 +-------------- + + +July 24th, 2007 12:00 GMT + + +[Documentation](/doc/libs/1_34_1/) + + +Downloads| Platform | File | +| unix | [boost\_1\_34\_1.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.34.1/boost_1_34_1.tar.bz2) | +| [boost\_1\_34\_1.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.34.1/boost_1_34_1.tar.gz) | +| windows | [boost\_1\_34\_1.7z](http://sourceforge.net/projects/boost/files/boost/1.34.1/boost_1_34_1.7z) | +| [boost\_1\_34\_1.zip](http://sourceforge.net/projects/boost/files/boost/1.34.1/boost_1_34_1.zip) | + + + This is a bug fix release addressing many problems with the 1.34.0 release. It + is a recommended upgrade for all users of Boost 1.34.0. For a complete list of + fixes see [Boost + Trac](http://svn.boost.org/trac/boost/query?status=closed&milestone=Boost+1.34.1). + +### Supported Compilers + New in this release is improved support for the IBM XL C/C++ compiler. + + Boost is tested on a wide range of compilers and platforms. Since Boost libraries + rely on modern C++ features not available in all compilers, not all Boost libraries + will work with every compiler. New in this release The following compilers + and platforms have been extensively tested with Boost, although many other + compilers and platforms will work as well. For more information, see the [regression test results](https://www.boost.org/regression/release/user/). + + + +* [Apple GCC](http://developer.apple.com/) 4.0.1 on Mac + OS X. +* [Borland C++](http://www.codegear.com/products/cppbuilder) + 5.8.2 on Windows. +* [GNU C++](http://gcc.gnu.org/) + + + 3.2.x., 3.3.x, 3.4.x, 4.0.x, 4.1.x on Linux + + 4.1.x on Solaris + + 3.4.x on Windows +* [HP C++ for Tru64 UNIX 7.1](http://h30097.www3.hp.com/cplus/). +* [HP aC++ A.06.14](http://www.hp.com/go/c++). +* [Intel + C++](http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm) 9.1 on Windows, 9.0 on Linux. +* [Metrowerks CodeWarrior](http://www.metrowerks.com/) + 9.4 on Windows. +* [Microsoft Visual C++](http://msdn.microsoft.com/visualc/) + 6.0 (sp5, with and without STLport), 7.0, 7.1, 8.0. Note: Boost does not + support the non-standard "Safe" C++ Library shipping with Visual + C++ 8.0, which may result in many spurious warnings from Boost headers + and other standards-conforming C++ code. To suppress these warnings, define + the macro `\_SCL\_SECURE\_NO\_DEPRECATE`. +* [Sun Studio 11](http://developers.sun.com/sunstudio/index.jsp) + on Solaris. + +### Acknowledgements +[Thomas Witt](/users/people/thomas_witt.html) managed this + release. + + A great number of people contributed their time and expertise to make this + release possible. Special thanks go to Kim Barrett consolidating Boost.Iostreams + changes from various branches and Rene Rivera for general build and installation + support. + + + + + + + + + + + + diff --git a/users/history/version_1_35_0.html b/users/history/version_1_35_0.html new file mode 100644 index 0000000..fb31da7 --- /dev/null +++ b/users/history/version_1_35_0.html @@ -0,0 +1,273 @@ +--- +title: Version 1.35.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.35.0 + +/\*\*/ + + + + + + + +Version 1.35.0 +============== + +Version 1.35.0 +-------------- + + +March 29th, 2008 12:00 GMT + + +[Documentation](/doc/libs/1_35_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_35\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.35.0/boost_1_35_0.tar.bz2) | +| [boost\_1\_35\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.35.0/boost_1_35_0.tar.gz) | +| windows | [boost\_1\_35\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.35.0/boost_1_35_0.7z) | +| [boost\_1\_35\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.35.0/boost_1_35_0.zip) | + + +### New Libraries + + +* [Asio](/libs/asio/index.html): Portable networking, + including sockets, timers, hostname resolution and socket iostreams, from + Chris Kohlhoff. +* [Bimap](/libs/bimap/index.html): Boost.Bimap is + a bidirectional maps library for C++. With Boost.Bimap you can create associative + containers in which both types can be used as key, from Matias Capeletto. +* [Circular Buffer](/libs/circular_buffer/index.html): STL + compliant container also known as ring or cyclic buffer, from Jan Gaspar. +* [Function Types](/libs/function_types/index.html): + Boost.FunctionTypes + provides functionality to classify, decompose and synthesize function, + function pointer, function reference and pointer to member types. From + Tobias Schwinger. +* [Fusion](/libs/fusion/index.html): + Library for + working with tuples, including various containers, algorithms, etc. From + Joel de Guzman, Dan Marsden and Tobias Schwinger. +* [GIL](/libs/gil/doc/index.html): + Generic Image + Library, from Lubomir Bourdev and Hailin Jin. +* [Interprocess](/libs/interprocess/index.html): + Shared + memory, memory mapped files, process-shared mutexes, condition variables, + containers and allocators, from Ion Gaztañaga. +* [Intrusive](/libs/intrusive/index.html): + Intrusive + containers and algorithms, from Ion Gaztañaga. +* [Math/Special + Functions](/libs/math/doc/sf_and_dist/html/index.html): + A wide selection of mathematical special functions from + John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang. +* [Math/Statistical + Distributions](/libs/math/doc/sf_and_dist/html/index.html): + A wide selection of univariate statistical distributions + and functions that operate on them from John Maddock and Paul Bristow +* [MPI](/doc/html/mpi.html): + Message Passing Interface + library, for use in distributed-memory parallel application programming, + from Douglas Gregor and Matthias Troyer. +* [System](/libs/system/index.html): + Operating system + support, including the diagnostics support that will be part of the C++0x + standard library, from Beman Dawes. + +### Updated Libraries + + +* [Graph](/libs/graph/doc/index.html): + Generic graph + components and algorithms. Highlights: + + + `kolmogorov\_max\_flow`, + from Stephan Diederich as part of the 2006 Google Summer of Code. + + `read\_dimacs\_max\_flow` + and `write\_dimacs\_max\_flow` + for max-flow problems, from Stephan Diederich. + + `read\_graphml` and + `write\_graphml` for + GraphML input/output, from Tiago de Paula Peixoto. + + `minimum\_cycle\_ratio` + and `maximum\_cycle\_ratio`, + from Dmitry Bufistov and Andrey Parfenov. + + `boyer\_myrvold\_planarity\_test`, + along with a suite of algorithms for planar graphs, from Aaron Windsor. + + LEDA Adaptor improvements, from Jens Müller. +* [Hash](/libs/functional/hash/index.html): + A TR1 + hash function object, from Daniel James. Highlights: + + + Support for `long long`, + `std::complex`. + + Improved the algorithm for hashing floating point numbers. + + A few bug and warning fixes. +* [Iostreams](/libs/iostreams/index.html): Framework + for defining streams, stream buffers and i/o filters, from Jonathan Turkanis. + Highlights: + + + Clarified the semantics of close(). This fixes several bugs but will + break some existing code. See [Release + Notes](/libs/iostreams/doc/index.html?path=12) for details. + + Numerous other bug fixes and optimizations. +* [Multi Array](/libs/multi_array/index.html): + + + Added "dimensionality" compile-time constante to the MultiArray + concept. + + For greater control over error situations, uses of C++ assert have + been replaced with BOOST\_ASSERT. + + Fixed a bug with simultaneous resizing and reindexing. +* [Multi-index Containers](/libs/multi_index/doc/index.html): + + + New [`global\_fun`](/libs/multi_index/doc/tutorial/key_extraction.html#global_fun) predefined key + extractor. + + Added [`iterator\_to`](/libs/multi_index/doc/tutorial/indices.html#iterator_to) facility. + + Included [support + for non-standard allocators](/libs/multi_index/doc/tutorial/creation.html#special_allocator) such as those of [Boost.Interprocess](/libs/interprocess/index.html), + which makes `multi\_index\_container`s + placeable in shared memory. + + New versions of `modify` + and `modify\_key` with + rollback, as described in the [tutorial](/libs/multi_index/doc/tutorial/basics.html#ord_updating). + + A number of optimizations and minor improvements have also been included. + For a complete list of changes, see the library [release + notes](/libs/multi_index/doc/release_notes.html#boost_1_35). +* [Serialization](/libs/serialization/index.html): + Boost.Serialization + has been updated with optimizations for dense arrays. +* [Thread](/libs/thread/index.html): + + + The Thread library has been updated to be more in line with the C++0x + working draft. + + Instances of boost::thread and of the various lock types are now + movable. + + Threads can be interrupted at interruption points. + + Condition variables can now be used with any type that implements + the Lockable concept, through the use of `boost::condition\_variable\_any` + (`boost::condition` is a typedef to `boost::condition\_variable\_any`, provided + for backwards compatibility). `boost::condition\_variable` + is provided as an optimization, and will only work with `boost::unique\_lock` + (`boost::mutex::scoped\_lock`). + + Thread IDs are separated from boost::thread, so a thread can obtain + it's own ID (using `boost::this\_thread::get\_id()`), and IDs can be used as keys in + associative containers, as they have the full set of comparison operators. + + Timeouts are now implemented using the Boost DateTime library, through + a typedef `boost::system\_time` for absolute timeouts, + and with support for relative timeouts in many cases. `boost::xtime` is supported for backwards + compatibility only. + + Locks are implemented as publicly accessible templates `boost::lock\_guard`, `boost::unique\_lock`, + `boost::shared\_lock`, and `boost::upgrade\_lock`, which are templated + on the type of the mutex. The Lockable concept has been extended + to include publicly available `lock()` and `unlock()` member functions, which are used + by the lock types. + + `boost::try\_mutex` has been removed, and + the functionality subsumed into `boost::mutex`. + `boost::try\_mutex` is left as a typedef, + but is no longer a separate class. + + `boost::recursive\_try\_mutex` has been removed, + and the functionality subsumed into `boost::recursive\_mutex`. + `boost::recursive\_try\_mutex` is left as + a typedef, but is no longer a separate class. + + `boost::detail::thread::lock\_ops` has been removed. Code + that relies on the `lock\_ops` + implementation detail will no longer work, as this has been removed, + as it is no longer necessary now that mutex types now have public + `lock()` + and `unlock()` + member functions. + + `scoped\_lock` constructors + with a second parameter of type bool are no longer provided. With + previous boost releases, `boost::mutex::scoped\_lock + some\_lock(some\_mutex,false);` + could be used to create a lock object that was associated with a + mutex, but did not lock it on construction. This facility has now + been replaced with the constructor that takes a `boost::defer\_lock\_type` + as the second parameter: `boost::mutex::scoped\_lock + some\_lock(some\_mutex,boost::defer\_lock);` + + The broken `boost::read\_write\_mutex` + has been replaced with `boost::shared\_mutex`. +* [Wave](/libs/wave/index.html): Standards conformant + implementation of the mandated C99/C++ preprocessor functionality packed + behind an easy to use iterator interface, from Hartmut Kaiser. Highlights: + + + Added the possibility to continue the preprocessing after an error + occured. + + Added the macro introspection API to the wave::context object. + + Added threading support to the library. + + Improved the overall performance by upto 30%. + + Changed and unified preprocessor hook interface (this is an interface + breaking change!), added several new preprocessor hook functions. + + Added serialization support. + + Added new examples (for instance: Hannibal - a partial C++ parser, + by Danny Havenith). + + Added a new lexical analyzer based on Ben Hansons Lexertl library. + + Fixed a large number of other bugs and problems. +* [Xpressive](/libs/xpressive/index.html): Regular + expressions that can be written as strings or as expression templates, + and that can refer to each other and themselves recursively with the power + of context-free grammars, from Eric Niebler. Highlights: + + + Added *semantic actions* to static regexes. A + semantic action is code that executes when part of a regular expression + matches. + + Added *custom assertions* to static regexes. A + custom assertion is a Boolean predicate that can participate in the + regex match. + + Added *named regexes* for embedding a static or + dynamic regex into a dynamic regex. This can be used to create dynamic + regex grammars. + + Added *named captures* to dynamic regexes, like + Perl. + +### Supported Compilers + The following compilers are officially supported in this release: + + + +* HP aC++ A.06.14 on HP-UX +* Darwin GCC 4.01. +* GNU GCC up to version 4.2.1, on Linux and Solaris. +* Intel C++ 9.1 on Linux. +* Intel C++ 10.1 on Windows. +* Microsoft Visual C++ 7.1 and 8 on Windows (Visual Sudio .NET 2003 and 2005). + In addition the following compilers should be well supported, but weren't part + of our release criteria for 1.35: + + + +* IBM Visual Age 9.0 on AIX. +* Intel C++ 10 and later on Linux. +* GNU GCC 4.3 and later on Linux and Solaris. +* Microsoft Visual C++ 9 (Visual Studio .NET 2008). + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html) managed this + release. + + + + + + + + + + + + diff --git a/users/history/version_1_36_0.html b/users/history/version_1_36_0.html new file mode 100644 index 0000000..349c0fa --- /dev/null +++ b/users/history/version_1_36_0.html @@ -0,0 +1,253 @@ +--- +title: Version 1.36.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.36.0 + +/\*\*/ + + + + + + + +Version 1.36.0 +============== + +Version 1.36.0 +-------------- + + +August 14th, 2008 12:00 GMT + + +[Documentation](/doc/libs/1_36_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_36\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.36.0/boost_1_36_0.tar.bz2) | +| [boost\_1\_36\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.36.0/boost_1_36_0.tar.gz) | +| windows | [boost\_1\_36\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.36.0/boost_1_36_0.7z) | +| [boost\_1\_36\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.36.0/boost_1_36_0.zip) | + + +### New Libraries + + +* [Accumulators](/libs/accumulators/index.html): Framework + for incremental calculation, and collection of statistical accumulators, + from Eric Niebler. +* [Exception](/libs/exception/doc/boost-exception.html): + A + library for transporting of arbitrary data in exception objects, and transporting + of exceptions between threads, from Emil Dotchevski. +* [Units](/libs/units/index.html): + Zero-overhead + dimensional analysis and unit/quantity manipulation and conversion, from + Matthias Schabel and Steven Watanabe +* [Unordered](/libs/unordered/index.html): + Unordered + associative containers, from Daniel James. + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Added support for serial ports. + + Added support for UNIX domain sockets. + + Added support for raw sockets and ICMP. + + Added wrappers for POSIX stream-oriented file descriptors (excluding + regular files). + + Added wrappers for Windows stream-oriented `HANDLE`s + such as named pipes (requires `HANDLE`s + that work with I/O completion ports). + + Added wrappers for Windows random-access `HANDLE`s + such as files (requires `HANDLE`s + that work with I/O completion ports). + + Added support for reactor-style operations (i.e. they report readiness + but perform no I/O) using a new `null\_buffers` + type. + + Added an iterator type for bytewise traversal of buffer sequences. + + Added new `read\_until()` and `async\_read\_until()` overloads that take a user-defined + function object for locating message boundaries. + + Added an experimental two-lock queue (enabled by defining `BOOST\_ASIO\_ENABLE\_TWO\_LOCK\_QUEUE`) + that may provide better `io\_service` + scalability across many processors. + + Various fixes, performance improvements, and more complete coverage + of the custom memory allocation support. +* [Assign](/libs/assign/index.html): +`list\_of()` + (and its variants) now has overloaded comparison operators. This allows + you to write test code such as `BOOST\_CHECK\_EQUAL( my\_container, list\_of(2)(3)(4)(5) +);`. +* [Circular Buffer](/libs/circular_buffer/index.html): + + + Default constructor now doesn't allocate memory, and sets the capacity + of the buffer to 0 +* [Foreach](/libs/foreach/index.html): `BOOST\_FOREACH` macro for easily iterating + over the elements of a sequence, from Eric Niebler. + + + New `BOOST\_REVERSE\_FOREACH` + macro for iterating over a sequence in reverse. +* [Function](/libs/function/index.html): + + + Improved allocator support, from Emil Dotchevski. +* [Hash](/libs/functional/hash/index.html): + Minor + updates and fixes, for more info see the [change + log](/doc/html/hash/changes.html#hash.changes.boost_1_36_0). +* [Interprocess](/libs/interprocess/index.html): + + + Added anonymous shared memory for UNIX systems. + + Fixed missing move semantics on managed memory classes. + + Added copy\_on\_write and open\_read\_only options for shared memory + and mapped file managed classes. + + `shared\_ptr` is movable + and supports aliasing. +* [Intrusive](/libs/intrusive/index.html): + + + Added `linear<>` + and `cache\_last<>` + options to singly linked lists. + + Added `optimize\_multikey<>` option to unordered container + hooks. + + Optimized unordered containers when `store\_hash` + option is used in the hook. + + Implementation changed to avoid explicit use of `try`-`catch` blocks and be compilable with + exceptions disabled. +* [Math](/libs/math/doc/sf_and_dist/html/index.html): + + + Added new non-central Chi-Square, Beta, F and T distributions. + + Added Exponential Integral and Zeta special functions. + + Added Rounding, Truncation, and Unit-in-the-last-place functions. + + Added support for compile time powers of a runtime base. + + Added a few SSE2 based optimisations for the Lanczos approximations. +* [MPI](/doc/html/mpi.html): + + + Added support for non-blocking operations in Python, from Andreas + Klöckner. + + Added support for graph topologies. +* [Multi-index Containers](/libs/multi_index/doc/index.html): + Minor + additions and maintenance fixes. Consult the library [release + notes](/libs/multi_index/doc/release_notes.html#boost_1_36) for further information. +* [PtrContainer](/libs/ptr_container/index.html): + Support + for a few more containers, and addition of insert iterators. For details + see [upgrading + details](/libs/ptr_container/doc/ptr_container.html#upgrading-from-boost-v-1-35). +* [Spirit](/libs/spirit/index.html): + Integrated the + "Classic" Spirit V1.8.x code base with Spirit V2, "The New + Generation". See [Change + Log](/libs/spirit/classic/change_log.html). +* [Thread](/libs/thread/index.html): + + + New generic `lock` + and `try\_lock` functions + for locking multiple mutexes at once. + + Rvalue reference support for move semantics where the compilers supports + it. + + A few bugs fixed and missing functions added (including the serious + win32 condition variable bug). + + `scoped\_try\_lock` types + are now backwards-compatible with Boost 1.34.0 and previous releases. + + Support for passing function arguments to the thread function by + supplying additional arguments to the `thread` + constructor. + + Backwards-compatibility overloads added for `timed\_lock` + and `timed\_wait` functions + to allow use of `xtime` + for timeouts. +* [Wave](/libs/wave/index.html): + + + Wave V2.0 is a new major release introducing some breaking API changes, + preventing it to be used with Boost versions earlier than V1.36.0. + Mainly, the API and hook interface have been streamlined for more + consistency. + + Fixed a couple of bugs, improved regression test system to include + testing of the preporcessing hooks interface (for details see: [Changelog](/libs/wave/ChangeLog)). +* [Xpressive](/libs/xpressive/index.html): + Regular + expressions that can be written as strings or as expression templates, + and that can refer to each other and themselves recursively with the power + of context-free grammars, from Eric Niebler. + + + `skip()` + for specifying which parts of the input sequence to ignore when matching + it against a regex. + + `regex\_replace()` + accepts formatter objects and formatter expressions in addition to + format strings. + + Range-based `regex\_replace()` algorithm. + + Fix crash when semantic actions are placed in look-aheads, look-behinds + or independent sub-expressions. + +### Compilers Tested + Boost's primary test compilers are: + + + +* GCC 4.01 on Mac OS X 10.4.10 with both Intel and Power PC +* GCC 4.2.3 on Ubuntu Linux 8.04.1 +* HP C/aC++ B3910B A.06.17 on HP-UX 64-bit +* Visual C++ 9.0 SP1 beta, 8.0 SP1, and 7.1, all on Windows XP SP-2 + Boost's additional test compilers include: + + + +* GCC 4.2.1 on FreeBSD-7 +* GCC 4.1.2 on NetBSD +* HP aCC on OS: HP-UX B.11.31 U ia64 and HP-UX B.11.31 9000/800 RISC +* IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version 5.3.0.40 +* Intel 9.1, 10.0, and 10.1, on Mac OS X 10.4.1 +* Compaq C++ V7.1-006 for Compaq Tru64 Unix on an OSF1 V5.1 platform. +* Sun C++ 5.7, 5.8, 5.9 and GCC 3.4.6 on Sun Solaris 5.10. +* On Linux: + + + GCC 3.4.3, 4.0.1, 4.2.1, 4.3.0. + + GCC 4.3.0 with C++0x extensions. + + GCC 3.4.6, 4.1.1, 4.2.1 on 64 bit linux. + + Intel C++ 8.1, 9.0 and 9.1. + + QLogic PathScale(TM) Compiler Suite: Version 3.1 + + pgCC 7.2-3 64-bit target on x86-64 Linux +* On Windows: + + + Intel 10.1, with Visual C++ 9 backend. + + Lots of tests on Visual C++ 7.1, 8.0, 9.0 + + Visual C++ 7.1 with Apache C++ Standard Library 4.2.x branch. + + Visual C++ 8.0 with STLport 5.1 + + Visual C++ 8.0 with STLport 5.1 cross-compiling for Windows Mobile + 5.0 Pocket PC SDK (ARMV4I). + + Borland 5.6.4, 5.8.2, 5.9.3 + + 64 bit Intel 10.1, with Visual C++ 9 backend. + + 64 bit Visual C++ 9. + + Comeau C++ 4.3.10.1 beta 2, with Visual C++ 9 backend. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), [Rene + Rivera](/users/people/rene_rivera.html), and Daniel James managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_37_0.html b/users/history/version_1_37_0.html new file mode 100644 index 0000000..55daa3a --- /dev/null +++ b/users/history/version_1_37_0.html @@ -0,0 +1,186 @@ +--- +title: Version 1.37.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.37.0 + +/\*\*/ + + + + + + + +Version 1.37.0 +============== + +Version 1.37.0 +-------------- + + +November 3rd, 2008 12:00 GMT + + +[Documentation](/doc/libs/1_37_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_37\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.37.0/boost_1_37_0.tar.bz2) | +| [boost\_1\_37\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.37.0/boost_1_37_0.tar.gz) | +| windows | [boost\_1\_37\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.37.0/boost_1_37_0.7z) | +| [boost\_1\_37\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.37.0/boost_1_37_0.zip) | + + +### New Libraries + + +* [Proto](/libs/proto/index.html): + + + Expression template library and compiler construction toolkit for + domain-specific embedded languages, from Eric Niebler. + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Enhanced CompletionCondition concept with the signature `size\_t CompletionCondition(error\_code + ec, + size\_t total)`, where the return value indicates + the maximum number of bytes to be transferred on the next read or + write operation. (The old CompletionCondition signature is still + supported for backwards compatibility). + + New windows::overlapped\_ptr class to allow arbitrary overlapped I/O + functions (such as TransmitFile) to be used with Asio. + + On recent versions of Linux, an eventfd descriptor is now used (rather + than a pipe) to interrupt a blocked select/epoll reactor. + + Added const overloads of lowest\_layer(). + + Synchronous read, write, accept and connect operations are now thread + safe (meaning that it is now permitted to perform concurrent synchronous + operations on an individual socket, if supported by the OS). + + Reactor-based io\_service implementations now use lazy initialisation + to reduce the memory usage of an io\_service object used only as a + message queue. +* [Circular Buffer](/libs/circular_buffer/index.html): + + + Added new methods `is\_linearized()` and `rotate(const\_iterator)`. + + Minor bug fixes and documentation updates. +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Constructor "do the right thing" dispatch, a la standard + sequence containers (follows the proposed resolution of [library + issue 438](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#438), currently in the C++0x working + paper). + + Improvements to documentation, code examples and implementation. +* [Exception](/libs/exception/index.html): + + + Support for non-RTTI builds. + + Optimizations. + + A new macro `BOOST\_THROW\_EXCEPTION` + which can be used instead of `boost::throw\_exception` + when throwing, to automatically record information about the location + of the throw in the exception object. +* [Hash](/libs/functional/hash/index.html): + + + Minor bug fix ([ticket + 2264](http://svn.boost.org/trac/boost/ticket/2264)). +* [Interprocess](/libs/interprocess/index.html): + + + Added placement insertion (`emplace()`, `emplace\_back()`...) methods to containers. + + Containers can be used now in recursive types. + + Minor bug fixes. +* [Intrusive](/libs/intrusive/index.html): + + + Intrusive now takes advantage of compilers with variadic templates. + + `clone\_from` functions + now copy predicates and hash functions of associative containers. + + Added incremental hashing to unordered containers via `incremental<>` + option. + + Minor bug fixes. +* [Math.Special + Functions](/libs/math/doc/sf_and_dist/html/index.html): + Improved accuracy and testing of the inverse hypergeometric + functions. +* [Type Traits](/libs/type_traits/index.html): + Added + better support for the Codegear compiler. +* [Unordered](/libs/unordered/index.html): + + + Rename overload of `emplace` + with hint, to `emplace\_hint` + as specified in [n2691](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2691.pdf). + + Provide forwarding headers at `` + and ``. + + Move all of the implementation inside the `boost/unordered` + directory. + +### Compilers Tested + Boost's primary test compilers are: + + + +* GCC 4.01 on Mac OS X 10.4.10 with both Intel and Power PC +* GCC 4.2.4 on Ubuntu Linux 8.10 +* GCC 4.3.2 on Debian Sid +* GCC 4.2.1 on HP-UX Integrity +* HP C/aC++ B3910B A.06.17 on HP-UX 64-bit +* Visual C++ 9.0 SP1, 8.0, and 7.1 SP1, all on Windows XP + Boost's additional test compilers include: + + + +* GCC 4.1.2 on NetBSD +* HP aCC on OS: HP-UX B.11.31 U ia64 and HP-UX B.11.31 9000/800 RISC +* IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version 5.3.0.40 +* Intel 9.1, 10.0, and 10.1, on Mac OS X 10.4.10 +* Compaq C++ V7.1-006 for Compaq Tru64 Unix on an OSF1 V5.1 platform. +* Sun C++ 5.7, 5.8, 5.9 and GCC 3.4.6 on Sun Solaris 5.10. +* On Linux: + + + GCC 3.4.3, 4.0.1, 4.2.1, 4.2.4, 4.3.2. + + GCC 4.3.2 with C++0x extensions. + + GCC 4.1.1, 4.2.1 on 64 bit linux. + + Intel C++ 8.1, 9.0, 9.1 and 10.0 + + QLogic PathScale(TM) Compiler Suite: Version 3.1 + + Sun Compiler 5.9, 5.10 with stdcxx +* On Windows: + + + Several testers using Visual C++ 7.1, 8.0, 9.0 and 10.0 + + Visual C++ 7.1 with Apache C++ Standard Library 4.2.x branch. + + Visual C++ 8.0 with STLport 5.1 + + Visual C++ 8.0 with STLport 5.1 cross-compiling for Windows Mobile + 5.0 Pocket PC SDK (ARMV4I). + + Intel 10.1, with Visual C++ 9 backend. + + Borland 5.9.3 and 6.10.0 + + 64 bit Intel 10.1, with Visual C++ 9 backend. + + 64 bit Visual C++ 9.0. + + 64-bit Visual C++ 9.0 with Apache C++ Standard Library 4.2.x branch. + + Comeau C++ 4.3.10.1 beta 2, with Visual C++ 9 backend. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), and Daniel + James managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_38_0.html b/users/history/version_1_38_0.html new file mode 100644 index 0000000..6e67cb4 --- /dev/null +++ b/users/history/version_1_38_0.html @@ -0,0 +1,325 @@ +--- +title: Version 1.38.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.38.0 + +/\*\*/ + + + + + + + +Version 1.38.0 +============== + +Version 1.38.0 +-------------- + + +February 8th, 2009 12:00 GMT + + +[Documentation](/doc/libs/1_38_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_38\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.38.0/boost_1_38_0.tar.bz2) | +| [boost\_1\_38\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.38.0/boost_1_38_0.tar.gz) | +| windows | [boost\_1\_38\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.38.0/boost_1_38_0.7z) | +| [boost\_1\_38\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.38.0/boost_1_38_0.zip) | + + +### New Libraries + + +* [Flyweight](/libs/flyweight/index.html): + + + Design pattern to manage large quantities of highly redundant objects, + from Joaquín M López Muñoz. +* [ScopeExit](/libs/scope_exit/doc/html/index.html): + + + Execute arbitrary code at scope exit, from Alexander Nasonov. +* [Swap](/libs/utility/swap.html): + + + Enhanced generic swap function, from Joseph Gauterin. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/index.html): + + + Add `rolling\_sum`, + `rolling\_count` and + `rolling\_mean` accumulators. +* [Any](/doc/html/any.html): + + + Use a by-value argument for `operator=` ([#2311](https://svn.boost.org/trac/boost/ticket/2311)). +* [Asio](/libs/asio/index.html): + + + Improved compatibility with some Windows firewall software. + + Ensured arguments to `windows::overlapped\_ptr::complete()` are correctly passed to the completion + handler ([#2614](https://svn.boost.org/trac/boost/ticket/2614)). + + Fixed a link problem and multicast failure on QNX ([#2504](https://svn.boost.org/trac/boost/ticket/2504), + [#2530](https://svn.boost.org/trac/boost/ticket/2530)). + + Fixed a compile error in SSL support on MinGW / g++ 3.4.5. + + Drop back to using a pipe for notification if eventfd is not available + at runtime on Linux ([#2683](https://svn.boost.org/trac/boost/ticket/2683)). + + Various minor bug and documentation fixes ([#2534](https://svn.boost.org/trac/boost/ticket/2534), + [#2541](https://svn.boost.org/trac/boost/ticket/2541), + [#2607](https://svn.boost.org/trac/boost/ticket/2607), + [#2617](https://svn.boost.org/trac/boost/ticket/2617), + [#2619](https://svn.boost.org/trac/boost/ticket/2619)) +* [Config](/libs/config/index.html): + + + Add new macros BOOST\_NO\_STD\_UNORDERED and BOOST\_NO\_INITIALIZER\_LISTS. + + Added Codegear compiler support. + + Added Dragonfly to the BSD family of configs. + + Updated MSVC's binary ABI settings to match compiler default when + doing 64-bit builds. + + Recognise latest compilers from MS and Intel. +* [Date\_Time](/libs/date_time/index.html): + + + Added support for formatting and reading time durations longer than + 24 hours with new formatter: `%0`. + + Removed the `testfrmwk.hpp` + file from the public include directory. + + Fixed several bugs and compile errors. + + For full details see the [change + history](/doc/libs/1_38_0/doc/html/date_time/details.html#date_time.changes) +* [Exception](/libs/exception/index.html): + + + Improved and more customizable [diagnostic\_information](/libs/exception/doc/diagnostic_information.html) + output. +* [Filesystem](/libs/filesystem/index.html): + + + Fix native(name) test failures on POSIX-like systems. + + Several bugfixes ([#2543](https://svn.boost.org/trac/boost/ticket/2543), + [#2224](https://svn.boost.org/trac/boost/ticket/2224), + [#2531](https://svn.boost.org/trac/boost/ticket/2531), + [#1840](https://svn.boost.org/trac/boost/ticket/1840), + [#2542](https://svn.boost.org/trac/boost/ticket/2542)). +* [Graph](/libs/graph/index.html): + + + Added a new algorithms for Travelling Salesman Problem approximation + (`metric\_tsp\_approx`) + and resource-constrained Shortest Paths (`r\_c\_shortest\_paths`). + + Support for named vertices in `adjacency\_list`. + + A number of bugfixes ( [#416](https://svn.boost.org/trac/boost/ticket/416), + [#1622](https://svn.boost.org/trac/boost/ticket/1622), + [#1700](https://svn.boost.org/trac/boost/ticket/1700), + [#2209](https://svn.boost.org/trac/boost/ticket/2209), + [#2392](https://svn.boost.org/trac/boost/ticket/2392), + [#2460](https://svn.boost.org/trac/boost/ticket/2460), + and [#2550](https://svn.boost.org/trac/boost/ticket/2550)) +* [Hash](/libs/functional/hash/index.html): + + + `boost/functional/detail/container\_fwd.hpp` has been moved to `boost/detail/container\_fwd.hpp`. The current location is deprecated. + + For more detail, see the [library + changelog](/doc/html/hash/changes.html#hash.changes.boost_1_38_0). +* [Interprocess](/libs/interprocess/index.html): + + + Updated documentation to show rvalue-references functions instead + of emulation functions. + + More non-copyable classes are now movable. + + Move-constructor and assignments now leave moved object in default-constructed + state instead of just swapping contents. + + Several bugfixes ([#2391](https://svn.boost.org/trac/boost/ticket/2391), + [#2431](https://svn.boost.org/trac/boost/ticket/2431), + [#1390](https://svn.boost.org/trac/boost/ticket/1390), + [#2570](https://svn.boost.org/trac/boost/ticket/2570), + [#2528](https://svn.boost.org/trac/boost/ticket/2528)). +* [Intrusive](/libs/intrusive/index.html): + + + New treap-based containers: treap, treap\_set, treap\_multiset. + + Corrected compilation bug for Windows-based 64 bit compilers. + + Corrected exception-safety bugs in container constructors. + + Updated documentation to show rvalue-references functions instead + of emulation functions. +* [Lexical Cast](/libs/conversion/lexical_cast.htm): + + + Changed to work without RTTI when `BOOST\_NO\_TYPEID` + is defined ([#1220](https://svn.boost.org/trac/boost/ticket/1220)). +* [Math](/libs/math/doc/sf_and_dist/html/index.html): + + + Added Johan Råde's optimised floating point classification routines. + + Fixed code so that it compiles in GCC's -pedantic mode (bug report + [#1451](https://svn.boost.org/trac/boost/ticket/1451)). +* [Multi-index Containers](/libs/multi_index/doc/index.html): + Some + redundant type definitions have been deprecated. Consult the library [release notes](/libs/multi_index/doc/release_notes.html#boost_1_38) + for further information. +* [Proto](/libs/proto/index.html): + + + Fix problem with SFINAE of binary operators (Bug [2407](https://svn.boost.org/trac/boost/ticket/2407)). + + Fix `proto::call` transform for callable transforms + with >3 arguments. + + `result\_of::value` changed behavior for array-by-value + terminals. + + `unpack\_expr` requires + only Forward Sequences rather than Random Access Sequences. + + Deprecate legacy undocumented `BOOST\_PROTO\_DEFINE\_(VARARG\_)FUNCTION\_TEMPLATE` + macros. + + Add `BOOST\_PROTO\_REPEAT` + and `BOOST\_PROTO\_LOCAL\_ITERATE` + macros to help with repetitive code generation + + Support for nullary expressions with tag types other than `proto::tag::terminal` + + Allow 0- and 1-argument variants of `proto::or\_` + and `proto::and\_` +* [Regex](/libs/regex/index.html): + + + *Breaking change*: empty expressions, and empty + alternatives are now allowed when using the Perl regular expression + syntax. This change has been added for Perl compatibility, when the + new `syntax\_option\_type` + *no\_empty\_expressions* is set then the old behaviour + is preserved and empty expressions are prohibited. This is issue + [#1081](https://svn.boost.org/trac/boost/ticket/1081). + + Added support for Perl style ${n} expressions in format strings (issue + [#2556](https://svn.boost.org/trac/boost/ticket/2556)). + + Added support for accessing the location of sub-expressions within + the regular expression string (issue [#2269](https://svn.boost.org/trac/boost/ticket/2269)). + + Fixed compiler compatibility issues [#2244](https://svn.boost.org/trac/boost/ticket/2244), + [#2514](https://svn.boost.org/trac/boost/ticket/2514), + and [#2458](https://svn.boost.org/trac/boost/ticket/2244). +* [Thread](/doc/html/thread.html): + + + No longer catches unhandled exceptions in threads as this debuggers + couldn't identify the cause of unhandled exceptions in threads. An + unhandled exception will still cause the application to terminate. +* [TR1](/libs/tr1/index.html): + + + Added support for the TR1 math functions and the unordered containers. +* [Type Traits](/libs/type_traits/index.html): + + + Added support for Codegear intrinsics. + + Minor tweaks to warning suppression and alignment\_of code. +* [Unordered](/libs/unordered/index.html): + + + Use [`boost::swap`](/libs/utility/swap.html). + + Use a larger prime number list for selecting the number of buckets. + + Use [aligned + storage](/libs/type_traits/doc/html/boost_typetraits/category/alignment.html) to store the types. + + Add support for C++0x initializer lists where they're available. + + For more detail, see the [library + changelog](/doc/html/unordered/changes.html#unordered.changes.boost_1_38_0). +* [Xpressive](/libs/xpressive/index.html): + + + `basic\_regex` gets + nested `syntax\_option\_flags` + and `value\_type` typedef, + for compatibility with `std::basic\_regex` + + Ported to Proto v4; Proto v2 at boost/xpressive/proto + has been removed. + + `regex\_error` inherits + from `boost::exception` + +### Other Changes + + +* Experimental support for building Boost with [CMake](http://www.cmake.org/) + has been introduced in this version. For more details see the [wiki](https://svn.boost.org/trac/boost/wiki/CMake), + Discussion is taking place on the [Boost-cmake + mailing list](https://lists.boost.org/mailman/listinfo.cgi/boost-cmake). +* Fixed subversion properties for several files. Most notably, unix shell + scripts should always have unix line endings, even in the windows packages. + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel OS X 10.4.10, 10.5.2 + + GCC 4.0.1 on PowerPC OS X 10.4.9 +* Linux: + + + GCC 4.3.2 on Ubuntu Linux. + + GCC 4.3.3 on Debian "unstable". +* HP-UX: + + + GCC 4.2.1 on HP-UX 64-bit. + + HP C/aC++ B3910B A.06.17 on HP-UX 64-bit. +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1 and 9.0 SP1 on Windows XP. + Boost's additional test compilers include: + + + +* Linux: + + + GCC 4.1.1, 4.2.1 on 64-bit Red Hat Enterprise Linux + + GCC 4.1.2 on 64-bit Redhat Server 5.1 + + GCC 3.4.3, GCC 4.0.1, GCC 4.2.4 and GCC 4.3.2 on Red Hat Enterprise + Linux + + GCC 4.3.2 with C++0x extensions + + GCC 4.2.1 on OpenSuSE Linux + + pgCC 8.0-0a 64-bit target on Red Hat Enterprise Linux + + QLogic PathScale(TM) Compiler Suite: Version 3.1 on Red Hat Enterprise + Linux +* OS X: + + + Intel 9.1, 10.0 on OS X 10.4.10 + + Intel 10.1, 11.0 on OS X 10.5.2 +* Windows: + + + Visual C++ 9.0 on Vista EE 64-bit. + + Visual C++ 9.0 express on Vista 32-bit. + + Visual C++ 9.0 on XP 32-bit. + + Visual C++ 8.0, using STLport, on XP and Windows Mobile 5.0 + + Visual C++ 7.1, using STLport, on XP + + Borland 5.9.3 + + Borland 6.1.0 + + Intel C++ 11.0, with a Visual C++ 9.0 backend, on XP 32-bit. + + Intel C++ 11.0, with a Visual C++ 9.0 backend, on Vista 64-bit. + + Comeau 4.3.10.1 beta 2, with a Visual C++ 9.0 backend. + + GCC 3.4.4, on Cygwin +* AIX: + + + IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version + 5.3.0.40 +* FreeBSD: + + + GCC 4.2.1 on FreeBSD 7. +* NetBSD: + + + GCC 4.1.2 on NetBSD 4.0/i386 and NetBSD 4.0/amd64. +* QNX: + + + QNX Software Development Platform 6.4.0 x86 +* Solaris: + + + Sun C++ 5.7, 5.8, 5.9 on Solaris 5.10 + + GCC 3.4.6 on Solaris 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), and Daniel + James managed this release. Thanks to Vicente Botet for helping compile these + release notes. + + + + + + + + + + + + diff --git a/users/history/version_1_39_0.html b/users/history/version_1_39_0.html new file mode 100644 index 0000000..2e96deb --- /dev/null +++ b/users/history/version_1_39_0.html @@ -0,0 +1,268 @@ +--- +title: Version 1.39.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.39.0 + +/\*\*/ + + + + + + + +Version 1.39.0 +============== + +Version 1.39.0 +-------------- + + +May 2nd, 2009 12:00 GMT + + +[Documentation](/doc/libs/1_39_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_39\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.39.0/boost_1_39_0.tar.bz2) | +| [boost\_1\_39\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.39.0/boost_1_39_0.tar.gz) | +| windows | [boost\_1\_39\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.39.0/boost_1_39_0.7z) | +| [boost\_1\_39\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.39.0/boost_1_39_0.zip) | + + +### New Libraries + + +* [Signals2](/libs/signals2/index.html): Managed + signals & slots callback implementation (thread-safe version 2), from + Frank Mori Hess. + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Implement automatic resizing of the bucket array in the internal + hash maps. This is to improve performance for very large numbers + of asynchronous operations and also to reduce memory usage for very + small numbers. A new macro `BOOST\_ASIO\_HASH\_MAP\_BUCKETS` + may be used to tweak the sizes used for the bucket arrays. + + Add performance optimisation for the Windows IOCP backend for when + no timers are used. + + Prevent locale settings from affecting formatting of TCP and UDP + endpoints ([#2682](https://svn.boost.org/trac/boost/ticket/2682)). + + Fix a memory leak that occurred when an asynchronous SSL operation's + completion handler threw an exception ([#2910](https://svn.boost.org/trac/boost/ticket/2910)). + + Fix the implementation of `io\_control()` so that it adheres to the documented + type requirements for IoControlCommand ([#2820](https://svn.boost.org/trac/boost/ticket/2820)). + + Fix incompatibility between Asio and ncurses.h ([#2156](https://svn.boost.org/trac/boost/ticket/2156)). + + On Windows, specifically handle the case when an overlapped `ReadFile` call fails with `ERROR\_MORE\_DATA`. This enables a + hack where a `windows::stream\_handle` + can be used with a message-oriented named pipe ([#2936](https://svn.boost.org/trac/boost/ticket/2936)). + + Fix system call wrappers to always clear the error on success, as + POSIX allows successful system calls to modify errno ([#2953](https://svn.boost.org/trac/boost/ticket/2953)). + + Don't include termios.h if `BOOST\_ASIO\_DISABLE\_SERIAL\_PORT` + is defined ([#2917](https://svn.boost.org/trac/boost/ticket/2917)). + + Cleaned up some more MSVC level 4 warnings ([#2828](https://svn.boost.org/trac/boost/ticket/2828)). + + Various documentation fixes ([#2871](https://svn.boost.org/trac/boost/ticket/2871)). +* [Flyweight](/libs/flyweight/index.html): + + + The [refcounted](/libs/flyweight/doc/tutorial/configuration.html#refcounted) + component was not thread-safe due to an incorrect implementation + and could deadlock under heavy usage conditions. This problem has + been corrected. +* [Foreach](/libs/foreach/index.html): + + + Eliminate shadow warnings on gcc for nested `FOREACH` + loops + + Portability fix for Intel-Win toolset +* [Hash](/libs/functional/hash/index.html): + + + Remove deprecated headers for hashing containers. Everything that + was in them is included in `` + ([#2412](https://svn.boost.org/trac/boost/ticket/2412)). + + Other minor changes, full details in the library [change + log](/doc/html/hash/changes.html#hash.changes.boost_1_39_0). +* [Interprocess](/libs/interprocess/index.html): + + + Increased portability and bug fixes. Full details in the library + [change + log](/doc/html/interprocess/acknowledgements_notes.html#interprocess.acknowledgements_notes.release_notes.release_notes_boost_1_39_00). +* [Intrusive](/libs/intrusive/index.html): + + + Optimizations and bug fixes. Full details in the library [change + log](/doc/html/intrusive/release_notes.html#intrusive.release_notes.release_notes_boost_1_39_00). +* [Program.Options](/libs/program_options/index.html): + + + Multitoken options fixed ([#469](https://svn.boost.org/trac/boost/ticket/469)). +* [Proto](/libs/proto/index.html): + + + Work around incompatibility with standard Linux header. + + Add `proto::noinvoke<>` + to block metafunction invocation in object transforms. +* [PtrContainer](/libs/ptr_container/index.html): + + + Bug fixes from Trac applied. +* [Range](/libs/range/index.html): + + + Bug fixes from Trac applied. +* [Unordered](/libs/unordered/index.html): + + + Fixed regression in 1.38 that prevented unordered from using more + than about 1.5 million buckets ([#2975](https://svn.boost.org/trac/boost/ticket/2975)). + + Minor implementation changes, including [#2756](https://svn.boost.org/trac/boost/ticket/2756). + Full details in the library [change + log](/doc/html/unordered/changes.html#unordered.changes.boost_1_39_0). +* [Xpressive](/libs/xpressive/index.html): + + + Work around for gcc optimization problem resulting in pure virtual + function call runtime error ([#2655](https://svn.boost.org/trac/boost/ticket/2655)). + +### Updated Tools + + +* [Boostbook](/tools/boostbook/index.html): + + + Improved PDF generation. + + Preliminary HTMLHelp support. + + Add default path for callout images. + + Include data members' `` + in the class synopsis. + + Fix bug where a function's `` + wasn't displayed if it was just plain text. + + Support the alt tag in `` + and ``. Use this if the header or macro + name is different to the contents of the tag ([#1977](https://svn.boost.org/trac/boost/ticket/1977)). + + Support links relative to the boost root in `` + tags, using a custom url, see the [linking + documentation](/doc/html/boostbook/together.html#boostbook.linking) for details ([#1166](https://svn.boost.org/trac/boost/ticket/1166)). + + Avoid generating filenames that only differ in case for function, + method and macro documentation. + + Run the docbook chunker quietly, unless boostbook.verbose is set. + This parameter might be used in other places in future releases. + + Make the 1.1 DTD available. + + Fill in some missing reference documentation (partially fixes [#2153](https://svn.boost.org/trac/boost/ticket/2153)). + + Changes to doxygen integration: + + - Support `\throw`. + - Support global variables and enums. + - Better support for documentation written in function and method + bodies. + - Workaround a problem with doxygen 1.5.8's xml output ([#2937](https://svn.boost.org/trac/boost/ticket/2937)). +* [Quickbook](/tools/quickbook/index.html): + + + Return an error code and error count if there are any errors ([#1399](https://svn.boost.org/trac/boost/ticket/1399)). + + Support both windows and cygwin paths at the compile line when compiled + with cygwin. + + Fix some issues with C++ and Python code: + + - Fail gracefully for a mismatched `''`. + - Warn if any unexpected character are encountered and write + them out properly ([#1170](https://svn.boost.org/trac/boost/ticket/1170)). + - Fix a bug for hex encoded characters in strings ([#2860](https://svn.boost.org/trac/boost/ticket/2860)). + + Improved testing, including tests for expected failures. + + Generate valid document info for document types other than `library` ([#2711](https://svn.boost.org/trac/boost/ticket/2711)): + + - Remove library specific attributes. + - Put title before info block. + + Fix a bug when calling templates. + + Less warnings when built using gcc. + + Small documentation improvements ([#1213](https://svn.boost.org/trac/boost/ticket/1213), + [#2701](https://svn.boost.org/trac/boost/ticket/2701)). + + Fix a bug with xinclude pages when outdir is the current directory + ([#2921](https://svn.boost.org/trac/boost/ticket/2921)). + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Tiger and Leopard + + GCC 4.0.1 on PowerPC Tiger +* Linux: + + + GCC 4.3.2 on Ubuntu Linux. + + GCC 4.3.3 on Debian "unstable". +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1 and 9.0 SP1 on Windows XP. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 9.0 on Red Hat Enterprise Linux + + Intel 10.0 on Red Hat Enterprise Linux + + Intel 10.1 on 64-bit Linux Redhat 5.1 Server. + + Intel 10.1 on Suse Linux on 64 bit Itanium + + Intel 11.0 on Red Hat Enterprise Linux + + GCC 4.1.1, 4.2.1 on 64-bit Red Hat Enterprise Linux + + GCC 4.1.2 on 64-bit Redhat Server 5.1 + + GCC 4.1.2 on Suse Linux on 64 bit Itanium + + GCC 3.4.3, GCC 4.0.1, GCC 4.2.4 and GCC 4.3.2 on Red Hat Enterprise + Linux + + GCC 4.3.2 with C++0x extensions on Red Hat Enterprise Linux + + GCC 4.2.1 on OpenSuSE Linux + + QLogic PathScale(TM) Compiler Suite: Version 3.1 on Red Hat Enterprise + Linux + + GNU gcc version 4.2.0 (PathScale 3.2 driver) on 64-bit Red Hat Enterprise + Linux + + Sun 5.9 on Red Hat Enterprise Linux +* OS X: + + + Intel 9.1, 10.1 on Tiger + + Intel 10.1, 11.0 on Leopard + + GCC 4.2.1 on Leopard +* Windows: + + + Visual C++ 9.0 on Vista. + + Visual C++ 9.0, using STLport 5.2, on XP and Windows Mobile 5.0. + + Borland 5.9.3 + + Borland 6.1.0 + + Intel C++ 11.0, with a Visual C++ 9.0 backend, on XP 32-bit. + + Intel C++ 11.0, with a Visual C++ 9.0 backend, on Vista 64-bit. (TODO: + not recently) + + GCC 4.3.3, on Mingw +* AIX: + + + IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version + 5.3.0.40 +* NetBSD: + + + GCC 4.1.2 on NetBSD 4.0/i386 and NetBSD 4.0/amd64. +* Solaris: + + + Sun C++ 5.7, 5.8, 5.9 on Solaris 5.10 + + GCC 3.4.6 on Solaris 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), and Daniel + James managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_40_0.html b/users/history/version_1_40_0.html new file mode 100644 index 0000000..ef22923 --- /dev/null +++ b/users/history/version_1_40_0.html @@ -0,0 +1,314 @@ +--- +title: Version 1.40.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.40.0 + +/\*\*/ + + + + + + + +Version 1.40.0 +============== + +Version 1.40.0 +-------------- + + +August 27th, 2009 17:00 GMT + + +[Documentation](/doc/libs/1_40_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_40\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.40.0/boost_1_40_0.tar.bz2) | +| [boost\_1\_40\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.40.0/boost_1_40_0.tar.gz) | +| windows | [boost\_1\_40\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.40.0/boost_1_40_0.7z) | +| [boost\_1\_40\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.40.0/boost_1_40_0.zip) | + + +### Update + Added missing notes for Graph and Property Map. + + +### Boost.CMake + Boost.CMake is **now distributed separately**. + The cmake build for boost is **BROKEN** in the + tarballs above. See the [Boost.CMake + wiki page](https://svn.boost.org/trac/boost/wiki/CMake) for pointers to working versions. + + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/index.html): + + + Works on GCC 4.4. +* [Asio](/libs/asio/index.html): + + + Added a new ping example to illustrate the use of ICMP sockets. + + Changed the `buffered\*\_stream<>` templates to treat 0-byte + reads and writes as no-ops, to comply with the documented type requirements + for `SyncReadStream`, + `AsyncReadStream`, + `SyncWriteStream` and + `AsyncWriteStream`. + + Changed some instances of the `throw` + keyword to `boost::throw\_exception()` to allow Asio to be used when exception + support is disabled. Note that the SSL wrappers still require exception + support ([#2754](https://svn.boost.org/trac/boost/ticket/2754)). + + Made Asio compatible with the OpenSSL 1.0 beta ([#3256](https://svn.boost.org/trac/boost/ticket/3256)). + + Eliminated a redundant system call in the Solaris /dev/poll + backend. + + Fixed a bug in resizing of the bucket array in the internal hash + maps ([#3095](https://svn.boost.org/trac/boost/ticket/3095)). + + Ensured correct propagation of the error code when a synchronous + accept fails ([#3216](https://svn.boost.org/trac/boost/ticket/3216)). + + Ensured correct propagation of the error code when a synchronous + read or write on a Windows HANDLE fails. + + Fixed failures reported when `\_GLIBCXX\_DEBUG` + is defined ([#3098](https://svn.boost.org/trac/boost/ticket/3098)). + + Fixed custom memory allocation support for timers ([#3107](https://svn.boost.org/trac/boost/ticket/3107)). + + Tidied up various warnings reported by g++ ([#1341](https://svn.boost.org/trac/boost/ticket/1341), + [#2618](https://svn.boost.org/trac/boost/ticket/2618)). + + Various documentation improvements, including more obvious hyperlinks + to function overloads, header file information, examples for the + handler type requirements, and adding enum values to the index ([#3157](https://svn.boost.org/trac/boost/ticket/3157), + [#2620](https://svn.boost.org/trac/boost/ticket/2620)). +* [Circular Buffer](/libs/circular_buffer/index.html): + + + Fixed bugs [#2785](https://svn.boost.org/trac/boost/ticket/2785), + [#3285](https://svn.boost.org/trac/boost/ticket/3285). +* [Foreach](/libs/foreach/index.html): + + + Workaround for conflict with Python headers ([#3000](https://svn.boost.org/trac/boost/ticket/3000)). +* [Function](/libs/function/index.html): + + + Optimize the use of small target objects. + + Make Boost.Function compile under BOOST\_NO\_EXCEPTIONS ([#2499](https://svn.boost.org/trac/boost/ticket/2499), + [#2494](https://svn.boost.org/trac/boost/ticket/2494), + [#2469](https://svn.boost.org/trac/boost/ticket/2469), + [#2466](https://svn.boost.org/trac/boost/ticket/2466), + [#2900](https://svn.boost.org/trac/boost/ticket/2900)) + + Various minor fixes ([#2642](https://svn.boost.org/trac/boost/ticket/2642), + [#2847](https://svn.boost.org/trac/boost/ticket/2847), + [#2929](https://svn.boost.org/trac/boost/ticket/2929) + [#3012](https://svn.boost.org/trac/boost/ticket/3012)) +* [Fusion](/libs/fusion/index.html): + + + Improved compile times for `fusion::vector`. +* [Graph](/libs/graph/index.html): + + + Merged in the [Parallel + Boost Graph Library](/libs/graph_parallel/doc/html/index.html), giving a full suite of graph algorithms + and data structures for distributed-memory computers (such as clusters). + + Updates to the interface of the compressed sparse row graph, including + constructors from unsorted edge lists. + + An implicit grid graph, saving memory over using the former generator. + + New algorithms: Dijkstra's single-source shortest path algorithm + without a separate color map and an algorithm to find maximal common + subgraphs between two graphs. + + Assorted bug fixes. +* [Hash](/libs/functional/hash/index.html): + + + Automatically configure the float functions using template metaprogramming + instead of trying to configure every possibility manually. +* [Interprocess](/libs/interprocess/index.html): + + + Windows shared memory is created in Shared Documents folder so that + it can be shared between services and processes + + Fixed bugs [#2967](https://svn.boost.org/trac/boost/ticket/2967), + [#2973](https://svn.boost.org/trac/boost/ticket/2973), + [#2992](https://svn.boost.org/trac/boost/ticket/2992), + [#3138](https://svn.boost.org/trac/boost/ticket/3138), + [#3166](https://svn.boost.org/trac/boost/ticket/3166), + [#3205](https://svn.boost.org/trac/boost/ticket/3205). +* [Intrusive](/libs/intrusive/index.html): + + + Code cleanup in tree\_algorithms.hpp and avl\_tree\_algorithms.hpp + + Fixed bug [#3164](https://svn.boost.org/trac/boost/ticket/3164). +* [MPL](/libs/mpl/index.html): + + + Added `mpl::char\_` and `mpl::string` + for compile-time string manipulation, based on multichar literals + ([#2905](https://svn.boost.org/trac/boost/ticket/2905)). + + Updated [MPL Reference Manual](/libs/mpl/doc/refmanual.html). + + Bug fixes. +* [Program.Options](/libs/program_options/index.html): + + + Support for building with disabled exceptions ([#2096](https://svn.boost.org/trac/boost/ticket/2096)). + + Unicode parser no longer drops original tokens ([#2425](https://svn.boost.org/trac/boost/ticket/2425)). + + Fixed crash on user-inserted items in `variables\_map` + ([#2782](https://svn.boost.org/trac/boost/ticket/2782)). +* [Property Map](/libs/property_map/index.html): + + + Moved property map code into a separate directory, `boost/property\_map/`. + The old files exist and forward to the new ones; the previous files + directly in `boost/` will be removed in Boost 1.42.0. + + Moved distributed property maps to `boost::graph::parallel` + namespace. + + Added a property map based on a `boost::shared\_array`, + providing a simpler interface. +* [Proto](/libs/proto/index.html): + + + PrimitiveTransforms have stricter conformance to ResultOf protocol. + (Warning: some invalid code may break.) + + Add a sensible default for `proto::\_default`'s + template parameter. + + Improved default evaluation strategy for pointers to members. + + GCC 3.4 portability fixes ([#3021](https://svn.boost.org/trac/boost/ticket/3021)). + + Work around Visual C++'s non-std-compliant ciso646 macros. +* [Random](/libs/random/index.html): + + + Made the constructors of all the generators call the copy constructor + when passed a non-const reference. + + Changed seeding functions to accept any arithmetic type. As a side-effect, + the exact signature of seed changed for some classes. + + Major bug fixes in uniform\_int. +* [Serialization](/libs/serialization/index.html): + + + Removed deprecated headers: `boost/static\_warning.hpp`, + `boost/state\_saver.hpp`, `boost/smart\_cast.hpp`, + `boost/pfto.hpp`. Use the the equivalent headers + in the `boost/serialization/` + directory instead ([#3062](https://svn.boost.org/trac/boost/ticket/3062)). + + `detail::archive\_serializer\_map` should now + be used instead of `detail::archive\_pointer\_iserializer`. + For more details see [the + library release notes](/doc/libs/1_40_0/libs/serialization/doc/release.html). +* [Unordered](/libs/unordered/index.html): + + + Implement `emplace` + for all compilers, not just ones with rvalue references and variadic + templates ([#1978](https://svn.boost.org/trac/boost/ticket/1978)). + + Create less buckets by default. + + Some minor tweaks for better compiler support ([#2908](https://svn.boost.org/trac/boost/ticket/2908), + [#3096](https://svn.boost.org/trac/boost/ticket/3096), + [#3082](https://svn.boost.org/trac/boost/ticket/3082)). +* [Xpressive](/libs/xpressive/index.html): + + + Works on Visual C++ 10.0 ([#3124](https://svn.boost.org/trac/boost/ticket/3124)). + +### Build System + The default naming of libraries in Unix-like environment now matches system + conventions, and does not include various decorations. Naming of libraries + on Cygwin was also fixed. Support for beta versions of Microsoft Visual Studio + 10 was added. With gcc, 64-bit compilation no longer requires that target architecture + be specified. + + +### Updated Tools + + +* [Boostbook](/tools/boostbook/index.html): + + + Hide `INTERNAL ONLY` + enums in doxygen documentation ([#3242](https://svn.boost.org/trac/boost/ticket/3242)). + + Tweaked appearance of member classes/structs/unions in a class synopsis. +* [Quickbook](/tools/quickbook/index.html): + + + Support python code snippets ([#3029](https://svn.boost.org/trac/boost/ticket/3029)). + + Add `teletype` source + mode ([#1202](https://svn.boost.org/trac/boost/ticket/1202)) + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Tiger and Leopard + + GCC 4.0.1 on PowerPC Tiger +* Linux: + + + GCC 4.3.3 on Ubuntu Linux. +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1 and 9.0 SP1 on Windows XP. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 9.0 on Red Hat Enterprise Linux. + + Intel 10.0 on Red Hat Enterprise Linux. + + Intel 10.1 on 64-bit Linux Redhat 5.1 Server. + + Intel 10.1 on Suse Linux on 64 bit Itanium. + + Intel 11.0 on Red Hat Enterprise Linux. + + Intel 11.1 on Red Hat Enterprise Linux. + + GCC 3.4.3, GCC 4.0.1, GCC 4.2.4, GCC 4.3.3 and GCC 4.4.0 on Red Hat + Enterprise Linux. + + GCC 4.3.3 and GCC 4.4.0 with C++0x extensions on Red Hat Enterprise + Linux. + + GCC 4.1.1, 4.2.1 on 64-bit Red Hat Enterprise Linux. + + GCC 4.1.2 on Suse Linux on 64 bit Itanium. + + GCC 4.1.2 on 64-bit Redhat Server 5.1. + + GCC Open64 4.2.2 on Red Hat Enterprise Linux. + + GCC 4.3.4 on Debian unstable. + + QLogic PathScale(TM) Compiler Suite: Version 3.1 on Red Hat Enterprise + Linux. + + GCC version 4.2.0 (PathScale 3.2 driver) on 64-bit Red Hat Enterprise + Linux. + + Sun 5.9 on Red Hat Enterprise Linux. +* OS X: + + + Intel 10.1, 11.0 on Intel Leopard. + + Intel 10.1, 11.0 on Intel Tiger. + + GCC 4.0.1, 4.2.1 on Intel Leopard. + + GCC 4.0.1 on Intel Tiger. + + GCC 4.0.1 on PowerPC Tiger. +* Windows: + + + Visual C++ 7.1 on XP. + + Visual C++ 9.0 on XP. + + Visual C++ 9.0 on Vista. + + Visual C++ 9.0 on Vista 64-bit. + + Visual C++ 9.0, using STLport 5.2, on XP and Windows Mobile 5.0. + + Visual C++ 10.0 beta. + + Borland 5.9.3, 6.1.0, 6.1.3. + + Borland C++ Builder 2007 and 2009. + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 32-bit. + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 64-bit. + + GCC 4.3.3 and 4.4.0, on Mingw with C++0x features. +* AIX: + + + IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version + 5.3.0.40. +* Solaris: + + + Sun C++ 5.7, 5.8, 5.9 on Solaris 5.10. + + GCC 3.4.6 on Solaris 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), and Daniel + James managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_41_0.html b/users/history/version_1_41_0.html new file mode 100644 index 0000000..19b1697 --- /dev/null +++ b/users/history/version_1_41_0.html @@ -0,0 +1,260 @@ +--- +title: Version 1.41.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.41.0 + +/\*\*/ + + + + + + + +Version 1.41.0 +============== + +Version 1.41.0 +-------------- + + +November 17th, 2009 17:00 GMT + + +[Documentation](/doc/libs/1_41_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_41\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.41.0/boost_1_41_0.tar.bz2) | +| [boost\_1\_41\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.41.0/boost_1_41_0.tar.gz) | +| windows | [boost\_1\_41\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.41.0/boost_1_41_0.7z) | +| [boost\_1\_41\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.41.0/boost_1_41_0.zip) | + + +### New Libraries + + +* [Property Tree](/libs/property_tree/index.html): A + tree data structure especially suited to storing configuration data, from + Marcin Kalicinski and Sebastian Redl. + +### Updated Libraries + + +* [DateTime](/libs/date_time/index.html): + + + The default format for time durations is now "`%-%O:%M:%S%F`" + instead of "`%-%H:%M:%S%F`" that was used previously. + In order to retain the old behavior, the format string has to be + specified explicitly during the time IO facet construction ([#1861](https://svn.boost.org/trac/boost/ticket/1861)). + + Gregorian dates now use 32-bit integer type internally on 64-bit + platforms ([#3308](https://svn.boost.org/trac/boost/ticket/3308)). + + See the [full + changelog](/doc/html/date_time/details.html#date_time.changes) for more detail. +* [Filesystem](/libs/filesystem/index.html): + + + Bug fixes: ([#3385](https://svn.boost.org/trac/boost/ticket/3385)). + ([#3528](https://svn.boost.org/trac/boost/ticket/3528)). + ([#3509](https://svn.boost.org/trac/boost/ticket/3509)). +* [Iostreams](/libs/iostreams/index.html): + Some old + unreleased developments. There are still several open issues that should + be fixed in the next version. + + + Add a grep filter ([#1627](https://svn.boost.org/trac/boost/ticket/1627)). + + Support archives with multiple members ([#1896](https://svn.boost.org/trac/boost/ticket/1896)). + + Make `tee` work with + input streams ([#791](https://svn.boost.org/trac/boost/ticket/791)). + + Improved filesystem interoperability. + + Several warnings fixed or suppressed (including [#1618](https://svn.boost.org/trac/boost/ticket/1618), + [#1875](https://svn.boost.org/trac/boost/ticket/1875), + [#2779](https://svn.boost.org/trac/boost/ticket/2779)). + + Various other fixes (including [#1580](https://svn.boost.org/trac/boost/ticket/1580), + [#1671](https://svn.boost.org/trac/boost/ticket/1671)). +* [Math](/libs/math/index.html): + Substantially improved + the performance of the incomplete gamma function and it's inverse: this + enhances the performance of the gamma, poisson, chi-squared and non-central + chi-squared distributions. +* [Multi-index Containers](/libs/multi_index/doc/index.html): + Maintenance + fixes. Consult the library [release + notes](/libs/multi_index/doc/release_notes.html#boost_1_41) for further information. +* [Proto](/libs/proto/index.html): + + + Clean up some MSVC warnings and errors in /Za (disable Microsoft + extensions) mode. + + Fixes for c++0x mode on various compilers. +* [Python](/libs/python/index.html): + Boost.Python + now supports Python 3 (Haoyu Bai's Google Summer of Code project, mentored + by Stefan Seefeld). +* [Regex](/libs/regex/index.html): + Added support + for many Perl 5.10 syntax elements including named sub-expressions, branch + resets and recursive regular expressions. +* [Spirit](/libs/spirit/index.html): This is the + initial official release of the new Spirit V2.1, a completely new library + for parsing, lexing, and output generation. Note: this release is not backwards + compatible with earlier versions. Known issue: `qi::symbol::find` + will match a symbol that starts with the string you're searching for. This + will be fixed in the next version. +* [System](/libs/system/index.html): + + + Bug fix: ([#3559](https://svn.boost.org/trac/boost/ticket/3559)). +* [Thread](/libs/thread/index.html): + + + Support for futures, promises and packaged tasks added + + `boost::thread\_specific\_ptr` is now faster + when there are lots of thread-specific objects + + Some Boost.Thread facilities are now header-only +* [Unordered](/libs/unordered/index.html): + Major + update: + + + Replaced a lot of the macro based implementation with a cleaner template + based implementation. + + Reduced memory use. + + Full details in [the + changelog](/doc/html/unordered/changes.html#unordered.changes.boost_1_41_1). +* [Utility](/libs/utility/index.html): + A "const" + issue of `value\_initialized` + is fixed: Its `data()` + member function and its conversion operator are replaced by overloads for + const and non-const access ([#2548](https://svn.boost.org/trac/boost/ticket/2548)). +* [Wave](/libs/wave/index.html): + See the [changelog](/libs/wave/ChangeLog) + for details. +* [Xpressive](/libs/xpressive/index.html): + + + Fix infinite loop with some uses of \Q...\E quotemeta + ([#3586](https://svn.boost.org/trac/boost/ticket/3586)). + + Eliminate unreachable code warnings on MSVC + + Clean up some MSVC warnings and errors in /Za ("disable Microsoft + extensions") mode. + + Fixes for c++0x mode on various compilers. + +### Build System + A bug preventing "fat" 32-bit + 64-bit builds on OSX has been fixed. + + +### Boost.CMake moved + The cmake version of boost has moved; the Boost.CMmake release will be separate + and will lag the main release slightly, but will also be capable of producing + patch releases as necessary. + + More information on the [Boost + CMake wiki page](https:://svn.boost.org/trac/boost/wiki/CMake). + + +### Updated Tools + + +* [Quickbook 1.5](/tools/quickbook/index.html): + These + changes require your document to use the `[quickbook 1.5]` tag: + + + More intuitive syntax and variable lookup for template calls ([#1174](https://svn.boost.org/trac/boost/ticket/1174), + [#2034](https://svn.boost.org/trac/boost/ticket/2034), + [#2036](https://svn.boost.org/trac/boost/ticket/2036)). + + Image attributes ([#1157](https://svn.boost.org/trac/boost/ticket/1157)) + + Table Ids ([#1194](https://svn.boost.org/trac/boost/ticket/1194)) + + Better handling of whitespace in `section` + syntax. ([#2712](https://svn.boost.org/trac/boost/ticket/2712)) + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Tiger and Leopard. + + GCC 4.0.1 on PowerPC Tiger. +* Linux: + + + GCC 4.4.1 on Ubuntu Linux. + + GCC 4.4 on Debian +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1 and 9.0 SP1 on Windows XP. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 10.1 on Red Hat Enterprise Linux. + + Intel 10.1 on 64-bit Red Hat Enterprise Linux. + + Intel 10.1 on Suse Linux on 64 bit Itanium. + + Intel 11.0 on 32 bit Red Hat Enterprise Linux. + + Intel 11.0 on 64 bit Red Hat Enterprise Linux. + + Intel 11.1 on 64 bit Red Hat Enterprise Linux. + + Intel 11.1 on 64 bit Linux Redhat 5.1 Server. + + GCC 3.4.3, GCC 4.2.4, GCC 4.3.3 and GCC 4.4.1 on Red Hat Enterprise + Linux. + + GCC 4.3.3 and GCC 4.4.1 with C++0x extensions on Red Hat Enterprise + Linux. + + GCC 4.3.3 on 64-bit Redhat Server 5.1. + + GCC 4.3.3 on 64 bit Linux. + + GCC 4.3.4 on Debian unstable. + + GCC 4.3.2 on 64 bit Gentoo. + + QLogic PathScale(TM) Compiler Suite: Version 3.2 on Red Hat Enterprise + Linux. + + Sun 5.9 on Red Hat Enterprise Linux. +* OS X: + + + Intel C++ Compiler 11.1 on Leopard. + + Intel C++ Compiler 10.1, 11.0. + + GCC 4.0.1 on Intel Tiger. + + GCC 4.0.1 on PowerPC Tiger. +* Windows: + + + Visual C++ 7.1, 8,0, 9,0 on XP. + + Visual C++ 9.0 on 32-bit Vista. + + Visual C++ 9.0 on AMD 64-bit Vista. + + Visual C++ 9.0 using STLport 5.2 on XP and Windows Mobile 5.0. + + Visual C++ 10.0 beta 1 with [a + patch for the program options lib](http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=457199). + + Borland/Codegear C++ 5.9.3, 6.1.3 (2009), 6.2.0 (2010). + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 32-bit. + + GCC 4.4.1 on Mingw, with and without C++0x extensions. +* AIX: + + + IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version + 5.3.0.40. +* FreeBSD: + + + GCC 4.2.1 on FreeBSD 7.0. +* Solaris: + + + Sun C++ 5.10 on Solaris 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), and Daniel + James managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_42_0.html b/users/history/version_1_42_0.html new file mode 100644 index 0000000..cf010c0 --- /dev/null +++ b/users/history/version_1_42_0.html @@ -0,0 +1,292 @@ +--- +title: Version 1.42.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.42.0 + +/\*\*/ + + + + + + + +Version 1.42.0 +============== + +Version 1.42.0 +-------------- + + +February 2nd, 2010 14:00 GMT + + +[Documentation](/doc/libs/1_42_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_42\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.tar.bz2) | +| [boost\_1\_42\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.tar.gz) | +| windows | [boost\_1\_42\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.7z) | +| [boost\_1\_42\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip) | + + +### New Libraries + + +* [Uuid](/libs/uuid/index.html): + A universally unique + identifier, from Andy Tompkins. + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Added a new HTTP Server 4 example illustrating the use of stackless + coroutines with Asio. + + Changed handler allocation and invocation to use `boost::addressof` + to get the address of handler objects, rather than applying `operator&` + directly ([#2977](https://svn.boost.org/trac/boost/ticket/2977)). + + Restricted MSVC buffer debugging workaround to 2008, as it causes + a crash with 2010 beta 2 ([#3796](https://svn.boost.org/trac/boost/ticket/3796), + [#3822](https://svn.boost.org/trac/boost/ticket/3822)). + + Fixed a problem with the lifetime of handler memory, where Windows + needs the `OVERLAPPED` + structure to be valid until both the initiating function call has + returned and the completion packet has been delivered. + + Don't block signals while performing system calls, but instead restart + the calls if they are interrupted. + + Documented the guarantee made by strand objects with respect to order + of handler invocation. + + Changed strands to use a pool of implementations, to make copying + of strands cheaper. + + Ensured that kqueue support is enabled for BSD platforms ([#3626](https://svn.boost.org/trac/boost/ticket/3626)). + + Added a `boost\_` prefix + to the `extern "C"` + thread entry point function ([#3809](https://svn.boost.org/trac/boost/ticket/3809)). + + In `getaddrinfo` emulation, + only check the socket type (`SOCK\_STREAM` + or `SOCK\_DGRAM`) if + a service name has been specified. This should allow the emulation + to work with raw sockets. + + Added a workaround for some broken Windows firewalls that make a + socket appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1. + + Applied a fix for reported excessive CPU usage under Solaris ([#3670](https://svn.boost.org/trac/boost/ticket/3670)). + + Added some support for platforms that use older compilers such as + g++ 2.95 ([#3743](https://svn.boost.org/trac/boost/ticket/3743)). +* [Circular Buffer](/libs/circular_buffer/index.html): + + + Added methods erase\_begin(size\_type) and erase\_end(size\_type) with + constant complexity for such types of stored elements which do not + need an explicit destruction e.g. int or double. + + Similarly changed implementation of the clear() method and the destructor + so their complexity is now constant for such types of stored elements + which do not require an explicit destruction (the complexity for + other types remains linear). +* [Fusion](/libs/fusion/index.html): + + + The accumulator is the first argument to the functor of `fusion::fold` and `fusion::accumulate` + ([#2355](https://svn.boost.org/trac/boost/ticket/2355)). + + Added support for associative iterators and views ([#3473](https://svn.boost.org/trac/boost/ticket/3473)). +* [Graph](/libs/graph/index.html): + + + Removed old interface to `compressed\_sparse\_row\_graph`, + making new interface the default. +* [Integer](/libs/integer/index.html): + + + Reverted Trunk to release branch state (i.e. a "known good state"). + + Fixed issues: [653](https://svn.boost.org/trac/boost/ticket/653), + [3084](https://svn.boost.org/trac/boost/ticket/3084), + [3177](https://svn.boost.org/trac/boost/ticket/3177), + [3180](https://svn.boost.org/trac/boost/ticket/3180), + [3568](https://svn.boost.org/trac/boost/ticket/3548), + [3657](https://svn.boost.org/trac/boost/ticket/3657), + [2134](https://svn.boost.org/trac/boost/ticket/2134). + + Added long long support to boost::static\_log2, + boost::static\_signed\_min, boost::static\_signed\_max, + boost::static\_unsigned\_minboost::static\_unsigned\_max, + when available. + + The argument type and the result type of boost::static\_signed\_min + etc are now typedef'd. Formerly, they were hardcoded as unsigned + long and int respectively. Please, use + the provided typedefs in new code (and update old code as soon as + possible). +* [Iostreams](/libs/iostreams/index.html): + + + Fixed many outstanding issues. Thanks to Richard Smith for his work + on this. ([#3612](https://svn.boost.org/trac/boost/ticket/3612), + [#3311](https://svn.boost.org/trac/boost/ticket/3311), + [#2094](https://svn.boost.org/trac/boost/ticket/2094), + [#3010](https://svn.boost.org/trac/boost/ticket/3010), + [#2894](https://svn.boost.org/trac/boost/ticket/2894), + [#3011](https://svn.boost.org/trac/boost/ticket/3011), + [#3352](https://svn.boost.org/trac/boost/ticket/3352), + [#3505](https://svn.boost.org/trac/boost/ticket/3505)). + + For more information see the [library + release notes](/libs/iostreams/doc/release_notes.html). +* [Program.Options](/libs/program_options/index.html): + + + Information about option name added to a few exception classes and + various clean ups in exception classes ([#3423](https://svn.boost.org/trac/boost/ticket/3423)). + + Description wordwrapping in presense of default parameters fixed + ([#2613](https://svn.boost.org/trac/boost/ticket/2613)). + + Empty value in configuration file is now permitted ([#1537](https://svn.boost.org/trac/boost/ticket/1537)). + + Quotes are no longer stripped from string values ([#850](https://svn.boost.org/trac/boost/ticket/850)). + + Fix endless loop in case of long default arguments ([#689](https://svn.boost.org/trac/boost/ticket/689)). + + Fix compile warning caused by usage of boost::any ([#2562](https://svn.boost.org/trac/boost/ticket/2562)). + + Fix memory bug in example/response\_file.cpp ([#3525](https://svn.boost.org/trac/boost/ticket/3525)). + + Most compilation warnings were fixed ([#3608](https://svn.boost.org/trac/boost/ticket/3608)). + + Make column width for description text configurable. ([#3703](https://svn.boost.org/trac/boost/ticket/3703)). + + Add general split function: split\_unix() ([#2561](https://svn.boost.org/trac/boost/ticket/2561)). + + Enable open config files from given file name ([#3264](https://svn.boost.org/trac/boost/ticket/3264)). + + Additional flag for required options ([#2982](https://svn.boost.org/trac/boost/ticket/2982)). + + Enable case insensitive style for command line ([#3498](https://svn.boost.org/trac/boost/ticket/3498)). +* [PropertyMap](/libs/property_map/index.html): + + + Removed old header files (directly in the `boost/` directory); they were deprecated + since 1.40, replaced by headers in `boost/property\_map/`. +* [Proto](/libs/proto/index.html): + + + Fix const correctness issues with `proto::flatten` + and friends ([#3364](https://svn.boost.org/trac/boost/ticket/3364)). + + Accomodate recent change to `fusion::fold`, + remove old support for Doxygen and pre-1.35 Fusion ([#3553](https://svn.boost.org/trac/boost/ticket/3553)). + + In binary operations, when one operand has a user-specified domain + and the other has the default domain, the user-specified domain trumps. + + Fix `BOOST\_PROTO\_EXTENDS` + to work with elaborated types. + + Work around EDG compiler bug with function types and cv-qualification. +* [Regex](/libs/regex/index.html): + + + Added support for Functors rather than strings as format expressions. + + Improved error reporting when throwing exceptions to include better + more relevant information. + + Improved performance and reduced stack usage of recursive expressions. + + Fixed tickets [#2802](https://svn.boost.org/trac/boost/ticket/2802), + [#3425](https://svn.boost.org/trac/boost/ticket/3425), + [#3507](https://svn.boost.org/trac/boost/ticket/3507), + [#3546](https://svn.boost.org/trac/boost/ticket/3546), + [#3631](https://svn.boost.org/trac/boost/ticket/3631), + [#3632](https://svn.boost.org/trac/boost/ticket/3632), + [#3715](https://svn.boost.org/trac/boost/ticket/3715), + [#3718](https://svn.boost.org/trac/boost/ticket/3718), + [#3763](https://svn.boost.org/trac/boost/ticket/3763), + [#3764](https://svn.boost.org/trac/boost/ticket/3764) +* [Spirit](/libs/spirit/index.html): + Spirit V2.2, + see the '[What's + New](/doc/libs/1_42_0/libs/spirit/doc/html/spirit/what_s_new.html)' section for details. +* [Unordered](/libs/unordered/index.html): + + + Support instantiating the containers with incomplete value types. + + Add `erase\_return\_void` + as a temporary workaround for the current `erase` + which can be inefficient because it has to find the next element + to return an iterator ([#3693](http://svn.boost.org/trac/boost/ticket/3693)). + + Add templated find overload for compatible keys. + + Improved codegear compatibility. + + Other minor changes, full details in [the + changelog](/doc/html/unordered/changes.html#unordered.changes.boost_1_42_0). +* [Xpressive](/libs/xpressive/index.html): + + + `match\_results` no + longer relies on undefined behavior in `std::list` + ([#3278](https://svn.boost.org/trac/boost/ticket/3278)). + + Do NOT copy singular iterators ([#3538](https://svn.boost.org/trac/boost/ticket/3538)). + + Eliminate gcc and darwin warnings ([#3734](https://svn.boost.org/trac/boost/ticket/3734)). + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Leopard. + + GCC 4.0.1 on PowerPC Tiger. +* Linux: + + + GCC 4.4.1 on Ubuntu Linux. + + GCC 4.4 on Debian. +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1 and 9.0 SP1 on Windows XP. + + Visual C++ 9.0 on Windows 2008, 64 bit. + + GCC 4.3.3, using Mingw +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 10.1 on Red Hat Enterprise Linux. + + Intel 10.1 on 64 bit Red Hat Enterprise Linux. + + Intel 11.0 on 32 bit Red Hat Enterprise Linux. + + Intel 11.0 on 64 bit Red Hat Enterprise Linux. + + Intel 11.1 on 64 bit Red Hat Enterprise Linux. + + Intel 11.1 on 64 bit Linux Redhat 5.1 Server. + + Intel 11.1 on Suse Linux 64 bit. + + GCC 3.4.6, GCC 4.2.4, GCC 4.3.4 and GCC 4.4.2 on Red Hat Enterprise + Linux. + + GCC 4.3.4 and GCC 4.4.2 with C++0x extensions on Red Hat Enterprise + Linux. + + GCC 4.4.1 on 64 bit Linux. + + GCC 4.4.3 on Debian unstable. + + QLogic PathScale(TM) Compiler Suite: Version 3.2 on Red Hat Enterprise + Linux. +* OS X: + + + Intel C++ Compiler 10.1, 11.0, 11.1 on Leopard. + + GCC 4.0.1 on Intel Leopard. + + GCC 4.0.1 on PowerPC Tiger. +* Windows: + + + Visual C++ 7.1, 8,0, 9,0 on XP. + + Visual C++ 9.0 using STLport 5.2 on XP and Windows Mobile 5.0. + + Visual C++ 10.0 beta 2. + + Visual C++ 10.0 on 32-bit Vista. + + Borland/Codegear C++ 5.9.3, 6.1.3 (2009), 6.2.1 (2010). + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 32-bit. + + GCC 4.4.1 on Mingw, with and without C++0x extensions. +* AIX: + + + IBM XL C/C++ Enterprise Edition for AIX, V10.1.0.0, on AIX Version + 5.3.0.40. +* FreeBSD: + + + GCC 4.2.1 on FreeBSD 7.0, 32 bit and 64 bit. +* Solaris: + + + Sun C++ 5.10 on Solaris 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_43_0.html b/users/history/version_1_43_0.html new file mode 100644 index 0000000..7fb9fc1 --- /dev/null +++ b/users/history/version_1_43_0.html @@ -0,0 +1,289 @@ +--- +title: Version 1.43.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.43.0 + +/\*\*/ + + + + + + + +Version 1.43.0 +============== + +Version 1.43.0 +-------------- + + +May 6th, 2010 12:00 GMT + + +[Documentation](/doc/libs/1_43_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_43\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.43.0/boost_1_43_0.tar.bz2) | +| [boost\_1\_43\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.43.0/boost_1_43_0.tar.gz) | +| windows | [boost\_1\_43\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.43.0/boost_1_43_0.7z) | +| [boost\_1\_43\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.43.0/boost_1_43_0.zip) | + + +### New Libraries + + +* [Functional/factory](/libs/functional/factory/index.html): + Function + objects for dynamic and by-value construction, from Tobias Schwinger. +* [Functional/forward](/libs/functional/forward/index.html): + Function + object adapters to address the forwarding problem, from Tobias Schwinger. + +### Major Updates + + +* [Range](/libs/range/index.html): + Boost.Range has + undergone extensive updates that it include all of the features from the + recently reviewed Boost.RangeEx, from Neil Groves. + + + Range-based version of the full STL iterator based algorithms. + + Range adaptors which can be combined with range-based algorithms + for unprecedented expressiveness and efficiency. + + New functions: irange, istream\_range, join, combine. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/index.html): + + + Avoid premature template evaluation in operator overload return types. +* [Array](/libs/array/index.html): + + + Added support for SunCC compiler. + + Added 'fill' member function. + + Changed exception code to use boost::throw\_exception. +* [Asio](/libs/asio/index.html): + + + Improved performance. + + Reduced compile times. + + Reduced the size of generated code. + + Extended the guarantee that background threads don't call user code + to all asynchronous operations ([#3923](https://svn.boost.org/trac/boost/ticket/3923)). + + Changed to use edge-triggered epoll on Linux. + + Changed to use `timerfd` + for dispatching timers on Linux, when available. + + Changed to use one-shot notifications with kqueue on Mac OS X and + BSD platforms. + + Added a bitmask type `ip::resolver\_query\_base::flags` + as per the TR2 proposal. This type prevents implicit conversion from + `int` to `flags`, allowing the compiler to + catch cases where users incorrectly pass a numeric port number as + the service name. + + Added `#define NOMINMAX` for all Windows compilers. + Users can define `BOOST\_ASIO\_NO\_NOMINMAX` + to suppress this definition ([#3901](https://svn.boost.org/trac/boost/ticket/3901)). + + Fixed a bug where 0-byte asynchronous reads were incorrectly passing + an `error::eof` result to the completion handler + ([#4023](https://svn.boost.org/trac/boost/ticket/4023)). + + Changed the `io\_control()` member functions to always call + `ioctl` on the underlying + descriptor when modifying blocking mode ([#3307](https://svn.boost.org/trac/boost/ticket/3307)). + + Changed the resolver implementation to longer require the typedefs + `InternetProtocol::resolver\_query` + and `InternetProtocol::resolver\_iterator`, + as neither typedef is part of the documented `InternetProtocol` + requirements. The corresponding typedefs in the `ip::tcp`, + `ip::udp` and `ip::icmp` + classes have been deprecated. + + Fixed out-of-band handling for reactors not based on `select()`. + + Added new `BOOST\_ASIO\_DISABLE\_THREADS` + macro that allows Asio's threading support to be independently disabled. + + Minor documentation improvements. +* [Fusion](/libs/fusion/index.html): + + + Added new macros for adapting or defining custom types. See the + [Changelog](/libs/fusion/doc/html/fusion/change_log.html) + for details. +* [Iostreams](/libs/iostreams/index.html): + + + Minor fixes ([#2505](https://svn.boost.org/trac/boost/ticket/2505), + [#3839](https://svn.boost.org/trac/boost/ticket/3839), + [#3953](https://svn.boost.org/trac/boost/ticket/3953), + [#3723](https://svn.boost.org/trac/boost/ticket/3723), + [#3969](https://svn.boost.org/trac/boost/ticket/3969), + [#4135](https://svn.boost.org/trac/boost/ticket/4135)). +* [Multi-index Containers](/libs/multi_index/doc/index.html): + + + [Serialization + of non default constructible values](/libs/serialization/doc/serialization.html#constructors) is now properly supported + through user-provided facilities `save\_construct\_data` + and `load\_construct\_data`. + `multi\_index\_container` + serialization [class + version](/libs/serialization/doc/tutorial.html#versioning) has been bumped from 1 to 2. +* [Proto](/libs/proto/index.html): + + + Minor change in behavior: non-const expression self-assignment creates + an assign node. See Proto's [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_43) for details. + + Minor change to recommended expression extension mechanism: use + `BOOST\_PROTO\_EXTENDS\_USING\_ASSIGN()`. See Proto's [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_43) for details. + + Fix error in invocation of callable monomorphic function objects + in Proto transforms. + + Fix misc const correctness issues, work around fusion bug. + + Add non-const function call overloads to proto terminals. + + Add a default constructor to `proto::literal<>`. + + Do not use deprecated config macros. + + Add `proto::assert\_matches()` + function and friends to . + + `functional::make\_expr<>` + and `functional::unpack\_expr<>` + return const-qualified rvalues. + + Add documentation for Expr and Domain concepts. +* [Random](/libs/random/index.html): + + + Put the implementation of random\_device in a compiled lib, and added + Windows support. + + Rewrote the documentation using Quickbook/Doxygen/Boostbook and brought + it up to date. +* [Spirit](/libs/spirit/index.html): + Spirit V2.3, + see the '[What's + New](/doc/libs/1_43_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_3.html)' section for details. +* [Thread](/libs/thread/index.html): + + + Uses `boost::throw\_exception` for all exceptions + except `thread\_interrupted` + + Added fix for issue 2742 + + Optimizations to mutex locks and `call\_once` +* [Unordered](/libs/unordered/index.html): + + + `erase\_return\_void` + is now `quick\_erase` + ([#3966](http://svn.boost.org/trac/boost/ticket/3966)). +* [Uuid](/libs/uuid/index.html): + + + Split generators into separate files. + + Fixed bug in basic\_random\_generator ([#3971](https://svn.boost.org/trac/boost/ticket/3971)). + + Updated documentation. +* [Wave](/libs/wave/index.html): + See the [Changelog](/libs/wave/ChangeLog) + for details. +* [Xpressive](/libs/xpressive/index.html): + + + Add missing include to . + +### Build System + + +* When cross-compiling to GNU targets, static libraries are properly created. + Previously, using such libraries resulted in Archive has no index + error. +* The naming of DLL and import libraries with gcc compiler on Windows, both + mingw and cygwin, now matches default conventions of those environments. + Previously, the naming scheme was the same as for other Windows compilers. + +### Updated Tools + + +* [Quickbook](/tools/quickbook/index.html): + + + Unicode escape characters. + + Support the UTF-8 byte order mark. + + Disallow `[` in simple + markup. Fixes some errors with mismatched punctuation. + + Add a command line flag (`-D`) to define macros at the command + line. + + Improved post-processor output. + + Check that `[section]` and `[endsect]` + tags are balanced in templates. + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Leopard. +* Linux: + + + GCC 4.4.1 on Ubuntu Linux. + + GCC 4.4 on 64-bit Suse. +* Windows: + + + Visual C++ 8.0 SP1 and 9.0 SP1 on Windows XP. + + GCC 4.3.3, using Mingw +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 10.1, 11.1 on 32 bit Red Hat Enterprise Linux. + + Intel 10.1, 11.0, 11.1 on 64 bit Red Hat Enterprise Linux. + + GCC 3.4.6, 4.2.4, 4.3.4, 4.4.3 on Red Hat Enterprise Linux. + + GCC 4.3.4, 4.4.3 with C++0x extensions on Red Hat Enterprise Linux. + + QLogic PathScale(TM) Compiler Suite: Version 3.2 on Red Hat Enterprise + Linux. +* OS X: + + + Intel C++ Compiler 10.1, 11.0, 11.1 on Leopard. + + GCC 4.0.1 on Intel Leopard. + + Clang from subversion. +* Windows: + + + Visual C++ 8,0, 9,0 on 32-bit XP. + + Visual C++ 9.0 using STLport 5.2 on XP and Windows Mobile 5.0. + + Visual C++ 10.0 on XP. + + Visual C++ 10.0 on 64-bit Windows 7. + + Borland/Codegear C++ 5.9.3, 6.1.3 (2009), 6.2.1 (2010). + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 32-bit. + + GCC 4.3.3 on Mingw. + + GCC 4.4.3 on Mingw, with and without C++0x extensions. + + GCC 4.5 on Mingw. +* AIX: + + + IBM XL C/C++ Enterprise Edition, V10.1.0.0, on AIX Version 5.3.0.40. +* FreeBSD: + + + GCC 4.2.1 on FreeBSD 7.2, 64 bit. + + GCC 4.2.1 on FreeBSD 8.0, 32 bit. +* Solaris: + + + Sun C++ 5.10 on Solaris 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_44_0.html b/users/history/version_1_44_0.html new file mode 100644 index 0000000..7bbeca3 --- /dev/null +++ b/users/history/version_1_44_0.html @@ -0,0 +1,425 @@ +--- +title: Version 1.44.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.44.0 + +/\*\*/ + + + + + + + +Version 1.44.0 +============== + +Version 1.44.0 +-------------- + + +August 13th, 2010 17:00 GMT + + +[Documentation](/doc/libs/1_44_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_44\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.44.0/boost_1_44_0.tar.bz2) | +| [boost\_1\_44\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.44.0/boost_1_44_0.tar.gz) | +| windows | [boost\_1\_44\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.44.0/boost_1_44_0.7z) | +| [boost\_1\_44\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.44.0/boost_1_44_0.zip) | + + +### New Libraries + + +* [Meta State Machine](/libs/msm/index.html): + High-performance + expressive UML2 finite state machines, from Christophe Henry +* [Polygon](/libs/polygon/index.html): + Booleans/clipping, + resizing/offsetting and more for planar polygons with integral coordinates, + from Lucanus Simonson. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/index.html): + + + Correct miscellaneous documentation inaccuracies +* [Asio](/libs/asio/index.html): + + + Reduced compile times. (Note that some programs may need to add additional + `#include`s, e.g. + if the program uses `boost::array` + but does not explicitly include ``.) + + Reduced the size of generated code. + + Refactored `deadline\_timer` + implementation to improve performance. + + Improved multiprocessor scalability on Windows by using a dedicated + hidden thread to wait for timers. + + Improved performance of `asio::streambuf` + with `async\_read()` + and `async\_read\_until()`. These read operations now use + the existing capacity of the `streambuf` + when reading, rather than limiting the read to 512 bytes. + + Added optional separate compilation. To enable, add `#include ` + to one source file in a program, then build the program with `BOOST\_ASIO\_SEPARATE\_COMPILATION` + defined in the project/compiler settings. Alternatively, `BOOST\_ASIO\_DYN\_LINK` may be defined + to build a separately-compiled Asio as part of a shared library. + + Added new macro `BOOST\_ASIO\_DISABLE\_FENCED\_BLOCK` + to permit the disabling of memory fences around completion handlers, + even if thread support is enabled. + + Reworked timeout examples to better illustrate typical use cases. + + Ensured that handler arguments are passed as `const` + types. + + Fixed incorrect parameter order in `null\_buffers` + variant of `async\_send\_to` + ([#4170](https://svn.boost.org/trac/boost/ticket/4170)). + + Ensured `unsigned char` + is used with `isdigit` + in `getaddrinfo` emulation + ([#4201](https://svn.boost.org/trac/boost/ticket/4201)). + + Fixed handling of very small but non-zero timeouts ([#4205](https://svn.boost.org/trac/boost/ticket/4205)). + + Fixed crash that occurred when an empty buffer sequence was passed + to a composed read or write operation. + + Added missing `operator+` overload in `buffers\_iterator` + ([#4382](https://svn.boost.org/trac/boost/ticket/4382)). + + Implemented cancellation of `null\_buffers` + operations on Windows. +* [Config](/libs/config/index.html): + + + Added new defect macro, `BOOST\_NO\_COMPLETE\_VALUE\_INITIALIZATION`. + + Added new defect macro `BOOST\_NO\_0X\_HDR\_TYPEINDEX`, + fixes issue [#4274](https://svn.boost.org/trac/boost/ticket/4274). + + Added support for code visibility in GCC. + + Fixed issues [#4385](https://svn.boost.org/trac/boost/ticket/4385), + [#4324](https://svn.boost.org/trac/boost/ticket/4324), + [#4221](https://svn.boost.org/trac/boost/ticket/4221), + [#4182](https://svn.boost.org/trac/boost/ticket/4182), + [#4178](https://svn.boost.org/trac/boost/ticket/4178), + [#4152](https://svn.boost.org/trac/boost/ticket/4152), + [#4115](https://svn.boost.org/trac/boost/ticket/4182). + [#4112](https://svn.boost.org/trac/boost/ticket/4112), + [#4059](https://svn.boost.org/trac/boost/ticket/4059), + [#4041](https://svn.boost.org/trac/boost/ticket/4041), + [#4012](https://svn.boost.org/trac/boost/ticket/4012). +* [Filesystem](/libs/filesystem/index.html): + + + This release contains both version 2 and version 3 of the library. + Version 3 is a major upgrade that will break some existing user code, + so version 2 is the default. Users are encouraged to migrate to version + 3. See '[Version 2](/libs/filesystem/v2/doc/index.htm)' + and '[Version 3](/libs/filesystem/v3/doc/index.htm)' + for more information. + + Fix problems with symbol visibility for shared libraries. + + Fix various minor problems. + + Fixed issues: [#3863](https://svn.boost.org/trac/boost/ticket/3863), + [#4248](https://svn.boost.org/trac/boost/ticket/4248). +* [Foreach](/libs/foreach/index.html): + + + Add `boost/foreach\_fwd.hpp` for forward declarations of + foreach's customization points, fixes [#3998](https://svn.boost.org/trac/boost/ticket/3998). + + Remove out-of-date work-arounds for sun compilers, fixes [#4306](https://svn.boost.org/trac/boost/ticket/4306). +* [Fusion](/libs/fusion/index.html): + + + Added `fusion::reverse\_fold`, `fusion::iter\_fold` + and `fusion::reverse\_iter\_fold` ([#1623](https://svn.boost.org/trac/boost/ticket/1623)). +* [Hash](/libs/functional/hash/index.html): + + + Option to prevent implicit casts when calling the hash function by + defining the macro `BOOST\_HASH\_NO\_IMPLICIT\_CASTS`, + which can avoid some subtle problems. This might be activated by + default in a future version. +* [Iostreams](/libs/iostreams/index.html): + + + Several fixes for file descriptors class, including a breaking change + to the constructors and `open` + methods for `file\_descriptor`, + `file\_descriptor\_source` + and `file\_descriptor\_sink`. + See [the + documentation](/libs/iostreams/doc/classes/file_descriptor.html) for details. The old methods are still available + if you define `BOOST\_IOSTREAMS\_USE\_DEPRECATED` + ([#3323](https://svn.boost.org/trac/boost/ticket/3323), + [#3517](https://svn.boost.org/trac/boost/ticket/3517), + [#4335](https://svn.boost.org/trac/boost/ticket/4335)). + + Fix several issues with compression and decompression ([#2318](https://svn.boost.org/trac/boost/ticket/2318), + [#4091](https://svn.boost.org/trac/boost/ticket/4091), + [#3348](https://svn.boost.org/trac/boost/ticket/3348), + [#2783](https://svn.boost.org/trac/boost/ticket/2783), + [#1579](https://svn.boost.org/trac/boost/ticket/1579), + [#3853](https://svn.boost.org/trac/boost/ticket/3853)). + + And a load more miscellaneous fixes ([#3851](https://svn.boost.org/trac/boost/ticket/3851), + [#3279](https://svn.boost.org/trac/boost/ticket/3279), + [#3689](https://svn.boost.org/trac/boost/ticket/3689), + [#2356](https://svn.boost.org/trac/boost/ticket/2356), + [#2996](https://svn.boost.org/trac/boost/ticket/2996), + [#4102](https://svn.boost.org/trac/boost/ticket/4102), + [#2998](https://svn.boost.org/trac/boost/ticket/2998), + [#1612](https://svn.boost.org/trac/boost/ticket/1612), + [#2325](https://svn.boost.org/trac/boost/ticket/2325)). + + Thanks to Steven Watanabe for almost all these fixes. For more detail + see the [release + notes](/libs/iostreams/doc/release_notes.html). +* [Math](/libs/math/index.html): + + + Fixed incorrect range and support for Rayleigh distribution. +* [MPL](/libs/mpl/index.html): + + + Make `mpl::string` work with `mpl::transform`. +* [Multi-index Containers](/libs/multi_index/doc/index.html): + + + Fixed a bug preventing the use of `modify\_key` + with rollback in [ordered](/libs/multi_index/doc/reference/ord_indices.html#modify_key) + and [hashed](/libs/multi_index/doc/reference/hash_indices.html#modify_key) + indices when `Modifier` + and `Rollback` are + different types (ticket [#4130](https://svn.boost.org/trac/boost/ticket/4130)). +* [Proto](/libs/proto/index.html): + + + **Minor change in behavior:** when using + `proto::and\_` as a transform, apply *all* + transforms but only return the result of applying the last. See Proto's + [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_44) for details. + + **Minor change in behavior:** `proto::as\_expr` and `proto::as\_child` + no longer run objects that are already proto expressions through + the expression domain's generator. See Proto's [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_44) for details. + + **Minor change in behavior:** Proto + uses `proto::basic\_expr` instead of `proto::expr` when possible for better compile + times. See Proto's [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_44) for details. + + Add support for sub-domains. + + Introduce per-domain `as\_expr` + and `as\_child` customization + points to allow for domain-specific customization of variable capture + behavior. + + The `proto::\_default` transform is also a grammar + that matches the expressions the transform knows how to handle. + + Add `proto::\_void`, a no-op primitive transform + that does nothing and returns `void`. + + The `proto::pass\_through` transform doesn't + strip expression wrappers, fixes [#4175](https://svn.boost.org/trac/boost/ticket/4175). + + Const-correctness fixes when invoking proto domains. +* [Regex](/libs/regex/index.html): + + + Fixed issues: [#4309](https://svn.boost.org/trac/boost/ticket/4309), + [#4215](https://svn.boost.org/trac/boost/ticket/4215), + [#4212](https://svn.boost.org/trac/boost/ticket/4212), + [#4191](https://svn.boost.org/trac/boost/ticket/4191), + [#4132](https://svn.boost.org/trac/boost/ticket/4132), + [#4123](https://svn.boost.org/trac/boost/ticket/4123), + [#4114](https://svn.boost.org/trac/boost/ticket/4114), + [#4036](https://svn.boost.org/trac/boost/ticket/4036), + [#4020](https://svn.boost.org/trac/boost/ticket/4020), + [#3941](https://svn.boost.org/trac/boost/ticket/3941), + [#3902](https://svn.boost.org/trac/boost/ticket/3902), + [#3890](https://svn.boost.org/trac/boost/ticket/3890). +* [Spirit](/libs/spirit/index.html): + Spirit V2.4, + see the '[What's + New](/doc/libs/1_44_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_4.html)' section for details. +* [System](/libs/system/index.html): + + + Change system\_category and generic\_category to functions, to conform + to the C++0x FCD. This change may cause compile errors some user + code; the fix is add "()" to references to system\_category + and generic\_category, so that they become function calls. + + Fix problems with symbol visibility for shared libraries. + + Fixed issues: [#4254](https://svn.boost.org/trac/boost/ticket/4254), + [#3994](https://svn.boost.org/trac/boost/ticket/3994), + [#3474](https://svn.boost.org/trac/boost/ticket/3474). +* [Thread](/libs/thread/index.html): + + + Fixes for miscellaneous trac issues ([#2501](https://svn.boost.org/trac/boost/ticket/2501), + [#4341](https://svn.boost.org/trac/boost/ticket/4341), + [#4363](https://svn.boost.org/trac/boost/ticket/4363), + [#3760](https://svn.boost.org/trac/boost/ticket/3760), + [#3761](https://svn.boost.org/trac/boost/ticket/3761), + [#3611](https://svn.boost.org/trac/boost/ticket/3611), + [#2955](https://svn.boost.org/trac/boost/ticket/2955), + [#4071](https://svn.boost.org/trac/boost/ticket/4071), + [#3195](https://svn.boost.org/trac/boost/ticket/3195), + [#3097](https://svn.boost.org/trac/boost/ticket/3097), + [#2874](https://svn.boost.org/trac/boost/ticket/2874), + [#4316](https://svn.boost.org/trac/boost/ticket/4316), + [#4317](https://svn.boost.org/trac/boost/ticket/4317), + [#4322](https://svn.boost.org/trac/boost/ticket/4322), + [#3244](https://svn.boost.org/trac/boost/ticket/3244), + [#2747](https://svn.boost.org/trac/boost/ticket/2747), + [#4305](https://svn.boost.org/trac/boost/ticket/4305), + [#3195](https://svn.boost.org/trac/boost/ticket/3195), + [#2704](https://svn.boost.org/trac/boost/ticket/2704), + [#2293](https://svn.boost.org/trac/boost/ticket/2293), + [#868](https://svn.boost.org/trac/boost/ticket/868), + [#2918](https://svn.boost.org/trac/boost/ticket/2918), + [#4238](https://svn.boost.org/trac/boost/ticket/4238), + [#3269](https://svn.boost.org/trac/boost/ticket/3269), + [#3178](https://svn.boost.org/trac/boost/ticket/3178), + [#3195](https://svn.boost.org/trac/boost/ticket/3195)). + + Fixes for other miscellaneous issues (remove warnings, support newer + compilers, etc.) +* [TR1](/libs/tr1/index.html): + + + Fixed VC10 support. + + `std::tr1::result\_of` always uses the TR1 ResultOf + protocol, even on compilers that support the C++0x `decltype`-based implementation. +* [Type Traits](/libs/type_traits/index.html): + + + Added support for rvalue references throughout the library, plus + two new traits classes is\_rvalue\_reference and is\_lvalue\_reference. + Fixes [#4407](https://svn.boost.org/trac/boost/ticket/4407) + and [#3804](https://svn.boost.org/trac/boost/ticket/3804). + + Fixed ticket [#3621](https://svn.boost.org/trac/boost/ticket/3621). +* [uBLAS](/libs/numeric/ublas/index.html): + + + New assignment operators to feed in vectors and matrices in many + nice ways ([#4034](http://svn.boost.org/trac/boost/ticket/4034)). + Thank you Nasos + + New doxygen-based [documentation](/libs/numeric/ublas/doc/html/index.html) + + Enable arithmetic operators (+,-,\*,/) to work between ublas containers + of std::complex and integral types ([#3649](http://svn/boost/org/trac/boost/ticket/3649)). + Thank you Neal + + Removed unused variables in functional.hpp ([#4377](http://svn.boost.org/trac/boost/ticket/4377)). + Thank you Marco + + New matrix\_indirect and vector\_indirect views to access elements + with a matrix or vector of indices +* [Utility](/libs/utility/index.html): + + + Added a new template class, [`boost::initialized`](/libs/utility/value_init.htm#initialized), + in order to fix [#3472](https://svn.boost.org/trac/boost/ticket/3472). + + New version of `value\_initialized` no longer calls `memset` when the compiler has implemented + value-initialization completely ([#3869](https://svn.boost.org/trac/boost/ticket/3869)). + + New template `boost::tr1\_result\_of` + that implements the TR1 ResultOf protocol even if `boost::result\_of` + uses the C++0x `decltype`-based + implementation. +* [Uuid](/libs/uuid/index.html): + + + Define `BOOST\_UUID\_NO\_TYPE\_TRAITS` + to remove the dependency on Boost.TypeTraits. + + Stream `operator<<` + handles left, internal, and right manipulators. + + Added `to\_string`, + `to\_wstring` to convert + a uuid to a string. + + Fixed minor bugs in documentation. +* [Wave](/libs/wave/index.html): + See the [Changelog](/libs/wave/ChangeLog) + for details. +* [Xpressive](/libs/xpressive/index.html): + + + Replace non-portable `using` + declarations with `typedef`s + in `nested\_results`. + + Support user-defined assertions with placeholders for non-local variables. + +### Updated tools + + +* [Boostbook](/tools/boostbook/index.html): + + + Significantly faster. + + Improved syntax highlighter. +* [Quickbook](/tools/quickbook/index.html): + + + Use the cygwin 1.7 API for better path handling. + + Improved boostbook generation. + + Tweak the grammar to clean up some edge cases. + + For more detail see the [change + log](/doc/libs/1_44_0/doc/html/quickbook/change_log.html#quickbook.change_log.version_1_5_2___boost_1_44_0). + +### Compilers Tested + Boost's primary test compilers are: + + + +* OS X: + + + GCC 4.0.1 on Intel Leopard. +* Linux: + + + GCC 4.4 on 64-bit Suse. +* Windows: + + + Visual C++ 7.1 SP1, 8.0 SP1, 9.0 SP1 and 10.0. + + GCC 4.3.3, using Mingw. +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + Intel 10.1 on 32 bit Red Hat Enterprise Linux. + + Intel 10.1, 11.0, 11.1 on 64 bit Red Hat Enterprise Linux. + + GCC 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5 on Red Hat Enterprise Linux. + + GCC, with C++0x extensions, 4.3.4, 4.4.3, 4.5 on Red Hat Enterprise + Linux. + + GCC 4.4 on 64 bit Suse. + + QLogic PathScale(TM) Compiler Suite: Version 3.2 on Red Hat Enterprise + Linux. + + Clang from subversion (will be released with LLVM 2.8). +* OS X: + + + Intel C++ Compiler 10.1, 11.0, 11.1 on Leopard. + + GCC 4.0.1, 4.2.1 (Apple build). + + GCC 4.4 + + GCC, with C++0x extensions, 4.4 + + Clang from subversion (will be released with LLVM 2.8). +* Windows: + + + Visual C++ 7.1 SP, 8.0, 9.0 on 32-bit XP. + + Visual C++ 9.0 using STLport 5.2 on XP and Windows Mobile 5.0. + + Visual C++ 10.0 on XP. + + Visual C++ 10.0 on 64-bit Windows 7. + + Borland/Codegear C++ 5.9.3, 6.1.3 (2009), 6.2.1 (2010). + + Intel C++ 11.1, with a Visual C++ 9.0 backend, on Vista 32-bit. + + GCC 4.3.3, 4.5 on Mingw. + + GCC, with C++0x extensions, 4.5 on Mingw. +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0, on AIX Version 5.3.0.40. +* FreeBSD: + + + GCC 4.2.1 on FreeBSD 7.2, 64 bit. + + GCC 4.2.1 on FreeBSD 8.0, 32 bit. +* Solaris: + + + Sun C++ 5.10 on Solaris 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + Thanks to Marshall Clow for organizing the bug sprint and to everyone who took + part. + + + + + + + + + + + + diff --git a/users/history/version_1_45_0.html b/users/history/version_1_45_0.html new file mode 100644 index 0000000..efbecdb --- /dev/null +++ b/users/history/version_1_45_0.html @@ -0,0 +1,322 @@ +--- +title: Version 1.45.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.45.0 + +/\*\*/ + + + + + + + +Version 1.45.0 +============== + +Version 1.45.0 +-------------- + + +November 19th, 2010 16:00 GMT + + +[Documentation](/doc/libs/1_45_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_45\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.45.0/boost_1_45_0.tar.bz2) | +| [boost\_1\_45\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.45.0/boost_1_45_0.tar.gz) | +| windows | [boost\_1\_45\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.45.0/boost_1_45_0.7z) | +| [boost\_1\_45\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.45.0/boost_1_45_0.zip) | + + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Fixed a problem on kqueue-based platforms where a `deadline\_timer` + may never fire if the `io\_service` + is running in a background thread ([#4568](https://svn.boost.org/trac/boost/ticket/4568)). + + Fixed a const-correctness issue that prevented valid uses of `has\_service<>` + from compiling ([#4638](https://svn.boost.org/trac/boost/ticket/4638)). + + Fixed MinGW cross-compilation ([#4491](https://svn.boost.org/trac/boost/ticket/4491)). + + Removed dependency on deprecated Boost.System functions ([#4672](https://svn.boost.org/trac/boost/ticket/4672)). + + Ensured `close()`/`closesocket()` + failures are correctly propagated ([#4573](https://svn.boost.org/trac/boost/ticket/4573)). + + Added a check for errors returned by `InitializeCriticalSectionAndSpinCount` + ([#4574](https://svn.boost.org/trac/boost/ticket/4574)). + + Added support for hardware flow control on QNX ([#4625](https://svn.boost.org/trac/boost/ticket/4625)). + + Always use `pselect()` on HP-UX, if it is available ([#4578](https://svn.boost.org/trac/boost/ticket/4578)). + + Ensured handler arguments are passed as lvalues ([#4744](https://svn.boost.org/trac/boost/ticket/4744)). + + Fixed Windows build when thread support is disabled ([#4680](https://svn.boost.org/trac/boost/ticket/4680)). + + Fixed a Windows-specific problem where `deadline\_timer` + objects with expiry times set more than 5 minutes in the future may + never expire ([#4745](https://svn.boost.org/trac/boost/ticket/4745)). + + Fixed the `resolver` + backend on BSD platforms so that an empty service name resolves to + port number `0`, as per + the documentation ([#4690](https://svn.boost.org/trac/boost/ticket/4690)). + + Fixed read operations so that they do not accept buffer sequences + of type `const\_buffers\_1` + ([#4746](https://svn.boost.org/trac/boost/ticket/4746)). + + Redefined `Protocol` + and `id` to avoid clashing + with Objective-C++ keywords ([#4191](https://svn.boost.org/trac/boost/ticket/4191)). + + Fixed a `vector` reallocation + performance issue that can occur when there are many active `deadline\_timer` objects ([#4780](https://svn.boost.org/trac/boost/ticket/4780)). + + Fixed the kqueue backend so that it compiles on NetBSD ([#4662](https://svn.boost.org/trac/boost/ticket/4662)). + + Fixed the socket `io\_control()` implementation on 64-bit Mac OS + X and BSD platforms ([#4782](https://svn.boost.org/trac/boost/ticket/4782)). + + Fixed a Windows-specific problem where failures from `accept()` + are incorrectly treated as successes ([#4859](https://svn.boost.org/trac/boost/ticket/4859)). + + Deprecated the separate compilation header `` + in favour of `` ([#4560](https://svn.boost.org/trac/boost/ticket/4560)). +* [Config](/libs/config/index.html): + + + Added new defect macros, `BOOST\_NO\_VARIADIC\_MACROS` + and `BOOST\_NO\_NUMERIC\_LIMITS\_LOWEST`. + + Minor fixes ([#4670](https://svn.boost.org/trac/boost/ticket/4670), + [#4563](https://svn.boost.org/trac/boost/ticket/4563), + [#4474](https://svn.boost.org/trac/boost/ticket/4474), + [#4508](https://svn.boost.org/trac/boost/ticket/4508)). +* [Flyweight](/libs/flyweight/index.html): + + + Fixed a hanging problem with [`intermodule\_holder`](/libs/flyweight/doc/tutorial/configuration.html#intermodule_holder) in Win32 + platforms related to a Boost.Interprocess issue described at ticket + [#4606](https://svn.boost.org/trac/boost/ticket/4606). + + Removed an internal assertion incompatible with program termination + via `std::exit`. +* [Foreach](/libs/foreach/index.html): + + + Fix ambiguitiy by making `auto\_any` + constructor explicit. +* [Fusion](/libs/fusion/index.html): + + + Added `BOOST\_FUSION\_ADAPT\_ADT`, + `BOOST\_FUSION\_ADAPT\_TPL\_ADT`, + `BOOST\_FUSION\_ADAPT\_ASSOC\_ADT` + and `BOOST\_FUSION\_ADAPT\_ASSOC\_TPL\_ADT`. +* [Graph](/libs/graph/index.html): + + + Added Stoer-Wagner min-cut algorithm contributed by Daniel Trebbien. + + Added implicit graph (implicit\_graph) and A\* (astar\_maze) examples + contributed by W. P. McNeill. + + Added bundled property support for graph properties. + + Fixed bugs [#4556](https://svn.boost.org/trac/boost/ticket/4556), + [#4622](https://svn.boost.org/trac/boost/ticket/4622), + [#4631](https://svn.boost.org/trac/boost/ticket/4631), + [#4715](https://svn.boost.org/trac/boost/ticket/4715), + [#4753](https://svn.boost.org/trac/boost/ticket/4753), + [#4758](https://svn.boost.org/trac/boost/ticket/4758) + and [#4793](https://svn.boost.org/trac/boost/ticket/4793) + plus others not in Trac. + + Fixed documentation bugs [#4731](https://svn.boost.org/trac/boost/ticket/4731) + and [#4737](https://svn.boost.org/trac/boost/ticket/4737). +* [Interprocess](/libs/interprocess/index.html): + + + Fixed bugs [#1080](https://svn.boost.org/trac/boost/ticket/1080), + [#3284](https://svn.boost.org/trac/boost/ticket/3284), + [#3439](https://svn.boost.org/trac/boost/ticket/3439), + [#3448](https://svn.boost.org/trac/boost/ticket/3448), + [#3582](https://svn.boost.org/trac/boost/ticket/3582), + [#3682](https://svn.boost.org/trac/boost/ticket/3682), + [#3829](https://svn.boost.org/trac/boost/ticket/3829), + [#3846](https://svn.boost.org/trac/boost/ticket/3846), + [#3914](https://svn.boost.org/trac/boost/ticket/3914), + [#3947](https://svn.boost.org/trac/boost/ticket/3947), + [#3950](https://svn.boost.org/trac/boost/ticket/3950), + [#3951](https://svn.boost.org/trac/boost/ticket/3951), + [#3985](https://svn.boost.org/trac/boost/ticket/3985), + [#4010](https://svn.boost.org/trac/boost/ticket/4010), + [#4417](https://svn.boost.org/trac/boost/ticket/4417), + [#4019](https://svn.boost.org/trac/boost/ticket/4019), + [#4039](https://svn.boost.org/trac/boost/ticket/4039), + [#4218](https://svn.boost.org/trac/boost/ticket/4218), + [#4230](https://svn.boost.org/trac/boost/ticket/4230), + [#4250](https://svn.boost.org/trac/boost/ticket/4250), + [#4297](https://svn.boost.org/trac/boost/ticket/4297), + [#4350](https://svn.boost.org/trac/boost/ticket/4350), + [#4352](https://svn.boost.org/trac/boost/ticket/4352), + [#4426](https://svn.boost.org/trac/boost/ticket/4426), + [#4516](https://svn.boost.org/trac/boost/ticket/4516), + [#4524](https://svn.boost.org/trac/boost/ticket/4524), + [#4557](https://svn.boost.org/trac/boost/ticket/4557), + [#4606](https://svn.boost.org/trac/boost/ticket/4606), + [#4685](https://svn.boost.org/trac/boost/ticket/4685), + [#4694](https://svn.boost.org/trac/boost/ticket/4694). + + Added support for standard rvalue reference move semantics (tested + on GCC 4.5 and VC10). + + Permissions can be detailed for interprocess named resources. + + `mapped\_region::flush` initiates disk flushing but + does not guarantee it's completed when returns, since it is not portable. + + FreeBSD and MacOS now use posix semaphores to implement named semaphores + and mutex. +* [Math](/libs/math/index.html): + + + Added inverse gamma distribution and inverse chi\_square and scaled + inverse chi\_square. + + Added warnings about potential ambiguity with std random library + in distribution and function names. + + Editorial revision of documentation, and added FAQ. +* [Meta State Machine](/libs/msm/index.html): + + + [Support + for serialization](/doc/libs/1_45_0/libs/msm/doc/HTML/ch08.html#d0e2995). + + [Possibility + to use normal](/doc/libs/1_45_0/libs/msm/doc/HTML/ch03s04.html#eUML-reuse-functor) functors (from functor front-end) in eUML. + + [New + constructors where substates / submachines can be taken as arguments](/doc/libs/1_45_0/libs/msm/doc/HTML/ch03s05.html#backend-fsm-constructor-args). + This allows passing arguments to the constructor of a submachine. + + Bugfixes (anonymous transitions) +* [MultiArray](/libs/multi_array/index.html): + + + Fixes for bugs [#3581](https://svn.boost.org/trac/boost/ticket/3581), + [#3820](https://svn.boost.org/trac/boost/ticket/3820), + [#3989](https://svn.boost.org/trac/boost/ticket/3989), + [#4032](https://svn.boost.org/trac/boost/ticket/4032), + plus other bugs not in Trac. + + Added new examples and test cases. +* [Proto](/libs/proto/index.html): + + + Knock down value of `proto::N`, + fixes bug [#4602](https://svn.boost.org/trac/boost/ticket/4602), + + Support non-rtti compilers + + Fix bug with `proto::matches`, + array types and the wildcard pattern. + + Make Proto work on MSVC with the /clr option + + Add const-qualified overloads of `proto::eval` +* [Spirit](/libs/spirit/index.html): + Spirit V2.4.1, + see the '[What's + New](/doc/libs/1_45_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_4_1.html)' section for details. +* [TypeTraits](/libs/type_traits/index.html): + + + Added new traits add\_rvalue\_reference, add\_lvalue\_reference and common\_type. + + Minor fixes to is\_signed, is\_unsigned and is\_virtual\_base\_of. +* [uBLAS](/libs/numeric/ublas/index.html): + + + Tickets closed: + + - [#4410](https://svn.boost.org/trac/boost/ticket/4410), + - [#3397](https://svn.boost.org/trac/boost/ticket/3397), + - [#795](https://svn.boost.org/trac/boost/ticket/795), + - [#3514](https://svn.boost.org/trac/boost/ticket/3514), + + Mixed types operation are possible and new tests added (like matrix+matrix), + + New features: + + - a new size<> operator is available. For example size<1>(A+B) + give the number of rows of the sum of matrices A and B, +* [Unordered](/libs/unordered/index.html): + + + Fix inserting from iterators which return by copy from `operator\*` + in `boost::unordered\_map` and `boost::unordered\_set`. +* [Wave](/libs/wave/index.html): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [Xpressive](/libs/xpressive/index.html): + + + `xpressive::as` handles wide-char `sub\_match` objects, fixes bug [#4496](https://svn.boost.org/trac/boost/ticket/4496) + +### Updated Tools + + +* [Boostbook](/tools/boostbook/index.html): + + + Fix syntax highlighter for comments at the end of code blocks. +* [Quickbook](/tools/quickbook/index.html): + + + Fix command line macros. + + Nested code snippets. + + Nested documentation info comments. + + Revert xml escaping document info, it broke some documentation files + (will now be in 1.6). + + Some other small tweaks. See [the + change log](/doc/html/quickbook/change_log.html#quickbook.change_log.releases.version_1_5_3___boost_1_45_0) for more info. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.5, 4.5.1. + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0. + + Intel: 10.1, 11.0, 11.1 + + Pathscale: 3.2. +* OS X: + + + GCC: 4.0.1, 4.2.1, 4.4 + + GCC, C++0x mode: 4.4. + + Intel: 11.1 +* Windows: + + + Visual C++: 7.1, 8.0, 9.0 and 10.0. + + GCC, mingw: 4.3.3. +* FreeBSD: + + + GCC: 4.2.1, 32 bit. + + GCC: 4.2.1, 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.5, 4.5.0, 4.6.0 (dev version). + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0. + + Intel: 10.1, 11.0, 11.1. + + pgCC 10.1. + + PathScale: 3.2. + + Clang from subversion. +* OS X: + + + Intel C++ Compiler: 10.1, 11.0, 11.1. + + GCC: 4.0.1, 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 + + Clang from subversion. +* Windows: + + + Borland: 5.9.3, 6.1.3 (2009), 6.2.1 (2010), 6.3.0 + + GCC, mingw: 4.3.3, 4.4.5, 4.5.1 + + GCC, mingw, C++0x mode: 4.5.1 + + Visual C++: 7.1, 8.0, 9.0, 10.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0. +* FreeBSD: + + + GCC 4.2.1, 64 bit. +* Solaris: + + + Sun C++: 5.10. + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_46_0.html b/users/history/version_1_46_0.html new file mode 100644 index 0000000..4b9d606 --- /dev/null +++ b/users/history/version_1_46_0.html @@ -0,0 +1,320 @@ +--- +title: Version 1.46.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.46.0 + +/\*\*/ + + + + + + + +Version 1.46.0 +============== + +Version 1.46.0 +-------------- + + +February 21st, 2011 20:36 GMT + + +[Documentation](/doc/libs/1_46_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_46\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.46.0/boost_1_46_0.tar.bz2) | +| [boost\_1\_46\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.46.0/boost_1_46_0.tar.gz) | +| windows | [boost\_1\_46\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.46.0/boost_1_46_0.7z) | +| [boost\_1\_46\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.46.0/boost_1_46_0.zip) | + + +### New Libraries + + +* [Icl](/libs/icl/index.html): + Interval Container + Library, interval sets and maps and aggregation of associated values, from + Joachim Faulhaber. + +### Updated Libraries + + +* [Array](/libs/array/index.html): + + + Added support for cbegin/cend ([#4761](https://svn.boost.org/trac/boost/ticket/4761)) + + Fixed a problem with the Sun compiler ([#4757](https://svn.boost.org/trac/boost/ticket/4757)) +* [Asio](/libs/asio/index.html): + + + Fixed an integer overflow problem that occurs when `ip::address\_v4::broadcast()` + is used on 64-bit platforms. + + Fixed a problem on older Linux kernels (where epoll is used without + timerfd support) that prevents timely delivery of deadline\_timer + handlers, after the program has been running for some time ([#5045](https://svn.boost.org/trac/boost/ticket/5045)). +* [Bind](/libs/bind/index.html): + + + `make\_adaptable` now + documented ([#4532](https://svn.boost.org/trac/boost/ticket/4532)) +* [Concept Check](/libs/concept_check/index.html): + + + fixed warnings with self-assignment ([#4918](https://svn.boost.org/trac/boost/ticket/4918)) +* [Filesystem](/libs/filesystem/index.html): + + + Version 3 of the library is now the default. + + IBM vacpp: Workaround for compiler bug affecting `iterator\_facade`. + ([#4912](https://svn.boost.org/trac/boost/ticket/4912)) + + Verify, clarify, document that `` + can be used to specify `BOOST\_FILESYSTEM\_VERSION`. + ([#4891](https://svn.boost.org/trac/boost/ticket/4891)) + + Replaced C-style `assert` + with `BOOST\_ASSERT`. + + Undeprecated `unique\_path()`. Instead, add a note mentioning + the workaround for lack of thread safety and possible change to cwd. + `unique\_path()` + is just too convenient to deprecate! + + Cleared several GCC warnings. + + Changed V2 code to use `BOOST\_THROW\_EXCEPTION`. + + Windows: Fix `status()` to report non-symlink reparse point + correctly. + + Add `symlink\_option` + to `recursive\_directory\_iterator`, + allowing control over recursion into directory symlinks. Note that + the default is changed to not recurse into directory symlinks. + + Reference documentation cleanup, including fixing missing and broken + links, and adding missing functions. + + Miscellaneous implementation code cleanup. +* [Fusion](/libs/fusion/index.html): + + + vector copy constructor now copies sequence members in the same order + on different platforms ([#2823](https://svn.boost.org/trac/boost/ticket/2823)) +* [Graph](/libs/graph/index.html): + + + Fixed Graphviz output to work on Visual C++ 7.1. + + Replaced assert with `BOOST\_ASSERT`. + + Changed to Boost.Filesystem v3. + + Fixed the following bugs from Trac: [#1021](https://svn.boost.org/trac/boost/ticket/1021), + [#4556](https://svn.boost.org/trac/boost/ticket/4556), + [#4631](https://svn.boost.org/trac/boost/ticket/4631), + [#4642](https://svn.boost.org/trac/boost/ticket/4642), + [#4715](https://svn.boost.org/trac/boost/ticket/4715), + [#4731](https://svn.boost.org/trac/boost/ticket/4731), + [#4737](https://svn.boost.org/trac/boost/ticket/4737), + [#4753](https://svn.boost.org/trac/boost/ticket/4753), + [#4758](https://svn.boost.org/trac/boost/ticket/4758), + [#4793](https://svn.boost.org/trac/boost/ticket/4793), + [#4843](https://svn.boost.org/trac/boost/ticket/4843), + [#4851](https://svn.boost.org/trac/boost/ticket/4851), + [#4852](https://svn.boost.org/trac/boost/ticket/4852), + [#4887](https://svn.boost.org/trac/boost/ticket/4887), + [#4914](https://svn.boost.org/trac/boost/ticket/4914), + [#4966](https://svn.boost.org/trac/boost/ticket/4966). + + Fixed various bugs not in Trac. +* [Hash](/libs/functional/hash/index.html): + + + Support for `std::type\_index` ([#4756](https://svn.boost.org/trac/boost/ticket/4756)). + + Avoid `-Wconversion` + warnings. +* [Iostreams](/libs/iostreams/index.html): + + + Use `BOOST\_ASSERT` + instead of `assert`. + + Fixed flush regression ([#4590](https://svn.boost.org/trac/boost/ticket/4590)). +* [Iterator](/libs/iterator/index.html): + + + fixed problem with `implicit\_cast` + ([#3645](https://svn.boost.org/trac/boost/ticket/3645)) +* [Math](/libs/math/doc/sf_and_dist/html/index.html): + + + Added Wald, Inverse Gaussian and geometric distributions. + + Added information about configuration macros. + + Added support for mpreal as a real-numered type. +* [Meta State Machine](/libs/msm/index.html): + + + [Compile-time + state machine analysis](/doc/libs/1_46_0/libs/msm/doc/HTML/ch03s05.html#backend-compile-time-analysis). + + [Boost.Parameter + interface definition for `msm::back::state\_machine<>` template arguments](/doc/libs/1_46_0/libs/msm/doc/HTML/ch03s05.html#backend-boost-parameter). + + [Possibility + to provide a container for the event and deferred event queues](/doc/libs/1_46_0/libs/msm/doc/HTML/ch03s05.html#backend-queues). + A policy implementation based on a more efficient Boost.CircularBuffer + is provided. + + `msm::back::state\_machine<>::is\_flag\_active` method made const. + + [Added + possibility to enqueue events for delayed processing](/doc/libs/1_46_0/libs/msm/doc/HTML/ch03s05.html#backend-enqueueing). + + Bugfixes + + - [#4926](https://svn.boost.org/trac/boost/ticket/4926). + - stack overflow using the Defer functor + - anonymous transition of a submachine not called for the initial + state +* [Optional](/libs/optional/index.html): + + + Updated test results with information about expected failures ([#2294](https://svn.boost.org/trac/boost/ticket/2294)) +* [Pool](/libs/pool/index.html): + + + Now can set a max\_size for pool ([#2696](https://svn.boost.org/trac/boost/ticket/2696)) + + `boost/pool/pool.hpp` uses `reinterpret\_cast` + instead of `static\_cast` + ([#2941](https://svn.boost.org/trac/boost/ticket/2941)) + + `boost::pool\_allocator` now works with vector + of vectors ([#386](https://svn.boost.org/trac/boost/ticket/386)) + + Boost pool is now compatible with Microsoft memory leak detection + ([#4346](https://svn.boost.org/trac/boost/ticket/4346)) +* [Program Options](/libs/program_options/index.html): + + + Fixed errors in examples in docs ([#3992](https://svn.boost.org/trac/boost/ticket/3992), + [#4858](https://svn.boost.org/trac/boost/ticket/4858)) + + Now takes `argv` as + const ([#3909](https://svn.boost.org/trac/boost/ticket/3909)) +* [Proto](/libs/proto/index.html): + + + **Breaking change**: `boost/proto/core.hpp` + no longer defines `functional::pop\_front` + and `functional::reverse`, which have moved to their + own headers under `boost/proto/functional` + + Add callable wrappers for more Fusion algorithms (including `fusion::at`); and callable wrappers for + some std utilities like `make\_pair`, + `first` and `second`, all under the new `boost/proto/functional` directory + + Allow transforms to be specified separately from a grammar + + `proto::matches` preserves domain-specific + expression wrappers + + Fix ADL issue with `operator,` in `proto::and\_` + transform + + Fix handling of grammar checking in expressions involving multiple + domains ([#4675](https://svn.boost.org/trac/boost/ticket/4675)) + + Fix ambiguous `operator<<` in `proto::display\_expr` + ([#4910](https://svn.boost.org/trac/boost/ticket/4910)) + + `fusion::is\_sequence` answers true for Proto + expressions ([#5006](https://svn.boost.org/trac/boost/ticket/5006)) + + Eliminate `-Wundef` + GCC warning in `boost/proto/fusion.hpp` + ([#5075](https://svn.boost.org/trac/boost/ticket/5075)) +* [Signals](/libs/signals/index.html): + + + gcc warning cleanup ([#4365](https://svn.boost.org/trac/boost/ticket/4365)) +* [Spirit](/libs/spirit/index.html): + + + Spirit V2.4.2, see the '[What's + New](/doc/libs/1_46_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_4_2.html)' section for details. +* [Tokenizer](/libs/tokenizer/index.html): + + + `isspace`/`ispunct` was called with wrong character + type ([#4791](https://svn.boost.org/trac/boost/ticket/4791)) +* [Unordered](/libs/unordered/index.html): + + + Avoid using `operator&` with the value type. + + Avoid `-Wconversion` + warnings. +* [Wave](/libs/wave/index.html): + + + See the [Changelog](/libs/wave/ChangeLog) for details. + +### Updated Tools + + +* [Boostbook](/tools/boostbook/index.html): + + + Better support for attributes on root elements - including `lang`. +* [Inspect](/tools/inspect/index.html): + + + Check that Boost headers do not use C's `assert` + macro. +* [Quickbook](/tools/quickbook/index.html): + + + Add support for `lang` + attribute in documentation info. + + Improved anchors. + + Support `import`, + `include` and `xinclude` in conditional phrases. + + Uses Filesystem 3. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.5, 4.5.2, + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2 + + Intel: 10.1, 11.0, 11.1 + + Clang: 2.8 + + Pathscale: 3.2. +* OS X: + + + GCC: 4.0.1, 4.2.1, 4.4 + + GCC, C++0x mode: 4.4. + + Intel: 11.1 +* Windows: + + + Visual C++: 7.1, 8.0, 9.0 and 10.0. + + GCC, mingw: 4.4.0. +* FreeBSD: + + + GCC: 4.2.1, 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.3, 4.4.5, 4.5.0, 4.5.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2 + + pgCC 11.1 + + Intel: 10.1, 11.0, 11.1 + + PathScale: 3.2, 4.0 + + Visual Age C++ 10.1 + + Clang from subversion +* OS X: + + + Intel C++ Compiler: 10.1, 11.0, 11.1 + + GCC: 4.0.1, 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 + + Clang from subversion +* Windows: + + + Visual C++: 7.1, 8.0, 9.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.4.0, 4.5.1, 4.6.0 + + GCC, mingw, C++0x mode: 4.5.1 + + Borland: 6.1.3 (2009), 6.2.1 (2010) +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0 +* FreeBSD: + + + GCC 4.2.1, 64 bit +* Solaris: + + + Sun C++: 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_46_1.html b/users/history/version_1_46_1.html new file mode 100644 index 0000000..9ec3a3c --- /dev/null +++ b/users/history/version_1_46_1.html @@ -0,0 +1,190 @@ +--- +title: Version 1.46.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.46.1 + +/\*\*/ + + + + + + + +Version 1.46.1 +============== + +Version 1.46.1 +-------------- + + +March 12th, 2011 15:45 GMT + + +[Documentation](/doc/libs/1_46_1/) + + +Downloads| Platform | File | +| unix | [boost\_1\_46\_1.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.46.1/boost_1_46_1.tar.bz2) | +| [boost\_1\_46\_1.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.46.1/boost_1_46_1.tar.gz) | +| windows | [boost\_1\_46\_1.7z](http://sourceforge.net/projects/boost/files/boost/1.46.1/boost_1_46_1.7z) | +| [boost\_1\_46\_1.zip](http://sourceforge.net/projects/boost/files/boost/1.46.1/boost_1_46_1.zip) | + + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + `EV\_ONESHOT` seems + to cause problems on some versions of Mac OS X, with the `io\_service` destructor getting stuck + inside the `close()` system call. Changed the kqueue + backend to use `EV\_CLEAR` + instead ([#5021](https://svn.boost.org/trac/boost/ticket/5021)). + + Fixed compile failures with some versions of g++ + due to the use of anonymous enums ([#4883](https://svn.boost.org/trac/boost/ticket/4883)). + + Fixed a bug on kqueue-based platforms, where some system calls that + repeatedly fail with `EWOULDBLOCK` + are not correctly re-registered with kqueue. + + Changed `asio::streambuf` to ensure that its internal + pointers are updated correctly after the data has been modified using + `std::streambuf` member functions. + + Fixed a bug that prevented the linger socket option from working + on platforms other than Windows. +* [Fusion](/libs/fusion/): + + + Fix `disable\_if` for + Visual C++ 7.1/8.0 +* [Filesystem](/libs/filesystem/): + + + Fix for STLPort ([#5217](https://svn.boost.org/trac/boost/ticket/5217)). + + PGI large file support +* [Graph](/libs/graph/): + + + Bug fixes, including fixes for: [#5181](https://svn.boost.org/trac/boost/ticket/5181), + [#5180](https://svn.boost.org/trac/boost/ticket/5180), + [#5199](https://svn.boost.org/trac/boost/ticket/5199) + and [#5175](https://svn.boost.org/trac/boost/ticket/5175). +* [Icl](/libs/icl/): + + + Intersects for interval\_maps and segment\_type/element\_type ([#5207](https://svn.boost.org/trac/boost/ticket/5207)). + + Fixed some ambiguous calls to functions in boost and std namespaces. + + Other bug fixes, and documentation fixes. +* [Math](/libs/math/): + + + Several minor bug fixes. +* [Polygon](/libs/polygon/): + + + Disabled 45-degree booleans optimization. +* [Proto](/libs/proto/): + + + Make `display\_expr` + copyable ([#5096](https://svn.boost.org/trac/boost/ticket/5096)). + + Fix const correctness problem in `pass\_through`. +* [Property Tree](/libs/property_tree/): + + + Fix compile error in JSON parser. +* [Signals2](/libs/signals2/): + + + Fix unused parameter warning. +* [TR1](/libs/tr1/): + + + Allow specialization of `std::tr1::hash`. + + Improved support for Pathscale and Sun compilers. +* [Unordered](/libs/unordered/): + + + Add missing copy constructors and assignment operators when using + rvalue references ([#5119](https://svn.boost.org/trac/boost/ticket/5119)). + +### Other changes + + +* Update getting started guide to reflect changes to boost build. +* In quickbook, workaround optimization bug in g++ 4.4. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.1, 4.4.3, 4.4.5, 4.5.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 + + Intel: 10.1, 11.0, 11.1 + + Clang: 2.8 + + Pathscale: 3.2 +* OS X: + + + GCC: 4.0.1, 4.2.1, 4.4 + + GCC, C++0x mode: 4.4. + + Intel: 11.1 +* Windows: + + + Visual C++: 7.1, 8.0, 9.0 and 10.0. + + GCC, mingw: 4.4.0. +* FreeBSD: + + + GCC: 4.2.1, 64 bit. + Boost's additional test compilers include: + + + +* Linux: + + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.4, 4.4.5, 4.5.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 + + pgCC: 11.2 + + Intel: 10.1, 11.0, 11.1 + + PathScale: 3.2, 4.0.8 + + Visual Age C++: 10.1 + + Clang from subversion +* OS X: + + + Intel C++ Compiler: 10.1, 11.0, 11.1 + + GCC: 4.0.1, 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 + + Clang from subversion, with GNU libstdc++, libc++ and libc++ in C++0x + mode. +* Windows: + + + Visual C++: 7.1, 9.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.5.1 + + GCC, mingw, C++0x mode: 4.5.1 + + Borland: 6.1.3 (2009), 6.2.1 (2010) +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0 +* Solaris: + + + Sun C++: 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_47_0.html b/users/history/version_1_47_0.html new file mode 100644 index 0000000..4f34888 --- /dev/null +++ b/users/history/version_1_47_0.html @@ -0,0 +1,453 @@ +--- +title: Version 1.47.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.47.0 + +/\*\*/ + + + + + + + +Version 1.47.0 +============== + +Version 1.47.0 +-------------- + + +July 11th, 2011 22:19 GMT + + +[Documentation](/doc/libs/1_47_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_47\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.47.0/boost_1_47_0.tar.bz2) | +| [boost\_1\_47\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.47.0/boost_1_47_0.tar.gz) | +| windows | [boost\_1\_47\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.47.0/boost_1_47_0.7z) | +| [boost\_1\_47\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.47.0/boost_1_47_0.zip) | + + +### New Libraries + + +* [Chrono](/libs/chrono/index.html): + Useful time + utilities, from Vicente J. Botet Escribá. +* [Geometry](/libs/geometry/index.html): + Geometry + Library, from Barend Gehrels, Bruno Lalande and Mateusz Loskot. +* [Phoenix](/libs/phoenix/index.html): + Define small + unnamed function objects at the actual call site, and more, from Joel de + Guzman, Dan Marsden and Thomas Heller. +* [Ratio](/libs/ratio/index.html): + Compile time rational + arithmetic, from Vicente J. Botet Escribá. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/index.html): + + + New statistical accumulators: `sum\_kahan`, + `sum\_of\_weights\_kahan`, + `sum\_of\_variates\_kahan`. +* [Asio](/libs/asio/index.html): + + + Many new features and improvements: + + - Signal handling. + - A debugging aid for asynchronous programs. + - Timeouts on socket iostreams. + - Composed connect operations. + - Rewritten SSL implementation. + - C++0x move support. + - Compatibility with POSIX `fork()`. + - ... and much more. See the [Revision + History](/doc/libs/1_47_0/doc/html/boost_asio/history.html) in the Boost.Asio documentation for more details. + + Tickets addressed: [#2879](https://svn.boost.org/trac/boost/ticket/2879), + [#3238](https://svn.boost.org/trac/boost/ticket/3238), + [#3297](https://svn.boost.org/trac/boost/ticket/3297), + [#3307](https://svn.boost.org/trac/boost/ticket/3307), + [#3702](https://svn.boost.org/trac/boost/ticket/3702), + [#3741](https://svn.boost.org/trac/boost/ticket/3741), + [#3900](https://svn.boost.org/trac/boost/ticket/3900), + [#3905](https://svn.boost.org/trac/boost/ticket/3905), + [#3939](https://svn.boost.org/trac/boost/ticket/3939), + [#3958](https://svn.boost.org/trac/boost/ticket/3958), + [#4162](https://svn.boost.org/trac/boost/ticket/4162), + [#4971](https://svn.boost.org/trac/boost/ticket/4971), + [#5124](https://svn.boost.org/trac/boost/ticket/5124), + [#5128](https://svn.boost.org/trac/boost/ticket/5128), + [#5418](https://svn.boost.org/trac/boost/ticket/5418), + [#5453](https://svn.boost.org/trac/boost/ticket/5453). +* [Config](/libs/config/index.html): + + + Fixed bug [#1988](https://svn.boost.org/trac/boost/ticket/1988) +* [DateTime](/libs/date_time/index.html): + + + Fixed bugs [#4920](https://svn.boost.org/trac/boost/ticket/4920), + [#3651](https://svn.boost.org/trac/boost/ticket/3651), + [#4845](https://svn.boost.org/trac/boost/ticket/4845), + [#4475](https://svn.boost.org/trac/boost/ticket/4475), + [#4952](https://svn.boost.org/trac/boost/ticket/4952), + [#5345](https://svn.boost.org/trac/boost/ticket/5345), + [#5250](https://svn.boost.org/trac/boost/ticket/5250), + [#4798](https://svn.boost.org/trac/boost/ticket/4798), + [#4754](https://svn.boost.org/trac/boost/ticket/4754), + [#4411](https://svn.boost.org/trac/boost/ticket/4411), + [#5126](https://svn.boost.org/trac/boost/ticket/5126), + [#4780](https://svn.boost.org/trac/boost/ticket/4780), + [#2475](https://svn.boost.org/trac/boost/ticket/2475), + [#1674](https://svn.boost.org/trac/boost/ticket/1674). +* [Dynamic Bitset](/libs/dynamic_bitset/index.html): + + + Fixed bug [#5439](https://svn.boost.org/trac/boost/ticket/5439) +* [Foreach](/libs/foreach/index.html): + + + Use rvalue refs on supporting compilers for const rvalue detection. +* [Function](/libs/function/index.html): + + + Bug fixes: [#3410](https://svn.boost.org/trac/boost/ticket/3410), + [#3618](https://svn.boost.org/trac/boost/ticket/3618), + [#3912](https://svn.boost.org/trac/boost/ticket/3912), + [#4073](https://svn.boost.org/trac/boost/ticket/4073), + [#4325](https://svn.boost.org/trac/boost/ticket/4325), + [#4717](https://svn.boost.org/trac/boost/ticket/4717), + [#4765](https://svn.boost.org/trac/boost/ticket/4765). +* [Function Types](/libs/function_types/index.html): + + + Bug fixes: [#1653](https://svn.boost.org/trac/boost/ticket/1653), + [#3162](https://svn.boost.org/trac/boost/ticket/3162). +* [Graph](/libs/graph/index.html): + + + Bug fixes. + + Remove deprecated function `kolmogorov\_max\_flow`, + use `boykov\_kolmogorov\_max\_flow` + instead. + + Removed `` header since its functionality + is in Boost.Type\_Traits. +* [Iostreams](/libs/iostreams/index.html): + + + Support filesystem v3 paths ([#4485](https://svn.boost.org/trac/boost/ticket/4485)). + + Fix a memory leak in `chain` + ([#4922](https://svn.boost.org/trac/boost/ticket/4922)). +* [Iterator](/libs/iterator/index.html): + + + Add `function\_input\_iterator` + ([#2893](https://svn.boost.org/trac/boost/ticket/2893)). + + Bug fixes: [#1427](https://svn.boost.org/trac/boost/ticket/1427), + [#1517](https://svn.boost.org/trac/boost/ticket/1517), + [#3434](https://svn.boost.org/trac/boost/ticket/3434). +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Better performance and less memory usage for many combinations of + Source and Target types ([#5564](https://svn.boost.org/trac/boost/ticket/5564), + [#5417](https://svn.boost.org/trac/boost/ticket/5417), + [#4397](https://svn.boost.org/trac/boost/ticket/4397), + [#5350](https://svn.boost.org/trac/boost/ticket/5350), + [#5576](https://svn.boost.org/trac/boost/ticket/5576)). + + Documentation updated ([#5576](https://svn.boost.org/trac/boost/ticket/5576), + [#5494](https://svn.boost.org/trac/boost/ticket/5494)). +* [Logic](/libs/logic/index.html): + + + Bug fixes: [#3093](https://svn.boost.org/trac/boost/ticket/3093), + [#3600](https://svn.boost.org/trac/boost/ticket/3600). +* [Math](/libs/math/index.html): + + + Added changesign function to sign.hpp to facilitate addition of nonfinite + facets. + + Addition of nonfinite facets from Johan Rade, with tests, examples + of use for C99 format infinity and NaN, and documentation. + + Added tests and documentation of changesign from Johan Rade. +* [Meta State Machine](/libs/msm/index.html): + + + Added a [`stop()`](/doc/libs/1_47_0/libs/msm/doc/HTML/ch03s05.html#backend-start) + method in the back-end. + + Added partial support for [Boost.Phoenix + functors in eUML](/doc/libs/1_47_0/libs/msm/doc/HTML/ch03s04.html#eUML-phoenix). + + Added the possibility to [choose + when state switching occurs](/doc/libs/1_47_0/libs/msm/doc/HTML/ch03s05.html#backend-state-switch). + + Bugfixes: + + - [#5117](https://svn.boost.org/trac/boost/ticket/5117), + [#5253](https://svn.boost.org/trac/boost/ticket/5253), + [#5533](https://svn.boost.org/trac/boost/ticket/5533), + [#5573](https://svn.boost.org/trac/boost/ticket/5573). + - gcc warnings about unused variables. + - better implementation of `favor\_compile\_time` + back-end policy. + - bug with eUML and state construction. + - incorrect eUML event and state macros. + - incorrect event type passed to a direct entry state's on\_entry + action. + - more examples. +* [MultiIndex](/libs/multi_index/index.html): + + + Fixed an ADL problem in `composite\_key\_compare` + related with Boost.Ref. + + Maintenance fixes. +* [Proto](/libs/proto/index.html): + + + Pre-preprocessed for better compile times. + + Default preprocessor limits raised: + + - Max expression arity (`BOOST\_PROTO\_MAX\_ARITY`) + bumped from 5 to 10. + - Max function call arity (`BOOST\_PROTO\_MAX\_FUNCTION\_CALL\_ARITY`) + bumped from 5 to 10. + - Max logical operator arity (`BOOST\_PROTO\_MAX\_LOGICAL\_ARITY`) + bumped from 8 to 10. + + Better integration of `proto::basic\_expr` + to avoid accidental needless instantiations of `proto::expr`. +* [Random](/libs/random/index.html): + + + Synchronized with the new standard. + + - Many new distributions added: `chi\_squared\_distribution`, + `negative\_binomial\_distribution`, + `fisher\_f\_distribution`, + `student\_t\_distribution`, + `weibull\_distribution`, + `extreme\_value\_distribution`, + `discrete\_distribution`, + `piecewise\_constant\_distribution`, + `piecewise\_liear\_distribution` + - Renamed `uniform\_int` + and `uniform\_real` + to `uniform\_int\_distribution` + and `uniform\_real\_distribution`. + - Added members to all distributions: `param\_type`, + `param`, stream + operators, comparison operators, `min` + and `max`. + - Allow distributions to be used directly with generators without + use of `variate\_generator`. + - Changed the meaning of the parameters of `geometric\_distribution` + and `lognormal\_distribution`. + - Added a second parameter to `gamma\_distribution`. + - Added `seed\_seq` + and added the corresponding constructors and `seed` overloads the generators. + - Added `generate\_canonical`. + - Renamed the engine tempates. e.g. `mersenne\_twister` + becomes `mersenne\_twister\_engine`. + - New engine adapter `independent\_bits\_engine`. + - Added new predefined engine typedefs: `mt19937\_64`, + `ranlux[24|48][\_base]`, + `knuth\_b`. + - Updated seeding algorithms. + - Added `discard` + - Use unsigned types instead of signed types in all the predefined + engines. + + Bug fixes: + + - `linear\_congruential\_engine` + could assert because the modular arithmetic was not implemented + in all cases. `shuffle\_output`, + now called `shuffle\_order\_engine`, + could cause integer overflow. These cases were not triggered + by any predefined engines. + - `uniform\_small\_int` + now actually behaves as documented. + + New efficient algorithms for `binomial\_distribution` + and `poisson\_distribution`. + + Moved all features into `namespace + boost::random` + + Backwards compatibility issues: + + - The seeding algorithms have changed. This was unavoidable for + compatibility with the standard. Not to mention that some of + the existing algorithms were weird and inconsistent. + + * Seeding with an integer: The behaviour should be unchanged + for most generators except `lagged\_fibonacci` + and `subtract\_with\_carry` + (and thus `ranlux`). + * Seeding a generator with another generator: This has + been enabled by making all all generators models of + `SeedSeq`. + Therefore, if you seed a Boost.Random generator with + a non Boost.Random generator, your code will no longer + compile. The algorithm has changed, so code using this + seeding method will yield different values. + * Seeding a generator from a pair of iterators: This implicitly + assumed that the elements were 32-bit integers in some + places, but not everywhere. I've added this requirement + everywhere and updated the algorithms accordingly. The + behaviour of generators with a `value\_type` + no more than 32 bits should be unchanged. + - Renaming: + + * Whenever a class was renamed, there is a wrapper with + the old name. There are also using declarations in namespace + boost for everything that was moved. + * The names of a few accessors in the distributions changed. + Both the old and the new names are allowed. + - `geometric\_distribution` + and `lognormal\_distribution`: + The behaviour is different at runtime. `boost::geometric\_distribution` + and `boost::lognormal\_distribution` provide + the old behaviour, `boost::random::geometric\_distribution` + and `boost::random::lognormal\_distribution` provide + the new behaviour. + - Streaming: gamma\_distribution has a new parameter, thus text + saved with the old version will not readable by the new version. + - `variate\_generator` + is now a simple pass through wrapper. Code that assumes that + it will adjust the generator's result type to match the distribution + will no longer work. This is not an issue with any of the distributions + provided by Boost.Random. + - Return types: The `result\_types` + of some generators have changed slightly. Some signed types + have changed to unsigned to match the standard. + - `has\_fixed\_range`: + This is now always false, as it doesn't appear to be very useful + and is excessively cumbersome. Anything that was accessing + `const\_min` and + `const\_max` without + first checking `has\_fixed\_range` + was incorrect to begin with. +* [Range](/libs/range/index.html): + + + Fixed the end position `irange` + when step size is greater than 1 ([#5544](https://svn.boost.org/trac/boost/ticket/5544)). +* [Spirit](/libs/spirit/index.html): + + + Spirit V2.5, see the '[What's + New](/doc/libs/1_47_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_5.html)' section for details. +* [Tokenizer](/libs/tokenizer/index.html): + + + Fixed bug [#4649](https://svn.boost.org/trac/boost/ticket/4649). +* [Utility](/libs/utility/index.html): + + + Bug fixes: [#4432](https://svn.boost.org/trac/boost/ticket/4432). +* [Uuid](/libs/utility/index.html): + + + Fixed tickets: ([#5570](https://svn.boost.org/trac/boost/ticket/5570), + [#4601](https://svn.boost.org/trac/boost/ticket/4601), + [#4991](https://svn.boost.org/trac/boost/ticket/4991), + [#5145](https://svn.boost.org/trac/boost/ticket/5145), + [#5235](https://svn.boost.org/trac/boost/ticket/5235)). +* [Wave](/libs/wave/index.html): + + + Wave V2.3.0, see the [Changelog](/libs/wave/ChangeLog) + for details. + +### Build System + + +* The official name of Boost.Build executable was changed to `b2`. The bootstrap scripts create a copy + with the old name `bjam` + to prevent third-party build scripts from failing. + +### Updated Tools + + +* [BoostBook](/tools/boostbook/index.html): + + + Handle doxygen tags: `\see`, `tparam`, + `ref` (for classes + only). + + Support note for classes as well as functions. +* [Quickbook](/tools/quickbook/index.html): + + + Generate consistent ids for headings. + + Improved unicode support for windows. + + Warn about windows paths, as they aren't portable. + + Reverse deprecation of `[br]`. + + Support date ranges and comma seperated clauses in copyright attributes. + + Improved delimeter checking for simple markup (e.g. `\*bold\*`). + + Pass-thru comments in code snippets. + + `__FILENAME__` macro now generates relative paths. + + Allow quickbook escapes inside comments in syntax highlighted code. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + LLVM Clang 2.8 + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.1, 4.4.3, 4.4.5, 4.5.1, 4.5.2, + 4.6.0, 4.6.1 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 + + Intel 12.0 +* OS X: + + + Apple Clang 2.1 + + Intel 11.1 + + GCC: 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 7.1, 9.0, 10.0 + + GCC, mingw: 4.4.0 +* FreeBSD: + + + GCC 4.2.1, 64 bit +* QNX: + + + QCC + Boost's additional test compilers include: + + + +* Linux: + + + Clang from subversion, with GNU libstdc++. + + LLVM Clang 2.8 + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.3, 4.4.5, 4.5.1, 4.5.2, 4.6.0, + 4.6.1 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 + + pgCC: 11.2 + + Intel: 10.1, 11.0, 11.1, 12.0 + + PathScale: 3.2 +* OS X: + + + Clang from subversion, with GNU libstdc++. + + Intel 11.1 + + GCC: 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 7.1, 9.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.5.2 + + GCC, C++0x mode, mingw: 4.5.2 +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_48_0.html b/users/history/version_1_48_0.html new file mode 100644 index 0000000..f6451d3 --- /dev/null +++ b/users/history/version_1_48_0.html @@ -0,0 +1,400 @@ +--- +title: Version 1.48.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.48.0 + +/\*\*/ + + + + + + + +Version 1.48.0 +============== + +Version 1.48.0 +-------------- + + +November 15th, 2011 15:47 GMT + + +[Documentation](/doc/libs/1_48_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_48\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.tar.bz2) | +| [boost\_1\_48\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.tar.gz) | +| windows | [boost\_1\_48\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.7z) | +| [boost\_1\_48\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.zip) | + + +### Patches + + +* [Locale + Patch](http://cppcms.com/files/locale/boost_locale_utf.patch) - Fixes a bug which causes `boost::locale::utf::utf\_traits` + to accept some invalid UTF-8 sequences, which is a possible security flaw. + +### New Libraries + + +* [Container](/libs/container/index.html): + Standard + library containers and extensions, from Ion Gaztañaga. +* [Locale](/libs/locale/index.html): + Provide localization + and Unicode handling tools for C++, from Artyom Beilis. +* [Move](/doc/html/move.html): + Portable move semantics + for C++03 and C++11 compilers, from Ion Gaztañaga. + +### Updated Libraries + + +* [Asio](/libs/asio/index.html): + + + Implemented various performance improvements, including: + + - Using thread-local operation queues in single-threaded use + cases (i.e. when `concurrency\_hint` + is 1) to eliminate a lock/unlock pair. + - Allowing some `epoll\_reactor` + speculative operations to be performed without holding the + lock. + - Improving locality of reference by performing an `epoll\_reactor`'s I/O operation + immediately before the corresponding handler is called. Also + improves scalability across CPUs. + - Specialising asynchronous read and write operations for buffer + sequences that are arrays (`boost::array` + or `std::array`) of exactly two buffers. + + Fixed compile error in regex overload of `async\_read\_until` + ([#5688](https://svn.boost.org/trac/boost/ticket/5688)). + + Fixed Windows-specific compile error by explicitly specifying the + `signal()` + function from the global namespace ([#5722](https://svn.boost.org/trac/boost/ticket/5722)). + + Changed `deadline\_timer` + implementation to not read clock unless the timer heap is non-empty. + + Changed SSL buffer sizes to be large enough to hold a complete TLS + record ([#5854](https://svn.boost.org/trac/boost/ticket/5854)). + + Fixed synchronous `null\_buffers` + operations so that they obey the user's non-blocking setting ([#5756](https://svn.boost.org/trac/boost/ticket/5756)). + + Changed to set `fd\_set` + size at runtime when using Windows. + + Disabled MSVC warning due to const qualifier being applied to function + type. + + Fixed crash that occurs when using Intel C++ compiler ([#5763](https://svn.boost.org/trac/boost/ticket/5763)). + + Changed OpenSSL initialisation to support all available algorithms. + + Fixed SSL error mapping when session is gracefully shut down. + + Added some latency test programs. + + Clarified that a read operation ends when the buffer is full ([#5999](https://svn.boost.org/trac/boost/ticket/5999)). + + Fixed exception safety issue in `epoll\_reactor` + initialisation ([#6006](https://svn.boost.org/trac/boost/ticket/6006)). + + Made number of strand implementations configurable via `BOOST\_ASIO\_STRAND\_IMPLEMENTATIONS` + macro. + + Added support for `BOOST\_ASIO\_ENABLE\_SEQUENTIAL\_STRAND\_ALLOCATION` + flag which switches strand allocation to use a round-robin approach + rather than hashing. + + Fixed potential strand starvation issue that can occur when `strand.post()` + is used. +* [Chrono](/libs/chrono/index.html): + + + [#5979](http://svn.boost.org/trac/boost/ticket/5979) + Added chrono rounding utilities as defined by Howard Hinnant [here](http://home.roadrunner.com/~hinnant/duration_io/chrono_util.html). + + [#5978](http://svn.boost.org/trac/boost/ticket/5978) + Add BOOST\_CHRONO\_HAS\_PROCESS\_CLOCKS to know if process clocks are + available. + + [#5998](http://svn.boost.org/trac/boost/ticket/5998) + Make possible to disable hybrid error handling. + + [#5906](http://svn.boost.org/trac/boost/ticket/5906) + Take in account the constexpr as defined in the standard. + + [#5907](http://svn.boost.org/trac/boost/ticket/5907) + Take in account noexcept for compilers supporting it. + + Fixed some bugs. + + See the [History](/doc/html/chrono/appendices.html#chrono.appendices.history) + for more details. +* [Config](/libs/config/index.html): + + + Add `BOOST\_NO\_DECLTYPE\_N3276` + config macro. (See [N3276](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf).) +* [Fusion](/libs/fusion/index.html): + + + Make `single\_view` + a random access fusion sequence. + + Remove bogus compile-time asserts from `fusion::distance`. + + Cleaner implementation of segmented Fusion. +* [Geometry](/libs/geometry): + + + Bugfixes: + + - Robustness issue, in some circumstances the union failed to + output. Fixed. + - Robustness issue, in some circumstances the calculated intersection + point was outside the segment. Fixed. + - Concept issue, cartesian intersect didn't understand segments + other than the provided one. Fixed. + - Sometimes self-intersections in linestrings were missed. Fixed. + - The fusion coordinate system was not registered correctly. + Fixed. + + Solved tickets: + + - [#5726](https://svn.boost.org/trac/boost/ticket/5726) + (Segment intersection algorithm still assumes 'first', 'second' + members) + - [#5744](https://svn.boost.org/trac/boost/ticket/5744) + (mistake fusion adapt example) + - [#5748](https://svn.boost.org/trac/boost/ticket/5748) + (need include ) + - [#5954](https://svn.boost.org/trac/boost/ticket/5954) + (distance\_pythagoras skips sqrt() step) + + Improvements on algorithms: + + - Checking self-intersections is now not done automatically, + this can blast performance. + - Besides that, checking self-intersections is made faster. + - Intersections now avoid outputting duplicate points. So they + output the minimal set. + + Additional algorithms: + + - covered\_by: within is defined as "within, not on boundary". + covered\_by is "within or on boundary" + + Additional functionality: + + - within: strategies can now be specified for within and within + - convert: a much broader range of conversions is supported + - assign: idem, (currently partly) synonym for convert (but reversed + arguments) + + Additional coordinate types: + + - Basic support for Boost.Rational +* [Graph](/libs/graph/): + + + Fixed bugs [#5185](https://svn.boost.org/trac/boost/ticket/5185), + [#5506](https://svn.boost.org/trac/boost/ticket/5506), + [#5813](https://svn.boost.org/trac/boost/ticket/5813) + and [#5919](https://svn.boost.org/trac/boost/ticket/5919). + + Various other bug fixes not in Trac. + + Changed edge\_descriptor type for reverse\_graph to a new data type + to avoid ambiguities with the edge\_descriptor of the underlying graph. +* [Interprocess](/libs/interprocess/index.html): + + + Fixed bugs [#2796](https://svn.boost.org/trac/boost/ticket/2796), + [#4031](https://svn.boost.org/trac/boost/ticket/4031), + [#4251](https://svn.boost.org/trac/boost/ticket/4251), + [#4452](https://svn.boost.org/trac/boost/ticket/4452), + [#4895](https://svn.boost.org/trac/boost/ticket/4895), + [#5077](https://svn.boost.org/trac/boost/ticket/5077), + [#5120](https://svn.boost.org/trac/boost/ticket/5120), + [#5123](https://svn.boost.org/trac/boost/ticket/5123), + [#5230](https://svn.boost.org/trac/boost/ticket/5230), + [#5197](https://svn.boost.org/trac/boost/ticket/5197), + [#5287](https://svn.boost.org/trac/boost/ticket/5287), + [#5294](https://svn.boost.org/trac/boost/ticket/5294), + [#5306](https://svn.boost.org/trac/boost/ticket/5306), + [#5308](https://svn.boost.org/trac/boost/ticket/5308), + [#5392](https://svn.boost.org/trac/boost/ticket/5392), + [#5409](https://svn.boost.org/trac/boost/ticket/5409), + + Added support to customize offset\_ptr and allow creating custom managed + segments that might be shared between 32 and 64 bit processes. + + Shared memory in windows has again filesystem lifetime: kernel bootstamp + and WMI use to get a reliable timestamp was causing a lot of trouble. +* [Intrusive](/libs/intrusive/index.html): + + + Fixed bugs [#4797](https://svn.boost.org/trac/boost/ticket/4797), + [#5165](https://svn.boost.org/trac/boost/ticket/5165), + [#5183](https://svn.boost.org/trac/boost/ticket/5183), + [#5191](https://svn.boost.org/trac/boost/ticket/5191). +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Added code to work with Inf and NaN values on any platform ([#5689](https://svn.boost.org/trac/boost/ticket/5689)). + + New Quickbook documentation ([#5723](https://svn.boost.org/trac/boost/ticket/5723)). + + Better performance and less memory usage for many combinations of + Source and Target types. + + Better performance for C locale. +* [Math](/libs/math/index.html): + + + Added new series evaluation methods to the cyclic Bessel I, J, K + and Y functions. Also taken great care to avoid spurious over and + underflow of these functions. Fixes issue [#5560](https://svn.boost.org/trac/boost/ticket/5560). + + Added an example of using Inverse Chi-Squared distribution for Bayesian + statistics, provided by Thomas Mang. + + Added tests to use improved version of lexical\_cast which handles + C99 nonfinites without using global facets. + + Corrected wrong out-of-bound uniform distribution CDF complement + values [#5733](https://svn.boost.org/trac/boost/ticket/5733). + + Enabled long double support on OpenBSD (issue [#6014](https://svn.boost.org/trac/boost/ticket/6014)). + + Changed nextafter and related functions to behave in the same way + as other implementations - so that nextafter(+INF, 0) is a finite + value (issue [#5832](https://svn.boost.org/trac/boost/ticket/5832)). + + Changed tuple include configuration to fix issue when using in conjunction + with Boost.Tr1 (issue [#5934](https://svn.boost.org/trac/boost/ticket/5934)). + + Changed class eps\_tolerance to behave correctly when both ends of + the range are zero (issue [#6001](https://svn.boost.org/trac/boost/ticket/6001)). + + Fixed missing include guards on prime.hpp (issue [#5927](https://svn.boost.org/trac/boost/ticket/5927)). + + Removed unused/undocumented constants from constants.hpp (issue + [#5982](https://svn.boost.org/trac/boost/ticket/5982)). + + Fixed missing std:: prefix in nonfinite\_num\_facets.hpp (issue [#5914](https://svn.boost.org/trac/boost/ticket/5914)). + + Minor patches for Cray compiler compatibility. +* [MSM](/libs/msm/): + + + eUML: added easier event reprocessing: process(event\_) and reprocess() + + Rewrite of internal transition tables. There were a few bugs (failing + recursivity in internal transition tables of sub-sub machines) and + a missing feature (unused internal transition table of the main state + machine). + + Bugfixes + + - Reverted favor\_compile\_time policy to Boost 1.46 state + - none event now is convertible from any other event + - eUML and pseudo exit states + - Fixed not working Flag\_AND + - Fixed rare bugs causing multiple processing of the same event + in a submachine whose transition table contains this event + and a base event of it. + - gcc warnings about unused variables + + Breaking change: the new internal transition table feature causes + a minor breaking change. In a submachine, the "Fsm" template + parameter for guards / actions of an internal table declared using + internal\_transition\_table now is the submachine, not the higher-level + state machine. Internal transitions declared using internal rows + in the higher-level state machine keep their behavior (the "Fsm" + parameter is the higher-level state machine). To sum up, the internal + transition "Fsm" parameter is the closest state machine + containing this transition. +* [Numeric.Conversion](/libs/numeric/conversion/index.html): + + + Added numeric\_cast\_traits; see '[numeric\_cast\_traits](/doc/libs/1_48_0/libs/numeric/conversion/doc/html/boost_numericconversion/type_requirements_and_user_defined_types_support.html#boost_numericconversion.type_requirements_and_user_defined_types_support.udts_with_numeric_cast)' + for details. +* [Proto](/libs/proto/index.html): + + + **Breaking Change:** Reduce numbers + of operator overloads by using rvalue references on compilers that + support them. Any user code that defines additional operator overloads + on Proto expressions could potentially be rendered ambiguous by this + change. The solution is to use a grammar to disable Proto's operators + that are made ambiguous by any user-defined operators. + + Move definitions of Proto tag types into an ADL-blocking namespace. + + Add second template parameter to `proto::siwtch\_` + to control dispatching to cases. + + Allow dependent domains to be specified with `BOOST\_PROTO\_EXTENDS` + and `BOOST\_PROTO\_BASIC\_EXTENDS`. +* [Regex](/libs/regex/): + + + Fixed issues: [#698](https://svn.boost.org/trac/boost/ticket/698), + [#5835](https://svn.boost.org/trac/boost/ticket/5835), + [#5958](https://svn.boost.org/trac/boost/ticket/5958), + [#5736](https://svn.boost.org/trac/boost/ticket/5736). +* [Spirit](/libs/spirit/index.html): + + + Spirit V2.5.1, see the '[What's + New](/doc/libs/1_48_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_5_1.html)' section for details. +* [TypeTraits](/libs/type_traits/): + + + Extension to support [operator + detection](/libs/type_traits/doc/html/boost_typetraits/category/value_traits/operators.html). +* [Unordered](/libs/unordered/): + + + Improved support for the C++11 standard - breaking change to equality + and emplace. + + Use Boost.Move to implement move semantics. + + See the [change + log](/doc/html/unordered/changes.html#unordered.changes.boost_1_48_0___major_update) for full details. +* [Wave](/libs/wave/index.html): + + + See the [Changelog](/libs/wave/ChangeLog) for details. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + LLVM Clang 2.8 + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.1, 4.5.2, 4.6 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 + + Intel 11.1 +* OS X: + + + Intel 11.1 + + GCC: 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 8.0, 9.0, 10.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. +* QNX: + + + QCC 4.4.2 + + QCC, C++0x mode: 4.4.2, 4.6.1 + Boost's additional test compilers include: + + + +* Linux: + + + Clang from subversion, with libc++ and GNU libstdc++ + + LLVM Clang 2.8 x + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.5.4, 4.6.1, 4.6.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.4.4, 4.5.2 + + pgCC: 11.2 x + + Intel: 10.1, 11.1, 12.0 + + PathScale: 4.0.8 + + Visual Age 10.1 +* OS X: + + + Clang from subversion, with libc++ and GNU libstdc++. + + Intel 11.1. + + GCC: 4.2.1, 4.4.4. + + GCC, C++0x mode: 4.4.4. +* Windows: + + + Visual C++ 8.0, 9.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.2, 4.5.4, 4.6.1 + + GCC, C++0x mode, mingw: 4.5.2 + + GCC, mingw 64-bit: 4.7.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. +* Solaris: + + + Sun 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_49_0.html b/users/history/version_1_49_0.html new file mode 100644 index 0000000..be6747e --- /dev/null +++ b/users/history/version_1_49_0.html @@ -0,0 +1,447 @@ +--- +title: Version 1.49.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.49.0 + +/\*\*/ + + + + + + + +Version 1.49.0 +============== + +Version 1.49.0 +-------------- + + +February 24th, 2012 21:20 GMT + + +[Documentation](/doc/libs/1_49_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_49\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.49.0/boost_1_49_0.tar.bz2) | +| [boost\_1\_49\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.49.0/boost_1_49_0.tar.gz) | +| windows | [boost\_1\_49\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.49.0/boost_1_49_0.7z) | +| [boost\_1\_49\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.49.0/boost_1_49_0.zip) | + + +### Patches + + +* [Locale + Patch](http://cppcms.com/files/locale/boost_locale_utf.patch) - Fixes a bug which causes `boost::locale::utf::utf\_traits` + to accept some invalid UTF-8 sequences, which is a possible security flaw. + +### New Libraries + + +* [Heap](/libs/heap/index.html): + Priority queue data + structures, from Tim Blechmann. + +### Updated Libraries + + +* [Asio](/libs/asio): + + + Added a new class template `basic\_waitable\_timer` + based around the C++11 clock type requirements. It may be used with + the clocks from the C++11 `` + library facility or, if those are not available, Boost.Chrono. The + typedefs `high\_resolution\_timer`, + `steady\_timer` and + `system\_timer` may + be used to create timer objects for the standard clock types. + + Added a new `windows::object\_handle` + class for performing waits on Windows kernel objects. Thanks go to + Boris Schaeling for contributing substantially to the development + of this feature. + + On Linux, `connect()` can return EAGAIN in certain circumstances. + Remapped this to another error so that it doesn't look like a non-blocking + operation ([#6048](https://svn.boost.org/trac/boost/ticket/6048)). + + Fixed a compile error on NetBSD ([#6098](https://svn.boost.org/trac/boost/ticket/6098)). + + Fixed deadlock on Mac OS X ([#6275](https://svn.boost.org/trac/boost/ticket/6275)). + + Fixed a regression in `buffered\_write\_stream` + ([#6310](https://svn.boost.org/trac/boost/ticket/6310)). + + Fixed a non-paged pool "leak" on Windows when an `io\_service` is repeatedly run without + anything to do ([#6321](https://svn.boost.org/trac/boost/ticket/6321)). + + Reverted earlier change to allow some speculative operations to be + performed without holding the lock, as it introduced a race condition + in some multithreaded scenarios. + + Fixed a bug where the second buffer in an array of two buffers may + be ignored if the first buffer is empty. +* [Chrono](/libs/chrono): + + + Bug Fixes: + + - [#6092](http://svn.boost.org/trac/boost/ticket/6092) + Input from non integral durations makes the compiler fail. + - [#6093](http://svn.boost.org/trac/boost/ticket/6093) + [1/3]second fails as valid duration input. + - [#6113](http://svn.boost.org/trac/boost/ticket/6113) + duplicate symbol when BOOST\_CHRONO\_HEADER\_ONLY is defined. + - [#6243](http://svn.boost.org/trac/boost/ticket/6243) + Sandia-pgi-11.9: more than one instance of overloaded function + "min" matches. + - [#6257](http://svn.boost.org/trac/boost/ticket/6257) + process\_cpu\_clock::now() on linux gives time\_points 1/1000 + times. +* [Container](/libs/container/): + + + Fixed bugs [#6499](https://svn.boost.org/trac/boost/ticket/6499), + [#6336](https://svn.boost.org/trac/boost/ticket/6336), + [#6335](https://svn.boost.org/trac/boost/ticket/6335), + [#6287](https://svn.boost.org/trac/boost/ticket/6287), + [#6205](https://svn.boost.org/trac/boost/ticket/6205), + [#4383](https://svn.boost.org/trac/boost/ticket/4383). + + Added `allocator\_traits` + support for both C++11 and C++03 compilers through an internal `allocator\_traits` clone. +* [Filesystem](/libs/filesystem/): + + + Fix [#3714](https://svn.boost.org/trac/boost/ticket/3714), + Added test cases and fixes for class path errors when assignment + or append used self or portion of self as source. + + Fix [#4889](https://svn.boost.org/trac/boost/ticket/4889), + [#6320](https://svn.boost.org/trac/boost/ticket/6320), + Locale codecvt\_facet not thread safe on Windows. Move Windows, Mac + OS X, locale and codecvt facet back to namespace scope. POSIX except + OS X uses local static initialization (IE lazy) to ensure exceptions + are catchable if environmental variables are misconfigured and to + avoid use of locale("") if not actually used. + + Fix [#5652](https://svn.boost.org/trac/boost/ticket/5652), + recursive\_directory\_iterator fails on cyclic symbolic links. Thanks + to Daniel Aarno for the patch. + + Fix [#5653](https://svn.boost.org/trac/boost/ticket/5653), + recursive\_directory\_iterator(error\_code) can still throw filesystem\_error. + + Fix [#5900](https://svn.boost.org/trac/boost/ticket/5900), + directory\_iterator access violation on Windows if error is thrown. + Thanks to Andreas Eckleder for the patch. + + Fix [#5900](https://svn.boost.org/trac/boost/ticket/5900) + comment 2, a bug in director\_iterator construction with error\_code + argument that caused increment to be called without the ec argument + being passed. + + Fix [#5989](https://svn.boost.org/trac/boost/ticket/5989) + by cleaning up test suite path\_test.cpp code even though the ticket + itself was not a defect, and clarifying docs; iteration over a path + yields generic format. + + Fix [#5592](https://svn.boost.org/trac/boost/ticket/5592), + Change Windows codecvt processing from CP\_THREAD\_ACP to CP\_ACP. + + Operations function fixes for PGI compiler, thanks to Noel Belcourt. + + Relax permissions test to reflect reality, particularly on the Sandia + test platforms. +* [Foreach](/libs/foreach/): + + + Fix for [#6131](https://svn.boost.org/trac/boost/ticket/6131) +* [Geometry](/libs/geometry/): + + + Fixed bugs + + - Distance for multi-geometries ignored specified distance strategy. + - In difference for polygon/multi\_polygon (reported 2011/10/24 + on GGL-list). + - Raise exception for calculation of distances of multi-geometrie(s) + where one of them is empty + - Multi DSV did not correctly use settings. + - Self-intersections could sometimes be missed (introduced in + 1.48). + - Convex hull crashed on empty range (e.g. empty multi point). + + Solved tickets + + - [#6028](https://svn.boost.org/trac/boost/ticket/6028) + Documentation: closure. + - [#6178](https://svn.boost.org/trac/boost/ticket/6178) + Missing headerfile. + - [#6021](https://svn.boost.org/trac/boost/ticket/6021) + convex hull of multipoint. + + Additional functionality + + - Support for line/polygon intersections and differences + - Support for convert of segment/box of different point types + - Support for append for multi point + - Scalar functions (distance, area, length, perimeter) now throw + an empty\_input\_exception on empty input + + Documentation + + - Updated support status + + Internal changes + + - Updates in specializations/not\_implemented for distance/convert/assign/area + - Move of wkt/dsv to io folder, making domains redundant + - Strategy concepts assigned to zero to avoid clang warnings + (patched by Vishnu) +* [Graph](/libs/graph/): + + + Fixed bugs [#5881](https://svn.boost.org/trac/boost/ticket/5881), + [#6033](https://svn.boost.org/trac/boost/ticket/6033), + [#6061](https://svn.boost.org/trac/boost/ticket/6061), + [#6137](https://svn.boost.org/trac/boost/ticket/6137), + [#6246](https://svn.boost.org/trac/boost/ticket/6246), + [#6239](https://svn.boost.org/trac/boost/ticket/6239), + [#6293](https://svn.boost.org/trac/boost/ticket/6293), + [#6306](https://svn.boost.org/trac/boost/ticket/6306), + [#6313](https://svn.boost.org/trac/boost/ticket/6313) + and [#6371](https://svn.boost.org/trac/boost/ticket/6371), + plus others not in Trac. + + Re-enabled LEDA graph support (thanks to Jens Muller for the patch). + + Added documentation for `edge\_predecessor\_recorder`. +* [Icl](/libs/icl/): + + + Fixed tickets [#6095](https://svn.boost.org/trac/boost/ticket/6095) + and [#6210](https://svn.boost.org/trac/boost/ticket/6210). + + Added move semantics for constructors, assignment operators and binary + operators. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs [#6531](https://svn.boost.org/trac/boost/ticket/6531), + [#6412](https://svn.boost.org/trac/boost/ticket/6412), + [#6398](https://svn.boost.org/trac/boost/ticket/6398), + [#6340](https://svn.boost.org/trac/boost/ticket/6340), + [#6319](https://svn.boost.org/trac/boost/ticket/6319), + [#6287](https://svn.boost.org/trac/boost/ticket/6287), + [#6265](https://svn.boost.org/trac/boost/ticket/6265), + [#6233](https://svn.boost.org/trac/boost/ticket/6233), + [#6147](https://svn.boost.org/trac/boost/ticket/6147), + [#6134](https://svn.boost.org/trac/boost/ticket/6134), + [#6058](https://svn.boost.org/trac/boost/ticket/6058), + [#6054](https://svn.boost.org/trac/boost/ticket/6054), + [#5772](https://svn.boost.org/trac/boost/ticket/5772), + [#5738](https://svn.boost.org/trac/boost/ticket/5738), + [#5622](https://svn.boost.org/trac/boost/ticket/5622), + [#5552](https://svn.boost.org/trac/boost/ticket/5552), + [#5518](https://svn.boost.org/trac/boost/ticket/5518), + [#4655](https://svn.boost.org/trac/boost/ticket/4655), + [#4452](https://svn.boost.org/trac/boost/ticket/4452), + [#4383](https://svn.boost.org/trac/boost/ticket/4383), + [#4297](https://svn.boost.org/trac/boost/ticket/4297). + + Fixed timed functions in mutex implementations to fulfill POSIX requirements: + *Under no circumstance shall the function fail with a timeout + if the mutex can be locked immediately. The validity of the abs\_timeout + parameter need not be checked if the mutex can be locked immediately.* +* [Intrusive](/libs/intrusive/): + + + Fixed bugs [#6347](https://svn.boost.org/trac/boost/ticket/6347), + [#6223](https://svn.boost.org/trac/boost/ticket/6223), + [#6153](https://svn.boost.org/trac/boost/ticket/6153). +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Fixed bugs and warnings: [#6127](https://svn.boost.org/trac/boost/ticket/6127), + [#6132](https://svn.boost.org/trac/boost/ticket/6132), + [#6159](https://svn.boost.org/trac/boost/ticket/6159), + [#6182](https://svn.boost.org/trac/boost/ticket/6182), + [#6186](https://svn.boost.org/trac/boost/ticket/6186), + [#6193](https://svn.boost.org/trac/boost/ticket/6193), + [#6264](https://svn.boost.org/trac/boost/ticket/6264), + [#6290](https://svn.boost.org/trac/boost/ticket/6290), + [#6298](https://svn.boost.org/trac/boost/ticket/6298), + [#6400](https://svn.boost.org/trac/boost/ticket/6400). + + Better performance and less memory usage for boost::container::basic\_string + conversions. +* [Locale](/libs/locale/): + + + Fixed incorrect use of `MultiByteToWideChar` + in detection of invalid input sequences. +* [Move](/libs/move/): + + + Fixed bugs [#6417](https://svn.boost.org/trac/boost/ticket/6417), + [#6183](https://svn.boost.org/trac/boost/ticket/6183), + [#6185](https://svn.boost.org/trac/boost/ticket/6185), + [#6395](https://svn.boost.org/trac/boost/ticket/6395), + [#6396](https://svn.boost.org/trac/boost/ticket/6396), +* [PropertyTree](/libs/property_tree): + + + Fixes for bugs [#4840](https://svn.boost.org/trac/boost/ticket/4840), + [#5259](https://svn.boost.org/trac/boost/ticket/5259), + [#5281](https://svn.boost.org/trac/boost/ticket/5281), + [#5944](https://svn.boost.org/trac/boost/ticket/5944), + [#5757](https://svn.boost.org/trac/boost/ticket/5757), + [#5710](https://svn.boost.org/trac/boost/ticket/5710), + and [#5307](https://svn.boost.org/trac/boost/ticket/5307). +* [Proto](/libs/proto): + + + Force some functions to be inline, fixes [#5735](https://svn.boost.org/trac/boost/ticket/5735). + + Add user documentation for per-domain `as\_expr` + and `as\_child`; other + doc tweaks. + + Fix some buggy and over-complicated example programs. + + Add some missing copyright notices. +* [Spirit](/libs/spirit/index.html): + + + Spirit V2.5.2, see the '[What's + New](/doc/libs/1_49_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_5_2.html)' section for details. +* [Thread](/libs/thread): + + + Fixed Bugs: + + - [#2309](http://svn.boost.org/trac/boost/ticket/2309) + Lack of g++ symbol visibility support in Boost.Thread. + - [#2639](http://svn.boost.org/trac/boost/ticket/2639) + documentation should be extended(defer\_lock, try\_to\_lock, ...). + - [#3639](http://svn.boost.org/trac/boost/ticket/3639) + Boost.Thread doesn't build with Sun-5.9 on Linux. + - [#3762](http://svn.boost.org/trac/boost/ticket/3762) + Thread can't be compiled with winscw (Codewarrior by Nokia). + - [#3885](http://svn.boost.org/trac/boost/ticket/3885) + document about mix usage of boost.thread and native thread + api. + - [#3975](http://svn.boost.org/trac/boost/ticket/3975) + Incorrect precondition for promise::set\_wait\_callback(). + - [#4048](http://svn.boost.org/trac/boost/ticket/4048) + thread::id formatting involves locale + - [#4315](http://svn.boost.org/trac/boost/ticket/4315) + gcc 4.4 Warning: inline ... declared as dllimport: attribute + ignored. + - [#4480](http://svn.boost.org/trac/boost/ticket/4480) + OpenVMS patches for compiler issues workarounds. + - [#4819](http://svn.boost.org/trac/boost/ticket/4819) + boost.thread's documentation misprints. + - [#5040](http://svn.boost.org/trac/boost/ticket/5040) + future.hpp in boost::thread does not compile with /clr. + - [#5423](http://svn.boost.org/trac/boost/ticket/5423) + thread issues with C++0x. + - [#5502](http://svn.boost.org/trac/boost/ticket/5502) + race condition between shared\_mutex timed\_lock and lock\_shared. + - [#5594](http://svn.boost.org/trac/boost/ticket/5594) + boost::shared\_mutex not fully compatible with Windows CE. + - [#5617](http://svn.boost.org/trac/boost/ticket/5617) + boost::thread::id copy ctor. + - [#5739](http://svn.boost.org/trac/boost/ticket/5739) + set-but-not-used warnings with gcc-4.6. + - [#5826](http://svn.boost.org/trac/boost/ticket/5826) + threads.cpp: resource leak on threads creation failure. + - [#5839](http://svn.boost.org/trac/boost/ticket/5839) + thread.cpp: ThreadProxy leaks on exceptions. + - [#5859](http://svn.boost.org/trac/boost/ticket/5859) + win32 shared\_mutex constructor leaks on exceptions. + - [#6100](http://svn.boost.org/trac/boost/ticket/6100) + Compute hardware\_concurrency() using get\_nprocs() on GLIBC + systems. + - [#6141](http://svn.boost.org/trac/boost/ticket/6141) + Compilation error when boost.thread and boost.move are used + together. + - [#6168](http://svn.boost.org/trac/boost/ticket/6168) + recursive\_mutex is using wrong config symbol (possible typo). + - [#6175](http://svn.boost.org/trac/boost/ticket/6175) + Compile error with SunStudio. + - [#6200](http://svn.boost.org/trac/boost/ticket/6200) + patch to have condition\_variable and mutex error better handle + EINTR. + - [#6207](http://svn.boost.org/trac/boost/ticket/6207) + shared\_lock swap compiler error on clang 3.0 c++11. + - [#6208](http://svn.boost.org/trac/boost/ticket/6208) + try\_lock\_wrapper swap compiler error on clang 3.0 c++11. +* [Unordered](/libs/unordered): + + + On compilers without rvalue references, the containers are no longer + movable by default, as move emulation was causing some odd quirks + ([#6167](https://svn.boost.org/trac/boost/ticket/6167), + [#6311](https://svn.boost.org/trac/boost/ticket/6311)). + Define `BOOST\_UNORDERED\_USE\_MOVE` + to make them movable - Boost.Move is still used for elements regardless. + + Fix sequence point warning ([#6370](https://svn.boost.org/trac/boost/ticket/6370)). + + Better support for C++11 compilers using older standard libraries. +* [Uuid](/libs/uuid/): + + + fixed [#6258](https://svn.boost.org/trac/boost/ticket/6258) + + fixed [#5325](https://svn.boost.org/trac/boost/ticket/5325) + (sha1 implementation handles messages as long as the specification) + + progress on [#6118](https://svn.boost.org/trac/boost/ticket/6118) + (there are fewer warnings) +* [xpressive](/libs/xpressive/): + + + Eliminate some unused variable warnings on gcc. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Intel: 11.1 + + LLVM Clang 2.8 + + GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.2, 4.6.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2 +* OS X: + + + Intel: 11.1 + + GCC: 4.2.1, 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 8.0, 9.0, 10.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1, 4.7.0 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit. +* QNX: + + + QCC, C++0x mode: 4.4.2, 4.6.1, 4.6.2 + Boost's additional test compilers include: + + + +* Linux: + + + GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.6.2 + + GCC, C++0x mode: 4.3.4, 4.4.4, 4.5.2 + + pgCC: 11.9 + + Intel: 10.1, 11.1, 12.0 + + PathScale: 4.0.8 + + Visual Age 10.1 +* OS X: + + + Clang from subversion + + Intel 11.1, 12.0 + + GCC: 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 8.0, 9.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.4.0, 4.5.2 + + GCC, C++0x mode, mingw: 4.5.2 + + GCC, mingw 64-bit: 4.4.7, 4.5.4, 4.6.1 +* AIX: + + + IBM XL C/C++ Enterprise Edition, V11.1.0.0 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit +* Solaris: + + + Sun 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James + and Vladimir Prus managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_50_0.html b/users/history/version_1_50_0.html new file mode 100644 index 0000000..c6d8fec --- /dev/null +++ b/users/history/version_1_50_0.html @@ -0,0 +1,562 @@ +--- +title: Version 1.50.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.50.0 + +/\*\*/ + + + + + + + +Version 1.50.0 +============== + +Version 1.50.0 +-------------- + + +June 28th, 2012 12:48 GMT + + +[Documentation](/doc/libs/1_50_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_50\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.50.0/boost_1_50_0.tar.bz2) | +| [boost\_1\_50\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.50.0/boost_1_50_0.tar.gz) | +| windows | [boost\_1\_50\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.50.0/boost_1_50_0.7z) | +| [boost\_1\_50\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.50.0/boost_1_50_0.zip) | + + +### Patches + + +* [Boost.Unordered patch](/patches/1_50_0/001-unordered.patch) + - Fixes a bug when compiled using a C++11 compiler, but with a C++03 allocator. + When inserting elements, `allocator\_traits` + detects that the node can be constructed using an accidental implicit conversion + which causes several problems. +* [Locale + Patch](http://cppcms.com/files/locale/boost_locale_utf.patch) - Fixes a bug which causes `boost::locale::utf::utf\_traits` + to accept some invalid UTF-8 sequences, which is a possible security flaw. + +### New Libraries + + +* [Algorithm](/libs/algorithm/): + A collection of + useful generic algorithms, from Marshall Clow. This includes several different + searching algorithms, as well as most of the new algorithms from the C++11 + standard library +* [Functional/OverloadedFunction](/libs/functional/overloaded_function/): + Overload + different functions into a single function object, from Lorenzo Caminiti. +* [LocalFunction](/libs/local_function/): + Program + functions locally, within other functions, directly within the scope where + they are needed, from Lorenzo Caminiti. +* [Utility/IdentityType](/libs/utility/identity_type/): + Wrap + types within round parenthesis so they can always be passed as macro parameters, + from Lorenzo Caminiti. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/): + + + add missing `#include + `, fixes [#6702](https://svn.boost.org/trac/boost/ticket/6702). + + work around for msvc which allows ctor templates to be copy ctors, + fixes [#6535](https://svn.boost.org/trac/boost/ticket/6535). + + shorten filenames to meet boost guidelines, fixes [#6196](https://svn.boost.org/trac/boost/ticket/6196). +* [Array](/libs/array/): + + + add support for Boost.Hash [#6791](https://svn.boost.org/trac/boost/ticket/6791). +* [Asio](/libs/asio/): + + + Changed the `epoll\_reactor` + backend to do lazy registration for `EPOLLOUT` + events. + + Fixed the `epoll\_reactor` + handling of out-of-band data, which was broken by an incomplete fix + in the last release. + + Changed Asio's SSL wrapper to respect OpenSSL's `OPENSSL\_NO\_ENGINE` + feature test `#define` + ([#6432](https://svn.boost.org/trac/boost/ticket/6432)). + + Fixed `windows::object\_handle` so that it works + with Windows compilers that support C++11 move semantics (such as + g++). + + Improved the performance of strand rescheduling. + + Added support for g++ 4.7 when compiling in C++11 + mode ([#6620](https://svn.boost.org/trac/boost/ticket/6620)). + + Fixed a problem where `signal\_set` + handlers were not being delivered when the `io\_service` + was constructed with a `concurrency\_hint` + of 1 ([#6657](https://svn.boost.org/trac/boost/ticket/6657)). +* [Bimap](/libs/bimap/): + + + Remove spurious dependency on Boost.Serialization, fixes [#3868](https://svn.boost.org/trac/boost/ticket/3868). + + Solve unused constructor parameter warning, fixes [#5749](https://svn.boost.org/trac/boost/ticket/5749). + + Add key\_type and mapped\_type (leaving data\_type for backward compatibility) + typedefs to map views, fixes [#6031](https://svn.boost.org/trac/boost/ticket/6031). +* [Chrono](/libs/chrono/): + + + Fixed Bugs: + + - [#6361](https://svn.boost.org/trac/boost/ticket/6361) + integer overflow in boost::chrono::process\_real\_cpu\_clock::now() + under Windows 32bits. + - [#6628](https://svn.boost.org/trac/boost/ticket/6628) + compiler warning in process\_cpu\_clocks.hpp. + - [#6666](https://svn.boost.org/trac/boost/ticket/6666) + thread\_clock.hpp needs pthread.h. +* [Concept Check](/libs/concept_check/): + + + Fixed: + + - [#6738](https://svn.boost.org/trac/boost/ticket/6738) + Shadowed variable warning. +* [Filesystem](/libs/filesystem/): + + + Remove Filesystem Version 2 from the distribution. Version 3 is now + the only distributed version. Those still using V2 are urged to migrate + to V3 as soon as possible. + + Add constexpr value\_type preferred\_separator to class path. + + Fix [#5118](https://svn.boost.org/trac/boost/ticket/5118), + `replace\_extension` + doesn't work as specified in documentation. The documentation, implementation, + and test cases have all had fixes applied. The documentation had + failed to mention that any existing extension is removed. The behavior + for simple cases has been reverted to the Version 2 behavior, but + with corrections so that complex replacements now work. Two test + cases from [#5118](https://svn.boost.org/trac/boost/ticket/5118) + have been added. + + Fix [#3737](https://svn.boost.org/trac/boost/ticket/3737), + Boost.Filesystem does not compile on Windows Mobile. On Windows, + `` is no longer included. + + Fix [#4065](https://svn.boost.org/trac/boost/ticket/4065), + Boost Filesystem lexicographic path comparison inconsistent. This + required multiple source code bug fixes and code cleanup, correcting + problems not related to lexicographical issues. + + Add class path member function compare for consistency with std::string. + + Tighten `BOOST\_FILESYSTEM\_DYN\_LINK` + and `BOOST\_FILESYSTEM\_STATIC\_LINK` + logic in `filesystem/config.hpp` + so that one or the other is always defined, and both being defined + is a `#error`. + + Fix [#6690](https://svn.boost.org/trac/boost/ticket/6690) + and [#6737](https://svn.boost.org/trac/boost/ticket/6737), + resolving static linking related problems with VC++ 8 through 11. + Note that this fix may reintroduce codecvt thread safety problems + [#4889](https://svn.boost.org/trac/boost/ticket/4889), + [#6320](https://svn.boost.org/trac/boost/ticket/6320), + for these compilers if static linking is used. + + Add `path::operator+=` + and concat functions to tack on things like suffixes or numbers. + Suggested by Ed Smith-Rowland and others. + + Fix [#6809](https://svn.boost.org/trac/boost/ticket/6809), + Implementation of `filesystem::rename()` method for MS Windows is wrong, + by adding `MOVEFILE\_COPY\_ALLOWED` + to deal with renames across drives, volumes, file systems. Fix has + no effect on non-Windows systems. + + Fix [#6819](https://svn.boost.org/trac/boost/ticket/6819), + A path operand with a source that was a one character array was treated + as empty, even if it wasn't empty. Such arrays can occur in unions + or in code using C variable length array idioms. + + Fix [#6932](https://svn.boost.org/trac/boost/ticket/6932), + create\_directories throws exception even if `error\_code` + is specified. +* [Foreach](/libs/foreach/): + + + Revert fix for [#6131](https://svn.boost.org/trac/boost/ticket/6131) + which caused more harm than good. +* [Geometry](/libs/geometry/): + + + Fixed Bugs: + + - the return type of comparable projected point strategy for + integer points was wrong (integer), fixed + - several robustness issues in intersection of segments and polygons, + fixed + - invalid intersection output is filtered out + - disjoint for multi\_polygon's might incorrectly return true, + fixed + + Solved tickets + + - [6585](https://svn.boost.org/trac/boost/ticket/6585) + patch for alternative syntax multipoint, applied + - [6584](https://svn.boost.org/trac/boost/ticket/6584) + patch for bug in distance, applied + - [5730](https://svn.boost.org/trac/boost/ticket/5730) + same issue as 6584, fixed + - [6166](https://svn.boost.org/trac/boost/ticket/6166) + patch for missing transformation, applied + - [6696](https://svn.boost.org/trac/boost/ticket/6696) + invalid intersection output, was (by chance) already fixed + in Trunk before reported + + Additional functionality + + - added algorithm "touches" (OGC SF compliant) for + \*polygon/\*polygon +* [Graph](/libs/graph/): + + + Fixed Bugs: + + - [#4622](https://svn.boost.org/trac/boost/ticket/4622) + clear\_vertex on a vertex with a self-loop can cause a segmentation + fault. + - [#6033](https://svn.boost.org/trac/boost/ticket/6033) + Lowpoint map calculated by biconnected\_components(...) is sometimes + wrong. + - [#6242](https://svn.boost.org/trac/boost/ticket/6242) + isomorphism doesn't reset mapping. + - [#6435](https://svn.boost.org/trac/boost/ticket/6435) + cube\_topology documentation should say 3D, not 2D. + - [#6520](https://svn.boost.org/trac/boost/ticket/6520) + small\_world\_1\_70\_6\_0p02.png is broken in documentation of graph\_parallel. + - [#6564](https://svn.boost.org/trac/boost/ticket/6564) + BGL copy constructor for subgraph does not track local vertices/edges. + - [#6573](https://svn.boost.org/trac/boost/ticket/6573) + BGL: boost::isomorphism routine fails with large graphs. + - [#6583](https://svn.boost.org/trac/boost/ticket/6583) + Dijkstra Visitor Concept docs probably show wrong type for + variable. + - [#6647](https://svn.boost.org/trac/boost/ticket/6647) + BGL strong\_components do not compile on MSVC 8. + - [#6656](https://svn.boost.org/trac/boost/ticket/6656) + Dependent type in subgraph used without typename. + - [#6707](https://svn.boost.org/trac/boost/ticket/6707) + is\_straight\_line\_drawing.hpp missing #include . + - [#6708](https://svn.boost.org/trac/boost/ticket/6708) + Make bool boost::intersects() in is\_straight\_line\_drawing.hpp + inline? + - [#6739](https://svn.boost.org/trac/boost/ticket/6739) + Cannot use write\_graphviz\_dp with a constified subgraph. + - [#6858](https://svn.boost.org/trac/boost/ticket/6858) + boost::get() calls wrongly resolved by g++. + - [#6892](https://svn.boost.org/trac/boost/ticket/6892) + VertexIndexGraph concept not required for bron\_kerbosch\_all\_cliques(). + - Other bugs and warnings not in Trac. +* [Hash](/libs/functional/hash/): + + + Support `std::array` and `std::tuple` + when available ([#6806](https://svn.boost.org/trac/boost/ticket/6806)). + + Avoid gcc's `-Wfloat-equal` + warning ([#6771](https://svn.boost.org/trac/boost/ticket/6771)). + + Add deprecation warning to the long deprecated `boost/functional/detail/container\_fwd.hpp`. +* [Iostreams](/libs/iostreams/): + + + Improved gzip support ([#5908](https://svn.boost.org/trac/boost/ticket/5908)). + + Update tests for latest Boost.Filesystem and Boost.Test. + + Fix some documentation errors ([#6530](https://svn.boost.org/trac/boost/ticket/6530), + [#6650](https://svn.boost.org/trac/boost/ticket/6650)). +* [Iterator](/libs/iterator/): + + + Fixed: + + - [#5127](https://svn.boost.org/trac/boost/ticket/5127) + Incorrect result\_of usage in transform\_iterator + - [#5697](https://svn.boost.org/trac/boost/ticket/5697) + iterator\_facade::operator-> is broken for proxy references +* [MultiArray](/libs/multi_array/): + + + Concepts bug fix and Workaround for Visual Studio 2010 ([#4874](https://svn.boost.org/trac/boost/ticket/4874)) + + Fix to assert.cpp test case ([Patch](https://svn.boost.org/trac/boost/changeset/78498)) +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + `boost::bad\_lexical\_cast` exception is now + globaly visible and can be catched even if code is compiled with + -fvisibility=hidden + + Now it is possible to compile and use library with disabled exceptions + [#5800](https://svn.boost.org/trac/boost/ticket/5800) + + Better performance, less memory usage and bugfixes for `boost::iterator\_range` + conversions + + Fixed bugs and warnings: [#6645](https://svn.boost.org/trac/boost/ticket/6645), + [#6562](https://svn.boost.org/trac/boost/ticket/6562), + [#6812](https://svn.boost.org/trac/boost/ticket/6812), + [#6852](https://svn.boost.org/trac/boost/ticket/6852), + [#6717](https://svn.boost.org/trac/boost/ticket/6717), + [#6770](https://svn.boost.org/trac/boost/ticket/6670), + [#6504](https://svn.boost.org/trac/boost/ticket/6504). +* [Locale](/libs/locale/): + + + Fixed build issues with STLPort library + + Boost.System is now required depenency + + Fixed bugs [#6635](https://svn.boost.org/trac/boost/ticket/6635), + [#6833](https://svn.boost.org/trac/boost/ticket/6833) +* [Math](/libs/math/): + + + Promoted math constants to be 1st class citizens, including convenient + access to the most widely used built-in float, double, long double + via three namespaces. + + Added the Owen's T function and Skew Normal distribution written + by Benjamin Sobotta. + + Added Hankel functions. + + Corrected issue [#6627 + nonfinite\_num\_put formatting of 0.0 is incorrect](https://svn.boost.org/trac/boost/ticket/6627) based on + a patch submitted by K R Walker. + + Changed constant initialization mechanism so that it is thread safe + even for user-defined types, also so that user defined types get + the full precision of the constant, even when `long + double` does not. So for example + 128-bit rational approximations will work with UDT's and do the right + thing, even though `long double` may be only 64 or 80 bits. + + Fixed issue in `bessel\_jy` + which causes Y[sub 8.5](4[pi]) to yield a NaN. +* [MSM](/libs/msm/): + + + eUML : better syntax for front-ends defined with eUML as transition + table only. Caution: Breaking Change! + + Bugfix: graph building was only working if initial\_state defined + as a sequence. + + Bugfix: flags defined for a Terminate or Interrupt state do not break + the blocking function of these states any more. + + Bugfix: multiple deferred events from several regions were not working + in every case. + + Bugfix: visitor was passed by value to submachines. + + Bugfix: no\_transition was not called for submachines who send an + event to themselves. + + Fixed warnings with gcc. +* [Program Options](/libs/program_options/): + + + Improved error reporting ([Patch + from Leo Goodstadt](https://svn.boost.org/trac/boost/changeset/77827)). + + Support for customizing name of option's value in help messages ([#4781](https://svn.boost.org/trac/boost/ticket/4781)) + + Fixed compilation with gcc 4.7 ([#6790](https://svn.boost.org/trac/boost/ticket/6790)). +* [PropertyMap](/libs/property_map/): + + + Fixed Bugs: + + - [#6539](https://svn.boost.org/trac/boost/ticket/6539) + the return type of get() is not documented correctly. + - [#6721](https://svn.boost.org/trac/boost/ticket/6721) + property\_map\_traits documentation does not mention reference. +* [Proto](/libs/proto/): + + + Use `decltype`-based + `result\_of` if and + only if the compiler implements N3276. + + For C++11, force parameter to `mpl::eval\_if\_c` + and `mpl::if\_c` to be `bool`. + + Disable '\_\_forceinline not inlined' warning on + msvc. +* [Ratio](/libs/ratio/): + + + Fixed Bugs: + + - [#6498](https://svn.boost.org/trac/boost/ticket/6498) + boost::ratio won't compile with default settings. +* [ScopeExit](/libs/scope_exit/): + + + New Features: + + - Use variadic macros to specify captures as commas-separated + lists (but kept preprocessor sequence syntax for backward compatibility). + - Capture the object in scope using `this\_`. + - Support empty captures using `void`. + - Implicit lambda-like captures using `BOOST\_SCOPE\_EXIT\_ALL` + on compilers that support C++11 lambda functions. +* [Thread](/libs/thread/): + + + New Features: + + - [#1850](https://svn.boost.org/trac/boost/ticket/1850) + Request for unlock\_guard to compliment lock\_guard. + - [#2637](https://svn.boost.org/trac/boost/ticket/2637) + Request for shared\_mutex duration timed\_lock and timed\_lock\_shared. + - [#2741](https://svn.boost.org/trac/boost/ticket/2741) + Proposal to manage portable and non portable thread attributes. + - [#3567](https://svn.boost.org/trac/boost/ticket/3567) + Request for shared\_lock\_guard. + - [#6194](https://svn.boost.org/trac/boost/ticket/6194) + Adapt to Boost.Move. + - [#6195](https://svn.boost.org/trac/boost/ticket/6195) + c++11 compliance: Provide the standard time related interface + using Boost.Chrono. + - [#6217](https://svn.boost.org/trac/boost/ticket/6217) + Enhance Boost.Thread shared mutex interface following Howard + Hinnant proposal. + - [#6224](https://svn.boost.org/trac/boost/ticket/6224) + c++11 compliance: Add the use of standard noexcept on compilers + supporting them. + - [#6226](https://svn.boost.org/trac/boost/ticket/6226) + c++11 compliance: Add explicit bool conversion from locks. + - [#6228](https://svn.boost.org/trac/boost/ticket/6228) + Add promise constructor with allocator following the standard + c++11. + - [#6230](https://svn.boost.org/trac/boost/ticket/6230) + c++11 compliance: Follows the exception reporting mechanism + as defined in the c++11. + - [#6266](https://svn.boost.org/trac/boost/ticket/6266) + Breaking change: thread destructor should call terminate if + joinable. + - [#6269](https://svn.boost.org/trac/boost/ticket/6269) + Breaking change: thread move assignment should call terminate + if joinable. + - [#6272](https://svn.boost.org/trac/boost/ticket/6272) + c++11 compliance: Add thread::id hash specialization. + - [#6273](https://svn.boost.org/trac/boost/ticket/6273) + c++11 compliance: Add cv\_status enum class and use it on the + conditions wait functions. + - [#6231](https://svn.boost.org/trac/boost/ticket/6231) + Add BasicLockable requirements in the documentation to follow + c++11. + - [#6342](https://svn.boost.org/trac/boost/ticket/6342) + c++11 compliance: Adapt the one\_flag to the c++11 interface. + - [#6671](https://svn.boost.org/trac/boost/ticket/6671) + upgrade\_lock: missing mutex and release functions. + - [#6672](https://svn.boost.org/trac/boost/ticket/6672) + upgrade\_lock:: missing constructors from time related types. + - [#6675](https://svn.boost.org/trac/boost/ticket/6675) + upgrade\_lock:: missing non-member swap. + - Added missing packaged\_task::result\_type and packaged\_task:: + constructor with allocator. + - Added packaged\_task::reset() + + Fixed Bugs: + + - [#2575](https://svn.boost.org/trac/boost/ticket/2575) + Bug- Boost 1.36.0 on Itanium platform. + - [#4345](https://svn.boost.org/trac/boost/ticket/4345) + thread::id and joining problem with cascade of threads. + - [#4921](https://svn.boost.org/trac/boost/ticket/4921) + BOOST\_THREAD\_USE\_DLL and BOOST\_THREAD\_USE\_LIB are crucial and + need to be documented. + - [#5013](https://svn.boost.org/trac/boost/ticket/5013) + documentation: boost::thread: pthreas\_exit causes terminate(). + - [#5173](https://svn.boost.org/trac/boost/ticket/5173) + boost::this\_thread::get\_id is very slow. + - [#5351](https://svn.boost.org/trac/boost/ticket/5351) + interrupt a future get boost::unknown\_exception. + - [#5516](https://svn.boost.org/trac/boost/ticket/5516) + Upgrade lock is not acquired when previous upgrade lock releases + if another read lock is present. + - [#5990](https://svn.boost.org/trac/boost/ticket/5990) + shared\_future::get() has wrong return type. + - [#6174](https://svn.boost.org/trac/boost/ticket/6174) + packaged\_task doesn't correctly handle moving results. + - [#6222](https://svn.boost.org/trac/boost/ticket/6222) + Compile error with SunStudio: unique\_future move. + - [#6673](https://svn.boost.org/trac/boost/ticket/6673) + shared\_lock: move assign doesn't works with c++11. + - [#6674](https://svn.boost.org/trac/boost/ticket/6674) + shared\_mutex: try\_lock\_upgrade\_until doesn't works. + - Fix issue signaled on the ML with task\_object(task\_object const&) + in presence of task\_object(task\_object&&) +* [Unordered](/libs/unordered/): + + + Fix equality for `unordered\_multiset` + and `unordered\_multimap`. + + Implement `reserve` + ([#6857](https://svn.boost.org/trac/boost/ticket/6857)). + + Avoid gcc's `-Wfloat-equal` + and `-Wshadow` + warnings ([#6190](https://svn.boost.org/trac/boost/ticket/6190), + [#6771](https://svn.boost.org/trac/boost/ticket/6771)). + + Fix namespace issue with bcp ([#6905](https://svn.boost.org/trac/boost/ticket/6905)). + + Fix Sun workarounds ([#6784](https://svn.boost.org/trac/boost/ticket/6784)). + + Some internal changes to bucket allocation. + + See the [change + log](/doc/html/unordered/changes.html#unordered.changes.boost_1_50_0) for full details. +* [Wave](/libs/wave/index.html): + + + Wave V2.3.2, see the [Changelog](/libs/wave/ChangeLog) + for details. +* [xpressive](/libs/xpressive/): + + + Remove very ugly `lexical\_cast` + hack with a slightly less ugly one. + + Replace MPL assert with static assert since it's problematic in C++11, + fixes [#6846](https://svn.boost.org/trac/boost/ticket/6846). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Intel: 11.1 + + LLVM Clang 2.8 + + GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2 + + GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.3, 4.6.2 +* OS X: + + + Intel: 11.1 + + GCC: 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 8.0, 9.0, 10.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1, 4.7.0 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit +* QNX: + + + QCC, C++0x mode: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang from subversion + + GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2 + + GCC, C++0x mode: 4.3.4, 4.4.4, 4.5.3, 4.6.2 + + pgCC: 11.9 + + Intel: 10.1, 11.1, 12.0, 12.1 + + Visual Age 10.1 +* OS X: + + + Clang from subversion + + Intel 11.1, 12.0 + + GCC: 4.4.4 + + GCC, C++0x mode: 4.4.4 +* Windows: + + + Visual C++ 8.0, 10.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.2, 4.5.4, 4.6.4, 4.7.0 + + GCC, C++0x mode, mingw: 4.5.2 +* AIX: + + + IBM XL C/C++ Enterprise Edition, V12.1.0.0 +* FreeBSD: + + + GCC 4.2.1, 32 and 64 bit +* Solaris: + + + Sun 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_51_0.html b/users/history/version_1_51_0.html new file mode 100644 index 0000000..f57caf4 --- /dev/null +++ b/users/history/version_1_51_0.html @@ -0,0 +1,299 @@ +--- +title: Version 1.51.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.51.0 + +/\*\*/ + + + + + + + +Version 1.51.0 +============== + +Version 1.51.0 +-------------- + + +August 20th, 2012 23:00 GMT + + +[Documentation](/doc/libs/1_51_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_51\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.51.0/boost_1_51_0.tar.bz2) | +| [boost\_1\_51\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.51.0/boost_1_51_0.tar.gz) | +| windows | [boost\_1\_51\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.51.0/boost_1_51_0.7z) | +| [boost\_1\_51\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.51.0/boost_1_51_0.zip) | + + +### Patches + + +* [Locale + Patch](http://cppcms.com/files/locale/boost_locale_utf.patch) - Fixes a bug which causes `boost::locale::utf::utf\_traits` + to accept some invalid UTF-8 sequences, which is a possible security flaw. + +### New Libraries + + +* [Context](/libs/context/): + Context switching library, + from Oliver Kowalke. + +### Updated Libraries + + +* [Algorithm](/libs/algorithm/): + + + Fixed `is\_sorted\_until` + ; now matches the c++11 standard behavior on ranges with duplicate + values. + + Added range support for the rest of the search algorithms. + + `unhex` now uses Boost.Exception + to signal bad input. +* [Asio](/libs/asio/): + + + Fixed an incompatibility between `ip::tcp::iostream` + and C++11 ([#7162](https://svn.boost.org/trac/boost/ticket/7162)). + + Decorated GCC attribute names with underscores to prevent interaction + with user-defined macros ([#6415](https://svn.boost.org/trac/boost/ticket/6415)). + + Added missing `#include + `, needed for some versions of + MinGW. + + Changed to use gcc's atomic builtins on ARM CPUs, + when available ([#7140](https://svn.boost.org/trac/boost/ticket/7140)). + + Changed strand destruction to be a no-op, to allow strand objects + to be destroyed after their associated `io\_service` + has been destroyed. + + Added support for some newer versions of glibc which provide the + `epoll\_create1()` + function but always fail with `ENOSYS` + ([#7012](https://svn.boost.org/trac/boost/ticket/7012)). + + Changed the SSL implementation to throw an exception if SSL engine + initialisation fails ([#6303](https://svn.boost.org/trac/boost/ticket/6303)). + + Fixed another regression in `buffered\_write\_stream` + ([#6310](https://svn.boost.org/trac/boost/ticket/6310)). + + Implemented various minor performance improvements, primarily targeted + at Linux x86 and x86-64 platforms. +* [Config](/libs/config/): + + + Deprecated a whole bunch of macros that were c++11 specific, but + not named to show that they were c++11 specific. Made new macros + with better names, and paired the old macros with the new ones. Updated + the documentation to list the deprecated macros. +* [Chrono](/libs/chrono/): + + + [#6918](https://svn.boost.org/trac/boost/ticket/6918) + Boost Chrono compilation failure on HP uX due to undefined pthread\_getcpuclockid. + + [#6241](https://svn.boost.org/trac/boost/ticket/6241) + boost::chrono compilation problems without std::wstring support. + + [#6987](https://svn.boost.org/trac/boost/ticket/6987) + Documentation & C++11. + + [#7041](https://svn.boost.org/trac/boost/ticket/7041) + time\_point.hpp depends on Boost.System. + + [#7042](https://svn.boost.org/trac/boost/ticket/7042) + Avoiding time\_point and duration dependency on time.h and CLOCK\_REALTIME. + + [#7058](https://svn.boost.org/trac/boost/ticket/7058) + Make it work when BOOST\_NO\_EXCEPTIONS is defined. + + [#7069](https://svn.boost.org/trac/boost/ticket/7069) + Misspellings in clock\_string. + + [#7081](https://svn.boost.org/trac/boost/ticket/7081) + WinError.h capitalization in boost/detail/win/basic\_types.hpp. +* [Geometry](/libs/geometry/): + + + points accessed through a pointer (e.g. in a linestring) should now + be specialized without the pointer. In previous versions a type + `my\_point` used like + `linestring` + had to be specalized like: `template<> struct + tag`. + Now the library itself removes the pointer before calling the traits + class, so now it should be like: `template<> struct + tag` + + intersection was sometimes wrong for integer points, fixed + + documentation, order of parameters in simplify was wrong, fixed + + [7030](https://svn.boost.org/trac/boost/ticket/7030) + spherical distance, fixed (by patch of Karsten Ahnert) +* [Graph](/libs/graph/): + + + Refactored support for internal and bundled properties in Boost.Graph-provided + graph types, and cleaned up named parameter functionality: + + - Enabled old-style (non-bundled) internal properties in `compressed\_sparse\_row\_graph`. + - Bundled properties should work correctly for all graph types + and adaptors. + + Bugs fixed: + + - [#6993](https://svn.boost.org/trac/boost/ticket/6993): Typo Bundled Properties document + - [#7002](https://svn.boost.org/trac/boost/ticket/7002): Problem with initialization of CSR bidirectional + graph + - [#7023](https://svn.boost.org/trac/boost/ticket/7023): Enclose internal type graphml\_reader in anonymous + namespace + - Other bugs and warnings not in Trac +* [Hash](/libs/functional/hash/): + + + Support the standard smart pointers. + + `hash\_value` now implemented + using SFINAE to avoid implicit casts to built in types when calling + it. + + Updated to use the new config macros. +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Better performance, less memory usage for `boost::array` and `std::array` conversions. + + Fixed bug with volatile input parameter [#7157](https://svn.boost.org/trac/boost/ticket/7157). +* [Math](/libs/math/): + + + Updated to use the new config macros. +* [MSM](/libs/msm/): + + + Support for boost::any + or kleene + as acceptable events + + Bugfix: compiler error with fsm internal table and none (compound) + event. + + Bugfix: euml::defer\_ leading to stack overflow. +* [Proto](/libs/proto/): + + + Proto transforms get pseudo-parameter pack expansion support for + unpacking expressions. See the [Release + Notes](/doc/html/proto/appendices.html#boost_proto.appendices.release_notes.boost_1_51) for more information. +* [Ratio](/libs/ratio/): + + + [#7075](https://svn.boost.org/trac/boost/ticket/7075) + Workaround for error: the type of partial specialization template + parameter constant "n1" depends on another template parameter. +* [Regex](/libs/regex/): + + + Updated to use the new config macros. +* [Thread](/libs/thread/): + + + [#4258](https://svn.boost.org/trac/boost/ticket/4258) + Linking with boost thread does not work on mingw/gcc 4.5. + + [#4885](https://svn.boost.org/trac/boost/ticket/4885) + Access violation in set\_tss\_data at process exit due to invalid assumption + about TlsAlloc. + + [#6931](https://svn.boost.org/trac/boost/ticket/6931) + mutex waits forwever with Intel Compiler and /debug:parallel + + [#7044](https://svn.boost.org/trac/boost/ticket/7044) + boost 1.50.0 header missing. + + [#7052](https://svn.boost.org/trac/boost/ticket/7052) + Thread: BOOST\_THREAD\_PROVIDES\_DEPRECATED\_FEATURES\_SINCE\_V3\_0\_0 only + masks thread::operator==, thread::operator!= forward declarations, + not definitions. + + [#7066](https://svn.boost.org/trac/boost/ticket/7066) + An attempt to fix current\_thread\_tls\_key static initialization order. + + [#7074](https://svn.boost.org/trac/boost/ticket/7074) + Multiply defined symbol boost::allocator\_arg. + + [#7078](https://svn.boost.org/trac/boost/ticket/7078) + Trivial 64-bit warning fix on Windows for thread attribute stack + size + + [#7089](https://svn.boost.org/trac/boost/ticket/7089) + BOOST\_THREAD\_WAIT\_BUG limits functionality without solving anything +* [Unordered](/libs/unordered/): + + + Fix construction/destruction issue when using a C++11 compiler with + a C++03 allocator ([#7100](https://svn.boost.org/trac/boost/ticket/7100)). + + Remove a `try..catch` to support compiling without + exceptions. + + Adjust SFINAE use to try to supprt g++ 3.4 ([#7175](https://svn.boost.org/trac/boost/ticket/7175)). + + Updated to use the new config macros. +* [Wave](/libs/wave/): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [xpressive](/libs/xpressive/): + + + Work around buggy wide ctype facet on cygwin and mingw. + + Work around absence of \_\_isctype on some glibc implementations. + + `op::as` shouldn't assume `string::iterator` != `char\*`. + + Fix assertion in `cpp\_regex\_traits` + on libc++, thanks to John Fletcher. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2, 4.7 + + GCC, C++11 mode: 4.3.4, 4.4.3, 4.5.3, 4.6.2 + + Intel: 11.1, 12.0, 12.1 + + LLVM Clang 2.8 +* OS X: + + + GCC: 4.4 + + GCC, C++11 mode: 4.4 + + Intel: 11.1, 12.0 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3 + + Visual C++: 8.0, 9.0, 10.0 +* FreeBSD: + + + GCC: 4.2.1, 32 and 64 bit + Boost's additional test compilers include: + + + +* Linux: + + + Clang: from subversion + + LLVM Clang: 3.0 + + GCC: 4.2.4, 4.3.4, 4.4.4, 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.0, 4.7.1 + + GCC, C++11 mode: 4.3.4, 4.4.4, 4.5.3, 4.6.3 + + pgCC: 11.9 + + Intel: 10.1, 11.1, 12.0, 12.1 + + Visual Age: 10.1 +* OS X: + + + Clang: from subversion + + Clang, C++11 mode: from subversion + + Intel: 11.1, 12.0 + + GCC: 4.4 + + GCC, C++11 mode: 4.4 +* Windows: + + + Visual C++: 8.0, 9.0, 10.0 + + GCC, mingw: 4.4.0, 4.6.3, 4.7.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition: V12.1.0.0 +* FreeBSD: + + + GCC: 4.2.1, 32 and 64 bit +* Solaris: + + + Sun: 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_52_0.html b/users/history/version_1_52_0.html new file mode 100644 index 0000000..f520146 --- /dev/null +++ b/users/history/version_1_52_0.html @@ -0,0 +1,420 @@ +--- +title: Version 1.52.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.52.0 + +/\*\*/ + + + + + + + +Version 1.52.0 +============== + +Version 1.52.0 +-------------- + + +November 5th, 2012 16:05 GMT + + +[Documentation](/doc/libs/1_52_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_52\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.tar.bz2) | +| [boost\_1\_52\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.tar.gz) | +| windows | [boost\_1\_52\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z) | +| [boost\_1\_52\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.zip) | + + +### Patches + + +* [Locale + Patch](http://cppcms.com/files/locale/boost_locale_utf.patch) - Fixes a bug which causes `boost::locale::utf::utf\_traits` + to accept some invalid UTF-8 sequences, which is a possible security flaw. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/): + + + Fix long-standing dependency tracking bug, [#7409](https://svn.boost.org/trac/boost/ticket/7409) +* [Config](/libs/config/): + + + Define `BOOST\_NO\_SFINAE\_EXPR` + for gcc-4.4, since the support was found to be too buggy. +* [Chrono](/libs/chrono/): + + + *New Features:* + + - [#5980](https://svn.boost.org/trac/boost/ticket/5980) Enhance chrono I/O with H. Hinnant proposal [proposal](http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) + which has the advantage to provide I/O for system clocks using + the Gregorian Calendar. + - [#5981](https://svn.boost.org/trac/boost/ticket/5981) Add i/o state savers for duration and time\_point formatting + state. + - [#7059](https://svn.boost.org/trac/boost/ticket/7059) Add low level i/o facilities. + + *Deprecated features:* + + - The chrono i/o version included in Boost.Chrono 1.2.x has been + completly refactored in version 2.0.0 + - chrono I/O: The manipulators `\_\_duration\_short`, + `\_\_duration\_long` + are depreceated. You should use the parameterized form `\_\_duration\_fmt` or the renamed + manipulators `\_\_duration\_symbol` + and `\_\_duration\_prefix` + instead. + - chrono I/O: The `\_\_duration\_punct<>` facet is deprecated. + You should use the `\_\_get\_duration\_style` + free function to get the informations and use the `\_\_duration\_units` facet for + localization purposes. + - When `BOOST\_CHRONO\_VERSION==2` + the preceding deprecated functions are not available. + + *Fixes:* + + - [#7381](https://svn.boost.org/trac/boost/ticket/7381) C++11 compliance: unresolved symbol when assigning + a constexpr duration to a non-const local variable. + - [#7479](http://svn.boost.org/trac/boost/ticket/7479) + Compile fails with compilers supporting constexpr fails if + the standard library doesn't provides the constexpr interface + + *Would not fix:* + + - [#6871](https://svn.boost.org/trac/boost/ticket/6871) chrono\_io.hpp: `operator<<(ostream& os, ...)` + modifies the state of os. The neww io interface provided in + version 2 solves this issue. You should move to the new version. +* [Container](/libs/container/): + + + Improved `stable\_vector`'s + template code bloat and type safety. + + Changed typedefs and reordered functions of sequence containers to + improve doxygen documentation. + + Fixed bugs [#6615](https://svn.boost.org/trac/boost/ticket/6615), + [#7139](https://svn.boost.org/trac/boost/ticket/7139), + [#7215](https://svn.boost.org/trac/boost/ticket/7215), + [#7232](https://svn.boost.org/trac/boost/ticket/7232), + [#7269](https://svn.boost.org/trac/boost/ticket/7269), + [#7439](https://svn.boost.org/trac/boost/ticket/7439). + + Implemented LWG Issue #149 (range insertion now returns an iterator) + & cleaned up insertion code in most containers + + Corrected aliasing errors. +* [DateTime](/libs/date_time/): + + + Document `BOOST\_DATE\_TIME\_NO\_LIB` + ([#6077](https://svn.boost.org/trac/boost/ticket/6077)). + + Fix `nth\_as\_str` ([#7022](https://svn.boost.org/trac/boost/ticket/7022)). + + Fix some warnings ([#7234](https://svn.boost.org/trac/boost/ticket/7234)). +* [Foreach](/libs/foreach/): + + + Fix alignment warning on gcc. +* [Function](/libs/function/): + + + Move constructors and move assignment operators added (only for compilers + with C++11 rvalue references support) [#7330](https://svn.boost.org/trac/boost/ticket/7330). +* [Graph](/libs/graph/): + + + Fixed bugs [#6950](https://svn.boost.org/trac/boost/ticket/6950), [#7226](https://svn.boost.org/trac/boost/ticket/7226),[#7308](https://svn.boost.org/trac/boost/ticket/7308), [#7327](https://svn.boost.org/trac/boost/ticket/7327), [#7338](https://svn.boost.org/trac/boost/ticket/7338), + [#7341](https://svn.boost.org/trac/boost/ticket/7341), [#7378](https://svn.boost.org/trac/boost/ticket/7378), [#7380](https://svn.boost.org/trac/boost/ticket/7380), [#7398](https://svn.boost.org/trac/boost/ticket/7398), and [#7428](https://svn.boost.org/trac/boost/ticket/7428), plus others + not in Trac. +* [Hash](/libs/functional/hash/): + + + Restore `enum` support, + which was accidentally removed in the last version ([#7437](https://svn.boost.org/trac/boost/ticket/7437)). + + New floating point hasher - will hash the binary representation on + more platforms, which should be faster. +* [Interprocess](/libs/interprocess/): + + + Added `shrink\_by` and + `advise` functions + in `mapped\_region`. + + *ABI breaking:* Reimplemented `message\_queue` + with a circular buffer index (the old behavior used an ordered array, + leading to excessive copies). This should greatly increase performance + but breaks ABI. Old behaviour/ABI can be used undefining macro `BOOST\_INTERPROCESS\_MSG\_QUEUE\_CIRCULAR\_INDEX` + in `boost/interprocess/detail/workaround.hpp` + + Improved `message\_queue` + insertion time avoiding priority search for common cases (both array + and circular buffer configurations). + + Implemented `interproces\_sharable\_mutex` + and `interproces\_condition\_any`. + + Improved `offset\_ptr` + performance. + + Added integer overflow checks. +* [Iterator](/libs/iterator/): + + + Fixed: + + - [#5825](https://svn.boost.org/trac/boost/ticket/5825) constructing function\_input\_iterator without consuming + an item + - [#7194](https://svn.boost.org/trac/boost/ticket/7194) Error in documentation of make\_function\_input\_iterator + + *Breaking changes:* + + - Due to the fix for [#5825](https://svn.boost.org/trac/boost/ticket/5825), a function\_input\_iterator will + no longer make unnecessary invokations to the wrapped nullary + function. For example, constructing an end iterator will now + not trigger an invokation; and dereferencing-and-incrementing + an iterator N times will trigger N invokations, not N+1 as + before. User code that relied on the old behavior will need + to be adjusted. +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Restored compilation on MSVC-2003 (was broken in 1.51.0) [#7255](https://svn.boost.org/trac/boost/ticket/7255). + + Added `lexical\_cast(const CharType\* + chars, + std::size\_t count)` function overload. [#6663](https://svn.boost.org/trac/boost/ticket/6663). + + Fixed bug [#7228](https://svn.boost.org/trac/boost/ticket/7228). +* [Math](/libs/math/): + + + Added Airy functions and Jacobi Elliptic functions. + + In several distributions (particulary the Students T) corrected moments + for small degrees of freedom [#7177](https://svn.boost.org/trac/boost/ticket/7177) + (reported by Thomas Mang). + + Corrected failure to detect bad parameters in many distributions + [#6934](https://svn.boost.org/trac/boost/ticket/6934) + (reported by Florian Schoppmann) by adding a function `check\_out\_of\_range` to test many + possible bad parameters. This test revealed several distributions + where the checks for bad parameters were ineffective, and these have + been rectified. + + Fixed issue in Hankel functions that causes incorrect values to be + returned for *x < 0* and *ν* + odd, see [#7135](https://svn.boost.org/trac/boost/ticket/7135). + + In non-central T permitted infinite degrees of freedom [#7259](https://svn.boost.org/trac/boost/ticket/7259) + implemented using the normal distribution (requested by Thomas Mang). + Also much enhanced accuracy for large degrees of freedom and/or large + non-centrality parameters by switching to use the Students t distribution + (or Normal distribution for infinite degrees of freedom) centered + at delta, when delta / (4 \* v) < epsilon for the floating-point + type in use. See [#7259](https://svn.boost.org/trac/boost/ticket/7259). + It was also found that the incomplete beta was suffering from serious + cancellation errors when degrees of freedom was very large. (That + has now been fixed in our code, but any code based on Didonato and + Morris's original papers (probably every implementation out there + actually) will have the same issue). + + Fixed minor issues [#6517](https://svn.boost.org/trac/boost/ticket/6517), + [#6362](https://svn.boost.org/trac/boost/ticket/6362), + [#7053](https://svn.boost.org/trac/boost/ticket/7053), + [#2693](https://svn.boost.org/trac/boost/ticket/2693), + [#6937](https://svn.boost.org/trac/boost/ticket/6937), + [#7099](https://svn.boost.org/trac/boost/ticket/7099). +* [Phoenix](/libs/phoenix/): + + + Make Phoenix work with `decltype`-based + `boost::result\_of`. +* [Polygon](/libs/polygon/): + + + Included Voronoi diagram extensions. + + Introduced new Segment concept. + + Fixed compilation issues. +* [Proto](/libs/proto/): + + + The data parameter to primitive transforms can now optionally have + slots indexed by key. + + Primitive transforms can now operatate on temporary expressions that + are non-const qualified. + + Add callable function object types for the free functions in `` and also for some Boost.Range + functions. + + Boost.MPL algorithms work on Proto expression nodes. + + `proto::pass\_through` primitive transform + now accepts an optional `Domain` + template parameter for specifying the target domain of the resulting + expression. +* [Ratio](/libs/ratio/): + + + *Features:* + + - Replace the `short\_name` + and `long\_name` + functions by symbol and prefix functions respectively. + + *Deprecated:* + + - The `ratio\_string<>::short\_name` + and `ratio\_string<>::long\_name` + are deprecated. Use `ratio\_string<>::symbol` + and `ratio\_string<>::prefix` + respectively. These functions be removed in 1.55. + + *Fixes:* + + - [#7478](http://svn.boost.org/trac/boost/ticket/7478) + Compiles fails with compilers supporting char16\_t and char32\_t + fails if the library doesn't provides std::u16string and std::u32string. +* [Result\_of](/libs/utility/utility.htm#result_of): + + + Switch `boost::result\_of` to use `decltype` on compilers for which support + is deemed "good enough". That means if the compiler implements + [n3276](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf). + (For now, that only includes very recent versions of clang.) + + `boost::result\_of` is now "sfinae-friendly" + when it uses `decltype`. + See [n3436](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3436.html). +* [Thread](/libs/thread/index.html): + + + *Deprecated Features*: Deprecated features since + boost 1.50 available only until boost 1.55. These deprecated features + will be provided by default up to boost 1.52. If you don't want to + include the deprecated features you could define BOOST\_THREAD\_DONT\_PROVIDE\_DEPRECATED\_FEATURES\_SINCE\_V3\_0\_0. + Since 1.53 these features will not be included any more by default. + Since this version, if you want to include the deprecated features + yet you could define BOOST\_THREAD\_PROVIDE\_DEPRECATED\_FEATURES\_SINCE\_V3\_0\_0. + These deprecated features will be only available until boost 1.55, + that is you have yet 1 year to move to the new features. + + - Time related functions don't using the Boost.Chrono library, + use the chrono overloads instead. + + Breaking changes when `BOOST\_THREAD\_VERSION==3` + (Default value since Boost 1.53): There are some new features which + share the same interface but with different behavior. These breaking + features are provided by default when BOOST\_THREAD\_VERSION is 3, + but the user can however choose the version 2 behavior by defining + the corresponding macro. As for the deprecated features, these broken + features will be only available until boost 1.55. + + - [#6229](https://svn.boost.org/trac/boost/ticket/6229) C++11 compliance & Breaking change: Rename the + unique\_future to future following the c++11. + - [#6266](https://svn.boost.org/trac/boost/ticket/6266) C++11 compliance & Breaking change: thread destructor + should call terminate if joinable. + - [#6269](https://svn.boost.org/trac/boost/ticket/6269) C++11 compliance & Breaking change: thread move + assignment should call terminate if joinable. + + *New Features:* + + - [#4710](https://svn.boost.org/trac/boost/ticket/4710) C++11 compliance: Missing `async()`. + - [#7283](https://svn.boost.org/trac/boost/ticket/7283) C++11 compliance: Add `notify\_all\_at\_thread\_exit`. + - [#7345](https://svn.boost.org/trac/boost/ticket/7345) C++11 compliance: Add `noexcept` + to recursive mutex `try\_lock`. + + *Fixed Bugs:* + + - [#2361](https://svn.boost.org/trac/boost/ticket/2361) `thread\_specific\_ptr`: + document nature of the key, complexity and rationale. + - [#2797](https://svn.boost.org/trac/boost/ticket/2797) Two problems with `thread\_specific\_ptr`. + - [#5274](https://svn.boost.org/trac/boost/ticket/5274) failed to compile `future.hpp` + with stlport 5.1.5 under msvc8.1, because of undefined class. + - [#5431](https://svn.boost.org/trac/boost/ticket/5431) compile error in Windows CE 6.0(interlocked). + - [#5752](https://svn.boost.org/trac/boost/ticket/5752) `boost::call\_once()` is unreliable on some platforms. + - [#7045](https://svn.boost.org/trac/boost/ticket/7045) Thread library does not automatically compile date\_time. + - [#7173](https://svn.boost.org/trac/boost/ticket/7173) wrong function name `interrupt\_point()`. + - [#7200](https://svn.boost.org/trac/boost/ticket/7200) Unable to build boost.thread modularized. + - [#7220](https://svn.boost.org/trac/boost/ticket/7220) gcc 4.6.2 warns about inline+dllimport functions. + - [#7238](https://svn.boost.org/trac/boost/ticket/7238) `this\_thread::sleep\_for()` does not respond to interrupt(). + - [#7245](https://svn.boost.org/trac/boost/ticket/7245) Minor typos on documentation related to version 3. + - [#7272](https://svn.boost.org/trac/boost/ticket/7272) `win32/thread\_primitives.hpp`: + (Unneccessary) Warning. + - [#7284](https://svn.boost.org/trac/boost/ticket/7284) Clarify that there is no access priority between lock + and shared\_lock on shared mutex. + - [#7329](https://svn.boost.org/trac/boost/ticket/7329) `boost/thread/future.hpp` + does not compile on HPUX. + - [#7336](https://svn.boost.org/trac/boost/ticket/7336) `BOOST\_THREAD\_DONT\_USE\_SYSTEM` + doesn't work. + - [#7349](https://svn.boost.org/trac/boost/ticket/7349) `packaged\_task` + holds reference to temporary. + - [#7350](https://svn.boost.org/trac/boost/ticket/7350) `allocator\_destructor` + does not destroy object +* [uBLAS](/libs/numeric/ublas/): + + + improved performance of inplace\_solve (issue [#4024](https://svn.boost.org/trac/boost/ticket/4024)) + + fixed coordinate\_matrix for use with gcc 4.7 (issue [#7363](https://svn.boost.org/trac/boost/ticket/7363)) +* [Unordered](/libs/unordered/): + + + In assignment, reuse existing nodes where possible. + + Fix bugs when erasing ranges ([#7471](https://svn.boost.org/trac/boost/ticket/7471)). + + Some work on the implementation. +* [Uuid](/libs/uuid/): + + + Fixes [#6118](https://svn.boost.org/trac/boost/ticket/6118), [#6788](https://svn.boost.org/trac/boost/ticket/6788), [#7375](https://svn.boost.org/trac/boost/ticket/7375). + + [#7128](https://svn.boost.org/trac/boost/ticket/7128) - fixed bug in `sha1.hpp` + for messages longer than 536,870,912 bytes. +* [Wave](/libs/wave/): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [xpressive](/libs/xpressive/): + + + Make `sub\_match` work + with Boost.Range. Fixes [#7237](https://svn.boost.org/trac/boost/ticket/7237). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2, 4.7.2 + + GCC, C++11 mode: 4.3.4, 4.4.3, 4.5.3, 4.6.2 + + Intel: 11.1, 12.0, 12.1 + + LLVM Clang: 2.8 +* OS X: + + + GCC: 4.4.4 + + GCC, C++11 mode: 4.4.4 + + Intel: 11.1, 12.0 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0 + + Visual C++: 8.0, 9.0, 10.0 +* FreeBSD: + + + GCC: 4.2.1, 32 and 64 bit + Boost's additional test compilers include: + + + +* Linux: + + + Cray: 8.0 + + Clang: from subversion + + GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2, 4.6.3, 4.7.0, 4.7.1, 4.7.2 + + GCC, C++11 mode: 4.3.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1 + + pgCC: 11.9 + + Intel: 10.1, 11.1, 12.0, 12.1 + + Visual Age: 10.1 +* OS X: + + + Clang: from subversion + + Clang, C++11 mode: from subversion + + Intel: 11.1, 12.0 + + GCC: 4.4.4 + + GCC, C++11 mode: 4.4.4 +* Windows: + + + Visual C++: 8.0, 9.0, 10.0, 11.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition: V12.1.0.0 +* FreeBSD: + + + GCC: 4.2.1, 64 bit +* Solaris: + + + Sun: 5.10 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_53_0.html b/users/history/version_1_53_0.html new file mode 100644 index 0000000..b0c0688 --- /dev/null +++ b/users/history/version_1_53_0.html @@ -0,0 +1,533 @@ +--- +title: Version 1.53.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.53.0 + +/\*\*/ + + + + + + + +Version 1.53.0 +============== + +Version 1.53.0 +-------------- + + +February 4th, 2013 18:29 GMT + + +[Documentation](/doc/libs/1_53_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_53\_0.tar.bz2](https://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.bz2) | +| [boost\_1\_53\_0.tar.gz](https://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz) | +| windows | [boost\_1\_53\_0.7z](https://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.7z) | +| [boost\_1\_53\_0.zip](https://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.zip) | + + +### New Libraries + + +* [Atomic](/libs/atomic/): + C++11-style `atomic<>`, + from Helge Bahmann, maintained by Tim Blechmann. +* [Coroutine](/libs/coroutine/): + Coroutine library, + from Oliver Kowalke. +* [Lockfree](/libs/lockfree/): + Lockfree data structures, + from Tim Blechmann. +* [Multiprecision](/libs/multiprecision/): + Extended + precision arithmetic types for floating point, integer and rational arithmetic + from John Maddock and Christopher Kormanyos. +* [Odeint](/libs/numeric/odeint/): + Solving ordinary + differential equations, from Karsten Ahnert and Mario Mulansky. + +### News + This release contains a fix for ticket [#7743](https://svn.boost.org/trac/boost/ticket/7743), in Boost.Locale. For more + details, see the [security + notice](/users/news/boost_locale_security_notice.html). + + +### Updated Libraries + + +* [Algorithm](/libs/algorithm/): + + + Fixed non-ASCII char in comment ([#7781](https://svn.boost.org/trac/boost/ticket/7781)). + + Updated the Knuth-Morris-Pratt docs ([#7656](https://svn.boost.org/trac/boost/ticket/7656)). +* [Array](/libs/array/): + + + Added support for boost::get and std::get ([#7652](https://svn.boost.org/trac/boost/ticket/7652)) +* [Asio](/libs/asio/): + + + Fixed some 64-to-32-bit conversion warnings ([#7459](https://svn.boost.org/trac/boost/ticket/7459)). + + Fixed some small errors in documentation and comments ([#7761](https://svn.boost.org/trac/boost/ticket/7761)). + + Fixed an error in the example embedded in `basic\_socket::get\_option`'s + documentation ([#7562](https://svn.boost.org/trac/boost/ticket/7562)). + + Changed to use `long` + rather than `int` for + SSL\_CTX options, to match OpenSSL ([#7209](https://svn.boost.org/trac/boost/ticket/7209)). + + Changed to use `\_snwprintf` + to address a compile error due to the changed `swprintf` + signature in recent versions of MinGW ([#7373](https://svn.boost.org/trac/boost/ticket/7373)). + + Fixed a deadlock that can occur on Windows when shutting down a pool + of `io\_service` threads + due to running out of work ([#7552](https://svn.boost.org/trac/boost/ticket/7552)). + + Enabled the `noexcept` + qualifier for error categories ([#7797](https://svn.boost.org/trac/boost/ticket/7797)). + + Changed UNIX domain socket example to treat errors from `accept` as non-fatal ([#7488](https://svn.boost.org/trac/boost/ticket/7488)). + + Added a small block recycling optimisation to improve default memory + allocation behaviour. +* [Bimap](/libs/bimap/): + + + Refactor map\_view\_iterator to improve error messages. + + Fixed replace\_(left/right/key/data) bug when using relations with + info. + + Fixed vector\_of and list\_of views `assign(size\_type,value\_type)` bug. + + Fixed vector\_of views `operator[](size\_type)` and `at(size\_type)` functions return value. +* [Chrono](/libs/chrono/): + + + *Deprecated:* + + - The chrono i/o version included in Boost.Chrono 1.2.x has been + completly refactored in version 2.0.0 + - chrono I/O: The manipulators \_\_duration\_short, \_\_duration\_long + are depreceated. You should use the parameterized form \_\_duration\_fmt + or the renamed manipulators \_\_duration\_symbol and \_\_duration\_prefix + instead. + - chrono I/O: The \_\_duration\_punct<> facet is depreceated. + You should use the \_\_get\_duration\_style free function to get + the informations and use the \_\_duration\_units facet for localization + purposes. + - When BOOST\_CHRONO\_VERSION==2 the preceding deprecated functions + are not available. + + *Fixes:* + + - [#7546](https://svn.boost.org/trac/boost/ticket/7546) + time\_point output version 2 fails to compile + - [#7547](https://svn.boost.org/trac/boost/ticket/7547) + time\_point input version 2 fails to compile + - [#7868](https://svn.boost.org/trac/boost/ticket/7868) + chrono\_io parses time incorrectly (1.53 and 1.52) +* [Container](/libs/container/): + + + Fixed bug [#7650](https://svn.boost.org/trac/boost/ticket/7650). + + Improved `vector`'s + insertion performance. + + Changed again experimental multiallocation interface for better performance + (still experimental). + + Added no exception support for those willing to disable exceptions + in their compilers. + + Fixed GCC -Wshadow warnings. + + Replaced deprecated BOOST\_NO\_XXXX with newer BOOST\_NO\_CXX11\_XXX macros. +* [Context](/libs/context/): + + + Support for iOS on ARM and MacOS X on x86 (32bit) added. + + Support for SEH Overwrite Protection on Win32. +* [Geometry](/libs/geometry): + + + *Bugfixes* + + - avoid generating output polygons with interior rings below + minimum size (e.g. one or two points) + - `geometry::disjoint` for degenerate segments + (patched by Karsten Ahnert) + - problem in `geometry::difference` + for missing handling tangency, reported by H2 + - fixed `geometry::for\_each` + for use with Lambda's + - fixed `geometry::comparable\_distance` + point-linestring (and -range, -polygon) + + *Additional functionality* + + - combinations for `geometry::disjoint`: + point/ring, point/polygon, point/multi\_polygon + - combinations for `geometry::intersects`: + point/ring, point/polygon, point/multi\_polygon + + *Internal changes* + + - updates in specializations/not\_implemented for various algorithms + (as in an earlier version, these changes are still going on; + they take care for simplified structs, better error reporting, + and automatized documentation) + - fixes in unit tests +* [GIL](/libs/gil/): + + + Fixed self-assignment warnings ([#4919](https://svn.boost.org/trac/boost/ticket/4919)). +* [Graph](/libs/graph/): + + + Fixed the following bugs from Trac: [#3468](https://svn.boost.org/trac/boost/ticket/3468), [#4386](https://svn.boost.org/trac/boost/ticket/4386), [#5269](https://svn.boost.org/trac/boost/ticket/5269), + [#7428](https://svn.boost.org/trac/boost/ticket/7428), [#7457](https://svn.boost.org/trac/boost/ticket/7457), [#7467](https://svn.boost.org/trac/boost/ticket/7467), [#7600](https://svn.boost.org/trac/boost/ticket/7600), [#7648](https://svn.boost.org/trac/boost/ticket/7648), [#7684](https://svn.boost.org/trac/boost/ticket/7684), + [#7728](https://svn.boost.org/trac/boost/ticket/7728), [#7741](https://svn.boost.org/trac/boost/ticket/7741), [#7766](https://svn.boost.org/trac/boost/ticket/7766), [#7771](https://svn.boost.org/trac/boost/ticket/7771), [#7773](https://svn.boost.org/trac/boost/ticket/7773), [#7780](https://svn.boost.org/trac/boost/ticket/7780), + [#7787](https://svn.boost.org/trac/boost/ticket/7787), [#7801](https://svn.boost.org/trac/boost/ticket/7801) + plus other bugs not in Trac. + + Added support for reading from GraphML files containing multiple + graphs. + + Added versions of A\* search specifically for trees, removing the + need for a color map when it is acceptable to visit the same vertex + multiple times. + + Added VF2 subgraph isomorphism algorithm (contributed by Flavio De + Lorenzi). +* [Hash](/libs/functional/hash/): + + + Add support for `boost::int128\_type` + and `boost::uint128\_type` where available. + + On platforms that are known to have standard floating point functions, + don't use the automatic detection ([#7221](https://svn.boost.org/trac/boost/ticket/7221), [#7470](https://svn.boost.org/trac/boost/ticket/7470)). +* [Interprocess](/libs/interprocess/): + + + Fixed GCC -Wshadow warnings. + + Experimental multiple allocation interface improved and changed again. + Still unstable. + + Replaced deprecated BOOST\_NO\_XXXX with newer BOOST\_NO\_CXX11\_XXX macros. + + *ABI breaking*: changed node pool allocators internals + for improved efficiency. + + Fixed bug [#7795](https://svn.boost.org/trac/boost/ticket/7795). +* [Intrusive](/libs/intrusive/): + + + Fixed bugs [#7174](https://svn.boost.org/trac/boost/ticket/7174), + [#7529](https://svn.boost.org/trac/boost/ticket/7529), + [#7815](https://svn.boost.org/trac/boost/ticket/7815). + + Fixed GCC -Wshadow warnings. + + Added missing `explicit` + keyword in several intrusive container constructors. + + Replaced deprecated BOOST\_NO\_XXXX with newer BOOST\_NO\_CXX11\_XXX macros. + + Small documentation fixes. +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + New character type detection algorithm for user defined types [#6786](https://svn.boost.org/trac/boost/ticket/6786). + + Documentation updates ([#7582](https://svn.boost.org/trac/boost/ticket/7582), [#7831](https://svn.boost.org/trac/boost/ticket/7831)). + + Fixed bugs with std::array [#7799](https://svn.boost.org/trac/boost/ticket/7799). + + Fixed compilation with -ftrapv and numeric to numeric conversions + [#7814](https://svn.boost.org/trac/boost/ticket/7814). +* [Locale](/libs/locale/): + + + Security related bug fix, some invalid UTF-8 sequences where accepted + as valid [#7743](https://svn.boost.org/trac/boost/ticket/7743) + + Invalid Windows codepage names used [#7386](https://svn.boost.org/trac/boost/ticket/7386) + + Fixed missing documentation, caused by a error in Doxygen formatting + [#7734](https://svn.boost.org/trac/boost/ticket/7734) + + Fixed missing std:: in some places [#7701](https://svn.boost.org/trac/boost/ticket/7701) + + Spelling, grammar, typos fixes [#7368](https://svn.boost.org/trac/boost/ticket/7368), [#7762](https://svn.boost.org/trac/boost/ticket/7762) +* [Math](/libs/math/): + + + Fixed issues [#7325](https://svn.boost.org/trac/boost/ticket/7325), + [#7415](https://svn.boost.org/trac/boost/ticket/7415), + [#7416](https://svn.boost.org/trac/boost/ticket/7416), + [#7183](https://svn.boost.org/trac/boost/ticket/7183), + [#7649](https://svn.boost.org/trac/boost/ticket/7649), + [#7694](https://svn.boost.org/trac/boost/ticket/7694), + [#4445](https://svn.boost.org/trac/boost/ticket/4445) + and [#7492](https://svn.boost.org/trac/boost/ticket/7492). + + Fixed mistake in calculating pooled standard deviation in two-sample + students t example [#7402](https://svn.boost.org/trac/boost/ticket/7402). + + Improve complex acos/asin/atan, see [#7290](https://svn.boost.org/trac/boost/ticket/7290), + [#7291](https://svn.boost.org/trac/boost/ticket/7291). + + Improve accuracy in some corner cases of cyl\_bessel\_j and gamma\_p/gamma\_q + thanks to suggestions from Rocco Romeo. + + Improve accuracy in Bessel J and Y with integer orders thanks to + suggestions from Rocco Romeo. +* [MinMax](/libs/algorithm/minmax/): + + + Fixed a misuse of the comma operator ([#7752](https://svn.boost.org/trac/boost/ticket/7752)). + + Updated the docs to fix broken link ([#7751](https://svn.boost.org/trac/boost/ticket/7751)). +* [Move](/libs/move/): + + + Better header segregation (bug [#6524](https://svn.boost.org/trac/boost/ticket/6524)). + + Small documentation fixes + + Replaced deprecated BOOST\_NO\_XXXX with newer BOOST\_NO\_CXX11\_XXX macros. + + Fixed [#7830](https://svn.boost.org/trac/boost/ticket/7830), + [#7832](https://svn.boost.org/trac/boost/ticket/7832). +* [Polygon](/libs/polygon/): + + + *Fixes:* + + - [#6366](https://svn.boost.org/trac/boost/ticket/6366) Bug in `boost::polygon::contains` + for polygon\_90 type. + - [#7678](https://svn.boost.org/trac/boost/ticket/7678) multiple definitions of `bool + boost::polygon::belongs(...)` + by multiple `#include`. + + *Internal changes:* + + - refactored point/segment/interval data/concept/traits. + - added unit tests for point and interval data/concept/traits. + - simplified `transform.hpp` + to operate only in 2D. + - removed point\_3d data/concept/traits. +* [Random](/libs/random/): + + + Now compiles with exceptions disabled ([#5399](https://svn.boost.org/trac/boost/ticket/5399)). +* [Range](/libs/range/): + + + *Bug fixes:* + + - [#5603](https://svn.boost.org/trac/boost/ticket/5603) the "range/any\_range.hpp" header is not + self-sufficient + - [#6103](https://svn.boost.org/trac/boost/ticket/6103) boost::range\_detail vs. boost::range::range\_detail + compiler error + + *Documentation fixes:* + + - [#5160](https://svn.boost.org/trac/boost/ticket/5160) + - [#5314](https://svn.boost.org/trac/boost/ticket/5314) + - [#5440](https://svn.boost.org/trac/boost/ticket/5440) + - [#5775](https://svn.boost.org/trac/boost/ticket/5775) + - [#6212](https://svn.boost.org/trac/boost/ticket/6212) + - [#7585](https://svn.boost.org/trac/boost/ticket/7585) + - [#7843](https://svn.boost.org/trac/boost/ticket/7843) + - [#7916](https://svn.boost.org/trac/boost/ticket/7916) + - [#7926](https://svn.boost.org/trac/boost/ticket/7926) +* [Ratio](/libs/ratio/): + + + *Fixes:* + + - [#7616](https://svn.boost.org/trac/boost/ticket/7616) + br\_mul::nan - warning C4293: '<<' : shift count negative + or too big, undefined behavior`. +* [Regex](/libs/regex/): + Fixed Issues: [#7744](https://svn.boost.org/trac/boost/ticket/7744), + [#7644](https://svn.boost.org/trac/boost/ticket/7644). +* [Smart Pointers](/libs/smart_ptr/): + + + *New Features:* + + - Glen Fernandes provided implementations of make\_shared and + allocate\_shared for arrays. They achieve a single allocation + for an array that can be initialized with constructor arguments + or initializer lists as well as overloads for default initialization + and no value initialization. See the '[make\_shared + and allocate\_shared for arrays](/libs/smart_ptr/make_shared_array.html)' page for more information. + - `shared\_ptr` + can now be used to hold a pointer to a dynamically allocated + array. This is accomplished by using an array type (`T[]` + or `T[N]`) + as the template parameter. + - Smart pointers now use `explicit + operator bool` + on C++11 compilers. This can break code that passes a smart + pointer to a function taking a `bool`, + or that returns a smart pointer from a function with a `bool` return type. Please use + `p != + 0` or `!!p` in such cases. +* [StringAlgo](/libs/algorithm/string): + + + Fixed a bug where it wouldn't find overlapping patterns ([#7784](https://svn.boost.org/trac/boost/ticket/7784)). + + Disambiguated some calls to insert ([#7346](https://svn.boost.org/trac/boost/ticket/7346)). +* [Thread](/libs/thread/): + + + *Deprecated features:* + + - Deprecated features since boost 1.53 will be available only + until boost 1.58. + - C++11 compliance: packaged\_task is deprecated, use + instead packaged\_task. + - [#7537](https://svn.boost.org/trac/boost/ticket/7537) + deprecate Mutex::scoped\_lock and scoped\_try\_lock and boost::condition + + *New Features:* + + - [#6270](https://svn.boost.org/trac/boost/ticket/6270) + C++11 compliance: Add thread constructor from movable callable + and movable arguments + - [#7279](https://svn.boost.org/trac/boost/ticket/7279) + C++11 compliance: Add noexcept in system related functions + - [#7280](https://svn.boost.org/trac/boost/ticket/7280) + C++11 compliance: Add promise::...at\_thread\_exit functions + - [#7281](https://svn.boost.org/trac/boost/ticket/7281) + C++11 compliance: Add ArgTypes to packaged\_task template. + - [#7282](https://svn.boost.org/trac/boost/ticket/7282) + C++11 compliance: Add packaged\_task::make\_ready\_at\_thread\_exit + function + - [#7412](https://svn.boost.org/trac/boost/ticket/7412) + C++11 compliance: Add async from movable callable and movable + arguments + - [#7413](https://svn.boost.org/trac/boost/ticket/7413) + C++11 compliance: Add async when the launch policy is deferred. + - [#7414](https://svn.boost.org/trac/boost/ticket/7414) + C++11 compliance: future::get post-condition should be valid()==false. + - [#7422](https://svn.boost.org/trac/boost/ticket/7422) + Provide a condition variable with zero-overhead performance + penality. + - [#7444](https://svn.boost.org/trac/boost/ticket/7444) + Async: Add make\_future/make\_shared\_future. + - [#7540](https://svn.boost.org/trac/boost/ticket/7540) + Threads: Add a helper class that join a thread on destruction. + - [#7541](https://svn.boost.org/trac/boost/ticket/7541) + Threads: Add a thread wrapper class that joins on destruction. + - [#7575](https://svn.boost.org/trac/boost/ticket/7575) + C++11 compliance: A future created by async should "join" + in the destructor. + - [#7587](https://svn.boost.org/trac/boost/ticket/7587) + Synchro: Add strict\_lock and nested\_strict\_lock. + - [#7588](https://svn.boost.org/trac/boost/ticket/7588) + Synchro: Split the locks.hpp in several files to limit dependencies. + - [#7590](https://svn.boost.org/trac/boost/ticket/7590) + Synchro: Add lockable concept checkers based on Boost.ConceptCheck. + - [#7591](https://svn.boost.org/trac/boost/ticket/7591) + Add lockable traits that can be used with enable\_if. + - [#7592](https://svn.boost.org/trac/boost/ticket/7592) + Synchro: Add a null\_mutex that is a no-op and that is a model + of UpgardeLockable. + - [#7593](https://svn.boost.org/trac/boost/ticket/7593) + Synchro: Add a externally\_locked class. + - [#7594](https://svn.boost.org/trac/boost/ticket/7590) + Threads: Allow to disable thread interruptions. + + *Fixed Bugs:* + + - [#7464](https://svn.boost.org/trac/boost/ticket/7464) + BOOST\_TEST(n\_alive == 1); fails due to race condition in a + regression test tool. + - [#7657](https://svn.boost.org/trac/boost/ticket/7657) + Serious performance and memory consumption hit if condition\_variable + methods condition notify\_one or notify\_all is used repeatedly. + - [#7665](https://svn.boost.org/trac/boost/ticket/7665) + this\_thread::sleep\_for no longer uses steady\_clock in thread. + - [#7668](https://svn.boost.org/trac/boost/ticket/7668) + thread\_group::join\_all() should check whether its threads are + joinable. + - [#7669](https://svn.boost.org/trac/boost/ticket/7669) + thread\_group::join\_all() should catch resource\_deadlock\_would\_occur. + - [#7671](https://svn.boost.org/trac/boost/ticket/7671) + Error including boost/thread.hpp header on iOS. + - [#7672](https://svn.boost.org/trac/boost/ticket/7672) + lockable\_traits.hpp syntax error: "defined" token + misspelled. + - [#7798](https://svn.boost.org/trac/boost/ticket/7798) + boost::future set\_wait\_callback thread safety issues. + - [#7808](https://svn.boost.org/trac/boost/ticket/7808) + Incorrect description of effects for this\_thread::sleep\_for + and this\_thread::sleep\_until. + - [#7812](https://svn.boost.org/trac/boost/ticket/7812) + Returns: cv\_status::no\_timeout if the call is returning because + the time period specified by rel\_time has elapsed, cv\_status::timeout + otherwise. + - [#7874](https://svn.boost.org/trac/boost/ticket/7874) + compile warning: thread.hpp:342: warning: type attributes are + honored only at type definition. + - [#7875](https://svn.boost.org/trac/boost/ticket/7875) + BOOST\_THREAD\_THROW\_IF\_PRECONDITION\_NOT\_SATISFIED should not + be enabled by default. + - [#7882](https://svn.boost.org/trac/boost/ticket/7882) + wrong exception text from condition\_variable::wait(unique\_lock&). + - [#7890](https://svn.boost.org/trac/boost/ticket/7890) + thread::do\_try\_join\_until() is missing a return type. +* [Unordered](/libs/unordered/): + + + Remove support for the old pre-standard variadic pair constructors, + and equality implementation. Both have been deprecated since Boost + 1.48. + + More internal implementation changes, including a much simpler implementation + of `erase`, and removed + more deprecated config macros. +* [Utility](/libs/utility/): + + + Added [string\_ref](/libs/utility/doc/html/string_ref.html), + a non-owning reference to a contiguous sequence of characters. +* [Variant](/libs/variant/): + + + Added rvalue constructors and rvalue assignment operators (for C++11 + compatible compilers only). Library now can be used with move-only + types ([#7620](https://svn.boost.org/trac/boost/ticket/7620), [#7718](https://svn.boost.org/trac/boost/ticket/7718)). +* [Wave](/libs/wave/): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [xpressive](/libs/xpressive/): + + + Accomodate recent smart pointer changes ([#7809](https://svn.boost.org/trac/boost/ticket/7809)). + +### Updated Tools + + +* [Boost Build System](/tools/build/index.html): + + + Qt5 toolset + + improved rcc support ([#7576](https://svn.boost.org/trac/boost/ticket/7576)) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 4.1.2, 4.2.4, 4.4.4, 4.5.3, 4.6.3, 4.7.2 + + GCC, C++11 mode: 4.4.4, 4.5.3, 4.6.3, 4.7.2 + + Intel: 11.1, 12.1 + + LLVM Clang: 2.8 + + LLVM Clang, with libc++: 3.2 +* OS X: + + + GCC: 4.4.7 + + GCC, C++11 mode: 4.4.4 + + Intel: 11.1, 12.0 +* Windows: + + + Visual C++: 9.0, 10.0 +* FreeBSD: + + + GCC: 4.2.1, 32 and 64 bit + Boost's additional test compilers include: + + + +* Linux: + + + Cray: 4.6.1 + + Clang: from subversion + + LLVM Clang, with libc++: 3.2 + + GCC: 4.2.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1 + + GCC, C++11 mode: 4.4.4, 4.5.3, 4.6.3, 4.7.1, 4.7.2 + + pgCC: 11.9 + + Intel: 10.1, 11.1, 12.1 + + Intel, C++11 mode: 13.0.1 + + Visual Age: +* OS X: + + + Clang: from subversion + + Clang, C++11 mode: from subversion + + Intel: 11.1, 12.0 + + GCC: 4.4.7 + + GCC, C++11 mode: 4.4.4 +* Windows: + + + Visual C++: 10.0, 11.0 + + Visual C++ with STLport: 9.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition: V12.1.0.1 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_54_0.html b/users/history/version_1_54_0.html new file mode 100644 index 0000000..32b38f4 --- /dev/null +++ b/users/history/version_1_54_0.html @@ -0,0 +1,651 @@ +--- +title: Version 1.54.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.54.0 + +/\*\*/ + + + + + + + +Version 1.54.0 +============== + +Version 1.54.0 +-------------- + + +July 1st, 2013 17:10 GMT + + +[Documentation](/doc/libs/1_54_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_54\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.bz2) | +| [boost\_1\_54\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz) | +| windows | [boost\_1\_54\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.7z) | +| [boost\_1\_54\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.zip) | + + +### Patches + These are patches from library authors which were found too late to be fixed + in the 1.54.0 release. Be careful as they have not been through the normal + testing process. + + + +1. [Coroutine patch](/patches/1_54_0/001-coroutine.patch) +2. [Date Time patch](/patches/1_54_0/002-date-time.patch) +3. [Log patch](/patches/1_54_0/003-log.patch) +4. [Thread patch](/patches/1_54_0/004-thread.patch) + +### News +### Supported CPUs + Boost no longer supports the 80386 target CPU, the minimum x86 32-bit target + is i486. The 80386 target was not properly supported by [Boost.SmartPtr](/libs/smart_ptr/) + and [Boost.Atomic](/libs/atomic/) (as well as the libraries + that used them internally) even before this release. Some Boost libraries + may have higher requirements on the minimum target CPU (like [Boost.Log](/libs/log/) + for example), see the respective library documentation for details. + + Also by default, when building Boost for x86 32-bit targets it will compile + for i686 (Pentium Pro) and later CPUs. This can be changed by specifying + the instruction-set property in b2 + or bjam command line, for example: + +``` +b2 variant=release architecture=x86 instruction-set=i486 stage + +``` + + + Possible values for the instruction-set are: + + + +* Target for the host CPU: native +* Generic x86 CPUs: i486, i586, + i686 +* Intel CPUs: pentium, pentium-mmx, + pentiumpro, pentium2, pentium3, + pentium3m, pentium-m, pentium4, + pentium4m, prescott, nocona, + core2, corei7, corei7-avx, + core-avx-i, conroe, conroe-xe, + conroe-l, allendale, merom, + merom-xe, kentsfield, kentsfield-xe, + penryn, wolfdale, yorksfield, + nehalem, sandy-bridge, ivy-bridge, + haswell, atom +* AMD CPUs: k6, k6-2, k6-3, + athlon, athlon-tbird, athlon-4, + athlon-xp, athlon-mp, k8, + opteron, athlon64, athlon-fx, + k8-sse3, opteron-sse3, athlon64-sse3, + amdfam10, barcelona, bdver1, + bdver2, bdver3, btver1, + btver2 +* VIA CPUs: c3, c3-2 +* IDT CPUs: winchip-c6, winchip2 + Note that not all these values may be supported by a particular compiler. + + +### Signals deprecated + Boost.Signals is no longer being actively maintained, so it has been deprecated. + Do not use Boost.Signals for new development (use [Boost.Signals2](/libs/signals2/) + instead). If you have existing Boost.Signals-based code, it will continue + to work, but consider moving to Boost.Signals2. There is [a + porting guide](/doc/html/signals2/api_changes.html#signals2.porting) in the Signals2 documentation. + + + +### New Libraries + + +* [Log](/libs/log/): + Logging library, from Andrey + Semashev. +* [TTI](/libs/tti/): + Type Traits Introspection library, + from Edward Diener. +* [Type Erasure](/libs/type_erasure/): + Runtime polymorphism + based on concepts. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/): + + + Fixes comment typos ([#7917](http://svn.boost.org/trac/boost/ticket/7917)) + + Silence unused variable warnings ([#6926](http://svn.boost.org/trac/boost/ticket/6926)) +* [Algorithm](/libs/algorithm/): + + + The return types for copy\_while and copy\_until have been changed. + This is an interface change. If you were using the return values + from these functions, then you will have to modify your code. Instead + of just returning the modified `OutputIterator`, + these functions now return a `std::pair`. If this change affects your + code, the simplest change is to add a `.second` to the end of the call, + which will get you the same behavior that you had before. + + Added C++14 versions of 'is\_permutation', 'equal' and 'mismatch'. +* [Any](/libs/any/): + + + Added C++11 features support [#6999](https://svn.boost.org/trac/boost/ticket/6999): + + - Move assignment and move constructors. + - Added `noexcept` + modifiers. +* [Asio](/libs/asio/): + + + Added new traits classes, `handler\_type` + and `async\_result`, + that allow the customisation of the return type of an initiating + function. + + Added the `asio::spawn()` + function, a high-level wrapper for running stackful coroutines, based + on the Boost.Coroutine library. The `spawn()` function enables programs to implement + asynchronous logic in a synchronous manner. For example: `size\_t n + = my\_socket.async\_read\_some(my\_buffer, yield);`. + + Added the `asio::use\_future` special value, which + provides first-class support for returning a C++11 `std::future` from an asynchronous operation's + initiating function. For example: `future n + = my\_socket.async\_read\_some(my\_buffer, asio::use\_future);`. + + Promoted the stackless coroutine class and macros to be part of Asio's + documented interface, rather than part of the HTTP server 4 example. + + Added a new handler hook called `asio\_handler\_is\_continuation`. + Asynchronous operations may represent a continuation of the asynchronous + control flow associated with the current executing handler. The + `asio\_handler\_is\_continuation` + hook can be customised to return `true` + if this is the case, and Asio's implementation can use this knowledge + to optimise scheduling of the new handler. To cover common cases, + Asio customises the hook for strands, `spawn()` and composed asynchronous operations. + + Added four new generic protocol classes, `generic::datagram\_protocol`, + `generic::raw\_protocol`, `generic::seq\_packet\_protocol` + and `generic::stream\_protocol`, which implement + the `Protocol` type + requirements, but allow the user to specify the address family (e.g. + `AF\_INET`) and protocol + type (e.g. `IPPROTO\_TCP`) + at runtime. + + Added C++11 move constructors that allow the conversion of a socket + (or acceptor) into a more generic type. For example, an `ip::tcp::socket` can be converted into a + `generic::stream\_protocol::socket` via move construction. + + Extended the `basic\_socket\_acceptor<>` class's `accept()` and `async\_accept()` functions to allow a new connection + to be accepted directly into a socket of a more generic type. For + example, an `ip::tcp::acceptor` can be used to accept + into a `generic::stream\_protocol::socket` object. + + Moved existing examples into a C++03-specific directory, and added + a new directory for C++11-specific examples. A limited subset of + the C++03 examples have been converted to their C++11 equivalents. + + Various SSL enhancements. Thanks go to Nick Jones, on whose work + these changes are based. + + - Added support for SSL handshakes with re-use of data already + read from the wire. New overloads of the `ssl::stream<>` class's `handshake()` + and `async\_handshake()` functions have been added. + These accept a `ConstBufferSequence` + to be used as initial input to the ssl engine for the handshake + procedure. + - Added support for creation of TLSv1.1 and TLSv1.2 `ssl::context` objects. + - Added a `set\_verify\_depth()` function to the `ssl::context` and `ssl::stream<>` + classes. + - Added the ability to load SSL certificate and key data from + memory buffers. New functions, `add\_certificate\_authority()`, `use\_certificate()`, `use\_certificate\_chain()`, `use\_private\_key()`, `use\_rsa\_private\_key()` and `use\_tmp\_dh()`, have been added to the + `ssl::context` class. + - Changed `ssl::context` + to automatically disable SSL compression by default. To enable, + use the new `ssl::context::clear\_options()` function, as in `my\_context.clear\_options(ssl::context::no\_compression)`. + + Fixed a potential deadlock in `signal\_set` + implementation. + + Fixed an error in acceptor example in documentation [#8421](https://svn.boost.org/trac/boost/ticket/8421). + + Fixed copy-paste errors in waitable timer documentation [#8602](https://svn.boost.org/trac/boost/ticket/8602). + + Added assertions to satisfy some code analysis tools [#7739](https://svn.boost.org/trac/boost/ticket/7739). + + Fixed a malformed `#warning` + directive [#7939](https://svn.boost.org/trac/boost/ticket/7939). + + Fixed a potential data race in the Linux `epoll` + implementation. + + Fixed a Windows-specific bug, where certain operations might generate + an `error\_code` with + an invalid (i.e. `NULL`) + `error\_category` [#8613](https://svn.boost.org/trac/boost/ticket/8613). + + Fixed `basic\_waitable\_timer`'s + underlying implementation so that it can handle any `time\_point` value without overflowing + the intermediate duration objects. + + Fixed a problem with lost thread wakeups that can occur when making + concurrent calls to `run()` and `poll()` on the same `io\_service` + object [#8354](https://svn.boost.org/trac/boost/ticket/8354). + + Fixed implementation of asynchronous connect operation so that it + can cope with spurious readiness notifications from the reactor [#7961](https://svn.boost.org/trac/boost/ticket/7961). +* [Chrono](/libs/chrono/): + + + *Fixed Bugs:* + + - [#8079](http://svn.boost.org/trac/boost/ticket/8079) + Chrono memory leak + - [#8318](http://svn.boost.org/trac/boost/ticket/8318) + BOOST\_FORCEINLINE constructors of time\_point and duration + - [#8367](http://svn.boost.org/trac/boost/ticket/8367) + chrono does not compile with clang from XCode 4.5.2 with -std=c++11 + -stdlib=libc++ and -arch armv7 + - [#8370](http://svn.boost.org/trac/boost/ticket/8370) + typo in chrono reference + - [#8435](http://svn.boost.org/trac/boost/ticket/8435) + Can't compile Chrono on HP-UX due to no CLOCK\_REALTIME macro. +* [Circular Buffer](/libs/circular_buffer): + + + Fixed warnings ([#8032](https://svn.boost.org/trac/boost/ticket/8032)). +* [Container](/libs/container/): + + + Added experimental `static\_vector` + class, based on Andrew Hundt's and Adam Wulkiewicz's high-performance + `varray` class. + + Speed improvements in `vector` + constructors/copy/move/swap, dispatching to memcpy when possible. + + Support for `BOOST\_NO\_EXCEPTIONS` + [#7227](https://svn.boost.org/trac/boost/ticket/7227). + + Fixed bugs [#7921](https://svn.boost.org/trac/boost/ticket/7921), + [#7969](https://svn.boost.org/trac/boost/ticket/7969), + [#8118](https://svn.boost.org/trac/boost/ticket/8118), + [#8294](https://svn.boost.org/trac/boost/ticket/8294), + [#8553](https://svn.boost.org/trac/boost/ticket/8553). +* [Context](/libs/context/): + + + Support for SPARC architecture added. +* [Coroutine](/libs/coroutine/): + + + Support for segmented stacks (stack grows on demand) added. + + [#7805](http://svn.boost.org/trac/boost/ticket/7805) + Typo + + [#7972](http://svn.boost.org/trac/boost/ticket/7972) + GCC warnings + + [#7988](http://svn.boost.org/trac/boost/ticket/7988) + C++11 range-for + + [#8023](http://svn.boost.org/trac/boost/ticket/8023) + Using iterator traits + + [#8024](http://svn.boost.org/trac/boost/ticket/8024) + Create const\_iterator + + [#8101](http://svn.boost.org/trac/boost/ticket/8101) + Postfix operator++ for iterator + + [#8526](http://svn.boost.org/trac/boost/ticket/8526) + memory leak + + [#8544](http://svn.boost.org/trac/boost/ticket/8544) + calling managed DLL +* [Geometry](/libs/geometry/): + + + *Additional functionality* + + - added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. + The spatial index was originally started by Federico J. Fernandez + during the Google Summer of Code 2008 program, mentored by + Hartmut Kaiser. + - added SVG-output, this was already in extensions for several + years + + *Documentation* + + - small fixes of missing words + + *Bugfixes* + + - collinear opposite segments did sometimes (in circles) have + a robustness issue, fixed + - fixed insertion of false intersection point (found by buffer) + - applied patch of Vladimir Petrovic for debugging traversals + + *Solved tickets* + + - [7462](https://svn.boost.org/trac/boost/ticket/7462) + degenerate union result for float, fixed + - [7465](https://svn.boost.org/trac/boost/ticket/7465) + wrong construtors access type in scale\_transformer class, fixed + - [7802](https://svn.boost.org/trac/boost/ticket/7802) + cart\_intersect.hpp unused parameter warnings, fixed + - [8254](https://svn.boost.org/trac/boost/ticket/8254) + faulty intersection, fixed + - [8393](https://svn.boost.org/trac/boost/ticket/8393) + polygon model doesn't adhere to stated Polygon concept rules, + doc updated. + - [8403](https://svn.boost.org/trac/boost/ticket/8403) + silenced compiler warning C4127: conditional expression is + constant + - [8405](https://svn.boost.org/trac/boost/ticket/8405) + silenced compiler warning C4189: '...' : local variable is + initialized but not referenced + + *Internal changes* + + - Made several algorithms variant-aware (append, area, clear, + convert, equals, length, num\_points) +* [Graph](/libs/graph): + + + Bugs fixed from Trac: [#6780](https://svn.boost.org/trac/boost/ticket/6780), [#7016](https://svn.boost.org/trac/boost/ticket/7016), [#7155](https://svn.boost.org/trac/boost/ticket/7155), [#7845](https://svn.boost.org/trac/boost/ticket/7845), + [#7863](https://svn.boost.org/trac/boost/ticket/7863), [#7877](https://svn.boost.org/trac/boost/ticket/7877), [#8166](https://svn.boost.org/trac/boost/ticket/8166), [#8192](https://svn.boost.org/trac/boost/ticket/8192), [#8398](https://svn.boost.org/trac/boost/ticket/8398), [#8411](https://svn.boost.org/trac/boost/ticket/8411), + [#8427](https://svn.boost.org/trac/boost/ticket/8427), [#8428](https://svn.boost.org/trac/boost/ticket/8428), [#8434](https://svn.boost.org/trac/boost/ticket/8434), [#8490](https://svn.boost.org/trac/boost/ticket/8490), [#8681](https://svn.boost.org/trac/boost/ticket/8681). + + Added updates to VF2 subgraph isomorphism from Jakob Lykke Andersen + and Flavio De Lorenzi. + + Added maximum adjacency search from Fernando Vilas. + + Added timeout support from Brammert Ottens to resource-constrained + shortest paths (r\_c\_shortest\_paths) algorithm. + + Various fixes to documentation and examples and removal of outdated + compiler workarounds. +* [Interprocess](/libs/interprocess/): + + + Added support for platform-specific flags to mapped\_region (ticket + #8030) + + Fixed bugs [#7484](https://svn.boost.org/trac/boost/ticket/7484), + [#7598](https://svn.boost.org/trac/boost/ticket/7598), + [#7682](https://svn.boost.org/trac/boost/ticket/7682), + [#7923](https://svn.boost.org/trac/boost/ticket/7923), + [#7924](https://svn.boost.org/trac/boost/ticket/7924), + [#7928](https://svn.boost.org/trac/boost/ticket/7928), + [#7936](https://svn.boost.org/trac/boost/ticket/7936), + [#8521](https://svn.boost.org/trac/boost/ticket/8521), + [#8595](https://svn.boost.org/trac/boost/ticket/8595). + + **ABI breaking**: Changed bootstamp + function in Windows to use EventLog service start time as system + bootup time. Previously used `LastBootupTime` + from WMI was unstable with time synchronization and hibernation and + unusable in practice. If you really need to obtain pre Boost 1.54 + behaviour define `BOOST\_INTERPROCESS\_BOOTSTAMP\_IS\_LASTBOOTUPTIME` + from command line or `detail/workaround.hpp`. +* [Intrusive](/libs/intrusive/): + + + Added `BOOST\_NO\_EXCEPTIONS` + support (bug [#7849](https://svn.boost.org/trac/boost/ticket/7849)). +* [Iostreams](/libs/iostreams/): + + + `tee` now works correctly + for std::streams ([#8315](https://svn.boost.org/trac/boost/ticket/8315)). + + Documentation fixes ([#8385](https://svn.boost.org/trac/boost/ticket/8385), [#8460](https://svn.boost.org/trac/boost/ticket/8460)). + + Avoid warning from Clang's `-Wimplicit-fallthrough` ([#8482](https://svn.boost.org/trac/boost/ticket/8482)). +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + Converting to character pointer now triggers compile time assert + instead of runtime [#8334](https://svn.boost.org/trac/boost/ticket/8334). + + Lexical cast is now capable of converting `boost::int128\_type` + and `boost::uint128\_type` [#7909](https://svn.boost.org/trac/boost/ticket/7909). + + Changed internal stream buffer handling, now works with libc++ [#8267](https://svn.boost.org/trac/boost/ticket/8267), + [#7704](https://svn.boost.org/trac/boost/ticket/7704). + + Restored getting address of `lexical\_cast` + function that was broken in 1.53.0 [#7421](https://svn.boost.org/trac/boost/ticket/7421). + + Fixed warnings, internals and tests [#2558](https://svn.boost.org/trac/boost/ticket/2558), [#7949](https://svn.boost.org/trac/boost/ticket/7949), [#8162](https://svn.boost.org/trac/boost/ticket/8162), + [#8369](https://svn.boost.org/trac/boost/ticket/8369), [#8547](https://svn.boost.org/trac/boost/ticket/8547). +* [Math](/libs/math/): + + + Major reorganization to incorporate other Boost.Math like Integer + Utilities (Greatest Common Divisor and Least Common Multiple), quaternions + and octonions. Making new chapter headings. + + Added many references to Boost.Multiprecision and `cpp\_dec\_float\_50` + as an example of a User-defined Type (UDT). + + Added Clang to list of supported compilers. + + Fixed constants to use a thread-safe cache of computed values when + used at arbitrary precision. + + Added finding zeros of Bessel functions `cyl\_bessel\_j\_zero`, + `cyl\_neumann\_zero`, + `airy\_ai\_zeros` and + `airy\_bi\_zeros`(by + Christopher Kormanyos). + + More accuracy improvements to the Bessel J and Y functions from Rocco + Romeo. + + Fixed nasty cyclic dependency bug that caused some headers to not + compile [#7999](https://svn.boost.org/trac/boost/ticket/7999). + + Fixed bug in \_\_tgamma that caused spurious overflow for arguments + between 142.5 and 143. + + Fixed bug in raise\_rounding\_error that caused it to return an incorrect + result when throwing an exception is turned off [#7905](https://svn.boost.org/trac/boost/ticket/7905). + + Added minimal \_\_float128 support. + + Fixed bug in edge-cases of poisson quantile [#8308](https://svn.boost.org/trac/boost/ticket/8308). + + Adjusted heuristics used in Halley iteration to cope with inverting + the incomplete beta in tricky regions where the derivative is flatlining. + Example is computing the quantile of the Fisher F distribution for + probabilities smaller than machine epsilon. See ticket [#8314](https://svn.boost.org/trac/boost/ticket/8314). +* [Meta State Machine](/libs/msm/): + + + Bugfix: Exit points broken for the favor\_compile\_time policy. + + Bugfix: copy breaks exit points of subsubmachines. + + Bugfix: [#8046](https://svn.boost.org/trac/boost/ticket/8046) +* [Move](/libs/move/): + + + Fixed bugs [#7969](https://svn.boost.org/trac/boost/ticket/7969)), + [#8231](https://svn.boost.org/trac/boost/ticket/8231)). +* [Multiprecision](/libs/multiprecision/): + + + **Breaking change** renamed `rational\_adapter` to `rational\_adaptor`. + + Add support for [MPFI](http://perso.ens-lyon.fr/nathalie.revol/software.html). + + Add logged\_adaptor. + + Add support for 128-bit floats via GCC's `\_\_float128` + or Intel's `\_Quad` + data types. + + Add support for user-defined literals in cpp\_int, improve `constexpr` support. + + Fixed bug in integer division of `cpp\_int` + that results in incorrect sign of `cpp\_int` + when both arguments are small enough to fit in a `double\_limb\_type`. + See [8126](https://svn.boost.org/trac/boost/ticket/8126). + + Fixed bug in subtraction of a single limb in `cpp\_int` + that results in incorrect value when the result should have a 0 in + the last limb: [8133](https://svn.boost.org/trac/boost/ticket/8133). + + Fixed bug in `cpp\_int` + where division of 0 by something doesn't get zero in the result: + [8160](https://svn.boost.org/trac/boost/ticket/8160). + + Fixed bug in some transcendental functions that caused incorrect + return values when variables are reused, for example with `a = pow(a, b)`. + See [8326](https://svn.boost.org/trac/boost/ticket/8326). +* [Polygon](/libs/polygon/): + + + Updates and fixes to the Voronoi documentation. + + Bugs fixed from Trac: [#8026](https://svn.boost.org/trac/boost/ticket/8026), [#8197](https://svn.boost.org/trac/boost/ticket/8197), [#8257](https://svn.boost.org/trac/boost/ticket/8257). +* [PropertyMap](/libs/property_map/): + + + Added `compose\_property\_map` + from Guillaume Pinot. +* [Range](/libs/range/): + + + *Bug fixes:* + + - [#6944](https://svn.boost.org/trac/boost/ticket/6944) Some Range concepts use the incorrect Iterator concept + - [#7407](https://svn.boost.org/trac/boost/ticket/7407) istream\_range does not compile with wcin + - [#7408](https://svn.boost.org/trac/boost/ticket/7408) istream\_range should not pull istream + - [#7731](https://svn.boost.org/trac/boost/ticket/7731) irange doesn't end iteration properly when step\_size + is 3 or more + - [#7827](https://svn.boost.org/trac/boost/ticket/7827) [range] cant compile r | indexed to range algorithm + - [#8338](https://svn.boost.org/trac/boost/ticket/8338) Iterator range does not work with pointer to array + as iterator + - [#8453](https://svn.boost.org/trac/boost/ticket/8453) Incorrect configuration macro BOOST\_NO\_PARTIAL\_TEMPLATE\_SPECIALIZATION +* [Signals](/libs/signals/): + + + No longer actively maintained, so it is deprecated. Use [Signals2](/libs/signals2) + for new development. +* [Thread](/libs/thread/): + + + *New Features:* + + - [#7285](http://svn.boost.org/trac/boost/ticket/7285) + C++11 compliance: Allow to pass movable arguments for call\_once. + - [#7445](http://svn.boost.org/trac/boost/ticket/7445) + Async: Add future<>.then + - [#7449](http://svn.boost.org/trac/boost/ticket/7449) + Synchro: Add a synchronized value class + + *Fixed Bugs:* + + - [#4878](http://svn.boost.org/trac/boost/ticket/4878) + MinGW 4.5.0 undefined reference to bool interruptible\_wait(detail::win32::handle + handle\_to\_wait\_for,detail::t imeout target\_time). + - [#4882](http://svn.boost.org/trac/boost/ticket/4882) + Win32 shared\_mutex does not handle timeouts correctly. + - [#5752](http://svn.boost.org/trac/boost/ticket/5752) + boost::call\_once() is unreliable on some platforms + - [#6652](http://svn.boost.org/trac/boost/ticket/6652) + Boost.Thread shared\_mutex.hpp:50:99: warning: dereferencing + type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] + - [#6843](http://svn.boost.org/trac/boost/ticket/6843) + [Intel C++] Compile Errors with '#include ' + - [#6966](http://svn.boost.org/trac/boost/ticket/6966) + future boost::future\_category inconsistent dll linkage + - [#7720](http://svn.boost.org/trac/boost/ticket/7720) + exception lock\_error while intensive locking/unlocking of mutex + - [#7755](http://svn.boost.org/trac/boost/ticket/7755) + Thread: deadlock with shared\_mutex on Windows + - [#7980](http://svn.boost.org/trac/boost/ticket/7980) + Build error: msvc-11.0 and BOOST\_THREAD\_DONT\_USE\_DATETIME + - [#7982](http://svn.boost.org/trac/boost/ticket/7982) + pthread\_delay\_np() parm compile error on AIX + - [#8027](http://svn.boost.org/trac/boost/ticket/8027) + thread library fails to compile with Visual Studio 2003 + - [#8070](http://svn.boost.org/trac/boost/ticket/8070) + prefer GetTickCount64 over GetTickCount + - [#8136](http://svn.boost.org/trac/boost/ticket/8136) + boost::this\_thread::sleep\_for() sleeps longer than it should + in Windows + - [#8212](http://svn.boost.org/trac/boost/ticket/8212) + Boost thread compilation error on Solaris 10 + - [#8237](http://svn.boost.org/trac/boost/ticket/8237) + fix documentation for 'thread\_group' + - [#8239](http://svn.boost.org/trac/boost/ticket/8239) + barrier::wait() not marked as interruption\_point + - [#8323](http://svn.boost.org/trac/boost/ticket/8323) + boost::thread::try\_join\_for/try\_join\_until may block indefinitely + due to a combination of problems in Boost.Thread and Boost.Chrono + - [#8337](http://svn.boost.org/trac/boost/ticket/8337) + The internal representation of "std::string(this->code()->message())" + escapes, but is destroyed when it exits scope. + - [#8371](http://svn.boost.org/trac/boost/ticket/8371) + C++11 once\_flag enabled when constexpr is not available + - [#8443](http://svn.boost.org/trac/boost/ticket/8443) + Header file inclusion order may cause crashes + - [#8451](http://svn.boost.org/trac/boost/ticket/8451) + Missing documented function 'boost::scoped\_thread::joinable' + - [#8530](http://svn.boost.org/trac/boost/ticket/8530) + [Coverity] Unused variable thread\_handle, uninitialized variable + cond\_mutex in thread/pthread/thread\_data.hpp + - [#8596](http://svn.boost.org/trac/boost/ticket/8596) + With C++0x enabled, boost::packaged\_task stores a reference + to function objects, instead of a copy. +* [Type Traits](/libs/type_traits/): + + + New type traits implemented [#8189](https://svn.boost.org/trac/boost/ticket/8189): + + - is\_nothrow\_move\_constructible + - is\_nothrow\_move\_assignable + - has\_trivial\_move\_assign + - has\_trivial\_move\_constructor +* [uBLAS](/libs/numeric/ublas): + + + [#6511](https://svn.boost.org/trac/boost/ticket/6511) Division by scalar should use `enable\_if<>` + + [#7297](https://svn.boost.org/trac/boost/ticket/7297) Make the free functions 'num\_columns' and 'num\_rows' support + the uBLAS traits system and better work with expression types + + [#6010](https://svn.boost.org/trac/boost/ticket/6010) fixed linkage problems in assignment.hpp + + updated doc +* [Unordered](/libs/unordered/): + + + Some very basic `noexcept` + support. +* [Utility](/libs/utility/): + + + Fix `basic\_string\_ref::find` + ([#8067](https://svn.boost.org/trac/boost/ticket/8067)). + + Fix `string\_ref`'s + logical operators. + + Update noncopyable for C++11 ([#6578](https://svn.boost.org/trac/boost/ticket/6578)). + + Fix noncopyable compiler warning when used in DLL interface ([#6935](https://svn.boost.org/trac/boost/ticket/6935)). + + Fix using `boost::addressof` with `boost::function` + on SolarisStudio compiler ([#7079](https://svn.boost.org/trac/boost/ticket/7079)). + + Disable annoying MSVC warning about operator comma ([#7663](https://svn.boost.org/trac/boost/ticket/7663)) +* [Variant](/libs/variant/): + + + Now uses new type traits from Boost.TypeTrait to detect `noexcept` constructors and assignment + operators [#8296](https://svn.boost.org/trac/boost/ticket/8296). This shall increase performance of `boost::variant` for many types in C++11. + + Multivisitation implemented [#8459](https://svn.boost.org/trac/boost/ticket/8459). + + Documentation updated to reflect C++11 features support. +* [Wave](/libs/wave/): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [xpressive](/libs/xpressive): + + + Remove unused variables, fixes [#8039](https://svn.boost.org/trac/boost/ticket/8039) + + Avoid name clash with macro `None` + in glx.h, fixes [#8204](https://svn.boost.org/trac/boost/ticket/8204) + + Silence a gcc warning, fixes [#8138](https://svn.boost.org/trac/boost/ticket/8138) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3 + + GCC, C++98 mode: 4.7.3 + + GCC, C++11 mode: 4.7.2, 4.7.3, 4.8.0 + + Clang: 3.0, 3.1, 3.2 + + Clang, C++11 mode: 3.2 +* OS X: + + + GCC: 4.2 + + Apple Clang: 4.2.1 + + Apple Clang, C++11 mode: 4.2.1 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0 + + Visual C++: 8.0, 9.0, 10.0, 11.0 +* FreeBSD: + + + GCC: 4.2.1 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, from Subversion + + Clang, with libc++: 3.2 + + GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3 + + GCC, C++98 mode: 4.7.3 + + GCC, C++11 mode: 4.7.3, 4.8.0 +* OS X: + + + Apple Clang: 4.2.1 + + Apple Clang, C++11 mode: 4.2.1 + + Clang: from Subversion + + Clang, C++11 mode: from Subversion + + GCC: 4.2 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0 + + Visual C++: 9.0, 10.0, 11.0 + + Visual C++, Windows Mobile 5, with STLport: 9.0 +* AIX: + + + IBM XL C/C++ Enterprise Edition: 12.1.0.1 +* FreeBSD: + + + GCC: 4.2.1 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_55_0.html b/users/history/version_1_55_0.html new file mode 100644 index 0000000..e4e2e2e --- /dev/null +++ b/users/history/version_1_55_0.html @@ -0,0 +1,736 @@ +--- +title: Version 1.55.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.55.0 + +/\*\*/ + + + + + + + +Version 1.55.0 +============== + +Version 1.55.0 +-------------- + + +November 11th, 2013 19:50 GMT + + +[Documentation](/doc/libs/1_55_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_55\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.bz2) | +| [boost\_1\_55\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz) | +| windows | [boost\_1\_55\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.7z) | +| [boost\_1\_55\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.zip) | + + +### Other Downloads + + +* [Windows + binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.55.0/) +* [PDF + documentation](https://sourceforge.net/projects/boost/files/boost-docs/1.55.0/) (only for BoostBook based documentation). + +### News + Support was removed from [Config](/libs/config/) for some + very old versions of compilers. The new minimum requirements are: + + + +* Digitial Mars 8.41 +* GCC 3.3 +* Intel 6.0 +* Visual C++ 7.1 +**Note:** This is just the mininimum requirements + for Config. Some Boost libraries may have higher mininimum requirements and + not support all platforms or compilers. + + Other compilers are currently unchanged, but we are considering removing support + for some other old compilers. **Candidates** for + removal are: + + + +* Metroworks C++ (i.e. codewarrior) +* SunPro 5.7 and earlier +* Borland C++ Builder 2006 (5.82) and earlier + If you're using any of these, please let us know on the mailing lists. We will + take into account any feedback received before making a decision. + + +### Known Bugs with Visual Studio + 2013/Visual C++ 12 + Visual Studio 2013 was released quite late in the release process, so there + exist several unresolved issues. These include: + + + +* Serialization can't compile because of a missing include. +* Using `has\_member\_function\_callable\_with` + from Boost.Container's `allocator\_traits` + causes a compile error ([#9332](https://svn.boost.org/trac/boost/ticket/9332)). +* In libraries such as Unordered and MultiIndex, calling overloaded functions + with initializer lists can result in a compile error, with Visual C++ claiming + that the overloads are ambiguous. This is a Visual C++ bug and it isn't + clear if there's a good workaround. This won't affect code that doesn't + use initializer lists, or uses an initializer list that doesn't require + an implicit conversion (i.e. an initializer list of the container's exact + value type). +* Thread: `ex\_scoped\_thread` + compile fails ([#9333](https://svn.boost.org/trac/boost/ticket/9333)). + +### Patches + + +1. [Log patch](/patches/1_55_0/001-log_fix_dump_avx2.patch): + fixes incorrect output of the [dump](https://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/log/detailed/utilities.html#log.detailed.utilities.manipulators.dump) + manipulator, when used on AVX2-enabled CPU (e.g. Intel Haswell). + +### New Libraries + + +* [Predef](/libs/predef/): This library defines a + set of compiler, architecture, operating system, library, and other version + numbers from the information it can gather of C, C++, Objective C, and + Objective C++ predefined macros or those defined in generally available + headers, from Rene Rivera. + +### Updated Libraries + + +* [Accumulators](/libs/accumulators/): + + + [#7915](https://svn.boost.org/trac/boost/ticket/7915) Fix silly typos. + + [#8850](https://svn.boost.org/trac/boost/ticket/8850) Fix MSVC warnings. + + [#8262](https://svn.boost.org/trac/boost/ticket/8262) Rename `average` + to `fdiv`. +* [Any](/libs/any/): + + + `boost::bad\_any\_cast` exception is now visible + across modules [#8751](https://svn.boost.org/trac/boost/ticket/8751). + + Added `clear()` + member function. + + Added missing `BOOST\_NOEXCEPT`. + + Fixed issue with const rvalues [#9215](https://svn.boost.org/trac/boost/ticket/9215). +* [Asio](/libs/asio/): + + + Implemented a limited port to Windows Runtime. This support requires + that the language extensions be enabled. Due to the restricted facilities + exposed by the Windows Runtime API, the port also comes with the + following caveats: + + - The core facilities such as the `io\_service`, + `strand`, buffers, + composed operations, timers, etc., should all work as normal. + - For sockets, only client-side TCP is supported. + - Explicit binding of a client-side TCP socket is not supported. + - The `cancel()` function is not supported + for sockets. Asynchronous operations may only be cancelled + by closing the socket. + - Operations that use `null\_buffers` + are not supported. + - Only `tcp::no\_delay` and `socket\_base::keep\_alive` options are supported. + - Resolvers do not support service names, only numbers. I.e. + you must use "80" rather than "http". + - Most resolver query flags have no effect. + + Fixed a regression (introduced in Boost 1.54) where, on some platforms, + errors from `async\_connect` + were not correctly propagated through to the completion handler ([#8795](https://svn.boost.org/trac/boost/ticket/8795)). + + Fixed a Windows-specific regression (introduced in Boost 1.54) that + occurs when multiple threads are running an `io\_service`. + When the bug occurs, the result of an asynchronous operation (error + and bytes transferred) is incorrectly discarded and zero values used + instead. For TCP sockets this results in spurious end-of-file notifications + ([#8933](https://svn.boost.org/trac/boost/ticket/8933)). + + Fixed a bug in handler tracking, where it was not correctly printing + out some handler IDs ([#8808](https://svn.boost.org/trac/boost/ticket/8808)). + + Fixed the comparison used to test for successful synchronous accept + operations so that it works correctly with unsigned socket descriptors + ([#8752](https://svn.boost.org/trac/boost/ticket/8752)). + + Ensured the signal number is correctly passed to the completion handler + when starting an `async\_wait` + on a signal that is already raised ([#8738](https://svn.boost.org/trac/boost/ticket/8738)). + + Suppressed a g++ 4.8+ warning about unused typedefs ([#8980](https://svn.boost.org/trac/boost/ticket/8980)). + + Enabled the move optimisation for handlers that use the default invocation + hook ([#8624](https://svn.boost.org/trac/boost/ticket/8624)). + + Clarified that programs must not issue overlapping `async\_write\_at` operations ([#8669](https://svn.boost.org/trac/boost/ticket/8669)). + + Changed the Windows `HANDLE` + backend to treat `ERROR\_MORE\_DATA` + as a non-fatal error when returned by `GetOverlappedResult` + for a synchronous read ([#8722](https://svn.boost.org/trac/boost/ticket/8722)). + + Visual C++ language extensions use `generic` + as a keyword. Added a workaround that renames the namespace to `cpp\_generic` when those language + extensions are in effect. + + Fixed some asynchronous operations that missed out on getting `async\_result` support in Boost 1.54. + In particular, the buffered stream templates have been updated so + that they adhere to current handler patterns ([#9000](https://svn.boost.org/trac/boost/ticket/9000), [#9001](https://svn.boost.org/trac/boost/ticket/9001)). + + Enabled move support for Microsoft Visual Studio 2012 ([#8959](https://svn.boost.org/trac/boost/ticket/8959)). + + Added `use\_future` + support for Microsoft Visual Studio 2012. + + Removed a use of `std::min` + in the Windows IOCP backend to avoid a dependency on the `` header ([#8758](https://svn.boost.org/trac/boost/ticket/8758)). + + Eliminated some unnecessary handler copies. + + Fixed various minor and cosmetic issues in code and documentation + (including [#8347](https://svn.boost.org/trac/boost/ticket/8347), [#8950](https://svn.boost.org/trac/boost/ticket/8950), [#8953](https://svn.boost.org/trac/boost/ticket/8953), [#8965](https://svn.boost.org/trac/boost/ticket/8965), [#8997](https://svn.boost.org/trac/boost/ticket/8997)). +* [Atomic](/libs/atomic/): + + + Added support for 64-bit atomic operations on x86 target for GCC, + MSVC and compatible compilers. The support is enabled when it is + known at compile time that the target CPU supports required instructions. + + Added support for 128-bit atomic operations on x86-64 target for + GCC and compatible compilers. The support is enabled when it is known + at compile time that the target CPU supports required instructions. + The support can be tested for with the new `BOOST\_ATOMIC\_INT128\_LOCK\_FREE` + macro. + + Added a more efficient implementation of `atomic<>` based on GCC `\_\_atomic\*` + intrinsics available since GCC 4.7. + + Added support for more ARM v7 CPUs, improved detection of Thumb 2. + + Added support for x32 (i.e. 64-bit x86 with 32-bit pointers) target + on GCC and compatible compilers. + + Removed dependency on Boost.Thread. + + Internal lock pool now includes proper padding and alignment to avoid + false sharing. + + Fixed compilation with Intel compiler on Windows. Removed internal + macro duplication when compiled on Windows. + + Some code refactoring to use C++11 features when available. +* [Chrono](/libs/chrono/): + + + *Fixed Bugs:* + + - [#7868](http://svn.boost.org/trac/boost/ticket/7868) + `chrono\_io` parses + time incorrectly (1.53 and 1.52) + - [#9028](http://svn.boost.org/trac/boost/ticket/9028) + Typo in `boost/chrono/stopwatches/formatters/base\_formatter.hpp` + - [#9147](http://svn.boost.org/trac/boost/ticket/9147) + uninitialized `std::tm` +* [Circular Buffer](/libs/circular_buffer/): + + + Added support for rvalue references and rvalue references emulation + using Boost.Move. Values are moved only if value type has noexcept + move constructor and noexcept move assignment operator [#7888](https://svn.boost.org/trac/boost/ticket/7888). + Now Circular Buffer is usable with move-only types. + + Much better documentation. + + [#5362](http://svn.boost.org/trac/boost/ticket/5362) + circular\_buffer does not compile with `BOOST\_NO\_EXCEPTIONS`. + + [#7025](http://svn.boost.org/trac/boost/ticket/7025) + circular buffer reports warning: " type qualifiers ignored on + function return type" while compile. + + [#7950](http://svn.boost.org/trac/boost/ticket/7950) + Eliminate W4-warnings under VS2005 - warning C4913: user defined + binary operator ',' exists but no overload could convert all operands, + default built-in binary operator ',' used. +* [Config](/libs/config/): + + + **Breaking change:** Removed support + for some older compilers. The new minimum compiler versions are: + + - Digitial Mars 8.41 + - GCC 3.3 + - Intel 6.0 + - Visual C++ 7.1 + Other compilers are unchanged. +* [Container](/libs/container/): + + + Implemented SCARY + iterators. + + Fixed bugs [#8269](https://svn.boost.org/trac/boost/ticket/8269), + [#8473](https://svn.boost.org/trac/boost/ticket/8473), + [#8892](https://svn.boost.org/trac/boost/ticket/8892), + [#9009](https://svn.boost.org/trac/boost/ticket/9009), + [#9064](https://svn.boost.org/trac/boost/ticket/9064), + [#9092](https://svn.boost.org/trac/boost/ticket/9092), + [#9108](https://svn.boost.org/trac/boost/ticket/9108). +* [Context](/libs/context/): + + + [#8650](http://svn.boost.org/trac/boost/ticket/8650) + SSE2 intrinsics +* [Coroutine](/libs/coroutine/): + + + New interface (unidirectional data transfer). + + [#8782](http://svn.boost.org/trac/boost/ticket/8782) + no best alternative + + [#8801](http://svn.boost.org/trac/boost/ticket/8801) + auto-linking +* [Filesystem](/libs/filesystem/): + + + Fixed Android compilation [#8706](https://svn.boost.org/trac/boost/ticket/8706). +* [Fusion](/libs/fusion/): + + + [#8759](https://svn.boost.org/trac/boost/ticket/8759) specialization of `convert\_impl` + for `map\_tag` +* [Geometry](/libs/geometry/index.html): + + + *Additional functionality* + + - Added centroid for segment type + - Added intersects() and disjoints() for Segment-Box and Linestring-Box + - Added rtree creation using packing algorithm + - Added contains() and covers() spatial query predicates + - Added iterative queries + + *Bugfixes* + + - In some cases .back() or .clear() was called, violating the + usage of Concepts. Fixed for the reported cases + + *Solved tickets* + + - [6958](https://svn.boost.org/trac/boost/ticket/6958) + Intersection generates self-intersection. Caused by spike, + fixed + - [8364](https://svn.boost.org/trac/boost/ticket/8364) + Invalid input exception, caused by spikes in previous steps, + fixed + - [8365](https://svn.boost.org/trac/boost/ticket/8365) + Invalid input exception, caused by spikes in previous steps, + fixed + - [8969](https://svn.boost.org/trac/boost/ticket/8969) + boost::geometry::model::point single argument constructor should + be explicit + - [8825](https://svn.boost.org/trac/boost/ticket/8825) + Patch adding member variable documentation to doxygen\_xml2qbk + - [8652](https://svn.boost.org/trac/boost/ticket/8652) + Intersection fails for triangle-triangle intersection. Caused + by spike, fixed + - [9047](https://svn.boost.org/trac/boost/ticket/9047) + Boost files that include themselves (strategies/intersection.hpp), + fixed +* [Graph](/libs/graph/index.html): + + + `void` is no longer allowed + as a bundled property type (for example, in the VertexProperties + template parameters to graph types); it did not work reliably before, + but a static assertion now forbids it entirely. Use `boost::no\_property` instead. + + Added support for `finish\_edge` + visitor event point in depth-first search; the change should be backward-compatible + with visitors that do not have that member function. + + Disabled building of tests on Sun compiler. + + Multiple source vertices are supported in non-named-parameter versions + of `breadth\_first\_visit`, + `breadth\_first\_search`, + `dijkstra\_shortest\_paths`, + and `dijkstra\_shortest\_paths\_no\_init`. + This feature is not yet documented; to use it, replace the single + parameter for the source vertex in each of these functions by two + input iterators of the same type containing the source vertices to + use. + + Added Hawick circuits algorithm; contributed by Louis Dionne. + + Added edge coloring algorithm; contributed by Maciej Piechotka. + + Added min-cost max-flow algorithm; contributed by Piotr Wygocki. + + Bugs and feature requests from Trac fixed: [#5269](https://svn.boost.org/trac/boost/ticket/5269), [#8317](https://svn.boost.org/trac/boost/ticket/8317), + [#8433](https://svn.boost.org/trac/boost/ticket/8433), [#8791](https://svn.boost.org/trac/boost/ticket/8791), [#8877](https://svn.boost.org/trac/boost/ticket/8877), [#8986](https://svn.boost.org/trac/boost/ticket/8986), [#9012](https://svn.boost.org/trac/boost/ticket/9012), [#9080](https://svn.boost.org/trac/boost/ticket/9080). +* [Hash](/libs/functional/hash/): + + + Simplify a SFINAE check so that it will hopefully work on Sun 5.9 + ([#8822](https://svn.boost.org/trac/boost/ticket/8822)). + + Suppress Visual C++ infinite loop warning ([#8568](https://svn.boost.org/trac/boost/ticket/8568)). +* [Interprocess](/libs/interprocess/): + + + Fixed bugs [#7156](https://svn.boost.org/trac/boost/ticket/7156), + [#7164](https://svn.boost.org/trac/boost/ticket/7164), + [#8277](https://svn.boost.org/trac/boost/ticket/8277), + [#8976](https://svn.boost.org/trac/boost/ticket/8976), + [#9065](https://svn.boost.org/trac/boost/ticket/9065), + [#9073](https://svn.boost.org/trac/boost/ticket/9073), + [#9008](https://svn.boost.org/trac/boost/ticket/9008). +* [Intrusive](/libs/intrusive/): + + + **Source breaking**: Deprecated `xxx\_dont\_splay` functions from splay + containers. Deprecated `splay\_set\_hook` + from splay containers, use `bs\_set\_hook` + instead. Both will be removed in Boost 1.56. + + **ABI breaking**: Hash containers' end + iterator was implemented pointing to one-past the end of the bucket + array (see [#8698](https://svn.boost.org/trac/boost/ticket/8698)) + causing severe bugs when values to be inserted where allocated next + to the bucket array. End iterator implementation was changed to point + to the beginning of the bucket array. + + Big refactoring in order to reduce template and debug symbol bloat. + Test object files have been slashed to half in MSVC compilers in + Debug mode. Toolchains without Identical COMDAT Folding (ICF) should + notice size improvements. + + Implemented SCARY iterators. +* [Lexical cast](/libs/conversion/lexical_cast.htm): + + + `std::bad\_alloc` exceptions are now are + not converted to `boost::bad\_lexical\_cast` + [#8966](https://svn.boost.org/trac/boost/ticket/8966). + + Added static assert that checks for `std::numeric\_limits` + specializations if they are required for conversion. Use `BOOST\_HAS\_INT128` for detecting + 128 bit integers support [#8790](https://svn.boost.org/trac/boost/ticket/8790). + + Documentation improved and more usage examples added. +* [Log](/libs/log/): + + + General changes: + + - Added a new configuration macro `BOOST\_LOG\_WITHOUT\_DEFAULT\_FACTORIES`. + By defining this macro the user can disable compilation of + the default filter and formatter factories used by settings + parsers. This can substantially reduce binary sizes while still + retaining support for settings parsers. + - Rewritten some of the parsers to reduce the compiled binary + size. The rewritten parsers are more robust in detecting ambiguous + and incorrect input. + - The following headers are deprecated: `boost/log/utility/intrusive\_ref\_counter.hpp`, + `boost/log/utility/explicit\_operator\_bool.hpp`, `boost/log/utility/empty\_deleter.hpp`. + These headers will be removed in future releases. The contents + of these headers were moved to other libraries. + + Bug fixes: + + - Fixed `timer` + attribute generating incorrect time readings on Windows on + heavy thread contention when `QueryPerformanceCounter` + API was used. + - Fixed a bug in the filter parser that prevented using parsed + filters with some attributes. + - Fixed thread id formatting discrepancies between the default + sink and formatters. + - Closed tickets: [#8815](https://svn.boost.org/trac/boost/ticket/8815), [#8819](https://svn.boost.org/trac/boost/ticket/8819), [#8915](https://svn.boost.org/trac/boost/ticket/8915), [#8917](https://svn.boost.org/trac/boost/ticket/8917), + [#9139](https://svn.boost.org/trac/boost/ticket/9139), [#9140](https://svn.boost.org/trac/boost/ticket/9140), [#9153](https://svn.boost.org/trac/boost/ticket/9153), [#9155](https://svn.boost.org/trac/boost/ticket/9155). + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + Suppress numerous warnings (mostly from GCC-4.8 and MSVC) [#8384](https://svn.boost.org/trac/boost/ticket/8384), + [#8855](https://svn.boost.org/trac/boost/ticket/8855), + [#9107](https://svn.boost.org/trac/boost/ticket/9107), + [#9109](https://svn.boost.org/trac/boost/ticket/9109).. + + Fixed PGI compilation issue [#8333](https://svn.boost.org/trac/boost/ticket/8333). + + Fixed PGI constant value initialization issue that caused erf to + generate incorrect results [#8621](https://svn.boost.org/trac/boost/ticket/8621). + + Prevent macro expansion of some C99 macros that are also C++ functions + [#8732](https://svn.boost.org/trac/boost/ticket/8732) + and [#8733](https://svn.boost.org/trac/boost/ticket/8733).. + + Fixed Student's T distribution to behave correctly with huge degrees + of freedom (larger than the largest representable integer) [#8837](https://svn.boost.org/trac/boost/ticket/8837). + + Make some core functions usable with `long + double` even when the platform + has no standard library `long + double` support [#8940](https://svn.boost.org/trac/boost/ticket/8940). + + Fix error handling of distributions to catch invalid scale and location + parameters when the random variable is infinite [#9042](https://svn.boost.org/trac/boost/ticket/9042) + and [#9126](https://svn.boost.org/trac/boost/ticket/9126). + + Add workaround for broken in Intel C++ 14 [#9087](https://svn.boost.org/trac/boost/ticket/9087). + + Improve consistency of argument reduction in the elliptic integrals + [#9104](https://svn.boost.org/trac/boost/ticket/9104). + + Fix bug in inverse incomplete beta that results in cancellation errors + when the beta function is really an arcsine or Student's T distribution. + + Fix issue in Bessel I and K function continued fractions that causes + spurious over/underflow. + + Add improvement to non-central chi squared distribution quantile + due to Thomas Luu. +* [Move](/libs/move/): + + + Fixed bugs [#7952](https://svn.boost.org/trac/boost/ticket/7952), + [#8764](https://svn.boost.org/trac/boost/ticket/8764), + [#8765](https://svn.boost.org/trac/boost/ticket/8765), + [#8842](https://svn.boost.org/trac/boost/ticket/8842), + [#8979](https://svn.boost.org/trac/boost/ticket/8979). +* [Meta State Machine](/libs/msm/): + + + New feature: interrupt states now support a sequence of events to + end the interruption. + + Fixed Trac [#8686](https://svn.boost.org/trac/boost/ticket/8686). +* [Multiprecision](/libs/multiprecision/): + + + Added support for Boost.Serialization. + + Suppressed some GCC warnings. See [8872](https://svn.boost.org/trac/boost/ticket/8872). + + Fixed bug in pow for large integer arguments. See [8809](https://svn.boost.org/trac/boost/ticket/8809). + + Fixed bug in pow for calculation of 0[super N]. See [8798](https://svn.boost.org/trac/boost/ticket/8798). + + Fixed bug in fixed precision cpp\_int IO code that causes conversion + to string to fail when the bit count is very small (less than CHAR\_BIT). + See [8745](https://svn.boost.org/trac/boost/ticket/8745). + + Fixed bug in cpp\_int that causes left shift to fail when a fixed + precision type would overflow. See [8741](https://svn.boost.org/trac/boost/ticket/8741). + + Fixed some cosmetic warnings from cpp\_int. See [8748](https://svn.boost.org/trac/boost/ticket/8748). + + Fixed calls to functions which are required to be macros in C99. + See [8732](https://svn.boost.org/trac/boost/ticket/8732). + + Fixed bug that causes construction from INT\_MIN, LONG\_MIN etc to + fail in cpp\_int. See [8711](https://svn.boost.org/trac/boost/ticket/8711). +* [Multi-index Containers](/libs/multi_index/index.html): + + + Boost.MultiIndex has been brought to a higher level of compliance + with C++11. + + - `multi\_index\_container` + is now efficiently movable. + - Initializer lists supported. + - Emplace functions provided. + - Non-copyable elements (such as `std::unique\_ptr`) supported. This includes + insertion of a range [`first`,`last`) where the iterators point + to a type that is convertible to that of the element: no copy + construction happens in the process. + - Random access indices provide `shrink\_to\_fit()`. + Refer to the [compiler + specifics](/libs/multi_index/doc/compiler_specifics.html) section for limitations on pre-C++11 compilers. + + The following classes are deprecated: + + - [`member\_offset`](/libs/multi_index/doc/reference/key_extraction.html#member_offset), + - [`const\_mem\_fun\_explicit`](/libs/multi_index/doc/reference/key_extraction.html#const_mem_fun_explicit), + - [`mem\_fun\_explicit`](/libs/multi_index/doc/reference/key_extraction.html#const_mem_fun_explicit), + - [`composite\_key\_result\_equal\_to`](/libs/multi_index/doc/reference/key_extraction.html#composite_key_result_equal_to), + - [`composite\_key\_result\_less`](/libs/multi_index/doc/reference/key_extraction.html#composite_key_result_less), + - [`composite\_key\_result\_greater`](/libs/multi_index/doc/reference/key_extraction.html#composite_key_result_greater), + - [`composite\_key\_result\_hash`](/libs/multi_index/doc/reference/key_extraction.html#composite_key_result_hash). + + Maintenance fixes. +* [MPI](/libs/mpi/): + + + Replaced calls to deprecated MPI functions + + Added support for multi-threaded initialization + + Added in-place collectives +* [Phoenix](/libs/phoenix/): + + + [#9049](https://svn.boost.org/trac/boost/ticket/9049) `phoenix::function` + constructor is constexpr. +* [Polygon](/libs/polygon/): + + + Updated CGAL part of the Voronoi benchmark with patches from Sebastien + Loriot. Updated documentation. + + Added polygon decomposition capability to polygon\_90\_set\_data container + (patch from Intel). Updated documentation. + + Bugs fixed from Trac: [#8197](https://svn.boost.org/trac/boost/ticket/8197). +* [PropertyMap](/libs/property_map/index.html): + + + dynamic\_properties objects can now be built by non-destructively + chaining `.property(name, pm)` calls. Example: + + + ``` + boost::dynamic\_properties() + .property("color", color\_map) + .property("pos", position\_map) + + ``` + + The use of raw pointers as property maps is deprecated; it often + failed on Visual Studio in the past. This usage has been removed + from all tests and examples in Boost.Graph. The replacement to use + for vertex properties in graphs (the most common use for this feature) + is: + + + ``` + boost::make\_iterator\_property\_map( + , + get(boost::vertex\_index, )) + + ``` + + + (Note: the lack of namespace qualification on get() in this code + is necessary for generic code). Outside a graph context, the closest + equivalent is: + + + ``` + boost::make\_iterator\_property\_map( + , + boost::typed\_identity\_property\_map()) + + ``` + + + There are commented-out static assertions on lines 151 and 159 of + `` that can be un-commented to find + deprecated uses of pointers in user code. +* [Rational](/libs/rational): + + + Added `lowest` and + `max\_digits10`, members + of std::numeric\_limits added in C++11, to the unit-test code. Needed + since Boost.Test refers to one of them when compiled in C++11 mode. + + Changed initialization of some internal variables to something that + cannot be a narrowing conversion, which fixes issue [#5855](https://svn.boost.org/trac/boost/ticket/5855). Needed + since narrowing conversions are an error in C++11. +* [SmartPtr](/libs/smart_ptr/index.html): + + + Added `boost/smart\_ptr/intrusive\_ref\_counter.hpp` header, extracted from Boost.Log. + The header implements a mixin base class that adds support for `intrusive\_ptr` to user's classes. +* [Thread](/libs/thread/): + + + *New Features:* + + - [#8519](http://svn.boost.org/trac/boost/ticket/8519) + Synchro: Update class barrier with a completion function. + - [#8515](http://svn.boost.org/trac/boost/ticket/8515) + Async: Add `shared\_future::then`. + - [#8519](http://svn.boost.org/trac/boost/ticket/8519) + Synchro: Update class barrier with a completion function + - [#8615](http://svn.boost.org/trac/boost/ticket/8615) + Async: Replace make\_future/make\_shared\_future by make\_ready\_future. + - [#8627](http://svn.boost.org/trac/boost/ticket/8627) + Async: Add future<>::unwrap and unwrapping constructor. + - [#8677](http://svn.boost.org/trac/boost/ticket/8677) + Async: Add future<>::get\_or. + - [#8678](http://svn.boost.org/trac/boost/ticket/8678) + Async: Add future<>::fallback\_to. + - [#8891](http://svn.boost.org/trac/boost/ticket/8891) + upgrade\_to\_unique\_lock: missing mutex() function. + - [#8955](http://svn.boost.org/trac/boost/ticket/8955) + Request for more efficient way to get exception\_ptr from future. + + *Fixed Bugs:* + + - [#7461](http://svn.boost.org/trac/boost/ticket/7461) + detail::win32::ReleaseSemaphore may be called with count\_to\_release + equal to 0 + - [#8070](http://svn.boost.org/trac/boost/ticket/8070) + prefer GetTickCount64 over GetTickCount + - [#8768](http://svn.boost.org/trac/boost/ticket/8768) + win32 condition\_variable::wait\_until infinite wait in rare + cases. + - [#8817](http://svn.boost.org/trac/boost/ticket/8817) + Boost Thread Windows CE \_createthreadex handling breaks mingw + w64. + - [#8943](http://svn.boost.org/trac/boost/ticket/8943) + Failed to compile code using boost::call\_once with Intel C++ + Composer XE 2013 on Windows. + - [#8931](http://svn.boost.org/trac/boost/ticket/8931) + Typos in external\_locking reference. + - [#9029](http://svn.boost.org/trac/boost/ticket/9029) + Misprint in documentation. + - [#9037](http://svn.boost.org/trac/boost/ticket/9037) + gcc -Wshadow gives warnings in condition\_variable{,\_fwd}.hpp. + - [#9041](http://svn.boost.org/trac/boost/ticket/9041) + Boost.Thread DSO's may need to link with Boost.Atomic. + - [#9048](http://svn.boost.org/trac/boost/ticket/9048) + boost::scoped\_thread useless ctor with variadic template arguments. + - [#9079](http://svn.boost.org/trac/boost/ticket/9079) + Condition variable will wait forever for some timepoint values + (Win). +* [Timer](/libs/timer/): + + + Fixed compilation on Intel compiler [#8956](https://svn.boost.org/trac/boost/ticket/8956). +* [Type Traits](/libs/type_traits/): + + + Added `is\_copy\_contructible` + trait [#8802](https://svn.boost.org/trac/boost/ticket/8802). +* [Unordered](/libs/unordered/): + + + Avoid some warnings ([#8851](https://svn.boost.org/trac/boost/ticket/8851), [#8874](https://svn.boost.org/trac/boost/ticket/8874)). + + Avoid exposing some detail functions via. ADL on the iterators. + + Work around variadic parameter bug in Visual Studio 2013. The compiler + still has problems with initializer lists, but it might not be possible + to work around those. +* [Utility](/libs/utility/index.html): + + + `boost::result\_of` can be set to use TR1 + protocol by default and fall back to `decltype` + if the function object does not support it (like C++11 lambda functions, + for example). Define `BOOST\_RESULT\_OF\_USE\_TR1\_WITH\_DECLTYPE\_FALLBACK` + configuration macro to enable this mode. + + Improved support for C++11 in the `boost::base\_from\_member` + class template. The class implements perfect forwarding for the constructor + arguments, if the compiler supports rvalue references, variadic templates + and function template default arguments. + + Added `boost/utility/explicit\_operator\_bool.hpp` and `boost/utility/empty\_deleter.hpp` + headers, which were extracted from Boost.Log. The headers implement + utilities for defining explicit conversion operators to `bool` and a deleter function object + that does nothing, respectively. +* [Variant](/libs/variant/): + + + Fixed compilation of constructor and assignment operator with const + rvalues input parameters [#8988](https://svn.boost.org/trac/boost/ticket/8988). + + Fixed compilation of move assignment operator for situations when + one of the variant template classes has nothrow copy constructor + and throwing move constructor [#8772](https://svn.boost.org/trac/boost/ticket/8772). + + Fix compilation on exception-disabled environments [#8717](https://svn.boost.org/trac/boost/ticket/8717). + + Fix unreachable code warnings [#8665](https://svn.boost.org/trac/boost/ticket/8665). + + Removed duplicate code [#7601](https://svn.boost.org/trac/boost/ticket/7601). +* [Wave](/libs/wave/): + + + See the [Changelog](/libs/wave/ChangeLog) for details. +* [xpressive](/libs/xpressive): + + + [#8843](https://svn.boost.org/trac/boost/ticket/8843) throw instead of assert at incomplete charset + + [#8880](https://svn.boost.org/trac/boost/ticket/8880) remove unused local typedef + + [#8882](https://svn.boost.org/trac/boost/ticket/8882) use RAII instead of try/catch in sequence\_stack.hpp + + [#8474](https://svn.boost.org/trac/boost/ticket/8474) make xpressive play nice with clang's -Wimplicit-fallthrough + diagnostic + +### Updated Tools + + +* [Quickbook](/tools/quickbook): + + + Quickbook 1.6 finalized, see the [Quickbook + documentation for details](/doc/html/quickbook/versions.html#language_versions.1_6). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.3, 3.2, 3.1, 3.0 + + Clang, C++11, libc++: 3.4, 3.3 + + GCC: 4.8.1, 4.7.3, 4.6.3, 4.5.3, 4.4.7 + + GCC, C++11: 4.8.1 + + GCC, C++98: 4.8.1 +* OS X: + + + GCC: 4.2 + + Apple Clang: 5.0 + + Apple Clang, C++11: 5.0 +* Windows: + + + GCC, mingw: 4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7 + + Visual C++: 11.0, 10.0, 9.0 + Boost's additional test compilers include: + + + +* OS X: + + + Apple Clang: 5.0 + + Apple Clang, C++11: 5.0 + + Clang: trunk + + Clang, C++11: trunk + + GCC: 4.2.1 +* Linux: + + + Clang: 3.3, 3.2, 3.1, 3.0, trunk + + Clang, C++11: 3.4 + + Clang, C++11, libc++: 3.4, 3.3 + + GCC: 4.9.0 (experimental), 4.8.1, 4.7.3, 4.6.4, 4.5.3, 4.4.7 + + GCC, C++11: 4.8.1 + + GCC, C++98: 4.8.1 + + Intel: 13.0.1, 12.1.6 +* Windows: + + + GCC, mingw: 4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7 + + Visual C++: 11.0, 10.0, 9.0 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_56_0.html b/users/history/version_1_56_0.html new file mode 100644 index 0000000..7829f96 --- /dev/null +++ b/users/history/version_1_56_0.html @@ -0,0 +1,940 @@ +--- +title: Version 1.56.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.56.0 + +/\*\*/ + + + + + + + +Version 1.56.0 +============== + +Version 1.56.0 +-------------- + + +August 7th, 2014 16:08 GMT + + +[Documentation](/doc/libs/1_56_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_56\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.tar.bz2) | +| [boost\_1\_56\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.tar.gz) | +| windows | [boost\_1\_56\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.7z) | +| [boost\_1\_56\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.zip) | + + +### Other Downloads + + +* [Windows + binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.56.0/) + +### Modularization + Boost version control has migrated to a system using git submodules. This shouldn't + make too much of a difference to users, although the directory structure is + now a bit different. + + Parts of some libraries have been moved into different modules, and several + new modules have been extracted from existing code. All header paths should + remain the same. The new modules are: + + + +* [Assert](/libs/assert/): + Customizable assert macros. + Maintained by Peter Dimov. +* [Core](/libs/core/): + Core utilities used by other + libraries, with minimal dependencies. Maintained by Peter Dimov, Glen Fernandes + and Andrey Semashev. +* [Lexical\_Cast](/libs/lexical_cast/): + General literal + text conversions, such as an int represented a string, or vice-versa, from + Kevlin Henney. +* [Throw\_Exception](/libs/throw_exception/): + A common + infrastructure for throwing exceptions from Boost libraries, from Emil + Dotchevski. +* Winapi: + Windows API declarations without , for internal + Boost use. + +### New Libraries + + +* [Align](/libs/align/): + Memory alignment functions, + allocators, and adaptors, from Glen Fernandes. +* [Type\_Index](/libs/type_index/): + Runtime/Compile + time copyable type info, from Antony Polukhin. + +### Updated Libraries + + +* [Acumulators](/libs/accumulators/): + + + New accumulators `rolling\_variance` + and `rolling\_moment` +* [Any](/libs/any/): + + + Fixed rvalue references related issues ([#9215](https://svn.boost.org/trac/boost/ticket/9215), [#9462](https://svn.boost.org/trac/boost/ticket/9462)). + + Dropped support of antique compilers. +* [Asio](/libs/asio/): + + + Fixed `asio::spawn()` + to work correctly with new Boost.Coroutine interface ([#9442](https://svn.boost.org/trac/boost/ticket/9442), + [#9928](https://svn.boost.org/trac/boost/ticket/9928)). + + Ensured that incomplete `asio::spawn()` coroutines are correctly unwound + when cleaned up by the `io\_service` + destructor ([#9731](https://svn.boost.org/trac/boost/ticket/9731)). + + Fixed delegation of continuation hook for handlers produced by `io\_service::wrap()` + and `strand::wrap()` + ([#9741](https://svn.boost.org/trac/boost/ticket/9741)). + + Changed the Windows I/O completion port backend to use `ConnectEx`, if available, for connection-oriented + IP sockets. + + Changed the `io\_service` + backend for non-Windows (and non-IOCP Windows) platforms to use a + single condition variable per `io\_service` + instance. This addresses a potential race condition when `run\_one()` + is used from multiple threads. + + Prevented integer overflow when computing timeouts based on some + `boost::chrono` and `std::chrono` + clocks ([#9662](https://svn.boost.org/trac/boost/ticket/9662), [#9778](https://svn.boost.org/trac/boost/ticket/9778)). + + Made further changes to `EV\_CLEAR` + handling in the kqueue backend, to address other cases where the + `close()` + system call may hang on Mac OS X. + + Fixed infinite recursion in implementation of `resolver\_query\_base::flags::operator~` ([#9548](https://svn.boost.org/trac/boost/ticket/9548)). + + Made the `select` reactor + more efficient on Windows for large numbers of sockets ([#9528](https://svn.boost.org/trac/boost/ticket/9528)). + + Fixed a Windows-specific type-aliasing issue reported by gcc + ([#9550](https://svn.boost.org/trac/boost/ticket/9550)). + + Prevented execution of compile-time-only buffer test to avoid triggering + an address sanitiser warning ([#8295](https://svn.boost.org/trac/boost/ticket/8295)). + + Disabled the `GetQueuedCompletionStatus` + timeout workaround on recent versions of Windows. + + Added support for string-based scope IDs when using link-local multicast + addresses. + + Changed IPv6 multicast group join to use the address's scope ID as + the interface, if an interface is not explicitly specified. + + Fixed multicast test failure on Mac OS X and the BSDs by using a + link-local multicast address. + + Worked around a gcc problem to do with anonymous + enums ([#10042](https://svn.boost.org/trac/boost/ticket/10042)). + + Reverted the Windows `HANDLE` + backend change to ignore `ERROR\_MORE\_DATA`. + Instead, the error will be propagated as with any other (i.e. in + an `error\_code` or + thrown as a `system\_error`), + and the number of bytes transferred will be returned. For code that + needs to handle partial messages, the `error\_code` + overload should be used ([#10034](https://svn.boost.org/trac/boost/ticket/10034)). + + Fixed an off-by-one error in the `signal\_set` + implementation's signal number check ([#9324](https://svn.boost.org/trac/boost/ticket/9324)). + + Changed to use SSE2 intrinsics rather than inline assembly, to allow + the Cray compiler to work. + + Stopped using certain Winsock functions that are marked as deprecated + in the latest Visual C++ and Windows SDK. + + Added a workaround for building the unit tests with gcc + on AIX. + + Various minor documentation improvements ([#8295](https://svn.boost.org/trac/boost/ticket/8295), [#9605](https://svn.boost.org/trac/boost/ticket/9605), [#9771](https://svn.boost.org/trac/boost/ticket/9771)). +* [Assign](/libs/assign/): + + + Resolve some C++11 ambiguities ([#3073](https://svn.boost.org/trac/boost/ticket/3073)). +* [Atomic](/libs/atomic/): + + + The library has been redesigned. Besides internal refactoring, various + bugs were fixed, including incorrect values of feature test macros + and integer overflow handling. + + Changed values of the `memory\_order` + enumeration. The concrete values are not part of the interface, but + this change may potentially break ABI, if the enum is used in user's + interfaces. + + Implemented support for 128-bit atomic operations on Windows x64 + with MSVC. The library assumes presence of the `cmpxchg16b` + instruction in the target CPUs. Some early AMD CPUs don't support + this instruction. To target those define the `BOOST\_ATOMIC\_NO\_CMPXCHG16B` + macro. + + Implemented experimental support for Windows ARM target with MSVC. + + Implemented experimental support for DEC Alpha target with GCC. + + Improved support for ARMv6 and later with GCC. Implemented all atomic + operations as assembler blocks instead of CAS-based loops. 64-bit + operations are supported with ARMv7. + + Implemented optional support for the `BOOST\_ATOMIC\_FLAG\_INIT` + macro and static initialization of `atomic\_flag`. + ([#8158](https://svn.boost.org/trac/boost/ticket/8158)) + + Fixed compilation for SPARCv9 target. ([#9446](https://svn.boost.org/trac/boost/ticket/9446)) + + Fixed compilation for PowerPC target. ([#9447](https://svn.boost.org/trac/boost/ticket/9447)) + + Fixed several compatibility problems with Clang on x86 and x86-64. + ([#9610](https://svn.boost.org/trac/boost/ticket/9610), [#9842](https://svn.boost.org/trac/boost/ticket/9842)) + + Removed specialized code for Windows on IA64 platform. +* [Circular Buffer](/libs/circular_buffer/): + + + [#9970](https://svn.boost.org/trac/boost/ticket/9970),[#9334](https://svn.boost.org/trac/boost/ticket/9334) Support for the C++11 allocator model. + + Dropped support of antique compilers. +* [Concept Check](/libs/concept_check/): + + + Fewer warnings (includes [#5012](https://svn.boost.org/trac/boost/ticket/5012)). +* [Container](/libs/container/): + + + Added DlMalloc-based Extended Allocators. + + Improved configurability of tree-based ordered associative containers. + AVL, Scapegoat and Splay trees are now available to implement `set`, `multiset`, + `map` and `multimap`. + + Fixed bugs: + + - [#9338: + *"VS2005 compiler errors in swap() definition + after including container/memory\_util.hpp"*](https://svn.boost.org/trac/boost/ticket/9338). + - [#9637: + *"Boost.Container vector::resize() performance + issue"*](https://svn.boost.org/trac/boost/ticket/9637). + - [#9648: + *"string construction optimization - char\_traits::copy + could be used ..."*](https://svn.boost.org/trac/boost/ticket/9648). + - [#9801: + *"I can no longer create and iterator\_range from + a stable\_vector"*](https://svn.boost.org/trac/boost/ticket/9801). + - [#9915: + *"Documentation issues regarding vector constructors + and resize methods - value/default initialization"*](https://svn.boost.org/trac/boost/ticket/9915). + - [#9916: + *"Allocator propagation incorrect in the assignment + operator of most"*](https://svn.boost.org/trac/boost/ticket/9916). + - [#9931: + *"flat\_map::insert(ordered\_unique\_range\_t...) + fails with move\_iterators"*](https://svn.boost.org/trac/boost/ticket/9931). + - [#9955: + *"Using memcpy with overlapped buffers in vector"*](https://svn.boost.org/trac/boost/ticket/9955). +* [Context](/libs/context/): + + + fcontext\_t is opaque pointer to context-data + + changed signature of make\_fcontext() + + [#8826](https://svn.boost.org/trac/boost/ticket/8826) no executable stack + + [#9437](https://svn.boost.org/trac/boost/ticket/9437) catch exceptions on iOS and Windows Phone 8 + + [#9445](https://svn.boost.org/trac/boost/ticket/9445) support for x32 ABIs + + [#9522](https://svn.boost.org/trac/boost/ticket/9522) support for powerpc\_64le + + [#9743](https://svn.boost.org/trac/boost/ticket/9743) bugfix for powerpc\_64 le/be + + [#9774](https://svn.boost.org/trac/boost/ticket/9774) bugfix for x86 on Mac OS X + clang +* [Coroutine](/libs/coroutine/): + + + support of symmetric coroutines + + [#9355](https://svn.boost.org/trac/boost/ticket/9355) fix race condition in protected\_stack\_allocator + + [#9551](https://svn.boost.org/trac/boost/ticket/9551) list of supported architectures + + [#9734](https://svn.boost.org/trac/boost/ticket/9734) wrong check of mmap() return value + + [#9735](https://svn.boost.org/trac/boost/ticket/9735) no memset() for protected\_stack\_allocator + + [#9760](https://svn.boost.org/trac/boost/ticket/9760) coroutine iterator need const operator== + + [#10070](https://svn.boost.org/trac/boost/ticket/10070) mmap() return value + + [#10157](https://svn.boost.org/trac/boost/ticket/10157) file descriptor not required in protected\_stack\_allocator +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Support for C++11 move constructors + + Warning fixes on MSVC 2013 + + Support for C++11 minimal allocators + + Add noexcept specifications +* [Chrono](/libs/chrono/): + + + [#6918](http://svn.boost.org/trac/boost/ticket/6918) + Boost Chrono compilation failure on HP uX due to undefined pthread\_getcpuclockid + + [#8006](http://svn.boost.org/trac/boost/ticket/8006) + Boost::Chrono Assertion at startup - steady\_clock::now() - Windows + + [#9337](http://svn.boost.org/trac/boost/ticket/9337) + chrono::process\_cpu\_clock time points wrong by factor 1000 on Linux + + [#9342](http://svn.boost.org/trac/boost/ticket/9342) + Regression on process\_cpu\_clock::timepoint io on V2 + + [#9419](http://svn.boost.org/trac/boost/ticket/9419) + boost::chrono::floor()/round() and negative durations is wrong + + [#9698](http://svn.boost.org/trac/boost/ticket/9698) + boost::chrono::thread\_clock not declared in OSX + + [#9720](http://svn.boost.org/trac/boost/ticket/9720) + boost::this\_thread::sleep\_for() sometimes returns immediately on + win32 + + [#9859](http://svn.boost.org/trac/boost/ticket/9859) + Remove references to gcc-mingw + + [#9918](http://svn.boost.org/trac/boost/ticket/9918) + chrono compilation error on Solaris, funciton timegm + + [#9811](http://svn.boost.org/trac/boost/ticket/9811) + boost/boost/chrono/duration.hpp:355:56: error: call to non-constexpr + function 'static std::numeric\_limits::\_Ty std::numeric\_limits::max()' + /home/zosun/input\_service/inputservices-core-service/other/boost/boost/chrono/duration.hpp: + In static member function 'static constexpr double boost::chrono::detail::chrono\_numeric\_limits::lowest()': + + [#10069](http://svn.boost.org/trac/boost/ticket/10069) + Overflow in chrono clocks on 32bit + + [#10151](http://svn.boost.org/trac/boost/ticket/10151) + timegm function not available on QNX +* [Flyweight](/libs/flyweight/index.html): + + + In compilers with variadic template support, `boost::flyweight` now provides a perfectly forwarding + constructor to `T::T` + (previously an emulation was used). + + `flyweight` now replicates + the initializer-list constructors and assignment operators of its + underlying type. + + Fixed intermodule static initialization problem (ticket [#9553](https://svn.boost.org/trac/boost/ticket/9553)). + + Maintenance fixes. +* [Fusion](/libs/fusion/): + + + Fusion is enabled for use on GPU +* [Geometry](/libs/geometry/): + + + Additional functionality + + - New algorithm buffer for inflating/deflating geometries (buffer + itself already existed but that was only to enlarge a box) + - New algorithm remove\_spikes, algorithm to remove spikes from + a ring, polygon or multi\_polygon. + - New algorithm point\_on\_surface, generating a point lying on + the surface (interior) of the polygon + - New algorithm is\_simple, returning true if a geometry is simple + according to the OGC standard + - New algorithm is\_valid, returning true if a geometry is valid + according to the OGC standard + - New algorithm crosses for checking this spatial relation according + to the OGC standard + - The set operation algorithms (difference, intersection, sym\_difference + and union\_) now support as input pairs of pointlike or linear + geometries + - The distance and comparable\_distance algorithms now support + all pairs of geometry combinations + - The spatial relations which didn't support it (covered\_by, + touches, within, etc.) now support as input linear and/or areal + geometries + - The support for boost::variants as input geometries in various + algorithms + - The rtree support for indexing segments + - The rtree nearest() predicate support for arbitrary geometries + + Solved tickets + + - [8310](https://svn.boost.org/trac/boost/ticket/8310) + Wrong results with overlapping polygons (fixed using point\_on\_surface + for disjoint) + - [8375](https://svn.boost.org/trac/boost/ticket/8375) + sym\_difference of non-closed polygons returns closed polygon + - [8376](https://svn.boost.org/trac/boost/ticket/8376) + difference of non-closed polygons returns closed polygon + - [9081](https://svn.boost.org/trac/boost/ticket/9081) + Booleans create self-intersecting polygons from non-self-intersecting + polygons + - [9245](https://svn.boost.org/trac/boost/ticket/9245) + Check for process errors in make\_qbk.py + - [9563](https://svn.boost.org/trac/boost/ticket/9563) + (Sym)difference not successful, fixed by rescaling to robust + type + - [9628](https://svn.boost.org/trac/boost/ticket/9628) + Wrong result of within() due to the winding strategy not working + correctly for nearly-horizontal segments + - [9871](https://svn.boost.org/trac/boost/ticket/9871) + Remove spike in polygon with only a spike + - [9947](https://svn.boost.org/trac/boost/ticket/9947) + Missing info about WKT in documentation + - [9759](https://svn.boost.org/trac/boost/ticket/9759) + Invalid results of R-tree knn queries for non-cartesian coordinate + systems + - [10019](https://svn.boost.org/trac/boost/ticket/10019) + Difference of Linestring and Box returns their intersection + - [10077](https://svn.boost.org/trac/boost/ticket/10077) + Wrong types in concept checks in boost/geometry/arithmetic/arithmetic.hpp + + Bug fixes + + - intersects(polygon) could return a self-intersection-point + for its closing point, fixed + - equals() could return invalid results for non-simple linear + geometries according to the OGC standard, fixed + - touches() didn't work properly for CCW areal geomtries, fixed + - rtree nearest queries returned wrong elements for non-cartesian + coordinate systems, fixed + - rtree crashed in some cases when used with Interprocess allocator, + fixed +* [Hash](/libs/functional/hash/): + + + Removed some Visual C++ 6 workarounds. + + Ongoing work on improving `hash\_combine`, + this changes the previously documented algorithm for the function. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs: + + - [Trac + #9221 (*"message\_queue deadlock on linux"*)](https://svn.boost.org/trac/boost/ticket/9221). + - [Trac + #9226 (*"On some computers, Common Appdata is + empty in registry, so boost interprocess cannot work"*)](https://svn.boost.org/trac/boost/ticket/9226). + - [Trac + #9284 (*"WaitForSingleObject(mutex) must handle + WAIT\_ABANDONED"*)](https://svn.boost.org/trac/boost/ticket/9284). + - [Trac + #9285 (*"CreateMutex returns NULL if fails"*)](https://svn.boost.org/trac/boost/ticket/9285). + - [Trac + #9288 (*"timed\_wait does not check if it has + expired"*)](https://svn.boost.org/trac/boost/ticket/9288). + - [Trac + #9408 (*"Android does not support XSI\_SHARED\_MEMORY\_OBJECTS"*](https://svn.boost.org/trac/boost/ticket/9408)). + - [Trac + #9729 (*"crash on managed\_external\_buffer object + construction"*](https://svn.boost.org/trac/boost/ticket/9729)). + - [Trac + #9767 (*"bootstamp generation causes error in + case of corrupt Windows Event Log"*)](https://svn.boost.org/trac/boost/ticket/9767). + - [Trac + #9835 (*"Boost Interprocess fails to compile + with Android NDK GCC 4.8, -Werror=unused-variable"*)](https://svn.boost.org/trac/boost/ticket/9835). + - [Trac + #9911 (*"get\_tmp\_base\_dir(...) failure"*)](https://svn.boost.org/trac/boost/ticket/9911). + - [Trac + #9946 (*"ret\_ptr uninitialized in init\_atomic\_func, + fini\_atomic\_func"*)](https://svn.boost.org/trac/boost/ticket/9946). + - [Trac + #10011 (*"segment\_manager::find( unique\_instance\_t\* + ) fails to compile"*)](https://svn.boost.org/trac/boost/ticket/10011). + - [Trac + #10021 (*"Interprocess and BOOST\_USE\_WINDOWS\_H"*)](https://svn.boost.org/trac/boost/ticket/10021). + - [GitHub + #2 (*"Provide support for the Cray C++ compiler. + The Cray compiler defines \_\_GNUC\_\_"*)](https://github.com/boostorg/interprocess/pull/2). + - [GitHub + #3 (*"Fix/mingw interprocess\_exception throw + in file\_wrapper::priv\_open\_or\_create"*)](https://github.com/boostorg/interprocess/pull/3). + + **ABI breaking**: [#9221](https://svn.boost.org/trac/boost/ticket/9221) + showed that `BOOST\_INTERPROCESS\_MSG\_QUEUE\_CIRCULAR\_INDEX` + option of message queue, was completely broken so an ABI break was + necessary to have a working implementation. + + Simplified, refactored and unified (timed\_)lock code based on try\_lock(). + There were several bugs when handling timeout expirations. + + Changed the implementation of condition variables' destructors to + allow POSIX semantics (the condition variable can be destroyed after + all waiting threads have been woken up).. + + Added `BOOST\_INTERPROCESS\_SHARED\_DIR\_PATH` + option to define the shared directory used to place shared memory + objects when implemented as memory mapped files. + + Added support for `BOOST\_USE\_WINDOWS\_H`. + When this macro is defined Interprocess does not declare used Windows + API function and types, includes all needed windows SDK headers and + uses types and functions declared by the Windows SDK. + + Added `get\_size` to + `windows\_shared\_memory`. +* [Intrusive](/libs/intrusive/): + + + Improved Doxygen generated reference and updated and fixed forward-declaration + header. + + **ABI breaking**: Fixed ABI regression + introduced in Boost 1.55 version, mainly noticeable on MSVC compilers. + + **Source breaking**: Removed previously + deprecated `xxx\_dont\_splay` + functions from splay containers, `splay\_set\_base\_hook` + and `splay\_set\_member\_hook`from + splay containers and `bool + splay = + true` extra parameter in `splaytree\_algorithms` functions. + + Fixed bugs: + + - [#8468: + Compile error on visual studio 2010/2012 using vector with + custom allocator and aligned types](https://svn.boost.org/trac/boost/ticket/8468) + - [#9332: + *"has\_member\_function\_callable\_with.hpp compile + error on msvc-12.0"*](https://svn.boost.org/trac/boost/ticket/9332). + - [#9650: + *"intrusive list with stateful value traits"*](https://svn.boost.org/trac/boost/ticket/9650). + - [#9746: + Modern Sun CC compiler detects error in intrusive library header](https://svn.boost.org/trac/boost/ticket/9746) + - [#9940: + bad bug in intrusive list with safe\_link (or auto\_unlink) hooks](https://svn.boost.org/trac/boost/ticket/9940) + - [#9948: + remove use of const\_cast in intrusive containers](https://svn.boost.org/trac/boost/ticket/9948) + - [#9949: + clear header node hooks upon intrusive container destruction](https://svn.boost.org/trac/boost/ticket/9949) + - [#9961: + tests for hooks not derived frorm generic\_hook](https://svn.boost.org/trac/boost/ticket/9961) + + Optimized tree rebalancing code to avoid redundant assignments. + + Added 64 bit prime values for `suggested\_upper\_bucket\_count`/`suggested\_lower\_bucket\_count` in + 64 bit platforms. + + Deleted workarounds for old SUN\_CC compilers, those are now unsupported + as modern SunPro compilers are standard-corforming enough. +* [Lexical Cast](/libs/lexical_cast/): + + + Added the `try\_lexical\_convert` + function, that retuns `false` + in case of failed conversion and does not require output parameter + to be Default Constructable ([#6700](https://svn.boost.org/trac/boost/ticket/6700)). + + Fixed conversion of string values with leading zeroes to `bool` ([#9659](https://svn.boost.org/trac/boost/ticket/9659)). + + Code was changed to produce a smaller binaries and simplify compiler's + work ([#9046](https://svn.boost.org/trac/boost/ticket/9046)). + + Boost.LexicalCast library was separated from the Boost.Conversion + library. + + Fixed some warnings ([#8991](https://svn.boost.org/trac/boost/ticket/8991)). +* [Log](/libs/log/index.html): + + + General changes: + + - For Windows targets, the library now compiles for Windows XP + by default. + - Added indexing operators with `attribute\_name` + arguments to `record` + and `record\_view`. + - Added operators for non-const object output to `basic\_formatting\_ostream`. + ([#9389](https://svn.boost.org/trac/boost/ticket/9389)) + - Added support for putting function names and source file names + of named scopes into the formatted strings. ([#9263](https://svn.boost.org/trac/boost/ticket/9263)) + - Added support for incomplete and empty markers to the named + scope formatter. ([#9123](https://svn.boost.org/trac/boost/ticket/9123)) + - The default presentation for incomplete named scope lists has + changed: trailing scope delimiter is omitted. + - Added a support header for `std::regex`. + - By default Boost.Log uses Boost.Regex internally as the regular + expressions backend. The backend can be changed by defining + configuration macros. + + Bug fixes: + + - Fixed `dump` + manipulator output on AVX2-enabled CPUs (e.g. Intel Haswell). + - Fixed compilation of `get\_attribute` + method of loggers. + - Fixed a possible race in `locked\_backend()` function implementation of + synchronous and asynchronous sink frontends. + - Fixed a possible infinite block of the logging threads in the + asynchronous sink enqueue methods when `block\_on\_overflow` + strategy was used. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/index.html): + + + **Breaking change**: moved a number + of non-core headers that are predominantly used for internal maintenance + into `libs/math/include\_private`. The headers effected + are `boost/math/tools/test\_data.hpp`, `boost/math/tools/remez.hpp`, + `boost/math/constants/generate.hpp`, `boost/math/tools/solve.hpp`, + `boost/math/tools/test.hpp`. You can continue to use these + headers by adding `libs/math/include\_private` + to your compiler's include path. + + **Breaking change**: A number of distributions + and special functions were returning the maximum finite value rather + than raising an overflow\_error, this has now been fixed, which means + these functions now behave as documented. However, since the default + behavior on raising an overflow\_error is to throw a `std::overflow\_error` exception, applications + which have come to reply rely on these functions not throwing may + experience exceptions where they did not before. The special functions + involved are gamma\_p\_inva, gamma\_q\_inva, ibeta\_inva, ibetac\_inva, + ibeta\_invb, ibetac\_invb, gamma\_p\_inv, gamma\_q\_inv. The distributions + involved are pareto\_distrib, beta\_distrib, geometric\_distrib, negative\_binomial\_distrib, + binomial\_distrib, chi\_squared\_distrib, gamma\_distrib, inverse\_chi\_squared\_distrib, + inverse\_gamma\_distrib. See [#10111](https://svn.boost.org/trac/boost/ticket/10111). + + Fix round and trunc functions so they can be used with integer arguments, + see [#10066](https://svn.boost.org/trac/boost/ticket/10066). + + Fix Halley iteration to handle zero derivative (with non-zero second + derivative), see [#10046](https://svn.boost.org/trac/boost/ticket/10046). + + Fix Geometric distribution use of Policies, see [#9833](https://svn.boost.org/trac/boost/ticket/9833). + + Fix corner cases in the negative binomial distribution, see [#9834](https://svn.boost.org/trac/boost/ticket/9834). + + Fix compilation failures on Mac OS. + + Added bernoulli\_numbers, changed arbitrary precision tgamma/lgamma + to use Sterling's approximation (from Nikhar Agrawal). + + Added first derivatives of the Bessel functions: cyl\_bessel\_j\_prime, + cyl\_neumann\_prime, cyl\_bessel\_i\_prime, cyl\_bessel\_k\_prime, sph\_bessel\_prime + and sph\_neumann\_prime (from Anton Bikineev). + + Fixed buggy Student's t example code, along with docs for testing + sample means for equivalence. + + Documented `max\_iter` + parameter in root finding code better, see [#9225](https://svn.boost.org/trac/boost/ticket/9225). + + Add option to explicitly enable/disable use of \_\_float128 in constants + code, see [#9240](https://svn.boost.org/trac/boost/ticket/9240). + + Cleaned up handling of negative values in Bessel I0 and I1 code (removed + dead code), see [#9512](https://svn.boost.org/trac/boost/ticket/9512). + + Fixed handling of very small values passed to tgamma and lgamma so + they don't generate spurious overflows (thanks to Rocco Romeo). + + [#9672 PDF + and CDF of a Laplace distribution throwing domain\_error](https://svn.boost.org/trac/boost/ticket/9672) Random + variate can now be infinite. + + Fixed several corner cases in rising\_factorial, falling\_factorial + and tgamma\_delta\_ratio with thanks to Rocco Romeo. + + Removed constant `pow23\_four\_minus\_pi` whose value did not match the name (and was unused by Boost.Math), + see [#9712](https://svn.boost.org/trac/boost/ticket/9712). +* [Move](/libs/move/): + + + Added `BOOST_MOVE_RET`. + + Fixed bug [#9482: + *"MSVC macros not undefined in boost/move/detail/config\_end.hpp"*](https://svn.boost.org/trac/boost/ticket/9482), + [#9045: + *"Wrong macro name on docs"*](https://svn.boost.org/trac/boost/ticket/9045), + [#8420: + *"move's is\_convertible does not compile with aligned + data"*](https://svn.boost.org/trac/boost/ticket/8420). +* [MPL](/libs/mpl/): + + + `boost::mpl::for\_each` is enabled for use on + GPU +* [MultiArray](/libs/multi_array/index.html): + + + [#5664](https://svn.boost.org/trac/boost/ticket/5664) operator() checks for Collection concept but requires RandomAccessCollection + + [#4874](https://svn.boost.org/trac/boost/ticket/4874) compile errors using Visual C++ 2010 in debug mode + + [#3581](https://svn.boost.org/trac/boost/ticket/3581) MultiArray storage order example incorrect for fortran\_storage\_ordering + + [#4032](https://svn.boost.org/trac/boost/ticket/4032) Move MultiArray concepts out of detail namespace + + [#9212](https://svn.boost.org/trac/boost/ticket/9212) Broken links to C++ standard papers + + [#8368](https://svn.boost.org/trac/boost/ticket/8368) GCC -Wundef warning about BOOST\_MULTI\_ARRAY\_NO\_GENERATORS + in multi\_array +* [Multi-index Containers](/libs/multi_index/index.html): + + + The `erase(iterator)` + member function of hashed indices used to have poor performance under + low load conditions due to the requirement that an iterator to the + next element must be returned (see ticket [#4264](https://svn.boost.org/trac/boost/ticket/4264)). In accordance + with the resolution of [LWG + issue #579](http://lwg.github.io/issues/lwg-closed.html#579), this problem has been fixed while maintaining + the interface of `erase`, + at the expense of using one more word of memory per element. In fact, + C++ complexity requirements on unordered associative containers have + been improved for hashed indices so that + + - deletion of a given element is unconditionally constant-time, + - worst-case performance is not `O(n)` but `O(ndist)`, where `ndist` is the number of + non-equivalent elements in the index. + Due to the fact that hashed indices rely on a new data structure, + the internal representation of their iterators and local iterators + have changed, which affects serialization: their corresponding serialization + [class + version](/libs/serialization/doc/tutorial.html#versioning) has been bumped from 0 to 1. Old archives involving + hashed index (local) iterators can be loaded by Boost 1.56 version + of Boost.MultiIndex, but not the other way around. + + Hashed indices now provide `reserve`. + + Hashed indices can now be checked for equality and inequality following + the (suitably adapted) C++ standard specification in **[unord.req]**. + + The public interface of Boost.MultiIndex provide `noexcept` + specifications where appropriate (for compliant compilers). + + Improved performance of failed insertions into a `multi\_index\_container`. + + Much internal code aimed at supporting MSVC++ 7.0 and prior has been + removed. Compilation times without this legacy code might be slightly + faster. + + Fixed a bug with insertion via iterators dereferencing to rvalues + (ticket [#9665](https://svn.boost.org/trac/boost/ticket/9665)). + + Made Boost.MultiIndex compatible with `BOOST\_BIND\_NO\_PLACEHOLDERS` + (ticket [#9798](https://svn.boost.org/trac/boost/ticket/9798)). + + Maintenance fixes. +* [Multiprecision](/libs/multiprecision/): + + + Change floating point to rational conversions to be implicit, see + [10082](https://svn.boost.org/trac/boost/ticket/10082). + + Fix definition of checked\_cpp\_rational typedef. + + Fix bug in assignment from string in cpp\_int, see [9936](https://svn.boost.org/trac/boost/ticket/9936). + + Added new cpp\_bin\_float backend for binary floating point. + + Fix bug in assignment from string in cpp\_int, see [9936](https://svn.boost.org/trac/boost/ticket/9936). + + Added MSVC-specific #include for compiler intrinsics, see [9336](https://svn.boost.org/trac/boost/ticket/9336). + + Fixed various typos in docs, see [9432](https://svn.boost.org/trac/boost/ticket/9432). + + Fixed gmp\_rational to allow move-copy from an already copied-from + object, see [9497](https://svn.boost.org/trac/boost/ticket/9497). + + Added list of values for numeric\_limits. +* [Odeint](/libs/numeric/odeint/): + + + Added algebra and operations dispatcher for automatic detection of + appropriate algebras and operations. + + Added support for Eigen, Boost.Multiarray, Boost.Mpi, Boost.Compute, + Blaze, and NT2. + + Changed algebra interface to use algebra.norm\_inf function. + + Added iterators for iterating through the solution of the ODEs, hence + an alternative to the integrate functions. + + Added the Velocity-Verlet method. + + Minor bug fixes. +* [Optional](/libs/optional/): + + + Added support for rvalue references. Now `optional` works with moveable but non-copyable + `T`'s. + + Improved `swap` (now + uses move operations). + + Added function `emplace()`. This is the last of the requests + from [#1841](https://svn.boost.org/trac/boost/ticket/1841). + + `optional` is moveable, + including conditional `noexcept` + specifications, which make it `move\_if\_noexcept`-friendly. + + Using explicit operator bool() on platforms that support it ([#4227](https://svn.boost.org/trac/boost/ticket/4227)) + (breaking change). + + Forward declaration of `operator<<(ostream&, optional + const&)` + to prevent inadvertent incorrect serialization of optional objects. + + Removed depprecated function `reset()` from examples ([#9005](https://svn.boost.org/trac/boost/ticket/9005)). + + Equality comparison with `boost::none` + does not require that `T` + be EqualityComparable. + + Optional rvalue references are explicitly disallowed. + + Binding temporaries to optional references is explicitly disallowed + (breaking change). + + More ways to access the contained value, functions `value()`, + `value\_or()`, + `value\_or\_eval()`. + + Updated and reorganized documentation, added tutorial and quick guide + sections. +* [Predef](/libs/predef/): + + + Addition of `BOOST\_PLAT\_\*` platform definitions for MinGW and + Windows platform variants. + + Detection of ARM architecture for Windows compilers to target mobile + devices of Windows 8. + + Improved ARM detection for 64 bit ARM. + + Added detection of iOS as an operating system. + + Improved detection of endianess on some platforms. + + Addition of exclusive plus emulated definitions for platform and + compiler detection. +* [Preprocessor](/libs/preprocessor/): + + + When using variadic macros tuple functionality was added to match + all the array functionality. +* [Program Options](/libs/program_options/): + + + Columns in the `--help` + output are now aligned across all option groups ([#6114](https://svn.boost.org/trac/boost/ticket/6114)). + + Option names with dashes are no longer truncated in error messages + ([#8009](https://svn.boost.org/trac/boost/ticket/8009)). +* [Regex](/libs/regex/index.html): + + + **Breaking change:** corrected behavior + of `basic\_regex<>::mark\_count()` + to match existing documentation, `basic\_regex<>::subexpression(n)` changed to match, see [#9227](https://svn.boost.org/trac/boost/ticket/9227) + + Fixed issue [#8903](https://svn.boost.org/trac/boost/ticket/8903). + + Fixed documentation typos from [#9283](https://svn.boost.org/trac/boost/ticket/9283). + + Fixed bug in collation code that failed if the locale generated collation + strings with embedded nul's, see [#9451](https://svn.boost.org/trac/boost/ticket/9451). + + Apply patch for unusual thread usage (no statically initiallized + mutexes), see [#9461](https://svn.boost.org/trac/boost/ticket/9461). + + Added better checks for invalid UTF-8 sequences, see [#9473](https://svn.boost.org/trac/boost/ticket/9473). +* [Smart Pointers](/libs/smart_ptr/): + + + Updated the overloads of [make\_shared](/libs/smart_ptr/make_shared_array.html) + and [allocate\_shared](/libs/smart_ptr/make_shared_array.html) + of array types (`T[]` or `T[N]`) to conform to the specification + in C++ standard paper [N3939](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3939.html) + and significantly reduced the spatial overhead of the internal bookkeeping + structures. + + Updated the implementations of make\_shared and allocate\_shared for + scalar types and array types, respectively, to resolve C++ standard + library defect report [#2070](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2070). +* [Thread](/libs/thread/): + + + *New Experimental Features:* + + - [#7446](http://svn.boost.org/trac/boost/ticket/7446) + Async: Add when\_any. + - [#7447](http://svn.boost.org/trac/boost/ticket/7447) + Async: Add when\_all. + - [#7448](http://svn.boost.org/trac/boost/ticket/7448) + Async: Add async taking a scheduler parameter. + - [#8274](http://svn.boost.org/trac/boost/ticket/8274) + Synchro: Add concurrent queue + - [#8513](http://svn.boost.org/trac/boost/ticket/8513) + Async: Add a basic thread\_pool executor. + - [#8518](http://svn.boost.org/trac/boost/ticket/8518) + Synchro: Add a latch class. + - [#8516](http://svn.boost.org/trac/boost/ticket/8516) + Async: Add future/shared\_future::then taking a scheduler as + parameter. + - [#9058](http://svn.boost.org/trac/boost/ticket/9058) + with\_lock\_guard function + - [#9571](http://svn.boost.org/trac/boost/ticket/9571) + Add a dynamic executor and an executor adaptor + + *Fixed Bugs:* + + - [#8070](http://svn.boost.org/trac/boost/ticket/8070) + prefer GetTickCount64 over GetTickCount + - [#9333](http://svn.boost.org/trac/boost/ticket/9333) + ex\_scoped\_thread compile fails on msvc-12.0 + - [#9341](http://svn.boost.org/trac/boost/ticket/9341) + compile error scoped\_thread(move semantics) intel-linux-14.0.1 + - [#9366](http://svn.boost.org/trac/boost/ticket/9366) + async(Executor, ...) fails to compile with msvc-10,11,12 + - [#9402](http://svn.boost.org/trac/boost/ticket/9402) + test\_excutor regression on msvc-10,11,12 + - [#9404](http://svn.boost.org/trac/boost/ticket/9404) + ex\_make\_future regression error + - [#9471](http://svn.boost.org/trac/boost/ticket/9471) + Synchronization documentation nits + - [#9535](http://svn.boost.org/trac/boost/ticket/9535) + Missing exception safety might result in crash + - [#9618](http://svn.boost.org/trac/boost/ticket/9618) + try\_join\_for problem: program is not terminate. + - [#9625](http://svn.boost.org/trac/boost/ticket/9625) + Please rewrite boost::thread::~thread() reference section + - [#9632](http://svn.boost.org/trac/boost/ticket/9632) + public method start\_thread in boost::thread class + - [#9673](http://svn.boost.org/trac/boost/ticket/9673) + thread compilation with MingW/gcc on Windows gives errors + - [#9708](http://svn.boost.org/trac/boost/ticket/9708) + boost::condition\_variable::timed\_wait unexpectedly wakes up + while should wait infinite + - [#9711](http://svn.boost.org/trac/boost/ticket/9711) + future continuation called twice + - [#9867](http://svn.boost.org/trac/boost/ticket/9867) + Remove references to gcc-mingw + - [#10008](http://svn.boost.org/trac/boost/ticket/10008) + Boost Synchronization documentation typos (futures) + - [#10058](http://svn.boost.org/trac/boost/ticket/10058) + Null pointer access in once + - [#10125](http://svn.boost.org/trac/boost/ticket/10125) + call\_once: compile errors in variadic version with rvalue reference + emulation + - [#10126](http://svn.boost.org/trac/boost/ticket/10126) + call\_once: deprecate (Function, once\_flag&) overload + - [#10147](http://svn.boost.org/trac/boost/ticket/10147) + pthread\_delay\_np() parameters different on AIX even with gcc + - [#10155](http://svn.boost.org/trac/boost/ticket/10155) + thread::physical\_concurrency() always returns 0 on PowerPC + - [#10184](http://svn.boost.org/trac/boost/ticket/10184) + Future: multiply defined symbols +* [TR1](/libs/tr1/index.html): + + + This library is now deprecated. +* [TTI](/libs/tti/): + + + Ticket [#9441](https://svn.boost.org/trac/boost/ticket/9441): Added better support for Sun Solaris Studio C++ + compiler. + + Ticket [#9444](https://svn.boost.org/trac/boost/ticket/9444): Handle all situations where the enclosing class + is not a class type. +* [Unordered](/libs/unordered/): + + + Minor documentation and warning fixes ([#9377](https://svn.boost.org/trac/boost/ticket/9377), [#9719](https://svn.boost.org/trac/boost/ticket/9719)). + + Always use prime number of buckets for integers. Fixes performance + regression when inserting consecutive integers ([#9282](https://svn.boost.org/trac/boost/ticket/9282)). + + Only construct elements using allocators, as specified in C++11 standard. +* [Utility](/libs/utility/index.html): + + + Some components were moved to the new Boost.Core library. + + `empty\_deleter` is + deprecated in favor of `null\_deleter` + from Boost.Core. `empty\_deleter` + is an alias for `null\_deleter`, + it will be removed in future releases. + + `base\_from\_member` + utility now supports lvalue reference member types. ([#7577](https://svn.boost.org/trac/boost/ticket/7577)) +* [UUID](/libs/uuid/index.html): + + + Added basic support for C++11 features. + + Implemented SSE-optimized versions of some functions of `uuid`, including comparison operators + and `swap`. The support + for different versions of SSE is automatically detected at compile + time for most compilers, but can also be explicitly enabled or disabled + with [configuration + macros](/libs/uuid/uuid.html#Configuration). ([#8509](https://svn.boost.org/trac/boost/ticket/8509)) + + Silenced some compiler warnings. ([#8495](https://svn.boost.org/trac/boost/ticket/8495), [#8697](https://svn.boost.org/trac/boost/ticket/8697)) +* [Variant](/libs/variant/): + + + **Breaking change:** Variant now uses + variadic templates if they are supported by compiler. This leads + to smaller binaries and better compilation times but in some cases + may break metaprogramming functions, especially if [BOOST\_VARIANT\_ENUM\_PARAMS](/libs/variant/doc/html/variant/BOOST_VARIANT_ENUM_PARAMS.html) + and [BOOST\_VARIANT\_ENUM\_SHIFTED\_PARAMS](/libs/variant/doc/html/variant/BOOST_VARIANT_ENUM_SHIFTED_PARAMS.html) + are not used. Usage of variadic templates [may + be disabled](/libs/variant/doc/html/variant/BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES.html). + + [Added](/libs/variant/doc/html/variant/reference.html#header.boost.variant.polymorphic_get_hpp) + `polymorphic\_get` function + [#9479](https://svn.boost.org/trac/boost/ticket/9479). + + Move-only classes now can be returned by visitors. + + Optimized variant::swap() and fixed ambiguity in `move\_swap` + [#2839](https://svn.boost.org/trac/boost/ticket/2839). + + Added conditional noexcepts to move assignments, default and move + constructors making `boost::variant` + `move\_if\_noexcept`-friendly + ([#7911](https://svn.boost.org/trac/boost/ticket/7911)). + + Exceptions are now visible across modules even with -fvisibility=hidden + flags. + + Dropped support of antique compilers. + + Fixed some warnings ([#3020](https://svn.boost.org/trac/boost/ticket/3020)). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.3, 3.2, 3.1, 3.0 + + Clang, C++98: 3.3.16 + + Clang, C++11, libc++: 3.4.2 + + Clang, C++1y: 3.3.16 + + GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7 + + GCC, C++98: 4.9.0 + + GCC, C++11: 4.8.2 + + GCC, C++1y: 4.9.0 + + Intel: 13.1 +* OS X: + + + Apple Clang: 5.1 + + Apple Clang, C++11: 5.1 + + GCC: 4.2.1 + + Intel: 12.0 +* Windows: + + + GCC, mingw: 4.9.0, 4.8.2, 4.7.3, 4.7.2, 4.6.3, 4.5.4, 4.4.7 + + Visual C++: 12.0, 11.0, 10.0, 9.0 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC: 4.4.2 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.4, 3.3, 3.2, 3.1, 3.0 + + Clang, C++98: 3.3.16 + + Clang, C++11, libc++: 3.4.2 + + Clang, C++1y: 3.3.16 + + Clang, C++14, libc++: trunk + + GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7 + + GCC, C++98: 4.9.0 + + GCC, C++11: 4.9.0, 4.8.2 + + GCC, C++1y: 4.9.0 + + Intel: 13.1, 13.0, 12.1, 11.1 +* OS X: + + + Apple Clang: 5.1 + + Apple Clang, C++11: + + Clang: trunk + + Clang, C++11: trunk + + GCC: 4.2.1 + + Intel: 12.0 +* Windows: + + + GCC, mingw: 4.9.0, 4.8.2, 4.7.2, 4.6.3, 4.5.4, 4.4.7 + + Visual C++: 12.0, 11.0, 10.0, 9.0 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC, ARM: 4.4.2 + + QCC, x86: 4.4.2 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_57_0.html b/users/history/version_1_57_0.html new file mode 100644 index 0000000..6257ade --- /dev/null +++ b/users/history/version_1_57_0.html @@ -0,0 +1,455 @@ +--- +title: Version 1.57.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.57.0 + +/\*\*/ + + + + + + + +Version 1.57.0 +============== + +Version 1.57.0 +-------------- + + +November 3rd, 2014 21:55 GMT + + +[Documentation](/doc/libs/1_57_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_57\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.bz2) | +| [boost\_1\_57\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.gz) | +| windows | [boost\_1\_57\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.7z) | +| [boost\_1\_57\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.zip) | + + +### Updated Libraries + + +* [Any](/libs/any/): + + + RTTI is not required any more ([TypeIndex](/libs/type_index) + library is used for RTTI emulation) + + Fixed [#8958](https://svn.boost.org/trac/boost/ticket/8958) +* [Asio](/libs/asio/): + + + Fixed the kqueue reactor so that it works on FreeBSD + ([#10606](https://svn.boost.org/trac/boost/ticket/10606)). + + Fixed an issue in the kqueue reactor which resulted + in spinning when using serial ports on Mac OS ([#10496](https://svn.boost.org/trac/boost/ticket/10496)). + + Fixed kqueue reactor support for read-only file + descriptors ([#10367](https://svn.boost.org/trac/boost/ticket/10367)). + + Fixed a compile error when using the /dev/poll + reactor ([#10350](https://svn.boost.org/trac/boost/ticket/10350), [#10572](https://svn.boost.org/trac/boost/ticket/10572)). + + Changed the Windows backend to use `WSASocketW`, + as `WSASocketA` has + been deprecated ([#10534](https://svn.boost.org/trac/boost/ticket/10534)). + + Fixed some warnings reported by Visual C++ 2013 ([#10376](https://svn.boost.org/trac/boost/ticket/10376)). + + Fixed integer type used in the WinRT version of the byte-order conversion + functions ([#10539](https://svn.boost.org/trac/boost/ticket/10539)). + + Changed documentation to indicate that `use\_future` + and `spawn()` + are not made available when including the `asio.hpp` + convenience header ([#10567](https://svn.boost.org/trac/boost/ticket/10567)). + + Explicitly marked `asio::strand` + as deprecated. Use `asio::io\_service::strand` + instead. +* [Circular Buffer](/libs/circular_buffer/): + + + Fixed some warnings and `move\_if\_noexcept` + from Boost.Move is used [#7888](https://svn.boost.org/trac/boost/ticket/7888) +* [Config](/libs/config/): + + + `BOOST\_HAS\_PRAGMA\_DETECT\_MISMATCH` + macro was added +* [Container](/libs/container/): + + + Added support for `initializer\_list`. + Contributed by Robert Matusewicz. + + Fixed double destruction bugs in vector and backward expansion capable + allocators. + + Fixed bugs: + + - [Trac + #10263 (*"AIX 6.1 bug with sched\_yield() function + out of scope"*)](https://svn.boost.org/trac/boost/ticket/10263). + - [GitHub + #16: *Fix iterators of incomplete type containers*](https://github.com/boostorg/container/pull/16). + Thanks to Mikael Persson. +* [Coroutine](/libs/coroutine/): + + + optionally register stacks with valgrind + + [#10386](https://svn.boost.org/trac/boost/ticket/10386) MSVC link error in asymmetric\_coroutine.hpp: symbol already + defined + + [#10536](https://svn.boost.org/trac/boost/ticket/10536) call to 'begin(...pull\_coroutine< R > & c)' + is ambiguous +* [Flyweight](/libs/flyweight/): + + + Added serialization support via [Boost + Serialization](/libs/serialization/). + + `flyweight` default + constructor was made explicit in Boost 1.56, which introduces a regression + in some initialization scenarios. The former non-explicit default + constructor has been restored (ticket [#10439](https://svn.boost.org/trac/boost/ticket/10439)). +* [Geometry](/libs/geometry/): + + + *Improvements* + + - The support of parameters convertible to value\_type in rtree + insert(), remove() and count() functions + + *Solved tickets* + + - [8402](https://svn.boost.org/trac/boost/ticket/8402) + Implicit conversion warnings + - [9354](https://svn.boost.org/trac/boost/ticket/9354) + Bug in winding strategy affecting within() and covered\_by() + for non-cartesian coordinate systems + - [10177](https://svn.boost.org/trac/boost/ticket/10177) + Missing include + - [10345](https://svn.boost.org/trac/boost/ticket/10345) + Distance fails to compile for some coordinate types + - [10398](https://svn.boost.org/trac/boost/ticket/10398) + Wrong neighbour check in buffer, calculating turns + - [10421](https://svn.boost.org/trac/boost/ticket/10421) + Invalid Point-Box distance for spherical CS + - [10615](https://svn.boost.org/trac/boost/ticket/10615) + Rtree constructor feature request + - [10643](https://svn.boost.org/trac/boost/ticket/10643) + Invalid point\_on\_surface() result for big coordinates + - [10668](https://svn.boost.org/trac/boost/ticket/10668) + Implicit conversion warnings (duplicated 8402) + + *Bugfixes* + + - Several fixes of bugs in algorithm buffer + - Bug in point\_on\_surface() for CCW Polygons (extreme\_points()) + and numerical issue (thanks to Matt Amos) + - Bug in disjoint() for A/A fixed by replacement of point\_on\_surface() + with point\_on\_border() (thanks to Matt Amos) + - The result of convex\_hull(), duplicated Point in open output, + too small number of Points for 1- and 2-Point input + - Imprecision for big coordinates in centroid(), fixed by Points + translation (related with ticket 10643) + - for\_each\_segment() not taking into account the last segment + of open Geometry +* [Interprocess](/libs/interprocess/): + + + Removed `unique\_ptr`, + now forwards boost::interprocess::unique\_ptr to the general purpose + `boost::movelib::unique\_ptr` class from **Boost.Move**. This implementation is closer + to the standard `std::unique\_ptr` + implementation and it's better maintained. + + Fixed bugs: + + - [Trac + #10262 (*"AIX 6.1 bug with variable definition + hz"*)](https://svn.boost.org/trac/boost/ticket/10262). + - [Trac + #10229 (*"Compiling errors in interprocess\detail\os\_file\_functions.hpp"*)](https://svn.boost.org/trac/boost/ticket/10229). + - [Trac + #10506 (*"Infinite loop in create\_or\_open\_file"*)](https://svn.boost.org/trac/boost/ticket/10506). + - [GitHub + Pull #11 (*"Compile fix for BOOST\_USE\_WINDOWS\_H"*)](https://github.com/boostorg/interprocess/pull/11). + + Reorganized Doxygen marks to obtain a better header reference. +* [Intrusive](/libs/intrusive/): + + + Experimental version of node checkers, contributed by Matei David. + Many thanks! + + Implemented [N3644: + Null Forward Iterators](http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3644.pdf) from C++14. + + Fixed bugs: + + - [GitHub + Pull #12: *Fix MSVC14 warning C4456: declaration of + 'x\_parent\_right' hides previous local declaration*](https://github.com/boostorg/intrusive/pull/12) + - [Boost + Trac #10520: *Conversion warning in intrusive/detail/utilities.hpp*](https://svn.boost.org/trac/boost/ticket/10520) + - [Boost + Trac #10469: *Erasing from intrusive unordered\_multiset + with optimize\_multikey goes into an infinite loop*](https://svn.boost.org/trac/boost/ticket/10469) +* [Iterator](/libs/iterator/): + + + Most components of the library were moved into the `boost::iterators` namespace. For backward + compatibility the components are also accessible in the `boost` namespace. + + Iterator operators are now conditionally defined based on the iterator + category. + + Some of the internal components of the library were made public (`minimum\_category`, for example). +* [Lexical Cast](/libs/lexical_cast/): + + + Some internal changes, library now consist of multiple headers instead + of a single one [#10391](https://svn.boost.org/trac/boost/ticket/10391), [#10173](https://svn.boost.org/trac/boost/ticket/10173) +* [Math](/libs/math/): + + + Added Hyperexponential Distribution. + + Fix some spurious overflows in the incomplete gamma functions (with + thanks to Rocco Romeo). + + Fix bug in derivative of incomplete beta when a = b = 0.5 - this + also effects several non-central distributions, see issue 10480. + + Fixed some corner cases in function round. + + Don't support 80-bit floats in cstdfloat.hpp if standard library + support is broken. +* [Move](/libs/move/): +* Added `unique\_ptr` smart + pointer. Thanks to Howard Hinnant for his excellent unique\_ptr emulation + code and testsuite. +* Added `move\_if\_noexcept` + utility. Thanks to Antony Polukhin for the implementation. +* Fixed bugs: + + + [Trac #9785: + *"Compiler warning with intel icc in boost/move/core.hpp"*](https://svn.boost.org/trac/boost/ticket/9785), + + [Trac #10460: + *"Compiler error due to looser throw specifier"*](https://svn.boost.org/trac/boost/ticket/10460), + + [Git Pull #3: + *"Don't delete copy constructor when rvalue references + are disabled"*](https://github.com/boostorg/move/pull/3), +* [MultiArray](/libs/multi_array/): + + + Fixed a friend-declaration related warning for clang (thanks to Marcel + Raad). +* [Multiprecision](/libs/multiprecision/): + + + Changed rational to float conversions to exactly round to nearest. + + Added improved generic float to rational conversions. + + Fixed rare bug in exponent function for cpp\_bin\_float. + + Fixed various minor documentation issues. +* [Multi-index Containers](/libs/multi_index/): + + + When `std::tuple`s are available, these can + be used for lookup operations in indices equipped with composite + keys. `boost::tuple`s are also supported for backwards + compatibility. +* [Preprocessor](/libs/preprocessor/): + + + Added is\_begin\_parens and remove\_parens. + + Added tuple functionality to parallel all array functionality. + + Fixed VC++ problems with empty tuple data. + + Updated internal is\_empty to use superior variadic version when variadic + macros are supported. + + Updated clang to have same variadic support as gcc. + + Updated doc for new functionality. +* [Thread](/libs/thread/): + + + *New Experimental Features:* + + - [#6227](http://svn.boost.org/trac/boost/ticket/6227) + Synchro: Use of variadic templates on Generic Locking Algorithms + on compilers providing them + - [#10298](http://svn.boost.org/trac/boost/ticket/10298) + Synchro: Added queue views. + - [#10300](http://svn.boost.org/trac/boost/ticket/10300) + Async: Added generic\_executor\_ref. + - [#10552](http://svn.boost.org/trac/boost/ticket/10552) + Add make\_valid\_future + + *Fixed Bugs:* + + - [#6782](http://svn.boost.org/trac/boost/ticket/6782) + call\_once uses incorrect barrier intrinsic on Visual Studio + - [#6787](http://svn.boost.org/trac/boost/ticket/6787) + boost::thread::sleep() hangs if system time is rolled back + - [#7665](http://svn.boost.org/trac/boost/ticket/7665) + this\_thread::sleep\_for no longer uses steady\_clock in thread + - [#9307](http://svn.boost.org/trac/boost/ticket/9307) + future::fallback\_to assert with ERRORRRRR boost: mutex lock + failed in pthread\_mutex\_lock: Invalid argument + - [#9308](http://svn.boost.org/trac/boost/ticket/9308) + future::async fails with terminate called throwing an exception + when called with a lambda - clang-darwin-asan11 + - [#9310](http://svn.boost.org/trac/boost/ticket/9310) + test\_4648\_lib fails on clang-darwin-asan11 + - [#9425](http://svn.boost.org/trac/boost/ticket/9425) + Boost promise & future does not use supplied allocator + for value storage + - [#9558](http://svn.boost.org/trac/boost/ticket/9558) + future continuations unit test hangs in get()/pthread\_cond\_wait() + on Mac 10.7/32-bit/x86/darwin-4.2.1 + - [#9787](http://svn.boost.org/trac/boost/ticket/9787) + [windows] Small duration value passed down to basic\_timed\_mutex::try\_lock\_until + and condition\_variable::wait\_until can cause infinite or near + infinite wait for win32 + - [#9880](http://svn.boost.org/trac/boost/ticket/9880) + [windows] boost::condition\_variable.timed\_wait() exception + if system time < 1970 + - [#10159](http://svn.boost.org/trac/boost/ticket/10159) + GCC 4.4 error sorry, unimplemented + - [#10196](http://svn.boost.org/trac/boost/ticket/10196) + thread\_specific\_ptr does not support void\* + - [#10296](http://svn.boost.org/trac/boost/ticket/10296) + Boost.Thread 1.56 rc1 does not compile on Mingw + - [#10297](http://svn.boost.org/trac/boost/ticket/10297) + Boost.Thread 1.56 rc1 hangs when built with clang on armhf + - [#10340](http://svn.boost.org/trac/boost/ticket/10340) + No boost::promise::set\_value(const T&) overload + present in C++03 mode + - [#10425](http://svn.boost.org/trac/boost/ticket/10425) + Missing documentation for when\_all/when\_any. + - [#10426](http://svn.boost.org/trac/boost/ticket/10426) + Take in account the deferred futures in when\_all. + - [#10427](http://svn.boost.org/trac/boost/ticket/10427) + Take in account the deferred and ready futures in when\_any. + - [#10428](http://svn.boost.org/trac/boost/ticket/10428) + Adapt to new unique\_ptr interface in Boost.Move + - [#10465](http://svn.boost.org/trac/boost/ticket/10465) + Missing implementation of when\_all/when\_any when the result + is a tuple. + - [#10476](http://svn.boost.org/trac/boost/ticket/10476) + classes using BOOST\_THREAD\_MOVABLE\_ONLY dont satisfy + is\_copy\_constructible::value == false + - [#10478](http://svn.boost.org/trac/boost/ticket/10478) + Data race in boost/thread/future.hpp + - [#10529](http://svn.boost.org/trac/boost/ticket/10529) + The pthread/condition\_variable\_any constructor reports incorrect + error code for pthread\_cond\_init + - [#10563](http://svn.boost.org/trac/boost/ticket/10563) + shared\_future::then should be const +* [TypeIndex](/libs/type_index/): + + + `BOOST\_HAS\_PRAGMA\_DETECT\_MISMATCH` + is now used to detect ODR violations [#10404](https://svn.boost.org/trac/boost/ticket/10404) + + Typos fixed [#10294](https://svn.boost.org/trac/boost/ticket/10294) +* [TypeTraits](/libs/type_traits/): + + + Added new traits is\_copy\_assignable and is\_final. +* [Units](/libs/units/): + + + New unit system units + for: bit, byte, nat, hartley and shannon, + + Add scale units for binary prefixes kibi, mebi, gibi, tebi, pebi, + zebi and yobi IEC prefixes + + Fix output of NaN on msvc-14 + + Add support for C++11 numeric\_limits::max\_digits10 and ::lowest + + warning fixes +* [Unordered](/libs/unordered/): + + + Fix the `pointer` typedef + in iterators ([#10672](https://svn.boost.org/trac/boost/ticket/10672)). + + Fix Coverity warning ([GitHub + #2](https://github.com/boostorg/unordered/pull/2)). +* [Utility](/libs/utility/): + + + The `next()` + and `prior()` + functions taking distance arguments were reworked. The code now work + correctly when the distance is unsigned or both arguments are integers. + The new code relies on the availability of operators supported by + the first argument to select the correct implementation. +* [uBLAS](/libs/numeric/ublas/): + + + added two new types: matrix\_row and matrix\_column facades . With + them, it is possible to access to the matrices as an array of rows + and an array of columns, respectively. + + added fixed\_vector/fixed\_matrix classes to represent small - fixed + size containers. Requires c++11 because it is using std::array + + fixed the long standing banded matrix bug (https://svn.boost.org/trac/boost/ticket/7549). + + the interface of matrices and vectors has been extended with cbegin, + cend, crbegin and crend member functions, as defined in c++11. + + removed doxygen documentation to make the distribution lighter + + removed warnings with MSVC for unused parameters + + changed the uBlas development folder structure (will not affect users + of the library) + + performed a very large overhaul with respect to warnings and errors + on various compilers. Apart for some hard to resolve warnings and + older compiler incompatibilities, compilations with uBlas will be + much cleaner now. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4 + + Clang, C++14: 3.5 + + GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.8.2 + + GCC, C++98: 4.9.1 + + GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1 + + GCC, C++14: 4.9.1 + + Intel: 13.1, 14.0 + + Intel, C++11: 13.1, 14.0 + + QCC: 4.4.2 +* OS X: + + + Apple Clang: 6.0 + + Apple Clang, C++11: 6.0 + + Apple Clang, C++14: 6.0 + + GCC: 4.2.1, 4.9.1 + + Intel: 12.0 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7. 4.5.4, 4.6.3, 4.7.2, 4.7.3, 4.8.0, 4.8.2, + 4.9.0 + + Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC: 4.4.2 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2 + + Clang, C++14: 3.5.0, trunk + + GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.8.2, 5.0 *(experimental)* + + GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1 + + GCC, C++14: 4.9.1 + + Intel: 11.1, 12.1, 13.0, 13.1, 14.0 + + Intel, C++11: 13.1, 14.0 +* OS X: + + + Apple Clang: 6.0 + + Apple Clang, C++11: 6.0 + + Apple Clang, C++14: 6.0 + + Clang: trunk + + Clang, C++11: trunk + + GCC: 4.2.1, 4.9.1 + + Intel: 12.0 +* Windows: + + + GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.0, 4.8.2, 4.9.0 + + Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC: 4.4.2 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_58_0.html b/users/history/version_1_58_0.html new file mode 100644 index 0000000..1be513e --- /dev/null +++ b/users/history/version_1_58_0.html @@ -0,0 +1,692 @@ +--- +title: Version 1.58.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.58.0 + +/\*\*/ + + + + + + + +Version 1.58.0 +============== + +Version 1.58.0 +-------------- + + +April 17th, 2015 07:53 GMT + + +[Documentation](/doc/libs/1_58_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_58\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2) | +| [boost\_1\_58\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz) | +| windows | [boost\_1\_58\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.7z) | +| [boost\_1\_58\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip) | + + +### Known Issue + + +* Boost.Python will fail to build if it is compiled against a version of + python that is one of: 3.0.X, 3.1.X, 3.2.X, 3.3.X. Versions 2.X and 3.4+ + are not affected. This is fixed in [git](https://github.com/boostorg/python/commit/3e405b6fd5db5615bbef241763de070118222ca7). +* Boost.Fusion has a regression with non-constexpr types. [#11211](https://svn.boost.org/trac/boost/ticket/11211) + This + is fixed in some PRs: [Github + PR #70](https://github.com/boostorg/fusion/pull/70), [Github + PR #71](https://github.com/boostorg/fusion/pull/71), [Github + PR #72](https://github.com/boostorg/fusion/pull/72) + Patches: + + + +* [0001-Fix-exec\_file-for-Python-3-3.4.patch](/patches/1_58_0/0001-Fix-exec_file-for-Python-3-3.4.patch) + (for libs/python). +* [0002-Fix-a-regression-with-non-constexpr-types.patch](/patches/1_58_0/0002-Fix-a-regression-with-non-constexpr-types.patch) + (for libs/fusion). + +### New Libraries + + +* [Endian](/libs/endian): + Types and conversion functions + for correct byte ordering and more regardless of processor endianness. +* [Sort](/libs/sort/): + Includes spreadsort, a general-case + hybrid radix sort that is faster than O(n\*log(n)) + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Ensured errors generated by Windows' `ConnectEx` + function are mapped to their portable equivalents ([#10744](https://svn.boost.org/trac/boost/ticket/10744)). + + Added new macro `BOOST\_ASIO\_DISABLE\_CONNECTEX` + to allow use of `ConnectEx` + to be explicitly disabled. + + Fixed a race condition in `windows::object\_handle` + when there are pending wait operations on destruction ([#10624](https://svn.boost.org/trac/boost/ticket/10624)). + + Fixed IPv6 address parsing on FreeBSD, where a trailing scope ID + would cause conversion to fail with `EINVAL`. + + Worked around shared library visibility issues by ensuring Asio types + use default visibility ([#9465](https://svn.boost.org/trac/boost/ticket/9465), [#11070](https://svn.boost.org/trac/boost/ticket/11070)). + + Changed the SSL wrapper to call the password callback when loading + an in-memory key ([#10828](https://svn.boost.org/trac/boost/ticket/10828)). + + Fixed false SSL error reports by ensuring that the SSL error queue + is cleared prior to each operation. + + Fixed an `ssl::stream<>` + bug that may result in spurious 'short read' errors. + + Removed a redundant null pointer check in the SSL engine ([#10088](https://svn.boost.org/trac/boost/ticket/10088)). + + Added options for disabling TLS v1.1 and v1.2 ([#10690](https://svn.boost.org/trac/boost/ticket/10690)). + + Removed use of deprecated OpenSSL function `ERR\_remove\_state`. + + Fixed detection of various C++11 features with Clang ([#8835](https://svn.boost.org/trac/boost/ticket/8835), + [#10884](https://svn.boost.org/trac/boost/ticket/10884)). + + Fixed detection of C++11 `std::addressof` + with g++ ([#10982](https://svn.boost.org/trac/boost/ticket/10982)). + + Changed multicast test to treat certain `join\_group` + failures as non-fatal. + + Decoupled Asio unit tests from Boost.Test ([#11116](https://svn.boost.org/trac/boost/ticket/11116)). + + Changed the tutorial to use `std::endl` + to ensure output is flushed. + + Fixed an unsigned integer overflow reported by Clang's integer sanitizer. + + Added support for move-only return types when using a `yield\_context` object with asynchronous + operations. + + Changed `yield\_context` + to allow reentrant calls to the completion handler from an initiating + function. + + Updated detection of Windows Runtime to work with latest Windows + SDK. +* [Chrono](/libs/chrono/): + + + *Version* 2.0.5 + + *Fixes:* + + - [#10778](http://svn.boost.org/trac/boost/ticket/10778) + VC14 CTP4 Atomic don't compile with boost::chrono durations + which are not TriviallyCopyable + - [#10840](http://svn.boost.org/trac/boost/ticket/10840) + Missing std:: qualifier for puts call in test\_7868.cpp + - [#10851](http://svn.boost.org/trac/boost/ticket/10851) + Missing std:: qualifier for puts call in time\_point\_output.cpp + - [#10893](http://svn.boost.org/trac/boost/ticket/10893) + Minor doc typo in Boost.Chrono + - [#10992](http://svn.boost.org/trac/boost/ticket/10992) + Chrono IO state savers inconsistent with Boost.IO state savers + - [#10995](http://svn.boost.org/trac/boost/ticket/10995) + duration\_put::put\_value truncates fractional part + - [#11006](http://svn.boost.org/trac/boost/ticket/11006) + Impossible to instantiate time\_fmt\_io\_saver due to several + errors. + - [#11012](http://svn.boost.org/trac/boost/ticket/11012) + chrono\_io v2 fail to compile with boost::chrono::duration< + boost::rational > +* [Container](/libs/container/): + + + Experimental `small\_vector` + container. + + Massive dependency reorganization. Now *Boost.Container* + depends on very basic utilities like Boost.Core and *Boost.Intrusive*. + Preprocessed code size have decreased considerably and compilation + times have improved. + + Added `nth` and `index\_of` functions to containers + with random-access iterators (except `basic\_string`). + + Added C++17's `allocator\_traits::is\_always\_equal`. + + Updated containers to implement new constructors as specified in + [2210. + Missing allocator-extended constructor for allocator-aware containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2210). + + Fixed bugs: + + - [#9931: + *"flat\_map::insert(ordered\_unique\_range\_t...) + fails with move\_iterators"*](https://svn.boost.org/trac/boost/ticket/9931) (reopened). + - [#11076: + *"Unqualified calls to memmove/memcpy in container/detail/copy\_move\_algo.hpp"*](https://svn.boost.org/trac/boost/ticket/11076). + - [Trac + #10790 (*long long errors from container"*)](https://svn.boost.org/trac/boost/ticket/10790). + - [Trac + #10808 (*compare equal operator of vector is broken"*)](https://svn.boost.org/trac/boost/ticket/10808). + + *Source Breaking*: `scoped\_allocator\_adaptor`'s + `propagate\_on\_container\_copy\_assignment`, + `propagate\_on\_container\_move\_assignment` + and `propagate\_on\_container\_swap` + are no longer `::boost::integral\_constant` types. The dependency reorganization + needed to break with those classes to avoid MPL dependencies, and + interoperability with `std::integral\_constant` + was not guaranteed. Code assumming `boost::true\_type/boost::false\_type` + on this will not compile. As a workaround, use the guaranteed internal + `::value` + constant: `::boost::integral\_constant::propagate\_on\_container\_move\_assignment::value>`. +* [Context](/libs/context/): + + + support for ARM/iOS (32+64 bit) + + class execution\_context (C++14) +* [Conversion](/libs/conversion/): + + + `polymorphic\_pointer\_downcast` + and `polymorphic\_pointer\_cast` + functions were added (thanks to Boris Rasin) [#10780](https://svn.boost.org/trac/boost/ticket/10780) + + All the functions now throw exceptions using `boost::throw\_exception` + + Documnetation update +* [DateTime](/libs/date_time/): + + + Restored `to\_time\_t` + function. + + Renamed variable v\_type to var\_type so it longer conflicts with an + AIX system variable. + + Documnetation fixes. +* [Flyweight](/libs/flyweight/): + + + Added hash support both with `std::hash` + and [`boost::hash`](/doc/html/hash.html). + This can be optionally [disabled](/libs/flyweight/doc/reference/flyweight.html#disable_hash_support) + to avoid clashes with legacy code where this support has already + been defined by the user. + + Maintenance fixes. +* [Function](/libs/function/): + + + Added support for functions accepting C++11 rvalues and Boost.Move + rvalues [#10585](https://svn.boost.org/trac/boost/ticket/10585). +* [Functional/Factory](/libs/functional/factory/): + + + Minor breaking change: the default template parameter to indicate + that it shouldn't use an allocator is now `void`, + instead of `boost::none\_t`. + For details, see the [changelog](/libs/functional/factory/doc/html/#boost_functional_factory.changes). +* [Fusion](/libs/fusion/): + + + Automatic hash creation function ([Github + PR #12](https://github.com/boostorg/fusion/pull/12)) + + New ADAPT\_STRUCT, ADAPT\_ADT, ADAPT\_ASSOC\_ that deduce the members + types ([#9516](https://svn.boost.org/trac/boost/ticket/9516)). + + Add convert implementation for Boost.Tuple and std::tuple. + + Add mpl::clear implementation for Boost.Tuple and std::tuple. + + Use boost::declval instead of std::declval, ([#10190](https://svn.boost.org/trac/boost/ticket/10190)). + + Remove use of `boost::blank` + ([#8622](https://svn.boost.org/trac/boost/ticket/8622)). + + Add result\_of::{copy,move} ([#5886](https://svn.boost.org/trac/boost/ticket/5886)). + + Better constexpr and noexcept support. + + Improved SFINAE Friendliness of many metafunctions ([#10676](https://svn.boost.org/trac/boost/ticket/10676), + [#10443](https://svn.boost.org/trac/boost/ticket/10443)). + + result\_of::size::value and result\_of::size::type::value are the same + type now ([#7304](https://svn.boost.org/trac/boost/ticket/7304)) + + result\_of::at::type is now defined when sizeof of sequence + is less than N ([#6507](https://svn.boost.org/trac/boost/ticket/6507), [#7651](https://svn.boost.org/trac/boost/ticket/7651)) + + Fix missing includes ([#8457](https://svn.boost.org/trac/boost/ticket/8457)). + + Many documentation fixes & improvements ([#6090](https://svn.boost.org/trac/boost/ticket/6090), [#5324](https://svn.boost.org/trac/boost/ticket/5324), + [GitHub PR + #33](https://github.com/boostorg/fusion/pull/33), [GitHub + PR #53](https://github.com/boostorg/fusion/pull/53), [GitHub + PR #56](https://github.com/boostorg/fusion/pull/56)) +* [Geometry](/libs/geometry/): + + + *Additional functionality:* + + - New algorithm num\_segments, returning the number of segments + of a geometry + - New overload for is\_valid algorithm, that takes a string reference + as a second argument and fills it with a message related to + the validity or invalidity of the geometry + - New overload for is\_valid algorithm, that takes an enum reference + as a second argument and fills it with a value related to the + validity or invalidity of the geometry + - Disjoint and intersects support the following geometry combinations: + point/multipoint, multipoint/multipoint, multipoint/segment, + multipoint/box + + *Improvements:* + + - Buffer now supports flat-ends for linestrings with a bend close + to the start (such that buffered segment crosses flat-end). + - Buffer performance is improved significantly + - Partition performance is improved significantly for polygons, + potentially enhancing all overlay operations + + *Solved tickets:* + + - [#8379](https://svn.boost.org/trac/boost/ticket/8379) + Invalid comparison of the result of determinant + - [#10108](https://svn.boost.org/trac/boost/ticket/10108) + Error in overlay operations in specific cases where geometries + touch at one point + - [#10201](https://svn.boost.org/trac/boost/ticket/10201) + Suggestion to use different function to compare coordinates + [wontfix] + - [#10467](https://svn.boost.org/trac/boost/ticket/10467) + Template parameter name coliding with B0 macro name defined + in termios.h + - [#10640](https://svn.boost.org/trac/boost/ticket/10640) + Invalid result of buffer() for CCW Polygons. + - [#10666](https://svn.boost.org/trac/boost/ticket/10666) + MSVC compiler warning C4127: conditional expression is constant + - [#10747](https://svn.boost.org/trac/boost/ticket/10747) + Error in rescaling causing errors in areal/areal set operations + - [#10770](https://svn.boost.org/trac/boost/ticket/10770) + Buffer fails for large distances, or rough round joins, where + concavities where not intersected properly + - [#10658](https://svn.boost.org/trac/boost/ticket/10658) + sym\_difference yields bad result for int polygons + - [#10835](https://svn.boost.org/trac/boost/ticket/10835) + Difference of multilinestring and polygon yields wrong result + - [#10861](https://svn.boost.org/trac/boost/ticket/10861) + Rtree failing to compile for Value being a pair or a tuple + containing pointer to Geometry and the default equal\_to<> + used + - [#10863](https://svn.boost.org/trac/boost/ticket/10863) + Template parameter name coliding with B0 macro name defined + in termios.h (duplicate of 10467) + - [#10887](https://svn.boost.org/trac/boost/ticket/10887) + Invalid result of within() and relate() for Linear/MultiPolygon + - [#10890](https://svn.boost.org/trac/boost/ticket/10890) + Invalid result of disjoint() for Point/Segment. + - [#10904](https://svn.boost.org/trac/boost/ticket/10904) + Invalid calculation of most significant Dimension of a segment + in relate\_cartesian\_segments strategy + - [#10912](https://svn.boost.org/trac/boost/ticket/10912) + Invalid result of within() and relate() for Areal/Areal + - [#10951](https://svn.boost.org/trac/boost/ticket/10951) + Tests failing on windows with intel compiler due to lack of + /bigobj flag. + - [#10957](https://svn.boost.org/trac/boost/ticket/10957) + Assertion failure and invalid results of various relational + operations. + - [#10958](https://svn.boost.org/trac/boost/ticket/10958) + Invalid results of disjoint() L/L and L/A. + - [#10959](https://svn.boost.org/trac/boost/ticket/10959) + Assertion failure in get\_turns() used with no\_rescale\_policy. + - [#10960](https://svn.boost.org/trac/boost/ticket/10960) + Invalid result of get\_turns() for L/A, missing turn. + - [#10961](https://svn.boost.org/trac/boost/ticket/10961) + Invalid result of get\_turns() for L/A, invalid turn for a Linear + spike. + - [#11112](https://svn.boost.org/trac/boost/ticket/11112) + Compilation failure on Solaris due to a CS name clash (used + for a macro on this platform) + - [#11121](https://svn.boost.org/trac/boost/ticket/11121) + Invalid result of difference() for integral coordinates + + *Bugfixes:* + + - Bug in multipoint/polygon multipoint/multipolygon distance + computation (wrong detection of points inside the areal geometry) + - Bug in flatten\_iterator's assignment operator causing an access + violation + - Bug in Cartesian segment-segment intersection strategy when + one segment degenerates to a point and is collinear to the + other non-degenerate segment + - Bug in centroid(), non-deterministic result if calculated for + e.g. a Polygon with zero-area. + - Bug in buffers for joins with a limited number of points + - Bug in buffers for round joins with limited number of points + around sharp corners + - Bug in buffers for joins with large buffer distances + - Bug in buffers for round ends with an odd number of points + - Bug in buffers for flat ends with large buffer distances + - Bug in buffers for interior rings with large negative buffer + distances + - Bug in closing\_iterator not working properly when the input + range is empty + - Bug in is\_simple, not handling properly closed simple linestrings + within multilinestrings + - Bug in rtree constructors taking a pair of Iterators or a Range + (packing algorithm), the use of reference to destroyed temporary + when Iterator's reference is not true reference, e.g. for some + of the Range Adaptors. It also affects distance() and comparable\_distance(). + This bug may cause unexpected behavior of the rtree or distance() + algorithm, e.g. an assertion failure or a SEGFAULT. + - Bug in rtree count() member function, the use of reference + to destroyed temporary when object of type convertible but + not the same as value\_type or indexable\_type is passed. If + this happens, wrong result may be returned, in most cases 0. + - Bugs related to the handling of Ranges, preventing compilation + of Geometries using non-Container Ranges in some algorithms + (thanks to Samuel Debionne) +* [Hash](/libs/functional/hash/): + + + Fixed strict aliasing violation ([GitHub + #3](https://github.com/boostorg/functional/pull/3)). +* [Interprocess](/libs/interprocess/): + + + Reduced some compile-time dependencies. Updated to Boost.Container + changes. + + Fixed bugs: + + - [GitHub + Pull #13 (*"haiku: we don't have XSI shared memory, + so don't try to use it"*)](https://github.com/boostorg/interprocess/pull/13). +* [Intrusive](/libs/intrusive/): + + + Reduced compile-time dependencies, headers, and the use of Boost.Preprocessor, + specially for hooks and iterators. + + Fixed bugs: + + - [Boost + Trac #6720: *intrusive::unordered\_set::clear\_and\_dispose + does not compile on VC11 Beta when passed a stateless lambda*](https://svn.boost.org/trac/boost/ticket/6720) + - [Boost + Trac #10771: *remove\_if is broken for slist*](https://svn.boost.org/trac/boost/ticket/10771) + - [Boost + Trac #10853: *problem with detection of const\_cast\_from*](https://svn.boost.org/trac/boost/ticket/10853) + - [Boost + Trac #10987: *bug in any\_xxx\_node\_traits, returning + by reference*](https://svn.boost.org/trac/boost/ticket/10987) +* [Lexical Cast](/libs/lexical_cast/): + + + Now std::stream is used for conversions to float numbers [#5660](https://svn.boost.org/trac/boost/ticket/5660), + [#6975](https://svn.boost.org/trac/boost/ticket/6975), [#10639](https://svn.boost.org/trac/boost/ticket/10639) +* [Log](/libs/log/): + + + Bug fixes: + + - Fixed thread id formatting. + - Fixed process id formatting. ([#10926](https://svn.boost.org/trac/boost/ticket/10926)) + - Fixed build failure on GNU Hurd. + - Fixed incorrect behavior of text file sink backend in case + if free space on the file system gets exhausted. The sink will + no longer create lots of empty files in attempt to recover. + ([#11016](https://svn.boost.org/trac/boost/ticket/11016)) + - Fixed incorrect behavior of `attribute\_set::insert()` in some cases. The inserted + elements could have made some previously inserted elements + not findable. ([#11106](https://svn.boost.org/trac/boost/ticket/11106)) + - Fixed incorrect behavior of `attribute\_value\_set::size()` if a large number of attribute + values are inserted into the set. ([#11148](https://svn.boost.org/trac/boost/ticket/11148)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + Added two new special functions - trigamma and polygamma. + + Large update to the Elliptic integral code to use Carlson's latest + algorithms - these should be more stable, more accurate and slightly + faster than before. Also added support for Carlson's RG integral. + + Added ellint\_d, jacobi\_zeta and heuman\_lambda elliptic integrals. + + Fixed namespace scope constants so they are constexpr on conforming + compilers, see [#10901](https://svn.boost.org/trac/boost/ticket/10901). + + Fixed various cases of spurious under/overflow in the incomplete + beta and gamma functions, plus the elliptic integrals, with thanks + to Rocco Romeo. + + Fix 3-arg legendre\_p and legendre\_q functions to not call the policy + based overload if the final argument is not actually a policy. + + Cleaned up some dead code in the incomplete beta function, see [#10985](https://svn.boost.org/trac/boost/ticket/10985). + + Fixed extreme-value pdf for large valued inputs, see [#10938](https://svn.boost.org/trac/boost/ticket/10938). + + Switched documentation to use SVG rather than PNG graphs and equations + - browsers seem to have finally caught up! +* [Move](/libs/move/): + + + Added `BOOST\_MOVE\_BASE` + utility. + + Added `adl\_move\_swap` + utility. + + Reduced dependencies on other Boost libraries to make the library + a bit more lightweight. + + Fixed bugs: + + - [Trac + #11044: *"boost::rv inherits off union, when + such passed as template argument"*](https://svn.boost.org/trac/boost/ticket/11044). +* [Multi-index Containers](/libs/multi_index/index.html): + + + The efficiency of lookup operations has improved in situations where + they involve the generation of temporary values of `key\_type`. Consider for instance + the following code: + + + ``` + typedef multi\_index\_container< + std::string, + indexed\_by< + ordered\_unique > + > + > multi\_t; + ... + multi\_t m=...; + m.find("boost"); // passed a const char\*, not a std::string + + ``` + + + In previous versions of the library, the `find` + operation generates several temporary `std::string`s + (one every time an internal comparison is made). In sufficiently + advanced compilers, this is now avoided so that only one temporary + is created. + + Maintenance fixes. +* [Multiprecision](/libs/multiprecision/): + + + Changed `frexp` to + always be non-expression template generating, see: [10993](https://svn.boost.org/trac/boost/ticket/10993). + + Improved support of cpp\_dec\_float on Cygwin and other platforms with + missing long double support, see [10924](https://svn.boost.org/trac/boost/ticket/10924). + + Improved noexcept support and added some more tests, see [10990](https://svn.boost.org/trac/boost/ticket/10990). + + Various workarounds applied for Intel-15.0 and Solaris-12.4 compilers. +* [Optional](/libs/optional/): + + + Improved documentation; documented IO operations and header files. + + *Fixed Bugs:* + + - `boost::none\_t` is no longer convertible + from literal 0. This avoids a bug where `optional> oi + = 0;` would initialize an optional + object with no contained value. + - Added a way to manually disable move semantics: just define + macro `BOOST\_OPTIONAL\_CONFIG\_NO\_RVALUE\_REFERENCES`. + This can be used to work around [#10399](http://svn.boost.org/trac/boost/ticket/10399). + - [#10825](http://svn.boost.org/trac/boost/ticket/10825) + Improved the trick that prevents streaming out `optional` without header + `optional\_io.hpp` + by using safe-bool idiom. + - [#11087](http://svn.boost.org/trac/boost/ticket/11087) + It is no longer possible to assign `optional` to `optional` when `U` + is not assignable or convertible to `T`. + - [#10839](http://svn.boost.org/trac/boost/ticket/10839) + Value accessors now work correctly on rvalues of `optional`. +* [Phoenix](/libs/phoenix/): + + + Version 3.2.0 + + *New Features:* + + - Phoenix now has a *lazy list* implementation + as an optional extension. + + *New Example:* + + - A new example *bind\_goose* shows the compatibility + between *boost bind* and *boost + phoenix bind*. + + *Fixed Bugs:* + + - [#10927](http://svn.boost.org/trac/boost/ticket/10927) + Missing `std::` qualifier for `fabs` in `phoenix/test/stdlib/cmath.cpp` + - [#11085](http://svn.boost.org/trac/boost/ticket/11085) + Missing qualifier for pow call in `phoenix/test/function/function\_tests.cpp` + - Fixes for a number of cases failing with *bind*, + *lambda* and *let*. +* [Predef](/libs/predef/): + + + Version 1.2 + + Added Visual Studio 2015 detection. + + Added detection of Haiku OS. + + Fix Android endian detection. + + Added `predef\_check` + program and BBv2 integration for build configuration checks. +* [Random](/libs/random/): + + + Added non\_central\_chi\_squared\_distribution. +* [Thread](/libs/thread/): + + + *Version* 4.5.0 + + *New Experimental Features:* + + - [#9600](http://svn.boost.org/trac/boost/ticket/9600) + Async: Add task\_region + - [#10611](http://svn.boost.org/trac/boost/ticket/10611) + Add emplace promise::set\_value and emplace make\_ready\_future + - [#10826](http://svn.boost.org/trac/boost/ticket/10826) + Add scheduled executor operations + - [#11048](http://svn.boost.org/trac/boost/ticket/11048) + Add a serial\_executor based on continuations + + *Fixed Bugs:* + + - [#6787](http://svn.boost.org/trac/boost/ticket/6787) + boost::thread::sleep() hangs if system time is rolled back + - [#10734](http://svn.boost.org/trac/boost/ticket/10734) + Submit method work differently on different executors, some + throw exception and some silently ignore error (thread\_executor + and inline\_executor) + - [#10736](http://svn.boost.org/trac/boost/ticket/10736) + Task exceptions silently ignored. I think std::terminate solution + from N3785 and std::thread is better choice and more consistent. + - [#10737](http://svn.boost.org/trac/boost/ticket/10737) + In serial\_executor we have infinite wait if task throw exception. + - [#10822](http://svn.boost.org/trac/boost/ticket/10822) + Boost.Thread fails to compile on Android + - [#10824](http://svn.boost.org/trac/boost/ticket/10824) + Boost.Thread 1.57 breaks Windows XP compatibility for SP2 and + below. + - [#10963](http://svn.boost.org/trac/boost/ticket/10963) + future>::then Has No Implementation + - [#10964](http://svn.boost.org/trac/boost/ticket/10964) + future>::unwrap().then() Deadlocks + - [#10968](http://svn.boost.org/trac/boost/ticket/10968) + The futures returned by async() and future::then() are not + blocking. + - [#10971](http://svn.boost.org/trac/boost/ticket/10971) + shared\_future::get()/get\_or() must be const + - [#10972](http://svn.boost.org/trac/boost/ticket/10972) + shared\_future::then() can be called multiple times. + - [#10979](http://svn.boost.org/trac/boost/ticket/10979) + Support T& type deduction when the make\_ready\_future parameter + is reference\_wrapper + - [#10996](http://svn.boost.org/trac/boost/ticket/10996) + Thread physical\_concurrency() is failing on Windows + - [#11035](http://svn.boost.org/trac/boost/ticket/11035) + BOOST\_HAS\_PTHREAD\_MUTEXATTR\_SETTYPE not defined for Android + - [#11053](http://svn.boost.org/trac/boost/ticket/11053) + The attached code results in a R6025 - pure virtual function + call in run\_thread\_exit\_callbacks +* [TypeErasure](/libs/type_erasure/): + + + Fixed compilation with MSVC 12. +* [TypeIndex](/libs/type_index/): + + + Link time assertions added on platforms that support it +* [Units](/libs/units): + + + Fix for base units with arbitrary dimensions. +* [Unordered](/libs/unordered): + + + Fix move assignment with stateful, propagate\_on\_container\_move\_assign + allocators ([#10777](https://svn.boost.org/trac/boost/ticket/10777)). + + Fix potential overflow when calculating number of buckets to allocate + ([GitHub + #4](https://github.com/boostorg/unordered/pull/4)). + + Other minor changes, see [changelog](/doc/html/unordered/changes.html). +* [Variant](/libs/variant/): + + + **Breaking change:** Compile time checked + getter is now used by default in `boost::get(VariantT)` and `boost::polymorphic\_get(VariantT)`. New getter asserts that type `U` is one of the types that can + be stored in `VariantT`. + Define `BOOST\_VARIANT\_USE\_RELAXED\_GET\_BY\_DEFAULT` + to change default behavior. See [get.hpp](/doc/html/variant/reference.html#header.boost.variant.get_hpp) + and [polymorphic\_get.hpp](/doc/html/variant/reference.html#header.boost.variant.polymorphic_get_hpp) + descriptions for more info [#547](https://svn.boost.org/trac/boost/ticket/547). + + Added missing comparison operators to variant [#8620](https://svn.boost.org/trac/boost/ticket/8620), [#10811](https://svn.boost.org/trac/boost/ticket/10811) + + Multiple documentations fixes [#10273](https://svn.boost.org/trac/boost/ticket/10273), [#10653](https://svn.boost.org/trac/boost/ticket/10653) + + Variadic templats enabled on Clang [#10832](https://svn.boost.org/trac/boost/ticket/10832) + + Autodetection of return types for visitors in C++14, which makes + it possible to use `boost::apply\_visitor` + with generic lambdas [#10837](https://svn.boost.org/trac/boost/ticket/10837): + + + ``` + auto str = boost::apply\_visitor( + [](auto v) { + return boost::lexical\_cast(v); + }, + variant\_instance + ); + + ``` + + Improved swap functions [#10882](https://svn.boost.org/trac/boost/ticket/10882) + + Many improvements to variadic templates, even more methods support + variadics. + + Multiple bugfixes and testing improvements including Coveralls integration + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4 + + Clang, C++14: 3.5, 3.6 + + GCC: 4.4.7, 4.9.2 + + GCC, C++98: 4.8.1, 4.8.2 + + GCC, C++11: 4.4.7, 4.8.4, 4.9.2 + + GCC, C++14: 4.9.2 +* Windows: + + + GCC, mingw: 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.2 + + Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC: 4.4.2 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4 + + Clang, C++14: 3.5, 3.6 + + GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.9.2, 5.0.0 (experimental) + + GCC, C++11: 4.4.7, 4.8.4, 4.9.2 + + GCC, C++14: 4.9.2 +* Windows: + + + GCC, mingw: 4.4.7, 4.5.4, 4.6.4, 4.7.3 + + Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android + + + Clang: 3.4, 3.5 + + GCC: 4.8, 4.9 +* FreeBSD: + + + GCC: 4.2.1 +* QNX: + + + QCC: 4.4.2 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_59_0.html b/users/history/version_1_59_0.html new file mode 100644 index 0000000..a630a89 --- /dev/null +++ b/users/history/version_1_59_0.html @@ -0,0 +1,382 @@ +--- +title: Version 1.59.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.59.0 + +/\*\*/ + + + + + + + +Version 1.59.0 +============== + +Version 1.59.0 +-------------- + + +August 13th, 2015 15:23 GMT + + +[Documentation](/doc/libs/1_59_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_59\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.bz2) | +| [boost\_1\_59\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz) | +| windows | [boost\_1\_59\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.7z) | +| [boost\_1\_59\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.zip) | + + +### Known Issue + + +* Boost.Log contains has a regression that prevents some of the logging statements + from compiling ([#11549](https://svn.boost.org/trac/boost/ticket/11549)). This is fixed in [git](https://github.com/boostorg/log/commit/7da193fde1a9c1bc925ee980339f4df2e1a66fa7). + +### New Libraries + + +* [Convert](/libs/convert/): + An extendible and configurable + type-conversion framework, from Vladimir Batov. +* [Coroutine2](/libs/coroutine2/): + (C++14) Coroutine + library, from Oliver Kowalke. + +### Updated Libraries + + +* [Container](/libs/container/): + + + [GitHub + #26: *Fix bug in stable\_vector::capacity()*](https://github.com/boostorg/container/pull/26). + Thanks to timsong-cpp/Arindam Mukerjee. + + [GitHub + #27: *fix stable\_vector's index\_of's doxygen comment*](https://github.com/boostorg/container/pull/27). + Thanks to kariya-mitsuru. + + [Trac #11380: + *"Container library std forward declarations incorrect + in std\_fwd.hpp on libc++ with gcc"*](https://svn.boost.org/trac/boost/ticket/11380). + + [Trac #11388: + *"boost::container::list::emplace\_back broken on Visual + Studio 2010"*](https://svn.boost.org/trac/boost/ticket/11388). + + [Trac #11339: + *"VC12 LNK2005 error with boost::container::adaptive\_pool"*](https://svn.boost.org/trac/boost/ticket/11339). +* [Context](/libs/context/): + + + [#11223](https://svn.boost.org/trac/boost/ticket/11223) check support for std::integer\_sequence + + execution\_context uses internally Windows Fibers with BOOST\_USE\_WINFIBERS + + support of assember for MinGW on Windows (32bit) +* [Coroutine](/libs/coroutine/): + + + [#10978](https://svn.boost.org/trac/boost/ticket/10978) remove additional semicolons + + [#11230](https://svn.boost.org/trac/boost/ticket/11230) coroutine\_error returns dangling exception message pointer + + [#11234](https://svn.boost.org/trac/boost/ticket/11234) doesn't compile when used with boost::range::algorithms + + [#11356](https://svn.boost.org/trac/boost/ticket/11356) coroutines segfaults with BOOST\_USE\_SEGMENTED\_STACKS +* [Fusion](/libs/fusion/): + + + Add a new concept, `Unbounded + Sequence` for sequence and + `Unbounded Iterator` + for iterator. Currently, `Unbounded + Sequence` affects the behaviour + of `fusion::(value\_)at(\_c)` + and `fusion::(value\_)at\_key`. `Unbounded + Iterator` has no effect + (reserved for future release). For more details, see [Unbounded + Sequence](libs/fusion/doc/html/fusion/sequence/concepts/unbounded_sequence.html) and [Unbounded + Iterator](/libs/fusion/doc/html/fusion/iterator/concepts/unbounded_iterator.html). ([pull-request + 85](https://github.com/boostorg/fusion/pull/85)) + + Support C++11 variadic templates for `fusion::list`. + ([pull-request + 84](https://github.com/boostorg/fusion/pull/84)) + + *Fixed bugs:* + + - Fix missing include ``. + ([#11161](https://svn.boost.org/trac/boost/ticket/11161)) + - Revert some constexpr support, regression in 1.58.0. ([#11211](https://svn.boost.org/trac/boost/ticket/11211), + [#11267](https://svn.boost.org/trac/boost/ticket/11267)) + - Fix compile error with fold due to missing include. ([#11249](https://svn.boost.org/trac/boost/ticket/11249)) + - Fix compile error with adapting an empty struct, regression + in 1.58.0. ([#11269](https://svn.boost.org/trac/boost/ticket/11269)) + - Remove use of obsolete (and incorrect) workaround for sequence + comparison, it affects MSVC-8 and earlier. ([pull-request + 78](https://github.com/boostorg/fusion/pull/78)) + - Fix compile error while copying a sequece which derived from + fusion::list, regression in 1.58.0. ([pull-request + 87](https://github.com/boostorg/fusion/pull/87)) + - Fix compile error on copying a fusion::tuple. ([#11140](https://svn.boost.org/trac/boost/ticket/11140)) + - Add workarounds for GCC 4.6 with constexpr. ([#11517](https://svn.boost.org/trac/boost/ticket/11517)) +* [Geometry](/libs/geometry/): + + + *Additional functionality:* + + - Added rtree const\_iterator, begin(), end() and the support + for Boost.Range. + - The support for C++11 `std::initializer\_list` + in geometries models. + - Disjoint and intersects support the following geometry combinations: + multipoint/linestring, multipoint/multilinestring. + - Added relate() and relation() algorithms. + - Intersection has been implemented for combinations of pointlike + and linear geometries + - Added implementation for difference(pointlike, linear) + - New algorithm is\_empty, returning true if the geometry represents + the empty set + - The envelope algorithm supports pointlike and linear geometries + in the spherical equatorial coordinate system + - The envelope algorithm supports pointlike geometries in the + geographic coordinate system + + *Improvements:* + + - Upgraded rtree const\_query\_iterator category to ForwardIterator. + - Buffer performance of buffers around multi-points is improved + significantly + + *Breaking changes:* + + - buffer side strategy now returns error\_code instead of bool. + If you have your own custom side strategy, it should be adapted + + *Solved tickets:* + + - [#11113](https://svn.boost.org/trac/boost/ticket/11113) + Support easy enumeration of all elements with BOOST\_FOREACH + - [#11232](https://svn.boost.org/trac/boost/ticket/11232) + Feature request - relate() + - [#11236](https://svn.boost.org/trac/boost/ticket/11236) + Invalid result of centroid() for integer coordinate type + - [#11268](https://svn.boost.org/trac/boost/ticket/11268) + Regression in boost::geometry::intersection interface with + multi\_linestring and box -- does not compile on 1.57 VS 1.55 + - [#11332](https://svn.boost.org/trac/boost/ticket/11332) + Assertion failure in buffer for extreme coordinate differences + - [#11346](https://svn.boost.org/trac/boost/ticket/11346) + Segment iterator does not work with ranges returning values + instead of references + - [#11436](https://svn.boost.org/trac/boost/ticket/11436) + sym\_difference(py1, py2, mpy) returns invalid multipolygon + + *Bugfixes:* + + - Buffer: use a more robust way to calculate the side of an intersection, + this fixes several errors in buffer generation + - Fix in selection of segment to which calculate from IP from, + in intersection of two segments. Now is selected the one close + to a segment-point point, or else the one on the shortest segment. + This avoids (rarely occuring) generation of tiny triangles + making output polygons invalid + - In rescaling round instead of truncate to the integer grid + (this fix and the previous mentioned can have some impact on + output geometries) + - Fix potential infinite loop in detail::has\_spikes (the loop + can happen if the points passed have NaN coordinates) +* [Interprocess](/libs/interprocess/): + + + [( Trac + #5139 ( (*"Initial Stream Position in Boost.Interprocess.Vectorstream"*)](https://svn.boost.org/trac/boost/ticket/5139). + + [GitHub + Pull #19 (*"Fix exception visibility"*)](https://github.com/boostorg/interprocess/pull/19). + Thanks to Romain-Geissler. +* [Intrusive](/libs/intrusive/): + + + Implemented map and multimap-like + interfaces. + + Refactored hashtable containers to reduce template instantiations. +* [Lexical Cast](/libs/lexical_cast/): + + + Fixed warnings + + Simplified metaprogramming (thanks to Edward Diener) +* [Log](/libs/log/): + + + General changes: + + - On systems with [symbol + visibility](https://gcc.gnu.org/wiki/Visibility) support (e.g. Linux) the library is now + built with all internal symbols hidden. + - **Breaking change:** The library + has been ported to Boost.TypeIndex for its underlying type + info management tool. This affected the following public interfaces: + + * `invalid\_type` + exceptions thrown by the library now have `typeindex::type\_index` attached + as the description of the offending type. The type was + previously identified by `type\_info\_wrapper`. + * Boost.Exception `type\_info\_info` + error information now contains `typeindex::type\_index` + instead of `type\_info\_wrapper`. + * `attribute\_value::get\_type()` now returns `typeindex::type\_index` instead + of `type\_info\_wrapper`. + User-defined attribute value implementations should be + similarly changed (the `attribute\_value::impl::get\_type()` virtual method now + also returns `typeindex::type\_index`). + - `type\_info\_wrapper` + component has been deprecated and will be removed in future + releases. Boost.TypeIndex is recommended as a replacement. + - Removed the previously deprecated headers: `boost/log/utility/intrusive\_ref\_counter.hpp`, + `boost/log/utility/explicit\_operator\_bool.hpp`, `boost/log/utility/empty\_deleter.hpp`. + - Added support for building the library for OpenBSD. ([#11446](https://svn.boost.org/trac/boost/ticket/11446)) + - Improved internal implementation of the event synchronization + primitive used for asynchronous logging. ([#11398](https://svn.boost.org/trac/boost/ticket/11398)) + + Bug fixes: + + - Fixed incorrect behavior of `attribute\_value\_set::insert()` and `attribute\_value\_set` + constructor in some cases. ([#11190](https://svn.boost.org/trac/boost/ticket/11190)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Move](/libs/move/): + + + Changed `unique\_ptr`'s + converting constructor taking the source by value in C++03 compilers + to allow simple conversions from convertible types returned by value. + + [Trac #11229: + *"vector incorrectly copies move-only objects using + memcpy"*](https://svn.boost.org/trac/boost/ticket/11229), +* [Multi-index Containers](/libs/multi_index/index.html): + + + Added [ranked + indices](/libs/multi_index/doc/tutorial/indices.html#rnk_indices). + + Maintenance fixes. +* [Predef](/libs/predef/): + + + Fix many problems with `predef\_check` + functionality. + + Update SunPro detection to accomodate latest version of compiler + from Oracle. + + Add `and` and `or` logical operators for `predef\_check` expression on the + Boost Build side. + + Fix `BOOST\_ARCH\_PARISC` + to correctly spelled name. + + Fix `MAKE\_YYYYM` macros + to correctly limit the month. +* [Program Options](/libs/program_options/): + + + Fix compilation errors, missing dllexport and warnings with MSVC + and MinGW (Daniela Engert, Marcel Raad). + + Fix unintialized fields (Zoey Greer). + + Stop options with implicit value from consuming separate tokens (Michael + John Decker). + + Make multitoken limit be max int, not 32K (Hans Hohenfeld). + + Code formatting and documentation fixes (Jurko Gospodnetić, Lauri + Nurmi). + + Minimal support for no-rtti build (Minmin Gong) + + Don't increment environment pointer past the end (Vladimir Prus) +* [Property Tree](/libs/property_tree/): + + + A new JSON parser with full Unicode support. + + **Breaking change:** The new parser + does not support comments or string concatenation in JSON files. + These features were non-standard extensions of the old parser but + their removal could break code which was relying on them. +* [Boost.Test v3](/libs/test/): + + + Major new features + + - `BOOST\_TEST` + generic assertion + - data driven test cases + - test units can now have *attributes* for + finer control over tests behavior (logical grouping, test dependencies, + test enabling/disabling) + - CLI learned `colour\_output` + and `list\_content`, + extended unit test filtering (negation, labels) + - refactored and rewritten documentation using quickbook + + Addressed issues: + + - [#2018](https://svn.boost.org/trac/boost/ticket/2018) [#2450](https://svn.boost.org/trac/boost/ticket/2450) [#2600](https://svn.boost.org/trac/boost/ticket/2600) [#2717](https://svn.boost.org/trac/boost/ticket/2717) [#2759](https://svn.boost.org/trac/boost/ticket/2759) [#3182](https://svn.boost.org/trac/boost/ticket/3182) [#3316](https://svn.boost.org/trac/boost/ticket/3316) [#3392](https://svn.boost.org/trac/boost/ticket/3392) [#3402](https://svn.boost.org/trac/boost/ticket/3402) [#3445](https://svn.boost.org/trac/boost/ticket/3445) + - [#3463](https://svn.boost.org/trac/boost/ticket/3463) [#3542](https://svn.boost.org/trac/boost/ticket/3542) [#3481](https://svn.boost.org/trac/boost/ticket/3481) [#3495](https://svn.boost.org/trac/boost/ticket/3495) [#3592](https://svn.boost.org/trac/boost/ticket/3592) [#3595](https://svn.boost.org/trac/boost/ticket/3595) [#3623](https://svn.boost.org/trac/boost/ticket/3623) [#3664](https://svn.boost.org/trac/boost/ticket/3664) [#3784](https://svn.boost.org/trac/boost/ticket/3784) [#3785](https://svn.boost.org/trac/boost/ticket/3785) + - [#3811](https://svn.boost.org/trac/boost/ticket/3811) [#3834](https://svn.boost.org/trac/boost/ticket/3834) [#3896](https://svn.boost.org/trac/boost/ticket/3896) [#3932](https://svn.boost.org/trac/boost/ticket/3932) [#3938](https://svn.boost.org/trac/boost/ticket/3938) [#3964](https://svn.boost.org/trac/boost/ticket/3964) [#3978](https://svn.boost.org/trac/boost/ticket/3978) [#3979](https://svn.boost.org/trac/boost/ticket/3979) [#4161](https://svn.boost.org/trac/boost/ticket/4161) [#4275](https://svn.boost.org/trac/boost/ticket/4275) + - [#4389](https://svn.boost.org/trac/boost/ticket/4389) [#4434](https://svn.boost.org/trac/boost/ticket/4434) [#4587](https://svn.boost.org/trac/boost/ticket/4587) [#4806](https://svn.boost.org/trac/boost/ticket/4806) [#4911](https://svn.boost.org/trac/boost/ticket/4911) [#4923](https://svn.boost.org/trac/boost/ticket/4923) [#4924](https://svn.boost.org/trac/boost/ticket/4924) [#4982](https://svn.boost.org/trac/boost/ticket/4982) [#5008](https://svn.boost.org/trac/boost/ticket/5008) [#5036](https://svn.boost.org/trac/boost/ticket/5036) + - [#5262](https://svn.boost.org/trac/boost/ticket/5262) [#5374](https://svn.boost.org/trac/boost/ticket/5374) [#5412](https://svn.boost.org/trac/boost/ticket/5412) [#5563](https://svn.boost.org/trac/boost/ticket/5563) [#5582](https://svn.boost.org/trac/boost/ticket/5582) [#5599](https://svn.boost.org/trac/boost/ticket/5599) [#5718](https://svn.boost.org/trac/boost/ticket/5718) [#5729](https://svn.boost.org/trac/boost/ticket/5729) [#5870](https://svn.boost.org/trac/boost/ticket/5870) [#5972](https://svn.boost.org/trac/boost/ticket/5972) + - [#6002](https://svn.boost.org/trac/boost/ticket/6002) [#6071](https://svn.boost.org/trac/boost/ticket/6071) [#6074](https://svn.boost.org/trac/boost/ticket/6074) [#6161](https://svn.boost.org/trac/boost/ticket/6161) [#6766](https://svn.boost.org/trac/boost/ticket/6766) [#6712](https://svn.boost.org/trac/boost/ticket/6712) [#6748](https://svn.boost.org/trac/boost/ticket/6748) [#7046](https://svn.boost.org/trac/boost/ticket/7046) [#7136](https://svn.boost.org/trac/boost/ticket/7136) [#7410](https://svn.boost.org/trac/boost/ticket/7410) [#7894](https://svn.boost.org/trac/boost/ticket/7894) + - [#8201](https://svn.boost.org/trac/boost/ticket/8201) [#8272](https://svn.boost.org/trac/boost/ticket/8272) [#8467](https://svn.boost.org/trac/boost/ticket/8467) [#8862](https://svn.boost.org/trac/boost/ticket/8862) [#8895](https://svn.boost.org/trac/boost/ticket/8895) [#9179](https://svn.boost.org/trac/boost/ticket/9179) [#9272](https://svn.boost.org/trac/boost/ticket/9272) [#9390](https://svn.boost.org/trac/boost/ticket/9390) [#9409](https://svn.boost.org/trac/boost/ticket/9409) [#9537](https://svn.boost.org/trac/boost/ticket/9537) + - [#9539](https://svn.boost.org/trac/boost/ticket/9539) [#9581](https://svn.boost.org/trac/boost/ticket/9581) [#9960](https://svn.boost.org/trac/boost/ticket/9960) [#10318](https://svn.boost.org/trac/boost/ticket/10318) [#10394](https://svn.boost.org/trac/boost/ticket/10394) [#10888](https://svn.boost.org/trac/boost/ticket/10888) [#11054](https://svn.boost.org/trac/boost/ticket/11054) [#11347](https://svn.boost.org/trac/boost/ticket/11347) [#11358](https://svn.boost.org/trac/boost/ticket/11358) [#11359](https://svn.boost.org/trac/boost/ticket/11359) +* [TypeIndex](/libs/type_index/): + + + Removed dependencies on some of the Boost libraries to improve compilation + times and modularity + + Warnings fixed in tests and other maintainance improvements were + done. +* [Variant](/libs/variant/): + + + Fixed missing include in element\_index.hpp [#11196](https://svn.boost.org/trac/boost/ticket/11196), [#11283](https://svn.boost.org/trac/boost/ticket/11283) + + Fixed `boost::apply\_visitor` usage with C++14 + and const references [#11251](https://svn.boost.org/trac/boost/ticket/11251), [#11285](https://svn.boost.org/trac/boost/ticket/11285) + + Relaxed compile time checks for all the `get(variant\_variable)` functions (thanks to Nicolas Cornu) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4 + + Clang, C++14: 3.6 + + GCC: 4.4.7, 4.8.2, 4.9.3 + + GCC, C++11: 4.4.7 + + GCC, C++14: 4.9.3 + + Intel: 15.0 +* Windows: + + + Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6 + + GCC: 4.8, 4.9 +* SunOS: + + + Sun: 6.0 +* QNX: + + + QCC: 4.4.2 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4 + + Clang, C++14: 3.6, 3.7 + + GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 5.1.0, 6.0.0 + + GCC, C++11: 4.4.7 + + GCC, C++14: 4.9.3, 5.1.1 + + Intel: 15.0 +* Android: + + + Clang: 3.6 + + GCC: 4.8, 4.9 +* FreeBSD: + + + Clang: 3.4.1 + + GCC: 4.8.5, 5.1.0, 6.0.0 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_60_0.html b/users/history/version_1_60_0.html new file mode 100644 index 0000000..a33548e --- /dev/null +++ b/users/history/version_1_60_0.html @@ -0,0 +1,608 @@ +--- +title: Version 1.60.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.60.0 + +/\*\*/ + + + + + + + +Version 1.60.0 +============== + +Version 1.60.0 +-------------- + + +December 17th, 2015 15:52 GMT + + +[Documentation](/doc/libs/1_60_0/) + + +Downloads| Platform | File | +| unix | [boost\_1\_60\_0.tar.bz2](http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.bz2) | +| [boost\_1\_60\_0.tar.gz](http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz) | +| windows | [boost\_1\_60\_0.7z](http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.7z) | +| [boost\_1\_60\_0.zip](http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.zip) | + + +### New Libraries + + +* [VMD](/libs/vmd/): + Variadic Macro Data library, + from Edward Diener. + +### Updated Libraries + + +* [Atomic](/libs/atomic/): + + + Enforced proper alignment of `atomic<>` storage. This should fix + possible issues on platforms that support atomic operations on data + units larger than the native word size. This may also change binary + layout of user's data structures that have `atomic<>` members. + + Fixed compilation for PowerPC with IBM XL C++ compiler. Corrected + memory barriers in PowerPC assembler. + + Fixed compilation with MSVC-8 for ARM. + + Fixed compilation with gcc 4.4 for x86-64, when 128-bit atomic operations + were used. ([#10994](https://svn.boost.org/trac/boost/ticket/10994)) + + Optimized some gcc assembler blocks for x86/x86-64 to reduce the + number of used registers. This may require binutils 2.10 or later. +* [Chrono - 2.0.5](/libs/chrono/): + + + *Fixes:* + + - [#10778](http://svn.boost.org/trac/boost/ticket/10778) + VC14 CTP4 Atomic don't compile with boost::chrono durations + which are not TriviallyCopyable + - [#10840](http://svn.boost.org/trac/boost/ticket/10840) + Missing std:: qualifier for puts call in test\_7868.cpp + - [#10851](http://svn.boost.org/trac/boost/ticket/10851) + Missing std:: qualifier for puts call in time\_point\_output.cpp + - [#10893](http://svn.boost.org/trac/boost/ticket/10893) + Minor doc typo in Boost.Chrono + - [#10992](http://svn.boost.org/trac/boost/ticket/10992) + Chrono IO state savers inconsistent with Boost.IO state savers + - [#10995](http://svn.boost.org/trac/boost/ticket/10995) + duration\_put::put\_value truncates fractional part + - [#11006](http://svn.boost.org/trac/boost/ticket/11006) + Impossible to instantiate time\_fmt\_io\_saver due to several + errors. + - [#11012](http://svn.boost.org/trac/boost/ticket/11012) + chrono\_io v2 fail to compile with boost::chrono::duration< + boost::rational > +* [Container](/libs/container/): + + + Implemented Polymorphic + Memory Resources. + + Add more BOOST\_ASSERT checks to test preconditions in some operations + (like `pop\_back`, + `pop\_front`, `back`, `front`, + etc.) + + Added C++11 `back`/`front` operations to `basic_string`. + + Fixed bugs: + + - [Trac + #11627: *"small\_vector::swap() appears + to be broken"*](https://svn.boost.org/trac/boost/ticket/11627). + - [Trac + #11628: *"small\_vector iterates + over elements in destructor"*](https://svn.boost.org/trac/boost/ticket/11628). + - [Trac + #11697: *"Wrong initialization order in tuple + copy-constructor"*](https://svn.boost.org/trac/boost/ticket/11697). + - [Trac + #11698: *"Missing return statement in static\_storage\_allocator"*](https://svn.boost.org/trac/boost/ticket/11698). + - [GitHub + #29: *Doc fixes for flap\_map complexity requirements*](https://github.com/boostorg/container/pull/29). + - [GitHub + #31: *DL\_SIZE\_IMPL also dereference addr*](https://github.com/boostorg/container/pull/31). +* [Context](/libs/context/): + + + [#11603](https://svn.boost.org/trac/boost/ticket/11603) typo in PPC32/MACH-O asm + + support for CYGWIN +* [Core](/libs/core/): + + + In symbol demangling tools, added support for gabi++ ABI implementation + used in Android NDK. + + Added a new `enable\_if\_has\_type` + tool for performing SFINAE checks for presence of a nested type. +* [Filesystem](/libs/filesystem/): + + + *New Features:* + + - Added functions [`lexically\_normal`](/libs/filesystem/doc/reference.html#lex-normal), + [`lexically\_relative`](/libs/filesystem/doc/reference.html#lex-relative), + [`relative`](/libs/filesystem/doc/reference.html#op-relative), and [`weakly\_canonical`](/libs/filesystem/doc/reference.html#weakly_canonical). + Many thanks to Jamie Allsop for his help and perseverance. + Resolves tickets [#1976](https://svn.boost.org/trac/boost/ticket/1976), + [#5897](https://svn.boost.org/trac/boost/ticket/5897), + [#6249](https://svn.boost.org/trac/boost/ticket/6249). + - Class `path` + added types [`reverse\_iterator`](/libs/filesystem/doc/reference.html#path-iterators) + and [`const\_reverse\_iterator`](/libs/filesystem/doc/reference.html#path-iterators), + and added functions [`rbegin()`](/libs/filesystem/doc/reference.html#path-iterators), + and [`rend()`](/libs/filesystem/doc/reference.html#path-iterators). + - C++11 `noexcept` + supplied as specified in the Filesystem TS if supported by + the compiler. + - C++11 move constructors and move assignments supplied as specified + in the Filesystem TS if supported by the compiler. Resolves + [#10291](https://svn.boost.org/trac/boost/ticket/10291). + - Existing functions whose names changed in the Filesystem TS + are now supported under both the old and new names. + - Added [`size()`](/libs/filesystem/doc/reference.html#path-size) + function to class `path`. + Resolves [#6874](https://svn.boost.org/trac/boost/ticket/6874), + Path should have a `size()` member function. + + *Tickets:* + + - Fix [#11733](https://svn.boost.org/trac/boost/ticket/11733), + Missing unistd.h include in boost/libs/filesystem/src/unique\_path.cpp, + by apply a patch from Idar Tollefsen. + - Fix [#5706](https://svn.boost.org/trac/boost/ticket/5706), + unique\_path Fails on Windows for Temporary User Profiles, by + applying [pull + request #15](https://github.com/boostorg/filesystem/pull/15) from Sebastian Redl to fix a race condition + in `unique\_path`. + - Fix [#10591](https://svn.boost.org/trac/boost/ticket/10591), + boost::filesystem does not build on iOS 8, by applying a patch + submitted by Daniel Seither. + - Fix [#9454](https://svn.boost.org/trac/boost/ticket/9454), + Boost Filesystem [library build] not compiling when BOOST\_FILESYSTEM\_NO\_DEPRECATED + is defined, by applying a patch submitted by Makesim. + - Fix [#11447](https://svn.boost.org/trac/boost/ticket/11447), + `\_\_OpenBSD\_\_` + macro name misspelled, by applying a patch submitted by Jasper + Lievisse Adriaanse. + - Fix [#11288](https://svn.boost.org/trac/boost/ticket/11288), + A patch to avoid redundant string allocations, by applying + a patch submitted by Yevhen Ivannikov. + - Resolve [#11175](https://svn.boost.org/trac/boost/ticket/11175), + out-of-date documentation causing users to incorrectly expect + that the library could be used with exceptions disabled. + - Resolve [#11166](https://svn.boost.org/trac/boost/ticket/11166), + by mitigating (i.e. reducing the likelihood of) a possible + external file system race in `remove()`. + - Fix [#7258](https://svn.boost.org/trac/boost/ticket/7258), + `create\_directories` + returns false if the path ends with a slash. Also fix related + issues if path contains dot or dot-dot elements, and added + test cases to the test suite. + - Resolve [#10766](https://svn.boost.org/trac/boost/ticket/10766), + `parent\_path()` with redundant separator + returns wrong value, by adding examples and notes to the reference + documentation to show why the returned value is in fact correct, + and to provide rationale for that behavior. See [path.itr](/libs/filesystem/doc/reference.html#path-iterators), + and [path.decompose](/libs/filesystem/doc/reference.html#path-decomposition) + `parent\_path()` and `filename()` sections of the reference + docs. + - Close [#7607](https://svn.boost.org/trac/boost/ticket/7607), + path should not infer an invisible "." at the end + of a path that ends with a slash, as resolved by [#7258](https://svn.boost.org/trac/boost/ticket/7258) + and [#10766](https://svn.boost.org/trac/boost/ticket/10766). + - Close [#11061](https://svn.boost.org/trac/boost/ticket/11061), + [#11062](https://svn.boost.org/trac/boost/ticket/11062), + Impossible to traverse the path of the reverse iterator, as + effectively resolved by the addition of the class `path` reverse iteration feature. + The reference documentation has also been updated with a [note](/libs/filesystem/doc/reference.html#path-iterators) + warning about the limitations of class `path` + iterators. + + *Other fixes:* + + - Clear several spurious GCC warnings. + - Fix bug in `file\_status` + and `recursive\_directory\_iterator`: + C++ turns an explicit constructor with all arguments except + first defaulted into non-explicit single argument constructor. + - Apply Reference docs editorial cleanups: Use same style sheet + as the rest of the documentation. Tweak tab font size. Fix + excessively long lines in tables, synopsis. + - Minor fixes, including pull requests from Jonathan Wakely and + Marcel Raad. +* [Flyweight](/libs/flyweight/index.html): + + + Maintenance fixes. +* [Fusion](/libs/fusion/): + + + All of fusion containers and generators now support C++11 variadic + templates. ([pull-request + 89](https://github.com/boostorg/fusion/pull/89), [pull-request + 97](https://github.com/boostorg/fusion/pull/97), [pull-request + 100](https://github.com/boostorg/fusion/pull/100)) + + - **Special notice for `fusion::vector`** + + * Due to implementation limitation, numbered form (i.e. + `fusion::vectorN`) + is provided via C++11 aliasing templates and deprecated + in C++11 or later. In this case, you should check `BOOST\_FUSION\_HAS\_VARIADIC\_VECTOR` + macro and switch usage because some partial specialization + would become compile error (e.g. [pull-request + for Spirit](https://github.com/boostorg/spirit/pull/158/files#diff-250ce096dee927d2b7eb5a4e24afb8cd)). + + `fusion::nview` now support C++11 variadic + templates. ([pull-request + 90](https://github.com/boostorg/fusion/pull/90)) + + `fusion::fold` is now SFINAE-friendly. ([pull-request 102](https://github.com/boostorg/fusion/pull/102)) + + *Bug fixes:* + + - The generic fusion sequence convert to a deque fails with a + compiler error. ([#11572](https://svn.boost.org/trac/boost/ticket/11572)) + - (doc) Return type of functions incorrect. ([#3358](https://svn.boost.org/trac/boost/ticket/3358)) +* [Geometry](/libs/geometry/): + + + *Solved tickets:* + + - [#10803](https://svn.boost.org/trac/boost/ticket/10803) + Union algorithm returning invalid geometry + - [#11522](https://svn.boost.org/trac/boost/ticket/11522) + Namespace clash in buffer for traits::detail + - [#11533](https://svn.boost.org/trac/boost/ticket/11533) + Assert failure in rtree caused by a bug in remove() if min + elements number is 1 + - [#11607](https://svn.boost.org/trac/boost/ticket/11607) + Private geometry::exception::what() + - [#11709](https://svn.boost.org/trac/boost/ticket/11709) + is\_simple segfault + - [#11710](https://svn.boost.org/trac/boost/ticket/11710) + is\_simple - empty geometry logic + - [#11711](https://svn.boost.org/trac/boost/ticket/11711) + is\_simple and is\_valid - Points that are NaN or Infinity + + *Bugfixes:* + + - Fix colocations of touching interior ring / exterior ring, + where it also touches another polygon + - Fix removing values from an empty rtree - no effect and 0 returned + instead of assertion failure + - Fix segfault in centroid for multi geometries containing empty + single geometries (thanks to Jiri Drbalek) + - Fix liang\_barsky strategy for integral coordinates (thanks + to Dane Springmeyer) +* [Interprocess](/libs/interprocess/): + + + Improved `offset_ptr` + performance and removed any undefined behaviour. No special cases + needed for different compilers. + + Fixed bugs: + + - [Trac + #11699 (*"Forward declarations of std templates + causes stack corruption under Visual Studio 2015"*)](https://svn.boost.org/trac/boost/ticket/11699). +* [Intrusive](/libs/intrusive/): + + + Advanced lookup + and insertions in ordered associative containers now support + comparison functions that are not required to offer the same strict + weak ordering as `key\_compare`, + the container must be partitioned in regards to the passed comparison + object. + + Fixed bugs: + + - [Boost + Trac #11701: *Regression in boost::intrusive::set::equal\_range*](https://svn.boost.org/trac/boost/ticket/11701) + - [Boost + Trac #11765: *sgtree.hpp:830: bad if test ?*](https://svn.boost.org/trac/boost/ticket/11765) +* [Lexical Cast](/libs/lexical_cast/): + + + Fixed usage of `lexical\_cast` + with move only types [#11570](https://svn.boost.org/trac/boost/ticket/11570) + + Fixed crash when `BOOST\_LCAST\_NO\_COMPILE\_TIME\_PRECISION` + is defined [#11669](https://svn.boost.org/trac/boost/ticket/11669) + + Suppress some of the warning reported in [#11570](https://svn.boost.org/trac/boost/ticket/11570) and [#4946](https://svn.boost.org/trac/boost/ticket/4946) +* [Locale](/libs/locale): + + + Implemented generic codecvt facet and add general purpose utf8\_codecvt + facet + + Added posix locale support for FreeBSD 10.0 and above + + Fixed issues [#10017](https://svn.boost.org/trac/boost/ticket/10017) (sun redefinition on SunOS), [#11163](https://svn.boost.org/trac/boost/ticket/11163) (set\_default\_messages\_domain + incorrect behavior), [#11673](https://svn.boost.org/trac/boost/ticket/11673) build issues + + Some warning cleanup + + Fixed tests for latest ICU versions + + Added workaround for `libc++` issues + + Added new defines `BOOST\_LOCALE\_ENABLE\_CHAR16\_T` + and `BOOST\_LOCALE\_ENABLE\_CHAR32\_T` + to enable C++11 `char16\_t` + and `char32\_t` instead + of deprecated ones +* [Log](/libs/log/): + + + General changes: + + - On Windows, the configuration macro `BOOST\_LOG\_USE\_WINNT6\_API` + is no longer used by the library. The target Windows version + should be configured by defining macro `BOOST\_USE\_WINAPI\_VERSION`. + + Bug fixes: + + - Fixed compilation for Android using Google NDK. ([#11559](https://svn.boost.org/trac/boost/ticket/11559)) + - Fixed compilation of some logging statements, where the first + object to be put into stream is not directly supported by + `formatting\_ostream`. + ([#11549](https://svn.boost.org/trac/boost/ticket/11549)) + - Added a workaround for Solaris Studio 12.4, which should fix + the compilation of `formatting\_ostream`. + ([#11545](https://svn.boost.org/trac/boost/ticket/11545)) + - Fixed compilation when native `wchar\_t` + type is disabled. ([#11541](https://svn.boost.org/trac/boost/ticket/11541)) + - Fixed exporting symbols from the `boost\_log\_setup` + library on POSIX-like systems. + - Fixed compilation of character decorators. + - Added a workaround for incorrect file name generation in text + file sink backend, when the file name contains date/time placeholders. + ([#11691](https://svn.boost.org/trac/boost/ticket/11691)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Move](/libs/move/): + + + Fixed bug [Trac + #11615: *"Boost.Move should use the qualified name + for std::size\_t in type\_traits.hpp"*](https://svn.boost.org/trac/boost/ticket/11615), +* [Multi-index Containers](/libs/multi_index/index.html): + + + Fixed an interoperability problem with [Qt](http://www.qt.io/) + due to the optional definition of a macro with name `foreach` in this framework. + + Maintenance fixes. +* [odeint](/libs/numeric/odeint): + + + New features: + + - Added functionality to throw an exception if too many ODE steps + are performed. + - Added possibility to limit maximal step size in adaptive methods. + + several Bug fixes, see https://github.com/headmyshoulder/odeint-v2/issues +* [Optional](/libs/optional/): + + + Changed the implementation of `boost::none` + again. Now it is a const object with internal linkage (as any other + tag). This fixes [#11203](https://svn.boost.org/trac/boost/ticket/11203). +* [Predef](/libs/predef/): + + + Add detection of SIMD hardware. + + See [history](/libs/predef/doc/html/predef/history.html#predef.history.1_4) + for more details. +* [Test](/libs/test/): + + + Boost.test v3.1 see the '[Change + log](/doc/libs/1_60_0/libs/test/doc/html/boost_test/change_log.html)' section for details. + + New features + + - Improved Command Line Interface + - Improved dataset API + + Bug fixes + + - [#3384](https://svn.boost.org/trac/boost/ticket/3384), [#3897](https://svn.boost.org/trac/boost/ticket/3897), [#6032](https://svn.boost.org/trac/boost/ticket/6032), [#6859](https://svn.boost.org/trac/boost/ticket/6859), [#7257](https://svn.boost.org/trac/boost/ticket/7257) + - [#9228](https://svn.boost.org/trac/boost/ticket/9228), [#10317](https://svn.boost.org/trac/boost/ticket/10317), [#11279](https://svn.boost.org/trac/boost/ticket/11279), [#11478](https://svn.boost.org/trac/boost/ticket/11478) + - [#11571](https://svn.boost.org/trac/boost/ticket/11571), [#11623](https://svn.boost.org/trac/boost/ticket/11623), [#11624](https://svn.boost.org/trac/boost/ticket/11624), [#11625](https://svn.boost.org/trac/boost/ticket/11625) +* [Thread - 4.6.0](/libs/thread/): +*New + Experimental Features:* + + + [#11231](http://svn.boost.org/trac/boost/ticket/11231) + Allow to set continuation future's destructor behavior to non-blocking + + [#11424](http://svn.boost.org/trac/boost/ticket/11424) + Provide shared\_timed\_mutex as an alternative name for shared\_mutex + and deprecate the use of shared\_mutex as a timed mutex + + [#11734](http://svn.boost.org/trac/boost/ticket/11734) + future::then(Cont) should be able to execute the contination on undetermined + thread + + [#11736](http://svn.boost.org/trac/boost/ticket/11736) + Allow to use launch::executor on future::then(launch::executor, cont) + + [#11737](http://svn.boost.org/trac/boost/ticket/11737) + Add a launch::inherit policy that can be used on ::then() to use + the policy of the parent future *Fixed Bugs:* + + [#3926](http://svn.boost.org/trac/boost/ticket/3926) + thread\_specific\_ptr + dlopen library causes a SIGSEGV. + + [#6377](http://svn.boost.org/trac/boost/ticket/6377) + Condition variable blocks when changing time + + [#6787](http://svn.boost.org/trac/boost/ticket/6787) + boost::thread::sleep() hangs if system time is rolled back + + [#7665](http://svn.boost.org/trac/boost/ticket/7665) + this\_thread::sleep\_for no longer uses steady\_clock in thread + + [#7720](http://svn.boost.org/trac/boost/ticket/7720) + exception lock\_error while intensive locking/unlocking of mutex + + [#9309](http://svn.boost.org/trac/boost/ticket/9309) + test\_latch fails often on clang-darwin-tot11 + + [#10788](http://svn.boost.org/trac/boost/ticket/10788) + GetLogicalProcessor isn't available for Windows platform less or + equals to 0x0502 + + [#11090](http://svn.boost.org/trac/boost/ticket/11090) + ex\_future\_unwrap- ThreadSanitizer: lock-order-inversion (potential + deadlock) + + [#11158](http://svn.boost.org/trac/boost/ticket/11158) + Pthread thread deadlock when faketime used + + [#11174](http://svn.boost.org/trac/boost/ticket/11174) + boost::condition\_variable::timed\_wait with predicate unexpectedly + wakes up while should wait infinite + + [#11185](http://svn.boost.org/trac/boost/ticket/11185) + Incorrect URL redirection + + [#11192](http://svn.boost.org/trac/boost/ticket/11192) + boost::future<>::then() with an executor doesn't compile when + the callback returns a future + + [#11250](http://svn.boost.org/trac/boost/ticket/11250) + future made from make\_exceptional fails on assertion in destructor + + [#11256](http://svn.boost.org/trac/boost/ticket/11256) + future<>::is\_ready() == false in continuation function + + [#11261](http://svn.boost.org/trac/boost/ticket/11261) + bad use of scoped threads in basic\_thread\_pool + + [#11262](http://svn.boost.org/trac/boost/ticket/11262) + bad use of direct pointer in shared\_state\_nullary\_task + + [#11263](http://svn.boost.org/trac/boost/ticket/11263) + lock already locked lock + + [#11266](http://svn.boost.org/trac/boost/ticket/11266) + boost::packaged\_task has invalid variadic signature + + [#11302](http://svn.boost.org/trac/boost/ticket/11302) + boost thread doesn't build with BOOST\_THREAD\_PATCH. + + [#11322](http://svn.boost.org/trac/boost/ticket/11322) + sleep\_for() nanoseconds overload will always return too early on + windows + + [#11329](http://svn.boost.org/trac/boost/ticket/11329) + using declarative for GetProcessHeap, .... fails + + [#11368](http://svn.boost.org/trac/boost/ticket/11368) + boost thread's usage of CreateWaitableTimer wakes PC from sleep (doh) + + [#11377](http://svn.boost.org/trac/boost/ticket/11377) + Boost condition variable always waits for system clock deadline + + [#11435](http://svn.boost.org/trac/boost/ticket/11435) + gcc compiler warning in future.hpp + + [#11555](http://svn.boost.org/trac/boost/ticket/11555) + devector.hpp assumes allocator\_traits\_type is always present + + [#11562](http://svn.boost.org/trac/boost/ticket/11562) + Timer (using steady\_clock) expires after computer time is set forward + on Ubuntu 64-bit + + [#11672](http://svn.boost.org/trac/boost/ticket/11672) + Thread: Should use unique\_ptr, not auto\_ptr + + [#11688](http://svn.boost.org/trac/boost/ticket/11688) + thread::try\_join\_until: Avoid busy wait if system clock changes + + [#11716](http://svn.boost.org/trac/boost/ticket/11672) + ::then(f) should inherit the parent Executor +* [UUID](/libs/uuid/): + + + Added a workaround for MSVC codegen bug that could cause crashes + when comparing UUIDs. + + Added detection of AVX being enabled with MSVC compiler switches. + +### News +### Notes for + Windows users + This release of Boost will by default compile for Windows Vista/Windows Server + 2008, if the compiler supports a recent enough Windows SDK, and for Windows + XP otherwise. Binaries compiled with default options may not run on the older + Windows versions. + + It is still possible to explicitly specify target Windows version by defining + `BOOST\_USE\_WINAPI\_VERSION` + to a numeric version of Windows API. For example, building Boost for Windows + XP can be done with the following command: + +``` + b2 release define=BOOST\_USE\_WINAPI\_VERSION=0x0501 + +``` + + + The list of Windows API version numbers can be seen on [this](https://msdn.microsoft.com/en-us/library/6sehtctf.aspx) + page. + + This change only concerns libraries that use the common Windows API abstraction + layer. Currently, these libraries are: Boost.Chrono, Boost.Dll, Boost.Log, + Boost.UUID. This will also affect all dependent libraries. + + +### Release + of Hana postponed + Due to time constraints, the release of [Hana](https://github.com/boostorg/hana) + will be postponed to a later release of Boost. This will also allow some + known issues to be addressed properly before releasing the library officially + as a part of Boost. More information can be found on the [mailing + list](http://article.gmane.org/gmane.comp.lib.boost.devel/263964). + + +### Release + of Boost.DLL library postponed + In order to provide superior support of uncommon toolsets and platforms, + the release of Boost.DLL was postponed to a later release of Boost. This + also allows to test better a recently added ability to copy construct and + copy assign instances of `boost::dll::shared\_library` and provide examples on + importing functions with non default calling conventions. Latest version + and developer documentation of the library could be found at [GitHub + repo](https://github.com/boostorg/dll). + + + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.6 + + Clang, C++14: 3.7 + + GCC: 4.4.7, 4.8.4, 4.9.3, 5.1.0, 5.2.1 + + GCC, C++11: 4.4.7 + + GCC, C++14: 4.9.3 +* Windows: + + + GCC, C++03, mingw: 3.4.5 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7 + + GCC: 4.9.0, 5.2.0 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.4, 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2, 3.6.0, 3.8.0 + + Clang, C++14: 3.7.0 + + GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.9.3, 5.1.0, 6.0.0 + + GCC, C++11: 4.4.7 + + GCC, C++14: 4.9.3, 5.2.1 + + IBM XL C++: 13.1.2.0 + + Intel: 16.0 +* OS X: + + + Clang: 7.0.0 + + GCC: 5.2.0 +* Windows: + + + GCC, C++03, mingw: 3.4.5 + + GCC, C++11, mingw: 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7 + + GCC: 4.9.0, 5.2.0 +* FreeBSD: + + + Clang, C++11: 3.4.1, 3.7.0 + + GCC, C++11: 4.8.5, 5.2.0, 6.0.0 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.4, 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_61_0.html b/users/history/version_1_61_0.html new file mode 100644 index 0000000..64f9e04 --- /dev/null +++ b/users/history/version_1_61_0.html @@ -0,0 +1,423 @@ +--- +title: Version 1.61.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.61.0 + +/\*\*/ + + + + + + + +Version 1.61.0 +============== + +Version 1.61.0 +-------------- + + +May 13th, 2016 02:58 GMT + + +[Documentation](/doc/libs/1_61_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_61\_0.tar.bz2](https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.bz2) | a547bd06c2fd9a71ba1d169d9cf0339da7ebf4753849a8f7d6fdb8feee99b640 | +| [boost\_1\_61\_0.tar.gz](https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.gz) | a77c7cc660ec02704c6884fbb20c552d52d60a18f26573c9cee0788bf00ed7e6 | +| windows | [boost\_1\_61\_0.7z](https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.7z) | fa1c34862b7ba8674ed6e064a14667a11830c6252f702d9458451834b74f7815 | +| [boost\_1\_61\_0.zip](https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.zip) | 02d420e6908016d4ac74dfc712eec7d9616a7fc0da78b0a1b5b937536b2e01e8 | + +[List of checksums](/users/download/signatures/boost_1_61_0.sums.asc) signed by [Vladimir Prus](https://pgp.mit.edu/pks/lookup?op=get&search=0xDA472E8659753BA4) + + +### Third Party Downloads + + +* [Windows Binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.61.0) + + +### New Libraries + + +* [Compute](/libs/compute/): + Parallel/GPU-computing + library +* [DLL](/libs/dll/): + Library for comfortable work + with DLL and DSO. Library provides a portable across platforms way to: + + + load libraries + + import any native functions and variables + + make alias names for C++ mangled functions and symbols + + query libraries for sections and exported symbols + + self loading and self querying + + getting program and module location by exported symbol +* [Hana](/libs/hana/): + A modern C++ metaprogramming + library. It provides high level algorithms to manipulate heterogeneous + sequences, allows writing type-level computations with a natural syntax, + provides tools to introspect user-defined types and much more. +* [Metaparse](/libs/metaparse/): + A library for generating + compile time parsers parsing embedded DSL code as part of the C++ compilation + process. The library is similar to Spirit, however while parsers built + with Spirit parse at run-time, parsers built with Metaparse parse at compile-time. + +### Updated Libraries + + +* [Any](/libs/any/): + + + More tests and maintainance fixes. +* [Container](/libs/container/): + + + `small\_vector` supports + more constructors and assignments. + + Fixed bugs: + + - [Trac + #11820 : *"compiler error when using operator[] + of map"*](https://svn.boost.org/trac/boost/ticket/11820). + - [Trac + #11856 : *"pool\_resource.cpp error: declaration + changes meaning"*](https://svn.boost.org/trac/boost/ticket/11856). + - [Trac + #11866 : *"small\_vector does not have range constructor"*](https://svn.boost.org/trac/boost/ticket/11866). + - [Trac + #11867 : *"small\_vector should have constructor + and assignment operator taking other small\_vector"*](https://svn.boost.org/trac/boost/ticket/11867). + - [Trac + #11912 : *"flat\_map use of vector::priv\_forward\_range\_insert\_expand\_backwards + may cause move with same source"*](https://svn.boost.org/trac/boost/ticket/11912). + - [Trac + #11957 : *"static\_vector::max\_size() is higher + than the capacity"*](https://svn.boost.org/trac/boost/ticket/11957). + - [Trac + #12014 : *"boost::container::set can not insert + const (ref) range"*](https://svn.boost.org/trac/boost/ticket/12014). + - [GitHub + #33: *Make sure std::string constructor is available*](https://github.com/boostorg/container/pull/33). +* [Context](/libs/context/): + + + [#11246](https://svn.boost.org/trac/boost/ticket/11246) fails to build for mingw because of undefined symbols + + [#11365](https://svn.boost.org/trac/boost/ticket/11365) execution\_context.hpp gives errors when building with + VS2015RC + + [#11652](https://svn.boost.org/trac/boost/ticket/11652) checking \_\_cpp\_lib\_integer\_sequence + + [#11946](https://svn.boost.org/trac/boost/ticket/11946) crashes on x86\_64/MinGW + + fcontext\_t: no longer part of public API + + support for WinFiber API removed + + execution\_context: relaxed to C++11 + + execution\_context: type-safe transfer of data + + execution\_context: execute function on top of stack + + execution\_context: improved performance + + execution\_context: static member-fn `current()` removed + + execution\_context: new call semantic +* [Coroutine](/libs/coroutine/): + + + attribute related to FPU-env removed +* [Coroutine2](/libs/coroutine2/): + + + attribute related to FPU-env removed + + improved performance + + relaxed to C++11 +* [Fusion](/libs/fusion/): + + + Mitigate massive warnings about use of `BOOST\_PP\_IS\_EMPTY` + on MSVC8. [#11157](https://svn.boost.org/trac/boost/ticket/11157) + + Container's conversion ctor and SFINAE. [#11766](https://svn.boost.org/trac/boost/ticket/11766) + + Drop trailing `fusion::void\_` + support from C++11 `fusion::vector`. + [pull-request + 120](https://github.com/boostorg/fusion/pull/120) + + Workarounds for GCC 4.0 and 4.1 ICE. [#5808](https://svn.boost.org/trac/boost/ticket/5808) [#7229](https://svn.boost.org/trac/boost/ticket/7229) + + Workaround for ambiguous call of `fusion::convert` + on GCC 3.4. [pull-request + 130](https://github.com/boostorg/fusion/pull/130) +* [Geometry](/libs/geometry): + + + *Additional functionality:* + + - Support within and covered\_by for Box/Box in spherical and + geographic coordinate systems. + + *Improvements:* + + - Overlay: handle\_tangencies replaced by clusters, fixing many + cases with colocated turns + + *Solved tickets:* + + - [#9162](https://svn.boost.org/trac/boost/ticket/9162) + Invalid result of relational operations for non-cartesian Point/Areal. + - [#10866](https://svn.boost.org/trac/boost/ticket/10866) + union\_ doesn't work in 1.56 and 1.57. + - [#11018](https://svn.boost.org/trac/boost/ticket/11018) + Invalid geometry intersection + - [#11576](https://svn.boost.org/trac/boost/ticket/11576) + Intersection gives wrong results. + - [#11637](https://svn.boost.org/trac/boost/ticket/11637) + Unused parameter warning. + - [#11725](https://svn.boost.org/trac/boost/ticket/11725) + union\_ fails to create holes + - [#11789](https://svn.boost.org/trac/boost/ticket/11789) + Assertion failure or invalid result of set operations for spherical\_equatorial + coordinate system. + - [#11917](https://svn.boost.org/trac/boost/ticket/11917) + Andoyer distance strategy returns 0 for antipodal points (default + geographic distance). + - [#11928](https://svn.boost.org/trac/boost/ticket/11928) + Improvement of the accuracy of surveyor area strategy. + - [#11966](https://svn.boost.org/trac/boost/ticket/11966) + Compilation error in svg() for box and non-int coordinate type. + - [#11984](https://svn.boost.org/trac/boost/ticket/11984) + union\_() generates self-intersecting polygon + - [#11987](https://svn.boost.org/trac/boost/ticket/11987) + rtree::remove() not compiling for geographic CS. + - [#12000](https://svn.boost.org/trac/boost/ticket/12000) + Uninitialized reference in (unused) constructor of relate's + mask\_handler. + - [#12106](https://svn.boost.org/trac/boost/ticket/12106) + Invalid assertion failure in envelope() for non-cartesian very + short segments. + + *Bugfixes:* + + - Fix intersects and disjoint for Segment/Box in cartesian coordinate + system when Segment is parallel to Box's face. + - Fix relation operations for Point/Areal in spherical and geographic + coordinate systems for edge cases. + - Fix intersects and disjoint for Point/Box and Box/Box in spherical + and geographic coordinate systems for some cases. + - Fix within and covered\_by for Point/Box in spherical and geographic + coordinate systems for some cases. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs: + + - [GitHub + Pull #23 (*"Fixed case sensetive for linux mingw"*)](https://github.com/boostorg/interprocess/pull/23). +* [Intrusive](/libs/intrusive/): + + + Fixed bugs: + + - [Boost + Trac #11832: *clang-cl + boost intrusive = miscompile*](https://svn.boost.org/trac/boost/ticket/11832) + - [Boost + Trac #11865: *Intrusive list explicit ctor error with + Clang 3.6 (C++11/14)*](https://svn.boost.org/trac/boost/ticket/11865) + - [Boost + Trac #11992: *Add an overload of insert\_check taking + a key\_type*](https://svn.boost.org/trac/boost/ticket/11992) + - [GitHub + Pull #19: *ebo\_functor\_holder: compile fix for copy + constructor*](https://github.com/boostorg/intrusive/pull/19) +* [Lexical Cast](/libs/lexical_cast/): + + + Fixed Sun Studio related issues +* [Log](/libs/log/): + + + General changes: + + - The support for `boost::basic\_string\_ref` + and its specializations is deprecated; users are encouraged + to switch to `boost::basic\_string\_view`. + The support for `boost::basic\_string\_ref` + will be removed in future releases. + - Added support for limiting the number of stored log files in + the target directory of the file collector. Thanks to Erich + Keane for the patch. ([#8746](https://svn.boost.org/trac/boost/ticket/8746)) + + Bug fixes: + + - Fixed various compilation problems for Windows CE. + - Fixed compilation problems on Solaris. + - Added a workaround for MSVC-10 generating broken code for formatters + in some cases. ([#12025](https://svn.boost.org/trac/boost/ticket/12025)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + Polynomial arithmetic added to tools. +* [Move](/libs/move/): + + + Experimental: asymptotically optimal bufferless merge and sort algorithms: + adaptive\_merge and adaptive\_sort. + + Fixed bug: + + - [Trac + #11758: *"BOOST\_MOVABLE\_BUT\_NOT\_COPYABLE doesn't + reset private access with rvalue ref version"*](https://svn.boost.org/trac/boost/ticket/11758). +* [Multiprecision](/libs/multiprecision/): + + + Fixed bug in stream input for integer types, see [#11857](https://svn.boost.org/trac/boost/ticket/11857). + + Fixed some ambiguous conversions involving expression templates see + [#11922](https://svn.boost.org/trac/boost/ticket/11922). + + Add expression template aware min/max overloads see [#11149](https://svn.boost.org/trac/boost/ticket/11149). + + Fix bug in right shifting negative small integers in cpp\_int see + [#11999](https://svn.boost.org/trac/boost/ticket/11999). + + Use memmove for bitshifts in cpp\_int when possible see [#9233](https://svn.boost.org/trac/boost/ticket/9233). + + Use memcpy for data import into cpp\_int where possible, see [#9235](https://svn.boost.org/trac/boost/ticket/9235). + + Changed `cpp\_bin\_float.convert\_to()` to a function template rather + than proceding via `long double` to avoid double-rounding bug, + see [#12039](https://svn.boost.org/trac/boost/ticket/12039). + + Fixed conversions from NaN's and Infinities, see [#12112](https://svn.boost.org/trac/boost/ticket/12112). + + Enabled better support for Clang on Windows. + + Fixed handling of NaN's and Infinities in basic arithmetic for cpp\_dec\_float + and cpp\_bin\_float, see [#12090](https://svn.boost.org/trac/boost/ticket/12090). + + Fixed fencepost error in cpp\_bin\_float subtraction. + + Fixed double-rounding in conversion to float routines for cpp\_bin\_float, + see [#12039](https://svn.boost.org/trac/boost/ticket/12039). + + Make float128 denorm aware, see [#12075](https://svn.boost.org/trac/boost/ticket/12075). + + Allow the library and tests to be used without exception handling + support, see [#12070](https://svn.boost.org/trac/boost/ticket/12070). + + Fixed buggy comparison operator overloads for boost::rational. + + Added some workarounds for Oracle C++. + + Fixed some missing typecasts for cases where cpp\_int's limb\_type + is wider than unsigned. +* [Optional](/libs/optional/): + + + Now `boost::optional` is specialized for reference + parameters. This addresses a couple of issues: + + - the `sizeof` of + optional reference is that of a pointer, + - some bugs connected to copying optional references are gone, + - all run-time bugs caused by incorrect reference binding on + some compilers are now turned into compile-time errors, + - you can swap optional references: it is like swapping pointers: + shalow, underlying objects are not affected, + - optional references to abstract types work. + + Documented nested typedefs ([Trac + #5193](https://svn.boost.org/trac/boost/ticket/5193)). + + Made the perfect-forwarding constructor SFINAE-friendly, which fixes + [Trac #12002](https://svn.boost.org/trac/boost/ticket/12002). + However, this only works in the newer platforms that correctly implement + C++11 ``. + + Fixed [Trac + #10445](https://svn.boost.org/trac/boost/ticket/10445). +* [Regex](/libs/regex/): + + + Change to lockfree implementation of memory cache, see [PR#23](https://github.com/boostorg/regex/pull/23). +* [Test](/libs/test/): + + + Boost.test v3.2 see the '[Change + log](/doc/libs/1_61_0/libs/test/doc/html/boost_test/change_log.html)' section for details. + + New features + + - dataset driven test-cases learned to support fixtures and variadic + number of arguments + - dataset driven test-cases sample types now honor move semantics + + Bug fixes + + - [#6767](https://svn.boost.org/trac/boost/ticket/6767), [#8905](https://svn.boost.org/trac/boost/ticket/8905), [#9443](https://svn.boost.org/trac/boost/ticket/9443), [#11854](https://svn.boost.org/trac/boost/ticket/11854) + - [#11887](https://svn.boost.org/trac/boost/ticket/11887), [#11889](https://svn.boost.org/trac/boost/ticket/11889), [#11983](https://svn.boost.org/trac/boost/ticket/11983) +* [Variant](/libs/variant/): + + + Maintainance fixes. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7.1 + + Clang, C++14: 3.7.1, 3.8.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.3, 4.8.4, 4.8.5, 4.9.3, 5.3.0 + + GCC, C++11: 4.4.7 + + GCC, C++14: 5.2.1, 5.3.1 + + Intel: 16.0 +* Windows: + + + GCC, C++03, mingw: 3.4.5 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1, 5.2 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7 + + GCC: 4.9, 5.3 +* FreeBSD: + + + Clang: 3.4.1, 3.7 + + GCC: 4.8.5, 5.3 +* Haiku: + + + GCC, C++11: 4.8.5 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.4, 12.5 + + Oracle Solaris Studio, C++11: 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7.1 + + Clang, c++14: 3.7.1, 3.8.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.3, 4.8.5, 4.9.3, 5.3.0, 5.3.1, 6.0.0 + + GCC, C++11: 4.4.7 + + GCC, C++14: 5.2.1 + + Intel: 16.0 +* OS X: + + + Apple Clang: 7.0.2 + + G++: 5.3.0 +* Windows: + + + GCC, C++03, mingw: 3.4.5 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1, 5.2 + + GCC, cygwin: 5.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7 + + GCC: 4.9, 5.3, 6.0 +* FreeBSD: + + + Clang: 3.41, 3.7.0 + + GCC, C++11: 4.8.5, 5.3.0, 6.0 + + GCC: 6.0 +* Haiku: + + + GCC, C++11: 4.8.5 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.4, 12.5 + + Oracle Solaris Studio, C++11: 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_62_0.html b/users/history/version_1_62_0.html new file mode 100644 index 0000000..6fe2447 --- /dev/null +++ b/users/history/version_1_62_0.html @@ -0,0 +1,440 @@ +--- +title: Version 1.62.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.62.0 + +/\*\*/ + + + + + + + +Version 1.62.0 +============== + +Version 1.62.0 +-------------- + + +September 28th, 2016 15:17 GMT + + +[Documentation](/doc/libs/1_62_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_62\_0.tar.bz2](https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.bz2) | 36c96b0f6155c98404091d8ceb48319a28279ca0333fba1ad8611eb90afb2ca0 | +| [boost\_1\_62\_0.tar.gz](https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.gz) | 440a59f8bc4023dbe6285c9998b0f7fa288468b889746b1ef00e8b36c559dce1 | +| windows | [boost\_1\_62\_0.7z](https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.7z) | b91c2cda8bee73ea613130e19e72c9589e9ef0357c4c5cc5f7523de82cce11f7 | +| [boost\_1\_62\_0.zip](https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.zip) | 084b2e0638bbe0975a9e43e21bc9ceae33ef11377aecab3268a57cf41e405d4e | + + +### Third Party Downloads + + +* [Windows Binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.62.0/) + + +### New Libraries + + +* [Fiber](/libs/fiber/): + Framework for userland-threads/fibers, + from Oliver Kowalke. +* [QVM](/libs/qvm/doc/index.html): + Boost QVM is a + generic library for working with quaternions, vectors and matrices of static + size with the emphasis on 2, 3 and 4-dimensional operations needed in graphics, + video games and simulation applications, from Emil Dotchevski. + +### Updated Libraries + + +* [Atomic](/libs/atomic/): + + + Improved support for Oracle Studio and SPARC. The library now provides + native atomic operations on SPARCv8+. +* [Chrono](/libs/chrono/): + + + [#11330](http://svn.boost.org/trac/boost/ticket/11330) + boost::chrono::duration default constructor doesn't initialize rep\_ + + [#11618](http://svn.boost.org/trac/boost/ticket/11618) + Chrono IO V2 doc ios\_state.hpp does not exist + + [#11631](http://svn.boost.org/trac/boost/ticket/11631) + boost chrono io v2 does not let you support custom clocks +* [Circular Buffer](/libs/circular_buffer/): + + + Debug implementation is no longer used by default in debug mode. + Debug implementation does not have the same thread safety guarantees + as the normal (release) implementation or other containers. As a + result of this change `BOOST\_CB\_DISABLE\_DEBUG` + macro is no longer used. `BOOST\_CB\_ENABLE\_DEBUG=1` + should be defined instead to enable debug support. ([#6277](https://svn.boost.org/trac/boost/ticket/6277)) +* [Container](/libs/container/): + + + Fixed bugs: + + - [Trac + #9481: *"Minor comment typo in Boost.Container"*](https://svn.boost.org/trac/boost/ticket/9481). + - [Trac + #9689: *"Add piecewise\_construct to boost::container"*](https://svn.boost.org/trac/boost/ticket/9689). + - [Trac + #11170: *"Doc slip for index\_of"*](https://svn.boost.org/trac/boost/ticket/11170). + - [Trac + #11802: *"Incorrect ordering after using insert() + with ordered\_range\_t on a flat\_multiset with a non-default + sort order"*](https://svn.boost.org/trac/boost/ticket/11802). + - [Trac + #12117: *"flat\_set constructor with ordered\_unique\_range"*](https://svn.boost.org/trac/boost/ticket/12117). + - [Trac + #12177: *"vector::priv\_merge uses unqualified + uintptr\_t"*](https://svn.boost.org/trac/boost/ticket/12177). + - [Trac + #12183: *"GCC 6.1 thinks boost::container::string + violates strict aliasing"*](https://svn.boost.org/trac/boost/ticket/12183). + - [Trac + #12256: *"set>::insert + cause compilation error in debug configuration in Visual Studio + 2012"*](https://svn.boost.org/trac/boost/ticket/12256). + - [Trac + #12273: *"static\_vector max\_size() and capacity() + should be constant expressions"*](https://svn.boost.org/trac/boost/ticket/12273). Added + constant `static\_vector<>::static\_capacity` + to use the configured capacity in constant expressions. + - [Trac + #12286: *"PMR flat\_map from Boost Container does + not compile"*](https://svn.boost.org/trac/boost/ticket/12286). + - [Trac + #12296: *"{deque,string} combine for a memory + leak"*](https://svn.boost.org/trac/boost/ticket/12296). + - [Trac + #12319: *"`flat\_set` + should be nothrow move constructible"*](https://svn.boost.org/trac/boost/ticket/12319). + + Revised noexcept expressions of default and move constructors in + all containers. + + Implemented C++17 `insert\_or\_assign`/`try\_emplace` for `map` + and `flat_map`. + + Implemented C++17 `extract`/`insert(node)` + for `map`, `multimap`, `set`, `multiset`. +* [Context](/libs/context/): + + + [#12215](https://svn.boost.org/trac/boost/ticket/12215) all stack corrupted on Windows using default fixedsize\_stack + + [#12242](https://svn.boost.org/trac/boost/ticket/12242) build issue with Intel C++ compiler for MacOS + + fix stack unwinding for execution\_context\_v1 +* [Coroutine](/libs/coroutine/): + + + deprecated in favour of Coroutine2 +* [Coroutine2](/libs/coroutine2/): + + + [#12221](https://svn.boost.org/trac/boost/ticket/12221) coroutine<>::push\_type function starts without pushing + + do not swallow exceptions thrown at coroutine<>::push\_type + construction +* [DLL](/libs/dll/): + + + Mangled symbols and classes loading was implemented by Klemens Morgenstern + + Suppress a 'unused parameter' warning in detail::aggressive\_ptr\_cast + [pull-request + 9](https://github.com/apolukhin/Boost.DLL/pull/9) + + Allowed to query non-existant sections [pull-request + 32](https://github.com/apolukhin/Boost.DLL/pull/32) + + More tests and docs +* [Functional/Forward](/libs/functional/forward/): + + + Fix C++11 compile error. +* [Geometry](/libs/geometry): + + + *Improvements:* + + - Union: take care that output is valid (with some exceptions), + also with self-tangent polygons or shared edges + - SVG: support boost::variant of geometries + - SVG: coordinates are now written as double (by default) to + svg + - Rename namespace concept to concepts to avoid conflicts with + the newest compilers + - New spherical intersection strategy used in relational and + set operations for spherical and geographic Geometries (previously + cartesian intersection strategy was used for all coordinate + systems). + + *Solved tickets:* + + - [#12189](https://svn.boost.org/trac/boost/ticket/12189) + Relational operations not compiling when point types of inputs + are different + - [#12287](https://svn.boost.org/trac/boost/ticket/12287) + Invalid result of rtree.query() for contains() predicate +* [Interprocess](/libs/interprocess/): + + + Fixed bug [GitHub + Pull #27 (*"Fix undefined behavior"*)](https://github.com/boostorg/interprocess/pull/27). +* [Intrusive](/libs/intrusive/): + + + Fixed bugs: + + - [Boost + Trac #11476: *has\_member\_function\_callable\_with.hpp + is massively broken with BOOST\_NO\_CXX11\_DECLTYPE*](https://svn.boost.org/trac/boost/ticket/11476) + - [Boost + Trac #11994: *Support intrusive container key extractors + that return the key by value*](https://svn.boost.org/trac/boost/ticket/11994) + - [Boost + Trac #12184: *clang -Wdocumentation warning*](https://svn.boost.org/trac/boost/ticket/12184) + - [Boost + Trac #12190: *Intrusive List + Flat Map combination + crashes*](https://svn.boost.org/trac/boost/ticket/12190) + - [Boost + Trac #12229: *intrusive::unordered\_set::rehash() + broken*](https://svn.boost.org/trac/boost/ticket/12229) + - [Boost + Trac #12245: *bstree uses a shared static size\_traits + for constant\_time\_size*](https://svn.boost.org/trac/boost/ticket/12245) +* [Lexical Cast](/libs/lexical_cast/): + + + Fix incorrect static assertion [#11759](https://svn.boost.org/trac/boost/ticket/11759) +* [Log](/libs/log/): + + + New features: + + - Added new tools for inter-process logging on a local machine. + The implementation includes a resource name wrapper, an inter-process + message queue and a sink backend. + - Added a new character decorator called `max\_size\_decor`. + The new decorator allows to limit the output of its adopted + formatter up to the specified length. + + Bug fixes: + + - Fixed that logging streams could retain formatting settings + across different log records. ([#12178](https://svn.boost.org/trac/boost/ticket/12178)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + New Features: + + - Enabled all the special function code to work correctly with + types whose precision can change at runtime: for example type + `mpfr\_float` + from Boost.Multiprecision. + + Patches: + + - Fix `tgamma\_delta\_ratio` + for cases where the delta is small compared to the base. + - Fix misc GCC-4.4 test failures. +* [Optional](/libs/optional/): + + + Fixed [Trac + #12179](https://svn.boost.org/trac/boost/ticket/12179). +* [Phoenix](/libs/phoenix/): + + + Fix compilation for MSVC 10. [pull-request + 18](https://github.com/boostorg/phoenix/pull/18) + + Remove unused preprocessed files. [pull-request + 28](https://github.com/boostorg/phoenix/pull/28) + + Fix erroneous doc for switch\_ statement. [#8156](https://svn.boost.org/trac/boost/ticket/8156) + + Cleanup config unordered. [pull-request + 33](https://github.com/boostorg/phoenix/pull/33) + + Suppress unused placeholder warnings. + + Fix too few arguments error on binary math functions. +* [Regex](/libs/regex/): + + + Fix buffer over-run error when parsing certain invalid regexes, see + [#12222](https://svn.boost.org/trac/boost/ticket/12222). + + Fix detection of ICU in library build, see [#12152](https://svn.boost.org/trac/boost/ticket/12152). + + Fix bug in case sensitivity change, see [#11940](https://svn.boost.org/trac/boost/ticket/11940). + + Allow types wider than int in `\x{}` + expressions (for char32\_t etc), see [#11988](https://svn.boost.org/trac/boost/ticket/11988). +* [Test](/libs/test/): + + + Boost.test v3.3 see the [Change + log](/doc/libs/1_62_0/libs/test/doc/html/boost_test/change_log.html) section for more details. + + New features + + - dataset driven test-cases have now a unique name and all sample + tests of a dataset live inside the same test suite + - Boost.test learned a new command line switch, `--logger` + for setting a test logger as well as its parameter in one command + - Boost.test learned to have several loggers at the same time, + each of which having their own log level and output stream + - Boost.test learned a new logger, `JUNIT`, + that is able to output Junit/xUnit compatible streams + - It is now possible to specify several test filters through + the environment variable `BOOST\_TEST\_RUN\_FILTERS` + + Bug fixes + + - Trac tickets [#8707](https://svn.boost.org/trac/boost/ticket/8707), [#8834](https://svn.boost.org/trac/boost/ticket/8834), [#11128](https://svn.boost.org/trac/boost/ticket/11128), [#11845](https://svn.boost.org/trac/boost/ticket/11845), + [#11859](https://svn.boost.org/trac/boost/ticket/11859), [#12024](https://svn.boost.org/trac/boost/ticket/12024), + - Trac tickets [#12093](https://svn.boost.org/trac/boost/ticket/12093), [#12103](https://svn.boost.org/trac/boost/ticket/12103), [#12224](https://svn.boost.org/trac/boost/ticket/12224), [#12241](https://svn.boost.org/trac/boost/ticket/12241), + [#12257](https://svn.boost.org/trac/boost/ticket/12257), [#12378](https://svn.boost.org/trac/boost/ticket/12378) + - Pull request [PR81](https://github.com/boostorg/test/pull/81) +* [Thread](/libs/thread/): + + + [#12102](http://svn.boost.org/trac/boost/ticket/12102) + condition\_variable\_fwd.hpp fails to compile when BOOST\_THREAD\_PROVIDES\_INTERRUPTIONS + is disabled + + [#12120](http://svn.boost.org/trac/boost/ticket/12120) + Performance improvement in thread/barrier.hpp + + [#12146](http://svn.boost.org/trac/boost/ticket/12146) + make\_exceptional\_future is not mentioned in the docs + + [#12202](http://svn.boost.org/trac/boost/ticket/12202) + shared\_lock should be in shared\_mutex header + + [#12371](http://svn.boost.org/trac/boost/ticket/12371) + boost thread/future.hpp fails to build + + #88 fix typos in boost::upgrade\_lock + + #89 fix a bug in upgrade\_to\_unique\_lock<>::operator=() + + #90 fix a bug in try\_lock\_wrapper<>::operator=() + + #91 Add shared\_lock\_guard to the included lock types + + #92 Fixed compilation with MSVC-8. + + #93 Fix variable shadowing warnings (Clang) + + #94 fix bugs in boost::barrier + + #95 fix a mistake in boost::completion\_latch + + #96 rename async\_func.hpp to invoker.hpp. + + #97 fix a mistake in sync\_timed\_queue<>::pull\_until() +* [TypeIndex](/libs/type_index/): + + + `ctti\_type\_index` was + made constexpr in C++14. Now it is possible to retrieve actual name + of the type as `const char\*` + at compile time. So we can do a lot of interesting things at **compile time**: check namespace of a type, sort + types according to their lexical representation, check that type + is a template type and so on... A few examples were provided. + + Fixed issue with `noexcept` + on MSVC in type names and issue with space in type name (pulled from + klemens-morgenstern/develop) + + Fixed typos [pull-request + 7](https://github.com/boostorg/type_index/pull/7) + + Improved CI testing +* [Unordered](/libs/unordered/): + + + Remove use of deprecated `boost::iterator`. + + Fixed an exception safety issue in assignment of `unordered\_multiset` + and `unordered\_multimap`. + + See the [changelog](/doc/html/unordered/changes.html) + for more details. +* [Variant](/libs/variant/): + + + Fixed variant construction from classes derived from variant [#7120](https://svn.boost.org/trac/boost/ticket/7120), + [#10278](https://svn.boost.org/trac/boost/ticket/10278), [#12155](https://svn.boost.org/trac/boost/ticket/12155) + + Variant constructors and assignment operators now do not participate + in overload resolutions if variant can not hold the input type [#5871](https://svn.boost.org/trac/boost/ticket/5871), + [#11602](https://svn.boost.org/trac/boost/ticket/11602) + + Fixed the issue with implicit conversion operator in C++11 [#8555](https://svn.boost.org/trac/boost/ticket/8555) + + Fixed comparisons when variant holds non-const reference [#11751](https://svn.boost.org/trac/boost/ticket/11751) + + Fixed noexcept for variant's move-assignment [#11696](https://svn.boost.org/trac/boost/ticket/11696) + + Fixed double quotes in includes [#12057](https://svn.boost.org/trac/boost/ticket/12057) + + Dropped BOOST\_VARIANT\_NO\_REFERENCE\_SUPPORT macro and dropped support + for compilers without SFINAE [#12250](https://svn.boost.org/trac/boost/ticket/12250) + + Suppress implicit instantiation of MPL end iterator + + Multiple minor fixes (typos, missing includes) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.8.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.0 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8.0, 3.8.1, 3.9.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.1.1 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1 + + GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1 + + Intel: 16.0 + + Intel, C++11: 16.0 + + Intel, C++14: 16.0 +* Windows: + + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.1 +* FreeBSD: + + + Clang: 3.4.1, 3.7 + + GCC: 4.8.5, 5.4.0, 6.1.1 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8 + + Clang, c++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8 + + Clang, c++14: 3.5, 3.6, 3.7, 3.8, 3.9 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 4.8.4, 5.2.0, 6.1.1 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1 + + GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1, 7.0.0 (experimental) + + Intel: 16.0 + + Intel, C++11: 16.0 + + Intel, C++14: 16.0 +* OS X: + + + Apple Clang: 7.3.0 + + G++: 6.1.0 +* Windows: + + + Clang: 3.8.1 + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + GCC, cygwin: 5.4.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.1 +* FreeBSD: + + + Clang, C++11: 3.4.1, 3.7.0 + + GCC, C++11: 4.8.5. 5.4.0, 6.1.1 +* Haiku: + + + GCC, C++11: 5.4.0 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_63_0.html b/users/history/version_1_63_0.html new file mode 100644 index 0000000..ffef18b --- /dev/null +++ b/users/history/version_1_63_0.html @@ -0,0 +1,347 @@ +--- +title: Version 1.63.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.63.0 + +/\*\*/ + + + + + + + +Version 1.63.0 +============== + +Version 1.63.0 +-------------- + + +December 26th, 2016 23:43 GMT + + +[Documentation](/doc/libs/1_63_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_63\_0.tar.bz2](https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2) | beae2529f759f6b3bf3f4969a19c2e9d6f0c503edcb2de4a61d1428519fcb3b0 | +| [boost\_1\_63\_0.tar.gz](https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.gz) | fe34a4e119798e10b8cc9e565b3b0284e9fd3977ec8a1b19586ad1dec397088b | +| windows | [boost\_1\_63\_0.7z](https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.7z) | 25db3956a8d58187ac7a0702cc917e9bab47ff90baafc35e4e789dca1ce5f423 | +| [boost\_1\_63\_0.zip](https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.zip) | 97ce6635df1f44653a597343cd5757bb8b6b992beb3720f5fc761e3644bcbe7b | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.63.0/binaries/) + + +### Post-release Patches + + +* [Atomic](/libs/atomic/): + + + Using 64-bit atomic operations on 32-bit x86 with gcc versions older + than 4.7 and compatible compilers can result in generation of incorrect + code. This problem is fixed in [this](https://github.com/boostorg/atomic/commit/a67cc1b055cf09f371e2eca544884634a1ccc886) + commit. + +### Updated Libraries + + +* [Atomic](/libs/atomic/): + + + Added the static constant `atomic::is\_always\_lock\_free` + for conformance with C++17. The constant indicates that the given + specialization always provides lock-free implementation of atomic + operations. + + Improved support of Oracle Studio on x86 targets. +* [Container](/libs/container/): + + + Fixed bugs: + + - [Trac + #12534: *"flat\_map fails to compile if included + after type\_traits is instantiated under gcc"*](https://svn.boost.org/trac/boost/ticket/12534). + - [Trac + #12577: *"Null reference in pair.hpp triggers + runtime warning with -fsanitize=undefined"*](https://svn.boost.org/trac/boost/ticket/12577). + - [GitHub + #40: *Fix parameter types in copy\_move\_algo.hpp: iterator\_traits::difference\_type + -> allocator\_traits::size\_type*](https://github.com/boostorg/container/pull/40). + - [GitHub + #41: *Avoid -Wunreachable-code in do\_allocate()*](https://github.com/boostorg/container/pull/41). +* [Context](/libs/context/): + + + [#11687](https://svn.boost.org/trac/boost/ticket/11687) Xcode (Apple clang) and thread\_local + + [#12114](https://svn.boost.org/trac/boost/ticket/12114) context does not preserve fpu context on ios arm64 devices + (fixed for other architecturs too) + + [#12411](https://svn.boost.org/trac/boost/ticket/12411) fpu registers not preserved with O2 optimizations in Visual + Studio (fixed for other architecturs too) + + [#12551](https://svn.boost.org/trac/boost/ticket/12551) building boost on arm64 causes error: unknown directive + + reduced signatur for ontop-functions + + unit-test for private fcontext-API + + performance-test for ucontext and fcontext fixed +* [Fiber](/libs/fiber/): + + + unbounded\_channel and bounded\_channel marked as deprecated + + new classes buffered\_channel and unbuffered\_channel + + performance improved +* [Fusion](/libs/fusion/): + + + Fixed `fusion::vector` buggy constructors (Thanks + to Lee Clagett). + + `BOOST\_FUSION\_ADAPT\*` and `BOOST\_FUSION\_DEFINE\*` now allow empty structures. ([#6592](https://svn.boost.org/trac/boost/ticket/6592)) + + `BOOST\_FUSION\_DEFINE\*` allows move constructor and assignment. + ([#10099](https://svn.boost.org/trac/boost/ticket/10099)) + + Adaptor for `std::array` (Thanks to Mateusz Łoskot). + ([#8241](https://svn.boost.org/trac/boost/ticket/8241)) + + Fixed returning temporary variable warnings on MSVC. +* [Geometry](/libs/geometry): + + + *Improvements:* + + - Intersection: take care that output is valid (work in progres, + not yet finished - but more is valid) + + *Solved tickets:* + + - [#12289](https://svn.boost.org/trac/boost/ticket/12289) + Avoid warning/compilation error for std::cout + - [#12412](https://svn.boost.org/trac/boost/ticket/12412) + Invalid result of covered\_by() with geographic Points and Boxes + - [#12413](https://svn.boost.org/trac/boost/ticket/12413) + rtree::remove() not working properly with geographic Points +* [Hash](/libs/functional/hash): + + + Fixed some warnings. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs: + + - [Trac + #12499 (*"Memory allocation fails"*)](https://svn.boost.org/trac/boost/ticket/12499). + - [GitHub + Pull #30 (*"Provide extension point so library + user can provide default temp folder"*)](https://github.com/boostorg/interprocess/pull/30). + - [GitHub + Pull #31 (*"Add xsi\_key(key\_t) constructor"*)](https://github.com/boostorg/interprocess/pull/31). +* [Intrusive](/libs/intrusive/): + + + Fixed bugs: + + - [Boost + Trac #12556: *member\_value\_traits.hpp has a missing + #include*](https://svn.boost.org/trac/boost/ticket/12556) +* [Lexical Cast](/libs/lexical_cast/): + + + Fixed issue found by `-fsanitize=undefined` [#21](https://github.com/boostorg/lexical_cast/issues/21) +* [Log](/libs/log/): + + + General changes: + + - Removed the previously deprecated `type\_info\_wrapper`. + + New features: + + - Added a way to access the current file name from the text file + sink backend. The file name can be obtained with the `get\_current\_file\_name` method. + + Bug fixes: + + - Fixed compilation errors for Android API prior to version 21. + - Streaming operators now take scalar types and enums by value. + This allows to output static constants and bitfields directly + into formatting stream and record stream. ([#11998](https://svn.boost.org/trac/boost/ticket/11998)) + - Fixed auto-detection of native syslog API. ([#12600](https://svn.boost.org/trac/boost/ticket/12600)) + - In UDP socket based syslog backend implementation, changed + the syslog message format for better compliance with RFC3164. + - File close handler installed in text file sink backend is no + longer called if the file is not open yet. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Metaparse](/libs/metaparse/): + + + Improved the implementation of `BOOST\_METAPARSE\_STRING` + + - The maximal string length limit has been increased to 2048 + - The maximal string length limit can be extended beyond 2048 + by regenerating some of the Boost headers using a script (part + of the library) + - The string length limit can be changed within a compilation + unit +* [Move](/libs/move/): + + + Improved experimental adaptive sort algorithm performance + + Activate BOOST\_MOVE\_FORCEINLINE +* [Optional](/libs/optional/): + + + Added two new in-place constructors. They work similarly to `emplace()` + functions: they initialize the contained value by perfect-forwarding + the obtained arguments. One constructor always initializes the contained + value, the other based on a boolean condition. + + Syntax `o = + {}` now correctly un-initializes + an `optional`, just + like in `std::optional`. + + Fixed `optional&>` + initialization. ([#12203](https://svn.boost.org/trac/boost/ticket/12203)) + + Optional constructors are sfinae-friendly. This fixes interaction + with `std::tuple`. ([#12563](https://svn.boost.org/trac/boost/ticket/12563)) +* [Phoenix](/libs/phoenix/): + + + Most of modules now support C++11 variadic templates. + + Fixed type deduction failure with result type. + + Suppress unused warnings. + + Fixed too few arguments error on binary math functions. + + Added workarounds for older compiler. +* [Python](/libs/python/): + + + Added (basic) support for C++11 (std::shared\_ptr, std::unique\_ptr) + + Incorporated an extension API to wrap [NumPy](http://www.numpy.org/) + + Removed obsolete bits and pieces +* [Test](/libs/test/): + + + Boost.test v3.4 see the [Change + log](/doc/libs/1_63_0/libs/test/doc/html/boost_test/change_log.html) section for more details. + + New feature: `per\_element` + and `lexicographic` + modifiers of `BOOST\_TEST` + can also be applied to string comparison + + Breaking change: colons that appear in test case names are replaced + with underscores + + Bug fixes + + - Trac tickets [#11756](https://svn.boost.org/trac/boost/ticket/11756), [#11907](https://svn.boost.org/trac/boost/ticket/11907), [#12339](https://svn.boost.org/trac/boost/ticket/12339), [#12506](https://svn.boost.org/trac/boost/ticket/12506), + [#12507](https://svn.boost.org/trac/boost/ticket/12507), [#12530](https://svn.boost.org/trac/boost/ticket/12530), + - Trac tickets [#12531](https://svn.boost.org/trac/boost/ticket/12531) + - Pull request [PR103](https://github.com/boostorg/test/pull/103), + [PR104](https://github.com/boostorg/test/pull/104) +* [TypeIndex](/libs/type_index/): + + + Added `runtime\_cast` + to the library as an emulation of `dynamic\_cast`. + Thanks to Chris Glover for the implementation. See [runtime\_cast + reference](/doc/html/boost_typeindex_header_reference.html#header.boost.type_index.runtime_cast_hpp) for more info. + + Internals of the CTTI were made more platform independant, due to + change of the `std::size\_t` + type to `unsigned int`. +* [Units](/libs/units/): + + + Fix inspection warnings + + updated physico-chemical constants to CODATA 2014 values + + define biot correctly as 10 Ampere +* [Unordered](/libs/unordered/): + + + Fix an exception safety issue in assignment. + + Use `std::allocator\_traits` where available, + and support modern style rebind ([#12459](https://svn.boost.org/trac/boost/ticket/12459)). + + Add some allocator aware constructors. + + Use the hint iterator in `emplace\_hint`. + + Fixed some warnings. + + See the [changelog](/doc/html/unordered/changes.html) + for more details. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.8.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8.1 + + Clang, C++1z: 3.8.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.2.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1, 6.2.0 + + GCC, C++14: 5.2.0, 5.3.0, 6.1.1, 6.2.0 + + Intel: 16.0, 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0, 17.0 +* OS X: + + + Apple Clang: 7.0.2 + + Apple Clang, C++11: 7.0.2 +* Windows: + + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.2 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8.1 + + Clang, C++1z: 3.8.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.1.1, 6.2.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1, 6.2.0 + + GCC, C++14: 5.2.0, 5.3.0, 6.1.1, 6.2.0, 7.0.0 (experimental) + + GCC, C++1z: 6.1.1 + + Intel: 16.0, 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0, 17.0 +* OS X: + + + Apple Clang: 7.0.2 + + Apple Clang, C++11: 7.0.2 +* Windows: + + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.2 + + GCC,C++14: 6.1.0 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_64_0.html b/users/history/version_1_64_0.html new file mode 100644 index 0000000..46c7746 --- /dev/null +++ b/users/history/version_1_64_0.html @@ -0,0 +1,456 @@ +--- +title: Version 1.64.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.64.0 + +/\*\*/ + + + + + + + +Version 1.64.0 +============== + +Version 1.64.0 +-------------- + + +April 19th, 2017 17:42 GMT + + +[Documentation](/doc/libs/1_64_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_64\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/boost_1_64_0.tar.bz2) | 7bcc5caace97baa948931d712ea5f37038dbb1c5d89b43ad4def4ed7cb683332 | +| [boost\_1\_64\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/boost_1_64_0.tar.gz) | 0445c22a5ef3bd69f5dfb48354978421a85ab395254a26b1ffb0aa1bfd63a108 | +| windows | [boost\_1\_64\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/boost_1_64_0.7z) | 49c6abfeb5b480f6a86119c0d57235966b4690ee6ff9e6401ee868244808d155 | +| [boost\_1\_64\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/boost_1_64_0.zip) | b99973c805f38b549dbeaf88701c0abeff8b0e8eaa4066df47cac10a32097523 | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.64.0/binaries/) + + +### New Libraries + + +* [Process](/libs/process/): + Process library by Klemens + D. Morgenstern, that provides cross platorm ways to allows you to: + + + create child processes + + setup streams for child processes + + communicate with child processes through streams (synchronously or + asynchronously) + + wait for processes to exit (synchronously or asynchronously) + + terminate processes + Broken feature: + + + [GitHub + #67: *"group.wait() does not return"*](https://github.com/klemens-morgenstern/boost-process/issues/67). + +### Updated Libraries + + +* [Any](/libs/any/): + + + Suppressed false warnings about returning reference to temporary + + `boost::addressof` is now used instead of + directly taking the address [#12615](https://svn.boost.org/trac/boost/ticket/12615) + + Headers are not included using double quotes any more [#12053](https://svn.boost.org/trac/boost/ticket/12053) + + CI tests now run with `address`, + `leak`, and `undefined` sanitizers + + Added more test +* [Atomic](/libs/atomic/): + + + Fixed possible incorrect code generation in 64-bit atomic operations + on 32-bit x86 with gcc versions older than 4.7 and compatible compilers. +* [Config](/libs/config/): + + + Added `BOOST\_NO\_CXX11\_SFINAE\_EXPR` + defect detection. +* [Container](/libs/container/): + + + Fixed bugs: + + - [Trac + #12749: *"container::pmr::polymorphic\_allocator + compilation error"*](https://svn.boost.org/trac/boost/ticket/12749). + - [Trac + #11333: *"boost::basic\_string\_ref should interop + with boost::container::basic\_string"*](https://svn.boost.org/trac/boost/ticket/11333). + - [GitHub + #45: *"emplace\_back must return reference to + back(), not to \*end()"*](https://github.com/boostorg/container/pull/45). +* [Context](/libs/context/): + + + new API: call/cc + + deprecated API:execution-context + + stack manipulation on MIPS fixed + + [#12719](https://svn.boost.org/trac/boost/ticket/12719) segmentation fault when built with mingw-w64 + + [#12948](https://svn.boost.org/trac/boost/ticket/12948) Unexpected snprintf result is on Android ARM + + #38: context\_entry() crashes on macOS + + #39: Unknown directive .cpu on aarch64 with Clang 3.8 on Android + + #41: std::bind() fails with invoke() + + #46: "rename of continuation member functions" missed a + spot + + #50: bad assembly for fcontext on ppc64/sysv/elf +* [Conversion](/libs/conversion/): + + + Docs were ported to Quickbook (thanks to Mikhail Maksimov for the + port) + + Fixed a memory leak in test (thanks to Mikhail Maksimov for the fix) + + CI tests now run with `address`, + `leak`, and `undefined` sanitizers +* [Core](/libs/core/): + + + Implemented `constexpr` + `addressof` on compilers + that support C++11 `constexpr` + and SFINAE expressions (Glen Fernandes). `BOOST\_CORE\_NO\_CONSTEXPR\_ADDRESSOF` + macro indicates when `constexpr` + `addressof` is not + available. + + In `lightweight\_test.hpp`, + added new macros `BOOST\_TEST\_ALL\_EQ` + and `BOOST\_TEST\_ALL\_WITH` + for testing container contents (Bjorn Reese). +* [Coroutine2](/libs/coroutine2/): + + + #4: coroutine2<> does not accept std::bind +* [DLL](/libs/dll/): + + + Fixed WinCE compilation + + Added `boost:dll::symbol\_location\_ptr` function for + getting location of a symbol by pointer that could not be dereferenced + (`void` pointer for example) + + Fixed UB in `detail::aggressive\_ptr\_cast` + for member pointers + + Fixed leaks in experimental smart imports + + Fixed warnings + + CI tests now run with `address` + and `leak` sanitizers +* [Fiber](/libs/fiber/): + + + (un)bounded\_channel<> removed + + #100: ASIO: unbuffered\_channel / scheduler notify issue + + #105: skynet variants crash on windows + + #106: Passing a fixed\_stack allocator to async/packaged\_task doesn't + compile + + #110: Compile error on ARMv6 + + #111: endless-loop in buffered\_channel::try\_value\_pop() + + #114: buffered\_channel::try\_push `does + not wake + fibers in`pop` +* [Geometry](/libs/geometry/): + + + Improvements: + + - matrix transformation is now based on Boost.QVM instead of + Boost.Ublas + + Breaking changes: + + - ublas\_transformer is renamed to matrix\_transformer + - explicit modifier is added to constructors of rtree index::dynamic\_\* + parameters + - strategy::area::huiller replaced by strategy::area::spherical + + Solved issues: + + - [363](https://github.com/boostorg/geometry/issues/363) + Missing includes in geometry/index/parameters.hpp + - [364](https://github.com/boostorg/geometry/issues/364) + within(Linear, Areal) compilation error when arguments use + different point types + - [370](https://github.com/boostorg/geometry/issues/370) + Buffer Seg Faults with Ring as Input + + Solved tickets: + + - [11899](https://svn.boost.org/trac/boost/ticket/11899) + boost::geometry::equals doesn't handle open polygons + - [11930](https://svn.boost.org/trac/boost/ticket/11930) + Inaccuracy of area::huiller strategy + - [11931](https://svn.boost.org/trac/boost/ticket/11931) + Wrong spherical area with pole encircling polygons + - [12410](https://svn.boost.org/trac/boost/ticket/12410) + Lack of support of geographic coordinate system in correct() + - [12566](https://svn.boost.org/trac/boost/ticket/12566) + Ambiguous template instantiation in equal\_to<> when pair + value contains raw pointer + - [12861](https://svn.boost.org/trac/boost/ticket/12861) + Segmentation fault in stdlibc++ (gcc 4.8.2) affecting rtree + - [12885](https://svn.boost.org/trac/boost/ticket/12885) + Use BOOST\_THROW\_EXCEPTION instead of throw + + Bugfixes: + + - Fix distance\_measure in get\_turn\_info +* [Hash](/libs/functional/hash/): + + + Stop using `std::unary\_function` and `std::binary\_function` when they're not + available. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs: + + - [Trac + #12617 (*"clock\_gettime not available on OS X + 10.11"*)](https://svn.boost.org/trac/boost/ticket/12617). + - [Trac + #12744 (*"winapi::set\_timer\_resolution inadvertently + changes timer resolution (Windows)"*)](https://svn.boost.org/trac/boost/ticket/12744). + - [GitHub + Pull #32 (*"Conform to std::pointer\_traits requirements"*)](https://github.com/boostorg/interprocess/pull/32). + - [GitHub + Pull #33 (*"explicit cast to derived class" + and "64/32 bit processes sharing"*)](https://github.com/boostorg/interprocess/pull/33). + - [GitHub + Pull #34 (*"Update example to use multi\_index::member + instead of BOOST\_MULTI\_INDEX\_MEMBER"*)](https://github.com/boostorg/interprocess/pull/34). + - [GitHub + Pull #35 (*"Fixed options for cross-compilation"*)](https://github.com/boostorg/interprocess/pull/35). + + New experimental option `BOOST\_INTERPROCESS\_BOOTSTAMP\_IS\_SESSION\_MANAGER\_BASED` + from Windows systems. This option derives the unique bootstamp used + to name the folder where shared memory is placed from registry values + associated with the session manager. This option only works on Vista + and later systems and might be more stable than the default version. +* [Intrusive](/libs/intrusive/): + + + Fixed bugs: + + - [Boost + Trac #12745: *key\_nodeptr\_comp broken if the key type + is void\**](https://svn.boost.org/trac/boost/ticket/12745) + - [Boost + Trac #12761: *intrusive::set::swap doesn't swap the + comparison function\**](https://svn.boost.org/trac/boost/ticket/12761) +* [LexicalCast](/libs/lexical_cast/): + + + Fixed multiple warnings [#11842](https://svn.boost.org/trac/boost/ticket/11842) + + CI tests now run with `address`, + `leak`, and `undefined` sanitizers +* [Math](/libs/math/): + + + Big push to ensure all functions in also in C99 are compatible with + Annex F. + + Improved accuracy of the Bessel functions I0, I1, K0 and K1, see + [12066](https://svn.boost.org/trac/boost/ticket/12066). +* [Multi-index Containers](/libs/multi_index/index.html): + + + Fixed a bug related to ambiguous references in the presence of more + than one ranked index (ticket [#12955](https://svn.boost.org/trac/boost/ticket/12955)). + + Maintenance fixes. +* [Multiprecision](/libs/multiprecision/): + + + In `cpp\_bin\_float` + prevent double rounding when converting to a denormalized float. + See [#12527](https://svn.boost.org/trac/boost/ticket/12527). + + Fix bug in integer sqrt for very small integers. See [#12559](https://svn.boost.org/trac/boost/ticket/12559). + + Fix conversion to signed-zero in `cpp\_bin\_float`. + + Change `cpp\_bin\_float` + rounding code to round at arbitrary location so we can use it for + conversions, see [#12527](https://svn.boost.org/trac/boost/ticket/12527). + + Improve performance of 128-bit bit-scan operations. + + Fix subtraction of very small quantities in `cpp\_bin\_float`. + See: [#12580](https://svn.boost.org/trac/boost/ticket/12580). + + Bring error handling into line with C99 Annex F. See [#12581](https://svn.boost.org/trac/boost/ticket/12581). + + Fix bitwise export of trivial `cpp\_int`'s, + see [#12627](https://svn.boost.org/trac/boost/ticket/12627). + + Fix `ilogb` (and code + that uses it) to consistently return the smallest value of the exponent + type when the argument is zero, see [#12625](https://svn.boost.org/trac/boost/ticket/12625). + + Allow conversion from `\_\_float128` + to `cpp\_bin\_float`. + + Fix bug in left shift of `cpp\_int` + which would result in bit-loss, see [#12790](https://svn.boost.org/trac/boost/ticket/12790). + + Fixed bugs in bounded but variable precision `cpp\_int`'s + caused by over-aggressive constexpr optimization, see [#12798](https://svn.boost.org/trac/boost/ticket/12798). +* [Predef](/libs/predef/): + + + Fix Intel C/C++ compiler version specification. + + Add `BOOST\_VERSION\_NUMBER\_MAJOR`, + `BOOST\_VERSION\_NUMBER\_MINOR`, + `BOOST\_VERSION\_NUMBER\_PATCH` + macros to extract components from valid version numbers. + + Change VS version numbering. Versions after VS2015 will use the compiler + version instead of the varied product versions. +* [Regex](/libs/regex/): + + + Compiling with Oracle C++ toolset is no longer restricted to static + linking. + + Big effort to de-fuzz the library using libFuzzer and fix identified + issues, see: [#12818](https://svn.boost.org/trac/boost/ticket/12818). +* [Smart Pointers](/libs/smart_ptr/): + + + Rewrite of `allocate\_shared` + and `make\_shared` for + arrays for a more optimal and more maintainable implementation (Glen + Fernandes) + + Pointer cast functions with move semantics (Chris Glover) +* [Test](/libs/test/): + + + Boost.test v3.5 see the [Change + log](/doc/libs/1_64_0/libs/test/doc/html/boost_test/change_log.html) section for more details. + + New feature: + + - Now Boost.Test provides **customization + points** for logging user defined types + - JUnit output format can now have a *log-level* + - JUnit output format has not better performances when the test + modules have a lot of checks + + Bug fixes + + - Trac tickets [#11756](https://svn.boost.org/trac/boost/ticket/11756), [#12540](https://svn.boost.org/trac/boost/ticket/12540), [#12712](https://svn.boost.org/trac/boost/ticket/12712), [#12748](https://svn.boost.org/trac/boost/ticket/12748), + [#12778](https://svn.boost.org/trac/boost/ticket/12778) + - Pull request [PR107](https://github.com/boostorg/test/pull/107), + [PR108](https://github.com/boostorg/test/pull/108) +* [TypeIndex](/libs/type_index/): + + + Added `BOOST\_TYPE\_INDEX\_IMPLEMENT\_RUNTIME\_CAST`, + which implements the functionality for `runtime\_cast` + but does not include the `BOOST\_TYPE\_INDEX\_REGISTER\_CLASS` + macro (thanks to Chris Glover for imlpementing it) + + Fixed undefined macro warning in stl\_type\_index.hpp [#12739](https://svn.boost.org/trac/boost/ticket/12739) + + CI tests now run with `address`, + `leak`, and `undefined` sanitizers +* [TypeTraits](/libs/type_traits/): + + + Added new traits `make\_void` + and `void\_t`. +* [Unordered](/libs/unordered/): + + + Initial support for new C++17 member functions: `insert\_or\_assign` + and `try\_emplace` in + `unordered\_map`, `merge` and `extract` + in all containers. +* [Variant](/libs/variant/): + + + Fixed construction of variant from `recursive\_variant\_` + (thanks to Mikhail Maksimov for the fix) [#12508](https://svn.boost.org/trac/boost/ticket/12508), [#12645](https://svn.boost.org/trac/boost/ticket/12645) + + Do not enable variadic templates for MSVC2015Update1 as it still + has issues [#12236](https://svn.boost.org/trac/boost/ticket/12236) + + Workaround GCC6 crash (thanks to Mikhail Maksimov for the workaround) + [#12680](https://svn.boost.org/trac/boost/ticket/12680), [#7120](https://svn.boost.org/trac/boost/ticket/7120) + + Made `boost::polymorphic\_\*get` to work as `boost::\*get` + in undocumented border cases and fixed tests [#11950](https://svn.boost.org/trac/boost/ticket/11950) + + CI tests now run with `address`, + `leak`, and `undefined` sanitizers + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1, 3.9.1 + + Clang, C++14: 3.5, 3.6, 3.7.1, 3.8.1, 3.9.1 + + Clang, C++1z: 3.9.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0 + + GCC, C++14: 5.4.1, 6.2.0, 6.3.0 + + GCC, C++1z: 6.2.0 + + Intel: 16.0, 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0, 17.0 +* OS X: + + + Apple Clang: 7.0.2 + + Apple Clang, C++11: 7.0.2 +* Windows: + + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.2 +* FreeBSD: + + + Clang: 3.8 + + Clang, C++11: 3.8 + + Clang, C++14: 3.8 + + Clang, C++1z: 3.8 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.8.1, 3.9.1 + + Clang, C++14: 3.4, 3.5, 3.6, 3.7. 3.8, 3.8.1, 3.9.1 + + Clang, C++1z: 3.9.1, 4.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0 + + GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.0.1 + + GCC, C++1z: 6.2.0 + + Intel: 16.0, 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0, 17.0 +* OS X: + + + Apple Clang: 7.0.2 +* Windows: + + + GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4, 6.2 +* FreeBSD: + + + Clang, C++98: 3.8 + + Clang, C++11: 3.8 + + Clang, C++14: 3.8 + + Clang, C++1z: 3.8 +* QNX: + + + QCC: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5 + + Oracle Solaris Studio, C++11: 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_65_0.html b/users/history/version_1_65_0.html new file mode 100644 index 0000000..4e5847f --- /dev/null +++ b/users/history/version_1_65_0.html @@ -0,0 +1,484 @@ +--- +title: Version 1.65.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.65.0 + +/\*\*/ + + + + + + + +Version 1.65.0 +============== + +Version 1.65.0 +-------------- + + +August 21st, 2017 20:50 GMT + + +[Documentation](/doc/libs/1_65_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_65\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/source/boost_1_65_0.tar.bz2) | ea26712742e2fb079c2a566a31f3266973b76e38222b9f88b387e3c8b2f9902c | +| [boost\_1\_65\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/source/boost_1_65_0.tar.gz) | 8a142d33ab4b4ed0de3abea3280ae3b2ce91c48c09478518c73e5dd2ba8f20aa | +| windows | [boost\_1\_65\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/source/boost_1_65_0.7z) | 4873d8f3506fd8d76e2eadcf0ace83b258010fc268a4d974361af7abad5448f5 | +| [boost\_1\_65\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/source/boost_1_65_0.zip) | f3f5c37be45eb6516c95cd147d8aa4abb9b52121fc3eccc1fc65c4af0cf48592 | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.65.0/binaries/) + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. Be careful as they have not been through the normal testing + process. + + Combined patch for fixes to issues: [boost\_1\_65\_0.patch](/patches/1_65_0/boost_1_65_0.patch). + Use `patch -p1 < boost\_1\_65\_0.patch` from the root of the boost repo to + apply. Or you can apply the patches individually below. + + + +* Context and Fiber don't return continuations when they should: + + + [Context + patch](/patches/1_65_0/0001-context-function-executed-by-resume_with-has-to-retu.patch) + + [Fiber + patch](/patches/1_65_0/0002-fiber-resume_with-requires-tor-return-a-continuation.patch) +* Thread: Bug in `boost::condition\_variable` on Windows: + + + [Thread + patch 1](/patches/1_65_0/0003-thread-130-Bug-in-boost-condition_variable-on-Window.patch) + + [Thread + patch 2](/patches/1_65_0/0004-thread-130-Bug-in-boost-condition_variable-on-Window.patch) + +### New Libraries + + +* [PolyCollection](/libs/poly_collection/): + Fast + containers of polymorphic objects, from Joaquín M López Muñoz. +* [Stacktrace](/libs/stacktrace/): + Gather, store, + copy and print backtraces, from Antony Polukhin. + + + Note: Library has [issue + with MinGW](https://github.com/boostorg/stacktrace/issues/14) and may produce empty backtraces with that compiler. + +### Removed Libraries + + +* TR1 + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Changed to require g++ versions >= 4.7 to use + standard atomics, to fix a linker error when using g++ + 4.6 ([#13121](https://svn.boost.org/trac/boost/ticket/13121)). + + Enabled use of `constexpr` + and variadic templates with recent MSVC versions. + + Fixed a race condition in the Linux epoll backend, which may occur + when a socket or descriptor is closed while another thread is blocked + on epoll. + + Eliminated use of deprecated `auto\_ptr`. + + Fixed misplaced use of `asio\_handler\_is\_continuation` + result in reactive `async\_accept` + implementation. + + Changed to use `poll.h` + rather than `sys/poll.h` on some modern POSIX platforms + ([#12419](https://svn.boost.org/trac/boost/ticket/12419)). + + Fixed MSVC intellisense detection. + + Disabled use of the `\_\_thread` + keyword extension for android/clang/x86 targets. +* [Context](/libs/context/): + + + Improvements: + + - call/cc supports ucontext-API (swapcontext) + - call/cc supports Windows-Fiber-API + - call/cc supports on demand growing (segmented/split) stacks + + Bugfixes: + + - [#12719](https://svn.boost.org/trac/boost/ticket/12719): context test cases and examples segmentation fault + when built with mingw-w64 toolchain + - #52: Failing to build callcc test with g++-4.9 + + important: + + - required bug fix [420554fe9ac01482990e8ae314f4f7ba81010c9a](https://github.com/boostorg/context/commit/420554fe9ac01482990e8ae314f4f7ba81010c9a) + not included in 1.65 +* [Config](/libs/config/): + + + Added `BOOST\_NO\_CXX11\_POINTER\_TRAITS`, + `BOOST\_NO\_CXX17\_FOLD\_EXPRESSIONS`, + `BOOST\_NO\_CXX17\_INLINE\_VARIABLES`, + `BOOST\_NO\_CXX17\_STRUCTURED\_BINDINGS` + defect detection. + + BOOST\_FALLTHROUGH support for GCC 7 and above. (Glen Fernandes) +* [Core](/libs/core/): + + + Implemented `pointer\_traits` + for C++03 and higher, that implements [P0653r0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r0.html) + (Glen Fernandes). This implementation is now used by Align, Circular + Buffer, Fiber, Geometry, among other libraries. + + Added `BOOST\_TEST\_GT` + and `BOOST\_TEST\_GE` + to Lightweight Test. +* [Coroutine2](/libs/coroutine2/): + + + supports ucontext-API (swapcontext) + + supports Windows-Fiber-API + + [#13064](https://svn.boost.org/trac/boost/ticket/13064): different behavior coroutine and coroutine2 +* [DLL](/libs/dll/): + + + Fix PE parsing on non Windows platforms. +* [Fiber](/libs/fiber/): + + + Improvements: + + - hardware transactional memory (Intel TSX) supported + - NUMA supported + - ucontext-API (swapcontext) supported + - Windows-Fiber-API supported + - on demand growing stacks + + Bugfixes: + + - #121: failing to build static lib with GCC 4.8 and C++11 + - #123: assertion failure in schedule\_from\_remote + - #125: erratic crashes in testsuite + - #126: incorrect std::memory\_order value in compare\_exchange\_strong? + + important: + + - required bug fix [63f1041f0e484e64dec437a0fa780ea2463abda2](https://github.com/boostorg/fiber/commit/63f1041f0e484e64dec437a0fa780ea2463abda2) + not included in 1.65 +* [Fusion](/libs/fusion/): + + + MSVC 14.1 supports variadic containers, such as `fusion::vector`, + `fusion::deque`, `fusion::map`, + `fusion::set`, and `fusion::tuple`. + ([#12986](https://svn.boost.org/trac/boost/ticket/12986)) +* [Geometry](/libs/geometry/): + + + Improvements: + + - Add correct() overload taking area strategy + - Add is\_convex() overload taking side strategy + - Add missing relational operations (covered\_by, crosses, equals, + etc.) for MultiPoint/AnyGeometry + + Solved issues: + + - [12410](https://svn.boost.org/trac/boost/ticket/12410) + Lack of support of geographic coordinate system in correct() + - [13035](https://svn.boost.org/trac/boost/ticket/13035) + Wrong result of non-cartesian intersection strategies for segments + near poles. + - [13057](https://svn.boost.org/trac/boost/ticket/13057) + Wrong result of intersects() for linestrings caused by numerical + issue in disjoint() for boxes. + + Bugfixes: + + - Fix is\_valid which could return false for multipolygons where + an interior ring touches another interior ring + - Fix is\_valid which could return false for multipolygons where + a polygon was located in an interior ring, all touching each + other + - Fix union which could produce invalid results (for some cases, + this needs to define BOOST\_GEOMETRY\_INCLUDE\_SELF\_TURNS) + - Fix intersection (idem), but some cases are still not yet valid + - Fix difference (idem), but some cases are still not yet valid + - Fix propagation of area strategy into the internals of various + algorithms from intersection strategy + - Fix uninitialized variable in relate and reference to temporary + in overlay + - Fix error in disjoint for geographic Segment/Box + - Fix handling of non-cartesian geometries in various algorithms +* [Hash](/libs/functional/hash/): + + + Support for `char16\_t`, + `char32\_t`, `u16string`, `u32string`. +* [Log](/libs/log/): + + + General changes: + + - Improved compatibility with Solaris. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Phoenix](/libs/phoenix/): + + + Corrected some documentation. ([PR#50](https://github.com/boostorg/phoenix/pull/50)) + + `phoenix::erase` with associative container + returns iterator in C++11 mode. ([#7423](https://svn.boost.org/trac/boost/ticket/7423)) + + `std::set` and `std::multiset` + should be worked with predefined lazy functions. ([PR#52](https://github.com/boostorg/phoenix/pull/52)) + + Disable `phoenix::random\_shuffle` in C++17. ([PR#53](https://github.com/boostorg/phoenix/pull/53)) + + Don't forward declare, include instead. ([#11875](https://svn.boost.org/trac/boost/ticket/11875)) +* [Predef](/libs/predef/): + + + Fix Intel C/C++ version 9999 detection to be 12.1.0. + + Addition of `BOOST\_PREDEF\_WORKAROUND` + and `BOOST\_PREDEF\_TESTED\_AT` + macros for defect workarounds and detection. + + Add ARM64 MSVC SIMD detection. (from Minmin Gong) + + Add detection of iOS simulator vs device as a platform choice. (from + Ruslan Baratov) + + Fix MinGW incorrect header guard. (from Ruslan Baratov) +* [Program Options](/libs/program_options/): + + + Support for storing values into `boost::optional`, + thanks to Ed Catmur ([#7495](https://svn.boost.org/trac/boost/ticket/7495), + [PR#18](https://github.com/boostorg/program_options/pull/18)) + + Parsing of implicit options can now use the value from the next token. + Since 1.59, unless the value of implicit option was specified in + the same token as the option itself, the implicit value was used. + That proved inconvenient, and now we again check the next token and + use it as value if it's not an option itself. ([#25](https://github.com/boostorg/program_options/issues/25)) +* [Python](/libs/python/): + + + `eval()`, + `exec()`, + and `exec\_statement()` now allow `char + const \*` + arguments, in addition to `boost::python::str`. + + The `boost::python::numeric` API has been removed, as + it is being obsoleted by `boost::python::numpy`. + + Fix some build issues when using Python3 with MSVC. +* [Smart Pointers](/libs/smart_ptr/): + + + New class template`atomic\_shared\_ptr`, + that provides thread-safe atomic pointer operations over `shared\_ptr`. (Peter Dimov) + + New class template `local\_shared\_ptr`, + where the reference count is updated with non-atomic operations. + (Peter Dimov) + + More optimizations in `allocate\_shared` + and `make\_shared` for + arrays. (Glen Fernandes) + + Documentation has been completely rewritten in Asciidoc format. +* [Test](/libs/test/): + + + Boost.test v3.6 see the [Change + log](/doc/libs/1_65_0/libs/test/doc/html/boost_test/change_log.html) section for more details. + + New feature: + + - C++17 compatibility (tested on VS2017), thanks to [Daniela + Engert](https://github.com/DanielaE) + - Direct comparison of C-arrays in `BOOST\_TEST` + - Better global fixtures mechanism, and spitting of responsibilities + with [`BOOST\_TEST\_GLOBAL\_FIXTURE`](/doc/libs/1_65_0/libs/test/doc/html/boost_test/utf_reference/test_org_reference/test_org_boost_test_global_fixture.html) + for global fixtures and [`BOOST\_TEST\_GLOBAL\_CONFIGURATION`](/doc/libs/1_65_0/libs/test/doc/html/boost_test/utf_reference/link_references/link_boost_test_global_configuration.html) + for global initialization (compile time configuration). + - Improved support for fixtures (`setup` + / `teardown` + member function) which enables better teardown time checks + + Breaking changes + + - Some API changes for the loggers + - Deprecating `BOOST\_GLOBAL\_FIXTURE` + in favor of `BOOST\_TEST\_GLOBAL\_FIXTURE` + and `BOOST\_TEST\_GLOBAL\_CONFIGURATION` + (see above) + + Bug fixes + + - Trac tickets [#5282](https://svn.boost.org/trac/boost/ticket/5282), [#5563](https://svn.boost.org/trac/boost/ticket/5563), [#11471](https://svn.boost.org/trac/boost/ticket/11471), [#11962](https://svn.boost.org/trac/boost/ticket/11962), + [#12228](https://svn.boost.org/trac/boost/ticket/12228) + - Trac tickets [#12631](https://svn.boost.org/trac/boost/ticket/12631), [#13011](https://svn.boost.org/trac/boost/ticket/13011) + - Pull request [PR106](https://github.com/boostorg/test/pull/106) +* [Thread](/libs/thread/): + + + Important Regression on Windows: + + - [#130](https://github.com/boostorg/thread/issues/130) + windows: Bug in boost::condition\_variable on Windows Please, + merge these two patches + - + - + + Bug fixes + + - [#6787](http://svn.boost.org/trac/boost/ticket/6787) + boost::thread::sleep() hangs if system time is rolled back + - [#12519](http://svn.boost.org/trac/boost/ticket/12519) + boost::thread::try\_join\_for does not return after timeout + - [#12874](http://svn.boost.org/trac/boost/ticket/12874) + future<> extension constructor must be under BOOST\_THREAD\_PROVIDES\_FUTURE\_UNWRAP + - [#12888](http://svn.boost.org/trac/boost/ticket/12888) + Linking with boost thread does not work on mingw/gcc 4.4 + - [#12958](http://svn.boost.org/trac/boost/ticket/12958) + sync\_bounded\_queue::wait\_pull\_front( lve ) might throw + - [#13077](http://svn.boost.org/trac/boost/ticket/13077) + Linking to static 64bit libboost\_thread fails DLL initialization + - [#13155](http://svn.boost.org/trac/boost/ticket/13155) + log doesn't build on a system with pthreads + - [#121](https://github.com/boostorg/thread/issues/121) + on\_tls\_prepare is broken under VS2017 +* [TypeIndex](/libs/type_index/): + + + Include if required, thanks to + Ed Catmur [#13009](https://svn.boost.org/trac/boost/ticket/13009). + + Use native `hash\_code()` when possible on GCC-like compilers + [#13027](https://svn.boost.org/trac/boost/ticket/13027). + + Fix `ctti\_type\_index` + for GCC 7 and later, thanks to Benjamin Buch [PR16](https://github.com/boostorg/type_index/pull/16). +* [Typeof](/libs/typeof/): + + + Fix compilation error with clang-cl [ticket + 11821](https://svn.boost.org/trac10/ticket/11821). +* [Unordered](/libs/unordered/): + + + Use the same data structure for `unordered\_set` + and `unordered\_multiset`, + and for`unordered\_map` + and `unordered\_multimap`. + This is required for C++17, so that nodes can be merged and extracted + between compatible containers. + + Add deprecated attributes to long deprecated functions. + + Improved use of `allocator\_traits` + `construct` and `destroy` on C++11 compilers, using + piecewise pair construction when appropriate. + + Fewer workarounds on newer Oracle compilers. + + Avoid dereferencing pointers to uninitialized memory ([PR + #5](https://github.com/boostorg/unordered/pull/5)). +* [Utility](/libs/utility/): + + + Improved compatibility of `boost::next`/`boost::prior` with SFINAE-unfriendly iterators. + [#10847](https://svn.boost.org/trac/boost/ticket/10847), [#13002](https://svn.boost.org/trac/boost/ticket/13002). +* [Variant](/libs/variant/): + + + r-value overload for `boost::get` + was added by Albert Sverdlov [#13018](https://svn.boost.org/trac/boost/ticket/13018). + + Missing include fro `` + header was added by Adam Badura [#13037](https://svn.boost.org/trac/boost/ticket/13037). + + `boost::make\_variant\_over` was fixed and + now works with views and other Forward Sequences (thanks to Mikhail + Maksimov for the fix) [#8554](https://svn.boost.org/trac/boost/ticket/8554), [#10041](https://svn.boost.org/trac/boost/ticket/10041), [PR#35](https://github.com/boostorg/variant/pull/35). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 3.8.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.8.1, 3.9.1, 4.0.1 + + Clang, C++1z: 4.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 7.1.0 + + GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 7.1.0 + + GCC, C++17: 7.1.0 + + GCC, C++1z: 6.3.0 + + Intel: 16.0, 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0 +* OS X: + + + Clang: 8.1.0 + + Clang, C++11: 8.1.0 + + Clang, C++14: 8.1.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++11: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4 + + GCC, C++14: 6.2 +* FreeBSD: + + + Clang: 3.8.0 + + Clang, C++11: 3.8.0 + + Clang, C++14: 3.8.0 + + Clang, C++1z: 3.8.0 +* QNX: + + + QCC, C++11: 4.7.3 +* SunOS: + + + Oracle Solaris Studio: 12.5\_next, 12.5 + + Oracle Solaris Studio, C++11: 12.5\_next, 12.5 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.8.1, 3.9.1, 4.0.1 + + Clang, C++1z: 4.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 7.1.0 + + GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.1.0, 8.0.0 + + GCC, C++17: 7.1.0 + + GCC, C++1z: 6.3.0 + + Intel: 17.0 + + Intel, C++11: 16.0, 17.0 + + Intel, C++14: 16.0 +* OS X: + + + Clang: 8.1.0 + + Clang, C++11: 8.1.0 + + Clang, C++14: 8.1.0 + + Clang, C++1z: 8.1.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++11: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4 + + GCC, C++14: 6.2 +* FreeBSD: + + + Clang: 3.8.0 + + Clang, C++11: 3.8.0 + + Clang, C++14: 3.8.0 + + Clang, C++1z: 3.8.0 +* SunOS: + + + Oracle Solaris Studio: 12.5\_next, 12.5 + + Oracle Solaris Studio, C++11: 12.5\_next, 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Eric Niebler, + [Rene Rivera](/users/people/rene_rivera.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_65_1.html b/users/history/version_1_65_1.html new file mode 100644 index 0000000..3abc0a7 --- /dev/null +++ b/users/history/version_1_65_1.html @@ -0,0 +1,449 @@ +--- +title: Version 1.65.1 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.65.1 + +/\*\*/ + + + + + + + +Version 1.65.1 +============== + +Version 1.65.1 +-------------- + + +September 7th, 2017 17:31 GMT + + +[Documentation](/doc/libs/1_65_1/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_65\_1.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/source/boost_1_65_1.tar.bz2) | 9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30dcd3be81 | +| [boost\_1\_65\_1.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/source/boost_1_65_1.tar.gz) | a13de2c8fbad635e6ba9c8f8714a0e6b4264b60a29b964b940a22554705b6b60 | +| windows | [boost\_1\_65\_1.7z](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/source/boost_1_65_1.7z) | df7bea4ce58076bd8e9cd63966562d8cf969b431e1c587969e6aa408e51de606 | +| [boost\_1\_65\_1.zip](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/source/boost_1_65_1.zip) | d1775aef807bd6a14077b450cce2950d8eacd86aaf51015f79e712917f8cc3c2 | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.65.1/binaries/) + + +### Fixes in 1.65.1 + + +* [Config](/libs/config/): + + + Version macro changes for CUDA. + + Update last known MSVC version. + + MSVC 14.11 supports structured bindings. +* [Context](/libs/context/): + + + Return a continuation from functions executed by `resume\_with`. +* [Fiber](/libs/fiber/): + + + Return a continuation from functions executed by `resume\_with`. +* [Smart Pointers](/libs/smart_ptr/): + + + Fix Visual C++ version checks. + + Fix compilation for NVCC with host compiler clang. +* [Stacktrace](/libs/stacktrace/): + + + Update build testing file to detail with a MinGW issue. + + Change preprocessor file extensions to work with the installation + system. + + Support FreeBSD and other OSs that do not define `\_GNU\_SOURCE` + but have `\_Unwind\_Backtrace` + function. +* [Thread](/libs/thread/): + + + Fix bug in `boost::condition\_variable` + on Windows ([#130](https://github.com/boostorg/thread/issues/130)). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 5.0.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 5.0.0 + + Clang, C++17: 5.0.0 + + Clang, C++1z: 4.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0 + + GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0 + + GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0 + + GCC, C++17: 7.1.0 + + GCC, C++1z: 6.3.0 + + Intel: 17.0 +* OS X: + + + Clang: 8.1.0 + + Clang, C++11: 8.1.0 + + Clang, C++14: 8.1.0 + + Clang, C++1z: 8.1.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++11: 4.6.4, 4.7.3, 4.8.1 + + GCC, C++14: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, + 7.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4 + + GCC, C++14: 6.2 +* FreeBSD: + + + Clang: 3.8.0 + + Clang, C++11: 3.8.0 + + Clang, C++14: 3.8.0 + + Clang, C++1z: 3.8.0 +* QNX: + + + QCC, C++11: 4.4.2 +* SunOS: + + + Oracle Solaris Studio: 12.5\_next, 12.5 + + Oracle Solaris Studio, C++11: , 12.5\_next, 12.5 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + +### New Libraries in + 1.65.0 + + +* [PolyCollection](/libs/poly_collection/): + Fast + containers of polymorphic objects, from Joaquín M López Muñoz. +* [Stacktrace](/libs/stacktrace/): + Gather, store, + copy and print backtraces, from Antony Polukhin. + + + Note: Library has [issue + with MinGW](https://github.com/boostorg/stacktrace/issues/14) and may produce empty backtraces with that compiler. + +### Removed Libraries + in 1.65.0 + + +* TR1 + +### Updated Libraries + in 1.65.0 + + +* [Asio](/libs/asio/): + + + Changed to require g++ versions >= 4.7 to use + standard atomics, to fix a linker error when using g++ + 4.6 ([#13121](https://svn.boost.org/trac/boost/ticket/13121)). + + Enabled use of `constexpr` + and variadic templates with recent MSVC versions. + + Fixed a race condition in the Linux epoll backend, which may occur + when a socket or descriptor is closed while another thread is blocked + on epoll. + + Eliminated use of deprecated `auto\_ptr`. + + Fixed misplaced use of `asio\_handler\_is\_continuation` + result in reactive `async\_accept` + implementation. + + Changed to use `poll.h` + rather than `sys/poll.h` on some modern POSIX platforms + ([#12419](https://svn.boost.org/trac/boost/ticket/12419)). + + Fixed MSVC intellisense detection. + + Disabled use of the `\_\_thread` + keyword extension for android/clang/x86 targets. +* [Context](/libs/context/): + + + Improvements: + + - call/cc supports ucontext-API (swapcontext) + - call/cc supports Windows-Fiber-API + - call/cc supports on demand growing (segmented/split) stacks + + Bugfixes: + + - [#12719](https://svn.boost.org/trac/boost/ticket/12719): context test cases and examples segmentation fault + when built with mingw-w64 toolchain + - #52: Failing to build callcc test with g++-4.9 + + important: + + - required bug fix [420554fe9ac01482990e8ae314f4f7ba81010c9a](https://github.com/boostorg/context/commit/420554fe9ac01482990e8ae314f4f7ba81010c9a) + not included in 1.65 +* [Config](/libs/config/): + + + Added `BOOST\_NO\_CXX11\_POINTER\_TRAITS`, + `BOOST\_NO\_CXX17\_FOLD\_EXPRESSIONS`, + `BOOST\_NO\_CXX17\_INLINE\_VARIABLES`, + `BOOST\_NO\_CXX17\_STRUCTURED\_BINDINGS` + defect detection. + + BOOST\_FALLTHROUGH support for GCC 7 and above. (Glen Fernandes) +* [Core](/libs/core/): + + + Implemented `pointer\_traits` + for C++03 and higher, that implements [P0653r0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r0.html) + (Glen Fernandes). This implementation is now used by Align, Circular + Buffer, Fiber, Geometry, among other libraries. + + Added `BOOST\_TEST\_GT` + and `BOOST\_TEST\_GE` + to Lightweight Test. +* [Coroutine2](/libs/coroutine2/): + + + supports ucontext-API (swapcontext) + + supports Windows-Fiber-API + + [#13064](https://svn.boost.org/trac/boost/ticket/13064): different behavior coroutine and coroutine2 +* [DLL](/libs/dll/): + + + Fix PE parsing on non Windows platforms. +* [Fiber](/libs/fiber/): + + + Improvements: + + - hardware transactional memory (Intel TSX) supported + - NUMA supported + - ucontext-API (swapcontext) supported + - Windows-Fiber-API supported + - on demand growing stacks + + Bugfixes: + + - #121: failing to build static lib with GCC 4.8 and C++11 + - #123: assertion failure in schedule\_from\_remote + - #125: erratic crashes in testsuite + - #126: incorrect std::memory\_order value in compare\_exchange\_strong? + + important: + + - required bug fix [63f1041f0e484e64dec437a0fa780ea2463abda2](https://github.com/boostorg/fiber/commit/63f1041f0e484e64dec437a0fa780ea2463abda2) + not included in 1.65 +* [Fusion](/libs/fusion/): + + + MSVC 14.1 supports variadic containers, such as `fusion::vector`, + `fusion::deque`, `fusion::map`, + `fusion::set`, and `fusion::tuple`. + ([#12986](https://svn.boost.org/trac/boost/ticket/12986)) +* [Geometry](/libs/geometry/): + + + Improvements: + + - Add correct() overload taking area strategy + - Add is\_convex() overload taking side strategy + - Add missing relational operations (covered\_by, crosses, equals, + etc.) for MultiPoint/AnyGeometry + + Solved issues: + + - [12410](https://svn.boost.org/trac/boost/ticket/12410) + Lack of support of geographic coordinate system in correct() + - [13035](https://svn.boost.org/trac/boost/ticket/13035) + Wrong result of non-cartesian intersection strategies for segments + near poles. + - [13057](https://svn.boost.org/trac/boost/ticket/13057) + Wrong result of intersects() for linestrings caused by numerical + issue in disjoint() for boxes. + + Bugfixes: + + - Fix is\_valid which could return false for multipolygons where + an interior ring touches another interior ring + - Fix is\_valid which could return false for multipolygons where + a polygon was located in an interior ring, all touching each + other + - Fix union which could produce invalid results (for some cases, + this needs to define BOOST\_GEOMETRY\_INCLUDE\_SELF\_TURNS) + - Fix intersection (idem), but some cases are still not yet valid + - Fix difference (idem), but some cases are still not yet valid + - Fix propagation of area strategy into the internals of various + algorithms from intersection strategy + - Fix uninitialized variable in relate and reference to temporary + in overlay + - Fix error in disjoint for geographic Segment/Box + - Fix handling of non-cartesian geometries in various algorithms +* [Hash](/libs/functional/hash/): + + + Support for `char16\_t`, + `char32\_t`, `u16string`, `u32string`. +* [Log](/libs/log/): + + + General changes: + + - Improved compatibility with Solaris. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Phoenix](/libs/phoenix/): + + + Corrected some documentation. ([PR#50](https://github.com/boostorg/phoenix/pull/50)) + + `phoenix::erase` with associative container + returns iterator in C++11 mode. ([#7423](https://svn.boost.org/trac/boost/ticket/7423)) + + `std::set` and `std::multiset` + should be worked with predefined lazy functions. ([PR#52](https://github.com/boostorg/phoenix/pull/52)) + + Disable `phoenix::random\_shuffle` in C++17. ([PR#53](https://github.com/boostorg/phoenix/pull/53)) + + Don't forward declare, include instead. ([#11875](https://svn.boost.org/trac/boost/ticket/11875)) +* [Predef](/libs/predef/): + + + Fix Intel C/C++ version 9999 detection to be 12.1.0. + + Addition of `BOOST\_PREDEF\_WORKAROUND` + and `BOOST\_PREDEF\_TESTED\_AT` + macros for defect workarounds and detection. + + Add ARM64 MSVC SIMD detection. (from Minmin Gong) + + Add detection of iOS simulator vs device as a platform choice. (from + Ruslan Baratov) + + Fix MinGW incorrect header guard. (from Ruslan Baratov) +* [Program Options](/libs/program_options/): + + + Support for storing values into `boost::optional`, + thanks to Ed Catmur ([#7495](https://svn.boost.org/trac/boost/ticket/7495), + [PR#18](https://github.com/boostorg/program_options/pull/18)) + + Parsing of implicit options can now use the value from the next token. + Since 1.59, unless the value of implicit option was specified in + the same token as the option itself, the implicit value was used. + That proved inconvenient, and now we again check the next token and + use it as value if it's not an option itself. ([#25](https://github.com/boostorg/program_options/issues/25)) +* [Python](/libs/python/): + + + `eval()`, + `exec()`, + and `exec\_statement()` now allow `char + const \*` + arguments, in addition to `boost::python::str`. + + The `boost::python::numeric` API has been removed, as + it is being obsoleted by `boost::python::numpy`. + + Fix some build issues when using Python3 with MSVC. +* [Smart Pointers](/libs/smart_ptr/): + + + New class template`atomic\_shared\_ptr`, + that provides thread-safe atomic pointer operations over `shared\_ptr`. (Peter Dimov) + + New class template `local\_shared\_ptr`, + where the reference count is updated with non-atomic operations. + (Peter Dimov) + + More optimizations in `allocate\_shared` + and `make\_shared` for + arrays. (Glen Fernandes) + + Documentation has been completely rewritten in Asciidoc format. +* [Test](/libs/test/): + + + Boost.test v3.6 see the [Change + log](/doc/libs/1_65_0/libs/test/doc/html/boost_test/change_log.html) section for more details. + + New feature: + + - C++17 compatibility (tested on VS2017), thanks to [Daniela + Engert](https://github.com/DanielaE) + - Direct comparison of C-arrays in `BOOST\_TEST` + - Better global fixtures mechanism, and spitting of responsibilities + with [`BOOST\_TEST\_GLOBAL\_FIXTURE`](/doc/libs/1_65_0/libs/test/doc/html/boost_test/utf_reference/test_org_reference/test_org_boost_test_global_fixture.html) + for global fixtures and [`BOOST\_TEST\_GLOBAL\_CONFIGURATION`](/doc/libs/1_65_0/libs/test/doc/html/boost_test/utf_reference/link_references/link_boost_test_global_configuration.html) + for global initialization (compile time configuration). + - Improved support for fixtures (`setup` + / `teardown` + member function) which enables better teardown time checks + + Breaking changes + + - Some API changes for the loggers + - Deprecating `BOOST\_GLOBAL\_FIXTURE` + in favor of `BOOST\_TEST\_GLOBAL\_FIXTURE` + and `BOOST\_TEST\_GLOBAL\_CONFIGURATION` + (see above) + + Bug fixes + + - Trac tickets [#5282](https://svn.boost.org/trac/boost/ticket/5282), [#5563](https://svn.boost.org/trac/boost/ticket/5563), [#11471](https://svn.boost.org/trac/boost/ticket/11471), [#11962](https://svn.boost.org/trac/boost/ticket/11962), + [#12228](https://svn.boost.org/trac/boost/ticket/12228) + - Trac tickets [#12631](https://svn.boost.org/trac/boost/ticket/12631), [#13011](https://svn.boost.org/trac/boost/ticket/13011) + - Pull request [PR106](https://github.com/boostorg/test/pull/106) +* [Thread](/libs/thread/): + + + Important Regression on Windows: + + - [#130](https://github.com/boostorg/thread/issues/130) + windows: Bug in boost::condition\_variable on Windows Please, + merge these two patches + - + - + + Bug fixes + + - [#6787](http://svn.boost.org/trac/boost/ticket/6787) + boost::thread::sleep() hangs if system time is rolled back + - [#12519](http://svn.boost.org/trac/boost/ticket/12519) + boost::thread::try\_join\_for does not return after timeout + - [#12874](http://svn.boost.org/trac/boost/ticket/12874) + future<> extension constructor must be under BOOST\_THREAD\_PROVIDES\_FUTURE\_UNWRAP + - [#12888](http://svn.boost.org/trac/boost/ticket/12888) + Linking with boost thread does not work on mingw/gcc 4.4 + - [#12958](http://svn.boost.org/trac/boost/ticket/12958) + sync\_bounded\_queue::wait\_pull\_front( lve ) might throw + - [#13077](http://svn.boost.org/trac/boost/ticket/13077) + Linking to static 64bit libboost\_thread fails DLL initialization + - [#13155](http://svn.boost.org/trac/boost/ticket/13155) + log doesn't build on a system with pthreads + - [#121](https://github.com/boostorg/thread/issues/121) + on\_tls\_prepare is broken under VS2017 +* [TypeIndex](/libs/type_index/): + + + Include if required, thanks to + Ed Catmur [#13009](https://svn.boost.org/trac/boost/ticket/13009). + + Use native `hash\_code()` when possible on GCC-like compilers + [#13027](https://svn.boost.org/trac/boost/ticket/13027). + + Fix `ctti\_type\_index` + for GCC 7 and later, thanks to Benjamin Buch [PR16](https://github.com/boostorg/type_index/pull/16). +* [Typeof](/libs/typeof/): + + + Fix compilation error with clang-cl [ticket + 11821](https://svn.boost.org/trac10/ticket/11821). +* [Unordered](/libs/unordered/): + + + Use the same data structure for `unordered\_set` + and `unordered\_multiset`, + and for`unordered\_map` + and `unordered\_multimap`. + This is required for C++17, so that nodes can be merged and extracted + between compatible containers. + + Add deprecated attributes to long deprecated functions. + + Improved use of `allocator\_traits` + `construct` and `destroy` on C++11 compilers, using + piecewise pair construction when appropriate. + + Fewer workarounds on newer Oracle compilers. + + Avoid dereferencing pointers to uninitialized memory ([PR + #5](https://github.com/boostorg/unordered/pull/5)). +* [Utility](/libs/utility/): + + + Improved compatibility of `boost::next`/`boost::prior` with SFINAE-unfriendly iterators. + [#10847](https://svn.boost.org/trac/boost/ticket/10847), [#13002](https://svn.boost.org/trac/boost/ticket/13002). +* [Variant](/libs/variant/): + + + r-value overload for `boost::get` + was added by Albert Sverdlov [#13018](https://svn.boost.org/trac/boost/ticket/13018). + + Missing include fro `` + header was added by Adam Badura [#13037](https://svn.boost.org/trac/boost/ticket/13037). + + `boost::make\_variant\_over` was fixed and + now works with views and other Forward Sequences (thanks to Mikhail + Maksimov for the fix) [#8554](https://svn.boost.org/trac/boost/ticket/8554), [#10041](https://svn.boost.org/trac/boost/ticket/10041), [PR#35](https://github.com/boostorg/variant/pull/35). + + + + + + + + + + + diff --git a/users/history/version_1_66_0.html b/users/history/version_1_66_0.html new file mode 100644 index 0000000..48cef1f --- /dev/null +++ b/users/history/version_1_66_0.html @@ -0,0 +1,481 @@ +--- +title: Version 1.66.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.66.0 + +/\*\*/ + + + + + + + +Version 1.66.0 +============== + +Version 1.66.0 +-------------- + + +December 18th, 2017 13:58 GMT + + +[Documentation](/doc/libs/1_66_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_66\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.tar.bz2) | 5721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9 | +| [boost\_1\_66\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.tar.gz) | bd0df411efd9a585e5a2212275f8762079fed8842264954675a4fddc46cfcf60 | +| windows | [boost\_1\_66\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.7z) | 596389389c005814ecb2a6b64c31dccd2c3e6fbc5a802b4dfada999ae5844628 | +| [boost\_1\_66\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.zip) | e1c55ebb00886c1a96528e4024be98a38b815115f62ecfe878fcf587ba715aad | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.66.0/binaries/) + + +### Note about + the new Visual Studio release + Visual Studio 15.5 was released too late for us to test this release with it. + + +### New Libraries + + +* [Beast](/libs/beast/): + Portable HTTP, WebSocket, + and network operations using only C++11 and Boost.Asio, from Vinnie Falco. +* [CallableTraits](/libs/callable_traits/): + A spiritual + successor to Boost.FunctionTypes, Boost.CallableTraits is a header-only + C++11 library for the compile-time inspection and manipulation of all 'callable' + types. Additional support for C++17 features, from Barrett Adair. +* [Mp11](/libs/mp11/): + A C++11 metaprogramming library, + from Peter Dimov. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Implemented interface changes to reflect the Networking TS ([N4656](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4656.pdf)). + + - See the [list](/doc/libs/1_66_0/doc/html/boost_asio/net_ts.html) + of new interfaces and, where applicable, the corresponding + old interfaces that have been superseded. + - The service template parameters, and the corresponding classes, + are disabled by default. For example, instead of `basic\_socket` + we now have simply `basic\_socket`. The old interface can + be enabled by defining the `BOOST\_ASIO\_ENABLE\_OLD\_SERVICES` + macro. + + Removed previously deprecated functions. + + Added support for customised handler tracking. + + Added reactor-related (i.e. descriptor readiness) events to handler + tracking. + + Added special "concurrency hint" values that may be used + to disable locking on a per `io\_context` + basis. + + Enabled perfect forwarding for the first `ssl::stream<>` constructor argument. + + Added ability to release ownership of the underlying native socket. + (Requires Windows 8.1 or later when using the I/O completion port + backend.) +* [Atomic](/libs/atomic/): + + + Implemented a set of experimental extended atomic operations for + integral types: + + - `fetch\_negate`, + `fetch\_complement` + - atomically replaces the value with a negated or binary complemented + value and returns the original value + - `opaque\_` + - equivalent to `fetch\_` except that it doesn't + return the original value + - `\_and\_test` + - atomically applies `` + and returns `true` + if the result is zero. **Note:** + The result of these operations will change to the opposite + in Boost 1.67. The code that uses these functions will need + to be updated. + - `bit\_test\_and\_set`, + `bit\_test\_and\_reset`, + `bit\_test\_and\_complement` + - atomically sets, resets or complements the specified bit + and returns the original value of the bit + + Following C++17 ([P0558R1](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0558r1.pdf)), + arithmetic operations for pointers to non-object types are no longer + provided. + + Also following C++17 exposed `atomic::value\_type` + and `atomic::difference\_type` member typedefs, + where applicable, to the user's code. + + Improved compatibility with gcc 7. In particular, using 128-bit operations + on x86-64 should no longer require linking with libatomic (the compiler-supplied + library). +* [DateTime](/libs/date_time/): + + + The library has been converted to use Boost.WinAPI as the abstraction + layer for Windows SDK. + + Fixed an integral overflow that could cause incorrect results when + adding or subtracting many years from a date (see [here](https://stackoverflow.com/questions/45537280/boost-datetime-issue-with-adding-long-year-durations)). +* [Fiber](/libs/fiber/): + + + synchronization with CUDA streams + + synchronization with ROCm/HIP streams +* [Format](/libs/format/): + + + Improvements: + + - Accept new conversion specifiers: + + * [`a`](https://github.com/boostorg/format/pull/41): sets flags + `fixed | scientific` + (i.e. `hexfloat`) + * [`b`](https://github.com/boostorg/format/pull/43): sets flag + `boolalpha` + * [`A`](https://github.com/boostorg/format/pull/41): same as + `a` plus + flag `uppercase` + * [`F`](https://github.com/boostorg/format/pull/41): same as + `f` plus + flag `uppercase` + - [42](https://github.com/boostorg/format/pull/42) + Accept new argument types `j` + and `z` from + ISO C99 (parsed and ignored like all others). + - [44](https://github.com/boostorg/format/pull/44) + Accept new argument types `I`, + `I32`, `I64`, and `w` + from Microsoft (parsed and ignored like all others). + - [33](https://github.com/boostorg/format/issues/33) + Added a development tool called `format\_matrix` + that exercises as many different combinations of format strings + as possible and logs them to a file: + + * helps prevent regressions in between boost releases + * allows for comparison against `snprintf` + + Bugfixes: + + - [36](https://github.com/boostorg/format/issues/36) + Safely allow volatile arguments to be used with operator% + - [4636](https://svn.boost.org/trac10/ticket/4636) + Explicit clamping provided to allow MSVC /RTCc to succeed + - [7477](https://svn.boost.org/trac10/ticket/7477) + Fix compatibility with MSVC /Za + - [10324](https://svn.boost.org/trac10/ticket/10324) + Const-correct cast issue resolved + - [11632](https://svn.boost.org/trac10/ticket/11632) + Fix `-fsanitize=undefined` + issue in `alt\_sstream.hpp` +* [Fusion](/libs/fusion/): + + + [PR#149](https://github.com/boostorg/fusion/pull/149) + `isspace(c)` + is not a macro in Dinkum clib for VxWorks, thanks to Brian Kuhl(@kuhlenough). + + [PR#150](https://github.com/boostorg/fusion/pull/150) + Remove circular preprocessor include, thanks to Gregor Jasny(@gjasny). + + [PR#151](https://github.com/boostorg/fusion/pull/151) + Change base of `fusion::tuple`. + + [PR#153](https://github.com/boostorg/fusion/pull/153) + Fixed compile error with `std::array`. + + [PR#154](https://github.com/boostorg/fusion/pull/154) + Fixed bugs nesting and copying on c++03. +* [Geometry](/libs/geometry/): + + + Improvements: + + - Add distance for geographic PointLike/AnyGeometry. + + Bugfixes: + + - Fixes in results of union/intersection/difference which could + be incorrect in very complex cases + - Fixes in validity of union/intersection/difference/buffer + - Fixes in set and relational operations for non-cartesian coordinate + systems. +* [Iterator](/libs/iterator/): + + + `next()`/`prior()` + functions now support user's iterators that don't specify nested + types such as `iterator\_category`, + `difference\_type`, + etc. and instead specialize `std::iterator\_traits` + to define those types. The compiler must support C++17-compatible + `std::iterator\_traits` for this to work. +* [Log](/libs/log/): + + + Bug fixes: + + - Fixed a bug in `file\_collector::scan\_for\_files` + that could cause incorrectly named log files in the target + directory after the user's application restart. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + New Features: + + - Add Gauss and Gauss-Kronrod quadrature routines. + - Add double-exponential (tanh-sinh, exp-sinh and sinh-sinh) + quadrature routines. + - Add Chebyshev polynomial evaluation, roots, integration, differentiation, + and interpolation routines. +* [Multi-index Containers](/libs/multi_index/index.html): + + + Made `modify` and + `modify\_key` more robust + so that the modified element is erased if the modifier throws or + the rollback functor does not properly restore the element (full + discussion at ticket [#12542](https://svn.boost.org/trac/boost/ticket/12542)). This is technically backwards + incompatible; for instance, the following code: + + + ``` + c.modify(c.begin(),[](auto&){throw 0;}); + + ``` + + + keeps the container `c` + untouched in former versions of Boost whereas now `c.begin()` is erased. Thanks to Jon Kalb for + raising the issue. + + Maintenance fixes. +* [Optional](/libs/optional/index.html): + + + On newer compilers `optional` + is now trivially-copyable for scalar `T`s. + This uses a different storage (just `T` + rather than `aligned\_storage`). + We require the compiler to support defaulted functions. + + Changed the implementation of `operator==` to get rid of the `-Wmaybe-uninitialized` + false-positive warning from GCC. +* [PolyCollection](/libs/poly_collection/): + + + Boost.PolyCollection has been backported to GCC 4.8 to 4.9 and Clang + 3.3 to 3.6. The version of libstdc++-v3 shipped with GCC 4.8 (which + can also be used by Clang) has deficiencies that result in the following + limitations when using Boost.PolyCollection: + + - Stateful allocators are not properly supported. + - Allocator-extended move construction decays to allocator-extended + copy construction. + - Copy construction crashes if an exception is thrown during + element copying. + + Maintenance fixes. +* [Predef](/libs/predef/): + + + Improved Windows Universal Platform detection. (from James E. King, + III) + + Add detection for CloudABI with cloudlibc. (from James E. King, III) + + Various other bug fixes. +* [Regex](/libs/regex/): + + + Bug fixes: + + - Numerous small fixes for security issues discovered by de-fuzzing. +* [Stacktrace](/libs/stacktrace/): + + + Now works out-of-the-box on MinGW-w64. + + Now works on MinGW (without `-w64`) if `libbacktrace` + is properly installed. See "MinGW specific notes" section + in documentation for more info. +* [Thread](/libs/thread/): + + + Bugs Fixes + + - [#12323](http://svn.boost.org/trac/boost/ticket/12323) + windows - boost/thread/win32/mfc\_thread\_init.hpp has wrong + signature for \_pRawDllMainOrig + - [#12730](http://svn.boost.org/trac/boost/ticket/12730) + windows - static threads library is incompatible with MSVC + 2017 RC + - [#12976](http://svn.boost.org/trac/boost/ticket/12976) + Boost Thread Executors documentation mistakes + - [#12949](http://svn.boost.org/trac/boost/ticket/12949) + using sleep\_for in a thread context without including boost/thread/thread.hpp + yields incorrect behaviour when BOOST\_THREAD\_HAS\_CONDATTR\_SET\_CLOCK\_MONOTONIC + is defined + - [#13019](http://svn.boost.org/trac/boost/ticket/13019) + ABI compatibility for BOOST\_THREAD\_PROVIDES\_INTERRUPTIONS incomplete + - [#13069](http://svn.boost.org/trac/boost/ticket/13069) + Boost unit test "sync\_pq\_multi\_thread\_p\_lib.exe" + hung in thread library + - [#13163](http://svn.boost.org/trac/boost/ticket/13163) + boost::detail::heap\_new does not have a variadic variant + - [#13226](http://svn.boost.org/trac/boost/ticket/13226) + getpagesize() is deprecated since 199506L + - [#132](https://github.com/boostorg/thread/issues/132) + VS 2017.4 Preview deadlocks on Test 10964 + - [#133](https://github.com/boostorg/thread/issues/133) + windows - Spurious timing test failures on windows + - [#134](https://github.com/boostorg/thread/issues/134) + VS 2017.4 Preview deadlock in sync\_pq\_multi\_thread\_p\_lib.exe + - [#135](https://github.com/boostorg/thread/issues/135) + VS 2017.4 Preview test\_scheduled\_tp\_p.exe deadlock + - [#136](https://github.com/boostorg/thread/issues/136) + VS 2017.4 Preview test\_scheduler\_p.exe deadlock + - [#137](https://github.com/boostorg/thread/issues/137) + VS 2017.4 Preview executor\_ex.exe deadlock + - [#143](https://github.com/boostorg/thread/issues/143) + Failures on msvc-12.0 + - [#145](https://github.com/boostorg/thread/issues/145) + Clang build error with BOOST\_THREAD\_ATTRIBUTE\_MAY\_ALIAS + + New Experimental Feature + + - [#116](https://github.com/boostorg/thread/issues/116) + [Proposal] Add APIs for deferred set\_value/exception +* [Utility](/libs/utility/): + + + `boost/next\_prior.hpp` has been moved to Boost.Iterator. + No changes needed to the user's code. +* [Uuid](/libs/uuid/): + + + Improvements: + + - [26](https://github.com/boostorg/uuid/issues/26) + Refactored `name\_generator` + to support a configurable hash provider concept and provide + an optional MD5 hash implementation per RFC-4122. This will + make it easier to support whatever becomes the next standard + hash algorithm. + - [34](https://github.com/boostorg/uuid/issues/34) + Added RFC-4122 namespaces in `boost::uuids::ns`. + + Bugfixes: + + - [8630](https://svn.boost.org/trac10/ticket/8630) + [11482](https://svn.boost.org/trac10/ticket/11482) + [12253](https://svn.boost.org/trac10/ticket/12253) + Various deficiencies in `string\_generator` + were resolved. + - [10665](https://svn.boost.org/trac10/ticket/10665) + `name\_generator::operator()` is now const, matching docs. + - Detail headers were moved into the detail subdirectory. No + changes needed to user's code, however you may get build warnings + if you use the old header location. +* [Variant](/libs/variant/): + + + `boost::apply\_visitor` now does perfect + forwarding of visitables [#6971](https://svn.boost.org/trac/boost/ticket/6971). Great thanks to Levon Tarakchyan + for implementing this feature. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 5.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1 + + Clang, C++17: 5.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.4.0, 7.1.0, 7.2.0 + + GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1 + + GCC, C++17: 7.2.0 + + Intel: 18.0 +* OS X: + + + Clang: 9.0.0 + + Clang, C++11: 9.0.0 + + Clang, C++14: 9.0.0 + + Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4 + + GCC, C++14: 6.2 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 +* QNX: + + + QCC, C++0x: 4.4.2 + + QCC, C++11: 4.7.3 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 4.0.1, 5.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1 + + Clang, C++17: 5.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0 + + GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1, 8.0.0 + + GCC, C++17: 7.2.0 + + Intel: 18.0 +* OS X: + + + Clang: 9.0.0 + + Clang, C++11: 9.0.0 + + Clang, C++14: 9.0.0 + + Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 7.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* Android: + + + Clang: 3.6, 3.7, 3.8 + + GCC: 4.9, 5.4 + + GCC, C++14: 6.2 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 +* QNX: + + + QCC, C++0x: 4.4.2 + + QCC, C++11: 4.7.3 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_67_0.html b/users/history/version_1_67_0.html new file mode 100644 index 0000000..8fd3492 --- /dev/null +++ b/users/history/version_1_67_0.html @@ -0,0 +1,713 @@ +--- +title: Version 1.67.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.67.0 + +/\*\*/ + + + + + + + +Version 1.67.0 +============== + +Version 1.67.0 +-------------- + + +April 14th, 2018 20:37 GMT + + +[Documentation](/doc/libs/1_67_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_67\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/boost_1_67_0.tar.bz2) | 2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba | +| [boost\_1\_67\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/boost_1_67_0.tar.gz) | 8aa4e330c870ef50a896634c931adf468b21f8a69b77007e45c444151229f665 | +| windows | [boost\_1\_67\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/boost_1_67_0.7z) | 1cd94f03a71334a67d36f5161b57f5931e0cd6ecf726d7aca8bd82a3be720b74 | +| [boost\_1\_67\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/boost_1_67_0.zip) | 7e37372d8cedd0fd6b7529e9dd67c2cb1c60e6c607aed721f5894d704945a7ec | + + +### Third Party Downloads + + +* [Windows Binaries](https://boostorg.jfrog.io/artifactory/main/release/1.67.0/binaries/) + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. Be careful as they have not been through the normal testing + process. + + + +* Fix compiling with FreeBSD: + + + + + +* Fix Python auto-linking: + + + + +### New Libraries + + +* [Contract](/libs/contract/): + Contract programming + for C++. All contract programming features are supported: Subcontracting, + class invariants, postconditions (with old and return values), preconditions, + customizable actions on assertion failure (e.g., terminate or throw), optional + compilation and checking of assertions, etc, from Lorenzo Caminiti. +* [HOF](/libs/hof/): + Higher-order functions for C++, + from Paul Fultz II. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added missing const qualifier to `basic\_socket\_acceptor::get\_option`. + + Worked around a parsing error that occurs with some versions of gcc. + + Fixed broken code samples in tutorial. + + Added new experimental features. (Note that "experimental" + features may be changed without notice in subsequent releases.) + + - Added `experimental::detached` + completion token. + - Added `experimental::redirect\_error` + completion token. + - Added `experimental::co\_spawn` + facility for integration with the coroutines technical specification. + - Updated timeout examples to use latest features. + - Used `asio::steady\_timer` rather than + `asio::deadline\_timer`. + - Used `asio::dynamic\_buffer` rather than + `asio::streambuf`. + - Used timed `asio::io\_context::run\_for()` function for blocking clients. + - Added example showing a custom completion token for blocking + with timeouts. + + Fixed unit tests to compile when `BOOST\_ASIO\_NO\_DEPRECATED` + is defined. + + Changed socket iostreams to use chrono by default, to fix compatibility + with the Networking TS. Define `BOOST\_ASIO\_USE\_BOOST\_DATE\_TIME\_FOR\_SOCKET\_IOSTREAM` + to enable the old Boost.Date\_Time interface in `basic\_socket\_streambuf` + and `basic\_socket\_iostream`. + + Updated examples to use chrono rather than Boost.Date\_Time. + + Fixed an incorrect member function detector in the `is\_dynamic\_buffer` trait. + + Fixed an `async\_result` + incompatibility with deprecated `handler\_type`. + + Added a missing move optimisation in the SSL stream implementation. + + Fixed incorrect `basic\_resolver\_results::value\_type` + typedef. + + Fixed a compile error with some OpenSSL versions when `SSL\_OP\_NO\_COMPRESSION` is defined. + + Changed `add\_certificate\_authority` + to process multiple certificates in a bundle. + + Eliminated deprecation warning with MSVC by using `std::invoke\_result` + rather than `std::result\_of`. + + Changed to use `std::string\_view` + for C++17 or later, and `std::experimental::string\_view` + for C++14. Define the preprocessor macro `BOOST\_ASIO\_DISABLE\_STD\_STRING\_VIEW` + to force the use of std::experimental::string\_view (assuming it is + available) when compiling in C++17 mode. + + Ensured `DynamicBuffer` + template arguments are decayed before using in `enable\_if` + tests. + + Changed documentation to distinguish legacy completion handlers (which + are still required to be CopyConstructible) from new MoveConstructible + handlers. + + Suppressed a discarded return value warning in the buffer debugging + support. + + Fixed `basic\_yield\_context` + to work with completion signatures containing reference parameters. + + Ensured that stackful coroutines launched using `spawn()` correctly store decayed copies + of their function and handler arguments. + + Fixed some compatibility issues with Android. + + Added cross-compilation support to Jamfiles. + + Fixed some minor portability issues in examples. +* [Atomic](/libs/atomic/): + + + **Breaking change:** Changed the result + of the `(op)\_and\_test` + operations added in Boost 1.66 to the opposite - the functions now + return `true` if the operation + result is non-zero. This is consistent with other `test` + methods in Boost.Atomic and the C++ standard library. Users can define + `BOOST\_ATOMIC\_DETAIL\_HIGHLIGHT\_OP\_AND\_TEST` + when compiling their code to emit warnings on every use of the changed + functions. This way users can locate the code that needs to be updated. + ([#11](https://github.com/boostorg/atomic/issues/11)) + + Update for C++2a. On C++11 compilers that support scoped enums, the + `memory\_order` enumeration + is now scoped and contains constants with shorter names like `acquire`, `release` + or `seq\_cst` (i.e. + users can use `memory\_order::acquire` + instead of `memory\_order\_acquire`). + The old constants are also provided for backward compatibility. ([P0439R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0439r0.html)) + + Update for C++2a. Added experimental support for atomic operations + on floating point types. In addition to general operations, `add`, `sub`, + `negate` operations + and their `fetch\_(op)` and `opaque\_(op)` versions are supported. Lock-free + property can be tested with the new macros `BOOST\_ATOMIC\_FLOAT/DOUBLE/LONG\_DOUBLE\_LOCK\_FREE`. + The support for floating point types is optional and can be disabled + by defining `BOOST\_ATOMIC\_NO\_FLOATING\_POINT`. + ([P0020R6](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0020r6.html)) + + Added new experimental operations: + + - `negate\_and\_test` + and `complement\_and\_test` + which perform negation or bitwise complement and return `true` if the result is not zero. + - `add`, `sub`, `negate`, + `bitwise\_and`, + `bitwise\_or`, + `bitwise\_xor`, + `bitwise\_complement` + operations which perform the operation and return its result. + + For generic `atomic` specialization, the default constructor + is now trivial if `T`'s + default constructor is. + + The internal implementation of `atomic` has been updated to avoid undefined + behavior that stems from signed integer overflows. As required by + the C++ standard, the library uses two's complement representation + of signed integers internally and accroding rules of overflow. Currently, + the library requires the native signed integer types to also use + two's complement representation (but no defined overflow semantics). + + Improved Clang support. In particular, fixed DCAS not being lock-free + and fixed possible incorrect code generated on 32-bit x86. + + Improved MinGW support. For gcc versions up to 4.6, fixed compilation + of DCAS on x86. + + In x86 PIE code, asm blocks now preserve `ebx` + value. +* [Beast](/libs/beast/): + + + This version fixes significant defects in `websocket::stream` + which can lead to asserts or undefined behavior. Users are encouraged + to update to the latest Boost release. + + For a complete list of changes, please view the official [Release + Notes](/libs/beast/doc/html/beast/release_notes.html). +* [ContainerHash](/libs/container_hash/): + + + Extracted from the functional module to break a dependency cycle. + + Moved headers to new location to reflect name change, the old include + paths will still work. + + Added support for `std::string\_view`, + `std::error\_code`, `std::error\_condition`, + `std::optional`, `std::variant`, + `std::monostate` where available. + + Added explicit support for `vector`, so that it will work with libc++ + ([#13501](https://svn.boost.org/trac/boost/ticket/13501)). + + More detail in the [library + change log](/doc/html/hash/changes.html#hash.changes.boost_1_67_0). +* [Context](/libs/context/): + + + [#62](https://github.com/boostorg/context/issues/62)/[PR#64](https://github.com/boostorg/context/pull/64): fix i386/macho routines to correctly + return transfer\_t in EAX/EDX + + [#65](https://github.com/boostorg/context/issues/65): `\_\_sanitizer\_finish\_switch\_fiber` + should be called directly after context switch + + [#66](https://github.com/boostorg/context/issues/66): Clang on Windows : error: No best alternative for libs/context/build/asm\_sources + + [#73](https://github.com/boostorg/context/issues/73): fixing C2492 for execution\_context (v1) + + known bug: including all.hpp + ucontext/winfib + causes error 'forced\_unwind: is not a member of boost::context::detail' +* [Core](/libs/core/): + + + Updated `to\_address` + and `pointer\_traits` + to reflect the design adopted for C++2a in [P0653R2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r2.html) + (Glen Fernandes). +* [Coroutine2](/libs/coroutine2/): + + + [#13](https://github.com/boostorg/coroutine2/issues/13): Pull coroutine does not rethrow an exception if + it is thrown on the first entry +* [DateTime](/libs/date_time/): + + + Fixed various year 2038 (32-bit) issues ([#2818](https://svn.boost.org/trac/boost/ticket/2818)) ([#2819](https://svn.boost.org/trac/boost/ticket/2819)) ([#3487](https://svn.boost.org/trac/boost/ticket/3487)) + ([#4543](https://svn.boost.org/trac/boost/ticket/4543)) ([#8450](https://svn.boost.org/trac/boost/ticket/8450)) ([#9158](https://svn.boost.org/trac/boost/ticket/9158)) ([#9489](https://svn.boost.org/trac/boost/ticket/9489)) ([#10570](https://svn.boost.org/trac/boost/ticket/10570)) ([#12609](https://svn.boost.org/trac/boost/ticket/12609)) + + Fixed a binary serialization regression introduced in 1.66.0 ([#56](https://github.com/boostorg/date_time/issues/56)) + ([PR#58](https://github.com/boostorg/date_time/pull/58)) ([PR#70](https://github.com/boostorg/date_time/pull/70)) + + Updated the timezone database file ([#4430](https://svn.boost.org/trac/boost/ticket/4430)) ([#10087](https://svn.boost.org/trac/boost/ticket/10087)) ([PR#68](https://github.com/boostorg/date_time/pull/68)) + + Enhanced `from\_iso\_string` + so it can read output of `to\_iso\_string` + for special values ([#1078](https://svn.boost.org/trac/boost/ticket/1078)) ([PR#69](https://github.com/boostorg/date_time/pull/69)) + + Changed maximum supported year from 10000 to 9999 to resolve various + issues ([#13159](https://svn.boost.org/trac/boost/ticket/13159)) ([#12630](https://svn.boost.org/trac/boost/ticket/12630)) ([PR#71](https://github.com/boostorg/date_time/pull/71)) + + `boost::date\_time::period\_parser::delimiter\_strings` did nothing ([#11142](https://svn.boost.org/trac/boost/ticket/11142)) + ([PR#63](https://github.com/boostorg/date_time/pull/63)) + + Ensure special values are not automatically translated to integral + types ([#11168](https://svn.boost.org/trac/boost/ticket/11168)) ([PR#64](https://github.com/boostorg/date_time/pull/64)) + + `int\_adapter::is\_signed` should be const ([#12363](https://svn.boost.org/trac/boost/ticket/12363)) + ([PR#60](https://github.com/boostorg/date_time/pull/60)) + + `boost::date\_time::time\_input\_facet` throws when using + `%j` + alone ([#12910](https://svn.boost.org/trac/boost/ticket/12910)) ([PR#59](https://github.com/boostorg/date_time/pull/59)) + + Time input facet is not able to parse `%e` day ([#13194](https://svn.boost.org/trac/boost/ticket/13194)) ([PR#54](https://github.com/boostorg/date_time/pull/54)) + + Improved Github CI build environment for better project metrics and + quality ([PR#52](https://github.com/boostorg/date_time/pull/52)) ([PR#72](https://github.com/boostorg/date_time/pull/72)) + + Fixed various compiler warnings ([#3606](https://svn.boost.org/trac/boost/ticket/3606)) ([#9882](https://svn.boost.org/trac/boost/ticket/9882)) ([PR#62](https://github.com/boostorg/date_time/pull/62)) +* [DLL](/libs/dll/): + + + Fixes for calling functions on dirty `GetLastError()` [#16](https://github.com/boostorg/dll/issues/16). +* [Fiber](/libs/fiber/): + + + [#128](https://github.com/boostorg/fiber/issues/128): Assertion "! ctx->ready\_is\_linked()" when + using condition\_variable::wait\_for + + [#132](https://github.com/boostorg/fiber/issues/132): fatal error: 'stdexception' file not found + + [#141](https://github.com/boostorg/fiber/issues/141): boost::fibers::async problem + + [#146](https://github.com/boostorg/fiber/issues/146): remove unecessary lock of remote-ready-queue spinlock + + [#153](https://github.com/boostorg/fiber/issues/153): docu: replace set\_ready() by schedule() + + [#154](https://github.com/boostorg/fiber/issues/154): Document iterators on channels + + [#155](https://github.com/boostorg/fiber/issues/155): this\_fiber is wrongly documented as being a member + of boost::fibers + + [#156](https://github.com/boostorg/fiber/issues/156): Many examples are using their own barrier.hpp + + [#158](https://github.com/boostorg/fiber/issues/158): add BOOST\_FIBERS\_DECL to work\_stealing class + + [#162](https://github.com/boostorg/fiber/issues/162): remove use-coutner increment for timed wait ops + + [#166](https://github.com/boostorg/fiber/issues/166): remove assertion for wait\_is\_linked() in schedule() + + [#167](https://github.com/boostorg/fiber/issues/167): call shared\_state::owner\_destroyed() only if future + was created from + + [#168](https://github.com/boostorg/fiber/issues/168): fiber/doc/installing.qbk not not up to date +* [Filesystem](/libs/filesystem/): + + + Fix static initialization issue that caused a crash if path operations + were used before main() ([PR#62](https://github.com/boostorg/filesystem/pull/62), [PR#43](https://github.com/boostorg/filesystem/pull/43), [PR#50](https://github.com/boostorg/filesystem/pull/50), + [PR#59](https://github.com/boostorg/filesystem/pull/59)) +* [Fusion](/libs/fusion/): + + + Switch to SFINAE in template parameters on `fusion::map` + to fix compile error on newer MSVC 2017. ([PR#164](https://github.com/boostorg/fusion/pull/164)) + + Fix for compilers not compatible with CWG defect 945 on `fusion::vector`. ([PR#166](https://github.com/boostorg/fusion/pull/166)) + + Added limits precheck on sequence converter to make error message + clearer. ([PR#168](https://github.com/boostorg/fusion/pull/168)) + + Allow incomplete types in `fusion::tag\_of` + and `fusion::is\_native\_fusion\_sequence`. Note + that this changes no behaviour from previous release, but compliant + to TypeTraits's change. ([PR#171](https://github.com/boostorg/fusion/pull/171)) +* [Geometry](/libs/geometry/): + + + Improvements: + + - New map projection and SRS transformation representations (undocumented + for now due to potential interface changes). + - New densify() algorithm. + - No longer using std::iterator (thanks to Daniela Engert). + - No longer using allocator directly in the rtree. Replaced with + boost::container::allocator\_traits (thanks to Daniela Engert). + - Default rtree allocator changed to boost::container::new\_allocator + to still support move semantics emulation in C++03 with boost::container::allocator\_traits. + - Area strategies interface changed. This is potentially a breaking + change. + - Radius or Sphere can be passed into spherical strategies. + - Added Point-Box and Box-Box spherical and geographic distance() + strategies. + - Simplify (multi)polygons will discard output rings of 2 points + or (for closed polygons) 3 points, but it tries to avoid creating + those + - Simplify (multi)polygons will omit empty interior rings or + polygons from output + + Solved issues: + + - [13386](https://svn.boost.org/trac10/ticket/13386) + Workaround for some gcc compilers + - [13381](https://svn.boost.org/trac10/ticket/13381) + Compile error with matrix\_transformer in Visual C++ 2015 + - [13436](https://svn.boost.org/trac10/ticket/13436) + Incorrectness in boost::geometry::model::polygon documentation + + Bugfixes: + + - Add missing strategy resolving in length() algorithm, affecting + Variant support. + - Simplify (multi)polygons now simplifies closing point + + Changes in behavior + + - Simplify (multi)polygons now usually rotates input rings before + simplifying to select a non collinear point on its convex hull. + This improves output. +* [Locale](/libs/locale/): + + + Added support of `unique\_ptr` + interface in addition to C++2003 `auto\_ptr` + - in order to support C++2017, now you can use `BOOST\_LOCALE\_HIDE\_AUTO\_PTR` + definiton to remove `auto\_ptr` + from the interfaces and prevent deprecated watnings. + + Fixed test problem with ICU >60.1 + + Fix of solaris build + + Fixed wired FreeBSD/clang issue on optimized build. Probably compiler + workaround + + Added workaround for failing MSVC tests due to 932 codepage codecvt + issue + + Fixed bugs 6851, 12572, 12453 + + Fixed missing throw in case of failure in `icu/date\_time` + + Fixed build agains Boost.Thread v4 + + Fixed Year of week instead of year ICU backend formatting + + Fixed formatting test for ICU 56.1 and above +* [Log](/libs/log/): + + + Improved compatibility with C++17: use `allocator\_traits` + to work with allocators instead of directly accessing its members. + + Improved compatibility with gcc 7 and later by updating library ABI + namespace definition. + + Added documentation for the "Append" config file parameter + for "TextFile" sinks. The parameter was supported previously, + only the documentation was missing. +* [Math](/libs/math/index.html): + + + Add naive Monte Carlo integration support. + + Add Chebyshev interpolation routines. +* [Multi-index Containers](/libs/multi_index/index.html): + + + Elements with overloaded `operator&` are now fully accepted (ticket + [#13307](https://svn.boost.org/trac/boost/ticket/13307)). Thanks to Daniel Frey for his updating [Boost.Operators](/libs/utility/operators.htm#deref) + to help fix this issue. + + Avoided usage of `std::allocator` + members deprecated in C++17. Contributed by Daniela Engert. + + Maintenance fixes. +* [Multiprecision](/libs/multiprecision/index.html): + + + **Breaking Change:** When converting + a multiprecision integer to a narrower type, if the value is too + large (or negative) to fit in the smaller type, then the result is + either the maximum (or minimum) value of the target type. This was + always the intended behaviour, but was somewhat haphazardly enforced + before. If you really do want just the low order N bits of a value, + then you will need to mask these out prior to the case, for example: + `static\_cast(~static\_cast(0) & my\_value)`. Note that technically (to avoid + undefined behaviour) you should do the same thing with built in integer + types too. See [#13109](https://svn.boost.org/trac/boost/ticket/13109). + + Fix bug in conversion of decimal to rational types (zero needs special + handling), see [#13148](https://svn.boost.org/trac/boost/ticket/13148). + + Fix conversion from cpp\_bin\_float to a wider built in integer type, + see [#13301](https://svn.boost.org/trac/boost/ticket/13301). + + Improve performance heurists used in cpp\_bin\_float exp function. + + Fix bug in floor/ceil and cpp\_bin\_float when the exponent type is + wider than an int, see [#13264](https://svn.boost.org/trac/boost/ticket/13264). + + Disable explicit conversion operator when the target type is already + constructible from this type, see [#30](https://github.com/boostorg/multiprecision/issues/30). + + Fix support for changes new to MPIR-3.0, see [#13124](https://svn.boost.org/trac/boost/ticket/13124). +* [Optional](/libs/optional/index.html): + + + Fixed issue [#46](https://github.com/boostorg/optional/issues/46) + + Fixed `-Wzero-as-null-pointer-constant` + warnings. +* [Phoenix](/libs/phoenix/): + + + Correct documentation and example code. ([#8187](https://svn.boost.org/trac/boost/ticket/8187), [PR#56](https://github.com/boostorg/phoenix/pull/56), + [PR#57](https://github.com/boostorg/phoenix/pull/57)) + + Fixed bug with initializing phoenix lazy from array types in C++11. + ([#12733](https://svn.boost.org/trac/boost/ticket/12733), [PR#58](https://github.com/boostorg/phoenix/pull/58), [PR#61](https://github.com/boostorg/phoenix/pull/61)) + + Use proto subscript and assignment overload operators buildins to + fix compile error with some lambda experssions on recent MSVC. ([#62](https://github.com/boostorg/phoenix/issues/62), + [PR#64](https://github.com/boostorg/phoenix/pull/64), [PR#66](https://github.com/boostorg/phoenix/pull/66), [PR#67](https://github.com/boostorg/phoenix/pull/67)) + + Remove use of deprecated `std::iteratror`. + Thanks to Daniela Engert. ([PR#59](https://github.com/boostorg/phoenix/pull/59)) +* [PolyCollection](/libs/poly_collection/): + + + Maintenance fixes. +* [Python](/libs/python/): + + + The library name now includes the version suffix of the Python version + used to compile it. For example, a variant compiled with Python 2.7 + will produce library names `boost\_python27` + and `boost\_numpy27`, + etc.. Combined with a related fix in Boost.Build, this means that + it is now possible to build variants for multiple Python versions + in a single build process. +* [Spirit](/libs/spirit/): + + + Spirit.X3: + + - **Breaking change:** Removed + `with\_context` + ([#239](https://github.com/boostorg/spirit/issues/239)) + - Added noexcept to `x3::variant` + and `forward\_ast` + ([#241](https://github.com/boostorg/spirit/issues/241)) + - CR+LF lines wrongly counted in `error\_handler::position()` ([#248](https://github.com/boostorg/spirit/issues/248)) + - Fixed `unused\_type` + attribute case in `parse\_into\_container` + ([#266](https://github.com/boostorg/spirit/issues/266)) + - Fixed parsing into associative containers ([#289](https://github.com/boostorg/spirit/issues/289)) + - Fixed overflow problem in `uint\_parser` + ([#297](https://github.com/boostorg/spirit/issues/297)) + - Added VS2015 Update 3 support by using workarounds ([#308](https://github.com/boostorg/spirit/issues/308)) + - Fixed include guard names collision with Qi ([#313](https://github.com/boostorg/spirit/issues/313)) + - Added parsing into range ([#316](https://github.com/boostorg/spirit/issues/316)) ([#12928](https://svn.boost.org/trac/boost/ticket/12928)) + - Changed iterator concept static assert from `ForwardIterator` + to `ReadableIteratorConcept` + && `ForwardTraversalConcept` + ([#320](https://github.com/boostorg/spirit/issues/320)) + - Reenabled `fusion::map` + support ([#330](https://github.com/boostorg/spirit/issues/330)) + - Fixed `string("...")` and `attr("...")` to single item sequence ([#337](https://github.com/boostorg/spirit/issues/337)) + - Dereference a single item view instead of unwrapping sequence + ([#340](https://github.com/boostorg/spirit/issues/340)) + - Prevent `parse\_nan` + from dereferencing out of range iterator ([#351](https://github.com/boostorg/spirit/issues/351)) + - Use traits to test if container is empty ([#355](https://github.com/boostorg/spirit/issues/355)) + + Spirit V2 + + - Fixed keyword directives compilation on C++11 ([#256](https://github.com/boostorg/spirit/issues/256)) + ([#11493](https://svn.boost.org/trac/boost/ticket/11493)) + - Fixed subrules compilation ([#279](https://github.com/boostorg/spirit/issues/279)) ([#259](https://github.com/boostorg/spirit/issues/259)) + - Fixed subrules use after scope bug ([#284](https://github.com/boostorg/spirit/issues/284)) ([#5270](https://svn.boost.org/trac/boost/ticket/5270)) + - Fixed undefined behavior in sequential or operator. Underlying + parsers order of execution was dependent on compiler ([#310](https://github.com/boostorg/spirit/issues/310)) + - Spirit was accidentally relaying on `types` + typedef of `boost::optional`. + The typedef was removed in the new optional implementation + ([#271](https://github.com/boostorg/spirit/issues/271)) ([#12349](https://svn.boost.org/trac/boost/ticket/12349)) + - Fixed problems with `BOOST\_SPIRIT\_NO\_PREDEFINED\_TERMINALS` + (`attr\_cast`, + `confix`, `distinct`, `keywords`, + and `flush\_multi\_pass`) + ([#314](https://github.com/boostorg/spirit/issues/314)) ([#13311](https://svn.boost.org/trac/boost/ticket/13311)) + - Added missing copy assignment operator to `hold\_any` + ([#361](https://github.com/boostorg/spirit/issues/361)) ([#8268](https://svn.boost.org/trac/boost/ticket/8268)) + + Spirit.Qi: + + - Fixed alternate operator ([#201](https://github.com/boostorg/spirit/issues/201)) ([#271](https://github.com/boostorg/spirit/issues/271)) ([#12349](https://svn.boost.org/trac/boost/ticket/12349)) + - Fixed signed integer overflow in real parser ([#245](https://github.com/boostorg/spirit/issues/245)) + - Fixed overflow problem in `uint\_parser` + ([#297](https://github.com/boostorg/spirit/issues/297)) + - Fixed `get\_current\_line`, + `get\_line\_start`, + and added `get\_line\_end` + ([#304](https://github.com/boostorg/spirit/issues/304)) + - Permutations parser were always initializing optionals ([#319](https://github.com/boostorg/spirit/issues/319)) + ([#12473](https://svn.boost.org/trac/boost/ticket/12473)) + - Changed iterator concept static assert from `ForwardIterator` + to `ReadableIteratorConcept` + && `ForwardTraversalConcept` + ([#320](https://github.com/boostorg/spirit/issues/320)) + - Added assertations to real parsers to ensure that the `parse\_frac\_n` from user defined + real policy does not return negative values and also to prevent + static analyzers false-positives ([#358](https://github.com/boostorg/spirit/issues/358)) + + Spirit.Karma: + + - Fixed alternate operator ([#271](https://github.com/boostorg/spirit/issues/271)) + - Fixed `no\_buffering\_policy` + missing copy constructor ([#261](https://github.com/boostorg/spirit/issues/261)) + - The `ostream\_iterator` + was inheriting `std::iterator` + which is deprecated in C++17 ([#345](https://github.com/boostorg/spirit/issues/345)) + + Spirit.Lex: + + - Store id as promoted type to allow out-of-enum values ([#247](https://github.com/boostorg/spirit/issues/247)) + - Fixed C2001 'newline in constant' warning in generated lexers + ([#324](https://github.com/boostorg/spirit/issues/324)) ([#11540](https://svn.boost.org/trac/boost/ticket/11540)) + + Spirit.Classic: + + - Fixed `remove\_reference` + usage without a namespace in Phoenix ([#274](https://github.com/boostorg/spirit/issues/274)) + - Fixed `std::complex` usage without the + include ([#273](https://github.com/boostorg/spirit/issues/273)) + - Fixed compilation of `match` ([#275](https://github.com/boostorg/spirit/issues/275)) + - Fixed compilation with `BOOST\_DISABLE\_THREADS` + defined ([#323](https://github.com/boostorg/spirit/issues/323)) ([#12639](https://svn.boost.org/trac/boost/ticket/12639)) + - Increment scanner through iterator policy ([#336](https://github.com/boostorg/spirit/issues/336)) ([#7371](https://svn.boost.org/trac/boost/ticket/7371)) + - Removed deprecated in C++17 `std::iterator` + usage ([#345](https://github.com/boostorg/spirit/issues/345)) +* [Stacktrace](/libs/stacktrace/): + + + Async safe dumping into files on Windows OS was causing hangs on + some platforms and now is disabled [#33](https://github.com/boostorg/stacktrace/issues/33). Users are encouraged + to update to the latest Boost release. + + [ContainerHash](/libs/container_hash/) library + is now used to reduce dependencies. + + Minor fixes (including [#31](https://github.com/boostorg/stacktrace/issues/31), [#38](https://github.com/boostorg/stacktrace/issues/38), [#39](https://github.com/boostorg/stacktrace/issues/39), + [#40](https://github.com/boostorg/stacktrace/issues/40), [#42](https://github.com/boostorg/stacktrace/issues/42)). +* [Test](/libs/test/): + + + Boost.test v3.7 see the [Changes + log](/doc/libs/1_67_0/libs/test/doc/html/boost_test/change_log.html) for more details. + + Breaking changes + + - Adding test cases with the same name to the same test suite + is now reported as an error. See the changes log for more details. + + New feature: + + - Colour output on by default and available on Windows, + - Improved and clearer command line help + - `BOOST\_AUTO\_TEST\_CASE\_TEMPLATE` + now accepts a sequence of types in an `std::tuple` + + Bug fixes and pull requests: + + - Trac tickets: [#12092](https://svn.boost.org/trac/boost/ticket/12092), [#12596](https://svn.boost.org/trac/boost/ticket/12596), [#12597](https://svn.boost.org/trac/boost/ticket/12597), [#12969](https://svn.boost.org/trac/boost/ticket/12969), + [#13058](https://svn.boost.org/trac/boost/ticket/13058), [#13149](https://svn.boost.org/trac/boost/ticket/13149), [#13170](https://svn.boost.org/trac/boost/ticket/13170) + - Trac tickets: [#13181](https://svn.boost.org/trac/boost/ticket/13181), [#13371](https://svn.boost.org/trac/boost/ticket/13371), [#13387](https://svn.boost.org/trac/boost/ticket/13387), [#13398](https://svn.boost.org/trac/boost/ticket/13398), + [#13407](https://svn.boost.org/trac/boost/ticket/13407), [#13435](https://svn.boost.org/trac/boost/ticket/13435), [#13443](https://svn.boost.org/trac/boost/ticket/13443) + - Pull requests: [#112](https://github.com/boostorg/test/issues/112), [#118](https://github.com/boostorg/test/issues/118), [#118](https://github.com/boostorg/test/issues/118), [#121](https://github.com/boostorg/test/issues/121), + [#122](https://github.com/boostorg/test/issues/122), [#125](https://github.com/boostorg/test/issues/125), [#127](https://github.com/boostorg/test/issues/127) +* [TypeIndex](/libs/type_index/): + + + [ContainerHash](/libs/container_hash/) library + is now used to reduce dependencies. + + Minor fixes (including [#17](https://github.com/boostorg/type_index/issues/17)) +* [TypeTraits](/libs/type_traits/): + + + Added new traits `detected`, + `detected\_or`, `is\_detected`, `is\_detected\_convertible`, + `is\_detected\_exact`, + `is\_complete`. + + Added greatly improved code for detecting binary operators. + + Add assertions for completeness to traits which require complete + types as arguments: this prevents various traits from giving eroneous + results from incomplete types. + + Fix minor issue with mpl compatibility, see [#12212](https://svn.boost.org/trac/boost/ticket/12212). + + Add macro to indicate when `is\_constructible` + is fully implemented, see [#12003](https://svn.boost.org/trac/boost/ticket/12003). + + Update `is\_function` + and `is\_member\_function\_pointer` + to work correctly with C++17 noexcept specifications. + + Add workaround for `is\_default\_constructible` + and `std::pair`. + + Added fallback for `is\_nothrow\_swappable` + on pre-C++11 compilers. +* [Utility](/libs/utility/): + + + **Breaking change:** `` + header no longer includes `boost::next` + and `boost::prior` as they have been moved to + the iterator module. Instead include ``. + Other uses of `` are discouraged, it's better + to use the header for the specific functionality instead. +* [Unordered](/libs/unordered/): + + + Template deduction guides. + + Standard conforming `noexcept` + specifications for `swap`, + `operator=` + and node handles. + + Add `element\_type` + to iterators, so that `std::pointer\_traits` + will work. + + Support `std::piecewise\_construct` on recent Visual + C++ and Dinkumware libraries. + + Use `std::iterator\_traits` rather than the + boost iterator traits in order to remove dependency on Boost.Iterator. + + Iterators no longer inherit from `std::iterator`, + as it's deprecated ([PR#7](https://github.com/boostorg/unordered/pull/7)). + + More detail in the [library + change log](/doc/html/unordered/changes.html#unordered.changes.boost_1_67_0). +* [Units](/libs/units/): + + + Fix sqrt for scaled units [#10270](https://svn.boost.org/trac/boost/ticket/10270) [#27](https://github.com/boostorg/units/issues/27) + + Add constexpr support [#22](https://github.com/boostorg/units/issues/22) + + minor documentation fixes +* [Uuid](/libs/uuid/): + + + **Breaking change:** random\_generator + is no longer copyable ([#61](https://github.com/boostorg/uuid/issues/61)) + + Optimized random\_generator to use OS-provided entropy directly ([PR#53](https://github.com/boostorg/uuid/pull/53)) + + Provide `random\_generator\_mt19937` + for bulk UUID generation + + Handle entropy acquisition errors instead of ignoring them + + Support for Windows UWP ([#24](https://github.com/boostorg/uuid/issues/24)) + + Support for CloudABI +* [Variant](/libs/variant/): + + + Substitute function arguments on compilers with variadic templates + support and do not generate substitution metafunctions using preprocessor + [#42](https://github.com/boostorg/variant/issues/42), [#46](https://github.com/boostorg/variant/issues/46). Many thanks to Nikita Kniazev for providing + an initial fix. + + Perfect forwarding for passing visitor in apply\_visitor [#40](https://github.com/boostorg/variant/issues/40), + [#13288](https://svn.boost.org/trac/boost/ticket/13288). Many thanks to Paweł Dac! + + Minor fixes (including [#41](https://github.com/boostorg/variant/issues/41), [#44](https://github.com/boostorg/variant/issues/44)) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 5.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1 + + Clang, C++17: 5.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 7.2.0 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0 + + GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.3.0 + + GCC, C++17: 7.2.0 + + Intel, C++14: 18.0 +* OS X: + + + Clang: 9.0.0 + + Clang, C++11: 9.0.0 + + Clang, C++14: 9.0.0 + + Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 7.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 4.0.1, 5.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1 + + Clang, C++17: 5.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 4.9.2, 5.4.0, 7.2.0 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0 + + GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.3.0 + + GCC, C++17: 7.2.0 + + Intel, C++14: 18.0 +* OS X: + + + Clang: 9.0.0 + + Clang, C++11: 9.0.0 + + Clang, C++14: 9.0.0 + + Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 7.1.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements +[Beman Dawes](/users/people/beman_dawes.html), Daniel James, + Vladimir Prus and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_68_0.html b/users/history/version_1_68_0.html new file mode 100644 index 0000000..b8d8a8e --- /dev/null +++ b/users/history/version_1_68_0.html @@ -0,0 +1,420 @@ +--- +title: Version 1.68.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.68.0 + +/\*\*/ + + + + + + + +Version 1.68.0 +============== + +Version 1.68.0 +-------------- + + +August 9th, 2018 03:46 GMT + + +[Documentation](/doc/libs/1_68_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_68\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.tar.bz2) | 7f6130bc3cf65f56a618888ce9d5ea704fa10b462be126ad053e80e553d6d8b7 | +| [boost\_1\_68\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.tar.gz) | da3411ea45622579d419bfda66f45cd0f8c32a181d84adfa936f5688388995cf | +| windows | [boost\_1\_68\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.7z) | 59804d8fad02cf3b09485f3dbc0f9097c05fc1e0123f0c133b35a6c6f601109a | +| [boost\_1\_68\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.zip) | 3b1db0b67079266c40b98329d85916e910bbadfc3db3e860c049056788d4d5cd | + + +### Notes for Windows + users + Boost.WinAPI has been updated to target Windows 7 by default, where possible. + In previous releases Windows Vista was the default. + + Boost.WinAPI is used internally as the Windows SDK abstraction layer in a number + of Boost libraries, including Boost.Beast, Boost.Chrono, Boost.DateTime, Boost.Dll, + Boost.Log, Boost.Process, Boost.Stacktrace, Boost.System, Boost.Thread and + Boost.UUID. To select the target Windows version define `BOOST\_USE\_WINAPI\_VERSION` + to the numeric version similar to `\_WIN32\_WINNT` + while compiling Boost and user's code. For example: + +``` + b2 release define=BOOST\_USE\_WINAPI\_VERSION=0x0501 stage + +``` + + + The list of Windows API version numbers can be seen on [this](https://msdn.microsoft.com/en-us/library/6sehtctf.aspx) + page. + + +### New Libraries + + +* [YAP](/libs/yap/): An expression template library + for C++14 and later, from Zach Laine. + +### Updated Libraries + + +* [Beast](/libs/beast/): + + + This version fixes a missing executor work guard in all composed + operations used in the implementation. Users who are experiencing + crashes related to asynchronous completion handlers are encouraged + to upgrade. + + For a complete list of changes, please view the official [Release + Notes](/libs/beast/doc/html/beast/release_notes.html). +* [Context](/libs/context/): + + + [#78](https://github.com/boostorg/context/issues/78): Linker error with `context-impl=ucontext`: + multiple definition of `boost::context::detail::current\_rec` +* [Coroutine2](/libs/coroutine2/): + + + [#14](https://github.com/boostorg/coroutine2/issues/14): crash while stack unwinding + + [#18](https://github.com/boostorg/coroutine2/issues/18): some guidance on why to use coroutine2 + + [#20](https://github.com/boostorg/coroutine2/issues/20): failes to compile test in due to the error C2039 + + [#22](https://github.com/boostorg/coroutine2/issues/22): undefined behaviour documentation +* [Fiber](/libs/fiber/): + + + [#170](https://github.com/boostorg/fiber/issues/170): buffered\_channel::try\_push has incorrect documentation + + [#172: WIN64](https://github.com/boostorg/fiber/issues/172: WIN64): 'invalid conversion from 'HANDLE' to + 'std::thread::native\_handle\_type' errors for builds using mingw-w64 + + [#175](https://github.com/boostorg/fiber/issues/175): throw exception "Operation not permitted" + + NUMA support moved to extra library (fiber-numa); enabled via property + numa (numa=on) +* [Fusion](/libs/fusion/): + + + Added a workaround for ambiguous call of `fusion::deque` + constructor on GCC 4.4/c++0x ([PR#178](https://github.com/boostorg/fusion/pull/178), [commit](https://github.com/boostorg/fusion/pull/178/commits/9de32721749b635ff3e04e690da89cf06602c122)). + + Fixed a bug with C-style array ([PR#177](https://github.com/boostorg/fusion/pull/177)). + + Fixed a `fusion::for\_each` signature to take functor + by value ([#4427](https://svn.boost.org/trac/boost/ticket/4427)). + + - This may break existing code with non-copyable (non-movable) + functor, but the implementation wasn't correct for a long time; + the documantation was correct from the first. So, please make + sure your usage. + + Fixed unintentional MPL placeholder substitution bug on `fusion::transform` ([#5490](https://svn.boost.org/trac/boost/ticket/5490)). + + Moved description, how to conform Fusion sequence as MPL sequence, + to mpl section ([#4029](https://svn.boost.org/trac/boost/ticket/4029)). + + Added notes regarding IO facility for adapted type ([#6091](https://svn.boost.org/trac/boost/ticket/6091)). +* [Geometry](/libs/geometry/): + + + Improvements + + - [469](https://github.com/boostorg/geometry/pull/469) + Horizontal grid shift (nadgrids) in SRS transformations (undocumented + for now due to potential interface changes). + - [478](https://github.com/boostorg/geometry/pull/478) + Box-Segment distance for spherical and geographic coordinate + systems. + - [487](https://github.com/boostorg/geometry/pull/487) + Missing combinations of geometries in distance for spherical + and geographic cs + - [489](https://github.com/boostorg/geometry/pull/489) + Additional direct geodesic problem formulas for internal use + + Solved issues + + - [470](https://github.com/boostorg/geometry/issues/470) + Assertion failure with short spherical and geographic segments. + - [471](https://github.com/boostorg/geometry/issues/471) + Invalid envelope of spherical polygon + - [498](https://github.com/boostorg/geometry/issues/498) + Unexpected results with expand() and make\_inverse() for spherical + and geographic CS + - [504](https://github.com/boostorg/geometry/issues/504) + Unused parameter warnings. + + Bugfixes + + - [488](https://github.com/boostorg/geometry/pull/488) + Handle non-true-references in closing\_iterator and ever\_circling\_range\_iterator + - [495](https://github.com/boostorg/geometry/pull/495) + VxWorks 7 cross-compilation issue. +* [GIL](/libs/gil/): + + + Added + + - The library now requires a C++11-compliant compiler. + - New top-level all-in-one `include/boost/gil.hpp` + header ([PR#70](https://github.com/boostorg/gil/pull/70)). + - New Toolbox extension, [reviewed + and accepted into Boost](https://lists.boost.org/boost-announce/2011/01/0281.php). + + Changed + + - IO extensions have been entirely rewritten as IO v2, [reviewed + and accepted into Boost](https://lists.boost.org/boost-announce/2011/01/0281.php). + - Documentation has been reformatted and updated. + + Removed + + - IO v1 extension has been replaced with IO v2. +* [Graph](/libs/graph/): + + + Conditionally replace deprecated/removed C++98 `std::bind1st` + by `std::bind`, `std::auto\_ptr` + by `std::unique\_ptr`, and `std::random\_shuffle` + by `std::shuffle`. ([PR#89](https://github.com/boostorg/graph/pull/89)) + + Fix compiler error with release builds on VS2015 ([PR#84](https://github.com/boostorg/graph/pull/84)) + + Fix the Stanford GraphBase examples ([PR#87](https://github.com/boostorg/graph/pull/87)) + + Fix friend declarations for iterator\_core\_access ([PR#103](https://github.com/boostorg/graph/pull/103)) + + Add missing `` include ([PR#104](https://github.com/boostorg/graph/pull/104)) + + Avoid an unused variable warning ([PR#90](https://github.com/boostorg/graph/pull/90)) + + Fix some typos in documentation ([PR#88](https://github.com/boostorg/graph/pull/88), [PR#98](https://github.com/boostorg/graph/pull/98), [PR#102](https://github.com/boostorg/graph/pull/102)) + + Fix some issues in tests and examples ([PR#85](https://github.com/boostorg/graph/pull/85), [PR#105](https://github.com/boostorg/graph/pull/105)) +* [Lexical Cast](/libs/lexical_cast/): + + + Fixes for clang-tidy warnings [#12092](https://svn.boost.org/trac/boost/ticket/12092) +* [Log](/libs/log/): + + + Improved support for VxWorks. ([PR#39](https://github.com/boostorg/log/pull/39)) + + Save and restore `ebx` + register on x86 PIE targets in the `dump` + stream manipulator implementation. +* [Math](/libs/math/): + + + Support for arbitrary precision complex valued quadrature and hence + contour integration + + Improve performance of polynomial addition + + Continue to improve numerical integration routines, and in particular + add support for contour integrals. + + Improve accuracy of erfc function's rational approximations. +* [Multi-index Containers](/libs/multi_index/index.html): + + + Containers of moveable but non-copyable elements can now be serialized + (ticket [#13478](https://svn.boost.org/trac/boost/ticket/13478)). Thanks to Sébastien Paris for the report. + + `multi\_index\_container`'s + default constructor is no longer `explicit` + (ticket [#13518](https://svn.boost.org/trac/boost/ticket/13518)). +* [Multiprecision](/libs/multiprecision): + + + Support added for complex multiprecision numbers. + + Changed conversion to unsigned integer types to be truncating to + match standard defined behaviour. + + Correct bug in MPFR string formatting. + + Fix undefined behaviour in cpp\_dec\_float conversion from long long. + + Add support for Eigen interoperability. + + float128.hpp: Fix Intel on Windows build. + + Fix type used in temporaries when expanding expression templates + containing mixed expressions. + + Fix infinite loop in gmp\_float to fixed-point string conversion. + + Update the expression templates to issue static\_asserts with better + error messages when you try and do something unsupported. + + Fix bug in cpp\_int where incrementing to zero doesn't set the sign + correctly. + + Remove erroneous use of std::move, and rely on NVRO instead. + + Fix up support for changes to MPIR-3.0. + + Fix various conversion errors in cpp\_bin\_float when the exponent + type is a `long long`, + or else we're converting to an integer that is wider than we are. + + Fix compatibility issue with GCC-8 caused by the introduction of + `std::byte`. +* [Optional](/libs/optional/): + + + Added member function `has\_value()` for compatibility with `std::optional` ([issue + #52](https://github.com/boostorg/optional/issues/52)). + + Added member function `map()` for transforming `optional` + into `optional` + using a function of type `T + -> U`. + + Added member function `flat\_map()` for transforming `optional` + into `optional` + using a function of type `T + -> optonal`. +* [Predef](/libs/predef/): + + + Add support for \_\_ARM\_ARCH macro. (from Tim Blechmann) + + Add detection for PTX architecture. (from Benjamin Worpitz) + + Add nvcc compiler detection. (from Benjamin Worpitz) + + Add support for detecting CUDA. (from Benjamin Worpitz) + + Remove reference to obsolete BOOST\_ARCH\_AMD64. (from Peter Kolbus) +* [Program Options](/libs/program_options/): + + + Support for multiple long names for an option, thanks to Eyal Rozenberg + ([PR#53](https://github.com/boostorg/program_options/pull/53)) +* [Python](/libs/python/): + + + Bug fixes to correct autolink support (Windows) ([#193](https://github.com/boostorg/python/issues/193)) +* [Rational](/libs/rational/): + + + Fixed undefined behavior in normalize() ([PR#19](https://github.com/boostorg/rational/pull/19)). +* [System](/libs/system/): + + + Add constexpr to error\_code and error\_condition members under C++14 + and above ([PR#23](https://github.com/boostorg/system/pull/23)). +* [Signals](/libs/signals/): + + + **Removal Notice:** Boost.Signals will + be removed in the next release. Boost.Signals was deprecated in version + 1.54.0. Transition to Boost.Signals2 now to avoid disruption. +* [Spirit](/libs/spirit/): + + + Spirit.X3: + + - Small list parser optimization ([PR#368](https://github.com/boostorg/spirit/pull/368)). + - Pass container attributes through sequence parser or unary + ending down to a sequence parser ([PR#370](https://github.com/boostorg/spirit/pull/370) [#12085](https://svn.boost.org/trac/boost/ticket/12085)). + - More fine grained sequence attribute check message ([PR#371](https://github.com/boostorg/spirit/pull/371)). + - Removed redundant check in `skip\_over` + ([PR#373](https://github.com/boostorg/spirit/pull/373)). + - Workaround constexpr in noexcept VS2015 bug in entire `x3::variant` ([PR#379](https://github.com/boostorg/spirit/pull/379)). + - Fixed calc4b example compilation ([PR#384](https://github.com/boostorg/spirit/pull/384)). + - Minor code improvements ([PR#374](https://github.com/boostorg/spirit/pull/374)). + + Spirit.Qi: + + - Fixed ADT support by permutation and sequence\_or operator ([PR#376](https://github.com/boostorg/spirit/pull/376)). + - Specialize iterator\_source for random access ([PR#383](https://github.com/boostorg/spirit/pull/383)). + - Removed redundant check in `skip\_over` + ([PR#373](https://github.com/boostorg/spirit/pull/373)). + + Spirit.Karma: + + - Fixed UB in `get\_absolute\_value` + function ([PR#246](https://github.com/boostorg/spirit/pull/246)). + - Fixed use after scope bug if ADT getter returns by value ([PR#375](https://github.com/boostorg/spirit/pull/375) [#6126](https://svn.boost.org/trac/boost/ticket/6126)). + + Spirit.Classic: + + - Fixed a regression introduced in [PR#336](https://github.com/boostorg/spirit/pull/336) ([PR#386](https://github.com/boostorg/spirit/pull/386)). + - Minor code improvements ([PR#367](https://github.com/boostorg/spirit/pull/367)). +* [Stacktrace](/libs/stacktrace/): + + + Fixed compilation on Solaris and other platforms that do qualify + address as const in `dladdr` + function (github 54). + + Dropped dependency on Boost.LexicalCast. +* [Test](/libs/test/): + + + Boost.test v3.8 see the [Changes + log](libs/test/doc/html/boost_test/change_log.html) for more details. + + Breaking changes + + - The `master\_test\_suite\_t` + object is no more copyable + + New feature: + + - Dataset test case can now use command line parameters + + Bug fixes and pull requests: + + - Trac tickets: [#12095](https://svn.boost.org/trac/boost/ticket/12095), [#12953](https://svn.boost.org/trac/boost/ticket/12953), [#13504](https://svn.boost.org/trac/boost/ticket/13504), [#13525](https://svn.boost.org/trac/boost/ticket/13525), + [#13528](https://svn.boost.org/trac/boost/ticket/13528) + - Pull requests: [PR#143](https://github.com/boostorg/test/pull/143), [PR#145](https://github.com/boostorg/test/pull/145) +* [TypeIndex](/libs/type_index/): + + + Dropped dependency on Boost.MPL. +* [Uuid](/libs/uuid/): + + + **Breaking change:** sha1 detail namespace + header redirection for backwards compatibility was removed ([PR#69](https://github.com/boostorg/uuid/pull/69)). + + Added support for std::hash ([PR#67](https://github.com/boostorg/uuid/pull/67)). + + Added support for move semantics on random generators ([PR#74](https://github.com/boostorg/uuid/pull/74)). + + Properly handle EINTR when acquiring entropy ([PR#74](https://github.com/boostorg/uuid/pull/74)). + + Use getrandom(2) instead of getentropy(3) on linux ([PR#75](https://github.com/boostorg/uuid/pull/75)). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1 + + Clang, C++17: 5.0.2, 6.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0 + + Apple Clang, C++11: 9.0.0, 9.1.0 + + Apple Clang, C++14: 9.0.0, 9.1.0 + + Apple Clang, C++17: 9.1.0 + + Apple Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0 + + Clang, C++17: 5.0.2, 6.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0 + + Apple Clang, C++11: 9.0.0, 9.1.0 + + Apple Clang, C++14: 9.0.0, 9.1.0 + + Apple Clang, C++17: 9.1.0 + + Apple Clang, C++1z: 9.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Daniel James, Vladimir Prus, and Marshall Clow managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_69_0.html b/users/history/version_1_69_0.html new file mode 100644 index 0000000..27e72b7 --- /dev/null +++ b/users/history/version_1_69_0.html @@ -0,0 +1,545 @@ +--- +title: Version 1.69.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.69.0 + +/\*\*/ + + + + + + + +Version 1.69.0 +============== + +Version 1.69.0 +-------------- + + +December 12th, 2018 02:58 GMT + + +[Documentation](/doc/libs/1_69_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_69\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.bz2) | 8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406 | +| [boost\_1\_69\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.gz) | 9a2c2819310839ea373f42d69e733c339b4e9a19deab6bfec448281554aa4dbb | +| windows | [boost\_1\_69\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.7z) | af05616f71006f97833e130aad886c96136457511ace4b5496d6566e69cbe0ca | +| [boost\_1\_69\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.zip) | d074bcbcc0501c4917b965fc890e303ee70d8b01ff5712bae4a6c54f2b6b4e52 | + + +### Notes for non-Windows + users + The Boost build system now supports visibilities. If you are building shared + libraries, they will use hidden visibility by default. As a result Boost shared + libraries become smaller, load faster and have less chances to get a symbol + collision. + + See [Boost.Build + visibility and local-visibility](/build/manual/develop/index.html#bbv2.builtin.features.visibility) for more info. + + To disable that feature you can use use a command line `./b2 visibility=global` to + build. + + +### New Libraries + + +* [Safe Numerics](/libs/safe_numerics/): A library + for guaranteed correct integer arithmetic for C++14 and later, from Robert + Ramey. + +### Updated Libraries + + +* [Any](/libs/any/): + + + Fixed issue with visibility. Now `boost::any` + variables constructed in one shared library with hidden visibility + could be used and destroyed in other shared library with hidden visibility. + + Maintenance: dropped some dependencies on other Boost libraries, + fixes for docs. +* [Asio](/libs/asio/): + + + Fixed a problem with the detection of `std::future` + availability with libstdc++. + + Fixed compile error in regex overload of `read\_until`. + + Fixed a timer heap corruption issue that can occur when moving a + cancelled timer. + + Fixed detection of `std::experimental::string\_view` + and `std::string\_view` with newer clang/libc++. + + Fixed MSVC version detection for availability of `std::invoke\_result`. + + Fixed the buffer sequence traits to test the new requirements, if + `decltype` is available. + + Fixed an MSVC issue when building with exceptions disabled. + + Added SSL context options for TLS v1.3. + + Added a compile-time test for TLS v1 support. + + Fixed the macro used to test for TLS v1.2 support. + + Prevented global objects from being created once per thread on Windows. + + Fixed a crash when using `size()`, `max\_size()` or `empty()` on default-constructed resolver + results. + + Changed to move the return value in `basic\_resolver\_results::begin()` to avoid copying. + + Enabled move support for the Intel Compiler. + + Fixed `std::string\_view` detection issue when + using clang-cl. + + Fixed the handler tracking operation name for `io\_context::executor\_type::dispatch`. + + Fixed a buffer overflow that could occur when parsing an address + string with a 64-bit scope id. + + Added examples showing how to write composed operations. + + Added C++11 versions of the Timeouts, Timers, SOCKS4 and SSL examples. + + Fixed minor issues in documentation and examples. +* [Assign](/libs/assign/): + + + Add rvalue reference, perfect forwarding, and variadic template support + ([PR#6](https://github.com/boostorg/assign/pull/6)) ([#10477](https://svn.boost.org/trac/boost/ticket/10477)) + + Avoid conversion to container's allocator ([PR#29](https://github.com/boostorg/assign/pull/29)) ([#5419](https://svn.boost.org/trac/boost/ticket/5419)) + ([#7364](https://svn.boost.org/trac/boost/ticket/7364)) +* [Beast](/libs/beast/): + + + This version fixes some issues in the examples, and provides a new + experimental socket which supports built-in timeouts on asynchronous + operations. + + New CppCon 2018 [websocket + chat example](https://www.boost.org/doc/libs/master/libs/beast/doc/html/beast/examples.html#beast.examples.cppcon_2018) and [presentation + video](https://www.youtube.com/watch?v=7FQwAjELMek). + + For a complete list of changes, please view the official [Release + Notes](/libs/beast/doc/html/beast/release_notes.html). +* [CircularBuffer](/libs/circular_buffer/): + + + Use the empty base optimization for storing allocators that are empty + and not final (Glen Fernandes). +* [Concept Check](/libs/concept_check/): + + + Removed dependency on mpl. ([PR#14](https://github.com/boostorg/concept_check/pull/14)) +* [Context](/libs/context/): + + + [#85](https://github.com/boostorg/context/issues/85): duplicate alias should be missing GCC alias + + [#87](https://github.com/boostorg/context/issues/87): the clang-win toolset (clang-cl.exe) uses masm from + the underlying msvc + + [#90](https://github.com/boostorg/context/issues/90): remove useless lines in Jamfile.v2 + + [#91](https://github.com/boostorg/context/issues/91): add .file section for \*\_elf\_gas.S files +* [Core](/libs/core/): + + + Implemented `boost::empty\_value`, + for library authors to conveniently leverage the Empty Base Optimization + to store objects of potentially empty types (Glen Fernandes). This + facility is now used in Boost.Beast, Boost.CircularBuffer, Boost.MultiArray, + and more. + + Implemented `boost::quick\_exit` + to provide the C++11 standard library facility `std::quick\_exit` + functionality (Peter Dimov). + + Reduced the number of statics in Lightweight Test, and employ lighter + abort behavior for MSVC compilers upon failure to call `boost::report\_errors` (Glen Fernandes). +* [DLL](/libs/dll/): + + + Resolved link issues with the smart library [#20](https://github.com/boostorg/dll/issues/20). + + Maintenance: fixes for docs and tests. +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Performance improvements (over 2x in some cases). ([PR#26](https://github.com/boostorg/dynamic_bitset/pull/26)) + + Added range-based set, reset, flip methods ([PR#27](https://github.com/boostorg/dynamic_bitset/pull/27)) +* [Fiber](/libs/fiber/): + + + [#181](https://github.com/boostorg/fiber/issues/181): unbuffered\_channel push not return + + [#182](https://github.com/boostorg/fiber/issues/182): Remove UTF-8 BOM at begining of the file + + [#183](https://github.com/boostorg/fiber/issues/183): Fix boost-install use; should only be issued once +* [Filesystem](/libs/filesystem/): + + + Don't use `readdir\_r` + on Linux and Android since the `readdir` + function is already thread-safe. ([PR#68](https://github.com/boostorg/filesystem/pull/68), [#72](https://github.com/boostorg/filesystem/issues/72)) + + Fixed crashes in `boost::filesystem::copy` + due to undefined behavior in the implementation. ([PR#71](https://github.com/boostorg/filesystem/pull/71)) + + Fixed undefined behavior in `boost::filesystem::directory\_iterator` + implementation. ([PR#77](https://github.com/boostorg/filesystem/pull/77)) + + Fixed compilation errors when using directory iterators with `BOOST\_FOREACH`. + + Removed workarounds for older PGI C++ compiler versions to fix compilation + on the newer ones. ([PR#49](https://github.com/boostorg/filesystem/pull/49)) + + Fixed MSVC warnings about narrowing conversions. ([PR#44](https://github.com/boostorg/filesystem/pull/44)) +* [Flyweight](/libs/flyweight/index.html): + + + Fixed some issues in GCC related to Boost.MPL placeholder expression + handling. + + Maintenance fixes. +* [Function](/libs/function/): + + + Removed dependencies on mpl, test ([PR#20](https://github.com/boostorg/function/pull/20)) ([PR#22](https://github.com/boostorg/function/pull/22)) +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#486](https://github.com/boostorg/geometry/pull/486) Karney's solution of direct geodesic problem + for internal use (thanks to Adeel Ahmad). + - [PR#490](https://github.com/boostorg/geometry/pull/490) Discrete Frechet and Hausdorff distance algorithms + (thanks to Yaghyavardhan Singh Khangarot). + - [PR#496](https://github.com/boostorg/geometry/pull/496) New run-time and upgraded compile-time SRS + transformation interfaces (undocumented for now due to potential + interface changes). + + Solved issues + + - [#520](https://github.com/boostorg/geometry/issues/520) Missing documentation for dsv(). + - [#521](https://github.com/boostorg/geometry/issues/521) Wrong documentation description for distance(). + - [#524](https://github.com/boostorg/geometry/issues/524) Fixed 'enumeration values not handled in switch' + warnings. + - [#527](https://github.com/boostorg/geometry/issues/527) Workaround for VS 2017 (msvc-15). + + Bugfixes + + - [PR#505](https://github.com/boostorg/geometry/pull/505) Fixed overflow in overlay algorithms (thanks + to Dane Springmeyer). + - [PR#518](https://github.com/boostorg/geometry/pull/518) Fixed passing of temporaries in append() (thanks + to xventura81). + - [PR#522](https://github.com/boostorg/geometry/pull/522) Support python3 in building documentation. +* [GIL](/libs/gil/): + + + Changed + + - Refactored library includes to `#include + ` structure ([PR#145](https://github.com/boostorg/gil/pull/145)). + + Removed + + - Header `include/boost/gil\_all.hpp` + file as deprecated ([PR#145](https://github.com/boostorg/gil/pull/145)). + - Header `include/boost/gil\_concepts.hpp` + file as deprecated ([PR#145](https://github.com/boostorg/gil/pull/145)). + - Header `include/boost/gil\_config.hpp` + file as unnecessary ([PR#144](https://github.com/boostorg/gil/pull/144)). + + Fixed + + - Fixed `point` divide and multiply to + not to hardcode result as `point` ([PR#157](https://github.com/boostorg/gil/pull/157)). + - Fixed conflict between `std::fill\_n` + and `boost::range::fill\_n` ([PR#152](https://github.com/boostorg/gil/pull/152)). + - Fixed issue with re-assignment of functor from `for\_each\_pixel` ([PR#139](https://github.com/boostorg/gil/pull/139)). + - Fixed missing template keyword prior to dependent name `axis\_iterator` ([PR#129](https://github.com/boostorg/gil/pull/129)). +* [Integer](/libs/integer/): + + + `boost/pending/integer\_log2.hpp` header is deprecated and will + be removed in future releases. Use `boost/integer/integer\_log2.hpp` + instead. +* [Iostreams](/libs/iostreams/): + + + Remove call to nonexistent member seekpos() of std::fpos ([PR#58](https://github.com/boostorg/iostreams/pull/58)) +* [Iterator](/libs/iterator/): + + + Fixed compilation problems with ambiguous unqualified calls to `advance` and `distance` + on iterators whose types involve types in the namespace `boost`. ([#43](https://github.com/boostorg/iterator/issues/43)) +* [LexicalCast](/libs/lexical_cast/): + + + Fixed sign-conversion warnings [#8991](https://svn.boost.org/trac/boost/ticket/8991). + + Maintenance: dropped some dependencies on other Boost libraries, + fixed build system warnings. +* [Log](/libs/log/): + + + General changes: + + - Updated syslog sink backend to avoid using deprecated Boost.ASIO + interfaces. ([#59](https://github.com/boostorg/log/issues/59)) + + Bug fixes: + + - Fixed a possible incorrect estimation of the total size of + rotated files in the target directory of a text file sink in + some cases. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Logic](/libs/logic/): + + + **Breaking change:** Use explicit operator + bool when available ([PR#5](https://github.com/boostorg/logic/pull/5)) +* [Math](/libs/math/): + + + Add LambertW functions. + + Update integration routines to support complex valued integrands + and contour integrals. + + Added the derivative of the Barycentric rational approximation. + + Minor fixes to better support variable precision floating point types. + + Removed use of deprecated Boost.Endian in favour of Predef. + + Updated continued fraction and series evaluation code to support + complex types. + + Prevent logic error leading to infinite loop in toms748\_solve. See + [#138](https://github.com/boostorg/math/issues/138). + + Fix mean and standard\_deviation for extreme\_value\_distribution. See + [#139](https://github.com/boostorg/math/issues/139). + + Improve heuristics used in newton\_raphson\_iterate. See [#145](https://github.com/boostorg/math/issues/145). + + Fix result of `erf(NaN)`. See [#141 #141](https://github.com/boostorg/math/issues/141 #141). + + Big push to reduce GCC warnings. See [#136 #136](https://github.com/boostorg/math/issues/136 #136). + + Refactor polynomial addition. See [PR#132](https://github.com/boostorg/math/pull/132). + + Fix for vxWorks having a `real` + function in the global namespace. See [PR#131](https://github.com/boostorg/math/pull/131). + + Improve `sinc` approximations + and add better tests. + + Fix typo in Student's T hypothesis testing documentation, see [#143](https://github.com/boostorg/math/issues/143). +* [Mp11](/libs/mp11/): + + + Implemented the `mp\_starts\_with` + facility (Glen Fernandes). +* [MultiArray](/libs/multi_array/): + + + Improve C++11 allocator model support including: Support for C++11 + minimal allocators, support for stateful allocators, using the allocator + for construction and destruction of the value type, and using the + empty base optimization for storing empty or stateless allocators + (Glen Fernandes). +* [Multi-index Containers](/libs/multi_index/): + + + Introduced an alternative [terse + key specification syntax](/libs/multi_index/doc/tutorial/key_extraction.html#key) for C++17 compliant environments. +* [Multiprecision](/libs/multiprecision/): + + + Big update to better support variable precision types so that the + precision of the result is always the largest of all the arguments. + + Add support for allocators that are `final` + in \_\_cpp\_int (Glen Fernandes). + + Removed use of deprecated Boost.Endian in favour of Predef. + + Add support for `std::string\_view`. + + Fixed minor bug in constant initialization. See [#67](https://github.com/boostorg/multiprecision/issues/67). + + Make assignment of non-finite value to `cpp\_int` + a runtime errors. See [#58](https://github.com/boostorg/multiprecision/issues/58). + + Added typedefs for `cpp\_bin\_float\_oct` + and `cpp\_complex\_oct`. +* [PolyCollection](/libs/poly_collection/): + + + Added Boost.PolyCollection-specific versions of algorithms `std::for\_each\_n` and `std::sample`. +* [Pool](/libs/pool/): + + + Replace boost::mutex use to avoid a dependency on Boost.Thread ([PR#23](https://github.com/boostorg/pool/pull/23)) +* [Preprocessor](/libs/preprocessor/): + + + Supports the new C++ standard conforming preprocessor in VC++ 14.1, + which is currently enabled by using the /experimental:preprocessor + switch, in Visual Studio 2017 15.8 on up. +* [Rational](/libs/rational/): + + + Add constexpr support ([PR#28](https://github.com/boostorg/rational/pull/28)) ([PR#32](https://github.com/boostorg/rational/pull/32)) +* [Spirit](/libs/spirit/): + + + Spirit.X3: + + - Drop own FP routines in favor of `boost::math` + ([#392](https://github.com/boostorg/spirit/issues/392)) ([#13531](https://svn.boost.org/trac/boost/ticket/13531)) + - Missing visibility mark on exception types ([#409](https://github.com/boostorg/spirit/issues/409)) + - to\_utf8: Fixed wchar\_t handling on Windows ([#413](https://github.com/boostorg/spirit/issues/413)) + ([#395](https://github.com/boostorg/spirit/issues/395)) + + Spirit V2 + + - Drop own FP routines in favor of `boost::math` + ([#392](https://github.com/boostorg/spirit/issues/392)) ([#13531](https://svn.boost.org/trac/boost/ticket/13531)) + - Missing visibility mark on exception types ([#409](https://github.com/boostorg/spirit/issues/409)) + - Fixed transform\_attribute ambiguity ([#407](https://github.com/boostorg/spirit/issues/407)) ([#396](https://github.com/boostorg/spirit/issues/396)) + - to\_utf8: Fixed wchar\_t handling on Windows ([#413](https://github.com/boostorg/spirit/issues/413)) + ([#395](https://github.com/boostorg/spirit/issues/395)) + + Spirit.Classic: + + - Missing visibility mark on exception types ([#409](https://github.com/boostorg/spirit/issues/409)) +* [Stacktrace](/libs/stacktrace/): + + + `libbacktrace` usage + was significantly improved. `BOOST\_STACKTRACE\_USE\_BACKTRACE` + or `boost\_stacktrace\_backtrace` + users are encouraged to update: + + - Memory consumprion dropped down. + - Stack capturing became faster by an order of magnitude. + - `syminfo` fallback + enabled to provide information for visible symbols even without + debug information (thanks to github user driesdeschout!)[#60](https://github.com/boostorg/stacktrace/issues/60), + [#61](https://github.com/boostorg/stacktrace/issues/61). + - Exact location of the `backtrace.h` + header now can be specified via `BOOST\_STACKTRACE\_BACKTRACE\_INCLUDE\_FILE`, + to allow `backtrace.h` + header usage on platforms and compilers where that header is + unreachable otherwise (for example Ubuntu Xenial + Clang) [#59](https://github.com/boostorg/stacktrace/issues/59). + + Optimized stack capturing if `max\_depth` + is set (thanks to Jan Eisenhauer for the PR!) [#67](https://github.com/boostorg/stacktrace/issues/67). + + Added `to\_string(const stacktrace& )` + functions for fast conversion of stacktraces to `std::string` + [#57](https://github.com/boostorg/stacktrace/issues/57). + + Maintenance: updated docs [#62](https://github.com/boostorg/stacktrace/issues/62), tests updated. +* [System](/libs/system/): + + + Boost.System is now header-only. A stub library is still built for + compatibility, but linking to it is no longer necessary. + + Even more functions have been marked `constexpr`. + + The destructor of `error\_category` + is now `protected` and + no longer `virtual`. This + is a potentially breaking change, but its impact is expected to be + limited. + + `error\_category` now + has a constructor that accepts a 64 bit identifier, enabling distinct + category objects to compare equal. + + The constructors of `error\_category` + are now `protected`. + + A non-allocating, nonthrowing overload of `message` + has been added. + + A virtual function `failed` + has been added, allowing categories for which success is not synonymous + with 0. + + The deprecated `boost::system::throws` + object has been removed. + + `boost::throws()` + is now deprecated and its use is discouraged. + + The constructor of `system\_error` + taking a single `error\_code` + argument is now `explicit`. + + `system\_error::code()` + now returns by value. +* [Test](/libs/test/): + + + Boost.test v3.9 see the [Changes + log](libs/test/doc/html/boost_test/change_log.html) for more details. + + New feature: + + - Official support of header-only variant of Boost.Test with + multiple translation units. + - Now possible to manually add a test case by specifying its + name, with `BOOST\_TEST\_CASE\_NAME` + - Better support of `boost::exception` + in the logs + + Bug fixes and pull requests: + + - Trac tickets: [#13380](https://svn.boost.org/trac/boost/ticket/13380), [#13625](https://svn.boost.org/trac/boost/ticket/13625), [#13637](https://svn.boost.org/trac/boost/ticket/13637) + - GitHub Issues: [#149](https://github.com/boostorg/test/issues/149), [#150](https://github.com/boostorg/test/issues/150), [#156](https://github.com/boostorg/test/issues/156), [#158](https://github.com/boostorg/test/issues/158), + [#163](https://github.com/boostorg/test/issues/163) + - GitHub Pull Requests: [PR#147](https://github.com/boostorg/test/pull/147), [PR#148](https://github.com/boostorg/test/pull/148), [PR#151](https://github.com/boostorg/test/pull/151), + [PR#154](https://github.com/boostorg/test/pull/154), [PR#161](https://github.com/boostorg/test/pull/161) +* [TypeIndex](/libs/type_index/): + + + Fix the regression and speed up parsing of the `boost/type\_traits.hpp` + header by 30% (thanks to Nikita Kniazev for the PR!) [#21](https://github.com/boostorg/type_index/issues/21). +* [Utility](/libs/utility/): + + + Added support for non-inheritable empty types to `boost::compressed\_pair` + by avoiding the empty base optimization for types which are declared + as final (Glen Fernandes). +* [Variant](/libs/variant/): + + + Fixed issue with visibility. Now `boost::bad\_visit` + exception could cross the boundaries of shared library with hidden + visibility and could be catched in other shared library with hidden + visibility. +* [YAP](/libs/yap/): + + + Minor changes to support MSVC++ version 14.15 (Visual Studio 2017 + version 15.8). + + Doc fixes. + +### Discontinued Libraries + + +* Signals (v1) is now removed. Its removal was announced in 1.68 and its + deprecation was announced in 1.54. Boost 1.68 is the last release that + provides this library. Users are encouraged to use Signals2 instead. The + Boost community thanks Douglas Gregor for his work on Signals which served + its users well and which also inspired Signals2. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1 + + Clang, C++17: 5.0.2, 6.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0 + + Clang, C++17: 5.0.2, 6.0.1 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Daniel James, Vladimir Prus, Marshall Clow and Michael Caisse managed this + release. + + + + + + + + + + + + diff --git a/users/history/version_1_70_0.html b/users/history/version_1_70_0.html new file mode 100644 index 0000000..460e455 --- /dev/null +++ b/users/history/version_1_70_0.html @@ -0,0 +1,587 @@ +--- +title: Version 1.70.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.70.0 + +/\*\*/ + + + + + + + +Version 1.70.0 +============== + +Version 1.70.0 +-------------- + + +April 12th, 2019 06:04 GMT + + +[Documentation](/doc/libs/1_70_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_70\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.bz2) | 430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778 | +| [boost\_1\_70\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz) | 882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9 | +| windows | [boost\_1\_70\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.7z) | ae2bb1b35d1f238e72e3f819b42336f4bd27c9ed2092aab5d87818ccb0c9161a | +| [boost\_1\_70\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.zip) | 48f379b2e90dd1084429aae87d6bdbde9670139fa7569ee856c8c86dd366039d | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. Be careful as they have not been through the normal testing + process. + + + +* Fix moved-from executor in idle ping timeout ([#1599](https://github.com/boostorg/beast/issues/1599)) + + + [Beast + patch](/patches/1_70_0/0001-beast-fix-moved-from-executor.patch) + +### New Libraries + + +* [Outcome](/libs/outcome/): A set of tools for reporting + and handling function failures in contexts where *directly* + using C++ exception handling is unsuitable, from Niall Douglas. +* [Histogram](/libs/histogram/): Fast and extensible + multi-dimensional histograms with convenient interface for C++14, from + Hans Dembinski. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + This release includes a number of new features, bug fixes, performance + enhancements, and documentation improvements. Notable changes include: + + - Added the ability to use custom I/O executors with I/O objects + (such as sockets). + - Added a new `async\_result` + form with an `initiate` + static member function. + - Updated the Coroutines TS support and promoted it to the `asio` namespace. + - Added a new `DynamicBuffer\_v2` + concept which is CopyConstructible. + - Added a new `async\_compose` + function that simplifies the implementation of user-defined + asynchronous operations. + - Added a `make\_strand` + helper function. + - Relaxed the completion condition type requirements to only + require move-constructibility rather than copy-constructibility. + - Added a constructor for `local::basic\_endpoint` + that takes a `string\_view`. + - Added the noexcept qualifier to various functions. + - Added a new `BOOST\_ASIO\_DISABLE\_VISIBILITY` + configuration `#define`. + - Enabled recycling of the memory used to type-erase a function + object with the polymorphic executor. + - Changed receive operations to return the correct number of + bytes transferred when truncation (`error::message\_size`) + occurs on a datagram-oriented socket. + - Fixed calculation of absolute timeout when the backend uses + `pthread\_cond\_timedwait`. + - Changed the range-based asynchronous connect operation to deduce + the `EndpointSequence` + iterator type. + - Fixed `buffer\_sequence\_begin` + and `buffer\_sequence\_end` + to prevent implicit conversion. + - Ensured SSL handshake errors are propagated to the peer before + the local operation completes. + - Suppressed the `eof` + error on SSL shutdown as it actually indicates success. + - Added a fallback error code for when we OpenSSL produces an + `SSL\_ERROR\_SYSCALL` + result without an associated error. + - Changed composed asynchronous read and write operations to + move buffer sequence objects. + - Fixed a macOS-specific warning about the deprecation of `OSMemoryBarrier`. + - Fixed compile errors that occur when using the composed read + and write operations with MSVC 11.0. + - Improved `dispatch`, + `post` and `defer` documentation. + - Fixed a Windows-specific memory leak that may occur when `system\_executor` is used. + + Consult the [Revision + History](/doc/libs/1_70_0/doc/html/boost_asio/history.html) for further details. +* [Beast](/libs/beast/): +**BIG + Update!!!** + + + Some APIs have changed. + + The [reference](/libs/beast/doc/html/beast/quickref.html) + shows a star ★ next to each new item. + + Beast needs your help! + + - [Tell + Us](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) how you or your company use Beast + - Please [report](https://github.com/boostorg/beast/issues/new) + any bugs, feature requests, or general feedback + - Join the [**C++ Slack Workspace**](https://cppalliance.org/slack/) for free + and chat with us in the #beast and #boost channels + - Don't forget to [star + the repository](https://github.com/boostorg/beast) ⭐! + + More tutorials, code like the pros! + + - [Networking + Refresher](/libs/beast/doc/html/beast/using_io/asio_refresher.html) teaches you from the ground up. + - Updated [Asynchronous + Echo](/libs/beast/doc/html/beast/using_io/writing_composed_operations/echo.html) example + - Updated [**Detect SSL**](/libs/beast/doc/html/beast/using_io/writing_composed_operations/detect_ssl.html) composed operation + tutorial + - [websocket-chat-multi](/libs/beast/example/websocket/server/chat-multi) + threaded chat server with a JavaScript [browser + client](/libs/beast/example/websocket/server/chat-multi/chat_client.html) + + [`basic\_stream`](/libs/beast/doc/html/beast/ref/boost__beast__basic_stream.html) and [`tcp\_stream`](/libs/beast/doc/html/beast/ref/boost__beast__tcp_stream.html) offer: + + - Timeouts: `async\_read\_some`, + `async\_write\_some` + complete with [`error::timeout`](/libs/beast/doc/html/beast/ref/boost__beast__error.html) on expiration! + - Traffic-shaping policies [`simple`](/libs/beast/doc/html/beast/ref/boost__beast__simple_rate_policy.html) and [`unlimited`](/libs/beast/doc/html/beast/ref/boost__beast__unlimited_rate_policy.html), or a user-defined + [*RatePolicy*](/libs/beast/doc/html/beast/concepts/RatePolicy.html)! + - Put the strand directly on the socket using [P1322R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1322r0.html), + no more `bind\_executor` + at call sites! + + Base classes [`async\_base`](/libs/beast/doc/html/beast/ref/boost__beast__async_base.html) and [`stable\_async\_base`](/libs/beast/doc/html/beast/ref/boost__beast__stable_async_base.html) and handle + all composed operation boilerplate for you. + + [`ssl\_stream`](/libs/beast/doc/html/beast/ref/boost__beast__ssl_stream.html) provides a movable, + assignable SSL stream with a flat write optimization. + + All asynchronous operations use Asio's `async\_initiate` + for efficient integration with Coroutines TS. + + ⚡ ***faster compilation***, + define `BOOST\_BEAST\_SEPARATE\_COMPILATION` + and `#include ` + in one of your .cpp files! + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Context](/libs/context/): + + + [#91](https://github.com/boostorg/context/issues/91): cleanup of stack if creating ucontext fails + + [#97](https://github.com/boostorg/context/issues/97): add missing BOST\_CONTEXT\_DECL in stack\_context + + [#98](https://github.com/boostorg/context/issues/98): fix jump\_i386\_sysv\_macho writing garbage to the x87 + control word +* [Coroutine2](/libs/coroutine2/): + + + [#28](https://github.com/boostorg/coroutine2/issues/28): don't crash on pthread\_cancel +* [DLL](/libs/dll/): + + + New macro [BOOST\_DLL\_USE\_STD\_FS](/libs/dll/BOOST_DLL_USE_STD_FS.html). + Define it to `1` to make + the Boost.DLL use C++17's `std::filesystem::path`, + `std::system\_error` and `std::error\_code` ([#21](https://github.com/boostorg/dll/issues/21)). Note that + exception types change from `boost::system::system\_error` + to `std::system\_error`, so make sure to update + `catch`es. + + Significant rewrite of the dynamic loadable detection and decoration + logic. More precise errors are now reported in case of loading failures. + Added `shared\_library::decorate()` function that returns a decorated + path to the library without doing any platform related queries and + detections. Prefer using `shared\_library::load` + and `shared\_library` + constructors for better results (many thanks to Loïc Touraine for + the work [PR#23](https://github.com/boostorg/dll/pull/23)). + + CI hardening, docs updates, typos fixes, cleanups and many portability + fixes. +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Disabled hardware-assisted popcount (added in 1.69.0) on MSVC due + to undefined behavior on older CPUs. ([#33](https://github.com/boostorg/dynamic_bitset/issues/33) [PR#35](https://github.com/boostorg/dynamic_bitset/pull/35)) +* [Fiber](/libs/fiber/): + + + [#191](https://github.com/boostorg/fiber/issues/191): ignore unused argument warning + + [#196](https://github.com/boostorg/fiber/issues/196): fix high contention on remote\_ready\_splk\_ +* [Filesystem](/libs/filesystem/): + + + Fixed a few instances of dereferencing `std::string::end()` in `path` + implementation. + + Fixed program termination in case of out of memory condition in directory + iterators constructors and operations accepting a reference to `error\_code`. ([#58](https://github.com/boostorg/filesystem/issues/58)) + + Fixed possible linking errors caused by missing definitions of static + members of `path`. + ([#12759](https://svn.boost.org/trac/boost/ticket/12759)) + + Fixed possible use of uninitialized data in directory iterator increment + operation on Linux. + + Added support for movability to directory iterators. + + Added file status query overloads for `directory\_entry`. + This avoids a relatively expensive OS query when file status is requested + for a result of dereferencing a directory iterator. ([PR#55](https://github.com/boostorg/filesystem/pull/55)) + + Reworked `current\_path` + and `read\_symlink` + implementation to avoid possible memory exhaustion on broken or tampered + with filesystems. The functions now have an internal limit of the + path size they will accept from the OS, which is currently 16 MiB. + + Increased the size of the internal buffer used by `copy\_file`. +* [Integer](/libs/integer/): + + + Added Extended Euclidean Algorithm and Modular Multiplicative Inverse + function. (Nick Thompson, [PR#11](https://github.com/boostorg/integer/pull/11)) +* [Log](/libs/log/): + + + New features: + + - Added support for generating another log file name before collecting + the file in the text file sink backend. This allows to combine + appending to an existing log file with timestamps and file + counters in log filenames, and, consequently, file collection + in general. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + New features: + + - Add Lanczos smoothing derivatives + - Move `numerical\_differentiation.hpp` + from `boost/math/tools/` to `boost/math/differentiation/finite\_difference.hpp`. + - Add mean, variance, skewness, kurtosis, median, Gini coefficient, + and median absolute deviation to `tools/univariate\_statistics.hpp`. + - Add correlation coefficients and covariance to `tools/bivariate\_statistics.hpp` + - Add absolute Gini coefficient, Hoyer sparsity, oracle SNR, + and the *M*[sub 2]*M*[sub + 4] SNR estimator to `tools/signal\_statistics.hpp`. + - Add total variation, l0, l1, l2, and sup norms, as well as + corresponding distance functions to `tools/norms.hpp`. + - Add move constructors for polynomials, support complex coefficients, + add `.prime()` and `.integrate()` + methods. + - Add `quadratic\_roots` + to `tools/roots.hpp`. + - Add support for complex-valued functions to Newton's method + in `roots.hpp`. + - Add Catmull-Rom interpolator. +* [Mp11](/libs/mp11/): + + + Renamed `mp\_invoke` + to `mp\_invoke\_q` + + Added `mp\_similar` + + Added `mp\_set\_union`, + `mp\_set\_intersection`, + `mp\_set\_difference` + + Added `mp\_not\_fn` + + Added `mp\_transform\_first`, + `mp\_transform\_second`, + `mp\_transform\_third` + + Added `mp\_filter` + + Added `mp\_eval\_if\_not`, + `mp\_eval\_or`, `mp\_valid\_q` + + Added `mp\_back`, `mp\_pop\_back` +* [Multi-index Containers](/libs/multi_index/): + + + `size\_type` and `difference\_type` are now defined + as the allocator's same-named types. This will not make any difference + in the vast majority of cases, but allows for some degree of control + of resulting internal structures via user-defined allocator types + (see issue [#17](https://github.com/boostorg/multi_index/issues/17) for motivation). For the moment being, + this change is not documented in the reference section (i.e., it + has semi-official status). + + Maintenance work. +* [Multiprecision](/libs/multiprecision/): + + + Fix various conversion issues in the traits classes, check for compatibility + with Boost.Optional. + + Prevent instantiation of `std::numeric\_limits` + on any old type when checking for convertibility. See [#98](https://github.com/boostorg/multiprecision/issues/98). + + Update variable precision code to account for arbitrary precision + integers. See [#103](https://github.com/boostorg/multiprecision/issues/103). + + Add support for XML serialization archives. + + Fix bug in fixed precision iostream formatting in `mpf\_float` + and `mpfr\_float`. See + [#113](https://github.com/boostorg/multiprecision/issues/113). + + Add more overloads for special functions which are better handled + natively by MPFR. + + Fixed bug in generic `exp` + implementation which could cause invariant failure. + + Fixed generic conversion from float to integer to avoid undefined + behaviour. See [#110](https://github.com/boostorg/multiprecision/issues/110). +* [PolyCollection](/libs/poly_collection/): + + + Improved handling of stateful allocators and allocator propagation + traits, after an error reported by Billy O'Neal ([PR#9](https://github.com/boostorg/poly_collection/pull/9)). + + Fixed a potentially serious bug with an internal cache structure. +* [Spirit](/libs/spirit/): + + + Removed use of deprecated `boost/detail/iterator.hpp` + header. [PR#432](https://github.com/boostorg/spirit/pull/432) + + X3 + + - Integer parsers should now handle user defined types. [PR#429](https://github.com/boostorg/spirit/pull/429) + - **Note:** The `check\_overflow` + trait default implementation now relies on `std::numeric\_limits::is\_bounded` + instead of `boost::integer\_traits::is\_integral`. + - Removed sequence into plain parsing. Now it triggers a compile + time error instead of silently parsing the the sequence and + taking the last value as a result. [PR#439](https://github.com/boostorg/spirit/pull/439) + - Fixed `parse\_rule` + instantiation with `BOOST\_SPIRIT\_INSTANTIATE` + when: + + * A rule has no attribute. [PR#455](https://github.com/boostorg/spirit/pull/455) + * An actual attribute is not of type a rule was declared + with. [PR#456](https://github.com/boostorg/spirit/pull/456) [#457](https://github.com/boostorg/spirit/issues/457) + - A **huge** thanks goes out to + [Xeverous](https://github.com/Xeverous) for + reporting a regression in [#453](https://github.com/boostorg/spirit/issues/453). + - Fixed unneded attribute synthesization and no-transformation + attribute reference pass-through in rules. [#444](https://github.com/boostorg/spirit/issues/444) [PR#449](https://github.com/boostorg/spirit/pull/449) [PR#452](https://github.com/boostorg/spirit/pull/452) + - Removed broken 1.0#INF parser. It was poorly documented and + never worked. [#415](https://github.com/boostorg/spirit/issues/415) [PR#458](https://github.com/boostorg/spirit/pull/458) [#8699](https://svn.boost.org/trac/boost/ticket/8699) + - The undocumented `make\_attribute` + trait was removed due to bugs [PR#449](https://github.com/boostorg/spirit/pull/449) + and to simplify + attribute transformation. [PR#460](https://github.com/boostorg/spirit/pull/460) + - If you were using it to workaround bugs in attribute transformation + - they should not be needed anymore as of this release. + - The integer value parser now respects `std::numeric\_limits::digits10` + value. [PR#469](https://github.com/boostorg/spirit/pull/469) + - Fixed underflow check for a `(Min % + Base) + == 0` + corner case. [PR#469](https://github.com/boostorg/spirit/pull/469) + - Fixed an output value on overflow of IgnoreOverflowDigits=true + integer parser. [PR#470](https://github.com/boostorg/spirit/pull/470) + - Container attribute elements were copyied, but not moved. [PR#472](https://github.com/boostorg/spirit/pull/472) + - Special handling of references in `transform\_attribute` + was removed. [PR#480](https://github.com/boostorg/spirit/pull/480) + + V2 + + - Macro name collisions and namespace conflicts with Boost.Endian + were fixed. [PR#349](https://github.com/boostorg/spirit/pull/349) [PR#482](https://github.com/boostorg/spirit/pull/482) + - utree + + * Fixed UB in tag getter due to left shift of negative + value. [PR#423](https://github.com/boostorg/spirit/pull/423) + * Fixed double-conversion (`spirit::string + -> std::string + -> spirit::string`). + [PR#462](https://github.com/boostorg/spirit/pull/462) + - Qi + + * Added static asserts for rule skipper type problems. + [PR#427](https://github.com/boostorg/spirit/pull/427) + * The `check\_overflow` + trait default implementation now relies on `std::numeric\_limits::is\_bounded` instead + of `boost::integer\_traits::is\_integral` + [PR#429](https://github.com/boostorg/spirit/pull/429) + * Integer parsers should now handle user defined types. + [PR#429](https://github.com/boostorg/spirit/pull/429) + * **Note:** The `check\_overflow` trait + default implementation now relies on `std::numeric\_limits::is\_bounded` + instead of `boost::integer\_traits::is\_integral`. + * Removed broken 1.0#INF parser. It was poorly documented + and never worked. [#415](https://github.com/boostorg/spirit/issues/415) [PR#458](https://github.com/boostorg/spirit/pull/458) [#8699](https://svn.boost.org/trac/boost/ticket/8699) + * The undocumented `make\_attribute` + trait was merged into `transform\_attribute` + trait. [PR#471](https://github.com/boostorg/spirit/pull/471) + * The `pre\_transform`, + `post\_transform`, + and `fail\_transform` + utility functions were removed in favor of directly using + `pre`/`post`/`fail` of the transform + trait. [PR#467](https://github.com/boostorg/spirit/pull/467) + * The integer value parser now respects `std::numeric\_limits::digits10` + value. [PR#469](https://github.com/boostorg/spirit/pull/469) + * Fixed underflow check for a `(Min % + Base) + == 0` + corner case. [PR#469](https://github.com/boostorg/spirit/pull/469) + * Fixed an output value on overflow of IgnoreOverflowDigits=true + integer parser. [PR#470](https://github.com/boostorg/spirit/pull/470) + * Special handling of references in `transform\_attribute` + was removed. [PR#480](https://github.com/boostorg/spirit/pull/480) + - Lex + + * Fixed UB in default constructor of lexer with user specified + token type. [PR#420](https://github.com/boostorg/spirit/pull/420) + + Classic: + + - Fixed `position\_iterator` + forming reference to local when the underlying iterator dereference + operator returns a non-reference type. [PR#422](https://github.com/boostorg/spirit/pull/422) [#9737](https://svn.boost.org/trac/boost/ticket/9737) +* [Stacktrace](/libs/stacktrace/): + + + Build fix for iOS 32-bit ARM (many thanks to Ivan Ponomarev for providing + the fix [PR#70](https://github.com/boostorg/stacktrace/pull/70)) + + Fixed multiple typos, warnings and updated the docs. +* [Test](/libs/test/): + + + Boost.test v3.10 see the [Changes + log](/libs/test/doc/html/boost_test/change_log.html) for more details. + + Breaking changes: + + - Boost.Test `minimal.hpp` + is now showing a deprecation warning, + - Change in floating point comparison may fail tests that were + silently not using the floating point comparison logic prior + to this release, + - Internal API change to `unit\_test\_log\_formatter`, + see detailed change log, + + New feature: + + - Floating point comparison has been extended to capture non-floating + point and arithmetic operands: expressions like `BOOST\_TEST(3.0001 == + 3)` + now use floating point support of Boost.Test, + - Custom datasets are not required to declare the `sample` type field anymore, + - Extending template test cases from `std::tuple` + to any variadic definition, + - Windows support for timed tests, + - Timed test on test-suites, + - Removed dependency to Boost.Timer, + - New macro `BOOST\_TEST\_INFO\_SCOPE` + for scoped context declaration, + - Improved `BOOST\_TEST\_CONTEXT` + syntax + + Bug fixes and pull requests: + + - Trac tickets: [#7397](https://svn.boost.org/trac/boost/ticket/7397), [#9434](https://svn.boost.org/trac/boost/ticket/9434), [#13106](https://svn.boost.org/trac/boost/ticket/13106), [#13418](https://svn.boost.org/trac/boost/ticket/13418) + - GitHub Issues: [#133](https://github.com/boostorg/test/issues/133), [#138](https://github.com/boostorg/test/issues/138), [#141](https://github.com/boostorg/test/issues/141), [#157](https://github.com/boostorg/test/issues/157), + [#160](https://github.com/boostorg/test/issues/160), [#174](https://github.com/boostorg/test/issues/174), [#176](https://github.com/boostorg/test/issues/176), [#177](https://github.com/boostorg/test/issues/177), [#180](https://github.com/boostorg/test/issues/180), + [#181](https://github.com/boostorg/test/issues/181), [#194](https://github.com/boostorg/test/issues/194), [#196](https://github.com/boostorg/test/issues/196), [#198](https://github.com/boostorg/test/issues/198), [#199](https://github.com/boostorg/test/issues/199), + [#202](https://github.com/boostorg/test/issues/202), [#203](https://github.com/boostorg/test/issues/203), [#204](https://github.com/boostorg/test/issues/204) + - GitHub Pull Requests: [PR#171](https://github.com/boostorg/test/pull/171), [PR#172](https://github.com/boostorg/test/pull/172), [PR#182](https://github.com/boostorg/test/pull/182), + [PR#183](https://github.com/boostorg/test/pull/183), [PR#184](https://github.com/boostorg/test/pull/184), [PR#190](https://github.com/boostorg/test/pull/190), [PR#195](https://github.com/boostorg/test/pull/195), + [PR#195](https://github.com/boostorg/test/pull/195), [PR#197](https://github.com/boostorg/test/pull/197), [PR#205](https://github.com/boostorg/test/pull/205) +* [TypeIndex](/libs/type_index/): + + + Support for the GHS C++ compiler added (many thanks to Brandon Castellano + for providing the patch [PR#28](https://github.com/boostorg/type_index/pull/28)) + + Optimized string and type comparisons (many thanks to Andrey Semashev + for providing the patch [PR#23](https://github.com/boostorg/type_index/pull/23)) + + Fixed clang-win compilation (many thanks to Peter Dimov for providing + the patch [PR#25](https://github.com/boostorg/type_index/pull/25)) + + CI hardening. +* [TypeTraits](/libs/type_traits/): + + + Added is\_bounded\_array and is\_unbounded\_array (Glen Fernandes). + + Added copy\_reference and copy\_cv\_ref (Glen Fernandes). + + Improved support for msvc with /clr option. + + Misc compiler compatibility fixes. +* [Variant](/libs/variant/): + + + Many cleanups and internal improvements, many thanks to Nikita Kniazev + ([PR#55](https://github.com/boostorg/variant/pull/55), [PR#56](https://github.com/boostorg/variant/pull/56), [PR#57](https://github.com/boostorg/variant/pull/57)) and Louis Dionne + ([PR#51](https://github.com/boostorg/variant/pull/51)) + + CI hardening. +* [uBlas](/libs/numeric/ublas/): + + + Addition of tensor framework (many thanks to Cem Bassoy [PR#65](https://github.com/boostorg/ublas/pull/65)) + + Addition of basic OpenCL support (many thanks to Fady Essam [PR#59](https://github.com/boostorg/ublas/pull/59)) + + Integration of basic benchmark suite (many thanks to Stefan Seefeld + [PR#57](https://github.com/boostorg/ublas/pull/57)) + + CI integration and hardening + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Daniel James, Vladimir Prus, Marshall Clow and Michael Caisse managed this + release. + + + + + + + + + + + + diff --git a/users/history/version_1_71_0.html b/users/history/version_1_71_0.html new file mode 100644 index 0000000..5cbed70 --- /dev/null +++ b/users/history/version_1_71_0.html @@ -0,0 +1,658 @@ +--- +title: Version 1.71.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.71.0 + +/\*\*/ + + + + + + + +Version 1.71.0 +============== + +Version 1.71.0 +-------------- + + +August 19th, 2019 15:31 GMT + + +[Documentation](/doc/libs/1_71_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_71\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.bz2) | d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee | +| [boost\_1\_71\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.gz) | 96b34f7468f26a141f6020efb813f1a2f3dfb9797ecf76a7d7cbd843cc95f5bd | +| windows | [boost\_1\_71\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.7z) | 1b3949ffddf56129141032542523920034f2e69775fb9332a52ba37c548dbf35 | +| [boost\_1\_71\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.zip) | 85a94ac71c28e59cf97a96714e4c58a18550c227ac8b0388c260d6c717e47a69 | + + +### New Libraries + + +* [Variant2](/libs/variant2/): A never-valueless, + strong guarantee implementation of `std::variant`, + from Peter Dimov. + +### Updated Libraries + + +* [Align](/libs/align/): + + + Support for any integral type in the integral versions of `align\_up` and `align\_down`. + + Revised the implementation of `aligned\_allocator` + to no longer require a specialization for `void`. + + Define `propagate\_on\_container\_move\_assignment` + and `is\_always\_equal` + in `aligned\_allocator`. +* [Asio](/libs/asio/): + + + Improved performance slightly by eliminating a redundant move construction + when completed handlers are dispatched. + + Eliminated a compiler warning by annotating a `case` + fall-through in the free function `connect()` implementation. + + Fixed the `is\_\*\_buffer\_sequence` detection traits + for user-defined sequence types. + + Fixed some Windows-specific warnings about an incompatible pointer + cast when obtaining the `CancelIoEx` + entry point. + + Changed to automatically set the defaults when opening a serial port + on Windows. + + Changed the serial port `get\_option()` member function to be const. + + Fixed a name hiding issue with the WinRT stream-oriented socket backend's + `shutdown` function. + + Applied a minor fix to the documentation for `is\_dynamic\_buffer`. + + Added some support for Haiku OS. + + Added wolfSSL compatability. + + Changed to require C++17 or later for coroutines TS support with + clang. + + Fixed a doxygen generation problem in the tutorial. + + Ensured example programs are correctly incorporated into the documentation. +* [Any](/libs/any/): + + + Static initialization of the default constructed `boost::any` + is now possible. + + Fixed performance regression in assignment on a compilers without + move-semantics. + + Maintenance work. +* [Beast](/libs/beast/): + + + This version consists mostly of bug fixes and performance improvements. + + Substantial work included for the split compilation mode, to reduce + compile time when defining `BOOST\_BEAST\_SEPARATE\_COMPILATION`. + + We'd love to know how you or your company use Beast, consider adding + an item to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Circular Buffer](/libs/circular_buffer/): + + + Correct doxygen generated reference to no longer show internal members. + (Glen Fernandes) + + Eliminate ubsan warning on `add` + and `sub`. (Glen Fernandes) + + Fix incorrect check in `is\_uninitialized`. + (Niklas Fejes) +* [Container](/libs/container/): + + + Fixed bugs: + + - [GitHub + #47: *"added alignment specification for small\_vector"*](https://github.com/boostorg/container/pull/47). + - [GitHub + #88: *"Implement C++17 MoveAssignable requirements + for self-move assignments"*](https://github.com/boostorg/container/issues/88). + - [GitHub + #107: *"Alignment ignored in resource\_adaptor"*](https://github.com/boostorg/container/issues/107). + - [GitHub + #109: *"Get rid of integer overflow in copy\_move\_algo.hpp + (-fsanitize=integer)"*](https://github.com/boostorg/container/pull/109). + - [GitHub + #110: *"Avoid gcc 9 deprecated copy warnings + in new\_allocator.hpp"*](https://github.com/boostorg/container/pull/110). + - [GitHub + #112: *"vector::resize() compilation error with + msvc-10..12: data is not a member of boost::detail::aligned\_storage"*](https://github.com/boostorg/container/issues/112). + - [GitHub + #114: *"Fix small\_vector noexcept specification"*](https://github.com/boostorg/container/issues/114). + - [GitHub + #116: *"MSVC + boost 1.70 compilation error when + windows.h is already included (detail/thread\_mutex.hpp)"*](https://github.com/boostorg/container/issues/116). + - [GitHub + #117: *"flat\_map/map::insert\_or\_assign with hint + has wrong return types"*](https://github.com/boostorg/container/issues/117). + - [GitHub + #118: *"Non-unique inplace\_set\_difference used + in in flat\_tree\_merge\_unique and iterator invalidation in insert\_unique"*](https://github.com/boostorg/container/issues/118). + - [GitHub + #122: *"Fix has\_trivial\_destructor\_after\_move"*](https://github.com/boostorg/container/issues/122). + - [GitHub + #123: *"With heterogeneous lookup, `equal\_range` can result in + a range with length greater than 1"*](https://github.com/boostorg/container/issues/123). + + `deque` can now + have options, using `deque_options`. + The block size/bytes can be be specified. + + `static_vector` + can now have options, using `static_vector_options`. + Alignment and throwing behaviour can be be specified. + + `small_vector` + can now have options, using `small_vector_options`. + Alignment and growth factor can be be specified. +* [Context](/libs/context/): + + + Add support for RISC-V LP64D + + [#72](https://github.com/boostorg/context/issues/72): Fix ABI violation on ppc64 ELFv2 + + [#99](https://github.com/boostorg/context/issues/99): cleanup of stack if creating ucontext fails +* [Conversion](/libs/conversion/): + + + Maintenance work. +* [Core](/libs/core/): + + + Added functions `alloc\_construct`, + `alloc\_construct\_n`, + `alloc\_destroy`, and + `alloc\_destroy\_n` in + `` for allocator aware and exception + safe construction and destruction of objects and arrays. (Glen Fernandes) + + Added constexpr functions `first\_scalar` + in `` for obtaining a pointer to the + first scalar element of an array. Given a pointer of type `T\*` + they return a pointer of type `remove\_all\_extents\_t\*`. (Glen Fernandes) + + Added class template `noinit\_adaptor` + in `` which is an allocator adaptor + that converts any allocator into one whose `construct(ptr)` performs default initialization + via placement new, and whose `destroy(ptr)` invokes the `value\_type` + destructor directly. (Glen Fernandes) + + Added class template `default\_allocator` + in ``, which can serve as a minimal + default allocator that has interface similar to C++20 `std::allocator`, supports configurations + with disabled exceptions and does not have `std` + as an associated namespace. The allocator uses `operator + new` and `operator + delete` for allocation. (Glen + Fernandes) + + In `` header, added workarounds for + better compatibility with QNX SDP 7.0 when libc++/libc++abi libraries + are used. (Andrey Semashev, [#59](https://github.com/boostorg/core/issues/59)) + + The `` header is now marked as deprecated + and will be removed in a future release. `` + should be used instead. (Peter Dimov) +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Enabled hardware-assisted popcount on MSVC ([PR#38](https://github.com/boostorg/dynamic_bitset/pull/38)). + + Added support for boost::hash and std::hash ([PR#45](https://github.com/boostorg/dynamic_bitset/pull/45)). + + Support copy-initialization with default constructor ([PR#48](https://github.com/boostorg/dynamic_bitset/pull/48)). +* [Endian](/libs/endian/): + + + Clarified requirements on the value type template parameter + + Added support for `float` + and `double` + + Added `endian\_load`, + `endian\_store` + + Updated `endian\_reverse` + to correctly support all non-`bool` + integral types + + Moved deprecated names to the deprecated header `endian.hpp` +* [Fiber](/libs/fiber/): + + + documentation for shared\_work updated +* [Filesystem](/libs/filesystem/): + + + Fixed incorrect `error\_code` + returned from directory iterator increment when `readdir\_r` + is used. + + For `path`, fixed rvalue-aware + `operator/` + return type to return an rvalue instead of rvalue reference. This + fixes leaving a dangling reference in the user's code if the result + of `operator/` + is bound to a const reference. ([#110](https://github.com/boostorg/filesystem/issues/110)) + + Fixes for better compatibility with Windows CE. ([PR#24](https://github.com/boostorg/filesystem/pull/24)) + + Added minimal support for CMake. ([PR#106](https://github.com/boostorg/filesystem/pull/106)) +* [Flyweight](/libs/flyweight/index.html): + + + Maintenance work. +* [Histogram](/libs/histogram/index.html): + + + New features: + + - Support for thread-safe storages and new thread-safe accumulators + - Support for compiling without exceptions/RTTI (increases performance + by 10-20 %) (with Glen Fernandes) + - Performance improvements for 1D and 2D histograms + - boost::histogram::indexed now returns forward iterator range + instead of input iterator range + - boost::histogram::indexed\_range::accessor is now non-copyable + and acts like reference to cell value, making more algorithms + from the C++ stdlib work + - boost::histogram::algorithm::reduce with new slice option and + option fusion + - boost::histogram::algorithm::project accepts runtime indices + for static histograms + + Bug Fixes: + + - boost::histogram::algorithm::reduce also works on histograms + that have some axis types without reduction support + - boost::histogram::axis::traits::update now works correctly + for boost::histogram::axis::variant + + Other: + + - 100 % test coverage + - Reduced internal Boost dependencies + - Improved documentation and examples + - Guaranteed no-throw moves for all builtin axis types + - Compile cleanly at higher warning levels + + See [changelog](/libs/histogram/doc/html/histogram/history.html) + for more details. +* [IoStreams](/libs/iostreams/): + + + Fixed processing of multi-stream files ([PR#87](https://github.com/boostorg/iostreams/pull/87)). + + Added support for multi-threaded LZMA ([PR#95](https://github.com/boostorg/iostreams/pull/95)). +* [Interprocess](/libs/interprocess/): + + + [GitHub + #85 (*"warning: Implicit conversion loses integer precision"*)](https://github.com/boostorg/interprocess/pull/85). + + [GitHub + #86 (*"warning: Possible misuse of comma operator"*)](https://github.com/boostorg/interprocess/pull/86). +* [Intrusive](/libs/intrusive/): + + + [GitHub + #42: *Documentation does not describe treap priority\_of\_value + changes*](https://github.com/boostorg/intrusive/pull/42) + + [GitHub + #43: *Fix tests with BOOST\_INTRUSIVE\_VARIADIC\_TEMPLATES + enabled*](https://github.com/boostorg/intrusive/pull/43) + + [GitHub + #45: *Disable variadic templates for MSVC-12 to avoid ICEs*](https://github.com/boostorg/intrusive/pull/45) +* [LexicalCast](/libs/lexical_cast/): + + + Added tests for `boost::filesystem::path` + conversions [#25](https://github.com/boostorg/lexical_cast/issues/25). + + Maintenance work, including [#28](https://github.com/boostorg/lexical_cast/issues/28). +* [Log](/libs/log/): + + + New features: + + - Improved support for C++17 `std::string\_view` + in `basic\_formatting\_ostream`. + The string view can now participate in character code conversion + on output. + - Added `auto\_newline` + formatter and stream manipulator. It can be used to ensure + that formatted output always ends with a newline while avoiding + duplicate newlines. + - In the output stream, text file and text multi-file sink backends + added support for configuring behavior with regard to appending + a trailing newline to every formatted log record. Use `auto\_newline\_mode` named parameter + of the backend constructor or call the `set\_auto\_newline\_mode` + method on the sink backend. + - **Note:** The default behavior + with regard to trailing newlines added by sink backends has + changed slightly compared to the previous Boost.Log releases. + The backends will now only add a trailing newline if there + isn't one in the formatted log message string already. In previous + releases a newline was added unconditionally. + - Added support for passing arbitrary function objects in the + `filter` and + `format` named + parameters to sink constructors and convenience functions for + initializing sinks. For example, it is now possible to specify + C++11 lambda functions directly in these parameters. ([#63](https://github.com/boostorg/log/issues/63)) + - In the default filter and formatter factories used in filter + and formatter parsers, added support for severity level attribute + values of type `boost::log::trivial::severity\_level`. + For filters, the support is limited to attributes with "Severity" + name. + + Bug fixes: + + - Fixed incorrect parsing of components of the rotated file names + while scanning for files in the text file sink backend. If + the file name pattern ended with a placeholder (for example, + a file counter), the `scan\_for\_files` + method would not find files matching that pattern in the target + storage, leaving them unmanaged. In particular, such files + would not be deleted to free target storage. ([#78](https://github.com/boostorg/log/issues/78)) + - Updated `basic\_formatting\_ostream` + and `basic\_record\_ostream` + to make it possible to overload stream output operators for + pointers to user-defined types. User-defined `operator<<` + overloads taking `std::basic\_ostream` + and a pointer argument should now be picked up by the compiler + when the pointer is being written to one of Boost.Log streams. + ([#84](https://github.com/boostorg/log/issues/84)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + New features: + + - Catmull-Rom interpolator now works in C++11 + - Cardinal quadratic B-spline interpolation + - Domain of elliptic integrals extended + - sin\_pi and cos\_pi performance improvements + - Forward-mode automatic differentiation + - Vector valued barycentric rational interpolation + - Ooura's method for evaluation of Fourier integrals + + Bug fixes: + + - Multiple compatibility issues with Multiprecision fixed + - Lambert-W fixed on a rare architecture +* [Metaparse](/libs/metaparse/): + + + New features: + + - In C++11 variadic template support for the following: `sequence`, `one\_of\_c`, + `one\_of`, `repeated\_one\_of`, `repeated\_one\_of1`, `one\_char\_except\_c`, `one\_char\_except`. + + Bug fixes: + + - `BOOST\_METAPARSE\_STRING` + does not use out of range character values as template arguments. + - `any\_of\_c<>` + does not create empty array in C++14. +* [Move](/libs/move/): + + + [Git Issue + #26: *"Invalid iterator increment/decrement in the + last iteration of adaptive\_sort\_combine\_blocks"*](https://github.com/boostorg/move/issues/26). +* [Multi Array](/libs/multi_array/): + + + Simplify allocator support by using new `alloc\_construct\_n` + and `alloc\_destroy\_n` + facilities from Core. (Glen Fernandes) +* [Multi-index Containers](/libs/multi_index/): + + + Added [variants + of `const\_mem\_fun` + and `mem\_fun`](/libs/multi_index/doc/tutorial/key_extraction.html#x_mem_fun) + for differently qualified member functions (issue [#24](https://github.com/boostorg/multi_index/issues/24)). + + Terse [`key`](/libs/multi_index/doc/reference/key_extraction.html#key) specification syntax + now correctly handles `noexcept`-specified + member functions (issue [#24](https://github.com/boostorg/multi_index/issues/24)). +* [Outcome](/libs/outcome/): + + + Enhancements: + + - [#184](https://github.com/ned14/outcome/issues/184) + As per request from Boost release managers, relocated `version.hpp` and `revision.hpp` + into detail, and added the Boost licence boilerplate to the + top of every source file which was missing one (I think). Also + took the opportunity to run the licence restamping script over + all Outcome, so copyright dates are now up to date. + - [#185](https://github.com/ned14/outcome/issues/185) + Add FAQ item explaining issue #185, and why we will do nothing + to fix it right now. + - [#189](https://github.com/ned14/outcome/issues/189) + Refactored the `OUTCOME\_TRY` + implementation to use more clarified customisation points capable + of accepting very foreign inputs. Removed the `std::experimental::expected` + specialisations, as those are no longer necessary. Fixed the + documentation for the customisation points which previously + claimed that they are ADL discovered, which they are not. Added + a recipe describing how to add in support for foreign input + types. + - [#183](https://github.com/ned14/outcome/issues/183) + Added a separate `motivation/plug\_error\_code` + specifically for Boost. + + Bug fixes: + + - `OUTCOME\_VERSION\_MINOR` + hadn't been updated to 1. + - [#181](https://github.com/ned14/outcome/issues/181) + Fix issue #181 where Outcome didn't actually implement the + strong swap guarantee, despite being documented as doing so. + - [#190](https://github.com/ned14/outcome/issues/190) + Fix issue #190 in Boost edition where unit test suite was not + runnable from the Boost release distro. + - [#182](https://github.com/ned14/outcome/issues/182) + Fix issue #182 where `trait::is\_exception\_ptr\_available` was always true, thus causing + much weirdness, like not printing diagnostics and trying to + feed everything to `make\_exception\_ptr()`. + - [#192](https://github.com/ned14/outcome/issues/192) + Fix issue #192 where the `std::basic\_outcome\_failure\_exception\_from\_error()` was being defined twice for + translation units which combine standalone and Boost Outcome's. +* [Parameter](/libs/parameter/doc/html/index.html): + + + Upgraded keyword generation macro `BOOST\_PARAMETER\_TEMPLATE\_KEYWORD` + ([PR#15](https://github.com/boostorg/parameter/pull/15)). + + Moved keyword generation macro `BOOST\_PARAMETER\_NESTED\_KEYWORD` + from [Accumulators](/libs/accumulators/doc/html/index.html) + to this library ([PR#28](https://github.com/boostorg/parameter/pull/28)). + + Added support for `std::reference\_wrapper` + and `std::ref()` + ([PR#16](https://github.com/boostorg/parameter/pull/16)). + + Moved `boost::parameter::required`, `boost::parameter::optional`, + and `boost::parameter::deduced` metafunction definitions + to their own header files in directory boost/parameter ([PR#18](https://github.com/boostorg/parameter/pull/18)). + + Added support for Boost.[Parameter](/libs/parameter/doc/html/index.html)-enabled + function call operators ([PR#20](https://github.com/boostorg/parameter/pull/20)). + + Added support for parameter category qualifiers "forward", + "consume", and "move\_from" (current qualifiers + are "in", "out", and "in\_out") ([PR#21](https://github.com/boostorg/parameter/pull/21)) + ([PR#23](https://github.com/boostorg/parameter/pull/23)) based on . + Added new usage syntax `BOOST\_PARAMETER\_NAME((object-name), namespace-name) qualifier(tag-name))` and `BOOST\_PARAMETER\_NAME(qualifier(name))`. (Existing code that uses qualifiers + directly and correctly with `BOOST\_PARAMETER\_FUNCTION` + and other code generation macros should remain unaffected for now, + so no breaking changes.) The reason for the change in usage is to + enable applying of parameter category constraints to Boost.[Parameter](/libs/parameter/doc/html/index.html)-enabled + functions and constructors invoked through argument composition. + (Otherwise, it is currently possible to use argument composition + to bypass parameter category constraints applied in `BOOST\_PARAMETER\_FUNCTION` et. al.) + + Added support for perfect forwarding ([PR#23](https://github.com/boostorg/parameter/pull/23)) ([PR#26](https://github.com/boostorg/parameter/pull/26)), + so that `parameter::parameters::operator()` can accept non-`const` + rvalues. As a positive side effect, Boost.[Parameter](/libs/parameter/doc/html/index.html)-enabled + functions and constructors are no longer bound by `BOOST\_PARAMETER\_MAX\_ARITY` + on compilers that support perfect forwarding. User code can now check + for this support by detecting the configuration macro `BOOST\_PARAMETER\_HAS\_PERFECT\_FORWARDING`, + or manually turn off this support by defining the configuration macro + `BOOST\_PARAMETER\_DISABLE\_PERFECT\_FORWARDING`. + + Added metafunctions `boost::parameter::is\_argument\_pack` + ([PR#27](https://github.com/boostorg/parameter/pull/27)), `boost::parameter::are\_tagged\_arguments` + ([PR#52](https://github.com/boostorg/parameter/pull/52)), and `boost::parameter::result\_of::compose` + ([PR#75](https://github.com/boostorg/parameter/pull/75)). + + Added variadic function template `boost::parameter::compose()` which takes in named arguments + and returns them in an argument pack ([PR#52](https://github.com/boostorg/parameter/pull/52)). For compilers + that do not support perfect forwarding, the configuration macro + `BOOST\_PARAMETER\_COMPOSE\_MAX\_ARITY` + determines the maximum number of arguments that `boost::parameter::compose()` can take in ([PR#61](https://github.com/boostorg/parameter/pull/61)). + + Added code generation macros `BOOST\_PARAMETER\_BASIC\_FUNCTION\_CALL\_OPERATOR`, + `BOOST\_PARAMETER\_BASIC\_CONST\_FUNCTION\_CALL\_OPERATOR`, + `BOOST\_PARAMETER\_NO\_SPEC\_FUNCTION`, + `BOOST\_PARAMETER\_NO\_SPEC\_MEMBER\_FUNCTION`, + `BOOST\_PARAMETER\_NO\_SPEC\_CONST\_MEMBER\_FUNCTION`, + `BOOST\_PARAMETER\_NO\_SPEC\_FUNCTION\_CALL\_OPERATOR`, + `BOOST\_PARAMETER\_NO\_SPEC\_CONST\_FUNCTION\_CALL\_OPERATOR`, + `BOOST\_PARAMETER\_NO\_SPEC\_CONSTRUCTOR`, + and `BOOST\_PARAMETER\_NO\_SPEC\_NO\_BASE\_CONSTRUCTOR` + ([PR#52](https://github.com/boostorg/parameter/pull/52)). + + Added support for Boost.[MP11](/libs/mp11/doc/html/mp11.html) + ([PR#47](https://github.com/boostorg/parameter/pull/47)) ([PR#66](https://github.com/boostorg/parameter/pull/66)) ([PR#70](https://github.com/boostorg/parameter/pull/70)). User code + can now check for this support by detecting the configuration macro + `BOOST\_PARAMETER\_CAN\_USE\_MP11`, + or manually turn off this support by defining the configuration macro + `BOOST\_PARAMETER\_DISABLE\_MP11\_USAGE`. + + Improved support for parameter-dependent return types via SFINAE + ([PR#73](https://github.com/boostorg/parameter/pull/73)). +* [PtrContainer](/libs/ptr_container/): + + + Fix a ptr\_vector regression introduced in 1.66.0 ([PR#24](https://github.com/boostorg/ptr_container/pull/24)). +* [PolyCollection](/libs/poly_collection/): + + + Maintenance work. +* [SmartPtr](/libs/smart_ptr/): + + + Added aliasing constructors to `weak\_ptr` + + Added `weak\_ptr::empty()` + + Added `enable\_shared\_from`, + `shared\_from`, and + `weak\_from` +* [Stacktrace](/libs/stacktrace/): + + + Fixed output of `name()`, `source\_location()` and `source\_line()` for the default constructed `frame` with thread sanitizer builds + in C++98 mode. + + Fixed output of long strings from `name()` and `source\_location()` on MSVC [#78](https://github.com/boostorg/stacktrace/issues/78). + + Maintenance work. +* [Test](/libs/test/): + + + Boost.test v3.11 see the [Changes + log](libs/test/doc/html/boost_test/change_log.html) for more details. + + Breaking changes: + + - Boost.Test shows deprecation warnings if some very old headers + as deprecated. If you encounter such warnings, please follow + the indications: those headers will be removed in a future + release. + + New feature: + + - Now `BOOST\_TEST` + can be used to compare abstract types + + Bug fixes and pull requests: + + - GitHub Issues: [#209](https://github.com/boostorg/test/issues/209), [#218](https://github.com/boostorg/test/issues/218) + - GitHub Pull Requests: [PR#219](https://github.com/boostorg/test/pull/219), [PR#224](https://github.com/boostorg/test/pull/224) +* [Utility](/libs/utility/): + + + Implemented function template `ostream\_string` + in `` to optimally write any kind of + string content to an output stream. It satisfies the requirements + of [ostream.formatted.reqmts]. (Glen Fernandes) + + Optimized the stream output operators of `basic\_string\_view` + and `basic\_string\_ref` + to write directly to the `rdbuf` + stream buffer. (Glen Fernandes) +* [Uuid](/libs/uuid/): + + + **Breaking change:** MD5 name-based + uuid generation was corrected to be identical on all endian systems. + Define `BOOST\_UUID\_COMPAT\_PRE\_1\_71\_MD5` + to keep the result in a format compatible with 1.66 through 1.70. + This does not affect the default name-based uuid generation which + is based on SHA1. ([PR#109](https://github.com/boostorg/uuid/pull/109)) +* [Variant](/libs/variant/): + + + Fixed compilation of `boost::apply\_visitor` + with variants passed by non const reference in [PR#68](https://github.com/boostorg/variant/pull/68). Many + thanks to Ed Catmur for providing the fix. + + Added support for std::hash ([PR#49](https://github.com/boostorg/variant/pull/49)). Macro `BOOST\_VARIANT\_DO\_NOT\_SPECIALIZE\_STD\_HASH` + could be defined to avoid those specializations. + + Added micro optimizations for binary size and performance by Nikita + Kniazev in [PR#63](https://github.com/boostorg/variant/pull/63) and [PR#66](https://github.com/boostorg/variant/pull/66). + + Maintenance work, including [PR#64](https://github.com/boostorg/variant/pull/64) by Nikita Kniazev and [PR#67](https://github.com/boostorg/variant/pull/67) by + Hans Dembinski. +* [YAP](/libs/yap/): + + + Added an example showing how to make self-evaluating YAP expressions + (that is, expressions that don't need an explicit call to `evaluate()` + or `transform()`). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow and Michael Caisse managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_72_0.html b/users/history/version_1_72_0.html new file mode 100644 index 0000000..bf987d5 --- /dev/null +++ b/users/history/version_1_72_0.html @@ -0,0 +1,526 @@ +--- +title: Version 1.72.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.72.0 + +/\*\*/ + + + + + + + +Version 1.72.0 +============== + +Version 1.72.0 +-------------- + + +December 11th, 2019 18:06 GMT + + +[Documentation](/doc/libs/1_72_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_72\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/boost_1_72_0.tar.bz2) | 59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 | +| [boost\_1\_72\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/boost_1_72_0.tar.gz) | c66e88d5786f2ca4dbebb14e06b566fb642a1a6947ad8cc9091f9f445134143f | +| windows | [boost\_1\_72\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/boost_1_72_0.7z) | 247a91dd7e4d9dd3c4b954b532fbc167ba62dc15ab834e5ad893d7c3f9eb5f0f | +| [boost\_1\_72\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/boost_1_72_0.zip) | 8c20440aaba21dd963c0f7149517445f50c62ce4eb689df2b5544cc89e6e621e | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. Be careful as they have not been through the normal testing + process. + + + +* Revert cease dependence on range + + + [Coroutine + patch](/patches/1_72_0/0001-revert-cease-dependence-on-range.patch) + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Changed the `async\_initiate` + helper function to automatically deduce its return type, for C++11 + or later. + + Changed all asynchronous operations to use automatically deduced + return types, for C++14 or later. + + Introduced concepts to support `async\_initiate`. + + Added the nested template type `rebind\_executor` + to all I/O object types. + + Changed the initiation function objects to report their associated + I/O executor via the nested type `executor\_type` + and member function `get\_executor()`. + + Added the `default\_completion\_token` + trait, giving I/O executor types an associated default completion + token type for use with asynchronous operations. This trait is specialised + for the `use\_awaitable` + completion token, for example, to allow asynchronous operations to + be used as follows: `co\_await + socket.async\_connect(my\_endpoint)`. + + Added missing `async\_initiate` + to the Windows-specific I/O objects' asynchronous operations. + + Ensured that the executor type is propagated to newly accepted sockets. + + Changed to require that `Protocol` + copy and move operations never throw. + + Changed to require that `Endpoint` + default constructor and move operations never throw. + + Added the `noexcept` qualifier + to protocol accessors. + + Added the `noexcept` qualifier + to socket move constructors. + + Fixed issues associated with opening serial ports on Windows: + + - Use the correct constant to initialise the RTS control flag. + - Specify a default baud rate (9600). + + Fixed a lost "outstanding work count" that can occur when + an asynchronous accept operation is automatically restarted. + + Consult the [Revision + History](/doc/libs/1_72_0/doc/html/boost_asio/history.html) for further details. +* [Atomic](/libs/atomic/): + + + Added a workaround for `\_\_float128` + not being considered as a floating point type by some versions of + libstdc++. + + Improved compatibility with clang-win compiler. +* [Beast](/libs/beast/): + + + This is a maintenance update containing bug fixes, and updates to + use the new features delivered in Boost.Asio. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Circular Buffer](/libs/circular_buffer/): + + + Fix issue [#29](https://github.com/boostorg/circular_buffer/issues/29): `max\_size()` now takes the allocator's `max\_size()` + into account. (Glen Fernandes) +* [Context](/libs/context/): + + + architecture s390x supported + + execution\_context removed +* [Endian](/libs/endian/): + + + Made `endian\_reverse`, + `conditional\_reverse` + and `\*\_to\_\*` `constexpr` + on GCC and Clang + + Added convenience load and store functions + + Added floating point convenience typedefs + + Added a non-const overload of `data()`; changed its return type to `unsigned char\*` + + Added `\_\_int128` support + to `endian\_reverse` + when available + + Added a convenience header `boost/endian.hpp` +* [Filesystem](/libs/filesystem/): + + + Extracted `filesystem\_error` + to `exception.hpp`; `file\_status` + and associated enums and functions to `file\_status.hpp`; + `directory\_entry`, + `directory\_iterator` + and `recursive\_directory\_iterator` + to `directory.hpp`. + + **Deprecated:** For backward compatibility + `operations.hpp` still includes the new headers + `exception.hpp`, `file\_status.hpp` + and `directory.hpp`, unless `BOOST\_FILESYSTEM\_NO\_DEPRECATED` + macro is defined. These implicit includes are considered deprecated + and will be removed in a future release. Users are encouraged to + include the new headers directly or include `filesystem.hpp`. + + The `filesystem\_error` + exception is now implemented in the compiled library of Boost.Filesystem. + Users may need to add linking with Boost.Filesystem library in their + projects. + + On POSIX.1-2008 platforms, use `utimensat` + instead of `utime`. + `utime` is declared + obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. ([PR#115](https://github.com/boostorg/filesystem/pull/115)) + + `directory\_iterator` + is now left in the end state on memory allocation errors. + + In `directory\_iterator` + on POSIX systems, support for `readdir`/`readdir\_r` has been reworked to + avoid memory allocations for `dirent` + structures when `readdir` + is used. This reduces memory consumption and eliminates the possibility + of buffer overruns in case if `readdir` + produces a very long directory name. + + On Windows, use Boost.WinAPI to select the target Windows version. + + **New:** Added `directory\_options` + enum, which reflects the same named enum from C++20. The enum is + supported in `directory\_iterator` + and `recursive\_directory\_iterator` + to customize iteration behavior. In particular, the iterators now + support skipping directories that can't be opened due to insufficient + permissions. The `symlink\_option` + enum is now deprecated and should be replaced with `directory\_options`. + + By default, `recursive\_directory\_iterator` + is now reset to the end state in case of errors, as required by C++20. + ([#112](https://github.com/boostorg/filesystem/issues/112)) + + **New:** Added `directory\_options::pop\_on\_error` + option, which configures `recursive\_directory\_iterator` + so that it attempts to recover from iteration errors by repeatedly + invoking `pop()` + until it succeeds or the end state is reached. ([#113](https://github.com/boostorg/filesystem/issues/113)) + + **New:** Added `directory\_options::skip\_dangling\_symlinks` + option, which configures `recursive\_directory\_iterator` + so that it doesn't follow dangling directory symlinks and continues + iteration instead of reporting an error. + + **Deprecated:** The following members + of `recursive\_directory\_iterator` + are now marked as deprecated: `level()`, `no\_push\_pending()`, `no\_push\_request()`, `no\_push()`. Users are advised to replace their + use with the standard counterparts: `depth()`, `recursion\_pending()`, `disable\_recursion\_pending()`. Note that `recursion\_pending()` has the opposite meaning compared + to `no\_push\_pending()` and `no\_push\_request()`. Deprecated methods will be removed + in a future release. + + Fixed `path::lexically\_relative` (and any dependent + algorithms) to correctly handle empty, dot and dot-dot path elements + in its argument. The behavior is made closer to C++17 `std::path::lexically\_relative` in that empty + and dot path elements are ignored and dot-dot path elements are accounted + by decreasing the number of dot-dot path elements to generate in + the resulting relative path. ([#76](https://github.com/boostorg/filesystem/issues/76)) +* [Functional/Factory](/libs/functional/factory/): + + + Glen Fernandes rewrote the implementations of `factory` + and `value\_factory` + to provide the following features: + + - Support r-value arguments when possible + - Support arbitrary number of arguments via variadic templates + when possible + - Support allocators that are final + - Support allocators that use fancy pointers + - Support for disabled exceptions (`BOOST\_NO\_EXCEPTIONS`) + - Improved compilation times + + The following features have been removed: + + - Increasing limits for C++03 compilers through `BOOST\_FUNCTIONAL\_VALUE\_FACTORY\_MAX\_ARITY` + - Using `boost::none\_t` + in place of `void` + through `BOOST\_FUNCTIONAL\_FACTORY\_SUPPORT\_NONE\_T` +* [GIL](/libs/gil/): + + + Added + + - GSoC 2019: Lanczos resampling for image down scaling ([PR#309](https://github.com/boostorg/gil/pull/309)). + - GSoC 2019: Methods for binary thresholding, inverted binary + thresholding and truncation thresholding ([PR#313](https://github.com/boostorg/gil/pull/313)). + - GSoC 2019: Otsu thresholding method ([PR#314](https://github.com/boostorg/gil/pull/314)). + - GSoC 2019: Adaptive thresholding using mean or gaussian-weighted + sum of the neighbourhood area ([PR#315](https://github.com/boostorg/gil/pull/315)). + - GSoC 2019: Harris response calculation (corner detector without + non-maximum filtering) ([PR#350](https://github.com/boostorg/gil/pull/350)). + - GSoC 2019: Hessian corner detector ([PR#364](https://github.com/boostorg/gil/pull/364)). + - GSoC 2019: Types for defining 2D kernel, `kernel\_2d` + and `kernel\_2d\_fixed`, + in Numeric extension ([PR#361](https://github.com/boostorg/gil/pull/361)). + - GSoC 2019: Implementation of 2D convolution as new function + `convolve\_2d` + ([PR#367](https://github.com/boostorg/gil/pull/367)). + - GSoC 2019: Box filtering using the average filter ([PR#383](https://github.com/boostorg/gil/pull/383)). + - GSoC 2019: Blur function based on normalized mean filter ([PR#383](https://github.com/boostorg/gil/pull/383)). + - GSoC 2019: Sobel and Scharr operators ([PR#392](https://github.com/boostorg/gil/pull/392)). + - GSoC 2019: Median filter to remove noise from image ([PR#393](https://github.com/boostorg/gil/pull/393)). + - Continued adding new test cases and significantly improved + overall test coverage. + - Documented purpose of `cached\_location\_t` + ([PR#287](https://github.com/boostorg/gil/pull/287)). + - Function `convolve\_1d` + in Numeric extension for convenient use of `convolve\_rows` + and `convolve\_cols` + ([PR#347](https://github.com/boostorg/gil/pull/347)) and [PR#367](https://github.com/boostorg/gil/pull/367)). + - Function `extend\_boundary` + in Numeric extension to perform image boundary extension ([PR#386](https://github.com/boostorg/gil/pull/386)). + - Project release notes maintained in Markdown file `RELEASES.md` ([PR#404](https://github.com/boostorg/gil/pull/404)). + + Changed + + - Move all tests, core features and extensions, inside `test/` + directory ([PR#302](https://github.com/boostorg/gil/pull/302)). + + Removed + + - Replace Boost.MPL with Boost.MP11 ([PR#274](https://github.com/boostorg/gil/pull/274)). + - Removed use of Boost.TypeTraits ([PR#274](https://github.com/boostorg/gil/pull/274)). + - Dropped support for GCC <= 4.8 ([PR#296](https://github.com/boostorg/gil/pull/296)). + - Remove `include/boost/gil/version.hpp` + file as unused ([PR#403](https://github.com/boostorg/gil/pull/403)). + + Fixed + + - Undetermined value of default-initialized channel and pixel + objects ([PR#273](https://github.com/boostorg/gil/pull/273)). + - Undefined behaviour due to `std::is\_trivially\_default\_constructible` + specializations ([PR#284](https://github.com/boostorg/gil/pull/284)). + - Crash when reading PNG files with an invalid header ([PR#385](https://github.com/boostorg/gil/pull/385)). + - Applied the Rule of Three for numerous types. + - Removed uses of deprecated implicit definition of defaulted + copy assignment operator or copy constructor. +* [Histogram](/libs/histogram/): + + + Several new features and performance improvements, some bug-fixes + + See the full [Release + Notes](/libs/histogram/doc/html/histogram/history.html) for a complete list of changes +* [Log](/libs/log/): + + + Improved compatibility with clang-win compiler. +* [MPI](/libs/mpi/): + + + Documentation clarifications. + + Fixed scatterv bug when using explicit input buffer offsets. + + Enable usage of MPI\_Probe and friend with Intel MPI >= 2019.4 + + Symbol visibility on Windows +* [Math](/libs/math/): + + + Added Hypergeometric functions 1F0, 0F1, 2F0, 1F1 and pFq. + + Added Jacobi polynomial (and derivatives) evaluation. + + Added Gegenbauer polynomial (and derivatives) evaluation. + + Added Cardinal B-Splines (and derivatives) as polynomial functions + in their own right. + + Added Cardinal Trigonometric Interpolation. + + Added new statistics sub-section. + + Added One Sample Student's T Test. + + Added Anderson Darling test for normality. + + Added Ljung Box test for auto-correlation. + + Added Runs test for random sequences. + + The headers `boost/math/tools/univariate\_statistics.hpp` + and `boost/math/tools/bivariate\_statistics.hpp`, have been deprecated in favor + of `boost/math/statistics/univariate\_statistics.hpp` and `boost/math/statistics/bivariate\_statistics.hpp`. + + Added The Empirical CDF distribution. + + Reworked the Sterling approximation used by multiprecision gamma + functions to be applicable to all the function that use the Lanczos + approximation at regular precision. Also extended Lanczos approximations + up to 100 decimal digit precision. +* [Multiprecision](/libs/multiprecision/): + + + Big `constexpr` update + allows cpp\_int and float128 arithmetic to be fully `constexpr` with gcc and clang 9 or + later, or any compiler supporting `std::is\_constant\_evaluated()`. + + Fix bug in variable precision mpf\_float which causes it to go into + a tailspin trying to select the correct precision - see https://github.com/boostorg/multiprecision/issues/164. +* [Outcome](/libs/outcome/): + + + Enhancements: + + - Standalone outcome is now `make + install`-able, and + cmake `find\_package()` can find it. Note that you + must separately install and `find\_package()` Outcome's dependency, quickcpplib, + else `find\_package()` of Outcome will fail. + - The git submodule mechanism used by standalone Outcome of specifying + dependent libraries has been replaced with a cmake superbuild + of dependencies mechanism instead. Upon cmake configure, an + internal copy of quickcpplib will be git cloned, built and + installed into the build directory from where an internal + `find\_package()` uses it. This breaks the + use of the unconfigured Outcome repo as an implementation of + Outcome, one must now do one of: 1. Add Outcome as subdirectory + to cmake build. 2. Use cmake superbuild (i.e. `ExternalProject\_Add()`) + to build and install Outcome into a local installation. 3. + Use one of the single header editions. + - For standalone Outcome, the current compiler is now checked + for whether it will compile code containing C++ Concepts, and + if it does, all cmake consumers of Outcome will enable C++ + Concepts. Set the cmake variable `CXX\_CONCEPTS\_FLAGS` + to an empty string to prevent auto detection and enabling of + C++ Concepts support occurring. + - `OUTCOME\_TRY` + operation now hints to the compiler that operation will be + successful. [P1886 **Error speed benchmarking**](https://wg21.link/P1886) showed + that there is considerable gain in very small functions by + hinting to the compiler whether the expression is expected + to be successful or not. `OUTCOME\_TRY` + previously did not hint to the compiler at all, but now it + does. A new suite of macros `OUTCOME\_TRY\_FAILURE\_LIKELY` + hint to the compiler that failure is expected. If you wish + to return to the previously unhinted behaviour, define `OUTCOME\_TRY\_LIKELY(expr)` + to `(!!expr)`. + - [#199](https://github.com/ned14/outcome/issues/199) + Support for C++ Coroutines has been added. This comes in two + parts, firstly there is now an `OUTCOME\_CO\_TRY()` operation suitable for performing + the `TRY` operation + from within a C++ Coroutine. Secondly, in the header `outcome/coroutine\_support.hpp` there are implementations + of `eager` + and `lazy` + which let you more naturally and efficiently use `basic\_result` or `basic\_outcome` from within + C++ Coroutines -- specifically, if the result or outcome will + construct from an exception pointer, exceptions thrown in the + coroutine return an errored or excepted result with the thrown + exception instead of throwing the exception through the coroutine + machinery (which in current compilers, has a high likelihood + of blowing up the program). Both `eager` and `lazy` can accept any `T` as well. Both have been + tested and found working on VS2019 and clang 9. + - [#210](https://github.com/ned14/outcome/issues/210) + `make\_error\_code()` and `make\_exception\_ptr()` are now additionally considered + for compatible copy and move conversions for `basic\_result<>`. + This lets you construct a `basic\_result` into a `basic\_result`, where `E` + is a custom type which has implemented the ADL discovered free + function `error\_code + make\_error\_code(E)`, + but is otherwise unrelated to `error\_code`. + The same availability applies for `exception\_ptr` + with `make\_exception\_ptr()` being the ADL discovered + free function. `basic\_outcome<>` has less support for + this than `basic\_result<>` in order to keep constructor + count down, but it will accept via this mechanism conversions + from `basic\_result<>` and `failure\_type<>`. + + Bug fixes: + + - [#184](https://github.com/ned14/outcome/issues/184) + The detection of `[[nodiscard]]` + support in the compiler was very mildly broken. +* [PolyCollection](/libs/poly_collection/): + + + Maintenance work. +* [Preprocessor](/libs/preprocessor/): + + + Topic added which discusses emptiness + + Support for the C++20 `\_\_VA\_OPT\_\_` + construct + + - `BOOST\_PP\_VARIADIC\_HAS\_OPT` + whether `\_\_VA\_OPT\_\_` + is supported at the C++20 level + - `BOOST\_PP\_CHECK\_EMPTY` + test for emptiness using `\_\_VA\_OPT\_\_` + at the C++20 level + - `BOOST\_PP\_VA\_OPT` + more flexible alternative to `\_\_VA\_OPT\_\_` + at the C++20 level +* [Smart Pointers](/libs/smart_ptr/): + + + Implemented `allocate\_unique` + for scalars and arrays. (Glen Fernandes) +* [Test](/libs/test/): + + + Boost.test v3.12 see the [Changes + log](/libs/test/doc/html/boost_test/change_log.html) for more details. + + New feature: + + - Support for C++17 `std::string\_view` + has been added. + - Better diagnostic on `boost::exception` + and no rtti mode (thanks to Mikhail Pilin / [pull\_request 234]) + + Bug fixes and pull requests: + + - GitHub Issues: [#206](https://github.com/boostorg/test/issues/206), [#217](https://github.com/boostorg/test/issues/217), [#223](https://github.com/boostorg/test/issues/223), [#229](https://github.com/boostorg/test/issues/229) + - GitHub Pull Requests: [PR#227](https://github.com/boostorg/test/pull/227), [PR#231](https://github.com/boostorg/test/pull/231), [PR#232](https://github.com/boostorg/test/pull/232), + [PR#234](https://github.com/boostorg/test/pull/234) +* [VMD](/libs/vmd/): + + + `BOOST\_VMD\_IS\_EMPTY` + updated to use `\_\_VA\_OPT\_\_` + at the C++20 level has 100% reliability + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow and Michael Caisse managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_73_0.html b/users/history/version_1_73_0.html new file mode 100644 index 0000000..94c23d4 --- /dev/null +++ b/users/history/version_1_73_0.html @@ -0,0 +1,633 @@ +--- +title: Version 1.73.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.73.0 + +/\*\*/ + + + + + + + +Version 1.73.0 +============== + +Version 1.73.0 +-------------- + + +April 28th, 2020 03:57 GMT + + +[Documentation](/doc/libs/1_73_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_73\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.bz2) | 4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 | +| [boost\_1\_73\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.gz) | 9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf | +| windows | [boost\_1\_73\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.7z) | d2e7501bb04fe7abc09aa93f013ae997604286a882da1bd36ddd96ea1163ea71 | +| [boost\_1\_73\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.zip) | 0909a79524f857ef54570ceef8f397cc0629202532cc997785479c7c08bbc2a4 | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. Be careful as they have not been through the normal testing + process. + + + +* Outcome `status\_code\_domain` + assertion removal + + + [Outcome patch](/patches/1_73_0/0001-outcome-assert.patch) +* Beast and coroutines + + + [Beast patch](/patches/1_73_0/0002-beast-coroutines.patch) + +### New Libraries + + +* [Nowide](/libs/nowide/): Standard library functions + with UTF-8 API on Windows, from Artyom Beilis. +* [StaticString](/libs/static_string/): A dynamically + resizable string of characters with compile-time fixed capacity and contiguous + embedded storage, from Vinnie Falco and Krystian Stasiowski + +### Updated Libraries + + +* [Align](/libs/align/): + + + Update `aligned\_alloc` + to support older mingw32. +* [Any](/libs/any/): + + + Speedup compilation by not including ``. + + Maintenance work, including CI hardening. +* [Asio](/libs/asio/): + + + Fixed compatibility with C++20 concept syntax. + + Marked the POSIX descriptor classes' move constructors as `noexcept`. + + Added the `ssl::host\_name\_verification` class, which + is a drop-in replacement for `ssl::rfc2818\_verification`. + The `ssl::rfc2818\_verification` class has + been marked as deprecated. As a consequence of this change, SSL support + now depends on functions that were introduced in OpenSSL 1.0.2. + + Added an `ssl::context` constructor to take ownership + of a native handle. + + Changed C++ language version detection with gcc + to use `\_\_cplusplus` + macro. + + Fixed a work counting issue in the asynchronous resolve operation + for endpoints. + + Fixed the `strand<>` converting constructors and + assignment operators. + + Ensured that resolvers are restarted correctly after a fork. + + Fixed compatibility with the current NetBSD release. + + Removed spurious handler requirement checks in some `async\_read` overloads. + + Changed the `ssl::context` class to propagate non-EOF + errors from the `add\_certificate\_authority` + function. + + Fixed a Windows-specific `thread\_pool` + destructor hang that occurred when the pool had an associated I/O + object. + + Changed the select reactor to recreate the "self + pipe trick" sockets on error. This addresses an issue on some + versions of Windows, where these sockets are discconected after a + system sleep. + + Fixed a compile error in the buffered streams due to the lack of + reference collapsing in C++98. + + Changed the `priority\_scheduler` + example to demonstrate calls to `shutdown()` and `destroy()`. + + Removed some unnecessary null pointer checks. + + Changed Windows platform detection to recognise TV titles as Windows + apps. + + Added some emscripten compatibility patches. + + Fixed a compile error in the `use\_awaitable\_t::as\_default\_on` + function. + + Changed all uses of the boost.bind placeholders to use the `boost::placeholders` namespace. + + Fixed a potential compile error in the `async\_compose` + implementation due to incorrect overload selection. + + Suppressed some non-virtual destructor warnings. + + Various documentation fixes and improvements. +* [Assert](/libs/assert/): + + + Added `source\_location`. +* [Atomic](/libs/atomic/): + + + Implemented C++20 `atomic\_ref`. + See [docs](/doc/html/atomic/interface.html#atomic.interface.interface_atomic_ref) + and especially the [caveats](/doc/html/atomic/interface.html#atomic.interface.interface_atomic_ref.caveats) + section. + + Implemented `atomic\_flag::test` + operation, which was introduced in C++20. + + `atomic` + should now take into account alignment requirements of `T`, which makes a difference if + those requirements are higher than that of the internal storage of + `atomic`. + + Added static asserts enforcing the requirements on the value type + `T` used with `atomic` and `atomic\_ref`. + This should prohibit invalid types from being used as atomics. + + Improved internal lock pool implementation. The pool is larger, and + lock selection accounts for atomic object alignment, which should + reduce the potential of thread contention. + + Fixed incorrect x86 code generated for `bit\_test\_and\_\*` operations on 8 and 16-bit arguments. + Other architectures are not affected. + + Fixed a possible unaligned memory access in `compare\_exchange\_\*` operations, if alignment requirements + of `value\_type` are + less than that of the internal storage of `atomic`. + + `boost/atomic/atomic.hpp` no longer includes `boost/atomic/atomic\_flag.hpp` and `boost/atomic/fences.hpp` + and only defines the `boost::atomic` + class template and related typedefs. Include the other headers explicitly + or use `boost/atomic.hpp` to include all parts of Boost.Atomic. + + The `atomic::storage()` + accessor and associated `atomic::storage\_type` + type are deprecated. Instead, users are advised to use `atomic::value()` + and `atomic::value\_type`, respectively. Users + can define `BOOST\_ATOMIC\_SILENCE\_STORAGE\_DEPRECATION` + to disable deprecation warnings for the time of transition. The deprecated + pieces will be removed in a future release. + + Removed support for `BOOST\_ATOMIC\_DETAIL\_HIGHLIGHT\_OP\_AND\_TEST`. + This macro was used as a helper for transition to the updated returned + values of `\*\_and\_test` + operations in Boost.Atomic 1.67, which was released 2 years before + 1.73. +* [Beast](/libs/beast/): + + + This is a maintenance update. + + Nested `mutable\_data\_type` + in Beast dynamic buffers is deprecated. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Context](/libs/context/): + + + [#133](https://github.com/boostorg/context/issues/133): IBM Z: Fix fcontext routines + + [#132](https://github.com/boostorg/context/issues/132): mips64/n64: .align 3 + + [#131](https://github.com/boostorg/context/issues/131): Use OSPLAT MIPS32/MIPS64 to set different ABI + + [#129](https://github.com/boostorg/context/issues/129): Fix non-PIC in RISC-V assembly +* [Conversion](/libs/conversion/): + + + Added `boost::polymorphic\_downcast` for references + (thanks to Julien Delacroix for the patch). + + Significant docs update. +* [date\_time](/libs/date_time/): + + + [#123](https://github.com/boostorg/date_time/issues/123): Support constexpr in c++14 and above + + [#134](https://github.com/boostorg/date_time/issues/134): Make date\_time all inline. Users no longer need + to link the library for any functions. Library remains for build + compatibility. + + [#132](https://github.com/boostorg/date_time/issues/132): Deprecate support for legacy io and `USE\_DATE\_TIME\_PRE\_1\_33\_FACET\_IO` + macro + + Misc documentation updates and bugfixes. +* [DLL](/libs/dll/): + + + Fixes and tests for demangling in `boost::dll::smart\_library` + (thanks to Ramil Gauss for [#35](https://github.com/boostorg/dll/issues/35)). + + Make UB sanitizers happy with `boost::dll::load\_mode::type` + [#30](https://github.com/boostorg/dll/issues/30). + + Ceased dependence on MPL improving compile times (thanks to Nikita + Kniazev for [#34](https://github.com/boostorg/dll/issues/34)). + + Clang and ICC on Windows fixes and CI support for those platforms + (thanks to Nikita Kniazev [#33](https://github.com/boostorg/dll/issues/33)). + + Maintenance work, including CI hardening and tests improving. +* [Dynamic Bitset](/libs/dynamic_bitset/): + + + Fixed a portability issue in the definition of the maximum block + limit. +* [Flyweight](/libs/flyweight/index.html): + + + Maintenance work. +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#650](https://github.com/boostorg/geometry/pull/650) Missing input combinations in `intersection()` + and introduction of tupled-output. + - [PR#671](https://github.com/boostorg/geometry/pull/671) Added `d3::point\_xyz` + geometry model (thanks to Digvijay Janartha). + + Solved issues + + - [#657](https://github.com/boostorg/geometry/issues/657) Incorrect definition of `EPSG:3785`. + + Bugfixes + + - [PR#639](https://github.com/boostorg/geometry/pull/639) R-tree exception-safety improvement. + - [PR#668](https://github.com/boostorg/geometry/pull/668) Andoyer inverse formula fixed for close points. + - [PR#687](https://github.com/boostorg/geometry/pull/687) Fixed dangling reference in distance algorithm. + + Deprecation + + - [#590](https://github.com/boostorg/geometry/issues/590) Support for C++03 has been deprecated and Geometry + will require C++14 from Boost 1.75 onwards. +* [GIL](/libs/gil/): + + + Added + + - Added move constructor and move assignment operator to `image` class ([PR#457](https://github.com/boostorg/gil/pull/457)). + - New member function `size()` in `any\_image\_view` + class ([PR#456](https://github.com/boostorg/gil/pull/456)). + + Changed + + - Replace Boost.Test with Boost.LightweightTest as the only test + framework used in GIL ([PR#459](https://github.com/boostorg/gil/pull/459)) and ([PR#464](https://github.com/boostorg/gil/pull/464)). This + also restructured the `test/extension/io/` sub-tree and targets in related + `Jamfile`-s. + - Removed remaining uses of Boost.MPL ([PR#459](https://github.com/boostorg/gil/pull/459)). + - Renamed all macros using `BOOST\_GIL\_` + prefix ([PR#411](https://github.com/boostorg/gil/pull/411)). + - Renamed all CMake configuration options using `BOOST\_GIL\_` prefix ([PR#419](https://github.com/boostorg/gil/pull/419)). + + Changed + + - Removed `extension/dynamic\_image/reduce.hpp` + as unused and possibly unfinished ([PR#466](https://github.com/boostorg/gil/pull/466)). An implementation + attempt of techniques described in the paper [Efficient + Run-Time Dispatching in Generic Programming with Minimal Code + Bloat](http://lubomir.org/academic/MinimizingCodeBloat.pdf) by Lubomir Bourdev, Jaakko Jarvi. + - Removed direct dependency on Boost.MPL, Boost.System and Boost.Test. + - Started removing public macros for compile-time configuration + of I/O extension tests, i.e. `BOOST\_GIL\_IO\_TEST\_ALLOW\_READING\_IMAGES` + and `BOOST\_GIL\_IO\_TEST\_ALLOW\_WRITING\_IMAGES`. + Instead, if a test target is built, it builds all its test + cases unconditionally. + + Fixed + + - Avoid `longjmp` + interaction during destruction of I/O extension objects ([PR#433](https://github.com/boostorg/gil/pull/433)). + - Fixed missing alignment default value in constructor of `image` class ([PR#429](https://github.com/boostorg/gil/pull/429)). + - Fixed segmentation fault when reading corrupted PNG file ([PR#414](https://github.com/boostorg/gil/pull/414)). + - Fixed illegal initialization of return values in the old IOv1 + interface of I/O extension ([PR#409](https://github.com/boostorg/gil/pull/409)). + + Acknowledgements + + - Samuel Debionne, Thiago Henrique Hüpner, Pranam Lashkari, + Mateusz Loskot, Debabrata Mandal, Olzhas Zhumabek +* [Histogram](/libs/histogram/): + + + New features + + - Added `crop` + command to `reduce` + algorithm + - `slice` command + in `reduce` now + works on `category` + axis + - Added `count` + accumulator, can be used to add arbitrary metadata to each + cell + - `sum` algorithm + gained a new argument to optionally sum only over inner bins + + Several fixes for bugs in corner cases + + Enhanced documentation + + - How to use Boost.Histogram as a backend in an external API + - More on how to use Boost.Histogram with custom accumulators + and Boost.Accumulators + - More on how to use `reduce` + - Updated benchmarks + + See the [full + changelog here](/libs/histogram/doc/html/histogram/history.html) +* [icl](/libs/icl/): + + + [PR#23](https://github.com/boostorg/icl/pull/23): Remove references to date\_time compiled library. + + [PR#17](https://github.com/boostorg/icl/pull/17): Fix forward decl lower and upper less equal. + + Misc bugfixes. +* [IO](/libs/io/): + + + Made all the IOS state saver classes non-copyable. (Glen Fernandes) + + Correctly handle error upon first read from the input stream when + reading a quoted string. (Glen Fernandes) + + Implemented `ostream\_joiner` + for delimiter based joining. (Glen Fernandes) + + Relocated `ostream\_string` + from the Utility library to the IO library as `ostream\_put`. + + Correctly handle stream width and fill in quoted output. (Glen Fernandes) + + Optimize quoted output to write directly to the stream buffer. (Glen + Fernandes) + + Glen Fernandes became the maintainer of the IO library. +* [LexicalCast](/libs/lexical_cast/): + + + Maintenance work, including CI hardening and better workarounds for + broken standard libraries (thanks to Nikita Kniazev [#31](https://github.com/boostorg/lexical_cast/issues/31), + [#32](https://github.com/boostorg/lexical_cast/issues/32)). +* [Log](/libs/log/): + + + New Features: + + - Default sink used in trivial logging, when no sinks are registered + in the logging core, now automatically flushes output after + each log record. ([#103](https://github.com/boostorg/log/issues/103)) + - `core::flush` now performs a flush + on the default sink used for trivial logging, when no sinks + are registered. + + Bug fixes: + + - Added a workaround for some syslog API implementations (e.g. + glibc), which do not save the application identification string + in `openlog` + call. Such implementations could access already freed memory + on each `syslog` + call, resulting in undefined behavior. ([#97](https://github.com/boostorg/log/issues/97)) + - Fixed that log file rotation on a specific day of month (e.g. + `rotation\_at\_time\_point(boost::gregorian::greg\_day(1))`) could be silently ignored + and not happen. ([#98](https://github.com/boostorg/log/issues/98)) + - Fixed that `text\_file\_backend::rotate\_file` + could throw if there were no log records written yet and target + file name pattern was set. + - Ported various components of the library to `std::allocator\_traits` + to improve compatibility with C++20 allocators. + - Fixed compilation errors when building in MSYS2 Cygwin environment. + ([#102](https://github.com/boostorg/log/issues/102)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + IMPORTANT: C++03 support is now deprecated and will be removed from + March 2021. + + Added Cubic Hermite Interpolation. + + Added Modified Akima Interpolation. + + Added PCHIP Interpolation. + + Added Quintic Hermite Interpolation. + + Added entropy to numerous distributions. + + Allow trivial quadrature case where the two end points are equal, + and in addition allow bounds to be interchanged. + + Fix exp\_sinh quadrature to work with complex types over a non-native + range. + + Fix miscellaneous compiler warnings in factorial.hpp. + + Use std::chrono rather than boost::chrono in timed pFq calculations. + + Remove much of the old boost::mpl dependencies to improve constexpr + support. +* [Mp11](/libs/mp11/): + + + Added `mp\_unique\_if` + (contributed by Kris Jusiak) + + Added `mp\_flatten` + + Added `mp\_rotate\_left`, + `mp\_rotate\_right` (contributed + by Duncan Barber) + + Added `mp\_compose` + + Added `mp\_power\_set` + + Added `mp\_partial\_sum` + + Added `mp\_iterate` +* [Multi-index Containers](/libs/multi_index/): + + + `multi\_index\_container` + is now [`AllocatorAware`](https://en.cppreference.com/w/cpp/named_req/AllocatorAwareContainer). + + Swapping of internal `KeyFromValue`, + `Compare`, `Hash` and `Pred` + objects now selects the appropriate `swap` + function between `std::swap` + and ADL candidates, in accordance with standard specifications in + **[swappable.requirements]** (issue + [#29](https://github.com/boostorg/multi_index/issues/29)). + + Provided some internal copy constructors and assignment operators + whose default implicit definition is deprecated in C++11 onwards + (**[depr.impldec]**), which was warned + about on some compilers. + + Maintenance work. +* [Multiprecision](/libs/multiprecision/): + + + IMPORTANT: Mark C++03 support as deprecated and due for removal in + 2021. + + Big update to cpp\_int adds faster Karatsuba and Coomba multiplication + routines. + + Fix conversion of gmp\_rational to `long + double` and `\_\_float128`, + fixes #178. + + Fix up libtommath support to function with the latest libtom releases. + + Fix up some incompatibilities with the latest Intel C++ compiler. + + Fix up `constexpr` arithmetic + support for latest MSVC release. +* [Outcome](/libs/outcome/): + + + Enhancements: + + - Performance of Outcome-based code compiled by clang has been + greatly improved. The previous implementation of Outcome's + status bitfield confused clang's optimiser, which caused low + quality codegen. Unlike most codegen issues, this was noticeably + in empirical benchmarks of real world code, as was shown by + [P1886 **Error + speed benchmarking**](https://wg21.link/P1886). + - The safe part of the [`better\_optimisation`](https://github.com/ned14/outcome/tree/better_optimisation) + Outcome v2.2.0 future branch was merged to Outcome v2.1.3 which + includes a new status bitfield implementation. This appears + to not confuse clang's optimiser, and clang 9 produces code + which routinely beats GCC 9's code for various canned use cases. + - Installability is now CI tested per commit. Due to installability + of standalone Outcome (e.g. `make + install`) breaking + itself rather more frequently than is ideal, installability + is now tested on CI per commit. + + Bug fixes: + + - [#214](https://github.com/ned14/outcome/issues/214) + Newer Concepts implementing compilers were unhappy with the + early check for destructibility of `T` + and `E`, so removed + template constraints, falling back to static assert which runs + later in the type instantiation sequence. + - [#220](https://github.com/ned14/outcome/issues/220) + A false positive undefined behaviour sanitiser failure in some + use cases of Experimental Outcome was worked around to avoid + the failure message. +* [PolyCollection](/libs/poly_collection/): + + + Suppressed a potential redundant move warning in `boost::poly\_collection::for\_each`. + + Fixed a bug by which elements were copied rather than moved in allocator-extended + move construction and move assigment between collections with non-propagating, + unequal allocators. + + Allocator-extended move construction no longer decays to allocator-extended + copy construction for the legacy version of libstdc++-v3 shipped + with GCC 4.8 (which can also be used by Clang). +* [Stacktrace](/libs/stacktrace/): + + + Added documentation on distribution of PDBs [#55](https://github.com/boostorg/stacktrace/issues/55), [#47](https://github.com/boostorg/stacktrace/issues/47) (thanks + to emptyVoid and Roger Orr for information and to zlojvavan for testing). + + Fixed msvc-9 build + + Maintenance work, including test fixes [#86](https://github.com/boostorg/stacktrace/issues/86), fixing typos + [#84](https://github.com/boostorg/stacktrace/issues/84), CI improvements and hardening, inspect tool fixes. +* [Test](/libs/test/): + + + Boost.test v3.13 see the [Changes + log](/libs/test/doc/html/boost_test/change_log.html) for more details. + + New feature: It is now possible to combine tolerance indication, + user message and collection comparison modifier in a single `BOOST\_TEST` expression. See change + logs for more details. + + Bug fixes and pull requests: + + - GitHub Issues: [#173](https://github.com/boostorg/test/issues/173), [#179](https://github.com/boostorg/test/issues/179), [#220](https://github.com/boostorg/test/issues/220), [#221](https://github.com/boostorg/test/issues/221), + [#235](https://github.com/boostorg/test/issues/235) + [#237](https://github.com/boostorg/test/issues/237), [#241](https://github.com/boostorg/test/issues/241), [#245](https://github.com/boostorg/test/issues/245), [#246](https://github.com/boostorg/test/issues/246), + [#251](https://github.com/boostorg/test/issues/251), [#253](https://github.com/boostorg/test/issues/253) + [#254](https://github.com/boostorg/test/issues/254), [#263](https://github.com/boostorg/test/issues/263) + - Trac tickets: [#11107](https://svn.boost.org/trac/boost/ticket/11107) + - GitHub Pull Requests: [PR#41](https://github.com/boostorg/test/pull/41), [PR#114](https://github.com/boostorg/test/pull/114), [PR#187](https://github.com/boostorg/test/pull/187), + [PR#239](https://github.com/boostorg/test/pull/239), [PR#247](https://github.com/boostorg/test/pull/247) + [PR#252](https://github.com/boostorg/test/pull/252), [PR#259](https://github.com/boostorg/test/pull/259), [PR#265](https://github.com/boostorg/test/pull/265) +* [ThrowException](/libs/throw_exception/): + + + Added an overload of `throw\_exception` + that takes a `boost::source\_location` + object. + + NOTE: Projects using `BOOST\_THROW\_EXCEPTION` + with exceptions disabled will need to add a definition of this new + overload. +* [TTI](/libs/tti/): + + + Added introspection of function templates for more recent C++ compilers + versions from gcc and vc++. as well as all versions of clang. Older + versions of vc++ before 14.0 and gcc prior to 4.8 may fail. + + Added specific introspection for elements of struct/class, enum, + and union types, which can be used for more fine-grained introspection + than the general 'type' introspection. +* [TypeIndex](/libs/type_index/): + + + Maintenance work, including CI integration with inspect tool. +* [Utility](/libs/utility/): + + + The `ostream\_string` + facility has moved from the Utility library to the IO library as + `ostream\_put`. +* [Variant](/libs/variant/): + + + Removed unused includes (thanks to Nikita Kniazev [#74](https://github.com/boostorg/variant/issues/74)). + + Fixed zero-as-null-pointer-constat warnings (thanks to Bart Siwek + [#77](https://github.com/boostorg/variant/issues/77)). + + Maintenance work, including typo fixes. +* [Variant2](/libs/variant2/): + + + Added support for `std::hash`, + `boost::hash`. + + `variant` + is now trivial when all types in `T...` are trivial. This improves performance + by enabling it to be passed to, and returned from, functions in registers. +* [WinAPI](/libs/winapi/): + + + Headers in `boost/detail/winapi` + are deprecated and will be removed in a future release. + + Boost.WinAPI headers no longer include `winerror.h`. + Include `boost/winapi/error\_codes.hpp` to get Windows error codes. + ([#81](https://github.com/boostorg/winapi/issues/81)) + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release [4.2.0](https://github.com/boostorg/build/releases/tag/4.2.0) + of B2. + + WARNING: Since version 4.0.0 B2 requires a capable C++11 compiler + to bootstrap. This is only needed to build B2 itself not to build + Boost for your use. + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_74_0.html b/users/history/version_1_74_0.html new file mode 100644 index 0000000..15793c8 --- /dev/null +++ b/users/history/version_1_74_0.html @@ -0,0 +1,709 @@ +--- +title: Version 1.74.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.74.0 + +/\*\*/ + + + + + + + +Version 1.74.0 +============== + +Version 1.74.0 +-------------- + + +August 14th, 2020 05:02 GMT + + +[Documentation](/doc/libs/1_74_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_74\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.tar.bz2) | 83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1 | +| [boost\_1\_74\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.tar.gz) | afff36d392885120bcac079148c177d1f6f7730ec3d47233aa51b0afa4db94a5 | +| windows | [boost\_1\_74\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.7z) | 903fd40074de8dc733d2f0b6b0642e43b714653eaeb79289b12161b9567fae97 | +| [boost\_1\_74\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.zip) | a0e7ce67c52d816708fdeccdd8c9725626ba61254c13c18770498cacd514710a | + + +### New Libraries + + +* [STLInterfaces](/libs/stl_interfaces/): A library + of CRTP bases to ease the writing of STL views, iterators, and sequence + containers, from Zach Laine. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added an implementation of the proposed standard executors ([P0443r13](http://wg21.link/P0443r13), [P1348r0](http://wg21.link/P1348r0), + and [P1393r0](http://wg21.link/P1393r0)). + + Added support for the proposed standard executors to Asio's I/O facilities. + + - The supplied executors now meet the requirements for the proposed + standard executors. These classes also continue to meet the + existing requirements for the Networking TS model of executors. + - All I/O objects, asynchronous operations, and utilities will + interoperate with both new proposed standard executors, and + with existing Networking TS executors. + - The `any\_io\_executor` + type alias has been introduced as the default runtime-polymorphic + executor for all I/O objects. This defaults to the `execution::any\_executor<>` + template. If required for backward compatibility, `BOOST\_ASIO\_USE\_TS\_EXECUTOR\_AS\_DEFAULT` + can be defined to use the old `asio::executor` + polymorphic wrapper instead. + - Support for the existing Networking TS model of executors can + be disabled by defining `BOOST\_ASIO\_NO\_TS\_EXECUTORS`. + + Added converting move construction and assignment to `basic\_waitable\_timer`. + + Enabled C++20 coroutine support when using gcc + 10. + + Added overloads of `co\_spawn` + that launch an awaitable. + + Added a new constructor overload to `use\_awaitable\_t`'s + default executor adapter, to enable conversion between executor types. + + Added support for using `detached\_t` + as a default completion token, by adding members `as\_default\_on()` and `as\_default\_on\_t<>`. + + Added a move constructor to `ssl::stream<>`. + + Changed `ssl::stream<>` + write operations to linearise gather-write buffer sequences. + + Added compile-time detection of the deprecated `asio\_handler\_invoke`, + `asio\_handler\_allocate`, + and `asio\_handler\_deallocate` + hooks, when `BOOST\_ASIO\_NO\_DEPRECATED` + is defined. + + Implemented a number of performance optimisations. + + Added source location support to handler tracking. + + Implemented various improvements to the handlerviz.pl + tool. + + Added the handlerlive.pl tool, which processes + handler tracking output to produce a list of "live" handlers. + + Added the handlertree.pl tool, which filters handler + tracking output to include only those events in the tree that produced + the nominated handlers. + + Added changes for clang-based Embarcadero C++ compilers. + + Fixed a deadlock that can occur when multiple threads concurrently + initialise the Windows I/O completion port backend. + + Fixed `async\_compose` + to work with copyable handlers when passed by lvalue. + + Fixed completion signature deduction in `co\_spawn`. + + Removed a spurious `Executor` + base class from the `executor\_binder` + implementation. + + Various fixes and improvements in the documentation and examples. + + Consult the [Revision + History](/doc/libs/1_74_0/doc/html/boost_asio/history.html) for further details. +* [Atomic](/libs/atomic/): + + + Added missing `const` + qualifiers to some operations in `atomic\_ref`. + + Added support for `yield` + instruction on ARMv8-A. The instruction is used internally in spin + loops to reduce CPU power consumption. + + Added support for C++20 [waiting + and notifying operations](/doc/html/atomic/interface.html#atomic.interface.interface_wait_notify_ops). The implementation includes generic + backend that involves the internal lock pool, as well as specialized + backends for Windows, Linux, FreeBSD, DragonFly BSD and NetBSD. Atomic + types provide a new method `has\_native\_wait\_notify`, + a static boolean constant `always\_has\_native\_wait\_notify` + and a set of capability macros that allow to detect if the implementation + supports native waiting and notifying operations for a given type. + + Changed internal representation of `atomic\_flag` + to use 32-bit storage. This allows for more efficient waiting and + notifying operations on `atomic\_flag` + on some platforms. + + Added support for build-time configuration of the internal lock pool + size. The user can define the `BOOST\_ATOMIC\_LOCK\_POOL\_SIZE\_LOG2` + macro to specify binary logarithm of the size of the lock pool. The + default value is 8, meaning that the size of the lock pool is 256, + up from 64 used in the previous release. + + Added support for a new set of atomic types dedicated for [inter-process + communication](/doc/html/atomic/interface.html#atomic.interface.interface_ipc): `ipc\_atomic\_flag`, + `ipc\_atomic` and `ipc\_atomic\_ref`. Users are recommended + to port their code using non-IPC types for inter-process communication + to the new types. The new types provide the same set of operations + as their non-IPC counterparts, with the following differences: + + - Most operations have an added precondition that `is\_lock\_free` returns `true` for the given atomic object. + The library will issue a compile time error if this precondition + is known to be not satisfied at compile time. + - All provided operations are address-free, meaning that the + atomic object (in case of `ipc\_atomic\_ref` + - the referenced object) may be located in process-shared memory + or mapped into the same process at multiple different addresses. + - The new `has\_native\_wait\_notify` + operation and `always\_has\_native\_wait\_notify` + constant indicate support for native inter-process waiting + and notifying operations. When that support is not present, + the operations are implemented with a busy loop, which is less + efficient, but still is address-free. A separate set of capability + macros is also provided to indicate this support. + + Added new `atomic\_unsigned\_lock\_free` + and `atomic\_signed\_lock\_free` + types introduced in C++20. The types indicate the atomic object type + for an unsigned or signed integer, respectively, that is lock-free + and preferably has native support for waiting and notifying operations. + + Added new gcc assembler backends for ARMv8-A (for both AArch32 and + AArch64). The new backends are used to implement operations not supported + by compiler intrinsics (including 128-bit operations on AArch64) + and can also be used when compiler intrinsics are not available. + Both little and big endian targets are supported. AArch64 backend + supports extensions defined in ARMv8.1 and ARMv8.3. + + Added support for big endian targets in the legacy ARM backend based + on gcc assembler blocks (this backend is used on ARMv7 and older + targets). Previously, the backend assumed little endian memory layout, + which is significant for 64-bit operations. + + Improved performance of seq\_cst stores and thread fences on x86 by + using `lock`-prefixed + instructions instead of `mfence`. + This means that the operations no longer affect non-temporal stores, + which was also not guaranteed before. Use specialized instructions + and intrinsics to order non-temporal memory accesses. + + Fixed capability macros for 80-bit `long + double` on x86 targets not + indicating lock-free operations even if 128-bit atomic operations + were available. + + Fixed compilation of gcc asm blocks on Alpha targets. + + In the gcc `\_\_sync\*` intrinsics backend, fixed that store + and load operations of large objects (larger than a pointer size) + could be non-atomic. The implementation currently assumes that small + objects can be stored with a single instruction atomically on all + modern architectures. +* [Beast](/libs/beast/): + + + This update brings bug fixes and support for the following changes + changes in Boost.Asio: + + Beast supports `BOOST\_ASIO\_NO\_DEPRECATED`. + Define this to help identify areas of your Beast and Asio code which + use deprecated Asio interfaces. + + Beast also supports `BOOST\_ASIO\_NO\_TS\_EXECUTORS`. + Define this to identify uses of executors from the now potentially + outdated [Networking + TS](https://cplusplus.github.io/networking-ts/draft.pdf) + + Asio will use the [Standard + Executors](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0443r11.html) model by default. You can prevent this behaviour + by defining `BOOST\_ASIO\_USE\_TS\_EXECUTOR\_AS\_DEFAULT` + in which the Networking TS model will be used by default. Setting + this flag does not prevent a program from using executors from the + Standard Executors model explicitly. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Bimap](/libs/bimap/): + + + Correct allocator usage (fixes C++20 compilation). (Glen Fernandes) +* [Config](/libs/config/): + + + Implement `BOOST\_NO\_CXX11\_OVERRIDE` + and `BOOST\_OVERRIDE`. + (Glen Fernandes) +* [Core](/libs/core/): + + + Implemented the allocator access utilities which provide a replacement + for `allocator\_traits` + with individual traits and functions for each facility. They support + the C++11 allocator model when possible and provide a fallback for + C++98 compatibility. These are now used in Circular\_Buffer, Wave, + Lockfree, Heap, Smart\_Ptr, Dynamic\_Bitset, Format, Bimap and more. + (Glen Fernandes) +* [DLL](/libs/dll/): + + + Multiple fixes for the `library\_info` + work on empty shared objects. + + Compilation fixes for C++98 and C++11 modes ([#28](https://github.com/boostorg/dll/issues/28)). + + Fixes for `smart\_library` + manglings (thanks to XiaLiChao82 [#37](https://github.com/boostorg/dll/issues/37)). +* [Endian](/libs/endian/): + + + Enabled scoped enumeration types in `endian\_reverse`. + + Enabled `bool`, `enum`, `float`, + `double` in `endian\_reverse\_inplace`. + + Added an overload of `endian\_reverse\_inplace` + for arrays. +* [Filesystem](/libs/filesystem/): + + + Removed compile-time checks for support for symlinks and hardlink + on Windows. Instead, a runtime check is used. ([PR#142](https://github.com/boostorg/filesystem/pull/142)) + + Fixed handling of reparse points in `canonical` + and `read\_symlink` + on Windows. This also affects other algorithms that involve `canonical` and `read\_symlink` + in their implementation. ([PR#100](https://github.com/boostorg/filesystem/pull/100), [#85](https://github.com/boostorg/filesystem/issues/85), [#99](https://github.com/boostorg/filesystem/issues/99), + [#123](https://github.com/boostorg/filesystem/issues/123), [#125](https://github.com/boostorg/filesystem/issues/125)) + + Fixed that `read\_symlink` + on Windows could potentially fail or cause failures elsewhere with + a sharing violation error, if the same symlink was opened concurrently. + ([#138](https://github.com/boostorg/filesystem/issues/138)) + + Fixed that `is\_symlink(directory\_entry)` would always return `false`, even if the directory entry + actually referred to a symlink. ([PR#148](https://github.com/boostorg/filesystem/pull/148)) + + Added missing status inspection operation overloads for `directory\_entry` and `error\_code` (e.g. `is\_directory(directory\_entry, + error\_code&)`). + Removed incorrect `noexcept` + specifications for the overloads not taking the `error\_code` + arguments. + + `copy\_file` implementation + has been updated to perform checks on the source and target files, + as required by C++20 ([fs.op.copy.file]/4.1). In particular, the + operation will fail if the source or target file is not a regular + file or the source and target paths identify the same file. + + `copy\_file` on POSIX + systems will now also copy the source file permissions to the target + file, if the target file is overwritten. + + **New:** Added `copy\_file` + implementations based on `sendfile` + and `copy\_file\_range` + system calls on Linux, which may improve file copying performance, + especially on network filesystems. + + **Deprecated:** The `copy\_option` + enumeration that is used with the `copy\_file` + operation is deprecated. As a replacement, the new enum `copy\_options` (note the trailing + 's') has been added. The new enum contains values similar to the + `copy\_options` enum + from C++20. The old enum values are mapped onto the new enum. The + old enum will be removed in a future release. + + **New:** Added `copy\_options::skip\_existing` + option, which allows `copy\_file` + operation to succeed without overwriting the target file, if it exists. + + **New:** Added `copy\_options::update\_existing` + option, which allows `copy\_file` + operation to conditionally overwrite the target file, if it exists, + if its last write time is older than that of the replacement file. + + **New:** `copy\_file` + now returns `bool`, which + indicates whether the file was copied. + + **New, breaking change:** `copy` operation has been extended + and reworked to implement behavior specified in C++20 [fs.op.copy]. + This includes support for `copy\_options::recursive`, + `copy\_options::copy\_symlinks`, `copy\_options::skip\_symlinks`, + `copy\_options::directories\_only`, `copy\_options::create\_symlinks` and `copy\_options::create\_hard\_links` options. The + operation performs additional checks based on the specified options. + Applying `copy` to + a directory with default `copy\_options` + will now also copy files residing in that directory (but not nested + directories or files in those directories). + + **New:** Added `create\_directory` + overload taking two paths. The second path is a path to an existing + directory, which is used as a source of permission attributes to + use in the directory to create. + + **Deprecated:** `copy\_directory` + operation has been deprecated in favor of the new `create\_directory` + overload. Note that the two operations have reversed order of the + path arguments. + + `equivalent` on POSIX + systems now returns the actual error code from the OS if one of the + paths does not resolve to a file. Previously the function would return + an error code of 1. ([#141](https://github.com/boostorg/filesystem/issues/141)) + + `equivalent` no longer + considers file size and last modification time in order to test whether + the two paths refer to the same file. These checks could result in + a false negative if the file was modified during the `equivalent` call. + + **New:** Added `absolute` + overloads taking `error\_code` + argument. + + Operations that have `current\_path()` as the default value of their arguments + and also have an `error\_code` + argument will use the `current\_path(error\_code& ec)` overload to obtain the current path, + so that its failure is reported via the `error\_code` + argument instead of an exception. + + `space` now initializes + the `space\_info` structure + members to -1 values on error, as required by C++20 ([fs.op.space]/1). + + `space` on Windows + now accepts paths referring to arbitrary files, not only directories. + This is similar to POSIX systems and corresponds to the operation + description in C++20. ([#73](https://github.com/boostorg/filesystem/issues/73)) + + **New:** Added implementation of `temp\_directory\_path` for Windows + CE. ([PR#25](https://github.com/boostorg/filesystem/pull/25)) + + **New:** Improved compatibility with + [WASI](https://wasi.dev/) platform. ([PR#144](https://github.com/boostorg/filesystem/pull/144)) + + **New:** Improved support for Embarcadero + compilers. ([PR#130](https://github.com/boostorg/filesystem/pull/130)) + + **New:** Added implementations of `unique\_path` operation based on + `getrandom` (Linux), + `arc4random\_buf` (OpenBSD/FreeBSD/CloudABI) + and BCrypt (Windows) system APIs. + + **Deprecated:** Auto-linking against + system libraries on Windows with MSVC-compatible compilers is deprecated + and will be removed in a future release. This affects users linking + against static library of Boost.Filesystem. Users are advised to + update their project build systems to either use a shared library + of Boost.Filesystem, or explicitly specify the dependencies of Boost.Filesystem + in the linker command line. Users of shared library of Boost.Filesystem + are not affected. +* [Flyweight](/libs/flyweight/index.html): + + + Maintenance work. +* [Format](/libs/format/): + + + Correct allocator usage (fixes C++20 compilation). (Glen Fernandes) +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#720](https://github.com/boostorg/geometry/pull/720) Additional R-tree constructors (thanks to + Caian Benedicto). + - Various improvements in buffer, set and relational operations. + + Solved issues + + - [#709](https://github.com/boostorg/geometry/issues/709) memcpy called for object with no trivial copy-assignment. + - [#721](https://github.com/boostorg/geometry/issues/721) Compilation error in bgi::detail::rtree::visitors::insert. + - [#727](https://github.com/boostorg/geometry/issues/727) MSVC warning: conditional expression is constant. + + Bugfixes + + - [PR#700](https://github.com/boostorg/geometry/pull/700) Missing cases for default strategies in distance + algorithm. + - [PR#738](https://github.com/boostorg/geometry/pull/738) Longitudes out of range in direct geodesic + formulas. +* [GIL](/libs/gil/): + + + Added + + - Added new constructor initializing `any\_image` + from r-value reference to any image ([PR#486](https://github.com/boostorg/gil/pull/486)). + - Implemented mechanism to reverse `kernel\_2d` + ([PR#489](https://github.com/boostorg/gil/pull/489)). + + Changed + + - BREAKING: Replace Boost.Variant with Boost.Variant2 ([PR#474](https://github.com/boostorg/gil/pull/474)) + which completes removal on uses of Boost.MPL (missing from + Boost 1.72.0 change added [PR#274](https://github.com/boostorg/gil/pull/274)). + - Use perfect forwarding from apply\_operation to visit ([PR#491](https://github.com/boostorg/gil/pull/491)). + + Removed + + - BREAKING: Removed dependency on Boost.Variant + + Fixed + + - Fixed invalid conversion from RGB8 to CMYK32 due to overflow + ([PR#470](https://github.com/boostorg/gil/pull/470)). + - Fixed `image` + constructor from other image ([PR#477](https://github.com/boostorg/gil/pull/477)). + - Fixed error `plane\_view\_t` + is not a class or namespace name ([PR#481](https://github.com/boostorg/gil/pull/481)). + - Fixed `interleaved\_view` + factory using `point` for dimension ([PR#487](https://github.com/boostorg/gil/pull/487)). + - Fixed documentation replacing uses MPL with MP11 in tutorial + ([PR#494](https://github.com/boostorg/gil/pull/494)). + - Fixed missing header in `numeric/kernel.hpp` + to make it self-contained ([PR#502](https://github.com/boostorg/gil/pull/502)). + + Acknowledgements + + - Samuel Debionne, Pranam Lashkari, Mateusz Loskot, Debabrata + Mandal +* [Heap](/libs/heap/): + + + Correct destruction of top node in `skew\_heap`. + (Glen Fernandes) + + Correct and simplify allocator use. (Glen Fernandes) +* [Integer](/libs/integer/): + + + Fixed compilation of `gcd` + in C++20 mode with clang 10. + + Improved support for Embarcadero compilers. ([PR#21](https://github.com/boostorg/integer/pull/21)) +* [Iterator](/libs/iterator/): + + + `boost/function\_output\_iterator.hpp` header is now deprecated. Users + should replace its inclusion with `boost/iterator/function\_output\_iterator.hpp`. + ([PR#51](https://github.com/boostorg/iterator/pull/51)) + + Improved support for Embarcadero compilers. ([PR#55](https://github.com/boostorg/iterator/pull/55)) +* [LexicalCast](/libs/lexical_cast/): + + + Fixed warnings on missing `override` + (thanks to EugeneZelenko [#35](https://github.com/boostorg/lexical_cast/issues/35), [#34](https://github.com/boostorg/lexical_cast/issues/34)). + + Fixes for the the Embarcadero compilers (thanks to Edward Diener). +* [Log](/libs/log/): + + + Bug fixes: + + - The syslog sink backend now verifies the IP version of the + local and target addresses set by user. The addresses must + have the same IP version as was specified in the `ip\_version` named parameter + on the sink backend construction (by default, IPv4 is assumed). + When an address is obtained as a result of host name resolution, + only addresses with matching IP version are considered. ([#119](https://github.com/boostorg/log/issues/119)) + + New Features: + + - Move constructors and assignment operators of various components + were marked `noexcept`. + - Added a new `range\_manip` + stream manipulator that can be used for outputting elements + of a range, optionally separated by a delimiter. + - Added a new `tuple\_manip` + stream manipulator that can be used for outputting elements + of a tuple or any other heterogeneous sequence, optionally + separated by a delimiter. + - Added a new `optional\_manip` + stream manipulator that can be used for outputting optionally + present values. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Mp11](/libs/mp11/): + + + Improved compilation performance of `mp\_with\_index` for large `N`. + + Added `tuple\_transform` + (contributed by Hans Dembinski.) +* [Multi-index Containers](/libs/multi_index/): + + + Added [node + extraction and insertion](/libs/multi_index/doc/tutorial/basics.html#node_handling) following the analogous interface + of associative containers as introduced in C++17. This feature has + also been extended to non key-based indices, in contrast to C++ standard + library sequence containers, which do not provide such functionality. + + Clarified documentation on read/write key extractors (issue [#32](https://github.com/boostorg/multi_index/issues/32)). + + Maintenance work. +* [Nowide](/libs/nowide/): + + + The library now requires a C++11-compliant compiler and stdlib + + LFS: Add support for files > 2 GB where the underlying system + supports it + + Generic UTF conversion functions are now available in the `boost::nowide::utf namespace` + + Add support for `stat` + with UTF-8 paths +* [Outcome](/libs/outcome/): + + + Announcements: + + - The v2.1 branch is expected to be retired end of 2020, with + the v2.2 branch becoming the default. You can use the future + v2.2 branch now using [`better\_optimisation`](https://github.com/ned14/outcome/tree/better_optimisation). + This branch has a number of major breaking changes to Outcome + v2.1, see the front page for details. + + Enhancements: + + - BREAKING CHANGE `void` + results and outcomes no longer default construct types during + explicit construction. Previously if you explicitly constructed + a `result` + from a non-errored `result`, it default constructed + `T`. This was + found to cause unhelpful surprise, so it has been disabled. + - New macro `OUTCOME\_ENABLE\_LEGACY\_SUPPORT\_FOR`. + The macro `OUTCOME\_ENABLE\_LEGACY\_SUPPORT\_FOR` + can be used to enable aliasing of older naming and features + to newer naming and features when using a newer version of + Outcome. + - Concepts now have snake case style naming instead of camel + case style. When Outcome was first implemented, it was thought + that C++ 20 concepts were going to have camel case style. This + was changed before the C++ 20 release, and Outcome's concepts + have been renamed similarly. This won't break any code in Outcome + v2.1, as compatibility aliases are provided. However code compiled + against Outcome v2.2 will need to be upgraded, unless `OUTCOME\_ENABLE\_LEGACY\_SUPPORT\_FOR` + is set to `210` or + lower. + - Concepts now live in `OUTCOME\_V2\_NAMESPACE::concepts` + namespace. Previously concepts lived in the `convert` + namespace, now they live in their own namespace. + - New concepts `basic\_result` and `basic\_outcome` added. End users were finding + an unhelpful gap in between `is\_basic\_result` and `value\_or\_error` where they wanted a concept + that matched types which were `basic\_result`, + but not exactly one of those. Concepts filling that gap were + added. + - Operation `TRY` + works differently from Outcome v2.2 onwards. This is a severely + code breaking change which change the syntax of how one uses + `OUTCOME\_TRY()`. A regular expression suitable + for upgrading code can be found in the list of changes between + Outcome v2.1 and v2.2. + + Bug fixes: + + - [#224](https://github.com/ned14/outcome/issues/224) + The clang Apple ships in Xcode 11.4 (currently the latest) + has not been patched with the fixes to LLVM clang that fix + `noexcept(std::is\_constructible)` + failing to compile which I originally submitted years ago. + So give up waiting on Apple to fix their clang, add a workaround + to Outcome. + - Spare storage could not be used from within no-value policy + classes. Due to an obvious brain fart when writing the code + at the time, the spare storage APIs had the wrong prototype + which prevented them working from within policy classes. Sorry. +* [PolyCollection](/libs/poly_collection/): + + + Fixed internal ambiguity problem between `boost::type\_erasure::any` + and `boost::any` (issue [#17](https://github.com/boostorg/poly_collection/issues/17)). + + Maintenance work. +* [SmartPtr](/libs/smart_ptr/): + + + Added `owner\_equals` + to `shared\_ptr`, `weak\_ptr`, `local\_shared\_ptr`. + + Added `owner\_hash\_value` + to `shared\_ptr`, `weak\_ptr`. + + Added `owner\_equal\_to`, + `owner\_hash`. + + Added `std::hash` specializations for `shared\_ptr`, `local\_shared\_ptr`. + + Added `boost::hash` support to, and `std::hash`, `std::equal\_to` + specializations for, `weak\_ptr`. +* [Stacktrace](/libs/stacktrace/): + + + Fixed a build error when compiled with `-fno-exceptions` (thanks to Jeremiah + Rodriguez [#91](https://github.com/boostorg/stacktrace/issues/91)). +* [System](/libs/system/): + + + `operator bool()` now returns `failed()` instead of `value() != 0`. +* [Type\_Traits](/libs/type_traits/): + + + Implemented `conjunction`, + `disjunction`, `negation`, `is\_trivially\_copyable`, + `is\_scoped\_enum`, and + `is\_unscoped\_enum`. + (Glen Fernandes) +* [Variant](/libs/variant/): + + + Fixed warnings on missing `override` + (thanks to EugeneZelenko [#78](https://github.com/boostorg/variant/issues/78)). + + Fixes for the the Embarcadero compilers (thanks to Edward Diener + [#79](https://github.com/boostorg/variant/issues/79)). + + Updated header locations to avoid warnings about using deprecated + headers (thanks to Andrey Semashev [#80](https://github.com/boostorg/variant/issues/80)) +* [Variant2](/libs/variant2/): + + + Added support for derived types in `visit`. + + Improved compilation performance for many (hundreds of) alternatives. + + Added support for `visit`. +* [Wave](/libs/wave/): + + + Implement C++20 features for variadics, including `\_\_VA\_OPT\_\_` + ([PR#75](https://github.com/boostorg/wave/pull/75)) + + Implement `\_\_has\_include` + ([PR#102](https://github.com/boostorg/wave/pull/102)) + + Introduce new sample: `check\_macro\_naming`, + useful with Boost itself ([PR#97](https://github.com/boostorg/wave/pull/97)) + + Fix compilation issue caused by `std::allocator` + member removal in C++20 ([PR#72](https://github.com/boostorg/wave/pull/72)) + + Repair Xpressive lexer and `token\_statistics` + sample ([PR#79](https://github.com/boostorg/wave/pull/79)) + + Repair lexertl lexer ([PR#78](https://github.com/boostorg/wave/pull/78)) + + Ensure hooks are run on predefined macros as well ([PR#87](https://github.com/boostorg/wave/pull/87)) + + Various minor bug fixes + + C++98/03 support is now deprecated and will be removed in 1.77 +* [YAP](/libs/yap/): + + + Fixed compilation errors for placeholders; they now work in the general + case, and in particular work with yap::print(). + + constexpr all the YAP. + + Fix printing of correct value category in yap::print(). + + Doc clarification. + +### Updated Tools + + +* [Boostbook](/tools/boostbook/): + + + Change encoding of generated documentation from US-ASCII to UTF-8. + (Glen Fernandes) + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_75_0.html b/users/history/version_1_75_0.html new file mode 100644 index 0000000..713fca4 --- /dev/null +++ b/users/history/version_1_75_0.html @@ -0,0 +1,527 @@ +--- +title: Version 1.75.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.75.0 + +/\*\*/ + + + + + + + +Version 1.75.0 +============== + +Version 1.75.0 +-------------- + + +December 11th, 2020 19:50 GMT + + +[Documentation](/doc/libs/1_75_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_75\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.bz2) | 953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb | +| [boost\_1\_75\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz) | aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a | +| windows | [boost\_1\_75\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.7z) | 3a8b314871646e7404886736273c053278ba71b11347f72d4751411d65d6d1a5 | +| [boost\_1\_75\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.zip) | caf36d7c13b3d8ce62282a64a695113945a13b0f1796a45160726d04295f95ed | + + +### Known Issues + Boost.Operators is currently **incompatible with C++20** + compilers, which in some cases may manifest as an infinite recursion or infinite + loop in runtime when a comparison operator is called. The problem is caused + by the new operator rewriting behavior introduced in C++20. As a workaround, + users are advised to target C++17 or older C++ standard. More details can be + found in [#65](https://github.com/boostorg/utility/issues/65). + + +### New Libraries + + +* [JSON](/libs/json/): JSON parsing, serialization, + and DOM in C++11, from Vinnie Falco and Krystian Stasiowski. + + + Fast compilation requiring only C++11 + + Easy and safe modern API with allocator support + + Compile without Boost, define `BOOST\_JSON\_STANDALONE` + + Optional header-only, without linking to a library +* [LEAF](/libs/leaf/): A lightweight error-handling + library for C++11, from Emil Dotchevski. + + + Small single-header format, no dependencies. + + Designed for maximum efficiency ("happy" path and "sad" + path). + + No dynamic memory allocations, even with heavy payloads. + + O(1) transport of arbitrary error types (independent of call stack + depth). + + Can be used with or without exception handling. +* [PFR](/libs/pfr/): Basic reflection without macro + or boilerplate code for user defined types, from Antony Polukhin. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Enabled support for UNIX domain sockets on Windows. + + Added executor-converting construction and assignment to `ip::basic\_resolver`. + + Added compatibility between polymorphic executors and the (deprecated) + handler invocation hook. + + Added the `experimental::as\_single` + completion token adapter. + + Added support for `MSG\_NOSIGNAL` + on more platforms by using `\_POSIX\_VERSION` + to detect whether it is supported. + + Added the ability to compile using libpthread on Windows. + + Added workarounds for the Intel C++ compiler. + + Added more support for detecting and optimising for handlers that + have no custom executor. + + Reduced lock contention for timer cancellation on Windows. + + Reinstated a previously removed null-pointer check, as it had a measurable + impact on performance. + + Fixed the `executor` + concept to test for a const-qualified `execute()`. + + Fixed `any\_executor` + support for builds without RTTI support. + + Fixed the `thread\_pool` + unit test to work without RTTI support. + + Fixed C++20 coroutines compatibility with clang on Windows. + + Fixed some compatibility issues with Windows Runtime. + + Fixed shadow name warnings caused by addition of `asio::query`. + + Fixed a "logical ‘or’ of equal expressions" warning + on linux. + + Fixed a benign switch fallthrough warning. + + Added missing `push/pop\_options.hpp` + includes. + + Suppressed zero-as-null-pointer-constant warnings. + + Fixed a comma-operator warning. + + Updated the documentation to clarify when the select + reactor is used on Windows. + + Fixed potential ambiguity caused by `any\_executor` + comparisons and conversion. + + Added detection of non-experimental C++20 coroutines on MSVC 19.8. + + Fixed compatibility with uClibc. + + Fixed `strand<>` + adaptation of Networking TS executors when targeting older C++ versions + or less conformant compilers. + + Consult the [Revision + History](/doc/libs/1_75_0/doc/html/boost_asio/history.html) for further details. +* [Atomic](/libs/atomic/): + + + Implemented SSE2 and SSE4.1 versions of address lookup algorithm, + which is used in the internal lock pool implementation. This may + improve performance of waiting and notifying operations in heavily + contended cases. + + Fixed a possible compilation error on AArch64 targets caused by incorrect + instructions generated for bitwise (logical) operations with immediate + constants. ([#41](https://github.com/boostorg/atomic/issues/41)) +* [Beast](/libs/beast/): + + + This update brings bug fixes and support for the `BOOST\_ASIO\_ENBALE\_HANDLER\_TRACKING` + compile flag from Boost.Asio: + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Container](/libs/container/): + + + New `devector` + container. + + Fixed bugs/issues: + + - [#152](https://github.com/boostorg/container/issues/152) Tree-based containers have troubles with move-only + types. + - [#156](https://github.com/boostorg/container/issues/156) Compile error with vector. + - [PR#157](https://github.com/boostorg/container/pull/157) Add missing include. + - [#159](https://github.com/boostorg/container/issues/159): pmr::monotonic\_buffer\_resource crashes on + large single allocations. + - [#160](https://github.com/boostorg/container/issues/160): Usage of uses\_allocator needs a remove\_cvref\_t. + - [#162](https://github.com/boostorg/container/issues/162): small\_vector on MSVC x86 call-by-value crash. + - [#161](https://github.com/boostorg/container/issues/161): polymorphic\_allocator(memory\_resource\*) non-standard + extension causes headache. + - [PR#163](https://github.com/boostorg/container/pull/163): container\_rebind for small\_vector with + options. + - [#165](https://github.com/boostorg/container/issues/165): Link error with shared library and memory\_resource + inline members. + - [PR#166](https://github.com/boostorg/container/pull/166): Fix encoding error in copyright headers. + - [PR#167](https://github.com/boostorg/container/pull/167): error: the address of 'msg' will always + evaluate as 'true' warning with GCC 4.4. + - [#169](https://github.com/boostorg/container/issues/169): flood of warnings building dlmalloc\_ext\_2\_8\_6.c + on clang11. +* [Endian](/libs/endian/): + + + `endian\_arithmetic` + no longer inherits from `endian\_buffer` + + When `BOOST\_ENDIAN\_NO\_CTORS` + is defined, the unaligned `endian\_buffer` + and `endian\_arithmetic` + are C++03 PODs, to enable use of `\_\_attribute\_\_((packed))` +* [Filesystem](/libs/filesystem/): + + + **New:** Added `creation\_time` + operation, which allows to obtain file creation time. (Inspired by + [PR#134](https://github.com/boostorg/filesystem/pull/134)) + + The returned value of `last\_write\_time(p, ec)` operation in case of failure has + been changed to a minimal value representable by `std::time\_t` + instead of -1. + + The returned value of `hard\_link\_count(p, ec)` operation in case of failure has + been changed to `static\_cast(-1)` instead of 0. + + On POSIX systems, `file\_size` + will now indicate error code `errc::function\_not\_supported` + if the path resolves to a non-regular file. Previously, `errc::operation\_not\_permitted` was reported. + + On Linux, many operations now use `statx` + system call internally, when possible, which allows to reduce the + amount of information queried from the filesystem and potentially + improve performance. The `statx` + system call was introduced in Linux kernel 4.11. + + Removed `const`-qualification + from return types of some `path` + methods. This could prevent move construction and move assignment + at the call site in some cases. ([#160](https://github.com/boostorg/filesystem/issues/160)) + + On OpenBSD 4.4 and newer, use `statvfs` + system call to obtain filesystem space information. (Inspired by + [PR#162](https://github.com/boostorg/filesystem/pull/162)) + + On Windows, `space` + now returns with an error if the provided path does not idendify + an existing file. ([#167](https://github.com/boostorg/filesystem/issues/167)) +* [Geometry](/libs/geometry/): + + + WARNING: Following the deprecation notice of C++03 issued with Boost + 1.73, from now on the Boost.Geometry requires a capable C++14 compiler. + + Improvements + + - [PR#726](https://github.com/boostorg/geometry/pull/726) Umbrella strategies for area, envelope, expand + (undocumented for now). + - [PR#733](https://github.com/boostorg/geometry/pull/733) Added example of adaptation of std::array<> + to Point concept (thanks to Ben FrantzDale). + - [PR#745](https://github.com/boostorg/geometry/pull/745) constexpr added in geometries and arithmetic. + - [PR#747](https://github.com/boostorg/geometry/pull/747) Added optional traits::make (undocumented + for now). + - [PR#748](https://github.com/boostorg/geometry/pull/748) Modernized usage of type traits. + - [PR#759](https://github.com/boostorg/geometry/pull/759) MPL\_ASSERT replaced with standard static\_assert. + - [PR#767](https://github.com/boostorg/geometry/pull/767) Modernized usage of tuple. + + Solved issues + + - [#716](https://github.com/boostorg/geometry/issues/716) Dangling proxy references. + + Bugfixes + + - Various fixes in set operations and buffer. +* [GIL](/libs/gil/): + + + BREAKING: In next release, we are going to drop support for GCC 5. + We may also change the required minimum C++ version from C++11 to + C++14. +* [Histogram](/libs/histogram/): + + + This update brings + + - Bug-fixes for corner-cases + - Small documentation improvements + - Fixes for new warnings from latest compilers and when compiling + against the C++20 standard + + See the full [Release + Notes](/libs/histogram/doc/html/histogram/history.html) for a complete list of changes. +* [Interprocess](/libs/interprocess/): + + + Fixed bugs: + + - [#127](https://github.com/boostorg/interprocess/issues/127): static assertion failure with boost interprocess + 1.74 and basic\_managed\_shared\_memory. +* [Intrusive](/libs/intrusive/): + + + Fixed bugs: + + - [PR#48](https://github.com/boostorg/intrusive/pull/48): MSVC "assignment within conditional" + warning fix. + - [PR#49](https://github.com/boostorg/intrusive/pull/49): Fix empty control statement warnings. + - [#52](https://github.com/boostorg/intrusive/issues/52): Invalid casting in BOOST\_INTRUSIVE\_BSR\_INTRINSIC. +* [Log](/libs/log/): + + + Bug fixes: + + - Corrected the file counter that would be used in `text\_file\_backend` when generating + the target file name (based on the pattern set by `set\_target\_file\_name\_pattern` + method) when the log file is rotated. ([#125](https://github.com/boostorg/log/issues/125)) + - Replaced a volatile version counter in `basic\_sink\_frontend` + with an atomic. ([#128](https://github.com/boostorg/log/issues/128)) + - In the `asynchronous\_sink` + frontend, resolved a possible conflict between `flush` and `run` + methods, if `run` + is called from a user's thread instead of the internal dedicated + thread spawned by the frontend. ([#131](https://github.com/boostorg/log/issues/131)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Move](/libs/move/): + + + Fixed bugs: + + - [#30](https://github.com/boostorg/move/issues/30): (void) C-cast is a non-portable way of suppressing + compiler warnings. +* [Mp11](/libs/mp11/): + + + Added `mp\_pairwise\_fold` + (suggested by Barry Revzin) + + Removed `mp\_invoke` + (use `mp\_invoke\_q`) +* [Optional](/libs/optional/): + + + `boost::none` is `constexpr`-declared. + + Fixed [issue + #78](https://github.com/boostorg/optional/issues/78). +* [Outcome](/libs/outcome/): + + + Announcements: + + - After a year and three major Boost releases announcing this + upcoming change, this is the FINAL RELEASE of the v2.1 branch. + From Boost 1.76 onwards, the v2.2 branch becomes the default. + This branch has a number of major breaking changes to Outcome + v2.1, see the documentation for details. + + Enhancements: + + - The ADL discovered event hooks have been replaced with policy-specified + event hooks instead. This is due to brittleness (where hooks + would quietly self-disable if somebody changed something), + compiler bugs (a difference in compiler settings causes the + wrong hooks, or some but not all hooks, to get discovered), + and end user difficulty in using them at all. The policy-specified + event hooks can be told to default to ADL discovered hooks + for backwards compatibility: set `OUTCOME\_ENABLE\_LEGACY\_SUPPORT\_FOR` + to less than `220` + to enable emulation. + - Improve configuring `OUTCOME\_GCC6\_CONCEPT\_BOOL`. + Older GCCs had boolean based concepts syntax, whereas newer + GCCs are standards conforming. However the precise logic of + when to use legacy and conforming syntax was not well understood, + which caused Outcome to fail to compile depending on what options + you pass to GCC. The new logic always uses the legacy syntax + if on GCC 8 or older, otherwise we use conforming syntax if + and only if GCC is in C++ 20 mode or later. This hopefully + will resolve the corner case build failures on GCC. + + Bug fixes: + + - Boost.Outcome should now compile with `BOOST\_NO\_EXCEPTIONS` + defined. Thanks to Emil, maintainer of Boost.Exception, making + a change for me, Boost.Outcome should now compile with C++ + exceptions globally disabled. You won't be able to use `boost::exception\_ptr` as it can't + be included if C++ exceptions are globally disabled. + - [#236](https://github.com/ned14/outcome/issues/236) + In the Coroutine support the `final\_suspend()` was not `noexcept`, + despite being required to be so in the C++ 20 standard. This + has been fixed, but only if your compiler implements `noop\_coroutine`. Additionally, + if `noop\_coroutine` + is available, we use the much more efficient coroutine handle + returning variant of `await\_suspend()` which should significantly + improve codegen and context switching performance. +* [Polygon](/libs/polygon/): + + + C++20 fixes for `event\_comparison\_type`, + `vertex\_equality\_predicate\_type`, + and `voronoi\_predicates`. + (Glen Fernandes) +* [Preprocessor](/libs/preprocessor/): + + + When variadic data is empty in C++20 mode with \_\_VA\_OPT\_\_ support + the variadic size has been corrected to be 0. This also means that + in this C++20 mode it is now valid to convert to and from empty arrays + and lists and variadic data. The end-user can read the "C++20 + Support For Variadic Macros" part of the "variadic macros" + topic for more information about empty variadic data in the library. + + The macro BOOST\_PP\_IS\_STANDARD() has been added for identifying if + the currently used preprocessor is a C++ standard conforming preprocessor. + A number of preprocessors which generally work correctly with the + library but need various internal workarounds, including the currently + default VC++ preprocessor, are not considered C++ standard conforming + preprocessors. However most preprocessors, including among others + gcc, clang, and the new but currently non-default VC++ preprocessor + in VS2019, are C++ standard conforming preprocessors. + + For C++ standard conforming preprocessors a number of the limits + defined in the config/limits.hpp can now be changed to higher amounts + for a TU. The end-user should read the "limitations" topic + to understand how and which limits can be changed. + + For C++ standard conforming preprocessors, in order to allow the + maximum number of FOR and WHILE iterations, the beginning 'r' and + 'd' iteration numbers in the user-defined macros start at 1 and not + 2, as it did in previous releases. This could be a breaking change + if these iteration numbers are used in the user-defined macros ( + they probably would not be ), but the change was necessary to fix + some arcane bugs when dealing with numerical/logical operations with + maximum numbers as well to allow the user-defined macros to be called + the correct possible maximum number of times. For non-C++ conforming + preprocessors, this change was not made because those non-conforming + C++ preprocessors generally have limitations which disallow the maximum + number of looping constructs to be run, and it was felt not to introduce + a possible breaking change to those more fragile preprocessors would + be better. It was also felt that besides fixing some arcane preprocessor + bugs and providing the possible maximum number of user-defined macro + invocations, this change could be made because it has never been + documented what the starting 'r' and 'd' iteration numbers actually + are but only that these numbers are incremented for each iteration. + + The library has been upgraded to assume variadic macro support for + any compiler working with the library. Ostensibly this means that + the library is now a C++11 on up library, yet most of the major compilers, + including gcc, clang, and VC++, also support variadic macros in C++98/C++03 + mode as long as strict compliance to C++98/C++03 is not turned on + when using one of those compilers. +* [Rational](/libs/rational/): + + + Fix Rational operators to not break under new C++20 `operator==` + rewriting rules. (Glen Fernandes) +* [Signals2](/libs/signals2/): + + + Correct C++ allocator model support to fix compilation in C++20 standards + mode. (Glen Fernandes) +* [System](/libs/system/): + + + The platform-specific headers `windows\_error.hpp`, + `linux\_error.hpp`, and `cygwin\_error.hpp` + emit deprecation messages and are slated for removal. + + The old names for `generic\_category()` and `system\_category()` emit deprecation messages and are + slated for removal. + + `error\_condition::failed` is deprecated and is slated + for removal. `operator bool()` + for `error\_condition` + has been reverted to its old meaning of `value() != 0`. This is done for compatibility with + `std::error\_condition` as the next release + is expected to improve interoperability with `` + even further. *Note that this does not + affect* `error\_code::failed`, + which is still alive and well. + + The overload of `error\_condition::message` + that takes a buffer is deprecated and is slated for removal, for + the same reasons. *Note that this does + not affect* `error\_code::message`. +* [uBLAS](/libs/numeric/ublas/): + + + Correct C++ allocator model support to fix compilation in C++20 standards + mode. (Glen Fernandes and Conrad Poelman) +* [VMD](/libs/vmd/): + + + The VMD number parsing has been upgraded to support the ability for + the end-user to change the number limits in the Preprocessor library. + + The macro BOOST\_VMD\_IS\_GENERAL\_IDENTIFIER has been added to support + the parsing of input that represents a preprocessor token which matches + the VMD identifier syntax, without having to register the identifier + as a specific identifier. +* [Wave](/libs/wave/): + + + Added new C++20 tokens, including the spaceship operator <=> + + Fixed bugs: + + - [#94](https://github.com/boostorg/wave/issues/94): fix incorrect behavior of \_\_LINE\_\_ and \_\_FILE\_\_ + under rescanning + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0, + 9.0.0, 10.0.0, 11.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0, 11.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_76_0.html b/users/history/version_1_76_0.html new file mode 100644 index 0000000..331ca97 --- /dev/null +++ b/users/history/version_1_76_0.html @@ -0,0 +1,539 @@ +--- +title: Version 1.76.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.76.0 + +/\*\*/ + + + + + + + +Version 1.76.0 +============== + +Version 1.76.0 +-------------- + + +April 16th, 2021 21:05 GMT + + +[Documentation](/doc/libs/1_76_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_76\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2) | f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41 | +| [boost\_1\_76\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.gz) | 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca | +| windows | [boost\_1\_76\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.7z) | 88782714f8701b6965f3fce087a66a1262601dd5ccd5b2e5305021beb53042a1 | +| [boost\_1\_76\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.zip) | 0fd43bb53580ca54afc7221683dfe8c6e3855b351cd6dce53b1a24a7d7fbeedd | + + +### New Libraries + + +* No new libraries + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added `ip::scope\_id\_type` type alias. + + Added `ip::port\_type` type alias. + + Added `std::hash` specialisations for IP addresses. + + Added `std::hash` specialisations for `ip::basic\_endpoint<>`. + + Refactored SFINAE usage to improve compile times. + + Added friendship support to customisation points, and made most customisations + private. + + Changed `any\_io\_executor` + to a "strong typedef"-style class. + + Fixed `experimental::as\_single` + to work with handler hook deprecation. + + Ensured pthread condition variable attributes are cleaned up on all + platforms. + + Clarified thread safety notes on sockets and descriptors. + + Ensured `errno` is + not overwritten if `socket()` fails on macOS/FreeBSD. + + Fixed work tracking for `io\_context` + and `thread\_pool` executors + when move-assigned. + + Ensured internal `call\_stack` + objects are accessed only from implementation files. + + Fixed I/O object move-assignment to ensure the executor is left in + a valid state. + + Fixed detection of compiler support for defaulted template argument + on functions with MSVC. + + Prevented the `blocking.always` + property from being used with `strand<>`, as it did not produce the + correct semantics. + + Removed deprecated file asio/impl/src.cpp. +* [Atomic](/libs/atomic/): + + + Fixed compilation with MSVC for ARM. ([PR#49](https://github.com/boostorg/atomic/pull/49)) +* [Beast](/libs/beast/): + + + This update brings minor bug fixes and revamped CI reporting. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Bind](/libs/bind/): + + + Add support for using the standard C++11 placeholders with `boost::bind`. + + Update `boost::apply` to use variadic templates + and perfect forwarding. +* [Container](/libs/continer/): + + + Added [[no-discard]] attribute in all containers to catch bugs related + to unused return values. + + Replaced default standard exception classes with Boost.Container + own classes, reducing considerably the included files overhead. Example: + in MSVC 19 `boost/container/vector.hpp` + preprocessed file size reduces from 1,5MB to 930KB. If you still + want to use standard exception classes, you can define `BOOST\_CONTAINER\_USE\_STD\_EXCEPTIONS` + before using any Boost.Container class. + + Fixed bugs/issues: + + - [GitHub + #102: *"flat\_map::insert ambiguous with initializer + list & pairs that need to convert"*](https://github.com/boostorg/container/issues/102). + - [GitHub + #139: *"flat\_map merge and iterators"*](https://github.com/boostorg/container/issues/139). + - [GitHub + #141: *"small\_vector does not propagate no throw + properties of move operation of contained type"*](https://github.com/boostorg/container/issues/141). + - [GitHub + #164: *"Compile error when using `pmr::map` with a `std::pair`; works when using a + `std::tuple`"*](https://github.com/boostorg/container/issues/164). + - [GitHub + #171: *"deque::clear() uses undefined behaviour"*](https://github.com/boostorg/container/issues/171). +* [Core](/libs/core/): + + + Add implicit conversion between compatible reference wrappers. + + Add `boost/core/cmath.hpp`, a portable implementation + of the floating point classification functions from ``. + + Add `boost/core/bit.hpp`, a portable implementation + of the C++20 standard header ``. + + Fix `BOOST\_TEST\_EQ`, + `BOOST\_TEST\_NE` for + character types under C++20. + + Revise allocator access utilities (now support VS2013, and no workarounds + use `allocator\_traits`.) +* [DLL](/libs/dll/): + + + **BREAKING CHANGE**: `boost::dll::import` + was renamed to `boost::dll::import\_symbol` + to avoid collision with C++20 `import` + keyword. + + Updated docs, including FAQ section. +* [Filesystem](/libs/filesystem/): + + + Updated compatibility with WASI platform. ([PR#169](https://github.com/boostorg/filesystem/pull/169)) + + Fixed an exception being thrown by `path::remove\_filename` + if the path is "////". ([#176](https://github.com/boostorg/filesystem/issues/176)) + + Fixed `create\_directories` + disregarding errors from file status query operations issued internally. + This could result in incorrect error codes returned by `create\_directories`. ([#182](https://github.com/boostorg/filesystem/issues/182)) +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#670](https://github.com/boostorg/geometry/pull/670) New IOs to\_wkt() and from\_wkt() (thanks to + Baidyanath Kundu). + - [PR#756](https://github.com/boostorg/geometry/pull/756) Non cartesian and robust convex hulls. + - [PR#768](https://github.com/boostorg/geometry/pull/768) Umbrella strategies for relops, setops, index, + buffer and more (undocumented for now). + - [PR#797](https://github.com/boostorg/geometry/pull/797) New azimuth() algorithm. + - [PR#801](https://github.com/boostorg/geometry/pull/801) Improved accuracy in geographic area computations. + - [PR#820](https://github.com/boostorg/geometry/pull/820) Parameter scale added to svg\_mapper. + + Bugfixes + + - [PR#808](https://github.com/boostorg/geometry/pull/808) Fixed compilation error with rtree serialization + enabled (thanks to Tristan Carel). + - [PR#815](https://github.com/boostorg/geometry/pull/815) Fixed issue in buffer(). + - Various fixes in set operations and buffer. + + Breaking changes + + - Removed strategy convex\_hull::graham\_andrew. +* [GIL](/libs/gil/): + + + BREAKING: In next release, we are going to drop support for GCC 5. + We will also change the required minimum C++ version from C++11 to + C++14. +* [Histogram](/libs/histogram/): + + + This release contains critical fixes, please check that your results + are not affected. + + See [Release + Notes](/libs/histogram/doc/html/histogram/history.html) for details. +* [Intrusive](/libs/intrusive/): + + + Reduced compile-time dependencies: + + - `linear\_slist\_algorithms` + use a simple node\_ptr instead of std::pair on return. + - `list`/`slist` use `operator + <`/`operator + ==` instead of `std::equal\_to`/`std::less`. + + Fixed [GitHub + #54: *set.rbegin() looks like O(log(N))*](https://github.com/boostorg/intrusive/issues/54) +* [Interprocess](/libs/interprocess/): + + + Added `wchar\_t` API support + for named resources in operating systems that offer native wide character + API (e.g. Windows). The following classes were updated with `wchar\_t` name support: + + - `file\_mapping` + - `managed\_mapped\_file` + - `managed\_shared\_memory` + - `managed\_windows\_shared\_memory` + - `shared\_memory\_object` + - `windows\_shared\_memory\_object` + - `file\_lock` + - `named\_condition` + - `named\_condition\_any` + - `named\_mutex` + - `named\_recursive\_mutex` + - `named\_semaphore` + - `named\_sharable\_mutex` + - `named\_upgradable\_mutex` + - `message\_queue` + + Added `BOOST\_INTERPROCESS\_FORCE\_NATIVE\_EMULATION` + macro option to disable the use of generic emulation code for process + shared synchronization primitives instead of native POSIX or Winapi + functions. + + Fixed bugs: + + - [GitHub + #76 (*"Cygwin compilation errors"*)](https://github.com/boostorg/interprocess/issues/76). + - [GitHub + #83 (*"Add BOOST\_INTERPROCESS\_FORCE\_NATIVE\_EMULATION + option"*)](https://github.com/boostorg/interprocess/pull/83). + - [GitHub + #92 (*"bufferstream: Correct MSVC compilation + warning"*)](https://github.com/boostorg/interprocess/pull/92). + - [GitHub + #106 (*"Use fallocate on truncate\_file"*)](https://github.com/boostorg/interprocess/pull/106). + - [GitHub + #120 (*"segment\_manager customization"*)](https://github.com/boostorg/interprocess/issues/120). + - [GitHub + #122 (*"Mark constructors/assignment/swap noexcept + where possible"*)](https://github.com/boostorg/interprocess/issues/122). + - [GitHub + #126 (*"\_ReadWriteBarrier is deprecated warning + when compiling with clang-cl.exe"*)](https://github.com/boostorg/interprocess/issues/126). +* [JSON](/libs/json/): + + + [Security + Report](https://cppalliance.org/pdf/C%20Plus%20Plus%20Alliance%20-%20Boost%20JSON%20Security%20Assessment%202020%20-%20Assessment%20Report%20-%2020210317.pdf) from Bishop Fox. + + ([#481](https://github.com/boostorg/json/issues/481)) Refactored `value\_from` + implementation; user customizations are now always preferred over + library-provided overloads. + + ([#484](https://github.com/boostorg/json/issues/484)) Fix imprecise parsing for some floating point numbers. + + ([#485](https://github.com/boostorg/json/issues/485)) Fix link errors in standalone mode, when used alongside + Boost. + + ([#497](https://github.com/boostorg/json/issues/497)) Fix Boost.Build builds on GCC 4.8. +* [LexicalCast](/libs/lexical_cast/): + + + Dropped dependency on Boost.Math (thanks to Peter Dimov [#37](https://github.com/boostorg/lexical_cast/issues/37), + [#39](https://github.com/boostorg/lexical_cast/issues/39)). + + Fixes for the CI and coverage (thanks to Sam Darwin from "The + C++ Alliance" [#38](https://github.com/boostorg/lexical_cast/issues/38), [#42](https://github.com/boostorg/lexical_cast/issues/42)). +* [Log](/libs/log/): + + + Bug fixes: + + - Corrected a formal race condition in the thread-safe log record + queue implementation used in the `unbounded\_fifo\_queue` + policy of the `asynchronous\_sink` + frontend. The race could be detected by TSAN, but it was not + a real problem on most current CPU architectures and compilers. + ([#139](https://github.com/boostorg/log/issues/139)) + - When copying a logger with a channel attribute (e.g. `channel\_logger`), the channel + attribute is now deep-copied from the original logger. This + means that modifying the channel in the new logger will no + longer affect the original logger. + - Replaced the use of `std::allocator` in template parameters + with a new tag type `boost::log::use\_std\_allocator` + to silence libc++ warnings about the former being deprecated + in C++17 and later. The tag indicates that the instantiated + template should be using a specialization of `std::allocator` internally to allocate + dynamic memory, so the change has no functional effect. ([#141](https://github.com/boostorg/log/issues/141)) + - Boost.Log no longer defines `\_\_MSVCRT\_VERSION\_\_` + macro on MinGW and MinGW-w64. Defining this macro caused incompatibility + with UCRT, which is available as an option in recent MinGW-w64. + ([PR#149](https://github.com/boostorg/log/pull/149)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + **Breaking Change:** C++03 support is + now removed, a C++11 or later conformant compiler is now required + to use this library. + + Added Z-test. + + Added execution policy support to univariate and bivariate statistics: + enables parallel execution (requires C++17 and ``). + + Big update/improvement on CI testing. + + Bivariate statistics now have integer support. + + T-Test now has integer support. + + Linear regression now has integer support. + + Correct PDF of the beta distribution at the endpoints. + + Correct use of Stirling's approximation in certain multiprecision + cases, fixes [#396](https://github.com/boostorg/math/issues/396). + + Eliminate -Wimplicit-int-float-conversion on clang. + + Fix some constexpr issues in quaternion/octonion. + + Minor performance fix to tanh\_sinh integration. + + Update hypergeometric functions internal scaling to allow for 64-bit + (long long) exponents with multiprecision types. +* [Move](/libs/move/): + + + [Git Issue + #35: *"New nothrow move traits are incomplete"*](https://github.com/boostorg/move/issues/35). +* [Multiprecision](/libs/multiprecision/): + + + **BREAKING CHANGE**: Massive refactoring + and code simplification makes C++11 an absolute requirement. + + Use BOOST\_TRY/CATCH in headers so code can be used in exception-free + environments. + + Correct corner case in pow, fixes [#277](https://github.com/boostorg/multiprecision/issues/277). + + Correct exception type thrown to match docs in lsb/msb: fixes [#257](https://github.com/boostorg/multiprecision/issues/257). + + Allow moves and operators between related but different types (ie + types with the same allocator), fixes [#278](https://github.com/boostorg/multiprecision/issues/278). +* [Nowide](/libs/nowide/): + + + Fix discarding of characters for text file streams when seek or sync + functions are used and newlines were converted (e.g. on Windows) + + Fix potential use-after-free bug when reusing (via `open`) a file stream that has been + closed + + Fix potential invalid memory access when using a file stream that + has been moved or swapped to where the source had a put-back character + or was set to unbuffered mode + + Fix compatibility with ucrt runtime by not defining `\_\_MSVCRT\_VERSION\_\_` + + Known issues: Read performance for text files is degraded. Binary + files and writing is unaffected. +* [Optional](/libs/optional/): + + + Fixed MSVC warning C4702. +* [Outcome](/libs/outcome/): + + + Announcements: + + - BREAKING CHANGE: After a year and three major Boost releases + announcing this upcoming change, this is the FIRST RELEASE + of the v2.2 branch. This branch has a number of major breaking + changes to the Outcome v2.1 which shipped in Boost 1.75 and + earlier, see the documentation for details. + + Enhancements: + + - VS2019.8 changed how to enable Coroutines, which caused Outcome + to not compile on that compiler. + - If on C++ 20, we now use C++ 20 `[[likely]]` + instead of compiler-specific markup to indicate when TRY has + likely success or failure. + - BREAKING CHANGE: Previously the value of `spare\_storage(const + basic\_result|basic\_outcome \*) + noexcept` was not propagated + over `BOOST\_OUTCOME\_TRY`, + which causes things like stack backtraces captured at the point + of construction of an errored result to get dropped at every + `TRY` point. + This has been fixed by adding an optional `spare\_storage` + to `success\_type` and `failure\_type`, as well as to `auto success(T + &&, ...)` + and `auto failure(T + &&, ...)`. + + Bug fixes: + + - Boost.Outcome should now compile with `BOOST\_NO\_EXCEPTIONS` + defined. Thanks to Emil, maintainer of Boost.Exception, making + a change for me, Boost.Outcome should now compile with C++ + exceptions globally disabled. You won't be able to use `boost::exception\_ptr` as it can't + be included if C++ exceptions are globally disabled. + - BREAKING CHANGE [#244](https://github.com/ned14/outcome/issues/244) + It came as a shock to learn that `BOOST\_OUTCOME\_TRY` + had been broken since the inception of this library for certain + corner case code, which required a breaking change in how TRY + works. See [the + changelog in the documentation for more detail](https://boostorg.github.io/outcome/changelog.html). +* [Parameter](/libs/parameter/): + + + Added a workaround for MSVC 2015 code miscompilation when an rvalue + was used as a default value of a named parameter of a function. ([PR#109](https://github.com/boostorg/parameter/pull/109), + [#132](https://github.com/boostorg/log/issues/132)) +* [PFR](/libs/pfr/): + + + Fixed reflection of types with missing `const` + in SFINAE expressions in template constructor. Now reflection of + aggregates with `std::optional>` fields works on any + Standard Library implementation, even if LWG3050 is not fixed. + + Comparison functions are now `constexpr` + [#52](https://github.com/boostorg/pfr/issues/52) + + Fixed numerous typos in docs (thanks to Phil Miller [#63](https://github.com/boostorg/pfr/issues/63)) +* [PolyCollection](/libs/poly_collection/): + + + Worked around [GCC + bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95888) affecting GCC versions 9.3-10.2 (issue [#20](https://github.com/boostorg/poly_collection/issues/20)). +* [Predef](/libs/predef/): + + + Version 1.13 + + Add `ARCH\_PPC\_64` predef. + + Fix `ARCH\_WORD\_BITS\*` redefinition warnings/errors. + + Add `ARCH\_E2K`, Elbrus + 2000, architecture from Konstantin Ivlev. + + Fix not handling recent C++ version that go above 10.x version. + + Version 1.12 + + Switch to using the endian.h header on OpenBSD. (Brad Smith) + + Fix not handling recent versions of stdcxx that go above version + 9. + + Fix including sub-BSD OS headers directly causing redef warnings. + + Add CI testing of direct inclusion of all headers. + + Add CI testing on FreeBSD for clang and gcc. + + Add `WORD\_BITS` set + of predefs to detect the architecture word size. Initial implementation + inspired by submission from Mikhail Komarov. + + Add CI testing for Cygwin 32 and 64. +* [PropertyTree](/libs/property_tree/): + + + Property Tree has a new maintainer. + + Fix usage of deprecated Boost.Bind features. + + Link to Wikipedia fixed. + + Use BOOST\_OVERRIDE to fix GCC warnings. + + Add extensive CI testing. +* [Regex](/libs/regex/): + + + Regex is now header only except in C++03 mode. + + Support for C++03 is now deprecated. + + The library can now be used "standalone" without the rest + of Boost being present. +* [Stacktrace](/libs/stacktrace/): + + + Better support for pre-C++11 builds on clang [#102](https://github.com/boostorg/stacktrace/issues/102). + + Bigger warning for **do not use boost::stacktrace::stacktrace + in signal handlers** [#71](https://github.com/boostorg/stacktrace/issues/71). +* [TypeTraits](/libs/type_traits/): + + + Fix for Visual Studio managed code projects. +* [Variant2](/libs/variant2/): + + + Improved generated code for the double buffered case. + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release of [B2 + version 4.4.1](/tools/build/doc/html/#_version_4_4_1). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.0, 4.0.1, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0, + 9.0.0, 10.0.0, 11.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0, 11.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0, 11.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + Boost's additional test compilers include: + + + +* Linux: + + + Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1 + + Clang, C++0x: 3.0 + + Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0 + + Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, + 6.0.1, 7.0.0, 8.0.0 + + Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0 + + GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1 + + GCC, C++0x: 4.4.7 + + GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1 + + GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0 + + GCC, C++17: 7.3.0, 8.0.1 + + Intel, C++14: 18.0 +* OS X: + + + Apple Clang: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0 + + Apple Clang, C++17: 9.1.0, 10.0.0 + + Apple Clang, C++1z: 9.0.0 + + Apple Clang, C++2a: 10.0.0 +* Windows: + + + GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4 + + GCC, C++0x: 4.6.4 + + GCC, C++11: 4.7.3, 4.8.1, 4.9.3 + + GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0 + + GCC, C++17: 7.1.0, 7.2.0, 7.3.0 + + Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1 +* FreeBSD: + + + Clang: 4.0.0 + + Clang, C++11: 4.0.0 + + Clang, C++14: 4.0.0 + + Clang, C++1z: 4.0.0 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_77_0.html b/users/history/version_1_77_0.html new file mode 100644 index 0000000..6a91a4d --- /dev/null +++ b/users/history/version_1_77_0.html @@ -0,0 +1,487 @@ +--- +title: Version 1.77.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.77.0 + +/\*\*/ + + + + + + + +Version 1.77.0 +============== + +Version 1.77.0 +-------------- + + +August 11th, 2021 14:25 GMT + + +[Documentation](/doc/libs/1_77_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_77\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2) | fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 | +| [boost\_1\_77\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz) | 5347464af5b14ac54bb945dc68f1dd7c56f0dad7262816b956138fc53bcc0131 | +| windows | [boost\_1\_77\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.7z) | f2dd9722b21450daf5ce8ef82c2d99c7ec304f913ee6c6b7f047d5639503dda1 | +| [boost\_1\_77\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.zip) | d2886ceff60c35fc6dc9120e8faa960c1e9535f2d7ce447469eae9836110ea77 | + + +### New Libraries + + +* [Describe](/libs/describe/): A C++14 reflection + library, from Peter Dimov. Provides macros for describing enumerators and + struct/class members, and primitives for querying this information. +* [Lambda2](/libs/lambda2/): A C++14, dependency-free, + single header lambda library, from Peter Dimov. Allows simple function + objects to be constructed via expressions such as `\_1 ++ 5`, + `\_1 % +2 == 0`, `\_1 +> \_2`, + or `\_1 == +' ' || \_1 == '\t'`. + +### Updated Libraries + + +* [Any](/libs/any/): + + + Added `boost::anys::basic\_any` - a data type with customizable + Small Object Optimization whose instances can hold instances of any + type that satisfies ValueType requirements (many thanks to Ruslan + Arutyunyan @rarutyun). If you are not sure that you really need it, + then use `boost::any` instead. + + Started using GithubActions CI for additional testing +* [Asio](/libs/asio/): + + + Added support for cancellation of individual asynchronous operations. + + Added the `associator` + trait, used to generically forward associators. + + Changed all asynchronous operations implemented in Asio to invoke + their completion handlers as rvalue references. + + Added support for asynchronous operations with multiple completion + signatures. + + Added `operator&&` + and `operator||` + for `awaitable<>`, + to allow coroutines to be trivially awaited in parallel. + + Added the `experimental::as\_tuple` + completion token adapter. + + Added the `experimental::append` + completion token adapter. + + Added the `experimental::prepend` + completion token adapter. + + Added the `experimental::deferred` + completion token, whicih allows deferred execution of asynchronous + operations. + + Added the `experimental::parallel\_group` + class and `experimental::make\_parallel\_group` + function. + + Added `experimental::promise`, + which allows eager execution and synchronisation of asynchronous + operations. + + Added the `experimental::coro` + class template, a C++20 coroutine primitive with the ability to combine + both asynchronous waiting (`co\_await`) + and yielding (`co\_yield`). + + Added move assignment to `ssl::stream<>`. + + Changed `co\_spawn` + to `dispatch` the coroutine's + initial step to the executor. + + Enabled additional optimisations for `any\_executor` + and `any\_io\_executor` + when used with asynchronous operations. + + Added the `nodiscard` + attribute to `awaitable<>`. + + Increased the number of cached slots in the default recycling allocator. + + Changed the default allocator behaviour to respect alignment requirements, + to support over-aligned types. + + Ensured the result strings are always initialised in reverse name + resolution. + + Fixed recursive template instantiation issues in `use\_awaitable\_t::executor\_with\_default`. + + Fixed the `any\_io\_executor` + equality operators to correctly return a result based on the target + executor. + + Fixed `strand<>` + to avoid using a potentially moved-from executor. + + Ensured gcc tests are not used for clang + when detecting compiler features. + + Disabled coroutines support for the clang shipped + with MSVC. + + Fixed compatibility with recent LibreSSL when `OPENSSL\_NO\_SSL\_INTERN` + is defined. + + Fixed `posix::basic\_stream\_descriptor` move operations + to work with non-defaulted executors. + + Consult the [Revision + History](/doc/libs/1_77_0/doc/html/boost_asio/history.html) for further details. +* [Atomic](/libs/atomic/): + + + Added `make\_atomic\_ref` + and `make\_ipc\_atomic\_ref` + factory functions for constructing atomic reference objects. + + Added C++17 template argument deduction guides for `atomic\_ref` and `ipc\_atomic\_ref` + to allow omitting template arguments when they can be deduced from + constructor arguments. +* [Beast](/libs/beast/): + + + This maintenance update brings minor bug fixes and updated CI reporting. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Conversion](/libs/conversion/): + + + `boost::implicit\_cast` is now `constexpr` ([#25](https://github.com/boostorg/conversion/issues/25)). + + Fixed broken links ([PR#23](https://github.com/boostorg/conversion/pull/23)). + + Started using GithubActions CI for additional testing +* [Core](/libs/core/): + + + `boost/core/uncaught\_exceptions.hpp` has been modified for compatibility + with Mac OS 10.4 and older. ([PR#92](https://github.com/boostorg/core/pull/92)) +* [DLL](/libs/dll/): + + + More runtime checks for malformed ELFs in `boost::dll::library\_info` + + In `boost::dll::library\_info` use info from `.dynsym` + ELF section if `.symtab` + is empty or missing + + List protected ELF symbols in `boost::dll::library\_info` + as they are available for import ([#50](https://github.com/boostorg/dll/issues/50)) + + Remove unneeded convert from `wchar\_t` + to char on POSIX environment, thanks to Vladislav Shchapov ([PR#49](https://github.com/boostorg/dll/pull/49)) + + Started using GithubAction CI for additional testing +* [Filesystem](/libs/filesystem/): + + + **Introducing Boost.Filesystem v4.** + This new version of the library removes all deprecated features of + v3 and also makes a number of breaking API changes intended to make + Boost.Filesystem more compatible with std::filesystem introduced + in C++17. The differences are described in the release notes and + documentation using **v3** and **v4** tags and are also summarised in a separate + section. Users can select Boost.Filesystem version by defining `BOOST\_FILESYSTEM\_VERSION` macro + to either 3 or 4 when compiling their code. There is no need to separately + compile Boost.Filesystem for each library version - a single binary + supports both v3 and v4. Users should avoid using both v3 and v4 + in the same application as this can lead to subtle bugs. Currently, + v3 is the default. In a future release v4 will become the default, + and eventually v3 will be removed. v4 is functional, but it is still + a work in progress and there may be breaking API changes in the future. + + **v4:** `path::filename`, + `path::stem` and `path::extension` + no longer consider root name or root directory of the path as a filename + if the path only consists of those components. For example, on Windows + `path("C:").filename()` + used to return "C:" and `path("C:\\").filename()` used to return "\" and + both will return an empty path now. ([#88](https://github.com/boostorg/filesystem/issues/88), [#194](https://github.com/boostorg/filesystem/issues/194)) + + **v4:** `path::stem` + and `path::extension` no longer treat a filename + that starts with a dot and has no other dots as an extension. Filenames + starting with a dot are commonly treated as filenames with an empty + extension. The leading dot is used to indicate a hidden file on most + UNIX-like systems. ([#88](https://github.com/boostorg/filesystem/issues/88)) + + **New:** Improved support for various + path prefixes on Windows. Added support for local device prefix ("\\.\") + and experimental support for NT path prefix ("\??\"). The + prefixes will be included in the root name of a path. Note that using + the prefixes with Boost.Filesystem v3 can lead to surprising results + (e.g. `path("\\\\.\\").stem() + == "\\\\"`). + It is recommended to use the prefixes only with Boost.Filesystem + v4. + + Reworked `path::lexically\_normal` implementation + to eliminate some cases of duplicate dot (".") elements + in the normalized paths. + + **New:** Added runtime detection of + the `statx` and `getrandom` system calls on Linux. + This can be useful if the syscall is present at compile time but + fails with `ENOSYS` + at run time (for example, in Docker containers that restrict the + syscall, even if available on the host). ([#172](https://github.com/boostorg/filesystem/issues/172)) + + **New:** Added support for disabling + usage of various system APIs at library build time. This can be useful + when a certain API is detected as present by the library configuration + scripts but must not be used for some reason (for example, when runtime + detection does not work on the target system). See the description + of configuration macros in the library documentationfor for more + details. + + **New:** Added `copy\_options::synchronize\_data` + and `copy\_options::synchronize` + options for the `copy\_file` + operation. These options allow to synchronize the written data and + attributes with the permanent storage. These options are expensive + in terms of performance, but allow to ensure reliability of the copied + data. Note that `copy\_file` + performed implicit data synchronization on POSIX systems since Boost.Filesystem + 1.74.0. This release adds support for more platforms and disables + data synchronization by default while allowing the caller to explicitly + request it. ([#186](https://github.com/boostorg/filesystem/issues/186)) + + Added handling of `EINTR` + error code on POSIX systems for some system calls issued internally. + In particular, `EINTR` + could have been ignored on `close`, + which on HP-UX would result in a leaked file descriptor. + + In the `copy\_file` + implementations based on Linux `sendfile` + and `copy\_file\_range` + system calls, added handling of error codes indicating that a particular + filesystem does not support the system call and fall back to the + generic `read`/`write` loop. This should fix `copy\_file` failing on [eCryptFS](https://www.ecryptfs.org/) + and possibly other filesystems. ([#184](https://github.com/boostorg/filesystem/issues/184)) + + The `copy\_file\_range` + system call is now used since Linux kernel 4.5, whereas previously + it was only enabled since 5.3. The `copy\_file` + implementation will fall back to `sendfile` + or `read`/`write` loop if `copy\_file\_range` + fails to copy a given file across filesystems. + + The `copy\_file` implementations + based on Linux `sendfile` + and `copy\_file\_range` + system calls will not be used on filesystems that are known to contain + files with generated content. These system calls are incompatible + with such files, and copying them would result in zero-sized files. + The generic `read`/`write` loop will be used instead. + Currently, the blacklisted filesystems are: procfs, sysfs, tracefs + and debugfs. + + In the `copy\_file` + implementation based on `read`/`write` loop, increased the maximum + size of the buffer used for temporary storage and take into account + the target filesystem block size for more optimal performance. + + On Windows CE, calling `current\_path` + to obtain the current path for a process will now fail with an error + instead of returning successfully with a root path. This platform + does not support current directory. Changing the current path was + already failing similarly in previous releases of Boost.Filesystem. + + In `canonical`, fixed + the check for a symlink referencing a directory above root, if an + earlier symlink was resolved to an absolute path with a different + root from the original path. + + In `canonical`, added + a limit for the maximum number of symlinks that can be resolved during + the call. The limit is currently at least 40 symlinks. + + On Windows, `canonical` + and `weakly\_canonical` + will now use `path::preferred\_separator` + for the root directory separator in the resulting paths. This fixes + "file not found" errors caused by Windows API not handling + generic separators in UNC paths and paths that start with the Win32 + filesystem prefix ("\\?\"). ([#87](https://github.com/boostorg/filesystem/issues/87), [#187](https://github.com/boostorg/filesystem/issues/187)) + + **New:** Added `weakly\_canonical` + overloads taking `base` + path as an argument. + + On Windows, `weakly\_canonical` + no longer fails with an error if the input path contains elements + that do not exist in the filesystem but are cancelled by a subsequent + dot-dot ("..") element. For example, `weakly\_canonical("C:\\a\\..")` would previously fail if "C:\a" + directory did not exist. ([#201](https://github.com/boostorg/filesystem/issues/201)) + + In `read\_symlink` on + Windows, corrected reparse point handling. The operation would return + an empty path for some mount points (for example, created by [Box](https://www.box.com/) cloud storage driver) and + directory junction points that had empty print names. The new implementation + now parses substitute name of the reparse point and attempts to reconstruct + a Win32 path from it. ([#187](https://github.com/boostorg/filesystem/issues/187)) + + On Windows, file streams provided in `boost/filesystem/fstream.hpp` + will use wide character paths on libc++ versions 7.0 and higher, + when the standard library supports opening files with wide character + paths. ([#181](https://github.com/boostorg/filesystem/issues/181)) + + On Windows, creating symlinks should no longer require elevated privileges, + if Windows is configured in [Developer + mode](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development). + + With some compilers, global objects used internally in Boost.Filesystem + are now destroyed after user's global destructors are called. This + allows to call Boost.Filesystem methods during the program termination + stage. In particular, this concerns the path locale that is used + for character code conversion and can be installed by calling `path::imbue`. The supported compilers + include MSVC, GCC and Clang, as well as other compilers that support + customizing program initialization order through `#pragma + section` (for MSVC-compatible + compilers) or `\_\_attribute\_\_ + ((init\_priority))` (for GCC-compatible compilers). +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#812](https://github.com/boostorg/geometry/pull/812) Umbrella strategies for distance and comparable\_distance + (undocumented for now). + - [PR#840](https://github.com/boostorg/geometry/pull/840) Umbrella strategies for various algorithms + (undocumented for now). + - [PR#850](https://github.com/boostorg/geometry/pull/850) Introduced DynamicGeometry and GeometryCollection + concepts and support in some algorithms (undocumented for now). + - [PR#855](https://github.com/boostorg/geometry/pull/855) Various improvements related to strategies. + Default strategies are now included with algorithms. + + Solved issues + + - [#865](https://github.com/boostorg/geometry/issues/865) Exception thrown in rtree serialization. + - [#439](https://github.com/boostorg/geometry/issues/439) Invalid box spherical area computation. + - [#838](https://github.com/boostorg/geometry/issues/838) Invalid result of union\_(). + - [#851](https://github.com/boostorg/geometry/issues/851) Invalid geographic disjoint segment/box result. + - [#861](https://github.com/boostorg/geometry/issues/861) Invalid result of intersection(). + + Bugfixes + + - [PR#832](https://github.com/boostorg/geometry/pull/832) Fixed box spherical and geographic area computation. + - [PR#853](https://github.com/boostorg/geometry/pull/853) Fixed geographic disjoint segment/box. + - [PR#866](https://github.com/boostorg/geometry/pull/866) Fixed serialization of rtree containing lesser + number of elements in root node than minimum. + - [PR#886](https://github.com/boostorg/geometry/pull/886) Fixed knn rtree query bug causing it to be + slow for big k. + - Various fixes in set operations and buffer. +* [JSON](/libs/json/): + + + `value\_to` supports + `TupleLike` types. + + `value\_to` and `value\_from` support `std::array` and similar types. + + Implicit conversion operator from `string` + to `std::string\_view`. + + `std::hash` specializations for json types. + + Fixed allocation errors in `object` + and `key\_value\_pair`. + + Fixed crash when constructing `array` + from a pair of iterators that form an empty range. +* [LexicalCast](/libs/lexical_cast/): + + + Fixed assignment to an int of a floating point value that is out + of representable range for int. + + Started using GithubActions CI for additional testing +* [Log](/libs/log/): + + + Fixed compilation for riscv32 target. ([PR#150](https://github.com/boostorg/log/pull/150)) +* [Mp11](/libs/mp11/): + + + Added `mp\_intersperse`, + `mp\_split`, `mp\_join` +* [Multi-index Containers](/libs/multi_index/): + + + Maintenance work. +* [Nowide](/libs/nowide/): + + + Allow for usage of `iostream` + classes before `main` + (best effort, works for most environments) + + Fix initialization of `rdbuf` + in `cin/cout/cerr` for redirected input/output + + Fix corner case in `cin::unget()` after using `putback()` + + Fix possibly delayed `close` + of `filebuf` after + move assignment + + Improve performance of `utf8\_codecvt` +* [PFR](/libs/pfr/): + + + A MurMur Hash based implementation of hash\_combine() is now used + to reduce collisions count and improve quality of `boost::pfr::hash\_value()` + + Visual Studio 2017 now supported in C++14 mode (thanks to Denis Mikhailov + aka @denzor200) + + Issues found by inspect tool were fixed + + Fixed some warnings, including removal of extra semicolons in include/boost/pfr/detail/fields\_count.hpp + ([#72](https://github.com/boostorg/pfr/issues/72)) + + Added a compile time assert for inherited types (thanks to Denis + Mikhailov aka @denzor200) + + Reflection of aggregates with non movable fields is now possible + if guaranteed copy elision is on + + Fixed spelling issues + + Started using GithubActions CI for additional testing +* [PropertyTree](/libs/property_tree/): + + + This is a maintenance release. + + Extend compiler coverage in CI. + + Fix Boost compatibility for CMakeLists.txt. +* [System](/libs/system/): + + + The conversion operator from `error\_category` + to `std::error\_category` has been improved + and no longer requires `` + or ``. + + The comparison operators of `error\_category` + are now inline friends instead of member functions (a side effect + of the previous change.) + + `error\_condition` now + defers calling `generic\_category()` to avoid instantiating the object + until it's actually needed. + + `error\_condition::failed` and `error\_condition::message` + have been undeprecated, and `operator + bool()` + now once again returns `failed()`. + + The system category now doesn't call `generic\_category()`, to avoid instantiating the object. + + The return value of `default\_error\_condition` + changes in some cases into an `error\_condition` + from the generic category, instead of from the system category. This + happens on POSIX when the input `error\_code` + is from the system category and does not correspond to any `errc\_t` value. + + The interoperability of `error\_code` + and `std::error\_code` has been improved substantially. + It is now possible to construct `boost::system::error\_code` + from `std::error\_code`, and it's possible to + pass `boost::system::error\_code` to functions taking + `std::error\_code&`. + + A stream insertion operator for `error\_condition` + has been added. +* [Uuid](/libs/uuid/): + + + Added `to\_chars` for + writing uuid strings without allocating ([PR#116](https://github.com/boostorg/uuid/pull/116)) + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release of [B2 + version 4.6.1](/tools/build/doc/html/#_version_4_6_1). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0 + + Clang, C++11: 3.4, 11.0.0 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0 + + Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0 + + Clang, C++20: 11.0.0, 12.0.0, 13.0.0 + + GCC: 4.6.3, 11 + + GCC, C++11: 4.7.3, 4.8.5, 11 + + GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++20: 8.0.1, 9.1.0, 10, 11 +* OS X: + + + Apple Clang: 11.0.3 + + Apple Clang, C++11: 11.0.3 + + Apple Clang, C++14: 11.0.3 + + Apple Clang, C++17: 11.0.3 + + Apple Clang, C++20: 11.0.3 +* Windows: + + + Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_78_0.html b/users/history/version_1_78_0.html new file mode 100644 index 0000000..75f228a --- /dev/null +++ b/users/history/version_1_78_0.html @@ -0,0 +1,507 @@ +--- +title: Version 1.78.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.78.0 + +/\*\*/ + + + + + + + +Version 1.78.0 +============== + +Version 1.78.0 +-------------- + + +December 8th, 2021 03:45 GMT + + +[Documentation](/doc/libs/1_78_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_78\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2) | 8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc | +| [boost\_1\_78\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz) | 94ced8b72956591c4775ae2207a9763d3600b30d9d7446562c552f0a14a63be7 | +| windows | [boost\_1\_78\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.7z) | 090cefea470bca990fa3f3ed793d865389426915b37a2a3258524a7258f0790c | +| [boost\_1\_78\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip) | f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3 | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. + + + +* Boost.Build silently skips installation of library headers and binaries + in some cases, see [#104](https://github.com/bfgroup/b2/issues/104). + + + Fixed in [PR#113](https://github.com/bfgroup/b2/pull/113), + [patch](/patches/1_78_0/0001-b2-fix-install.patch). +* Boost.Atomic fails to build when targeting UWP, see [#54](https://github.com/boostorg/atomic/issues/54). [Patch](/patches/1_78_0/0002-atomic-fix-uwp-build.patch). + +### New Libraries + + +* No new libraries. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added an io\_uring backend that may optionally be used for all I/O + objects, including sockets, timers, and posix descriptors. + + Added support for files, with new new classes for stream-oriented + and random-access files. This feature currently supports I/O completion + ports on Windows, and io\_uring on Linux. + + Added support for portable pipes on POSIX and Windows (when I/O completion + ports are available). + + Added support for registered buffers, which are optimised when using + the io\_uring backend. + + Added experimental support for channels, that may be used to send + and queue completions as messages. + + Implemented improvements to `experimental::coro`. + + Disabled `aligned\_alloc` + on clang when using an MSVC runtime. + + Changed to use a faster implementation for `ip::network\_v4::canonical()`. + + Added template specialisations for common uses to improve compile + time. + + Reduced the size of `io\_context` + executors to a single pointer. + + Increased the small object buffer size for `execution::any\_executor` + and `any\_io\_executor`. + + Fixed multi-signature handling when variadic templates are disabled. + + Fixed compatibility with new versions of gcc and + clang. + + Fixed compilation on Solaris. + + Fixed defence against Qt-defined macros when building with MSVC. + + Improved error messages emitted by `ssl` + facilities. + + Fixed `bind\_executor` + compatibility with completion tokens. + + Fixed build errors when `BOOST\_ASIO\_USE\_TS\_EXECUTOR\_AS\_DEFAULT` + is defined. + + Added missing move assignment operator to `awaitable<>`. + + Fixed an access violation when using coroutines with MSVC, due to + incorrect alignment of allocated memory. + + Fixed a cleanup issue in `experimental::parallel\_group` + that occured when the execution context was shut down with parallel + operations still pending. + + Added clarifications to the documentation on concurrency hints. + + Added documentation on error handling techniques for C++20 coroutines. + + Fixed various warnings. + + Consult the [Revision + History](/doc/libs/1_78_0/doc/html/boost_asio/history.html) for further details. +* [Assert](/libs/assert/): + + + Added `source\_location::to\_string`. +* [Atomic](/libs/atomic/): + + + Use process-local futex operations on Android for non-IPC waiting + and notifying operations. + + Added support for Linux targets that only define `SYS\_futex\_time64` + syscall, such as riscv32. + + Added a workaround for incorrect result of `std::alignment\_of` + on clang 8 for 64-bit types on 32-bit x86 targets. + + Added a ulock backend for waiting and notifying operations on Darwin + systems since Mac OS 10.12, iOS 10.0, tvOS 10.0 or watchOS 3.0. + + On Windows, corrected discrepancy between *atomic-type*::always\_has\_native\_wait\_notify + and the corresponding capability macros when targeting Windows 8 + or later. The library will now directly use `WaitOnAddress` + and related APIs from public headers and therefore require user to + link with `synchronization.lib` + if the user requires Windows 8 or later by defining `BOOST\_USE\_WINAPI\_VERSION`, `\_WIN32\_WINNT` or similar macros. + The library is linked automatically on compilers that support auto-linking + (e.g. MSVC). + + Added support for types with padding bits, except unions, on compilers + that provide a way to clear the padding bits. This feature is supported + by gcc 11 and MSVC 14.2 (compiler version 19.27) and newer, as well + as other compilers supporting similar intrinsics. On compilers that + don't allow to clear the padding bits, types with padding are still + generally not supported with the exception of 80-bit `long double` + on x86 targets. A new `BOOST\_ATOMIC\_NO\_CLEAR\_PADDING` + capability macro is defined to indicate when clearing the padding + is not supported. + + Initializing constructors of `atomic\_ref` + and `ipc\_atomic\_ref` + no longer use atomic instructions to clear the padding bits in the + referenced object. This reduces the cost of the atomic reference + construction. + + Initializing constructors of `atomic` + and `ipc\_atomic` are + now `constexpr` for enums, + classes and floating point types. For classes and floating point + types, the constructors are `constexpr` + if the compiler supports `constexpr` + `std::bit\_cast`, the type has no padding + bytes and no padding is required to implement native atomic operations. + + In accordance with C++20, default constructors of `atomic` + and `ipc\_atomic` now + perform value initialization of the contained object. For types without + a user-defined default constructor, this means the default-constructed + atomic will be zero-initialized. + + Added a workaround for compilation error on AIX caused by the assembler + tool not supporting numeric labels. ([PR#50](https://github.com/boostorg/atomic/pull/50)) + + Added a workaround for compilation error with Visual Studio 2015 + prior to Update 3. ([#52](https://github.com/boostorg/atomic/issues/52)) + + See [changelog](/doc/html/atomic/changelog.html) + for more details. +* [Beast](/libs/beast/): + + + This maintenance update brings minor bug fixes and updated CI reporting. + + Fixed security vulnerability CVE-2016-9840 in zlib implementation. + + Fixed WebSocket permessage\_deflate implementation. This should result + in an increase in compression performance when using Beast WebSockets. + + Removed the test stream and test framework's dependency on RTTI. + You can now use our handy test stream to check your embedded asynchronous + communications code! + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Core](/libs/core/): + + + Added a generic implementation to ``, + enabled when `BOOST\_CORE\_USE\_GENERIC\_CMATH` + is defined or when the platform does not provide the necessary facilities + in ``. + + Added `boost::core::type\_name`, a utility function that + returns the name of a type as a string. + + Added `boost::span`, a C++11 implementation of + C++20's `std::span` (Glen Fernandes). +* [Describe](/libs/describe/): + + + Added `has\_describe\_enumerators`, + `has\_describe\_bases`, + `has\_describe\_members`. + + Added `enum\_to\_string`, + `enum\_from\_string`. + + Added relational and stream insertion operators. + + Added `descriptor\_by\_name`, + `descriptor\_by\_pointer`. +* [DLL](/libs/dll/): + + + Fixed missing #include, thanks to Denis Blank ([PR#54](https://github.com/boostorg/dll/pull/54)) + + Dropped TravisCI in favor of GithubAction CI +* [Filesystem](/libs/filesystem/): + + + **v4:** `path::filename` + and `path::iterator` no longer return an implicit + trailing dot (".") element if the path ends with a directory + separator. Instead, an empty path is returned, similar to C++17 std::filesystem. + This also affects other methods that are defined in terms of iterators + or filename, such as `path::stem`, + `path::compare` or `lexicographical\_compare`. + For example, `path("a/b/") == path("a/b/.")` + no longer holds true. ([#193](https://github.com/boostorg/filesystem/issues/193)) + + **v4:** `path::lexically\_normal` + no longer produce a trailing dot (".") element and omits + a directory separator after a trailing dot-dot ("..") element + in the normalized paths. + + **v4:** `path` + append operations now consider root name and root directory in the + appended path. If the appended path is absolute, or root name is + present and differs from the source path, the resulting path is equivalent + to the appended path. If root directory is present, the result is + the root directory and relative path rebased on top of the root name + of the source path. Otherwise, the behavior is similar to v3. ([#214](https://github.com/boostorg/filesystem/issues/214)) + + `path::lexically\_normal` now converts directory + separators to preferred separators in the root name of the normalized + paths. + + Optimized overloads of `path::assign`, + `path::append`, `path::concat` + and the corresponding operators to avoid unnecessary path copying + and reduce the amount of code redundancy. + + On POSIX systems, fixed `absolute(p, base)` returning a path with root name + `base.root\_name()` + if `p` starts with + a root directory. In such a case `p` + is already an absolute path and should be returned as is. + + `create\_directories` + no longer reports an error if the input path consists entirely of + dot (".") and dot-dot ("..") elements. The implementation + is no longer using recursion internally and therefore is better protected + from stack overflow on extremely long paths. + + On Windows, `remove` + now supports deleting read-only files. The operation will attempt + to reset the read-only attribute prior to removal. Note that this + introduces a possibility of the read-only attribute being left unset, + if the operation fails and the original value of the attribute fails + to be restored. This also affects `remove\_all`. + ([#216](https://github.com/boostorg/filesystem/issues/216)) + + `remove\_all` now returns + `static\_cast< + uintmax\_t >(-1)` + in case of error, similar to C++17 std::filesystem. + + Fixed a linking error about unresolved references to Boost.ContainerHash + functions when user's code includes `boost/filesystem/path.hpp` + but not `boost/container\_hash/hash.hpp` and the compiler is set to + preserve unused inline functions. ([#215](https://github.com/boostorg/filesystem/issues/215)) + + Added a workaround for MSVC and compatible compilers eliminating + path globals cleanup in release builds. This could lead to a memory + leak if Boost.Filesystem shared library was repeatedly loaded and + unloaded in the process. ([#217](https://github.com/boostorg/filesystem/issues/217)) +* [Geometry](/libs/geometry/): + + + Improvements + + - [PR#894](https://github.com/boostorg/geometry/pull/894) Optimization and refactoring of rtree queries. + - [PR#913](https://github.com/boostorg/geometry/pull/913) DynamicGeometry and GeometryCollection support + in various algorithms (undocumented for now). + - [PR#922](https://github.com/boostorg/geometry/pull/922) DynamicGeometry and GeometryCollection support + in distance (undocumented for now). + + Solved issues + + - [#867](https://github.com/boostorg/geometry/issues/867) Poor performance of rtree query iterator with + nearest predicate for big k. + - [#870](https://github.com/boostorg/geometry/issues/870) Compilation error in boost::geometry::self\_turns. + - [#896](https://github.com/boostorg/geometry/issues/896) Assertion failure in get\_turns with BOOST\_GEOMETRY\_NO\_ROBUSTNESS. + + Bugfixes + + - [PR#906](https://github.com/boostorg/geometry/pull/906) Invalid result of buffer on macos-11 with + clang-12. + - [PR#921](https://github.com/boostorg/geometry/pull/921) Compilation errors with c++20 (various compilers) + and gcc-5. + - Various fixes in set operations and buffer. +* [JSON](/libs/json/): + + + Standalone mode of the library is deprecated. + + Allow external libraries to forward declare `value\_to` + and `value\_from`. + + Fixed signed integer overflow in number parsing. + + Add support for `/Zc:implicitNoexcept-` on MSVC. +* [Lambda2](/libs/lambda2/): + + + Added special cases in `operator<<` and `operator>>` when the first argument is + a stream, to allow `std::cout + << \_1`. + + Added `operator->\*`. + + Added `first`, `second`. +* [Log](/libs/log/): + + + General changes: + + - Updated detection of `std::codecvt` + specializations for `char16\_t` + and `char32\_t` for + compatibility with C++17 and later. ([PR#159](https://github.com/boostorg/log/pull/159)) + - Added support for C++17 `std::byte` + type to receive methods of the inter-process message queue. + - On Windows, when building the library for Windows 8 or later, + the library will use `nt62` + tag in the version namespace to denote the target OS ABI. For + example, the version namespace could be named as `v2\_mt\_nt62`. This name will + be part of all symbols exported by the library. Use the `BOOST\_USE\_WINAPI\_VERSION` + macro consistenly when building Boost and your code to request + the minimum target Windows version. + - Improved performance of SSSE3 and AVX2 implementations of the + `dump` stream + manipulator. + - Added support for CMake build system. Only library build is + supported at this moment, Boost.Build is still used for running + tests. + + Bug fixes: + + - Fixed a race condition on POSIX systems in `reliable\_message\_queue::open\_or\_create` + or the equivalent constructor. Multiple threads or processes + calling `open\_or\_create` + concurrently with sending or receiving messages from the same + queue could end up corrupting the queue contents and potentially + crashing the process. ([#162](https://github.com/boostorg/log/issues/162)) + - Added a workaround for `b2 + install` failing on + Windows because of missing `boost\_log\_setup` + library if `BOOST\_LOG\_WITHOUT\_SETTINGS\_PARSERS` + is defined. ([#164](https://github.com/boostorg/log/issues/164)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + Add support for cubic roots. + + Add support for `constexpr` + versions of various standard library math routines. + + Add support for Bezier polynomials. + + Improve worst-case tanh-sinh integration performance. + + Disable inadvertant use of integral types in integration routines. + + Minor update for erf approximations when the result is with 2ulp + of 1. + + Allow Bernoulli code to be used on platforms with no atomic integers. + + Improve the mode of the non-central Chi Squared distribution. + + Improve certain edge cases for complex-valued elementary + functions, see [#507](https://github.com/boostorg/math/issues/507). +* [Multi-index Containers](/libs/multi_index/): + + + Added `contains` to + key-based indices (issue [#35](https://github.com/boostorg/multi_index/issues/35)). + + Added `merge` operations + to key-based indices. The functionality goes beyond the standard + specification for (unordered) associative containers in a number + of ways, most notably: + + - The source index can be of any type, including non key-based + indices. + - Partial merge is provided: for instance, `x.merge(y,first,last)` merges only the elements of + `y` within [`first`,`last`). + + Previous versions of `splice` + for sequenced and random access indices were destructive, i.e. elements + were copy-inserted into the destination and then erased from the + source. Now, `splice` + is based on node transfer much as `merge` + in key-based indices, and has been similarly extended to accept source + indices of any type: in fact, `splice` + can be regarded as a frontend to the same functionality provided + by `merge` in key-based + indices. For reasons of backwards compatibility, the destructive + behavior of `splice` + has been retained in the case that the source and destination containers + have unequal allocators. + + The fact has been documented that index iterator types do only depend + on `node\_type` and + the position of the index in its `multi\_index\_container`, + (except for hashed indices, where uniqueness/non-uniqueness is also + a dependency). This has implications on the validity of iterators + to elements transferred by `merge` + or `splice`. This property + is a variant of what has been called [SCARY + iterators](https://wg21.link/n2980) in the C++ standard mailing lists. SCARYness is + currently (August 2021) not mandated for standard containers. + + Iterator SCARYness is now also preserved in [safe + mode](/libs/multi_index/doc/tutorial/debug.html#safe_mode). +* [Multiprecision](/libs/multiprecision/): + + + Rework rational\_adaptor to remove dependency on Boost.Rational and + improve performance. + + Fix issue with type\_traits and clang, see [#383](https://github.com/boostorg/multiprecision/issues/383). + + Fixed buggy Lehmer's GCD routine, see [#370](https://github.com/boostorg/multiprecision/issues/370). + + Fix mpc\_complex constructors so that lossy conversions are explicit, + see [#363](https://github.com/boostorg/multiprecision/issues/363). + + Correct miscellaneous configuration issues (Intel intrinsic usage + and Apple clang). + + Correct some iostream operators for unsigned char types. + + Correct mpq\_rational conversions to integer types, see [#342](https://github.com/boostorg/multiprecision/issues/342). +* [Nowide](/libs/nowide/): + + + Breaking Change: `do\_unshift` + for the UTF-32 specialization of `utf8\_codecvt` + now correctly returns `noconv` + instead of `ok` + + Remove unnecessary branch in `utf8\_codecvt` + for UTF-16 output + + Suppress deprecation warnings in MSVC when using `utf8\_codecvt` + with unicode char types + + Fix possible double-free when setting a custom buffer (`setbuf`) after `filebuf` + already allocated an internal buffer +* [PFR](/libs/pfr/): + + + Added missing `#include + ` for inclusion of `std::addressof` + + Fixed -Wzero-length-array warning when dealing with empty aggregates + + Fixed compilation on msvc compilers <= 1920 (thanks to Alexey + Romanov aka @alexey-romanov) + + Added basic CMakeLists.txt support (thanks to @pdimov aka Peter Dimov) + + Multiple improvements for docs, including links to https://github.com/apolukhin/pfr\_non\_boost + + Added misc/strip\_boost\_namespace.sh script to remove `boost::` + and `BOOST\_` prefixes +* [Predef](/libs/predef/): + + + Version 1.13.1 + + Fix spelling of "epoch". + + Add missing parenthesis in sparc.h (from tkoecker). + + Update documentation to use Rouge code styling and Amber general + style. +* [Regex](/libs/regex/): + + + **Breaking Change:** Change \B to be + the opposite of \b as per Perl behaviour. + + Change w32\_regex\_traits.hpp so that windows.h is no longer included. + + Fxed fuzzing related issues [#151](https://github.com/boostorg/regex/issues/151), + [#152](https://github.com/boostorg/regex/issues/152), + [#153](https://github.com/boostorg/regex/issues/153), + [#156](https://github.com/boostorg/regex/issues/156). +* [System](/libs/system/): + + + Added support for source locations to `error\_code`. + + Added `error\_code::to\_string`, + `error\_condition::to\_string`, `error\_code::what`. + + `system\_error::what()` + now contains the source location, if present. + + Added `result`, + a class holding either a value or an error, defined in ``. +* [Utility](/libs/utility/): + + + Library documentation converted to QuickBook (thanks to Alan de Freitas, + [PR#79](https://github.com/boostorg/utility/pull/79)). +* [Variant2](/libs/variant2/): + + + Added ``. + + Added `unsafe\_get`. + + Added `visit\_by\_index`. + + Added `operator<<`. + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release of [B2 + version 4.7.2](/tools/build/doc/html/#_version_4_7_2). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0 + + Clang, C++11: 3.4, 11.0.0 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0 + + Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0 + + Clang, C++20: 11.0.0, 12.0.0, 13.0.0 + + GCC: 4.6.3, 11 + + GCC, C++11: 4.7.3, 4.8.5, 11 + + GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++20: 8.0.1, 9.1.0, 10, 11 +* OS X: + + + Apple Clang: 11.0.3 + + Apple Clang, C++11: 11.0.3 + + Apple Clang, C++14: 11.0.3 + + Apple Clang, C++17: 11.0.3 + + Apple Clang, C++20: 11.0.3 +* Windows: + + + Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_79_0.html b/users/history/version_1_79_0.html new file mode 100644 index 0000000..34c4b95 --- /dev/null +++ b/users/history/version_1_79_0.html @@ -0,0 +1,483 @@ +--- +title: Version 1.79.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.79.0 + +/\*\*/ + + + + + + + +Version 1.79.0 +============== + +Version 1.79.0 +-------------- + + +April 13th, 2022 14:22 GMT + + +[Documentation](/doc/libs/1_79_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_79\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2) | 475d589d51a7f8b3ba2ba4eda022b170e562ca3b760ee922c146b6c65856ef39 | +| [boost\_1\_79\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz) | 273f1be93238a068aba4f9735a4a2b003019af067b9c183ed227780b8f36062c | +| windows | [boost\_1\_79\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.7z) | 6c97cf4f4a0eb00ed776c88065ab3f59e183fa5e65f6464ff94f92328352d9d6 | +| [boost\_1\_79\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.zip) | 3634f9a85759311f321e587eace21799c0d0c946ff933e477a2f98885c54bbff | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. + + + +* Boost.JSON `array::erase` can segfault, see [#692](https://github.com/boostorg/json/issues/692). + [Patch](/patches/1_79_0/0001-json-array-erase-relocate.patch). + +### New Libraries + + +* No new libraries. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added `bind\_allocator`. + + Added `file\_base::sync\_all\_on\_write` flag. + + Added missing implementation of `basic\_file::release()`. + + Added per-operation cancellation support to signal sets. + + Exposed `recycling\_allocator` + as part of the public interface. + + Added the `nodiscard` + attribute to a number of functions. + + Added OpenSSL 3.0 compatibility. + + Added support for adopting an existing `SSL\*` into an `ssl::stream<>`. + + Enabled `executor\_work\_guard<>` in all build configurations. + + Enabled movable socket iostreams when using clang. + + Fixed `bind\_cancellation\_slot` + and `bind\_executor` + compatibility with legacy completion tokens. + + Fixed `associator` + specialisations for `experimental::append` + and `experimental::prepend`. + + Fixed `associated\_allocator` + primary template. + + Fixed io\_uring implementations of `async\_receive\_from` for sockets + and `write\_some\_at` + for files. + + Fixed io\_uring feature detection. + + Fixed `experimental::coro`'s + per-operation cancellation. + + Fixed memory management in `experimental::promise`'s + type-erased completion handlers. + + Fixed move `operator=` implementation for `ssl::stream`. + + Fixed `any\_io\_executor` + implementation to work when both `BOOST\_ASIO\_USE\_TS\_EXECUTOR\_AS\_DEFAULT` + and `BOOST\_ASIO\_SEPARATE\_COMPILATION` + are defined. + + Fixed implementation of `basic\_socket::at\_mark()` when using the `sockatmark()` system call. + + Changed the recycling allocator to use the default alignment as the + minimum alignment for allocations. + + Added a workaround for apparent coroutine codegen bug with Apple's + clang. + + On Windows, changed the file support to open files using the same + sharing mode as `fopen()`. + + On Linux, fixed UNIX domain sockets implementation to correctly handle + `EAGAIN`. + + Fixed implementation of `experimental::basic\_channel::reset()` and `experimental::basic\_concurrent\_channel::reset()`. + + Fixed potential undefined behaviour in the `experimental::promise`. + + Changed the `co\_spawn` + implementation to dispatch cancellation signals through the executor + in some circumstances. + + Fixed various header inclusion issues. + + Fixed various warnings. + + A number of documentation enhancements, including: + + - Added an overview of Asio's asynchronous model. + - Reworked reference and requirements documentation in terms + of asynchronous model. + - Updated documentation for `dispatch()`, `post()`, and `defer()`. + - Documented per-operation cancellation for serial ports. + - Clarified the non-concurrency guarantees made for allocators. + - Reverted the `io\_context` + reference documentation to use `executor\_work\_guard`. + - Added more detailed reference documentation to `make\_strand()`, + `make\_work\_guard()`, `ip::address\_v4`, + `ip::address\_v6`, `experimental::basic\_channel`, and `experimental::basic\_concurrent\_channel`. + - Re-arranged and extended the Overview documentation to cover + recently added features. + + Added a C++11 example showing file descriptor passing over local + sockets. + + Added C++14 examples of wrapping callback-based APIs in asynchronous + operations. + + Consult the [Revision + History](/doc/libs/1_79_0/doc/html/boost_asio/history.html) for further details. +* [Assert](/libs/assert/): + + + `source\_location().file\_name()` + and `source\_location().function\_name()` now return `""` + instead of `"(unknown)"`. + + Added a `source\_location` + constructor from `std::source\_location`. + + Changed `BOOST\_CURRENT\_LOCATION` + to more closely match the behavior of `std::source\_location::current()`, such as being usable at top level + or as a default function argument. +* [Atomic](/libs/atomic/): + + + Fixed compilation for Universal Windows Platform (UWP). ([#54](https://github.com/boostorg/atomic/issues/54)) + + Added `BOOST\_ATOMIC\_NO\_DARWIN\_ULOCK` + configuration macro. The macro affects compilation on Darwin systems + and disables `ulock`-based + implementation of waiting and notifying operations. This may be useful + to comply with Apple App Store requirements. ([#55](https://github.com/boostorg/atomic/issues/55)) +* [Beast](/libs/beast/): + + + Added missing include for file\_body test. + + Fixed WebSocket handshake response on failure. + + Fixed open append mode for `file\_posix` + and `file\_win32`. + + Fixed file open with append/append\_existing flag on Windows + + Fixed clang-cl UTF8 path handling for `file\_win32` + and `file\_stdio`. + + Added ARM64 builds to drone CI. + + Fixed async\_base documentation link. + + Added tests for file open in append/append\_existing mode. + + Updated CI to include gcc 11, clang 12, msvc 14.3. + + Added individual tests to CMake workflow. + + We'd love to know how you or your company use Beast, consider adding + an entry to the [Companies + and Individuals Using Beast](https://github.com/boostorg/beast/wiki/Companies-and-Individuals-Using-Beast) list. + + See the full [Release + Notes](/libs/beast/doc/html/beast/release_notes.html) for a complete list of changes. +* [Core](/libs/core/): + + + Made `boost::pointer\_traits` SFINAE friendly, + addressing LWG3545. (Glen Fernandes) + + Added `boost::allocator\_traits` that uses the + individual allocator access traits. This implementation supports + C++03 and above. (Glen Fernandes) + + Updated the allocator access traits to support most of the C++11 + allocator model in C++03. (Glen Fernandes) + + `boost/iterator.hpp` is deprecated and will be removed + in a future release. The header defines `boost::iterator` + template, which is equivalent to `std::iterator` + in `` header. However, since `std::iterator` is itself deprecated in + C++17, users are advised to remove `boost::iterator` + or `std::iterator` use from their code. + + Added `boost::core::verbose\_terminate\_handler`, a utility + function intended to be passed to `std::set\_terminate` + that prints information about the uncaught exception to `stderr`. +* [Describe](/libs/describe/): + + + Enabled unions in `BOOST\_DESCRIBE\_STRUCT` + and updated examples to check `std::is\_union`. + + Added example of defining a `fmtlib` + class formatter. + + Added example of defining a `fmtlib` + enum formatter. + + Added example of printing pointers to members. +* [Filesystem](/libs/filesystem/): + + + **v3:** `path::replace\_extension` + now works in terms of **v3** definition + of `path::extension` rather than **v4**. + + Fixed compilation of path appending and concatenation operators with + arguments of types convertible to `path` + or compatible string type. ([#223](https://github.com/boostorg/filesystem/issues/223)) + + On POSIX systems that support `fdopendir` + and `O\_NOFOLLOW` and + on Windows, `remove\_all` + is now protected against [CVE-2022-21658](https://www.cve.org/CVERecord?id=CVE-2022-21658). + The vulnerability is a race condition that allows a third party process + to replace a directory that is being concurrently processed by `remove\_all` with a directory symlink + and cause `remove\_all` + to follow the symlink and remove files in the linked directory instead + of removing the symlink itself. ([#224](https://github.com/boostorg/filesystem/issues/224)) + + On Windows, in `remove` + and `remove\_all` implementation, + use POSIX semantics for file removal, when supported by the OS (Windows + 10 1709 and later). When POSIX semantics is supported, the file name + is removed from the filesystem namespace as soon as the file is marked + for deletion, even if it is still open and in use. With legacy Windows + semantics, the file name remains present in the the filesystem namespace + until the last file handle to the file is closed, which allows the + file marked for deletion to be opened and prevents creating new files + with the same name. ([#216](https://github.com/boostorg/filesystem/issues/216)) + + On Windows, `remove` + and `remove\_all` now + support deleting read-only directories. Support for removing read-only + non-directory files was added previously. + + On Windows, `directory\_iterator` + internal implementation has been reworked to better utilize modern + Windows APIs, which may improve performance while handling symlinks. + + On Windows, initialize internal WinAPI function pointers early, if + possible, to allow Boost.Filesystem operations to be invoked in global + constructors. This is only supported on MSVC, GCC, Clang and compatible + compilers. + + On Windows, `resize\_file` + should no longer fail with an error if the file to be resized is + opened. + + Disabled use of the `statx` + syscall on Android prior to 11.0 (API version 30). The syscall is + blacklisted by seccomp and causes process termination in runtime. + ([#229](https://github.com/boostorg/filesystem/issues/229)) + + **Deprecated:** `boost/filesystem/string\_file.hpp` + header is deprecated and will be removed in a future release. The + header is no longer included by `boost/filesystem.hpp` + by default. Users are advised to implement the functionality themselves + or migrate to other implementations. + + **Deprecated:** Windows CE support is + deprecated and will be removed in a future release. Windows CE has + been untested for many years and is likely non-functional. +* [Geometry](/libs/geometry/): + + + Major change + + - [PR#977](https://github.com/boostorg/geometry/pull/977) Rescaling is turned off by default. This avoids + many related bugs in set operations and buffer. + + Improvements + + - [PR#923](https://github.com/boostorg/geometry/pull/923) Added algorithm closest\_points for cartesian + point/geometry. + - [PR#939](https://github.com/boostorg/geometry/pull/939) Added algorithm closest\_points for other coordinate + systems and geometry combinations excl. boxes. + - [PR#961](https://github.com/boostorg/geometry/pull/961) Added Web Mercator projection. + - [PR#966](https://github.com/boostorg/geometry/pull/966) More efficient cartesian distance strategy + used in simplify. + + Solved issues + + - [#956](https://github.com/boostorg/geometry/issues/956) Result of simplify algorithm with incorrect + closure. + - [#962](https://github.com/boostorg/geometry/issues/962) Runtime error in R-tree deserialization due + to load factor. + - [#971](https://github.com/boostorg/geometry/issues/971) R-tree insertion time impacted by use of long + double on ARM platforms. + + Bugfixes + + - [PR#936](https://github.com/boostorg/geometry/pull/936) Envelope of polygon containing pole. + - [PR#948](https://github.com/boostorg/geometry/pull/948) Spherical and geographic envelope for near + meridian segments. + - [PR#974](https://github.com/boostorg/geometry/pull/974) Spheroidal normalization utilities for NaN + coordinates. + - Various fixes in set operations and buffer. +* [Integer](/libs/integer/): + + + Optimized `integer\_log2` + implementation to use bit operations internally. This allows to employ + bit instructions available on most modern CPUs. ([#31](https://github.com/boostorg/integer/issues/31)) +* [IO](/libs/io/): + + + Added `boost::io::basic\_nullbuf`, a null stream buffer, + and `boost::basic\_onullstream`, a null output + stream (Glen Fernandes). +* [Iterator](/libs/iterator/): + + + In `counting\_iterator`, + added support for built-in 128-bit integer types supported by gcc + and clang and compatible compilers on some target platforms. + + Silenced gcc warnings about deprecated implicit copy assignment operator + in `counting\_iterator`. +* [JSON](/libs/json/): + + + Standalone mode of the library is removed. Users who wish to continue + using standalone JSON can switch to [the + C++ Alliance fork](https://github.com/CPPAlliance/standalone-json.git). + + Add `std::error\_code` overloads. + + Add `boost::source\_location` to `error\_codes`. + + Add support for JSON Pointer. + + Naturally grow string during serialization. +* [LEAF](/libs/leaf/): + + + Support for FreeRTOS and other embedded platforms + + Improved diagnostic information + + Improved configuration macros + + BOOST\_LEAF\_CHECK using statement expressions under \_\_GNUC\_\_ + + Fixed symbol demangling bug +* [Log](/libs/log/): + + + General changes: + + - In `text\_file\_backend`, + added support for appending to a previously written log file, + when file rotation is used and log file names use file counters. + - **Breaking change:** The `file\_collector` interface + has changed: + + * `scan\_for\_files` + method returns a `scan\_result` + structure that contains information collected during + the scan; + * `is\_in\_storage` + method added for testing if a path refers to a file within + the target storage directory. + - Added a new `invoke\_manip` + stream manipulator that can be used for injecting user's function + into a stream output expression. + + Bug fixes: + + - Fixed file counter being set to zero if the user calls `text\_file\_backend::scan\_for\_files` multiple times, + and the second and the following calls don't find any new files. + ([#179](https://github.com/boostorg/log/issues/179)) + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Multi-index Containers](/libs/multi_index/): + + + Improved the efficiency of `count` + operations in ranked indices from `O(log(n) + count)` + to `O(log(n))`. + Contributed by Damian Sawicki. + + Maintenance work. +* [Nowide](/libs/nowide/): + + + Fix compilation issues on some platforms (e.g. GCC 11 on MinGW-w64 + and Cygwin) + + Fix missing include when using `BOOST\_USE\_WINDOWS\_H` + and `WIN32\_LEAN\_AND\_MEAN` + + Add sanity check when using `boost::nowide::stat` + with `boost::nowide::stat\_t` +* [Optional](/libs/optional/): + + + Fixed [issue + #98](https://github.com/boostorg/optional/issues/98). + + Fixed [issue + #92](https://github.com/boostorg/optional/issues/92). + + Added support for `BOOST\_NO\_IOSTREAM`. + + Now aligned storage uses `unsigned + char` rather than `char` to avoid UB. + + Now using cv-unqualified `value\_type` + with placement `new` to + avoid UB. +* [Predef](/libs/predef/): + + + Version 1.14.0 + + Add detection of LoongArch (from Zhang Na). +* [QVM](/libs/qvm/): + + + Added constexpr under C++17 + + Improved single header distribution +* [Smart Pointers](/libs/smart_ptr/): + + + Added `boost::get\_allocator\_pointer` to obtain + the Allocator pointer from the result of `boost::allocate\_unique` + (Glen Fernandes). +* [System](/libs/system/): + + + Added a `boost::source\_location` parameter to `throw\_exception\_from\_error`. + + Added `throw\_exception\_from\_error` + overloads for `errc::errc\_t`, + `std::error\_code`, `std::errc`, + `std::exception\_ptr`. + + `result::value` now automatically supplies + `BOOST\_CURRENT\_LOCATION` + to `throw\_exception\_from\_error` + via a default argument. + + Added an `errc::make\_error\_code` overload taking + a source location. +* [ThrowException](/libs/throw_exception/): + + + Added `boost::throw\_with\_location`, a more lightweight + alternative of `BOOST\_THROW\_EXCEPTION` + for programs that do not use Boost.Exception. +* [Unordered](/libs/unordered/): + + + All containers have been updated to support heterogeneous `count`, `equal\_range` + and `find`. + + All containers now implement the member function `contains`. + + `erase\_if` has been + implemented for all containers. + + All containers have been updated to support heterogeneous `erase` and `extract`. + + Changed behavior of `reserve` + to eagerly allocate. + + Various warning fixes in the test suite. + + Update code to internally use `boost::allocator\_traits`. + + Switch to Fibonacci hashing. + + Update documentation to be written in AsciiDoc instead of QuickBook. +* [Variant2](/libs/variant2/): + + + Added `operator<<` + for `monostate`. +* [Wave](/libs/wave/): + + + C++11 now required for building Wave itself + + Fixed bugs: + + - [#135](https://github.com/boostorg/wave/issues/135): Comma operators in array subscripts are deprecated + in C++20 + - [#137](https://github.com/boostorg/wave/issues/137): Simple unknown directive => found\_unknown\_directive + is not called, stripped of pound. + - [#138](https://github.com/boostorg/wave/issues/138): Empty ifdef block does not emit line directive + for missing whitespace + - [#143](https://github.com/boostorg/wave/issues/143): Parsing \_\_has\_include() fails with trailing tokens + - [#145](https://github.com/boostorg/wave/issues/145): Sanitizer complains about reset\_version() + - [#147](https://github.com/boostorg/wave/issues/147): bitwise operations between different enumeration + types are deprecated + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release of [B2 + version 4.8.2](/tools/build/doc/html/#_version_4_8_2). + +### Compilers Tested + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0 + + Clang, C++11: 3.4, 11.0.0 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0 + + Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0 + + Clang, C++20: 11.0.0, 12.0.0, 13.0.0 + + GCC: 4.6.3, 11 + + GCC, C++11: 4.7.3, 4.8.5, 11 + + GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11 + + GCC, C++20: 8.0.1, 9.1.0, 10, 11 +* OS X: + + + Apple Clang: 11.0.3 + + Apple Clang, C++11: 11.0.3 + + Apple Clang, C++14: 11.0.3 + + Apple Clang, C++17: 11.0.3 + + Apple Clang, C++20: 11.0.3 +* Windows: + + + Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/history/version_1_80_0.html b/users/history/version_1_80_0.html new file mode 100644 index 0000000..50c9217 --- /dev/null +++ b/users/history/version_1_80_0.html @@ -0,0 +1,542 @@ +--- +title: Version 1.80.0 +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Version 1.80.0 + +/\*\*/ + + + + + + + +Version 1.80.0 +============== + +Version 1.80.0 +-------------- + + +August 10th, 2022 21:25 GMT + + +[Documentation](/doc/libs/1_80_0/) + + +Downloads| Platform | File | SHA256 Hash | +| unix | [boost\_1\_80\_0.tar.bz2](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.bz2) | 1e19565d82e43bc59209a168f5ac899d3ba471d55c7610c677d4ccf2c9c500c0 | +| [boost\_1\_80\_0.tar.gz](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz) | 4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 | +| windows | [boost\_1\_80\_0.7z](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.7z) | d12a2af721e22dbfb984ef061ee4c4ab2387f1904f6d65bc5acebaa34d6366ec | +| [boost\_1\_80\_0.zip](https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.zip) | e34756f63abe8ac34b35352743f17d061fcc825969a2dd8458264edb38781782 | + + +### Known Issues + These are patches from library authors which were found too late to be fixed + in the release. + + + +* Boost.Filesystem directory iterators may fail to construct for a network + share on Windows prior to 10, see [PR#246](https://github.com/boostorg/filesystem/pull/246) and [#245](https://github.com/boostorg/filesystem/issues/245). + [Patch](/patches/1_80_0/0001-filesystem-win-fix-dir-it-net-share.patch). +* In Boost.Filesystem on Windows, `weakly\_canonical` + fails to process paths that start with the "\\?\" prefix, see + [#247](https://github.com/boostorg/filesystem/issues/247). [Patch](/patches/1_80_0/0002-filesystem-fix-weakly-canonical-long-paths.patch). + +### New Libraries + + +* No new libraries. + +### Updated Libraries + + +* [Asio](/libs/asio/): + + + Added a deduced trailing return type to all asynchronous operations, + to enable the new form of `async\_result` + for C++11. + + Moved `append`, `prepend`, `as\_tuple`, + and `deferred` to the + `boost::asio` namespace, and made them compatible + with C++11. + + Made `experimental::parallel\_group` + compatible with C++11. + + Added `buffer()` + overloads for contiguous containers, such as `std::span`. + + Added the ability for `awaitable<>`-based coroutines to directly + `co\_await` operations + that are packaged as function objects. + + Changed `spawn()` + to be a completion token-based asynchronous operation, and added + support for cancellation. The `basic\_yield\_context` + token now supports move-only and variadic result types. When targeting + C++11 and later, `spawn()` and `basic\_yield\_context` + are implemented in terms of Boost.Context directly. + + Added the `is\_async\_operation` + trait and `async\_operation` + concept. + + Added the `completion\_signature\_of` + trait. + + Added converting move construction/assignment to posix descriptors, + serial ports, pipes, Windows `object\_handle`, + Windows stream handles, and Windows random-access handles. + + Added `release()` + member functions to pipes, Windows stream handles, and Windows random-access + handles. + + Enabled support for `Endpoint` + implementations that return `void` + pointers from their `data()` member functions, as per the documented + `Endpoint` type requirements. + + Removed `all()` + and `race()` + from `experimental::promise`, + as `experimental::parallel\_group` covers this functionality. + + Added source locations to exceptions and error codes produced by + the synchronous and asynchronous operations. + + Fixed compatibility with OpenSSL 3.0.4 and later. + + Fixed compatibility with with -masm=intel. + + Explicitly stated that socket `shutdown()` calls are thread-safe with respect + to certain other synchronous operations on the same socket. + + Optimised the move construction of I/O objects where only the executor + type differs. + + Fixed the detection of `std::invoke\_result` + for clang/libc++. + + Fixed an issue where `experimental::parallel\_group` + initiation incorrectly moved arguments instead of forwarding them. + + Fixed a sequencing issue in the implementation of `post()`, `dispatch()`, and `defer()`. + + Fixed the `awaitable<>` implementation to propagate + exceptions from awaited initiation functions through the current + completion handler. + + Fixed detection of `std::aligned\_alloc` + with gcc 7. + + Changed to avoid using the soon-to-be-deprecated `std::aligned\_storage` + on newer compilers. + + Fixed detection of `std::aligned\_alloc` + for older Apple platforms. + + Removed faulty assertions from `experimental::coro` + implementation. + + Added defence against Qt-defined macros when building with Intel + C++. + + Changed the implementation of the `select\_reactor`, + on Windows, to ensure that any exception resulting from failure to + recreate its interrupter's sockets will be allowed to propagate out + through `io\_context::run()`. + + Fixed various compiler warnings. + + Updated all composed operations examples, and the C++11 timeouts + example, to use the new `async\_result` + form. + + Added composed operation and coroutine examples for C++20. + + Consult the [Revision + History](/doc/libs/1_80_0/doc/html/boost_asio/history.html) for further details. +* [Atomic](/libs/atomic/): + + + Improved portability of endianness checks on ARM, AArch32 and AArch64 + targets. ([#59](https://github.com/boostorg/atomic/issues/59)) + + Fixed compilation with MSVC 14.0 (Visual Studio 2015) in C++17 mode. + ([#61](https://github.com/boostorg/atomic/issues/61)) +* [Filesystem](/libs/filesystem/): + + + On Windows, added a fallback implementation for querying file attributes + in case if the file cannot be opened with `ERROR\_ACCESS\_DENIED` + error. This may allow `status` + and `symlink\_status` + to succeed for system files and directories that are not reparse + points or symlinks. ([#234](https://github.com/boostorg/filesystem/issues/234)) + + On Windows, added a workaround for FAT/exFAT filesystems that produce + `ERROR\_INVALID\_PARAMETER` + when querying file attributes. This affected `status` + and `symlink\_status`, + which reported that files do not exist, and directory iterators, + which failed to construct, as well as other dependent operations. + ([#236](https://github.com/boostorg/filesystem/issues/236), [#237](https://github.com/boostorg/filesystem/issues/237)) + + Worked around a compilation problem on [RTEMS](https://www.rtems.org/). + ([PR#240](https://github.com/boostorg/filesystem/pull/240)) + + On Linux, corrected switching to `sendfile` + `copy\_file` implementation + if `copy\_file\_range` + failed with `ENOSYS` + in runtime. The `sendfile` + fallback implementation used to skip the filesystem type check and + could fail for some filesystems. + + On POSIX systems supporting `openat` + and related APIs defined in POSIX.1-2008 and on Windows Vista and + later, improved protection of `remove\_all` + against [CVE-2022-21658](https://www.cve.org/CVERecord?id=CVE-2022-21658) + that was implemented in the previous release. The previous fix could + still result in removing unintended files in [certain + conditions](https://github.com/boostorg/filesystem/issues/224#issuecomment-1183738097). Other systems remain vulnerable. +* [GIL](/libs/gil/): +**NOTICE:** + We are planning BREAKING switch to C++17 as minimum required C++ language + version in one or two releases after Boost 1.80 ([#676](https://github.com/boostorg/gil/issues/676)) + + + Added + + - GSoC 2020: Added Perona-Malik anisotropic diffusion algorithm + ([PR#500](https://github.com/boostorg/gil/pull/500)) + - GSoC 2020: Added histogram class and related functionality + ([PR#499](https://github.com/boostorg/gil/pull/499)) + - GSoC 2020: Added histogram equalization feature ([PR#514](https://github.com/boostorg/gil/pull/514)) + - GSoC 2020: Added histogram matching algorithm ([PR#515](https://github.com/boostorg/gil/pull/515)) + - GSoC 2020: Added ability to stack images either horizontally + (`hstack`) or + vertically (`vstack`) + ([PR#506](https://github.com/boostorg/gil/pull/506)) + - GSoC 2020: Added adaptive histogram equalization algorithm + ([PR#516](https://github.com/boostorg/gil/pull/516)) + - GSoC 2020: Added Standard Hough Transform and circle rasterization + ([PR#512](https://github.com/boostorg/gil/pull/512)) + - GSoC 2020: Added Bresenham's algorithm for line rasterization + ([PR#512](https://github.com/boostorg/gil/pull/512)) + - GSoC 2021: Added rotation of image by arbitrary angle around + its center ([PR#565](https://github.com/boostorg/gil/pull/565)) + - GSoC 2021: Added rasterization support for ellipse based on + "An Efficient Ellipse-Drawing Algorithm" by Jerry + Van Aken ([PR#585](https://github.com/boostorg/gil/pull/585)) + - Added `image` + constructor from compatible view ([PR#520](https://github.com/boostorg/gil/pull/520)) + - Added inverse function for affine `matrix3x2` + ([PR#527](https://github.com/boostorg/gil/pull/527)) + - Added standard morphological transformations ([PR#541](https://github.com/boostorg/gil/pull/541)) + - Added `for\_each\_pixel` + overload for `any\_image` + ([PR#648](https://github.com/boostorg/gil/pull/648)) + - Added C++17 polymorphic memory resource typedefs for `image` class ([PR#529](https://github.com/boostorg/gil/pull/529)) + + Changed + + - **BREAKING:** The required minimum + C++ version is changed from from C++11 to C++14. Currently, + large parts of GIL still compile with a C++11 compiler. However, + there is no guarantee that it stays that way, and any compilers + that do not support at least C++14 are considered unsupported + as of now. + - **BREAKING:** `any\_color\_converted\_view()` is deprecated and will be + removed in the next release. Use `color\_converted\_view()` instead, which provides the + same feature. + - **BREAKING:** `apply\_operation` + for `any\_image` + is deprecated and will be removed in the next release. Use + `variant2::visit` instead, which provides + the same feature. ([PR#656](https://github.com/boostorg/gil/pull/656)) + - Moved numeric extension to core ([PR#573](https://github.com/boostorg/gil/pull/573)) + - Added support for C++17's `` + ([PR#636](https://github.com/boostorg/gil/pull/636)) The availability of the `std::filesystem` + is detected automatically, unless the `BOOST\_GIL\_IO\_USE\_BOOST\_FILESYSTEM` + macro is defined that forces the preference of the Boost.Filesystem. + - Renamed `pixel\_multiply\_t` + to `pixel\_multiplies\_t` + and `pixel\_divide\_t` + to `pixel\_divides\_t` + ([PR#655](https://github.com/boostorg/gil/pull/655)) + - Renamed `io/dynamic\_io\_new.hpp` + to `io/detail/dynamic.hpp` ([PR#653](https://github.com/boostorg/gil/pull/653)) + - Moved function `construct\_matched` + into `boost::gil::detail` + namespace as it was only used by other implementation details + ([PR#653](https://github.com/boostorg/gil/pull/653)) + - Made `packed\_pixel` + trivially copyable and assignable ([PR#679](https://github.com/boostorg/gil/pull/679)) + - Replace deprecated libtiff v4.3 typedefs with C99 fixed-size + integers ([PR#685](https://github.com/boostorg/gil/pull/685)) + + Removed + + - **BREAKING:** Removed support + for GCC 5 ([PR#572](https://github.com/boostorg/gil/pull/572)) + - Removed deprecated.hpp ([PR#627](https://github.com/boostorg/gil/pull/627)) + + Fixed + + - Fixed conversion from RGB to HSL ([PR#505](https://github.com/boostorg/gil/pull/505)) + - Fixed conversion from RGB to signed CMYK ([PR#522](https://github.com/boostorg/gil/pull/522)) + - Removed unnecessary numeric cast in hsv.hpp ([PR#530](https://github.com/boostorg/gil/pull/530)) + - Fixed default constructor for `homogeneous\_color\_base` + for reference pixel elements ([PR#542](https://github.com/boostorg/gil/pull/542)) + - Fixed returning reference to local temporary object in `subchroma\_image\_view` ([PR#556](https://github.com/boostorg/gil/pull/556)) + - Added missing header guards in diffusion.hpp ([PR#568](https://github.com/boostorg/gil/pull/568)) + - Fixed `any\_image\_view<>::const\_t` + ([PR#526](https://github.com/boostorg/gil/pull/526)) + - Fixed C++20 incompatibilities in I/O extensions ([PR#617](https://github.com/boostorg/gil/pull/617)) + - Ensured all examples build without errors ([PR#628](https://github.com/boostorg/gil/pull/628)) + - Fixed `convolve\_2d` + for images with `float32\_t` + channel model ([PR#577](https://github.com/boostorg/gil/pull/577)) + - Fixed `for\_each\_pixel` + for non-1d iterable views ([PR#621](https://github.com/boostorg/gil/pull/621)) + - Fixed: `is\_equal\_to\_sixteen` + in PNG I/O was less-than test ([PR#650](https://github.com/boostorg/gil/pull/650)) + - Re-allow `devicen\_t` + with two components ([PR#654](https://github.com/boostorg/gil/pull/654)) It was unintentionally removed + in Boost 1.72 + - Fixed memory leak in `image` + class for empty dimensions ([PR#649](https://github.com/boostorg/gil/pull/649)) + + Acknowledgements + + - Cypre55, Samuel Debionne, Mike-Devel, Edward Diener, Peter + Dimov, Omar Emara, Dhruva Gole, Nicolas Herry, Eugene K, Avinal + Kumar, Gaurav Kumar, Marco Langer, Pranam Lashkari, Mateusz + Łoskot, Giovanni Mascellani, Debabrata Mandal, Gopi Krishna + Menon, René Ferdinand Rivera Morell, Felix Morgner, Harshit + Pant, Paul92, André Schröder, Scramjet911, Siddharth, Dirk + Stolle, Prathamesh Tagore, theroyn, Olzhas Zhumabek +* [Histogram](/libs/histogram/): + + + Fixed segfault in `indexed` + when trying to iterate over histogram with axes of zero size (physical + or logical) under certain conditions + + Removed previously deprecated API + + - class `accumulators::thread\_safe`: + use `accumulators::count` + - Methods `accumulators::sum::large` + and `accumulators::sum::small`: + use `accumulators::sum::large\_part` + and `accumulators::sum::small\_part` + - Type alias `algorithm::reduce\_option`: + use `algorithm::reduce\_command` + - Template function `axis::traits::static\_options`: + use `axis::traits::get\_options` + - Template function `axis::traits::static\_is\_inclusive`: + use `axis::traits::is\_inclusive` + - Type alias `indexed::range\_iterator`: + use `indexed::iterator` + - Type alias `indexed::accessor::reference`: + use `indexed::accessor::const\_reference` +* [Iterator](/libs/iterator/): + + + For C++11 and later, added support for perfect forwarding of values + written to `function\_output\_iterator`. + ([PR#73](https://github.com/boostorg/iterator/pull/73)) + + Added protection against writing to `function\_output\_iterator` + a result of dereferencing another `function\_output\_iterator`. +* [JSON](/libs/json/): + + + Added non-const `value::at` + overloads. + + Added the ability to manually choose endianness of the platform. + + Added `string::subview()` + overload. + + Fixed segfault in `array::erase(it)`. + + Fixed low performance of `serialize` + on libc++. + + Fixed ambigious conversion to `std::string\_view` + on GCC 8. + + Fixed parsing on big-endian platforms. + + Fixed handling of comment after trailing comma. +* [LEAF](/libs/leaf/): + + + API breaking change: throw leaf::exception(....) now becomes leaf::throw\_exception(....) + + Fixed a bug in support for a rare build configuration (exception + handling enabled, diagnostics disabled) + + Using nullptr instead of 0 throughout + + Fixed pedantic warnings +* [Locale](/libs/locale/): + + + Deprecated support for C++03 and earlier, C++11 will be required + in the next release + + Provide `-sICU\_LINK\_LOCALE` + as a temporary replacement for `-sICU\_LINK` which is incompatible + with Boost.Regex. `-sICU\_LINK\_LOCALE` and `-sICU\_LINK` + are deprecated and will be replaced by `ICU\_\*\_NAME` + options to be compatible with Boost.Regex + + Fix UB/assertion failure in the ICU `collator` + implementation when transforming empty strings + + Fix some issues related to visibility of classes in shared libraries + (Unix only) + + Fix compatibility with C++20 mode + + Fix compatibility with `BOOST\_USE\_WINDOWS\_H` + + Fix build failures due to missing includes + + Handle or suppress many warnings which makes the build log cleaner +* [Log](/libs/log/): + + + Bug fixes: + + - Fixed binding incorrect local address in UDP socket-based + `syslog\_backend` + when IPv6 address is used for the syslog server. ([#181](https://github.com/boostorg/log/issues/181)) + - Added a workaround for a [bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105857) + in libstdc++ from gcc 11.2. When `max\_size\_decor` + was used on a formatting stream, `std::codecvt::do\_length` + incorrectly accessed the input buffer and caused a buffer overflow. + + See [changelog](/libs/log/doc/html/log/changelog.html) + for more details. +* [Math](/libs/math/): + + + **Deprecated C++11 support**: from 2023 + we will require C++14 as a minimum standard. This will mean GCC-5 + or MSVC-14.1 as a minimal requirement. + + Add `constexpr` fma support, + see [734](https://github.com/boostorg/math/pull/734). + + Add support for the Chatterjee Correlation Coefficient, see [770](https://github.com/boostorg/math/pull/770). + + Added support for the logarithm of the PDF for all the distributions. + + Improve support for building with no exception or RTTI support. + + Some minor bug fixes for [sub 1]F[sub 1] corner cases, see [778](https://github.com/boostorg/math/pull/778). +* [Multiprecision](/libs/multiprecision/): + + + **Mark C++11 support as deprecated**: + from 2023 we will move to requiring C++14 as a minimum standard level. + That will drop support for GCC versions prior to 5 and MSVC prior + to 14.1. + + Fix conflict between `boost/cstdfloat.hpp` + and this library. + + Clean up lots of gcc and clang warnings. + + Fix input streaming of composite types (complex, interval rational) + where there is a trailing delimeter in the stream and no whitespace. + + Fix `constexpr` integer + square root where the input is 1, 2 or 3. + + Add missing `#include` + of `` to float128.hpp. + + Correct 2-arg constructor for class `number` + to prevent ambiguity in some cases. + + Correct and make more consistent behaviour of divide-by-zero in gmp.hpp. +* [Multi-index Containers](/libs/multi_index/): + + + Maintenance work. +* [Nowide](/libs/nowide/): + + + Major performance improvement for Bulk I/O with files + + `basic\_filebuf`: Fix + wrong return value of `sync` + when `fflush` failed + + `basic\_filebuf`: Fix + possible undefined behavior in a corner case when nothing was actually + written but buffer is in "write" mode + + `basic\_filebuf`: Limit + putback of characters (i.e. `pbackfail`) + only allowing putback of buffered characters (may be only 1 character) +* [Optional](/libs/optional/): + + + Added specializations for `std::hash>`. This is a breaking change + for programs that define such specializations themselves. For more + details see [specs](/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics___std__hash_specializations.html#reference_std_hash_spec). +* [STLInterfaces](/libs/stl_interfaces/): + + + Fix [#53](https://github.com/boostorg/stl_interfaces/issues/53): "missing 'typename' prior to dependent + type name 'C::const\_iterator'" + + Fix [#54](https://github.com/boostorg/stl_interfaces/issues/54): "Concept check fails on .data() of + a view on contiguous iterator\_interface instantiations" + + New additions to make it easy to write views and view adaptors that + work like, and interoperate with, the ones in the standard library: + + - Add workalikes for C++23's `std::bind\_back()` and `std::range\_adaptor\_closure` + for pre-C++23 code. + - Add templates `closure` + and `adaptor` + to make writing view adaptors easier, following the examples + in [P2387](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html). +* [System](/libs/system/): + + + When an `error\_code` + is converted to `std::error\_code` + and then back to `error\_code`, + the original is now restored, if possible. + + Reworked the conversion from `error\_category` + to `std::error\_category` to avoid the one-time + allocation that shows up on leak checkers. + + Added a constructor that allows replacing the source location of + an `error\_code`, and + a corresponding `assign`. + + Added a converting constructor to `result`. +* [Unordered](/libs/unordered/): + Major update: + + + [Refactor](/libs/unordered/doc/html/unordered.html#buckets_fast_closed_addressing_implementation) + internal implementation to be dramatically faster + + Allow `final` `Hasher` and `KeyEqual` + objects + + Update documentation, adding benchmark graphs and notes on the new + internal data structures +* [Utility](/libs/utility/): + + + In `string\_view`/`string\_ref`, fixed `max\_size` returning incorrect value. + ([#91](https://github.com/boostorg/utility/issues/91)) + + Removed `noexcept` specifier + from `string\_view::compare` + as it may throw on some input arguments. ([#94](https://github.com/boostorg/utility/issues/94)) + + In `string\_view`/`string\_ref`, added support for calling + `substr` with no arguments. + ([#96](https://github.com/boostorg/utility/issues/96)) + + Added `string\_view::contains` + methods that were introduced in C++23. ([#93](https://github.com/boostorg/utility/issues/93)) + + In `string\_view`, added + asserts in `remove\_prefix`/`remove\_suffix` methods to enforce + the precondition that the prefix/suffix length does not exceed the + string view size. The previous (undocumented) behavior of silently + clamping the prefix/suffix length is deprecated and will be removed + in a future release. ([#92](https://github.com/boostorg/utility/issues/92)) +* [Wave](/libs/wave/): + Fixed bugs: + + + [#24](https://github.com/boostorg/wave/issues/24): Line numbers wrong after conditional section + + [#160](https://github.com/boostorg/wave/issues/160): one test fails with error C2660 and error C2440 under + msvc /permissive- mode + + [#161](https://github.com/boostorg/wave/issues/161): BOOST\_WAVE\_THROW\_NAME\_CTX does not result in a context + callback and always throws + + [#162](https://github.com/boostorg/wave/issues/162): When Boost headers are included in the preprocessed + translation unit, Wave fails in boost/integer.hpp(99) + +### Updated Tools + + +* [Build](/tools/build/): + + + Includes release of [B2 + version 4.9.2](/tools/build/doc/html/#_version_4_9_2). + +### Compilers Tested + Boost's primary test compilers are: + + Boost's primary test compilers are: + + + +* Linux: + + + Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0 + + Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0 + + Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, + 14.0.0 + + Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, + 13.0.0, 14.0.0 + + Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0 + + GCC: 4.6.3, 11, 12 + + GCC, C++11: 4.7.3, 4.8.5, 11, 12 + + GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12 + + GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12 + + GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12 +* OS X: + + + Apple Clang: 11.0.3 + + Apple Clang, C++11: 11.0.3 + + Apple Clang, C++14: 11.0.3 + + Apple Clang, C++17: 11.0.3 + + Apple Clang, C++20: 11.0.3 +* Windows: + + + Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3 + +### Acknowledgements + Marshall Clow, Michael Caisse and Glen Fernandes managed this release. + + + + + + + + + + + + diff --git a/users/index.html b/users/index.html new file mode 100644 index 0000000..03f643e --- /dev/null +++ b/users/index.html @@ -0,0 +1,159 @@ +--- +title: Boost Background Information +copyright: Beman Dawes 2005. +revised: +--- + + +Boost Background Information + + + +Boost Background Information +============================ + +Why should an organization use Boost? +------------------------------------- + + +In a word, *Productivity*. Use of high-quality + libraries like Boost speeds initial development, results in + fewer bugs, reduces reinvention-of-the-wheel, and cuts + long-term maintenance costs. And since Boost libraries tend to + become de facto or de jure standards, many programmers are + already familiar with them. + + +Ten of the Boost libraries are included in the [C++ Standard Library's TR1](http://open-std.org/jtc1/sc22/wg21/docs/library_technical_report.html), and so are + slated for later full standardization. More Boost libraries are + in the pipeline for [TR2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1810.html). Using Boost libraries gives an + organization a head-start in adopting new technologies. + + +Many organization already use programs implemented with + Boost, like Adobe [Acrobat Reader 7.0](http://www.adobe.com/products/acrobat/readermain.html). + + +Who else is using Boost? +------------------------ + + +See the [Who's Using Boost + page](/users/uses.html) for a sampling. We don't know the exact numbers, but a + release gets around 100,000 downloads from SourceForge, and + that is only one of several distribution routes. + + +What do others say about Boost? +------------------------------- +> +> "...one of the most highly regarded and expertly designed +> C++ library projects in the world." +> +> — [Herb Sutter](http://www.gotw.ca/) and [Andrei Alexandrescu](http://en.wikipedia.org/wiki/Andrei_Alexandrescu), [C++ Coding Standards](http://safari.awprofessional.com/?XmlId=0321113586) +> +> +> +> +> "Item 55: Familiarize yourself with Boost." +> +> — [Scott Meyers](http://www.aristeia.com/), [Effective C++, 3rd Ed.](http://my.safaribooksonline.com/0321334876) +> +> +> +> +> "The obvious solution for most programmers is to use a +> library that provides an elegant and efficient platform +> independent to needed services. Examples are BOOST..." +> +> — [Bjarne Stroustrup](http://www.research.att.com/~bs/), [Abstraction, libraries, and efficiency in +> C++](http://www.research.att.com/~bs/abstraction.pdf) +> +> +> + + +How do users get support? +------------------------- + + +For relatively straightforward support needs, users rely on + the [mailing lists](/community/groups.html). One of + the advantages of Boost is the responsiveness of other users + and Boost developers. + + +What about license issues? +-------------------------- + + +Boost has its own [license](license.html), + developed with help from the Harvard Law School. The [Boost license polices](license.html) encourage both + commercial and non-commercial use, and the Boost license is not + related to the GPL or other licenses - that are sometimes seen + as business unfriendly. + + +What about other intellectual property issues? +---------------------------------------------- + + +The Boost libraries tend to be new, fresh, and creative + designs. They are not copies, clones, or derivations of + proprietary libraries. Boost has a firm policy to respect the + IP rights of others. The development of Boost libraries is + publicly documented via the mailing lists and version control + repository. The source code has been inspected by many, many + knowledgeable programmers. Each Boost file has a copyright + notice and license information. IP issues have been reviewed by + the legal teams from some of the corporations which use Boost, + and in some cases these lawyers have been kind enough to give + Boost feedback on IP issues. There are no guarantees, but those + factors all tend to reduce IP risk. + + +Why would anyone give away valuable software for free? +------------------------------------------------------ + + +Businesses and other organizations often prefer to have code + developed, maintained, and improved in the open source + community when it does not contain technology specific to their + application domain, because it allows them to focus more + development resources on their core business. + + +Individuals contribute for the technical challenge, to hone + their technical skills, for the sense of community, as part of + their graduate school programs, as a way around geographic + isolation, to enhance their employment opportunities, and as + advertisements for their consulting services. There are + probably as many reasons as there are individuals. Some of the + apparently individual contributions come from employees of + support companies with contracts from businesses or other + organizations who have an interest in seeing that a library is + well-maintained. + + +Who pays Boost's expenses? +-------------------------- + + +Boost doesn't really have any expenses! All the + infrastructure is contributed by supporters, such as the + [Open Systems + Lab](http://www.osl.iu.edu/) at Indiana University, [SourceForge](http://sourceforge.net/), + [Boost Consulting](http://www.boost-consulting.com/), [MetaCommunications](http://www.meta-comm.com/), and the individuals, + companies, and other organizations who run the regression + tests. Borland, HP, Intel, and Microsoft have contributed + compilers. And hundreds, or even thousands, of programmers + contribute their time. That's what makes Boost possible. + + + + + + + + + diff --git a/users/license.html b/users/license.html new file mode 100644 index 0000000..4657f38 --- /dev/null +++ b/users/license.html @@ -0,0 +1,342 @@ +--- +title: Boost Software License +copyright: Joe Coder 2004 - 2006. Beman Dawes, Daniel Frey, David Abrahams, 2003-2004. Rene Rivera 2004-2005. +revised: +--- + + +Boost Software License + + + +Boost Software License +====================== + +* [License text](../LICENSE_1_0.txt) +* [Introduction](#Introduction) +* [History](#History) +* [Rationale](#Rationale) +* [FAQ](#FAQ) +* [Transition](#Transition) +* [Acknowledgements](#Acknowledgements) + + +Introduction +------------ + + +The [Boost Software License](../LICENSE_1_0.txt) + specifies the terms and conditions of use for all Boost + libraries and tools. + + +History +------- + + +As Boost grew, it became unmanageable for each Boost file to + have its own license. Users complained that each license needed + to be reviewed, and that reviews were difficult or impossible + if Boost libraries contained many different licenses. Boost + moderators and maintainers spent excessive time dealing with + license issues. Boost developers often copied existing licenses + without actually knowing if the license wording met legal + needs. + + +To clarify these licensing issues, the Boost moderators + asked for help from the [Berkman Center for Internet & Society](http://cyber.law.harvard.edu) + at Harvard Law School, Cambridge, Massachusetts, USA. It was requested that a + single Boost license be developed that met the traditional + requirements that Boost licenses, particularly: + + +* Must be simple to read and understand. +* Must grant permission without fee to copy, use and modify + the software for any use. +* Must require that the license appear with all copies + [including redistributions] of the software source code. +* Must not require that the license appear with executables + or other binary uses of the library. +* Must not require that the source code be available for + execution or other binary uses of the library. + + +Additionally, other common open source licenses were studied + to see what additional issues were being treated, and additions + representing good legal practice were also requested. The + result is the [Boost Software + License](../LICENSE_1_0.txt): +``` +``` + +Rationale +--------- + + +The following rationale was provided by Devin Smith, the + lawyer who wrote the Boost Software License. It has been edited + slightly for brevity. Editorial additions are shown in square + brackets. + + +### Benefit of Common Software License + + +If one of Boost's goals is to ease use and adoption of the + various libraries made available by Boost, it does make sense + to try to standardize the licenses under which the libraries + are made available to users. (I make some recommendations about + a possible short-form license below.) + + +[Standardizing the license will not] necessarily address the + issue of satisfying corporate licensees. Each corporation will + have its own concerns, based on their own experiences with + software licensing and distribution and, if they're careful, + will want to carefully review each license, even if they've + been told that they're all standard. I would expect that, + unless we're remarkably brilliant (or lucky) in drafting the + standard Boost license, the standard license won't satisfy the + legal departments of all corporations. I imagine that some + will, for instance, absolutely insist that licensors provide a + warranty of title and provide indemnification for third-party + intellectual property infringement claims. Others may want + functional warranties. (If I were advising the corporations, I + would point out that they're not paying anything for the code + and getting such warranties from individual programmers, who + probably do not have deep pockets, is not that valuable anyway, + but other lawyers may disagree.) + + +But this can be addressed, not by trying to craft the + perfect standard license, but by informing the corporations + that they can, if they don't like the standard license, + approach the authors to negotiate a different, perhaps even + paid, license. + + +One other benefit of adopting a standard license is to help + ensure that the license accomplishes, from a legal perspective, + what the authors intend. For instance, many of the [original] + licenses for the libraries available on boost.org do not + disclaim the warranty of title, meaning that the authors could, + arguably, be sued by a user if the code infringes the rights of + a third party and the user is sued by that third party. I think + the authors probably want to disclaim this kind of + liability. + + +### Short-Form License + + +Without in anyway detracting from the draft license that's + been circulated [to Boost moderators], I'd like to propose an + alternative "short-form" license that Boost could have the + library authors adopt. David [Abrahams] has expressed a desire + to keep things as simple as possible, and to try to move away + from past practice as little as possible, and this is my + attempt at a draft. + + +This license, which is very similar to the BSD license and + the MIT license, should satisfy the Open Source Initiative's + Open Source Definition: (i) the license permits free + redistribution, (ii) the distributed code includes source code, + (iii) the license permits the creation of derivative works, + (iv) the license does not discriminate against persons or + groups, (v) the license does not discriminate against fields of + endeavor, (vi) the rights apply to all to whom the program is + redistributed, (vii) the license is not specific to a product, + and (viii) the license is technologically neutral (i.e., it + does not [require] an explicit gesture of assent in order to + establish a contract between licensor and licensee). + + +This license grants all rights under the owner's copyrights + (as well as an implied patent license), disclaims all liability + for use of the code (including intellectual property + infringement liability), and requires that all subsequent + copies of the code [except machine-executable object code], + including partial copies and derivative works, include the + license. + + +FAQ +--- + + +How should Boost + programmers apply the license to source and header + files? Add a comment based on + the following template, substituting appropriate text for the + italicized portion: +``` + +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE\_1\_0.txt or copy at +// https://www.boost.org/LICENSE\_1\_0.txt) + +``` + +Please leave an empty line before and after the above + comment block. It is fine if the copyright and license messages + are not on different lines; in no case there should be other + intervening text. Do not include "All rights reserved" + anywhere. + + +Other ways of licensing source files have been considered, + but some of them turned out to unintentionally nullify legal + elements of the license. Having fixed language for referring to + the license helps corporate legal departments evaluate the + boost distribution. Creativity in license reference language is + strongly discouraged, but judicious changes in the use of + whitespace are fine. + + +How should the + license be applied to documentation files, instead? +Very similarly to the way it is + applied to source files: the user should see the very same text + indicated in the template above, with the only difference that + both the local and the web copy of LICENSE\_1\_0.txt should be + linked to. Refer to the HTML source code of this page in case + of doubt. + + +How should Boost + programmers maintain the copyright messages? +Copyright is only claimed for changes + meeting a certain threshold of originality. Therefore, the copyright + message only covers expressions of creativity. It is up to authors of + changes to add themselves to the copyright message if they so decide. + Typically, new claimant is added when someone takes over maintenance + of a library or new version of an existing library is developed. + In principle, do not ever remove previous copyright claims - + just add new claims and/or claimants. + + +How is the Boost + license different from the [GNU General Public License (GPL)](https://opensource.org/licenses/gpl-license.php)? +The Boost license permits the creation + of derivative works for any use with + no legal requirement to release your source code. Other + differences include Boost not requiring reproduction of + copyright messages for object code redistribution, and the fact + that the Boost license is not "viral": if you distribute your + own code along with some Boost code, the Boost license applies + only to the Boost code (and modified versions thereof); you are + free to license your own code under any terms you like. The GPL + is also much longer, and thus may be harder to understand. + + +Why the phrase + "machine-executable object code generated by a source language + processor"? To distinguish + cases where we do not require reproduction of the copyrights + and license, such as object libraries, shared libraries, and + final program executables, from cases where reproduction is + still required, such as distribution of self-extracting + archives of source code or precompiled header files. More + detailed wording was rejected as not being legally necessary, + and reducing readability. + + +Why is the + "disclaimer" paragraph of the license entirely in + uppercase? Capitalization of + these particular provisions is a US legal mandate for consumer + protection. (Diane Cabell) + + +Does the copyright + and license cover interfaces too? The conceptual interface to a library isn't + covered. The particular representation expressed in the header + is covered, as is the documentation, examples, test programs, + and all the other material that goes with the library. A + different implementation is free to use the same logical + interface, however. Interface issues have been fought out in + court several times; ask a lawyer for details. + + +Why doesn't the + license prohibit the copyright holder from patenting the + covered software? No one who + distributes their code under the terms of this license could + turn around and sue a user for patent infringement. (Devin + Smith) + + +Boost's lawyers were well aware of patent provisions in + licenses like the GPL and CPL, and would have included such + provisions in the Boost license if they were believed to be + legally useful. + + +Why doesn't the + copyright message say "All rights reserved"? +Devin Smith says "I don't think it + belongs in the copyright notice for anything (software, + electronic documentation, etc.) that is being licensed. It + belongs in books that are sold where, in fact, all rights + (e.g., to reproduce the book, etc.) are being reserved in the + publisher or author. I think it shouldn't be in the BSD + license." + + +Do I have to + copyright/license trivial files? Even a test file that just contains an empty + `main()` should have a copyright. Files without + copyrights make corporate lawyers nervous, and that's a barrier + to adoption. The more of Boost is uniformly copyrighted and + licensed, the less problem people will have with mounting a + Boost release CD on a corporate server. + + +Can I use the Boost + license for my own projects outside Boost? Sure; there are no restrictions on the use of the + license itself. + + +[![Open Source (OSI) Logo](https://opensource.org/trademarks/opensource/web/opensource-110x95.png)](https://opensource.org/docs/definition.php)Is the Boost + license "[Open Source](https://opensource.org/docs/osd)"? Yes. The [Open Source Initiative](https://opensource.org/) certified the + [Boost Software License 1.0](https://opensource.org/licenses/bsl1.0.html) in early + 2008. + + +Transition +---------- + + +To ease the transition of the code base towards the new + common license, several people decided to give a [blanket + permission](/doc/libs/release/more/blanket-permission.txt) for all their contributions to use the new + license. This hopefully helps maintainers to switch to the new + license once the list contains enough names without asking over + and over again for each change. Please consider adding your + name to the list. + + +Acknowledgements +---------------- + + +Dave Abrahams led the Boost effort to develop better + licensing. The legal team was led by [Diane Cabell](https://cyber.harvard.edu/people/dcabell), Director, Clinical Programs, + [Berkman Center for Internet & Society](https://cyber.harvard.edu/), + Harvard Law School. Devin Smith, attorney, [Nixon Peabody + LLP](https://www.nixonpeabody.com/), wrote the Boost License. Eva Chan, Harvard Law School, + contributed analysis of Boost issues and drafts of various + legal documents. Boost members reviewed drafts of the license. + Beman Dawes wrote this web page. + + + + + + + + + diff --git a/users/memoriam.html b/users/memoriam.html new file mode 100644 index 0000000..7cb3d54 --- /dev/null +++ b/users/memoriam.html @@ -0,0 +1,26 @@ +--- +title: Boost Memoriam +copyright: 2020 Glen Fernande. +revised: +--- + + +Boost Memoriam + + + +Boost Memoriam +============== + +* [![-](people/beman_dawes_small.jpg)Beman Dawes](memoriam/beman_dawes.html) +* + + + + + + + + + + diff --git a/users/memoriam/beman_dawes.html b/users/memoriam/beman_dawes.html new file mode 100644 index 0000000..0d8a459 --- /dev/null +++ b/users/memoriam/beman_dawes.html @@ -0,0 +1,101 @@ +--- +title: Beman Dawes +copyright: +revised: +--- + + +Beman Dawes + + + +In Memoriam: Beman Dawes +======================== + +![-](beman_dawes.jpg) + + +[Beman + Dawes](https://www.boost.org/users/people/beman_dawes.html) passed on December first, 2020 at the age of 81 years. + He was survived by his wife Sonda. + + **Dave Abrahams:** Beman Dawes was my friend, + inspiration, and collaborator. He was a living demonstration + that collegial respect and kindness are fundamental to getting + great results. His idea for Boost blossomed into a unique + community, inventing the art of library design. RIP. + + +**Emil Dotchevski:** I talked with Beman many + times. He was always kind, and through my experience with him I + am honored to have had a chance to work with this brilliant + member of our community. He should be celebrated as one of those + little-known figures who nonetheless has had an enormous positive + impact on the world through his work. + + +**Stefanus Du Toit:** Just learned about the + passing of Beman Dawes. Beman was a truly positive and + inspirational influence on the C++ community. A rare example of + someone putting contribution to the greater good above all else. + You'll be missed, Beman. + + +**Howard Hinnant:** He was a friend. He was a + giant. He will be missed. + + +**Jon Kalb:** Beman Dawes' legacy in the C++ + community is matched by few. As a leader in the process of + defining the C++ standard, he recognized a need for high quality, + non-proprietary libraries. He saw not only that these were few, + but that there was no environment to create new ones. He created + the Boost Libraries with the goal of making high quality, + peer-reviewed, open source libraries available for every C++ + programmer and as an environment to develop candidate libraries + for standardization. He then helped launch BoostCon (now C++Now), + as a way of nurturing the community that made Boost possible and + appreciates high quality C++ libraries. He did all of this with + such humor, humility, generosity, and grace that he will be much + missed. + + +**Robert Ramey:** I do not think C++ would be + where it is today without the extraordinary accomplishments of + two particular people. Beman Dawes and David Abrahams. Before + their efforts in the late nineties C++ was suffering from a lack + of libraries which made it noncompetitive with alternatives being + promoted at the time - most notably Java and C#. These + alternatives were funded by they biggest of the big. The future + must have looked bleak to C++ fans at the time. I was looking for + an alternative to C++ when I came upon Boost with a number of + portable and indispensable libraries. Boost was founded by these + two gentleman (of complimentary personalities). That changed + everything for me - and I'm sure I'm not the only one. And I + suspect that it was responsible for changing the future of C++. + To those who believe that one man can't make a big difference - I + offer this counter example. + + +**Herb Sutter:** Beman was one of the most + important and influential C++ experts in the world, and made his + many contributions mostly behind the scenes, so that many C++ + developers have likely never heard of him. I and everyone else + who have ever benefited from any of the standardized STL, Boost, + C++Now, std::filesystem, C++98/11/14/17, and more - so, really, + most people who have ever used C++ - all owe Beman a debt of + gratitude. We miss him greatly. + + +If you’ve thoughts about Beman that you’d like to share, + please send them to + [memorial@boost.org](mailto:memorial@boost.org). + + + + + + +Copyright © 2020 Glen Fernadnes + + diff --git a/users/memoriam/beman_dawes.jpg b/users/memoriam/beman_dawes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cdb895248621dec00597c849abc3ca9c610a9a17 GIT binary patch literal 49124 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 + you should use + to retrieve boost releases. + + Note: The pre-1.64 Boost releases are still available via Sourceforge. + + Thank you to JFrog for all your past and current support. + + + + + + + + + + + + diff --git a/users/news/boost_locale_security_notice.html b/users/news/boost_locale_security_notice.html new file mode 100644 index 0000000..dba1530 --- /dev/null +++ b/users/news/boost_locale_security_notice.html @@ -0,0 +1,53 @@ +--- +title: Boost.Locale security notice +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Boost.Locale security notice + + + + + + +Boost.Locale security notice +============================ + +Boost.Locale security notice +---------------------------- + + +February 1st, 2013 10:08 GMT + + + Boost.Locale library in Boost 1.48 to 1.52 including has a security flaw. + +`boost::locale::utf::utf\_traits` + accepted some invalid UTF-8 sequences. + + Applications that used these functions for UTF-8 input validation could expose + themselves to security threats as invalid UTF-8 sequece would be considered as + valid. + + This bug is fixed in upcoming Boost 1.53. + + For more details see: [#7743](https://svn.boost.org/trac/boost/ticket/7743) + + Users who can't upgrade to the latest versions may apply the following patch + to fix the problem. + + + + + + + + + + + + + + diff --git a/users/news/index.html b/users/news/index.html new file mode 100644 index 0000000..6f00eb4 --- /dev/null +++ b/users/news/index.html @@ -0,0 +1,25 @@ +--- +title: Boost News +copyright: Rene Rivera 2006. +revised: +--- + + +Boost News + + + + + +Boost News +========== + + + + + + + + + + diff --git a/users/news/old_compilers.html b/users/news/old_compilers.html new file mode 100644 index 0000000..5f8c93f --- /dev/null +++ b/users/news/old_compilers.html @@ -0,0 +1,106 @@ +--- +title: Old compilers +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Old compilers + + + + + + +Old compilers +============= + +Old compilers +------------- + + +August 5th, 2013 20:00 GMT + + + I just sent an email to user list asking if anyone is using old compilers, I'll + repeat it here: + +> +> +> Hello all, +> +> +> +> +> There has been some discussion on the development list about dropping all support +> for old C++ compilers. This will allow us to remove a lot of workarounds and +> simplify the code but before doing so it's a good idea to find out if anyone +> is still using them. Using boost with these compilers will cause a compile +> error in the config library (you can work round that using a custom configuration, +> but it's unlikely you'll be able to get much to work). The currently proposed +> versions for removing support are: +> +> +> +> * Digital Mars 8.40 and earlier +> * Visual C++ 7.0 and earlier +> * GCC 3.2 and earlier +> * Intel C++ 5.0 and earlier +> +> +> +> Which is, I think, a very cautious list. There's also a good chance that we +> might want to remove support for Borland C++ 5.x. Is there anyone still using +> those compilers? +> +> +> +> +> Just to be clear, this doesn't mean we'll be fully supporting all compilers +> later than these. Old compilers such as Visual C++ 7.1 and gcc 3.4 won't have +> a config error and we won't deliberately remove support, but support will be +> patchy. Many libraries (especially new ones) don't support those compilers, +> and we also don't have any formal testing for them, so if a new change breaks +> something, it might not be noticed. +> +> +> +> +> If you are still using compilers which are a little more recent than the ones +> listed above, it might still be worth mentioning in case we consider removing +> support for them in the future. +> +> +> +> +> Thanks in advance for any response, +> +> +> +> +> Daniel James +> +> +> +> +**Update:** I had a few responses, but none were + opposed to this change, so I made it in trunk a little while ago. It should be + included in the next release. + + There was some concern that we would remove support for later compilers (e.g. + Visual Studio 2008, aka. Visual C++ 9.0). We have no such plans, this change + is only for very old compilers. As always support across Boost libraries is not + uniform, but most library authors do try to support as wide a range of compilers + as is feasible. + + + + + + + + + + + + diff --git a/users/news/website_1_0_launch.html b/users/news/website_1_0_launch.html new file mode 100644 index 0000000..4880eb2 --- /dev/null +++ b/users/news/website_1_0_launch.html @@ -0,0 +1,41 @@ +--- +title: Website 1.0 Launch +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Website 1.0 Launch + + + + + + +Website 1.0 Launch +================== + +Website 1.0 Launch +------------------ + + +March 28th, 2008 16:00 GMT + + + After much work the new Boost web site is here. Like all software the site has + bugs, so be gentle and reports problems in the bug tracker. Much thanks to the + Boost community for the help in testing, criticizing, and writing. But I especially + appreciate all the work Daniel James to translate content without which the web + site would be a much emptier place. + + + + + + + + + + + + diff --git a/users/people.html b/users/people.html new file mode 100644 index 0000000..e5b2f36 --- /dev/null +++ b/users/people.html @@ -0,0 +1,108 @@ +--- +title: Boost People +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2005. +revised: +--- + + +Boost People + + + +Boost People +============ + +* [![-](people/dave_abrahams_small.jpg)Dave + Abrahams](people/dave_abrahams.html) +* [![-](people/darin_adler_small.jpg)Darin Adler](people/darin_adler.html) +* [![-](people/ed_brey_small.jpg)Ed Brey](people/ed_brey.html) +* [![-](people/herve_bronnimann_small.jpg)Hervé + Brönnimann](people/herve_bronnimann.html) +* [![-](people/fernando_cacciola_small.jpg)Fernando + Cacciola](people/fernando_cacciola.html) +* [![-](people/greg_colvin_small.jpg)Greg Colvin](people/greg_colvin.html) +* [![-](people/beman_dawes_small.jpg)Beman Dawes](people/beman_dawes.html) +* [![-](people/joel_de_guzman_small.jpg)Joel de + Guzman](people/joel_de_guzman.html) +* [![-](people/peter_dimov_small.jpg)Peter Dimov](people/peter_dimov.html) +* [![-](people/pavol_droba_small.jpg)Pavol Droba](people/pavol_droba.html) +* [![-](people/glen_fernandes_small.jpg)Glen + Fernandes](people/glen_fernandes.html) +* [![-](people/eric_friedman_small.jpg)Eric + Friedman](people/eric_friedman.html) +* [![-](people/ronald_garcia_small.jpg)Ron Garcia](people/ronald_garcia.html) +* [![-](people/jeff_garland_small.jpg)Jeff + Garland](people/jeff_garland.html) +* [![-](people/jan_gaspar_small.jpg)Jan Gaspar](people/jan_gaspar.html) +* [![-](people/doug_gregor_small.jpg)Doug Gregor](people/doug_gregor.html) +* [![-](people/ralf_w_grosse_kunstleve_sm.jpg)Ralf W + Grosse-Kunstleve](people/ralf_w_grosse_kunstleve.html) +* [![-](people/aleksey_gurtovoy_small.jpg)Aleksey + Gurtovoy](people/aleksey_gurtovoy.html) +* [![-](people/kevlin_henney_small.jpg)Kevlin + Henney](people/kevlin_henney.html) +* [![-](people/howard_hinnant_small.jpg)Howard + Hinnant](people/howard_hinnant.html) +* [![-](people/hubert_holin_small.jpg)Hubert + Holin](people/hubert_holin.html) +* [![-](people/andreas_huber_small.jpg)Andreas + Huber](people/andreas_huber.html) +* [![-](people/nicolai_josuttis_small.jpg)Nicolai + Josuttis](http://www.josuttis.com) +* [![-](people/jaakko_jarvi_small.jpg)Jaakko + Järvi](people/jaakko_jarvi.html) +* [![-](people/hartmut_kaiser_small.jpg)Hartmut + Kaiser](people/hartmut_kaiser.html) +* [![-](people/vesa_karvonen_small.jpg)Vesa + Karvonen](people/vesa_karvonen.html) +* [![-](people/william_kempf_small.jpg)William + Kempf](people/william_kempf.html) +* [![-](people/samuel_krempp_small.jpg)Samuel + Krempp](people/samuel_krempp.html) +* [![-](people/dietmar_kuehl_small.jpg)Dietmar + Kühl](people/dietmar_kuehl.html) +* [![-](people/liequan_lee_small.jpg)Lie-Quan + Lee](people/liequan_lee.html) +* [![-](people/joaquin_lopez_small.jpg)Joaquín M + López Muñoz](people/joaquin_lopez.html) +* [![-](people/john_maddock_small.jpg)John + Maddock](people/john_maddock.html) +* [![-](people/mat_marcus_small.jpg)Mat Marcus](people/mat_marcus.html) +* [![-](people/jens_maurer_small.jpg)Jens Maurer](people/jens_maurer.html) +* [![-](people/paul_mensonides_small.jpg)Paul + Mensonides](people/paul_mensonides.html) +* [![-](people/paul_moore_small.jpg)Paul Moore](people/paul_moore.html) +* [![-](people/mac_murrett_small.jpg)Mac Murrett](people/mac_murrett.html) +* [![-](people/thorsten_ottosen_small.jpg)Thorsten + Ottosen](people/thorsten_ottosen.html) +* [![-](people/antony_polukhin_small.jpg)Antony Polukhin](people/antony_polukhin.html) +* [![-](people/gary_powell_small.jpg)Gary Powell](people/gary_powell.html) +* [![-](people/vladimir_prus_small.jpg)Vladimir + Prus](people/vladimir_prus.html) +* [![-](people/robert_ramey_small.jpg)Robert + Ramey](people/robert_ramey.html) +* [![-](people/rene_rivera.jpg)René + Rivera](people/rene_rivera.html) +* [![-](people/mark_rodgers_small.jpg)Mark + Rodgers](people/mark_rodgers.html) +* [![-](people/gennadiy_rozental_small.jpg)Gennadiy + Rozental](people/gennadiy_rozental.html) +* [![-](people/jeremy_siek_small.jpg)Jeremy Siek](people/jeremy_siek.html) +* [![-](people/jonathan_turkanis_small.jpg)Jonathan + Turkanis](people/jonathan_turkanis.html) +* [![-](people/daryle_walker_small.jpg)Daryle + Walker](people/daryle_walker.html) +* [![-](people/anthony_williams.jpg)Anthony + Williams](people/anthony_williams.html) +* [![-](people/thomas_witt_small.jpg)Thomas Witt](people/thomas_witt.html) +* + + + + + + + + + + diff --git a/users/people/_template_.html b/users/people/_template_.html new file mode 100644 index 0000000..e45abac --- /dev/null +++ b/users/people/_template_.html @@ -0,0 +1,26 @@ +--- +title: John Doe +copyright: Rene Rivera 2007. +revised: +--- + + +John Doe + + + +John Doe +======== + +![-](dave_abrahams.jpg) +[John Doe](mailto:jane.doe@?.?) is + ... + + + + + + + + + diff --git a/users/people/aleksey_gurtovoy.html b/users/people/aleksey_gurtovoy.html new file mode 100644 index 0000000..161d8f6 --- /dev/null +++ b/users/people/aleksey_gurtovoy.html @@ -0,0 +1,42 @@ +--- +title: Aleksey Gurtovoy +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Aleksey Gurtovoy + + + +Aleksey Gurtovoy +================ + +Aleksey Gurtovoy is an entrepreneur, engineer and product + builder. He is the original author of the Boost Metaprogramming + Library and a co-author, with + [David Abrahams](./dave_abrahams.html), of + [*C++ Template Metaprogramming*](https://www.amazon.com/Template-Metaprogramming-Concepts-Techniques-Beyond/dp/0321227255). + + +He has been working with C++ since 1993, and holds a M.S. + degree in computer science from Krasnoyarsk State Technical + University, Russia. + + +You can contact him by email at + [agurtovoy@acm.org](mailto:agurtovoy@acm.org) + and follow him on Twitter at + [@agurtovoy](https://twitter.com/agurtovoy). + + + + + + +Copyright © 2004-2016 Aleksey Gurtovoy + + + + + diff --git a/users/people/aleksey_gurtovoy.jpg b/users/people/aleksey_gurtovoy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd4927150251e755b2a7a9941150680474707e76 GIT binary patch literal 12871 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 literal 0 HcmV?d00001 diff --git a/users/people/aleksey_gurtovoy_small.jpg b/users/people/aleksey_gurtovoy_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4cffe0ece6d75288cc9f0188c2d115e134582fa GIT binary patch literal 10002 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 LUQ>JO|K9`vS1g}z literal 0 HcmV?d00001 diff --git a/users/people/andreas_huber.html b/users/people/andreas_huber.html new file mode 100644 index 0000000..ce6164c --- /dev/null +++ b/users/people/andreas_huber.html @@ -0,0 +1,42 @@ +--- +title: Andreas Huber +copyright: Rene Rivera 2007. +revised: 2009-01-17 22:14:11 +0100 +--- + + +Andreas Huber + + + +Andreas Huber +============= + +![-](andreas_huber.jpg) + Andreas Huber is currently on a parental leave. At former + companies Andreas has been developing systems ranging from PC + control software for machinery to custom-made CRM applications. + In recent years, more and more of his professional work has + shifted to the .NET platform (C# and C++/CLI). + + +In his spare time Andreas still enjoys to program in + standard C++, which is how [Boost.Statechart](/doc/libs/release/libs/statechart/doc/index.html) + came into being. His other hobbies include swimming, camping, + hiking and traveling. + + +Andreas lives in Zurich, Switzerland with his wife Ruth and + son Marius. + + + + + + +Copyright © 2006-2009 Andreas Huber Dönni + + + + + diff --git a/users/people/andreas_huber.jpg b/users/people/andreas_huber.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61cd8cf96711e478fb3758265ca6e67a490fbd37 GIT binary patch literal 95642 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%0AKD`Ifnd>(_Ng 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

  • 6I_q~`t^^m?-tKK?Y)r0End*iZqrG??CC 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⪼5f{U&S&P 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 literal 0 HcmV?d00001 diff --git a/users/people/andreas_huber_small.jpg b/users/people/andreas_huber_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb20d6737df9ef58b1a6d56c8c88ad074a512be6 GIT binary patch literal 2413 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 literal 0 HcmV?d00001 diff --git a/users/people/anonymous_small.jpg b/users/people/anonymous_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aaa75c70e083568a801d1bede072484242a68455 GIT binary patch literal 6328 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 CK4Ad> literal 0 HcmV?d00001 diff --git a/users/people/anthony_williams_large.jpg b/users/people/anthony_williams_large.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33fff45f567f0fb004c2171b41a3a45a78be45d1 GIT binary patch literal 31351 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 XqtitPXEa}DP7Hn2wZkoT@&B6uAWnRt literal 0 HcmV?d00001 diff --git a/users/people/antony_polukhin.html b/users/people/antony_polukhin.html new file mode 100644 index 0000000..9b7e5a8 --- /dev/null +++ b/users/people/antony_polukhin.html @@ -0,0 +1,49 @@ +--- +title: Antony polukhin +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Antony polukhin + + + +Antony Polukhin +=============== + +![-](antony_polukhin.jpg)Antony Polukhin is a software developer. + + +That's it. + + +Well, if we go to his website [apolukhin.github.io](https://apolukhin.github.io/) we would notice that he represents + Russia in ISO WG21 C++. We would also note that he has authored many Boost + libraries and maintains even more. + + +He also works for Yandex.Taxi Ltd., helps Russian speaking people with + C++ standardization proposals, continues to contribute to the open source + and to the C++ language in general. + + +Looks like he also authored a bunch of books and articles, gave quite a lot of talks in different languages but mostly on the same programming language. + + +Oh, he also does consulting on C++. It's on the web site! + + +He is married, with two children. + + + + +Revised $Date:$ + +Copyright © 2020 Antony Polukhin + + + + + diff --git a/users/people/antony_polukhin.jpg b/users/people/antony_polukhin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f22eefeefd7e289ed5329332bd4852808daafd1 GIT binary patch literal 42970 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 literal 0 HcmV?d00001 diff --git a/users/people/antony_polukhin_small.jpg b/users/people/antony_polukhin_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be9cc5242cfe3afe4fd15d792d8fba7916987f72 GIT binary patch literal 3475 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 literal 0 HcmV?d00001 diff --git a/users/people/beman_dawes.html b/users/people/beman_dawes.html new file mode 100644 index 0000000..ded0e33 --- /dev/null +++ b/users/people/beman_dawes.html @@ -0,0 +1,55 @@ +--- +title: Beman Dawes +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Beman Dawes + + + +Beman Dawes +=========== + +![-](beman_dawes.jpg) Beman + Dawes was a software developer from Virginia in the United + States and the founder of boost.org and BoostCon (now known as + C++Now). + + +He was the author of the StreetQuick® geographic atlas + library used by digital map publishers to help people get + really, really, lost. + + +He wrote his first computer program 50 years ago, and did + not mourn the passing of [bi-quinary](http://www.mta.ca/~amiller/ibm650/ibm650.htm) arithmetic. + + +Beman was a voting member of the ISO C++ Standards + Committee for twenty eight years, and chaired the Library Working + Group for five years. + + +He enjoyed travel, sailing, hiking, and biking. + + +Beman passed away on December first, 2020 and was survived by + his wife Sonda. + + +[His + memoriam.](https://www.boost.org/users/memoriam/beman_dawes.html) + + + + + + +Copyright © 2004 Beman Dawes + + + + + diff --git a/users/people/beman_dawes.jpg b/users/people/beman_dawes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6d475683f0e2aaf5334e1fbd9b191cee1564a52 GIT binary patch literal 46973 zcmex=P%zdrV6brV^krdTU|?Y2 zx*)^Ez`(@7B*Rp}Q0t$Un3tTNoUNk}mRXdZnU|TUpsV1USX7jmnxdm%W~5M=npmWe zpOd1Ho0zAgkd~95Sdy8Su8^OnkeQd3lUS0Nl#{AZl3%H(px_&%U}$Enpx{-SQ>kEN zU|`J4wK6zAFC|gIC9yoUSV3PQBqLS9GdD3kRUtgTD7#pODT;vu<^ma}cm|Fzs3T;U zQWh$;n(h!&^jW#$(tBxjanR;A|YC?uw5=B0zw@)einDHIgtm!u|_Waj6AgxHHx zOEQa6Q$TFNoYc(X(xOxyg`(7)#0sb;(elKS)FK@P=Zw_i#Ddhs>{JD(#7dBQ@q*O+ zf}B(xh5Wo!9fi!il+3cslv0pOOBmz`g+dAgb7-)m4AXW7cISY2LnBio8K&oK49H<; zu5VKSODhvoD^oLt0AB@#kkpD2h2X@p)D%$64mXU`|7KRkmLu8!mR1IaBiR3@ z237_mIsQ#8tV~V7@$Z_F3C;fsiNy+53NBVLzLk&?wm8NuKPM%%NWniZH73B^(Ad(z z$iPQ0s~~;I6cfn#-$dWY0#yE)DwtUr8d;edgZ=NEUr?zKl23%s^}GVyhm6Oe4wYeg z!K@6aE?rWKlZ!G7KsA*Wr@v36Z$N0Uf{UlSXNaSZg0rKqYmlP?4DfRK=BK3QSaG`Q z8X4$-2tP0xz{}-dl$n}Wk_a)zP=S{#D7830rxeOJG0`(HFhCInRl!!AMhd)K!TD(= z<%vb9R-8tbx`u`ZMlkEpX6g#T6_uZ# ztKgHGmtK-##c6D$keiESQb19DdQoC7NM%uOVh%5tXRyCQa6xKniWR2?$XjqboiY=P ztvC&!zV%HlNi71kX+Xhd#Tk%TQj%JfhuyN!;?yGN{M_8syb`bjjExjV5j{fy6pzmN zIr&Aw1&PV2R-B+j3~JjlzXfL+0Z{9gfsp~!4rTz+AUPIZupFrMTLI!Te+Kh8z$60$ zq;1Rv<}pHe>H=UM7Xu@hW?*0f>-!4kc`)dwr7U3=9kfAP<5m27#*#5)6!JJrNHE4+e(+{}|NVGILTD%8N2f zN>cL_k}4G(Q}UBi72y4o6$++$2LInN@PWk{QW`*Z{J+i6!ob79!NJMF!^z1b$j!wq zD9X>n!!If!EG#N4EFs7P22cvj#vmAZxw(1ycm??Q1Vs4w_(VVip9n;YAcW$9QW$!{ z0{;&%2y!qKFoZHQDlsq#GBOJ?{=dt>!oc?b2%|j%10yRV7=VI?fq{XUfsu)Ym5rT) zlZ%@XU6PT3i5Vs-z`)4D$jrpT#LCXb!OF~I%*enb$jqWBWXS3mm?*4N*l5HiGI8NX zCuJ4Upo2-qCPhsbo!M0<1%G(>F}c`OY|*A>HJ8aDDXxbWmzarP3VoFNX>-fr%cYM$ zyQxoE(z<2pkteH`bX=QEGmTfzB?b$bT_we-c_UX&FAHV+myC4G-6C)D~ z3)oHUY^Uu{Z`M7Ags|8Z}N70lDB{(8UkNDoGEEnkG31izXMFd{kuvIe=Zw z^w1@j$svoyQ(QyMN>U%eoq*c~>If(Nzs11A47O8{!JgsHu6FUZ-VGMhHo5n>nD)99 zu3eja=hAggxy9yu_LGiF&HlYgN9`Cx+53z?_ZjLds{b>b3*z7VcA9*_m3}|v#xJwH z_n!^gsP}wxKwq?T0TaQe$JgsWqv(1TC0*|GBFx;>IYcl1`%@udtcF7)Mk(Ipva><8l0uOFf z2q>7}sfl{&Q4tX<$a1pUQU1%#{|vdy?i{$*X8WYi+{FE_y!-7xdsk}CRNZiF?&Kpv zj=#74zEmJ2<&gcm$@2GhQ~R<^DT@cdzSw$l?@h!|9ICW6zS=T-%ej1QT&C)gIDn9xj$#;-~Ltq;NrTM zGfS^Me`{vmv8LBS_}%q?OD&!@Oz2rIsJz9K;XgyyF(r=;Qb&9Ev(G)Zamciubwl2z zmbd5Ie}<#WwoLbqUudvKW0>y&el&}1YEWrzr+8&Zg$=Iw+o+GRE2H6eCzv$O}ovu-g{oxJMS6W_OvfaI*oS~ zA{n>#=Q&Xvq_eUx6UVTu*^$5VdP{i75Dgis=UwRe>^uh7Mu1hpEsT_W?vdR`#*zs_`dz;V@l(r>o%mN zMfR52N=)njkhk!`MD>Dd-R-G;>wo%Ii>ds~eEOp=(l4AbxxFt?NyYuvPkZ;)jct8a z47P2#rJEjUZ`>a7sNU(&rEllf-jTQ;oLyfVS{iA>+rRS1yUJ-dQv}$hOy90Pni6z= zP5I8=bFU(m+V*U@>g=ZKx-0izo8g-q@1NZM<+@J8+IiOTZ3?eh>Ry+<|5v*I`n~Oj zLdh#1t<`Ndu}Iw-x8>j!@jW-LZJ7Ay@w`iq7yNm{0cnQ`mc&)ocN z&)x*z_rLz)3Y~E3!0A$lUUTmSuisofQq>p4>>~R*OySL! z+kIggr|!QB&tP5Psqk0a{HL|-n~;4QL*3kc>*OL&~3jK>@?Qj0F zu79a#KkMo9lb?f5xBS}R(I@dM{f(dD6xE~u&ecdt2dv~1E-Afo|<&!zvK^4|Vpe{jw6=-~KY>47#(Zr7RZ-D2XmMi>0H^*g%sU7B$N z@A1uH8|t1}pWnA@|AX)QcGb1YO|4%X8ue^8xAU7qsq9_+?{?pKRvqsAVSVwtjgQ({ za^{qO_7eX3@$~P@Q*IP9sPFymz4P|-!jHH4`rB83*}r9y_=>+DUj-hQd)a4Gwq%RM z{r{I<|5CrT?wF+5mZsMnDkcUy7jE1?-T38nQ-9+HGPh&?GXz|XWGj*0zga!+{!{Ib z(XRf-*X-M^*wD)?x!{|b?V7N6Wyi!_a-_F*C=_kl@af~T$~AM2yjzfzV88ZO{L&Zk z{hB=<{nuBlzxc57*1mNc+Ja|KFP(jR>y5W-8rj{m%s1cud42Qcu)=@qOP(cO_bgm_ zwXUU1R zTTAqA?b+gur(NeSDwX8h`aSwvoBj3GKj-^@+4?JfQEdJ4DaTCTF5CX@_Re*Bd`!xR z?l0Q-^G(rwQ%ko%af#zskN%!x{o%v9MutG^tgTa%qaKENOMT4WmR{WWG4apU=E<&K z@4S-w9R14vY(tdngYOpX#>uzeN1H`XxxRJHq3(oP=U1H&JiYCAUC)BjKgqewhE2LF z*y66`US0B6_nTO?cGcDoJI~7*w(BfNJ*uB)FsJC3{egdbmaIA89r4aCUHZ*U;r(xU z@BY4&RDbc;?(*D!r#!bk@xPe&j$zuF`uO_G|D3#oZfO3${37eMdvZcp5*H@nJ{cSuJvU)p@jZQlFfm$vKvo;JG~^)x@#m*wrPkE+Ys zuKkw1{W+_6&c@G0pFg~v9`##G`H!-GqMUT}%S+elXD2N_^}E2*Me(ql-lRu@593`L zJgcrh`|@sTPe$?Q4et`FZ|SHmdoJ|cbD!R_^MTKQ-v8h=_xP&Ps`>4g-X`mPx$`Vl zz`N7#)|%}GvC}v9)bGChukb&^1I_gpLkxDkILXd>jeCyE?rPa=6S-%M0Xd@|#LTD85s>A&pH_{})oF4AWyGsoIpW$}N8r79B`6=d~S*){*u zmAtH*7Z)G8^QZkoX@_iWh1W0lUlWhcF0ZS9aqaP|BQLhTKdydJPj1cLbBcee*4>N! z@}J?*n~3jU|1CN;DU+pfjYa>1ubs26?^@ccVmNinzv7d18{b~OvB}@?+>_IiGdeE5 z)>W}DzjW((6LYZj2mZy6(l@KiUt9C;7T*J#trwZ@t-3Lh`TW%9`@`)vmag$zb}=@0 zx9oq0^C9PR>JJ&0Z!X&Xb^gjNvA%y5znR1Dp_y)D^04T6oEBV{m>@X&LX2NQGpk7q@c0 z&zG;(&)#cRf3*IPp60jod-lE)zMI~=yW|baynAO?J1>9GZe#aBaS7MqZs!tt&(`1D zcA7uj(|L4q&t%JqPEl9t4^1jg>F8y2UQr$Yb8q^sqtfg*JoLr$O5U*4wfrkz{qFDE z`ST_n|FT&<|CUj$#eDZG-_Cz6ud18>yq0C!U+*2aKW0?fl>d?ce`V*y-sBWEtv=T^>4c4Q?D~%QAI1;%RBT?N>}Zdh$+e-^DlsDZ`_;9hl=U$w!|1cW6~*Mdzu&OYUFl-z)oEocT~p zr(XBQBi;p*t0OKiyC&9l#(#JD{_<~E-X2@wd5b~GbMl%G^`)m6&m`YEt-~_G-m^cs zWZu1Rp-F{))^o*D?s3<3Y&^JR{*+ZQM;cGQ+N=G&{$2QEwO-i^#%Pil*0UX z@!PDOea|*7+%j#)YlWs4g8v!VrT;Umn4Ddlu%pRc`q=ziH_oo;+xF?~)s55lmC7*G z*Iy~W6eY7pgOht@MdsiC43nkBB1>#->Up1RUvqczxANTH-L=Ns>gz90nOwW*?fo;m zl58#Hy?=fF5)>X0|NrX#Z-%L@SNCq+rm%I|ww21?qjz2V&yeVmaP4`d>-&AnL$2-J zJwG7%$2w zecO88nRffltN9B0&y^jo-mVclfxFh=KZCn}VQS5PhB@`_Zv)QRICRF(DgDndm*Z%~ zvpriO!9DlP8-`d;tYnI(9Z|nDLT6c8o&c6Q7Z|<~YEn@uYXunIM zUh~%6t(P8fh;BGvR1tZpMdwaYa!;u#XTj7BuXa8q#3%proyySuu=W`GH!dp+5 zo)$_lH{G&Sj?<&Q<+!2yw|L>;ORLM5zD~)R*(sfTyzKrTUe)~TC+E(a(fKQO@voDb zFO&b@gp3YB#(CJm9eqYdhX0RvB0Qa);{$^H-8_9<85kKE7 z+?^C6BBK=8&oMADa5Atl7&0&JP)bwKPS2-^X~PRY$nVPIeaxw#-EHwDB#!oa}LQC13?b7b~mU|?t~%S

    !vK}Zv;T92809T2dfn=W^$Ub=3DY&GjC6?xtD1cIRa(+&JX^}!PX#7<{7d;V^ ztr5vtNbb-HN=-{GO3h17RS3&WEeDO#JLl)6WP)Za6f*O0#W0!LklX-bLeez@1B39A ze+(k=dJF>RMHraho?&1S=4N1ynFkuDgvXl?XBY!0=Y`8ZhopOu3E-3gW*`Wreg*~x zrsB+WaQbl$3QY^gR&(9D+3n;KZ6K^B!e7-GJ^(#E`t$+IfFHW1A{Ar7lS`T z2ty=8978fg2171G5komc4MQVC8$&n41cs>$vl!+xEMZv5u#RC9!*+%}3iD9k9yD9@O$gIn3 z!R*ZJ&m6^^#$3c)$K1s{jd>CCI_6!>$C)oPKVW{t{F8-^MVLi_MVG~z#e*f3C7Gp= zrH-YCWfsc{mTfFYST3_XWck4IkCm5IhE<|CdQ`DX3plp7Ri>yR?XJKHkWNZ+X1$VY>(N#va_>GvTL*3viq|qvX`*8vCm{* z!@i&W68ls39~|5q@*GASZX8h@c^pj~(>PXf?Blq^@tor~rvRrarxm9^X9{N}XFul> z&Rv}6IiGU=<`U#m=d$Gr;mYD_8!)@*d{B$NPg%m`{(-lP`s@ zo^LkaHoi-I@Ax_SRrwwH+W?^MvXW?YwX5l5mM}?n?u!*RPc#33+ zbc?JNIVbW#R7liBG)%NYbhhYT(FbD8VrpWZVmV^{Vw=RSiTx6n6?YU*74H;ZCw@u% zyM(lagG8!Cm&AIBs}jE?6(n6Hvn3}=ZkN0(#UiC86)06MHBaiO)Ej9LX=~|Z=`QI_ z(zj%oWVB?0WU6Hr%bbzYIXrjNbj)&Gu{C;Q(GP!A{!*d53g7!Wu+@L7;yP)*SBVBz5S;8nrjLYzYS zLvDv^gqDUL3gZup30oQVJ=`UHQuu=i{fOF#(~(k{<=Ovp!gJQ= za^xoD?#vU)%g#HJFPC4Df3ZNjpsnCRp;h73!Vg8>MazmAi(`v-l!%lRl$oz>sY(6j)dPUt3Yz^>*v_`5i1BnH}dk zjXP&{{_9HVI@N8^J+1psPjb(xUc=rQz5n~t`p)&6_0OBYHX(1qwTboFgYO!?XGO1=ejWxZ?bZoS>h_bBd}y;pQ^ z|30pLE&KlOuiF3hK*51G2h$HeJ`{iG_Th-bSB?Z8Id|0i=!s))#||HNJih;g?TI}n ztxoPdWpQfzX|vPY&X}Irde-#p)^ld(ww*UWzvF`Cg-X)3JFIuQ?h4$Uc2DNsqWhZn*FP|Ou=ka4Qbm5aS^{rkK-|F3t@}DOLZ|*=rEB{kPJ?whJ zqnIea1)l#IR=Td)xS;Fw4EFSl`j<+}Bt?Y|zOqk##@Ji`Ni)gQ1BENzvHJ=HU6Xd-`M$}n?_T{&b^h83&#%N;?{oRjkjZ;}=P}o! z>qXq2{~7ixg(uItaPe*Cm8MI*n%(cW2xJx{%64epdaW}#F?(M@*QdkMNhhBl<$bjB zJHz1{$A1R|1-?s}z#+pqMO|=*#Ag4qjJ)4s6d11aT~PF~y1w~t{Fb_sj{gixo=n-@ z9lQEwO69g-%Nq0e+g7FU zdoez8>3{3xw`AH|owaM&Uv3MT^*gU*N0=SU{0Chzr)I9WWy98}9UOk~dUnpe^BgRT z*rstzx@^-hwYTv5#@V;;SoHsX<&$0*W4)tf!laqDXLK(fFV9d>TRUy%lId&{@AUtf zRZ&>J>+U>-kN+7wyHf7|TwuHR%SBe*=r=ieM%KF><~#|JsrURK#Isz~yWGM+_$KRb zHQ9)iY=w;a7fTn-oSm7n_el1inSVN)H@+9%$MHC4t4qqXZBiH9@Be3TPny0u;rb;# z_RlT+f4V0I&5b=LaGmkPRmZPy6T}2KY`)t+)8^fM`ylg)tc5I0+2y+raXMY;ndFi8 zobBKDl>2F`(rb2nw+=bH#!7JK-5>c+1FGkkY??0k=!V8hzauIqHyqDwncH{&+@|Cs z3ezKGO~tqF-{quna+iXE@FPd>(5Tk3EltM{*!FX@XW0Gb{K(vLzI59rd2jzi?ti_c zGuL>O^0LS|_kZ;Cws<_=U{mOtIcZ{mUf3@2CK4bbf==agwTVX)t{dfJ`q&ND8tAE`Z| zx$Dva@0bS<>PdRo_ifIcwyr&*c2R^XxR{e+Bb@`FeW# zd1NR4zU8i*<9}~q?%JK3-!mWFWUnM>$v){@^O0Qp=bG0}-+pJdZS$YCn*xK?jI*6* z=+5W3`!jHHt$TIK_i1li!>&Ke(pH#wcOCn`lCoAt(b8|?8LvzK|#^0x4!)=pd;I% z(EKl}*EhxW9qT=oX;TjFoAQQrNnOr=h9|*Bk3L=ab+~`t{4Z-feQx%*t88tnQTfkM zHQQEgcixR3lM;P@$Ntxu-{_l<_fp2;L8wa?Lcwr2WRHlW&y&{p)%3SL*VLA40*=fqHj$?Pho~FT{1* zHRXhik1X}~Cv8}IaK{0?D-{iM-m2eW?s%r68J1J0M{w2oo`r}7)`}h@~G}TX$xiIrvZiU|Mr(2Kke+~*-)pmfd_)m}UPr>ceUR5}z z?w;eY-udD7__uyfW@)Xxpjm7`#l!yRB(K<;eskFxe)bA)`gZfM4FCJ0`j^XVr&_#D z$oP9>!V;}zhjo-JE~;#-Tw|TRwfw8oMBQwM3&MvR{xh5jvUu40?N;=<<<9muHF77^ zUKf`;p2IR>;(`6QzHK}BC_z*>AcL{z_VYzk_Lw_ex8APEbF<|4s&7BGoYG2TKCjZ> z7*tU3$p5HAg!Gbz>UR^SuMB*8VBWnaQ%>yIA@G*JseReK#LbU67M@W`v3{o~(^lYyE%PCW) zZk-$R&3*pG{|u{qZoN)kx?si!g=KszC+?2?``rJp;7;!=OApM7yL))c@xKa_rtP}K z(zau&)SMG+r{>!4dcg5Vs^iVHw~7zn{*aV^p6m46O;g}9`|+^(pJz>7Ssogxo~wI( z&&2->wLVd&X2m>=cF(->pW))ICD$V!zO5*(_CEQaVWmfY;rD4fD*XR>u2{*Pv+BCD zPPM-v3;(ZNm)vqs#fNL(crbs;_4y{h^ktr$gQS0ScK@>+dq(;1Po`!{oxY=dmCc5; z|Mw^P?Z%iRBZP0re3GTYN$s4>Xi>+Y?%3ziq>zxBz|PqDi2 z$tL3Re}+2Gvw9cT-FbLJHlQpde&4A(*L#@{&flxFG+5;3)-~zVj!l#Q6?ddCxADHi z_J7m=RR>hC-+Fbr{k;cAefp|$(|g^!IsY@9xY0D*Z|f%R!yP}||3*&|5Bn<}y?=`n zuhDg}z3)C1cKl~BHC?lFnPc|xPh0H2NOeuxwQ^E+ruqh!`M;Ja>}=V^s$_Gx@jt_& zCs}8slMZh`p1uG5QODz=`<~hS`Fm2cYBPw z4Czu#>c90g=4XDD;g*xKZqKNHv1Hll`_T;g^|E*DKTlD*6P_h=p=S3#%{jN$2tATv z&oKNM;#&IY)GYS&?Eeh4o<2wOZ*d6On>4xqJmol3b$PKAdq>%&iIYxje7d0Sb%*?y zrf8{(t>=EWt1LCza835IolwkzZ)WGXJ8Vun_J5wpBFn$??w0-&i!NMvS+nJ*u>6-v zLDp(*&JiAOT-<-I$T?jo5Si@p?xNO3)k|6mKg2oZn zdUnqKpHI!)@vfc8orR&kJJ5D_689eF^S=dxqg?W`lTW$)XSk?2=eiIF!%vF|-LJP! zy6o*JC;!$jZ|&QT$x>UKwA`-8sl3VPH){Vj`}BhC$#smbv;R7!Y~Vj@RIm3`cU^VM z+~>Pf4teFUTfE>@KhZSpHpeg5{R&=dBHvFs#PCj5{;1^kuxO?mZ>7ArlHX@9JXg2( zfWVSx*DkNVYsc!^wp>WM_{nF1&RCsEzU!;o`+rZ|s$*-Yx@3~gQ>AabG7jpUoM&^h zyI1j=$;G4||8rH`SUv9r^Rr1)xBi;;=0Ag(eOJ$u;w3+_xeNL z=H_DU++zt%Zu6gMO5FTqy19$9{8QZfN3&BOUf_N$`}E-bqXv3wZz@X z=)=E{H2!DsQ1(iDleTHEeyQUfc7c!o8GIcc-*DOeWgW8#T75E6k;e7w=Db z5O(d|s?GMhRO;_f3Xa&VI?1tEc|%4`eO6#r-up|tb?O5T`saol^h{%$XS?n@|F8B{ z@7F6eiaa^(FM5l4%ZIx=Pl%eyUHBk#eM{dF{&!WTxye!7-3g!BWdAdStO`tvsW*{- zCUtj({;KOYci#B8Zi#Hi%FCvY_I}bSD13gW{*z~~<1*>Qnh%_;K?=svnkD?k{~25_ zwCl`0w0zdx-zDE%o=mEeiI# zp0{R4<@w)2cRi#hMwS>@$epby{~PyI_q*kN_juj|^;cKtB|cqr-1?O1?<+CSZFlRe zJbb3%{jVu2eOPz)XGlk!u=x~nfUP#IU0#6yUsBtvtcJu-Jile4|1*RvO|@ig{2KA> z?Vsxc4{GM>I{F-zxL;9r?GM+40;PzzHb?$5JPEB@S8I2BM#>NCg8vN5)^x8d>|boV zbj7V{xl@{dIdT5E%uxSiqQ|kqb_?O#{(rg{*H}#ANUphJchQ^gc+B;A2blje)ZCf6 z(satBUXO_nIGO*gWOn zP9Yoqoz|PQvweg-3|un*GkDti=(A;~)T>OWXF0oGroU9#uT=TpN)?0LD;;lb4{F@| z#C9ph=3s!xBj()+%I{mkxtf)>bvzRa7Lc(wG5K>vPPe-8%dO;gae*bbWgc$hyU)b_ zp-7Q&ky#D(~D0 z$&?d!{nqlgHJ&tD{5n|RwF+;Fh8$X{D8@Sh9^^Ix>+Y~V`IKOrEZnSH~W{~67ISa zSB1t0FKu!Bn8|9eTy}XuGRMcK5qd{;nOMph8h>)dX9b8|;*no^FW~UTJ8ySK*)a+{ zerWMd%HsQ7t++WHECOtkCJFp$Xj;tvHZP-Z#w6u zr7;zKdZ)wuPRsc1zXJchYfF~@zkH>B%?-7U?7hAG0c@K*81g>cigN$CRC3*^=1mV1 zskdVWccTXsv0=ST1J{|rjYw6lMFIlM>Z6!W?S`=tpb zFLyTd33qMGz1q_JfN!Oya_iLXL67czJpNZ)v99-dq@0S+%D*$Vzp%QmTjE#mzB2nw zd2`?VFM&bLH>4Ld9(!#3FYn5KhRmZg%mv;(dHF{uyFBaJ-nF*N>fSG!{l?VheQw^r zD;8=iWp_%%m>ztuzCrbrTx*$qamwza&*MMWo;tZa;qDfT?G4fl|FlYP+-?14a`mY~ z^WP~`+HW0vU!lA~@IS*uAGre@Yu*(;vF`u3XkGPe}}b6)?S>s^YCZaq8ZckKKQ zv4i$kJ$+imn;cb|?@X|NRi^&6%sbBW-%9pRE4qrjPtUD;)+gn_<$EK&*i?Sc5t06@ z$^KjHPt5<*_ryIudQlEf`HcSzXQrf0NUmmYP|p0%uw=on%wMTXmme>i|HaFyJlMF9 z*-6g7{_C9?E_D;8{jt6O{fgIF#a-+c6PF18@#<~Ad?ixK^WFyrPwzJ?@4K9Q=gIKT z<=mmQ3-$;eR}X5jyPSFFa76x0RmrKh1Lc-BoZB5O_^Z@><3JpQD=T0oemWHjIuQbF)u;zw*gi?6l{f;H_;3%JLFq zm{tobhY@IOOP*R5F>S)ZPht5W?M%@C*yylRXy>MMb;($_dYAbQ=i^nlE3|gXOPN{{|sghZ(?ptnR4wn zpXK%9FKTS4;W+)l+7=Da>in-Kvu@QqX+MQ|B{y4 za49?a@s6@)Ydo6YH8UMf3tuDz|q;>AZl?aU)#3w?bc=vyY_IP_Ac=N*k ztH;{?qQ|6OOS~7l|7Su_X^EKd-uLynd;T-bn%Z|NDP!IJ;*H<>{ynf)N^Wm`cKNZE zPswj{+jSocIKSDh`{m;P+$n0c>&)2F`NiKi{|sFIZOYj^sV(dqUP~|d&oFyuc(v@g zYkT@Q<$s=<687xy4XMWmvU~nBT=Wh#QtUO}vGH!pjQH7@A_9$>`omsleqNo_gSU- zS5qJ5Y<4$YRxwfex3x@j^4j%nz59Iaf2uUiu&zktopxNvv;42v3d8=H8+Q1!2Z`LC zbgArM=Evq$6Zf&dl=7d!CKxOpeD|6a-{u2B+1k8qQ5W6|T``>6;df*52aR5d^N$wW z897C1miMgqcJJ_qtnSQLeAau@PNg6C_BP{#UZMP#DL0NAcrx_A6$zQztRcH?Z{yw* zQvVq)`X*$%?T+E^Y?Y6EueiwJhvR<+OUEx^@hepRGiXei>T_Fo=R`Ti`#)8MbPKN@ zVo$o@|5se?%j>kYyoq)S{l7mo-{QRY-9TPWASiv~!j@mYb}AiVhB?WzU+z*oZFi?V zJVgA2jaJ@S9phbgT7iMRXFhy1I%MCyzqHzcZNo#EUanQ1y1nb{q?-RTgsgt_)#f?_ ztN+INS2bpqKM~t@Ea01@^s$?bzfUpGpQhFq;qsrMQeE&<+?uMmN4fIeehJG>!vh&6 zUHr3LVCAo!u17z_uQynCd1mzN&5BExA8GkGo8_;;Nlx!Wfq};|gZ!p;exC4P&ZbFe z7Z~m53e>+?a@(O$)N&o~lkItvf1eFXb6X6;#% z&6#&w+Vv^ghG? z47Gu#kM;+@u@^DpZvVkH-}dru$5d%a4`*+vHXM|LX0U8yDob{re^a>245Qz08D(L2I>DwHjx3^gYg| zo>Q3u5{$h60_XqoE2@^}-jrjYv+@wXdZ=NpzToEK-Rv1b+ji|N`(USd&^YU;g4Jfb z`qvw!xjbw&E-qa6K|x@3bbsl(YpZ(xm0t|w?s3Sl3v&F=uw=#!rLsM8O6mWWsv52q zySC+hVM=UwL)dib9qeCNuj ziN+Pya}IetIQXAo=_+lVt?%Z0%x655p0alde|$+@Ca)|1&L>iL?GhLN`}JhX!SiP} zOv@F#xuEku!;+@g#``*w9~3kHp4xw@-E)F_1;c-aIc=XO#l9_+H~jljv+Di!yz5N& zyJP<|gw6f8p;t=!Gy9+SMU83RjeHvq99QD}&tN7n*DXI=r=&pU*unn{ma6J3f-7?R z?kzC>S0&oF<*$?!e-ht+hF{ZGSdT7HG{!MxL`v}ui%~rFjwR{_&2%mP~ zZ+U02;M@oQZ?l5iOMdrn*j#Yg-D%>1rN1V9uyJ0ZTBjAYrz`qhvK-H`eGh-+1=mhH zvxV8ty8Z80j)&0^vo^`u%;5}Lw{NN4ZRhscK|$SXD|Fj3Z#31v`nF=%o^>uisuSu( zg2NK+zP0lm{?A|;P%6%-V7mNppr)q4a>H}e%^iOqv+pupoNGPHeZ^gm`TQ(Gw{I(c zm0dnbe)-RZ9?8+k4!<1|Y#4kNA6;R(sjYX`C&N$LOwZbDN}YG^wQQJl?T=XL=AQ3Y zjW_RFa(VLHNro$)yn0@iU0>-vsj#Ku+|`_2VQb%e-gP$Ik|duYzqC-w$RzvwU;baW z?!Nph%r3d`3HQ7A*+*XgX{$@x*xl@>W?c9}nxX0O$-+O+Z6g^>93JS%WzU|Ld$PyA zq^kaSeA<_rjtgpp#jo$qc~$bzE8u28=CkC6YOMvy3^%w`UizH%v2AMJm|4+oAowBp z&cf35*{X~D=5SvAwQ~Q8jR`7~Os}r_H_>Bq|1WhphX?-|Qd6FNdABg|?w`l(WuO0L z-Cg%u=43&$nsw$)>yz2#cBLP#PgS$;czRq}M(E@O=Vv|t8KT?&{k7GL?>_hFex&Zo zcLh6&*xJ~i+phY&T3_Hrb&yAYUGmEzNQP@?imH3I_TY|{mU-BS3BJQSCl=nFUGa4=1l*uDPM24 z8(duRFVKJE)vT<$v5Os(WgordGPl}hCimdot=B)Lo*L)oeVg_8e2e&|X|hk>G5nDK zb5v#BZEw@O3;aF(yNjhda?5wT_+ZMLsq&xUqJ!K_`*V?UdGcREXGlkHWAC(?|2fc^ z?VgFQfeTr?zKq?)Uh&a^`;qQ&Ic>*Y=#go4)g=?v+o^`u`kNkGbG> zdd7Eou9p7{bN8+~kY_0T+F<*E>zw><35L^}7u?{G|1$YYa;pDrnUi;yCvV;OpJBep z-XoKqoBWBE|NceoG4oNqoJxn^-<7%!T)tTIqy79}kx56N-1>VsyPr9^xn8SU>d=MU zM7~ePKQ^q~E;&7mamAJc)6BetUzV0}{Vm@xk0aUk{;i^NPNtV30qwyt8`o9a^gUL2Hhgl;3NeKF@^tzclxT@qg%(KdICCpTUxU(S(gN?LF7>%URXmZ}Q*y z=IS}oAHDp4y~=HWFI}%E|KdBtQpc6&+pkGJUlc3Q{q~FDf#?M59d{Dse`%eT^mDi$ zk{~1=@nzyIVWe2~| zh5A?Jifz#W@{2Mu-rYU0(CXH*7@5aby=y1_U7w_tv-6up?>2A$299|XY_=Tl-=bCh z((an&*^f>2?{80O4c*i4cbxO1^1naRulg?ZO@3i{-cEocu)56T-M5a%PW+GBUxeL_ z%}zhl|NB+?wL@m__4BPGUUJrk9C#F3F-_8Dw}bNU=wNf6fE4lF?;HPRX-j*vZ?VW+ zq5hx2*heyK_pIcdlivTbo)q+U<=g4`)w8NOFaLSF(stVRyOGt)w=L1w^LQegLf!Yx z|Nbov{j$Mv3tOL*^1l^Jy%KKg=3mOp{7|SV9q~Qu!HGYQoU}J>+@6+v2?^(?AbeVVX25fw5<)Ki(ZU6qPGylS-h-ZJK9R4#b>Tyu8m~`=u zT<~I{va1e451&UI_$_yXSGHYBcmL|W#utu@N8P_1EoN8k|GD%(Lt@ZxQOVk%S>Jb_ zne6KPlE72F{x~Q1Bb(UC;qS_Olp`*^dbr;s>*hzU*0m?U zX0O`#Dl|Lh_G2s7lbo~6H zWigH^&F^F;uKzZzU-^urSH#lgd>j5V>`F9vC?>(Y!=W<{tJhbr^9vvUu4oYO zJok%(@{!#C3`=*4zu6*Rc2T*VX^YsphaLYJ>bHKr>&9KOqT${HPuGOoCnnzFYCiGS z@bL;ykDS!?MrP;JcCfNtpK*A_h3{;^(~L`gtbq{`V~^}T5B|A`MNSp?xP$L;sM4$RThClSvPIF$Tb#*4_tQlo|Gs_l zKPRm@cGW=ov+#e0Nv^lUFWp>!R@MIh^_y$2MyQ@Guq#OZ;3To&hR4RUKRo20ZFO6G zsfe@T?c?Tm>3_qHlwD)&daEFJ@OZ1jmCMrNyKebZZL?f{`agrp+T@2%BBC?uw|rN5 z_n*P|#mdKt8}>vd&wDj{{oW%@^((g2Mjdv1Aj|MxYrg3jFL4e*$+~I&v)g}dNNHer zy=J%R>{g%GJI{Tb)bYk^!I|SWXX?X?CaHPO8>OMd7|1MUQJIMUeGspB2N2kpyzN7ofEDu>{IriVXwe|0`nb`|^IsP-83AS1$ zmRq-=+y*p&{P?-ip}ps?AO6oE^PfR7li{6Q)tT_{6wBT1if0Su)$=^3nk8KMWM}^- zs?x-|E!TQq_Z@ToSN|DeQ}0>zipln8&v0j$kp64K)1{Jbg~DwcCd({#Kd6v=!>)Tl znZizsuQHAqYviB2%ijM|tM~LP$Kw?@e=pea`agrK(4IZh|1($|-}2qa{{0!x?400< ztmigo{FwQlVWrciW&5Y^F7Mm_Q&iyh$ysy0yFc5x@IS*(mdEnCo1*UbC8{;!97p6d~zi(zvcnmalGt}OhUHYG4X2)R}wz-S{-0ga><%Y^>|N4?Tm-CBu+gr)rcxU{tSRgoZ+MQ1f z3&P&(*`F&?Us!Gyrt{D5)8vn9nIxX=vx!~*cZb<3yM?)JyQ7}%-u}|$KZE7&iNQsu zHYQ9Dif~t)HKn&Amq}Z#dNTW;tC34vPNq(<>^#SmrKQBOycxQ02;f13qq<h?@YLGgFqWLUzh=61L+tHet5V!Ef(#tn-CJG>WUP9|E*-!3obi$a|5kggRZ12B7qJ1VhZ2Nx(3wy8VmC20V zc3scyHebJF;A{G2_TT)#$(elj7%yM0`_FKu`ai?Pb*E$`9!qpIFaNRsYKE7kx>ChC z13N$YOaHda`z>_pO>S?>w2imSznAleU;cOOY5c0o(KC+AnoZ(ydA0f9iYNPxm&wdd z*?BHoCVg^rbo8`!(W^x!INVk$ncDr%OY{r*X3uy~Zh3U^j^c#+ zIZOWB;%j()kEQ?jD~sB9|B9OI1l<3sO4|ykei8g6e^6F%mEy#XgxEYBx3YWZ?`h54{?cf>;O`>`{xevfc3#XbH9u22_2T2> zpC(t%X_u2ckx>^=zpsPa&i8iIwT->`xf16^xe~Vde{ObXzVYw<*Wh>eljrcX{dPb7 za>cFde!sqKs68jYDEE^ZmK2+>W)g*?-=W z`KErt#@lnWPuzR_R;R(n!+QVwQ+H>Y?pt9sy;iJ$iT|@VVT;dsFsRC2JI%>E+t)XL zS+s7+%j1uKzqUHO>C)xZi=txh?w|EEU+!^gwUP3*HHZ7tC8pgt!nfGFXvTft1Cfyv zDg^2#m+Q*8&zMrwG2`@&(=SijU+jOEl4M}j6xF}!x_tJG_=kK`o*i=dTDGOXOaA5z zNxhmKGgLP&|9L|1(84}Gy?bm6cCgo9SsSM@$;G$fu*QTLy~o{6*Z!!#zqfO)>xQW7 zS8U98So~+Wr017)tm0wIk1dY>8BA|aSaWDeLrh)3rFx~1t&ZEaon5!Gb^nR#^nYEO zZoL)$WxK|`(2k5+#%=uTe{iY3@r~ECK{6L1bzq7OZ`#*YJnYrlLUv9^Km9RO} znRlLTJSbqV9h#Wu+wjYxC&Qk>D>SiGc*m`X3w7NQY|XztqoU*Hp37tr=kJjJs_T^N zo7ukgzPW(?D*@T~kmPMw)2{Ig{%4q}x$Vq02K~C1Pb@tCGpuqtpQ_vLowZGJcV$Vg z4e#=zYbQ<=b7!wOd`D$RCvW~g&(wXFW7q7mKg5)L@c!cP_4do;as@xBrqsmCf0dw1x3)*(ql*gMptbb*=m?roOpTWt#fF-QZex%=TP{ z)%L080=f&29N_Q&JnNhJzm=g2{>}Giwy)ZlES;N|ctP&*1oxfm{vDorM@XW`DOUNg znSxK_et}Q1(W~xXvbyGacICERw_>B6|1+4yystX=LROu9)swq%vFDdgxsqqiFx`>2 zIC}T5*PC9?m7N>e`*p^zO}7;LQ8_VdN6w=PF>$ac% zXLq>k{CNitzH@VOa|m&NZ}9k7l7;_^U3-<6hhDBKwJ3cd!CCfx>CWTT+m)V#`TE%$ znB>nG)o8_kQ2mD5z`jXc+ zE(_Yi?=3g}8Sni=^Ow%A=rcbK?|&7zH2VL=i(iZEI`?k>(eUj*!_CjlRWF+sd4&@oQUi|ZW_SWlACilA1CN>ZD zpAL(!{ARXy%ieyZm;bMd!XL9;&PkTDF4pD*nPjpz?#N}86==Vfzw-U6ZS$V&T_~`# z|KbGBcRHDWR&u|{uvlPH~VWYPkm=5t7%_Gjdn)&p z*U#M=vu5XkU7ND|#hU*!1Wdnm@2&au1ewnN3?~;m^44#S^8fr!F50>MpQlJlUjECN z>wFhD?7!^mGW(OnxWTZcsN_Gx>d^NRHysQY9@&<3s-vV{J-cp_p`j4V7oYO0vi;&= z&(15mF70wl(@j05lh=B9!o#;kM|R63_rBTrPI=nSi9bd6bx!@29#WEh?BU;pRW;!f zXHU;O{PT?bn*R*!Uv4gPyu7e1>uBMn>rMCGW<39Od+OdrmWB^Z0uo)gXZ1NNzgk(j zUO@1ttFqn->x5s{LQFb`;^IzA36wi&Zv%ZDu zmM?p|&3ezrRU0lZ;!J#tg`IrYjiX9M?|irtJ4Udi#VP1gCh z`9Fipb}R94S#OD7i!YyD@T)RZmOIYm?)L9GQIo#8Sjb;}qpE&Odi@*OFj(T5S zQ!91n=JRCd`j?iW@i*`g$MkwFuM01yu?I-s+n*WftGoGb z?5@g2`|nrFm(JZ5ap~{V3;w@aqaOvbPg7r`D*2z`&VPoxizUB?m%UX^o_C&I$d2!? za{a4`vA+ISHg0}=@IS+%)#8RfgJWBlo^4{dFzr7>?C!emsoUOXr|ii*sbt@Ew8b`b zyTG=C3f-){Qw}sdH-C`+Z++47Jli&howvRzF8}vqzV@1=VC(fuFWy`STK2O|=X-7H z%jTCm5By-<{hvW$@pS$9cZ6De8tkwBXV{g}csb(>pT*|G(xMp)U31g}H6hX8A9NCE9zxF50tvT0+9_=r3zFY}?lV+5J+?HZ?st*Ry5b zXLE0Hq)1lI|7EH-ZQ3QRY^{CUOczNG-b8d)y?Ulr?(uAe=+ajT0YRo z&I$f=y!kI<_x#A!_0IEY;85Pkxc{r7$EI&DU-jN&+yDF1q-IH#1;4%X8YCD#&U8z) zT=0HP$g}cHzWJZGt2|3%`@L%A+s}gk8A2BBdytaMHu-M*e+H$#6|vWzSpJ*6D)0U| z_00bark1Itzvl+nJ}~~zpfqo}?Kz?2o^M|MXIP~h#{FiUl-9<5xr~SZtz_A9EX?k$ z_v`e=?1ujg`xf=gin(y<*WCw~+5i1nv+aS8?BOFjcPXZ{xo>Ms`F>aatEytwGNs>A zioHwtUo-w^2ojD=ZkQf&iC-_<^FPCqw_Q7uXT3dhM5#vR@t@FLMG@By&v>@~dyMCQ zhShEpI`(b4nVIrKOq4zCvUk~pXMVG18vaY)7*#vvVD;;U>KRupc1_>nHjlTU|8uI! zmieyz(lax3tzHG>thyz4`lR#>cRn`vuc5ECSDsba!1VC$F8SG_*%>Pg59IN6vQPXQ zd!o5YFyWW~lqu#V|L#aUtFCu*_MYdr;r-pL3n{z%Y`jjqOj;em+RIn#CT%D0x$5_t z(rME?dD7Z=#H~N?_e40r5ACh z_TIUak}Yg3Kl@#nif!ZJCY72ipAIs&95WQ#X8h>t>ST}ad`>;z-3vn3WY1pl_+ZjG zcA1VGm)mALQ%n7(PyE(+waQcUtJIN*!;6h1|8?De`kz5JqpJDAGP(KPCL2$8+25Vw zf7+t%$&}>Wyvf%-{+b+f!sJ=#(jV(DzES?qU>COK`evC7x@GW-u&#+bESFHTrJne1o|1+#z?c|j7;dGPxpEl2e{|pZ! z?R`_j-mTuS(eBEfW0&~6r8jQlRj9wBRe8Q(zc+({xfx^N^0kle-CQoOvitL_S22g| z*ZelS{-42@>GsAog_|x(JkN4&ocL$DW&Dpgn|*(lPw?PyZoX1q*{@n~;Z=~h>EZbD z1BWC{+TPvz&tPDx5qHUP?ZLA)M`zc+*tyDS=as#0<*W}zPk(f9wc72TX#SP=*^TO7 z1>8;d7vPp*?>o%=Z>90uMcWyE>nMDm;Qp;!W{ugKauYFw-REC=vFb!=vB;F0*~Hkt zs$J1?O{&}`&rWFemAr>rce~e``W0zDIn%HFM=)4EfQ@&-?i2EVCPm-2cRSzm@@J5l zxcq__G6m|tRZspc`_Hhr=HHw8OMj0{`OonG@`j?So9wlWy?-Au%769x?!EUvL-v<9 z1*Lr{C;l@mT6BApPD1MWHGIE46%(#o>0Ic%eB-*V^+w5;5f5#|+0M;w z-~Vr=(3`Ac!?~`HOUrm`+&|6Q;1@CTkVA!7jDZ1*cYNr+?9z2Mvev9#$7lX$h!fi% z^yk+1vLkH#}aU;GuO) zBjwGOm>8CSy&Eq6nYQ!f-1gF$*0*H+ES_x_c=Wt3clLfm=B&-PKY084n(c}@*%x#7 zRz=3zu!!Srrd!43xlVw(CmXk#-KhJ){F!~H$1MJfrM>c}GW*{;&6oYK<@0s&*YMFJ`YjC+%5K-+VfT|K41m zoLY1KvX8mx9qRv9-jvp(oMRR717%wu5CQxFir4Z-m^t* ziCf;WSfBP4Qc;_;c;bwQzqnmpehU9*2w4;OZTS|S)pOp9hcEfhFlXKFiyLImD=z-* zzAYr;d8pE^Cl%86uO=*LNu1HET-v8nxc5^3)@|nQ)it}9t-TiE_u<+PCg&-4)0fzu z{m)>;<*ISl)s6W^4BLX2i`Gx}*3MsX_p;%ap6o{_!+5tuE^Ry3SHhwg@h3TY*6-Mt z^UC@E9F;i1#GlH`yZGhzs>)v3wcqCVKUsNW?1ZR7$SA=Pmv}lQehjYR*=RmAl5M zr%$?b?t32-@`4_UfEZtUy3~7+~HOearE^spTmK>az6;% z&3t<*+cSet-t~S(=;?!oyZs)tR*wK8_ zPM9O;+OC-E?6M9M-v82d6*FDzXwNXiv}L;3qtLv;6H<@4`X!VmaGN;9(>An znvva{xX!@j4f~VO*IW1L+9jTHI=$cQ!o!CPy_ZKHK?pX0N1pH@sHUC80F&o3B+bl9n4BX{UW#z0sS{iXe&zk4> zjBlUjP7jk}UfROZ&SWpYXy;-{KH<=6GbP6jydPdf-JBYo%^eq+?AKzstNyB9vhjkD zmtSt3`p>W`R{qQObw}SO-_}t)d^*%wX}(JBof%6DZOqQg32E$coy+#?%+>>c`2TrE z9X@bsMSk&q_psfZGueM0-CY`JrFe~jrOZmcG3>+V%@dhi1fR@I?hq5W&Uo?EeovO1 z%csKf9>%qQ_VGU$wd`VcSu@|8uo>d3r0-2$?7XeIX;F5z-9#gnlkZm9t1C9A_!Ky$ z?N_>FJ|j!><<)6_s_w*3NnFRKGQqs~UCs8ad3LqtF&PU#e7s@r|K|O-g{h|7*iNWz zJ6Vx1-Om2Nwe#nzujQ$Ug}EhKESk0MSF&iI(6#>zy7SN8{LjGsGGb}xLSLVaZ0_Mp zc^G&9br-zf8QS|}-@4a&QgxY9^M5_+l~D0ED&O|ZW$U7-2lZCVMFQRIt#cJJzf}J# zs_lDY61eNv`m$SVGG($#|D9RHq%HWqy6!*2pGmx1LrT|I*Xi2-6j^<|x^I2`H^=`B z`<0iM)JjHVR8HS;zB5VNPkH9XrwiLBl+1svIP2bFhL}2o`mTxDbM7xFudw(3)%0bH zchIZXOF#Fk?Z3l!=kmY8Z!0fPsrWMMc-fWyhg*H8*x1$DPbjL6xt8(hr475_e}=kS zeH|XZy>I`jJtL=U{GY*tRj|A7Z*+Bg$K6%jMS2;x4wQYrF!4Wwqk77<{|wKaIpq`& zEOhmGdt@C$>NJa=y$8cBcDl@6TPe?yIMLf>+YOtylS=>H+87u1jQ8UD{`y~jZZAzP zCF?H#d0Ot^?*&ZD-t0<~jV%Av<2CoN!2AM*@162ry>wTz9)G!`#>4wXOVge53%?E@ z5t|_8AoZVN*4ACs-ydCh|D^w5(#>wygvj9UoDbIOO;6rycKzoDpYKlteyp>8>axFF z{qJcrb$d|>wobk+?{J_^P8JZ=d@0?*`K=j z=j!~g&+5AW-HNzy&Gh;+p5A5B{~4?ket7<8II+lby|O#opXEPRwDSuryT0Y6^82u# z#mOySqgD8q9WO3!KVVXSKc=nl#D4~k&!6SLU)w7CJ?Jv)TX|FQ*a+G42bcVFSoQpH zk?G!bJ>4-)=YdXr&s+l<(+!wgNefb89W)^9%ZuiX8h;by2GkY`L=-L z$C;5oEz;VL-AsIVfFrtaig(O`wz*~3Y&XSSJXoFbpJC3Gxm%C_TqY=$;W#BZI=S8a z0fYAo-iYswr|P-`dunPIyvcjdS)#OUR>R!h&ljd>8<%w?m-XA#YY7*vEq=7k;K%gc zo5ZGFZo4)y*7{bp|36QTThBO5-pct+nOiz_TjE;v?`-dXtzE(Q%1=t_drhLK=Fc#5 z2bue}>>nI|hyGq(z5m>QhBJX}!MYbNc>eI3cWP0se0fXue}<509asNf-E^v|+2_|< zJ2}v*HnHhGW!{?_c1&XS>`?H(w<)r8vA>JNTcNGL6wIQ2%bcCRZW;^FI?e^aUd$FytjO<3U{%Y$oe`(+^w-NlgDz|j4!LvO1J%|4@)D#^!t7pe` zxg}Unqo6RmCg_pp%dk>i;m2G{f8-cN#2o%JT{I&$(%SRZdv>PF{~0`8pUCknG}aT# zm>Uzlam~YRJLW%SoB#Wj?~9$!9TDDY5 zcIrF--P8U34;{@&W`5h*@ZDqbyQ0L7_$%3GbZ)%TE|wNxy$XfrUb)UZS<^0{Bw_WRF&ZzmN zS6Obxq5g2)6}x%b$+2;3_egGCZ}k4j?)vAOvvzVSE}YtClz1f~V@s_8es7W&s zvzc_7-ed=#BSnBHpa!PD?ePRXW9B@nOSi3*4os4s;hKYZ1~r8Bfo5q;@zn;ethAv-ox+^)YJ?3 zGwI|8_Q~gFbNoAeXp6tHsTYA3s@{gQblX-i;-Hy*x zF?0OSuyn8XXRl~B>(|9nQP=-ve&+hm;B{TFP2nW_`$+#%#)IqEyt8Ax|NYro9&6uF zgD{S@yLPUVd#oDtV}jAsAMWoz)}Nj9r)c%|kb;#@O@Ef&_ORAg*t$$*I&Wn9*IL)y zr3~9{o#aj2xXIhwL*`%h_BA;y%<1)_KPy%gY&;?o?^-r%=FY=+%zEW)r)~dtCu`fO z*ZCKd-48Hq{x~;R{C=PI`ENnxcLjI%`7r{>=Iymk3>IU&)TKfmqx&k(`} z+G|uRW-z@||IKru$Nw2TofERF^?6=yun#=m$>RU>#PqP+tBYk1zJCx}^ogUqYr|>A zoVDx1&E+gkuREPCE_Q0J_lXKN8`bdbS{oPU&9A!lDmP=r69&KYOQckef32Ui`L*et zn;G+8oAm!$T4lsy`h>&evfknH%a@-lif$LWy#8ngPu0oqjNchr%dGt`-n#hF?~mA4 z=NB2j>ZcmVT=!r0%)gRlierOJ-JHsz-gy6|yWXkZOJZ`{y*h03>Ql--Z6*~aPW(4@ z@9(}Yy(eY$`{T#uAKdY8P<6hrcy9miOBenBU)vjJka6w!j(H3M+jo^IuQExL*q6I(3H4c&XHfwBv?`NjIzgCd{02NiOc1iGA*nsvhB894}g#b>67VeDe88 z%^x*3oNnJy@NjYax0_pEC2hKp{K)fNo4(+?>{;(QCe^Rrs%luLdiZW!Y)_x_wmtO^ zdhh>d@C{x2*YTas?*Ns*?BUU|%Ddle|G7QIxZFkpDLOhui)$SUk;KlPx82 ztZhq%lnL{%m6|Kv{k}Xa(k*+e#*v}&pCNGfM7;ycUd0FMXH@8_Sj?+m7t`lb_+265 z&4l;KvugS}HAN$S@@!AN@NIL{diF1E^`>v#OaD#Z_HfI;?ER+qcfb43z}C8Z1^<_n z%2TGU*EV#|V9%Jz%CP9*%pC{hgHF9J_;cNMv;55>1<|;h6TZpcHL`!PaE^@TWN)6& zZ@ElM{#dOsyBNPT@#z_r`U}4}R+?VfcI#|jwl{xz*5*%D-g=Dd5*T-F&NQ_D>UDeH zjYBe0y0;Ca-cGWADD`dszb0v`sl6MFjhcIR9L~8Tcc{MfeEx+ZufqAQt=`=^3*YKq znB?O>dB3Ie<)c#9K6^f3HrOS-HoNTxAM*s4=I?9n+?#bhb?et@;hxOJ4F4Hc{JHW@ zbq`13$N81KtkcbR?-6URQsd0uJE^APPglgTSq$s8wQWBcd&g3~C|^GHkI2*87dHM} z=JY1+up3Trz-~Vm8gXzyzm9=)O*L?L*y~U*N|5`<@>dlq|C3jDB%c>W9 z*QqYGUa{bwleCzoE5}y(d5vJv|7FQx%r9z4(6`?&#-^B z!m7%*Y-h~t59eMu)|a~Wm#^Cw_GdSf>$mv-jr(e{`jY28O=xy!XrN^?*FP2P-biRUT#U9s zl&YVs;Ng8+zHP&6(_hYE{cl%C9GS4%im|O@MuX^{#BHe=e~c13k7r$tWM!DJaf!e~ zg%0HtYkbxO#;!}2`*q?Gr^5O7ruhP!tJZ0+P0mlWp1HU|C8K`T)(54FudX*t`fbT` zwCwHox`}5Wv3Q%c$fz-Qc=)@U8s4iJ`Hz zebd^F!Gdq^(k`j)y`rr*KeO*y z{i~qUHOYJL9=IkHB=2;rmOJiPh4AiwtM7Ce@%)b8Wuj;;`!>1p+ulX&Gdv7TUa)s@ zrF^%2x;A-%Y)qxW@?ekYcI*>v_@8R6tt|f5IYIH_$FS%g9`R1QOwAe9o^8MPD@{~+ zA>6=l%Y@S-Z_bpE9T}XL{kx>!X1tp;GcteK&5-;Zaff4jrdd1POO?E~ee%Dfr~f9t z-tBqdQ2Cx2yN-RE|3Sxv)hZ%y?*zld*9xt|9o|~|C+!?tu!^+ z5cAJc=JMk5&t?A=wf4(tS&DgddE{L73q4cQ@U7FTS20=oM2UGzm5#1-`x%WNTjSns ze9&)lj-@rIXVu-ub}UZYt~W35s=X26YFGMo%k%B4Zo9djud{5waHw`S|2xBd=P&NQ zvC%|E-~HFgi?^>Ba=%WFo!-a2;;w=F53jk~zwbBxCs-J3zU20m&5~U&j%<8u#+;yF zwejbd?YH-OsIip3+%40#F8JVW|1%|)h}JO%UgErJs`^?F1yMkp*HNrTe;mg zYadVF|D|vKldEyh!nPK^e_1)>*()=vWpkGtyJ5e3`>m(Jv!)mw;B;3wezYd=ul~o$ zvO+eGcWl{t-z_2gu7$;M--F?$7V{t6_-Mzc`=4P|QFFoR`JySd%ja%0T`&LKJZZf| zQM7!W{G*dH1rzTXO)fK>C&8I1I^mh;gT}4vT&4Y4YNnOWs62aZbLfIH>lyW5iUYnq z+u;3i?%#IP{|w(>-C5SJd(!*q`S`a?zx6gUx@^$Viucp|cJyj~VWrr%vz&jA?=F^F zV{F;?OOoLyd#9g0_i@|gX+r-Q*#9#)g-#E?oZplj?4RoX*8Et%!Th)3|Nb*P5avIa zdMV(y@R8`GMq`1+rE8aL;ElagsnxFcc-d#UD21)(d1l9Ow_hq}{&niS=7;@hF+mgT zuXgoxmT7I>wk`TIrwt#+wB1gdt5V->{2s^n+k&yTJbhQ~`}|MYQE4)QQx?DT5;Q-w zMSR{lONp7RO`Cq5TT}4P{y|TT$zw{r?MZB&Y6saBTaHit@^Tt2S&dD3|VgYsP>2OIU}tz&SIEz?O4?JG*RL zSElN(b6|aI@6u>sKjkWq+n$upOu5S|S+rm2DK=L=C|c68Ke{g}V8Wy5?-hlG+@h=8 zICE68K4_Wjc&Gk3c7+>j_IlTC$K(YcEM0hw!}DD6-ZhtxtPuD%*JsJJJ&lu7-9I-J z*o*Qsy!U)lzQaQBL88!yhqd7b{<;>GR{Jg>I|94_u` z`}k-HL&iTX^LRIF?zhzu7f-5*CGXnj7r%Y!ysy}39Z`$3I{GTCW)p6N--*)*I?=E|;9h<)T-?dX_ z*Dl>D%eeXUw9)e!Ib{m}G`|LF>~(%|_O#eFZhxhKdw)$M?n-Od>ayNyWX%%Zd4NyU z^VF7f?(P1C@75+oN7^L@?z(aLUBICo<_f0AU%p`KNLg91Zh7g#CGWWIM)itXZMhhg zyhGX5#_Q0HTON~7#He5Qn>@dN=I?aL_qBS`x(su#yxe|U{@cvgyR)BY>|I-+Tfvvz zV!1rP@y~VjA8Qpq?OLm!P$J~ddjI>gb?aX(*zx7}e+IW&!|b^0j9<3g%#QwjZ`Os? zujYHEIj`3(zTvZ}skZl@-+bSk>(Sa7skuDKCA=98c8<#!!5ZA|JL7SKo5RPNHHjKQKEXZ?>Df{G z{Ca%W^=1}=KbNk&+uL8wxNn-x#1+Mk{~1=fPnlrEoXcOj$i#E=dbf!$Wi9%1?dH$T zE4Kf9dqVt0t*0|1P5b!+1phNMZG7$P`W7_ubI9(CyYVFJlo|gSIMy#$+c!0Izq8$U z#xr95e?|Jvb++7p-aAt+Y|oDR+qpN6M6KGk`{~6E{LA?JpS}I%@os1HS#y2M=}#?F z75_d-el+2$d&_NwYo?983ydBnEl^ER{Q@KuN`^4qe1rEZJQH@_Sd3AQo^&DZ#;N5?_trJ0|^X*tNVJ{ zy!Li?{j$As*mXvV(EWP$MSN4P?J!#|o~7L1*RB8d zrmld8TtVBvy|H$;{Z~9*cER*N!;)!+)?yZWrkz^tbnmdGSsT0{+Xo(FH2URJtxE7v2=z@+NcgJyQ=WpV#ZV zM0GO+yqn#6lYRK#T2$Y8qSHLld46iy&Nl|GstekVU%H+CdES$d!>dzncJ}D3V!rd> zg1^+dz#BiOq*F7(Ie%Sg1Wz3TBq6Y+=_a3LxO$bmgy${s>{^=uD{AAy3^+< z|Cd=YukP^XDbz>q_sp7hUbCaRu5;q=byw7rpO>zg`0(Er+dxk~U;9X%ZEZI)boCex ztN!`Vpd}J}rRtjhc4>)C^>$|&!sB~8EubH#tuj9Miws#9YXea(< zlT9m^zrXV}_iO%8^PU{t1!n!1qNEqxd;g)j{=up!i652jDzQ^HY}_@Cv#_K-`qs{Q zOLu&gnKu92#&emU?4BvhUWj_XC+u^?#oouy+H&rczFU*@W!}OoI=V-W*X}y@z;^Mk zYx6Izo4ou#L-)M}-_E7Emhc^HzEbd?VZ~ab%Ei(<`BfTMH@9Dr?|Zn0-}LgsuQt`$ z7ax~oS+Ab@pP~EQ6zN~t?>7Et*ux$DpTRkK+C1^AbyFLZC0p0M`!0LV{#Mb-=_Xo_ zc$Q4oY+S(p>fzp<(E9aru5bDFN!wm6v(wG_@}Y{!UBQcwl}>m3rOQ*k>(oKz>;poVPuTBz znzoyfK{W3Eg&T5qofrOuoZfQp{;d7&<}!}IBRld8KlJdl&b$4D?`h&&i&SDz{u4{?o@T zSSqVC;J(AlFR!<6kc>KerE;DB;5Q@1i-Y*%>mw6t#8`H-h!F&EP> z^FFZtzJJ@QaNjd>x8rIUTQA#fyK(7y)^!fWq|~e5qRniMy^Z={DgRaL4DX9;bFxEt zGx{s6ch47Dhc`jrJ7*(c80c z@l7)M&tNK_V&yGuXC1}=S5-Ur*t+dzk1pJJcx$Ioz~S)2@pr%Iir-yxZh8NgTKCL* z$J*;JC1roo-lW*G`QRIt`m0(GlK1>;lCsX@NJ+n**0^k)53k2ht%!$w#xHHu|LBQD zsbt+fdbT#;wBM^eUzLA*2hEmDmil!^hVerG=V{8T#U!dz%HAyXU*Da$Y58xyw(YDn z85%nLF4te4+qC3+FN4r?3Fd!)p3Zm6<&GQ^ZKK$ zyWbdRyUpG|<%;n2TJv9JhHnb~K3(*@UEtb_=h=2#``rDHoDeKFm%n$tz<$ql{za?P zo+cU}F`4yF)p*UNhbk}c9O*wOyVq?wCm)L(N5o89ex?0o+IN%rbta>KPy~(b=Nk;YSX=?mp?7pCHtbWHvZcE@V|e(<@J}u{r&NuAtSf>Hs7Md_9wnw zdm?z{<+iBkjfW>O&i`GscU|yu*|}aHosEjVy^7!T{Y^&y(>&h^VyVWnCFOV8Y5ZsC zT3f@db1dz4cHzsk2cKmp=T@ye z#UA^6*(6nsw7Utc{2_1OC@ec|<9P3qLa?l`W?Irfp*!aY`zX$v-azT5ce*mKL44tD3KKUeNBmMPxxy60cF ziGpA6<^+LnbNL^vxmX=zc}0ioQ+&_cZPlx-{F}ChK3rnCEUI+A>gH~pG(ELzr&uz+ zgx*pT6L)-GbaCzdqWJ|!T$T5p%iv@8d!hRI)Yja@vkC=a$@3x}T`w}x z7JgLWW5hG@r&0djZ!w{Yu}-zGRA0!gO3sL!H7!x(=qt9f0k519vxeUdSEia6F4z`Zqx11f+V@P|hs(Dg4L^PMdsXfv{!7Z6 zWSO?lxRtu!Lv-b-$MdY_X8&g>x_&CDR=3-A#0npH`aMJD-ldyEOFp4$B2wPS{K>+kWE0s~#^ExoB;1WwHBy$4;_4G2U{2Z_1x| zS8$Dw)2mO0uTHMHo-y%8pX1+WJ5%aTY=0})zVdDF?cZ-_{Nl>9m8dZNQ2+n(p2DJ> zhTmV_ZmEA#w#-&>ZD!$y$sa&V=a#&FyY^jnlob2(vVWTniSUn+Q5-A*3PpD*NZs?Qsr_u9DKCih_45 zdbTND>fY2S7}57@vFW*rzsfTFYNqnfb-tUgIe3A8PCaYbt>XLaS`VZBpG~)z|5<9S zTT1AY{d}U~8UOT7Z#H-(^qZmA?9A>zR}8Nh#+6;nynn{;@~1l+U!}2Ge!uzZ-Jk1M z{N;D^-C4u4Zo>1n?NTw;4KDSUf;*#bmCU{JNwc^A&huK?Bia^oizz$? z*E^p7XE6D;OR4N!qvW)W$E4%tGjWB5yxsIVM|ys8&%ZYe^X^0$NwF^2#nWu{pJC4C zS37%on<5`^T#U3VZQ%Q;JflTp9ZRX}#7kPbvpn-V?4Hg|lid>Zo$c3JsU0SqQGDkT zA0DY(VXv}3Z0@b%gDy;q55-g!ZG8Jzy0*`z-NX3z>J2X=)*L*XQ8q2|{f3|O7u|nj zS}Y#y{WiC6`5hS<`E8|awZFwy?^=3^_dvvti)Sy?&kD7xzathBcl#YM9ZEwiA4W6H`hL|hv`YZ5t%J1CevD@PwhSfPf z`Luf9Pe-$s7mwfVapCK|7UNNUr`qA?@6hnPt?zE1SEyKEuhMqpKxpihS1a$lt53LU zV{qb)t`*BSffRw&lU|*?t=c~AKf{xN{8wkHpKRiM#wEOKs!Em&|H0^^G8@boqm`K# zmKJ^UP$MvFc6LW*{!q$WPts2TrCe(4KFDY%?xi)#umX9fqn2vL1``K=-Hru&G z=ic(354LHXx4$%e_!xZbbn>y*xa8RhO?@$erd zqHU*+tzX#`V?XWKzoKX7L(<>v_^~vuT;{z|{snfH5t$5O3o_hUwiTV9!8~yTvcUI&dP@MEzRhzP_H-NcmG_=^C^JY;_|zo8w$b)gAem4uZ@gI^LkT#c)R?i=|vnG zZ}#l{ot?RUF6ZT+dRN`Hi%t8%&+@&u{2j}=UW0`CNdKM5iea}C6SKeV^5K?NJp5bZ z#t)wIozu8|^2*+4?|=DMRchtVwRa@0`#;-ysr1kLbKkV5Uf#i!y6)4}hz=>xCO z>6~8B+n(|F;-X#WmQRju)H8l4Br5N(w1DqpZHn703sGr9{f&L!ZA=P(?ti}0&HB}b zC$@8&zjpSj_9<6fv;RER{a@kTZ||dX>)MxZF0rmT_jk3~9(V8AiM+}$tW+k=zpyy% z?YXaNHvbvU`akSDZL##`|1106%$9zuqcWFK!Tsm%V6!(nzFk$`$lIFwc2Dn)cgZ}z z+g|=>SnX76`O%2upV#6uUg}QC$`9)+D z`!-!5Xn|SSQiJ-yygsp)N7~*0susJS;C}|+ zsLC_F?{=8)oK)f0Vcp=xDIHxqyMgh*TN%lziEEcWj?bH4^<3xV)+J(hcl0{u9MUrn z*gN}-<$ERO?za1HL%!|obMMGmRetN#zRtAf9RZ~wlbN?|P&G5%y)t)N*s0U|51Af4 zqf)Op-|0wTYMIS8N7=b7GyXG}uKdpsx`x@gp*V`+LEePrZ+Ll2IG*0qa@-xsc!clB z>z~2fmPznu$GjI}0G%2?Cn3q@py3BimgYp^ncmro>ofJNz8S2p3fXz$+dgk7iz->%Cw`E6dNE_{GzVKd1C%e(iM0KPeLxaCiDN^*j70Wv)Gb%fP|GFMIE9 z^N|TN3K+~<_8*Niu58giclu-gou)T?j@Q-HFt`=0J$~!ij=lq@+LzwWTgl;4*YTf0 zv|jXU)}CAc8J^2L{_J<^;Ed;o_y1K*xxD0?vyRlMdhv_dp>Ik~YUK01^9(y(mtn?y z!)cOgBCnIrkCj(`M?H9TGV@c|np3q`tIR@U`WJoMVtV+ukH4GAM5~(684br$V*6%a zTf25a+}R^_#r5yc7TrDeI^w;8xY!@3=Y<;=oNJ8}*}(h$LZ$j$<)E)2&jLO!ZCGQ! z=CAnjInuwTIs}*M-g|U|ck@rZ{9mq-J1xHQ=Je}@sb5o1c{(9;@3(*(f5kTbS^g`d zFxkrE_}jpqwguw$SJoFuHB_kY(qAUZmAPRLJG;k6DaPNcK1U{(usY9h5Inr-N1N%DU;;7Ux-JiyIUB z6O|{pYbh@HE4Fh%!TUc)Bi7AkymV47F}6cCLtfyZp1!^6UQhWYnd~!~HP#mU?c4tB z?X8lDf0p!?6~);ZbDlF)4nOh3YeIPGtZy!FvN-RU&DT9re<`c~#zynM{Q1_~XZ~lf z^m%x}QO{83Ti|a#8^6yoK8x!#>i=K0Uc2?0v zoMP?s`Op1lFyv2mf6mtbG^1WL+~#9v-DXblUxg;Sm|QaLmnwA0O25wj&#+cw&1R{M zZ&$AUd+$HPRMWnd&BYxB@1j@8U%R#1?pM7*d;gOO$-m`&HQc966-bwVUs!)vv2EnGFwE*WB=De9I#Iw``T(ekt4Y+5YoddA~p2lbigyzIL4o z|31-Gt(kiI>xB-aR<+$;{o>j_`2fC86YSUS?eqMrFZw8>?8fIi{6A0I*Ij29+xS+d zIl;hw^7ibjuhtycxZryF;`C-u=8s$k?#+tprd`>-Y~N1ngnE@D3wJNS^?>iXyi#h+ zY+co@anI%L3;fR1Ej#>Hx47Oyko}WlT-I-?o&$Rq+1gfTEIYPq|I)C;5G>Ml~!dlgoQ8Ge4bqf++e_|>@VT4UUfa= zu}v4MCn*1U@FeK(ya!VL6CZ}3>|?3g_@w`9gQWcneU>j%>h6j09lV#YdM)pD|CwC-T&@aTx3TVR^8dMVk;4lmyQ|mSK559e z2XmJ7%I`4=jnQT~y7sc?)RcSguHF`w+NQ{M{mO?Zx$A-lC!VV4-0QOcSh(0Mfxvg` zGZR$KNOEmnRjHnN`M_#x2CD-fT(TXX)V?}W=)O=jac0KfX>}8upE#90+T45Vr}xy4 z!JNMo7UlC^T)=8@{6^Getvi>!*3FWuJ@WQ5*Ix-yhOD!eS|yb`XS&GvpT z!-Ws^v*g8Qh8-0w@W3ZK&p+j%($S%H%T_KtQJ{>cu5C75%SPo6Op3w`Trbtux8CdP;VV zJu|+m=I&e8|3`KI&#uC@k890#&X)uYS9g2-l@zMfe3g53lFXy$^FH#*pA2fsYluF) zbW-oSGb^0$=*na*J2T;ZcH^2p>y`-h$?NM*`K`Zw;FH^-yMeaHJ7;{nXudN2;;nlA zQEYuB}^A}K!8z|^&cDu0#MSnayM z;+A_0=pagSp~+ubNuU7q|8nQU_0 zQqSe?_J580mJ|BPs#fLSWVu(dceZY_e~}lo-|)tIolVWmp4pB68CC|bUj10`&)2EK zH>QIYm-_ASh!?Q4(OhIzr)T@cZ294G%e_mNF8?=abC_K08tH7q+b{Zmd51g;EUsVL z{84xQubhzk?XAftEnOzxE_V21wuHSW^{a2+8Oi2p$2phu3n|R_DY`N`Ct2$5d*k1C z`gOzdZ)PU@FQ2^Pfsp;)@IALZrcX@x`_2B}&z)AU7p=S3wCmmnhxt7m8fC!|a^DR8 zB!^D!GJIFF?>UoOkNRbX{|stJ7y3H(vG!Nwzq5RFZ2srT$9BCCn;d(yEBl5sbA;oa zgN%pjU*>ujY`!_OBS-$FL-v1$&-a%nZLplXtE^)}2ZLIa<41Xy<$)XZasPV`~JE7Ac^T)*xvH>pA+!^E1G#G=bfJN^ZyJJgA$a|Gv$j6O)s)U$IYAl z>eGY!3{Ep%uFYGsW9#F0{}~qb@m*(fR49A1?E9vJD{tAD%6A7o`pEH+H?X&u@%vl# z&kgopw)GeFq-=d6Th`~uApdH0ZW~j?+xsVH{%2Sf`hJ6jv)Xh%+0EsDBLbc_%zY{R z_eG&z=fnRD7pL84@F*z%dH<{C*)>b@3Ki%0#a?v=HjbSC}p$llJ}ba;^pN%0@H8K{l|C7X6}k$r2{FB^O@$C zZd`EvpqF~jTgh6%!-iK3n6>u0*gw=f`hCaog{t1U?=HOjp)Jj^I@#}fMojSIqdOik zpUhdE?B*dEy}o?k+_kdjh1P6dZjgQdQKDAit@JxQg|hqCTvrZv$ed~4@tCC>Xu8LLJp`6X;$+FTC1BRc*$M&q?;oGLVyeFL3N{7WG zW8%jt;*o4Rv(6_~{AaKfUAuPI7768})*Tyn$I2UO3F&<0X}I=4(b!7py@lsl8LYiiuZ_-F0%3iY47A~-V-%ISZc;9))0_Ds&f>w6Zy*E5K*%i`0?Zn)v` zu3VWbv*M0S`uR}v?X#Rcob2L_&gmq)SG{#n>hqHc?BCOZBwA*QWqxoGiMjToPLR{1 zm?5N5@U6W6UzYxiw=uC#c1zs&F7c_=%&^_fg!#_I{|u9yS>ImR9DI6CLj6VewP!M} zetLYSVA+A93=5y+`~Ml-lV|i7cnke)e=%L|NXG29)7>se@#kLt&rt8O@6>C7XLCzg z3Kn}y{8ZYwY~S0^{vw$edz0Tf52nT)Y+qlY5V`fh2e-xXuNH6o&7ip9-rx4WwkyQa zx*D^inD;PTs6Anyf5Pf;@`KOa8WCyXC9i?+yw0&+z~Hjo;Q0DuK}s?;d#xp8oQmVYcbE%7&2FyA=;-&pFP# zFnf!t?Ts&6n4Vb(pU7KKKc^*KrlD(s{G$bZa%Z`nbqn=6=D9R~y3tss$M`n!+V`=9NpY_ESZ z`MR%2yeWk?IIltE0 zOJ)CO*!R{azIe-h_irni|1A}rkykNm&TaPY7_QFa)g=ncIUHWuGcDHS{m-D{%y`p} z@%-_1_7*1Fe_JWlpS|^}I_Kn>wNs0?E>i#PS5$U=4Z~Wi)%wdX?CKBNyn;pWKZEB= zZw{&cBP)FVGweBb>K89>!FrYJDYa@Ad;T-bcptQV&F!KOtP7`^Utj*$B602GUuXWj zf1{ngJT(5|@oM*m;wk)o%P#Y+y79^Wr<&Ra|K(g2i?7|>&b8bmx_fGFPKhAj9s9HO z7hTG15C5EVo&7uit*>S!K3cE%bhh~mr=9=PmA}z$|Kiv-oA{lA(s$}K)Q_@GE$w89 zjcwl7xXk{=YMtCB86(cW&nz2TRf)`BPVq+)1og;IRG9 z|L3UK{m|ZNmP;yy!XjUp7f4*NV_7EYS2^jD?6GH)?*FoPm1F$9VAUV*)Svq7VH4`C z+kdX`J8{x@a|U}aPya6u)$@ANxoj2uPc6$FE@#I+6A3!n@xG^D^-$1D#jk0(XRB?E zzBN?8ox*h9+5L3mI~8r--_bMQu3b?1@;^gJfbMEFzlKUC`$k`b4!Mr`D`GhRDoNz6 znVD();6cc&*L<_1x1T)z?~e$xu~h2T>5QMhGOLe@g*3n%)xeRj?53oG&cmA=) z{MxitKgw6c9s0byy#8X*?6-A4`6hm7{FfaP>t|4MTFSlgKf}JwMY&(iV|O>aOHoTP zTKuY~{-yTMj5%p3=Dur{9|d18*f96E`;@7%H*Y+sH{*Czb4l{X{uhf+2!sZy>rHWcRd|7Fb(mT1&)KKD1{!d%W^?|KW* zpls$X0{o3Z$;@pprv2E`GUqz~g2Qqur>0q|D6#YT|C+!2-_y(vYl;61E$1&)TPj)i z3Rg|Nu2lPPp2(nmjAkGp5=druI(4h)#C5o z6fWkzzin3cpC3N2_4udHZ9cebYJuIdEu6v!ng4d#&DEO}RWqeoq;IFXW_|fZ5y{3+ z4EE1WZH*N_#6NqyYU9>*0+*ur6Bns3xpzs?e8Gcq(^HNd#}k+iE0temJiOwAy~yki z#%msL*1YKz`f^@jxuUe;4HjXAZ(8z6$L|XMOq4w{amCLTd)MEKD{nvOn*aa8zSAuY zXK(Ljw~znj8>FXK|I+#SA<#x01#4~2JD2>=*}n>0dGbiXt@7}P>mDqgW7&`|(DIGg$I`R)H1 z0{5qE4M{DMs@tsfbOJnKRk;JJb8gQ}_dp zsBFJpn=jKXasN-#?7UNa*)O+Fzp5}H;-d2I=wzp9k1wgejc{rE6tySI{QceHyEk@# z4$&6v58e7wZ@$5$b#~Wd4t^`TCikX5$bRdWP;G-xYVqHDgAeq7()QHuIdD5^Q=()S@+8qoqjFmIl9~F0Ds4~75kSp zuPt(K>x$1jF8|QHMk-k5)DAO?+K1e>U0Xf`R~0*a=P&r75!t(;Ix7ByqK8FP?Y5T> zO8+yg{H~C4`^ENR55Bn$h4w$BZ(WrNQ{Ls)Jy-`LbG`Ck~ z2e18$Rc@#93-0jdJ=x(Y|7>-L=~Sjy>nh9NHE)ssJlV~2a`>XhjM3(W=Y$WMZrFIZ zAw_8AlP6o3H16DWV7iE7>AS06C)p{?e_b7*^YTlaY<0|oPn9Jv|28dUYumL(d0Vgc zx|6jF7wpci;S^dE9DB`sTf+mp$#*%WbRLA!!DDi(3b zJy^5C{i(+zS)m;cEIX{{-u9P&u9A^`Ky~>$Cke~V+mmB1pV_;q>x|wqw#x?|$tgeF z8fIa-Yr^`^^}nQkUo5*2Ws=hWYPsnSUdQW)UD@xJNgvpFa9uesAN!xbO9l6aE)Pm! zwED1cn&n-N)30W8oKq<0>+jIbe%#Gn^k|&;mp@? zj^gOnNsqtqA6Zm8>DPmb&W4itPjw~r1Y{UK3H}UNBX)-E#7Fg@xtwy^FRYgw2{nm2 z{mS^jNBK9d`ZKOf@~QUB*H{p3Aie&$!;iPy2{{F2iz9wDz_D;{*Z&Cec6+h2-9!IT*mrkYa zUEat(>4Kx?;UjY^A81{B{44jq2d`4Ob=~sc)}h{cTkq`oW8v31(1mx zCjUJ-FaAWe!w2R0Z%xy}t8bKiuPF_?S?r`dgm(y|t_Z}U&p!~gzF z5VAhpe9(;jWi(^=mBQORyS|w&J`lnFbN7`OC(r2XoL2gi{G~(g;oqwLg?_W|Se&f* zG*kYEhVPU+vu~U3owq>l`djP$FD$KFz6!biRNvO4q_!t4?(#{2`p>G-myWExbSk#z z-EY43Utjm%Sl!ceD~IRg;*$Rit?S%>p1Pd7VZ)8vatH38Eu8<$EZoGtyR(_SBPip?(cJ5!lKW-nK`$b0f<^%V?YPVKDoha=v|DDm{BP+V@d5BJU_>f_l#XBaC zYIgybe=hy&&PBxCXI|;PTy?&CnDC7gzMbsV{qvVr-nh0Vy2Withl@za#T~D2)m*-t zXY0$iVFy!^+k%=<^{-ahbJrG5X8HJ^A!NzJjywD-lOL(Ce=v6@!zA9kY{sTf4jJ-3pDye@?rZeMlYoLY7$ zN`~`?Z2gvJ3nn`M)V*cR_oQCa;c1%6BKIryx~S@x*h zN-!$w;M<(}_k0&$ESO%hzxxzyL*=g+lvfz>)D z;g&{P|M@8nq(uJih~%(qQ7k??zQ|HrAXyf>va3m6a8 zEOfqjv~os&m;Z?`Ki60q8?COq+B$!tO-|FPGf@rS%+hyg?L4~rz?Ri|+hv!#b9_>$ zzZmfKb%nG;;X89rPmiNz#xHhEe7nwRrk-uETD1RQ(Io;};n{*Axf*-bBgWPfn= z|9|Ono}F1}_3Pf_-~GB;ukP9|wxgzN`kOaVJXcoxO&)XT{!uM{?d-)$y%JG-p$uHi1x%}Ne_rGyR z6;AhjU2obh)9hlxylz!WTjO#Y?fD7(SEm{D3#9t)wOU~BnP}(h|ERyDVBWdHjdyq% zKRB1{Si3ACY2p|DGt0~Uj#+iecf~k{!~|SoQkHpmtn2O7l3$Ky(Hr8 z+HP~AN?;;TaI(pyO!CK z_Nz@7d}iqXHO08@URM9i{|x(e*>c=t4;+wu;7AKKs6 z?zr{vGuJg|!-Q!W@9%`nlj7@fVW?6%@j8<&H^IgF{eOn6^t7=0`X>RmB<)_E{GlC^ zbTMDI*naJy5T-R#lvfxob`$=aw8Uz*`?ETY^~Vn7+x!Xmce?Ez-+f*uxhWT8O4E3` zW52hGmqzi;jTvgObL)3`{AgvKBA@q6 z=$hb)!uNls&VMO)+~wcwJxRjpd>Rutd%yV$mTbRy^AmpuE7LE@vfYc1Y++mVw)pmn zlFG$A-Ab~oA@g(|dz`-`SGV+0;OoWAVdoy_pY+_xzx4L3M^ZMWEpvKSR~Y9akg1%G#~GV&cjE>vq74 z6I;KtP0vky%d+^5q{E5KzmY7R<)wFJ+wHJgr4ep1TO zzTy@Ke?l?;bH@J+A&WZZJO5b!<)>k(;<6ORJ5!l7Gv^+duc^^@V%uG3_CuV3Iy+v! zJpL__S-B+ikhxg*Rfgk=#&bS1m(Aa0y>h$U_fFGk*5^39?o_X0*zxvvr(esFQij5k zSIt6!jO%Xn_jLubJ1_5_HCuDjwYe&C{-yStcFgsVpBi^?*3ol?a*SPpZ@5;S*w`df zZhkgetbI#GrB?5P{9Di68{e$qnk}`5zirhSpA*w*GM7Hz@pI|7h^zhcc|&f; zO_EjgzdY~cl_gFKN;iI#ZQ_1&EN4sm`~%u`bILTkqe={I4|@7#-|b7!_OP$wEKi&9 zN9_2*@P+`3Df1-w&$3$PoY>m#E)8S-h~ej|G6%%8}<3)n+w*NAFMQua35F2nABT^oNpOT3DB_9x=O zd@g3^BhBeSnzDy3DZQEzRr1}${pYF8D_*8<+z$%*B=`GX9!vOw_Stt%Sk!qkZn(| zF5kKN#wi=yE}d_A!4pdtoO|Z}-l;sgg8=`&uwpS}Oa8pft;Z);T#|BU+2AnG8* z*TywB{C1>zVad0$g@TfA6STW*XB##>c-vF{c=^|WdD?jk*A>^4{AV~fW#5g@r?cn3 zYGqH|y){SvCYR-dDcc|XXAr+K(c+tZw%Owgf1@6qSDO9C@6Yk(Crxiw*CansTv>;>BSjm+kxesN#Csn={G z6Z_$iN9{A-KK|&EA5>mu{?0W&F#VU}4~?RvXX>Bb)Q{O{AMAM5W30Hx=J?FuFPk|o zeqP>He@l5c-#%84^evw_WVZ&?-nRD;^RozBy7uL>TIrmP_fO^jbM**LfA&}L*h?eP z`CGQ$cR5rax__^|%ExYt`?CESiyqW_e{^zlkdgSIIL-1-gV*L)+rM|nv+NC<=RNsx zyMmeF{9g;3INRSVX7lxQPJZBJTo`5D_`xSP$8CR8Vu6gwp`FY#xD5L*Tox4Ad;Z3Z zuw$}vbzjx(J%t`WJ+=O|f&2pXBg@VA9`@jJJbt}J`SPVxVK?5gU1zEZk!P5`Pvr-1 z@>z$7fA6Lo+*Hn+DrCCb&TBuLkB-W@hFy`Y1M)#Gu!c5N@ZV>yYr8ez|_atZL zNx#}IJi77NZL0h&F_--7#}od2Rqi;>>lyHyZ@;$-=mf4ShA*%8U8qxZ|5oRo*8G|4 z>$~ieZ?%opIj>vHT30OlP^JHu=1!w?QXgXM>;E%2x+DrOz4&JO8%u}3OiK)kJpbja zx!8V9dqYlT#Yg^c{~5BpE@uClntZ=^=ibwCaqeHE7TY{=&DDOZdhdL%imbJY`}U6< zEh!h2@7N3eXPD?Lnfp#B@pJb6onm_)lzio2J|h3lP3Fe5HlhCv-0lB!9S57dHE=Thw3K8Exw>+Wci3dregRC#}76gO^(TXRzF6Uy}KsA!ym7 z_Jr+iv8NMf%n)bXyJYw7m{0Yu<}6M3Kc4YdG_?7KMNz}?#Cyy$lRIoA!ZI^+T$gM= z&{y|mm32$xjh)wnqF!3O6}-Ek|JQUyX`a^+zo-3VvfW?QJnNEahP_J3o8IajjK5>J zqaL_zka_W+!7Olp=2H`ApPJ?WR%YcKdmmx1%5C^j&UP)Yor3D})a<*b>gu9@R{m*J zd-kMp^^(ff=U#r9r}NXP{mn_c>s$V$D1QxGA$>*e{u1@){~0E^rIm(dywCj1up+wQ z*O6Vyj~b#b-VSKz{rX!leRJNm$1!*JU8-cL_M1QF{*o((-8*kZaDFIg{?FhVc4tEI zLB8ZgrpyulR&`ZW^zC2M|8-x+dZGTTPkFTy|ITBdFlkYNj!gvnOqP|KjdskI-tsd` zs4ls=eaYFg?_wN&Pmqx~e)e#j(SL?TbI)DdT(DZ+_di2{i%4Q$%<~!n|G)z2`61i) zU0(6;jJ9a%qo}iQGs_Q!Oq?&Vw%QZMSz8_b`{)U=XFHE< zT7OZpL7MgcmwjDpUNz6%d+GW2;yW=x#)77rN908U-b`2gYI$(R*9q+UHuA5wp2$m1 zK7Y_Xk>#b(5|vD;pIHlLPBb$X4uDi zw}0{uQP(T*5bk-srXoDVT7N^C%u1E}sY-?LZa+v}n(9lmzS zzKa@bH_0$$sDECfWVwC!=7tad8H(1Yzc{{U+Ib-^Bg^ko9`@PEc*xi?>K@y-yzuQ$ zR>LhFiLCdsT66Bd%T%fOAljv)TXyMQi9o4ezhT#bM~^06&iC4pdTZuQ*LBYX_MQ93 z$aU_eq1B(u&1-yCi-oTQ#dchMgM%0yYbBfQ%a z62lj-44m?I_g&Y+(}Y>-uiaVCZoyf|m+|N0e};)30`BdAFO(M$)hdW|M{K!&7ezyIR9PxeDqqs z(KV4UW0}8d*Y3ad^54xif6;;Oe2@EodEOCtDYQw4`W&+57}LeK8n ztn&|gE;AR$?%bzwNqTMF{(FHu?CJqi4B%wTYa=e}=0f zSJu3DFT3>2s`~9kizED3*ChTCy1B*s<&yp6C8~yTV%~ zIlS_aKfVuNO!=f+ea`P0gPF|m$QGd25K21IH z_r(?daoXXlY=xwLSMe6R3o!cW>U{fEEoH6nch{l%VC8hSZ7Gb8HCv87P(S17YcT(7`k(!~)+yd- zJN$BC^PT6OzZ9&zs#eszcHFd#hF6ZPU%$e?;@Q+Gd4*N^i zTq~dYE31}S>bLYsmZiuj2Lze@t@k)|-!@UWqMXg~tM4`)OA@ zn@APyJ00s^|C&(bQrD?z!q+>$z$G_fu5}UDiig#f7aeZbxJ-PqHu-5qsnMffhNpGk zXkN-R-ZDv1saogQlc;;2y3U+zc=(y?Kysc?O>myPh+5R~4zw@R@1p(AWq-?a|1<1gR)1@6dhOz$ z^KL&arM{|w6i8CHsU|53km|JC{Z^IoLq=O3*+d%gjktC@;z^DM`&!NUBtDOvz75RS3w) zFUc>?$S+u-V5(>E|E+8sTtvZG&w#1w*ZWUSeKy zesZ>sLRe-|dS+f`qJpl1Z(>nVW@?I#f|-#*WolxPLViw)LT+N7jzU^aequ>xUb;el zot5o`QmJkb!9h zl3A6Sr=yUVo|%^pQp;Cdnx{}ulwXpXT#}ie2NGg0N-fDON=*T=1#?m}i%W}AbrgzH za}q0{nncSJOHzw;6r3|sixUe{6SGqloDwTR>ctCE^9yoPbrkaRQgswE^HMU)GE+)H zE-hh@BNPfL49uayjxtQ!8Q7fz;th>VjbxafvoRotow>e|nLa2?6)dexOs!1K6ast| z6hcxfN)&<<%TiN7F+1EaPXC)(8C#BI|65ua7>;27n;KXdjO6$?wXiZZ0mr{xSSh$z#rRf2O4#BUxBQ%x)FK7{ywsQgb3@Ygq`GuTElw`VECAJ1R-FDm zk-h<;!3r*(?w%ozJ_^o`zOF%z3NXOS<(r?9nq$T3s%vDR10wvuWB@Ohe^F*?UP&Uv z7()eKuAtQ7{G3uK-^4`Ez`y`S6jTLUaT+P`as}t7m6RtIrCML#KJU zToOxC6%zAO6hbm{LFx?*jI9jJtqhG73{9PGWI}6{lZ5FIQB4ey)N~YF>Ith83r=kwR`Rl1TwY z`RPT8xgeEAxrsTvT%N)H3c&@bsVP>R79elI?R3gaEVkk_fcn-qwIsC&)TRLin-yn3 zVo6DAQ66^7LW@(2obz*YQ}ar|4lp)S7)A690Z=?T=jY@X1s5bHr&@7>5;3T4%lsCc zX#_y6WClhCPOUoNAiG&0Apr6#BLf4I0|Y}tfJFpkF9Rsd7{O|JKzxCZU_UT0gfcKN z6o5PkrWgdSGDt8mBKKIB7#TbmJV@xVykp=4_hcAS8bEgZzs=CXz{A18!O6kH$;l(g z&BZM!%Fn~YFDfA{EGjH4A;<#;Pzub(AQ*YMxq10`1^D;`MELmlL_h?e2tPzstbF!1n(LqdfxyBP$~qfP#jBfq|KUk%@(s zjh%y&i<=Q$l97Rl873*fz{tYL%*4XP%Ff2Y%FJWT$iO7X%%Uh{$m$rFD6CZ2Xv8Km zap6WMWfjq&gGt6FMNJo-*;OY6e|Y#Yx!6=}(WYiKm&qY1u7?(vn2BEseU$oXbIak& zrH?G-Fo!u)30G^Wo^@zZ98`D**A0d@bvQb>C3ktzyAEYAOjN< zBNGb?*iGzgtfpWmC>jc}I0hybDhab1HBJ-(x!_>X#Sg|RNe_#fCOHR-CKsE0RAmD> zfL+b>&?T42A&bRRTtm%DQXj#cfZGM?2q*l%#lXW1wo{P7p5e}}cJa2}4HnZjx%ar3 z_PP|VU7LL8(sfU{#pZnWla5Qx{=G^^?HEJZ`;0&L8R{#l|1+Em;@|srntZ{Pem~{L zFSES&pAFim_k43e>}%7vzhbtS|MdG_{nf*^Wx~r_k4&@U<-cw?dH>HAt2KIMpQAgC zZe~bL{CVci-*b0=&VML8t!m%1&52e5kEMPv+^_#@GUd$86?fcr$sS^nmAwCQ$%ktK z4{lTlD45@=iF)Z#5fLlMa#n(47tnh9JtnI`=rm@#Qm?l`|Uq_S8C2w-EeH~ z>wm6jU7MX8b;6+X`M+6`w-e3^SG{cW_Ilg>)!)A@nKb|Zg?oH!4(|N->3!ZM zZlAjU3@>f(KY#D@EsP_3mj5o54Hkv}c-JKq>FJ8!PG25T{DsAXSMcY#KWFFP{#F0r z;<}eJORqhDYi8cDrq@CE-SvM{YU*7=tNT(%y+!~ec+cHQ~63!hk2g>Alk>-&aHyUn)VdtTQ&?-|?nv@c0I zjdv9y8MpT6?^ZhX`grNX#kt$UzL`#){4RZWadz$O`Z+6CtbO_OZ1S5@GX|b_$+NzT z9lx|bdHd=eSHdrS)H-;GmuY?N<}Y)1oSlB-@y~1fi{AuqSG*GRXZKsV$s9VxH)5n@ zqN5{Dz5J`Yu6pjKRkwe6$8Avkc=NnXVbPDr_5~jvb?$!n_f7l1`tOp*EI!N@QQkAB zeAb)wSL~iyoY`Yt(yw_x{?m*nYYMXuN4Pb`+?2n0RowE%(yM8Ych{K(v#!~?%u!A8 zZP}~sTi@LLG9jnN#%j~ENtTMY&L?lM%u76BNyj*@b{y=l>U9|8mGUqMz~I_FRGbhWr;d?v>f+@AcZZc;>gw zJyINvCmt~WJpP}7`R~{0WvS_Z`xPE<+x;nW$E8c3H=ZwMUm836KZAGpzWwK8O5>yJ zHl(FR_LkX7OzZ!UxA4J4^@3{M?Wuk1fBII7sr<}*`lBz>FPt&Cy)RHn#r@V#d-v9j zZGBb@wr#nkn;vOz+#d0$-s#Y#Z|BzDk+>h6U0)ko8fn7Yzw*bs%4s)K1lXla->yEI z5_En|`Oe;RuOgM&_H4Q8?566vEB9ZU;hP)ppWOcCx=zE|dDii53a?q}UYEW9SGxcD zz3qlV$txeN)onJhNZlH@<=_?ZJvXjxnE2=Myi1Q4{CT_Wchs!I8EemMkzF8}aqHR7 z-283N-UQ#{;N?yBZWP^j=vCkQa~)~-zy9J1op9>F=~9PYbMFPO-&{RX)fdF?!OApU|ry;@K@aYr?u>xkbN6N-Q0caqQmRv0HFzw&bCDn^Rmxm|EzRHcN)ZKdc+RC*G{flJn zZ~n5bf2n6b>*@28pMy@f{Mz8rC-E!&ji2EZ)uaE;)ksPQtmG3eDZO&z(cPt24L5FF zb#%2%SFPH#VBds#^N9SYiDj-?wZ3gYWxx)wRk^tzR4(^=vk`^P57c>|OltcHekb9q#;Leet`E zkJ?#s=9GW-68`$}^zX}4ZWJ@9@BQw*^Y-(?kGJ{y+gE?tzh#p6ioYLU1s<1s*=JL> zWQ)Z8|Ce6>QoptCn55X2rq>)QCI&kfZrnfJ_~mp{f8zx*w`2Y@1YC_|E0Ny6Sv~Lm zQ|*t@uKvf@?Axu_(90~j;G3E4ny`0e$HZN7q_=h`6m8n@>EpA?HFJ)n8!hh>ao+V!Q zEL?fDuCuTF((TBbKmYw_xMWh7eXZAT%f4q&)z-P$`p@nJX5Q;wn4W4)+5XR4BmFLWB)VcDM%G-=@zfv zxz%=A&IS|1OLpzg?eDFL{Ms$9zWS?-l-v264|_K@^lrQHpW(T^^OyRNVq5#*pZDYc zX=Wv+-k;x`X0hRNX>Yami5%Oj`@^pNoyNPaR`2_gVg?t#7vI)MGClhewrS1x@Rw5a zex+Yl;5{(^x$WBYmGM99!;@|ut?gZV#VT#{7RP+So%2uq;=8fq{wfPuXYMs$wSF~! zHrh2?OZ0B-+2W0-UFR<Z2j^n$4uWY+y3tM&UJcx zOv;DuFWUI?P0@T)OSeFAiQ`v~{+?s~;lsK{hCu7Aty7bu9)@{KeazpMUflRG@z2%f z$*y1TypsAH{mTAqLzL`;?-uOF$+zD}n?+8!zIDx^?u1$ASDg?%z3q2h&w|oF$+^si zO}Z=C;;!XhUGi7=n^?7W)z%L?&&wIM>nun;s-I^tr|6gcfq#3JtU2Hv@y;$?`pr$@ z{cm~i{=Sq{fAQDu^4x!?JhwgZznJ%qVcMDc`1;HLoVX#T(aBI~u~4vVJQ-{YP$ zN#tcmCBMkgKUTc0KK83_Pu!|EyULSyNJlbX+I-7x-uvK}w(I_$HoF=1G(Xjs|B0{g%D`IjeZi#?M8cKfIkD^;=8%kFtKEoOJZdOV{dWCoMkpyTH;#@vxlUq(_1e z<6Rm&tFAx$@@{HRM)Btj?-HtS>8LJyF7(`UpWd?bfzN;5|KK(E_^Q&X`R$k9ChL8< z^DI@syVLI0n(YR$(>M0i@4o!6@IS)?&Gi>U40gRZ$dydQQYT0ZPxo5woiJRYA z_we@2rqgxDw^XhBs96OYa=ud9D??eVK4FSfovu6|KZZq43vihrus z-HZM5pW)D(i0@zjEjl(SlcjNuMgN1ZowKj+TH32(ICaav;*)h7-(J44$=~qYlhcwj zIxfD}Rk1I>bnAE%bFlRX{>6{dH>=BETl4M~-vgVi7n$y@x-pUY{M6_B!|gVfuJK!T zF*bL%?0<&yA?I`I4;hzlF53Nd{>m+}zJC?JnZzqAi-hmpYEj?z^~QVOp88*+>GPg` zPVZ6gRydOVb%Ofye_K+v2_93aXq@oE;m^J4+H1Dd6{>Gqc*$;KaDGr}8Sjrsg=D4| zw{pJEm#@~(-fLEWwEmEu=C|~F_P!Ioo8G&-4W>ndf|B?THW#`1+

    qE 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%0A3ySjd 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 literal 0 HcmV?d00001 diff --git a/users/people/darin_adler_small.jpg b/users/people/darin_adler_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9eb06e0badaed56019ab9838b8c4b7f6cb0ff48 GIT binary patch literal 9102 zcmex=d%gjktC@;z^DM`&!NUBtDOvz75RS3w) zFUc>?$S+u-V5(>E|1G}$57 zAbG4(|0$6J+06n80gzuA85o!xAQ%z?EFvI#89-qM2}2$bpVt`d2L^@$1_lN<1_s6e z28QSd3=F*D3=#~C$SI475t0&!PFe35_`oTSA*BIi$N$?5Eet#y92}e+Je-_7g4|r( zf};F9Jp7^(!os4$!V-c!U;w4SYz%^tmz$fHk5_YfBEoL2?qB}Zxl{B0D&5<@VDF<1 zd1cQ`Or~+%Wq-N9`roYQ(YX<(fBSQ%Rn069jXv;X@4JobcmI`pADopIlw`8tWDDns z=Clc4-mUmE=e6OdmA~}@*4R!JR{Yw#w)AS`&)>0s9@igS+ctxH&e2m}cg-#P#X7II ze}UzZyxR$-`TrS~9kWh)!FWNCaC`Sm~dJ38Bb{2Dm(o6zz0oeviWnu$lsy}x_oXzX6swZC1<9#21d?{!2(*{<#8 zFN~gt|6Kd!`$p$gPXn)530sxvwobeB_vyDS8z)5lsy|qD?w8qK&Xi-Wa*yjZ)Y&W# z2}u&g-?sK`xS5@``O3GPFZHjxn=bpne4zW+Wu;X{{ak=CBHXYl1r*x9k<(=nmbBq5g|C{#ed(xMA)BZDT zxS0L=XzEt8T-}L*JHOl4-JSYx@)x`Lf0A<4cWR#OPq5y%H2HSGjL8r0|C{v8>gk)* zXQ!lJ+CH(m`OA9C_x{($KabX5S}(TB@b#wC+H0g*uiM;Ao^$iB>UaBl&+oi1p0oO^ zm(;7h?wlFc{j=r&Gt?zdE)rJsnc>d3ea6dY*GtvSuD1*BJ1F4t@#nt#PjxrF;GOq` z@uSvOiHa|l*Mjc)>z8fdf42SCiTAgpH$E=*Xy5XkCF{~m?v9ibE@w9!e-%-7^QFtQS`9*Q&E*#am4kiZz1=uGCz5@_V%3XaWC(GnfG;d|JSwmy7NvR zQS7~?yKQ=2+VlDt)3x`W?N6=S_T|M)!4%z-Z<|;+Z(prd{ihSR$m2?rdcTQH`_bfI zZ{)ws+S$Ll*5m%a z$~mj^lMCy_XAhG0)vZg3m7eo&#j~adGS1$wlV==yUv}NR$Uf@j50hK5Zq^doU(#gK zzwF+g`|q@<+x3hWJ1iddEx&TE^je<5gU87?qvPz~t`CB)nBl z&E51PyMAr@^X17Ma~5&1#IXPPH+5!OqDbz{@U&y6d$nBV&QYnQ3jyN&ywEql^qs$`YzSfg&sIBnUQAN&7bd^x|)w0G;a zr>1YVu3L3>>GF(%TklJD7d^9E5cI4zaaViq{mq$se;>a%-EvFF$NvmcxAkuRX>Ff8 z|B5beYM9ZY>No5j|H7W`|0-{EM(nG4%;o8&ix$0Z~f7OvAAGx^c+b@|;ZBFV4cIa(_nVl&M!PNbcD2 z%fY{~|6XCJ(Y;gBxof0jOZTmvxP0&JEcq`HS4(WSO*rsv`@U;?`0TA;Y(35V+BH&A zLUBi_)p4_HmQyy>x}Vv4uKcUi`{19PBDG?#f6Ulf5?uPeR6L|?>l?=Nru$zSzA68q zX8)yYX)H6>H`6yKH)}0(_;M$4;o;-SQP1A~xf;Htls$I$()4Rtr<8BVUAlYL?!xu= z-}8f(PEUFwX8Ls6*58h7DrJG^`%Y}K>3^Hj&o*g6=_~ygNv}%kSD#(>Jl4%4!{GXc zceM*lcE9Mq82)$ruhUhxHlD4UeWL$fA&wRFPX7&2t)-JZq*)3

    3z$sbEw8iIPgwi(;AZuldQqPX6CT~%%ctoSqkgr@ zT=&<-iCgw93y89mzN`FrXRq7K{|phcCmr~+`gYGt1q0J_0v6SA(mzitFATaoal-Mo z>0%qguDflB-JkaUZmepp)npd4^gaGh!`LJyT>JisdH;hK36^`EX6xnM>B;IlZDg9T z_THrnZx5G0|M!ajmR9QirO8`Za{1aB56?Nydp4rh?fApJKi2T&TF)+!pY>WfedQMC zm}e$A-_>63oGE^Fa+-79#aM%gW3Rqjd^mf5|9^&>fOA$8tjcqo5{^h_`R%ghD~+|> z{y63F=BvdDK{?ikV?JHm`TP9-?5yH7b^jTjU9%6|H9al7w952XzXC_K|IhWIGu`4s z+pb5y++#64)_zVi-uomvZkG7A=zqoLTN7#%7TsCz)lDW3AtBx5($} z70xxykpJozljOC|>(c9W-~Tfd-8opQwQs&Y|KHn}^R_&B$5T-GwAWZ_?uPgG{~o}_Q;gWMN{xhuo{Y__2 z*Du`}YxDiL1o?mVKgxQ<`qvu1xROamH{O2z&#)_`yzf85gZ~V7_I`ISbGyHAf$g~^ z{~0nfp6tG5zCG?v(Vl}Ump`qt-Z#Jd+vO>IVh<-IJ4$7~`)Ysi&8_XT6SwWZ_UgCo z;~9!)m5=WBEdLg_$5S;}{qnc%hJWjm-)-YtAaPS+6Wd+sa0*4Qjp(WrNsEpq`;fQAA`E0|S!;0|SFdI)tqQVkbe^4j^_)Ze9ul0~5&21u3~H zAodXk28NEZ($o|N24)`y28On>%+zuQ2Ieaa3=AqcrMa0549uW@u}E%eVle{)3#jj@ zQj(gS!N9;`z`(%3Qxp>9%)r26!@$77la9nrLSmPsR+NBz?VMjwS(KTcQKF!ctf^pV zX=$P0ky@UUT2i7LkeHmESd^mRoS$2em{-Zb0P!|g z1q=-QEes6X&LjCp43u6nN=gc>^!3Zj%k?r-ll4FW3b%-$0=P=t3?%#XK=#4IPQfKL zEwMDGL;;kllk;=(ON$hW3lfu46?D-PG1(fCoQ32LouJgT)S}e9y}3>gf$3`Gp(3^fdm3~dbE z3=m$mGow!W7Gt&Q!=$#ni&o$25a! z5z`u`ZA=H5PBUF)dcgFW=_@k>GdHssvm&!Dvjwv=vp;hba~g9Ia~*RR^EBo~%01)4f9VHHWpzP1r}WvYZecdP?lttLY6v~9+p`wD_FL%9AUZ4@{r{N%Rg3L zRvA`pRx4Id)(F;g)^gT1)@iKEShunsWxdM!l=T}M8=DxLI-5D02U{dt7F#u258GU} z^=t>&F0wsl`^wJFF3GOVZp-e^p2%Lp-o`$YeGU75_Dk$f*?(|wbI5ZTakz0rapZ9{ zaZKY_#j%g$6326n-<$%Rs+?Aw{+ubCm7M*YOE`CNp67hZ`I}3SOP$M>D}*bHtC4F4 z*E+7FTz9xWb8~Ymaa(c+a%XZkaL?f0zgi5b>NNSE#d9sUCDcx_a5&LK4CsRK2N?BzIwjdeB1ag@x9~c6c#iT^cTz(>=9fgcvA3%5WA3?kgHINP>axF zp~FItg_(twg`I_yg`0(!2p<)GD#9kBF5)SYCDJXjR^*(>2T>tW6VWiy3enl3dqp3J zF^j2*d5YzT^^0v1yC(KaTvpssJXO3?e4Y3u@$VAS5)Kln5?vDOC9X>Rl2nj%mCTl$ zD7jtot`v)umQ`d9ivTx+X^DDL+Mizx*o&Q3XeZ9EBMQM-)CN$|!m$mMSh( zJg4|uNnI&asYz+Q(p_aPWeeprCcW)?@AOslqx2{0AJ_k9U}}(K zu*BfDp^%}MVUyu5!%s$9M#)CAjjkB;8oL?S8}BgwXrgVBYBJB{hN-ZruW7sKA=AHR z=4M4^>tC%O4&oRGlAz~3=(PMGKlGW15vfgr!#!kovoZ}oe#J$ySTe_xtwzqat(Ez<$BLe$t~S&wc7`GQ}=5310Jj%-X0S@u6xRQ zCVQ^*{NQEoRqJ)co5wrYdzSYjA1$9EpIyF8zFxkQeed|G`sMj;_h<0;^q=g1H$Xk0 zFkp8eTVO!o?7(M1hCww!$Ag7~Zli&_@-HQF_LYV^|>)0noHYq9FF6|pDdq~dbo_QvzaC&q71 zU`+^5Se5W6(LZrf;@2e4q&Z0+lAV*MC%;Z{NSTuIGSxP9QtILn$vzKT8&k4_2pUaV(kh?QaC@(wjNWNTtMgGMC?Si&~ z2ZdIJQwu*7c^54!W-N{^-cce_Qc!ZHRHL-D^kJD@+3d0(oo41+4-+4rR!9;LHD%oKRwAkr+N*0 zXY~H>OY1w=Z`MC=0^5YV3D+jtPh2rca8lKz$CG_0Z=0eprEAKUsqs@!PBWP{e>&In z(&-Oo_{`WbQ)T9anSW+w%(^<;Y4-X#GIKiTe4m>#_tHFvdF$rO&hMW8YeD9M8w=eR zZd;_bXxd`7#bt}1EeTt4e5u9KmCK}-buat7Ja74f6+tVGtTbP_a+S=g{?$yYOIN>K z6SL;RT9>su*6FTWxL$01_XdUyr5j#tOxSpBllP`Wn=Ll4+oHN<&Q{^AUE3J9Rc`yR zJ!AWW9g#aO?)2JuXqWY_t-JMhFW;lMXZBvvz5V;R_OFy-W*In`1nx# zq1%Te4qrJEc;wts@1rMAEX$ciKIfdyDRC-e3Q~?7`lLE)UN<3Vw9^aq{EWPl})XdD`-f_t~`P z^3PYkFnY1)rQ6F3ucBW)eO>VS_nWr2f^X-%(|EV#y~F!6A0j?H{aEzz|EHeMlAo7< zG5K=nYrxlg-*UhG{@(RN^2dsw7C(>w3jg)|cljUoKQsPn{@wM@``?}ax&QzFzs=yx zAi&MT$HOJS$IB-qC?G7MAtfOuCSj%;5##6J67Fhl5s(`g9-ow+ zk#6T(SXq!#5tEvp3^IgKP)JBZR6<`$NvGZQl_8!HQFN|1qpk%^gsMNmkQRoGC;F)*=^O~j~i;zDJoNgFR3 zHy!*?^zh^VBMcJYSs2iKBE&$bw*N;MWI^*B%%FKrm<$6Wlc12IA#J-F_(Bu#O zUrl|3lz%4w+G{P#5jl4QTm2f1xL-4F_|)&Y&Ji^6yHZW_tj3;ljlaCk=FKbn{AbU9 zw!B!gVcm+uY?ACV>SsOPX0n!dPp-tsLJwao-*u^X!f!qgLs#;Yh{c~3*N8DAtwlevLZ*0_|CjGKUA8p*d{HK=4 zaxz=4J^C_c?i;DKEbPaY@p79Ql&w-xwOElhM~Y>l^`#ZhrYguiGXI`gtz*spX~DZy zceEsyhd*18WY}|IoyD%tlFHlr9VO10ulx{p+UohL=FnfxyG+AQ-SoS#{L+%#MK^RZ z?6(Ap@WyJMWJq7CqB~$j%znAS+mP#FW)mwQYm$! z-+k^1xmVBDEt$Ht<;1D~42w3*&-wbZs7vhP=^3}&RS&nZTmO*Xxb~}cm}*0Dk!b(n zX=|sv+-sNk@>1o>W`|5swulE6vu1g${jkBVZSBk@zr;-yGAfs|HLCDs2B(XxWa`)D z{Na|dNADB2rJQ%Cn8u+Ak^OTGHVDo!JXiC2=HnHQJGgTr0xzH5*JAWk*5uv|hwt3% z{97kI3%3dnyu|tUb<9}{7h$8%hSM%?dVXrBfAWv4-+!k2?pH0?|H=OA{Iw;Q%~m+` zt@ch?vBc)^j0JKZnh(<76QFFA44G-plCuD`FH zwXLnAr%k&gDK9mbSte-BI{B)#$$X0#xtGh$4qCY-$mjkc?UaqWuVb!n6>OcSz2ZaJ zr2{hm8Fq(eT6DOo3hvu+Hehy#uhrD=MUEd;E-btMV8{C9`EM4zc(5oZd9Jd-7is=m zYc@AT`a93cll%7JLw7{-EVGM3eW%O6|9!Re&Lh*Z8xuH>Wo}q>Vt(wV1z|dD&zcqW z8o9o|ciOtMeG0olN|!-K-=70Djq3!PRw^g?Pjw1o-72>rA&^_hV3xzz1!u%ePtTe6 zRP?y0%l@9z54VOs+V<^|$fQ!Me{v@e9!)m=Gwu5%v5Ad*rHrqmZuY&p9W>XmJ*qQG z%jAUn;hd%Zhb2G0mEY^x`bvd7jV z(e2F=kGQtGFkVpc?%%65%jl(4MDn$%ae+Vl^k1Id@n+VHWr;VJOJ3d{6LKP}pc#;q7B?I6a5iYtb3Tw{J27yR6mH3~tS} zV|*EMdN=QltKDg5lx=T{oXvP|zM)*~&71fD2A<0WTf%lF99B@Y)jFNW@liBPvi9Bs zBbk)s>(^GF3%^vGGJas+Mk72Unx(WQ!)TPZamC=d1ej zTAc0XrY}n->BgLyupl%jrEtTCRSRM_xAWfoU~*kND=oERqv5fCOzUnNXfZA`jAsfi zUzYCkneC#+?bCohF<;Bot@FY$Ls!lxhY3yuPc}RvNANt#q7R!*yIz< zGnVr#fBiZ(N_NVRu8>uWcr@-@c)}30)I*{s)xqI$S`dTsx%QMJ8lRVXHFqC9@5Q%G bIP;yl$jT6(9VI>`+t|HAR))DP|9=wztNE3l literal 0 HcmV?d00001 diff --git a/users/people/daryle_walker.html b/users/people/daryle_walker.html new file mode 100644 index 0000000..306c027 --- /dev/null +++ b/users/people/daryle_walker.html @@ -0,0 +1,29 @@ +--- +title: Daryle Walker +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Daryle Walker + + + +Daryle Walker +============= + +![-](daryle_walker.jpg) + Daryle Walker, born and raised in the United States since 1973, + needs to write a fuller biography. + + + + + + +Copyright © 2001 Daryle Walker + + + + + diff --git a/users/people/daryle_walker.jpg b/users/people/daryle_walker.jpg new file mode 100644 index 0000000000000000000000000000000000000000..848b260ee52d51ec583d5c8beefa47fe5d63cb8f GIT binary patch literal 3618 zcmex=KRg)8I>5A1R0qH8UG()kY-?DWMyPzKmZm7MkZ!f zHunEV7$g}Pm_a^5NHQ_AFfy?Izs11A%*enbz%0PPz<6QPZkzY9Pc9wu)H{~xZaUNK z^HP~7bFHFu(h_~QHE?xoP>9;T1(w%25zf6Tq;xk<{G zU3_)3o-DUt`S@48`$^r^QDUnmKNq{0y34JSk(--;5u1KMpVujC?n|7v<+ilU4scp& z$-L@zm9t0Pz3qa%%{LC5dr?%8=j{6-D?;{dAlHH-W*OiYYSY|OC0V`O4rW)T!( zRT2;uQ7|-8R5mbn{(p;sgOQPek(KG+>?`tDs*8*>kF~FT{9ayf&B8Ztn{QqzmYUgn z(dNWmbqQ~)!ecc)^8@4Co;_&zA#C_#@6@z#Znl`!6O*i#-kv>swi5HhopYWRYCPJk z^d~%OZM}*uAFp@f+TG>moLAWL@>1(g1@lVncbPKb>h-R#+^rG+yu)tA1s6|SU|cXW zy=Eojx>qaseq^YbvzRq%k8jVuJY6TcIn8D>&$PwMrX}ogh!8HC6KB-* zpCMj1DP(R#+48HL+E}pYbNEa!92Z`JI%sr>&4gS;Rp zhL{M?(h`9>pCO)f#N)4^9J&eYf|X74Ssa-pY@Tjre|Ij>GUzIRgpaPr~X$wy60 zE{m+>3v*VEN>5EMvAn67Q*`0h!o3r#H~RQHPul$d2!kTnNlZ-4i2Md}l7Nt+p(Bg1 zk`dTZOdv<4PK&Ja?GKug_#|FgW^S(HqMjK)?T&VTaV=dE_~NNPYvEgo+f{3;G>=Y8 z?vLJddsyma{aHSbbvQMbRbpPZlmu0;N|Y0Z_JPV`k-mg$E-8 zlc1s@vyg(4V<3w_p|G-1QjvkNQ&8f>g&Q3jFM{2|$iQaL^leK2hu_!F=Z3ewGV|-d z%=2N}>Grvs|1)^~XApbzeb$PyT&K&;mC0?hL}$cSOm5?H=iV_pnEUq&lYo>EC-Vtg zvp4;TP*HBWC9fmw{Onr)sczj_@*DbpboSb;GCRPx?X7&%93B47rF>Pj8*I1iQCRNO zJ^$NX+x1Gn_c#h<|8^=ps3QdI)mo#jdabwNI-B`*wlf=fdgwE4_0Ru5)j4 zoi?dBYtyG$Z)Fu7Hk;_Zz3{4mm;HBWV)&Gm=ajXN$}G&e!9OF=ak9FrbQUkut_zD# z{hpv6xokm~hM-aRZlm`)N;4!*PZXac<<)(pl_hJvV2IsPaaoblrnG<*alX6fE!26t z%%?6$Zt1JN9Jyeouk)%VyD8lBi!-(5-Iz?2C(lhf_wnnQnf$#6%_lHQyjgGNE9vzA z2!pBsBLfo?BMTF})MaE4R5T0}a7-+0oVak~MTLVOpz*?Juc&D4l$2!j^l!=P`xWOH zFL2aPvwxsp{=uD%-+P5zpU{;{nrG#2&e~qy(qpK`++U{LyH~i8_uxX}O?fBEg!y$}9J2-}%b7c-P?vFZrxQ zzHRt<{O|N=mpO^gi)D|!`IR((rdv|(?#HwD7gk1RI6pUG6K}kkI`i$C-!BwPjGlT~ z6}H{H;C0S=vxu8nw2k8G)UdnR4;l}~OBG8y=sXi(<5Rr2?bObb7d=@k9{!qp-eNIt z+?m$wGdx<)cT73_BF%L}w&oXGA0rABOpRyjZ~DG)fAgO~>C?o!x4*7Gvg+t{#v{C6>{oOa**NH&&aqVM&)3TE^t3MhFqFZ-e(aqP{Bw8Tfe#G~!b5d&GRQs=vD|VXK zZrH-yALt#m<2CDTW}$mWw0iE=9<*39_2-nB)H91t=!>n((l}|5t?)4D>e8}iz75mP z7RT8fHRUc0KeOaSs7@Ob8|#6at!b><=J6}$-A#Uxo)~y(bwS>QB}Ecu@3ixxRoBns zzY`Yf`TeRR-|kZZ8AtX7@N$J~@L01&7#4avM%Emzmu|iLu_IXhRkc9R%Ckp{9U=oN zWaNc~cj_OUq50~QH`jVY6Q6>u_s<;hQm$>Pht=lbl2TyR!SdzB`GHSfbpNhVG?BCL zD9mL%S7f1iG++tOwD5Aa-Lv!k45dmBEVKo+9t0Ud?E~cU43uCU69vG@6jZ(n9C-R^ zpIGq`^VJVoXWELLcxrx2=5r=*?two=dNq5RUMK&&m?GwI+wo=`)6sw2D-J|!$epy2ON!HbRA|QD=YY)qIz;E}X2VlU%ImA|*31fjyV+{{JHkvS4R` zT>>raA^8TBZNLrzm8k;P_HO-l{r2yu-`U>|zA?;ce|N~TDl_%KmgF_flmBjt$nz;p zvG5N{`lmYQX1<5qK^f26tbQl6Kg_v0lU*g}&4E3Fj2q&df2(|Z+kS*+qn(#c&qq1^ zrRQ%;OsKG({8KTGFaG}#1~q67W@Led3D_l$fr*V13m0xY_(9;}$A@4iF)}dP3!Ja~ z`SGt@XI_z)lw#!Z^FLhftYVdTByvH1|0nCMPuAZL=G`bV_r_!UhjM<>zs_(jyZgX0 zPhWV>t=O`bW9daq2^~hAjyuEE1!Wu`ozrGpw(*76 zE)BOZznD|fey&1DeWZUv1MZa8M{rs*q^NPpQ;~(4$THTgb*($7d zR+<)FwDX;_i@;Ksns<76%Xuv0MMY*S6z!TIY~5MFvcq;!c2RM%R;qMrq_aV20oSQN zEX-oOWxH3ce$Td1TOmB7(9G?jS*DYit3%8wk=0c_%Ev#jNV?39Jal)~AODmMAsR~p ziq}4B-P^(S(qXArpwpZi&C9~>W`_OP^!tF}bl0$k6})dFcs^?UJmi}wU|PZW(oLby zbP>baq*u(h7|u8PUklahekQP8#IW_b^^Y{u0~dW=o|qRn2Q6n>TI=JO_k?M>t2m=! zO3T7ke1Br!3;ivbV8Uz4u9NdXEa`4#D&Jg9FJaw}mpGn1$k=&jN~y3Ex9{`#&NKya z9mU8ed*2pll)iCG-QIggB;&YoR=V@_(q5+tqO5`+{v`{U7j7t1WD#NDn=!4Pd)n1) zmui297^umd;+naA+WgMMu0@-L?k~5zkQ=af#jieE9j@KZ z`X|pG`mxjhLzltX>F4=pPU2SFr;s2Xx3qWrsWe4dzO`o?c6ddev0b{WF@t$_XzYTx zsODKS`jh%RwW7Zq zVwo@cUN-TlcUP-UP(3xhi+>ff%C@Ipn)j%l$}rFkkzw_=TsoOw!!o(2BW@ zZof`vweJ2cb-gmgnNRu2nY+9ZVHM@y8#)}cN_Q`R$rwI$a=Plj%@Pc;dYk$hvpSzP zh)5NAX-(f@yvOBb$(F^7&)1z((&Eu=zx|n!b#{UFuIp1T8%|+W`YX3lB$&&GsZ~y4 zhvE$5Qr*r=#X=&fyPJ-8ZvJ(6&iYr66+V2ryJ2cqPPkqg&r*p+%qh;_CMR$E_tDUy z_eAlg(_IJ5S?*2}5e>TN8Z8iULsxow(k_FUFC&)jKeBYi+DV7Dw1>&^{?M0qsCOHv!bnhW LirVk(|K9`vNFMDP literal 0 HcmV?d00001 diff --git a/users/people/daryle_walker_small.jpg b/users/people/daryle_walker_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a5841093e39a02625985cb6c1fb814289d142f5 GIT binary patch literal 4693 zcmex=D>Bm<7<_#hv=|r|I2ah)GZ|PIK=KR> zQVbx#w15dNlCppq!3IhGzs=yxz{JQ1LQITIAi&JR%*@2Z%*w*T%)-XT&d$ch#>URU z#mUaW#lgnL$-~LT&CSij&Cbco%frnJ;(!bR>1AeOW@Tn(GWD^cdWLGK_F>0K+kVDyN<3Z7&iyu^slZu)+xx~aJB&Af< z)HO7J$mdYTP?Ir!~%erdM>Fg@AZZ?+Z-oC%Ku0BX?%DTF} zPBB*=Wk;Rf{a$L~(lmvK8_MgZ&SgDp{5G+_YJ=Vl9<~SRU)R{qpLp?HWM2)du}tOs zlB&yJwSU)&U3_O+xoF$=4sGvJlU1E!)dEKf|6TLHv}g6VnSYmjxqox_!NONnd-v>` z`t;2rZd<*p4YS;p84t}{!GBMAY0XvfH}5~r{`O$@@8n0mU*hC0q}Zic`969dU6Mc3 z$x%X!BhK8K`Muxbg{{4>J(ayg3?p_HJzRXIHoy9}YlWEflO})3iWrZ-3|Af;{LgTF z_2SE=*|m8GVl%#*eJ?Ajy}deeT1fpurhQIV{xdw70SGV=dAKf3T7yn8A5V~#WL(N&<)$1oekC9mV z?{(kR3rE#wiaFPb-ng{g#80be`;plCd!ig{{A*2)tiEl^(zl@C{KPv!dW)EZ>f6_b zYgF$&?Y(H<;_2JwD6PCbX~Nv&>*`9?_rG*aJ6o7ra`64LTR#p2EmsJPYst*$mn-@{ z^K9nlhd)hsrdIghdmD3Xei8qf`%|;s^^}A7)mCja*OW}muHI-KnRm&ny-af+ z@I2Wqz{L1fVbAZNdi7(;EQ z+vNS4SKspMUHl_ppXqG5MkG)XOh(g?&|e)2mIKRQ{>WaSQeQuC~wF z;`BYc@_{qQH0`JzJ zzVU0#X{)&7H&+|a{o%Sk{*UI5btb>vwl+I_G&!oeJ?+u8Co4Za36s}5`?_7W@@HYZ z`{By>@nRLr4^}O2+j2MRwCm34VVi&RTrYdcvU|z)jHbpd4^qP2u{C)iKjIXLuAGh{Rv!2S>Y18-R*c2lf`MuXRpLvmV zBJK3IFN0GPh@O=pV~Y(*Dn&Wy;}Pn>~5UF5wjn53X+6_4DKY z##o`H?a{XTPwAnv)h0m_L9C-dwebYUSjh94Ds(kZ*a^!yHlkm>#{}~(( zhx-<<=y+&782=;Lt9#?Uf9p-x);X)Yd%FCgCZ8RD+~cDTc~9euO{$8Ba2Jg; z-0`1*=MVcwzU2=i`Px@-d!ODGW`1fm|GP(=^QSYOV_?|kA!`^THvhM2wt1b(yvN6W z^`5@%c6RpNpvs8jA~i;9dOQ_(eeh%F-E#d}9rFdful)>b*Uhc|#=R!Zdgg;<8RrWL z*VR8NKa}tM`ukd}cKo!@US;uC(ONaZ+R5`(Kc!|)_1vE{_2w@- zX^q3jia zr?dBC^$($J`!+eFkL~SWu1xb-cHzt1vS-}U=~@_uJjolMEYdi|VDcFNfUiS1XD+bGWN^fk5Tgm0=%N zKHD7jVCsQanv>(SmaFIgzIxGOU-B$b%VeQZK^aq>$=8m*PXh`pQ&f!=Lh>= z{mO4x+;iQ0h4NYb8EdzBoOAlmaA2cf$YQNxs|`D*y6v@;kNM#va^dZydtn||v~!&t z)b`c?xSaX;KZER_^qo5{l+4hxu}}Qh%X9tRvTOF=ZZV(CPx3956aKN&;KJfA%}pN! zc5}R9uX*OzT)0b0Y+a@JmOp}$NiXB{)m+7 zHJzI1h0!NN}>{GHERDjoJTgZc9(Q>c%<3lWJeT zu0@Pym1u4wVj*G$d*%#*;k_+`+K z;y{iS+y;k}_Vz61);K)t_>n>}GgCvsr|By*XH6(Q5w=#Mlrg5Qb7kIS>2r2lx5_?{ z<;%Vv^3z{_&dZ!Um5TnU8*&wdp4R0t{?jQ_s1pgdxE{8cIaEmb^A?xmtez)qBn+@7@fV#!?RBcC|_m}b`28r+hzwYwB~Cweabql4QI5sr5-_i<9cgss&bG*RQi-{m;O%{%R?2&^`OkTVD!4 z?(){fFro?A*0p{PXlw96HXt zS>+J!bky;{d8W?m?dm##_ghYDg{axDHNnR=xyv+XvmY|En{!QPp2^h` zYoU_wGauwXWce7^zoH`b*;ax32R_6s`|)&3g6N}}6)E<2HU5}YeOs^dv2X5*ilk>5 zH%=tqIsE+P(V8pjQk$Qy=-;~jt--&yw!3FkZSQ%yyY~D34Ax`s_f*JDJ$v`g+4{0e z?$4Aq*Z$go$BO){X5F~7OlRfOw*1HHX&&DWn7)wTc>VD8kKsq8dtIC+-ORioky6Q) zoISJdP0d%9;)$2{R`qx9Pl**i5FRk(e`oB8eJJoYJ^Sx!rk?i8x1THDGd}o%(gJGEy{QN9&|W^ZHT==Hr+4u1GG}x_HUON9Q>^m+K~+ZMkZ6 zhGC0>4DaO<3ArnQg&+Pi9EmDBdZottQJ~5SmAfLs3JS7p>M8St8m7(fa6&z(@U|Auej`7(!+bAC*5D~Mcje0|iNAN33BkDBN$5z61KYxlY5!JNjQAy#}r z7k>HJ={ikGxhU5BAk@N$-Q!|qmrV})6@7==U)P#`)T&+%a&fbm7NgT5`ZN0adi%Ad zRjHGf^%p!yn3_}gGT=qo#nTUOvh41ktkP5Qx_Q=@7Y{@2jnA&`FHJwY@#FHhOMmlc z$(dcv`{Vhci(~oKG^gvo43rF42%eavCd2uk;pNQVf4i<9om^wPYhQM^zR>OS`70cJ zif+E@e0uVk+`}D`{~6Ndd+QFr__fAdO2vHpM&{gNj!Ks-Pp4>>zQ=zbp5I#$|F+%! z@b3MbCs$ScXYgx(^DoD2|E-NC)4s1aIlE1?^UpFq$(f9w%~n{q6=|P7{#e>0ud{$zUpKKA<+MV`;+o%uT_W%a~1?VC-Lm{-0D-DKU>{BZr7*N@~oZyhl_ zoVP1&@{vui#C@OsTw(3Pahm_z2D_=>_8xEia$?zq{C$#JW=;LJLg?A0{|vzwXYB3W zazfI~m8G%fKf|=xck!7Aj%nX~^PeI8hfa-QY3*d5ZGwBI|2lhi&BWH?e`^Ii&K1?~ z;aop=ZQFVci`x%v`*Yn)lO|tsKmVVB|DRmue(pWGY%>=rxhRBdMAqd@2}`$l6*Kwz za>vG4vAIijpZL$9tdiuWGI^^-%;T=RAEvkFZIxBr>b<(sVb>&=(+d?!Q}@#=@w)l~h``HnoH62~VRpI5kW%QMEnaP_uB;>u6I zAHVk}`+}Y1AAucLzH+QLeJB%^y3j}~=k!jkBMDz**}dNFk^E3(Yua;9f%(m~=5rJ8 zlzmz6v1wzZjoNgvr!2xwauS6N8yjw@?Ty*2UfBO$uhL>ojjG0{`Q|^EAHLn+^~cK8 zw<@es|JkgF8%;O*D+Ac7d6(3Qgs-ZQKV-IT9{WYtH`6^-Ha10Ey6bjf-NOE7NBbYU zRtKJbn!57Qc~QCaMOF)r;-^HxF3TtUmF%x%`6lnN5dm%?{nucHFA0)x~ea zx~S{-EKhmsz*|!S^E^E-r^qC%{vvALy!OJ2?}}|j=PVa>y`DB(&bK_vbI$U^7EPH< zhLgH}Gi_JS$eY^xk@H-&C@WeAr=e zcgLUO*Jl3qJo=5l{g>VBgqrTitt?v&4~aVTG+!*-QWx=UQP<;5PbR-BPu)D_BlpaE zN9X@=d1LaP>19D=w7ZO3YEh%R?(46s=NWuhJ9k?9vJPcs@ritef83uf>Uz4|PyD9b z^exlPp2SOB$(+w^%9(Q@JYz$JOxNPax}IPB+qJG~OC%>=ZTEBc|NY{kt82zmO>J@4 p?Gl@<{U&ay74~U5*mX=t*CUAWSd!n&MP1qwOH&FxcW?fG69Cx!&Wiv5 literal 0 HcmV?d00001 diff --git a/users/people/dave_abrahams.html b/users/people/dave_abrahams.html new file mode 100644 index 0000000..92736bf --- /dev/null +++ b/users/people/dave_abrahams.html @@ -0,0 +1,38 @@ +--- +title: Dave Abrahams +copyright: David Abrahams 1998-2006. Rene Rivera 2004-2005. +revised: +--- + + +Dave Abrahams + + + +Dave Abrahams +============= + +![-](dave_abrahams.jpg) +[Dave Abrahams](mailto:dave@boost-consulting.com) is a founding member and + moderator of Boost, and an active member of the wider + open-source community. He has been an ANSI/ISO C++ + committee member since 1996, and has worked in the + software industry since 1988. In 2001 He + founded [Boost Consulting](http://www.boostpro.com) (now Boostpro + Computing) , a company dedicated to providing + professional support and development services for the + Boost C++ libraries and associated tools. + + +Dave often shows up at C++ standards committee meetings on a + bicycle. He lives in Somerville, Massachusetts with his + family. + + + + + + + + + diff --git a/users/people/dave_abrahams.jpg b/users/people/dave_abrahams.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4efa95c2803addb5f9b430e9b8310da3edfef32b GIT binary patch literal 32767 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 Cf$O6H literal 0 HcmV?d00001 diff --git a/users/people/dave_abrahams_small.jpg b/users/people/dave_abrahams_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..919c0a16d14340c2beb9dcd8bbc520561fc2712d GIT binary patch literal 5605 zcmex=D>Bm<7<_#hv=|r|I2ah)GZ|PIK=KR> zQVbx#w15dNlCppq!3IhGzs=yxz{JQ1LQITIAi&JR%*@2Z%*w*T%)-XT&d$ch#>URU z#mUaW#lgnL$-~LT&CSij&Cbco%frnJ;(!bR>1AeOW@Tn(GWD^cdWLGK_F>0K+kVDyN<3Z7&iyu^slZu)+xx~aJB&Af< z)HO78=!9uF{e^mH#r&qkX^sGc+BmQJjBFp2cLpz>AANr<)1s==WJD_ssgq{P6st z+h^-NxBX{mX-nNz)S=RJM#v&)x&Avo-kN#Fe`l?k6@S@oJEMKRYgS@K9jmwIWv)w0 z92e@?oRqi~!_HVMeQLs&SK8}8{AV~=FZiSB6aOZsStVf|Lbh&y_iPPjJu&N^!`_0> znI7xCKbRlRmghY-G1K7I;es2MP4;$42XfC<%P?qPuF?Kb^q(PYZrYCRI?LtvUX|Hq zH*vk_)2m0k{NB#}*yKLrNA4gTMH+6J~n+- z#nx=%aO+2wwyvV=rVkkxIMXI}9Mn17^PtGn^p%zQ!P63JFaOTV)Hkqb^q(&9pP^x$ z_Nogumbpvag#EX7smdSfVlCdT)gSb83cvn`{|pCW-NSc!u1j!{eD*qQ!X2-=&hKHn z_u4=BHggHXuZ@!frn0f$@(ZXHDA3+8Nm6;+XXR39HV0YP^xHbyKRx{ zr-9q-4xQ9h3{01DS-_LSz!>xXSZ>g7zYi_j?d0b!oTkKWlf|jU=kdoadwX`pq|1CE ze6x376YnnhvDKb0&RI^*4voU)D!`%uV}uOI9>I^oqik0FT=?yNlQtyvlyP|A(e{v)to{{~6l8o^UXJDIT0T z`D9<&{8{#Y*}tyu+^1YobvfEYFF!fbX4$Fv4v*(w317^)@}OC$E>DJ~~f${)7Iv)sJLF)The6X$w(FsFPosIrrd-W7!v;oz%K} zivP;D`CKo|tXxjZ&1Vr<|C@^~yDYw|PWFd6=R&h-pG z4*&MgoX==l&G9GcMSpd!?Sb^NAeIUSje~bQ)%*BGKP*4~pP|=Ys!l8O`#-H8@ymWR zz4n>)#CDIsF){7gC6;`O#k-lA|2{H4akMDWs543Vt(INrPmOsJle@s&6ZGFVc^)TwzC)og2vF|+f zWf#1XoFo$3IyUFY8o1jpj_0b+PyE>a(7k<+>%&@s1=rRr-hJ{wC-WzRvpr1)wUz5? z!ni7|EwkpG6?NKm{DbW|KOQ*zve!JA7=4w_2PS67oA)Fm+f1qtMU(Kp&kDj8a7?e z6I*)OO`;>}%<>23S7*Bwvre0v*B0cGH+x3S>MIvx?GK-|i$2S_q@TrP?UmoUqAymS zx-D0-Gk@prw;z{(yY|EVgZA0{&UrQ;{`PEaoSm{WGVPodOORjoXa8>(|L&||{CNFa z)25Hh51ik2H{zvhZr-wa%Hp?{rYZ<5pS#!6^uwe-O4s(duidk2%ZF&mC$pc=?YT59 zsKS;ld*zSR2hEG`y|OBOdS&{=SJUiL3O6;ZHc_`>eCsXP9WlegGb2ozSw?5dquce3 zZ>*ko|1tgT^zY7p2A(bN`>vJETGumc%f)*c+q=S;)26L^!4MZC>65)fpfcyV#QK$X zIu-8^*|YwsyC?NweTyk?S**?R-1@(b`GT7+aVr$^Y!^0KnHscvs=25-yUg_?`!s(r zuAP6Y`eFSMUvq&MQLW!5T;8IUl5N5xc(T)<>(r4pg>;pT2iEV|6ZnDuVAwp9Yc=j` zeXbiHE!51;)SEd;ZJJw+R`b^K?Ps1#_dEG%Upf}HG;FH5Z}m3M=*8aa=N)-^MJsrv zYT&-K+vTrjU%KD_pg?|WeUHgof3NOC-{%Q`s9XLpUm&7U<=3ChkJ56QMGB%1sw>Z* zZIf&hy#K+h{|sCu=b37F^Z6>eeM0ts=-XPm?5Fr9$-BC;tw$&7ROH+~D<)COJV&PS zW{v&zJ&sS#7XF>Q#DDS2pwq^-ll`lUbWc5|mHzPAF5wHcTd-e7iTuUveGn6oNLavr};{KR4j8?{>Da4=2H(I&zsYK;hJA- zN!X)DEDwyP1?Y{|uSOy`^nL* zM@}7K+;}x&W$wPm6OYzZ|7T#$`7pP?W1slTs&&oFB5(OGyx**QM`2Gd%jqp`$+ydR zt0c58MA@G6akaD!JAU{+|GIa}F5Ea}Q(XwuGsXXIE5a)?fJ*@A03ZX;Oum^y;g`X=U;pBB)T^#2%aE1KE9@40Gd=N#_v7zB!apYRx9&-_dHb+7>t)UA z8Fv=Hyly10vRIJ)>B(D@^xYmjR+#)OV9lyn)AaolUq3E*8@YVx+GlkeD!dV*y10nt>(3>64<=83soqnQxbo$E(LIW} z4?7}jY_kjXdh0IAPjrqxaUqYnf3GCbh%gd`CX0^P%X7A06T@Wj~j{b@|)%tN$4u z%&)V#xbVl!2hXnlQG8_i?|l9vUhR;;QjxCRPd?|$88#@N);pei+vBGn;}8CCAOABn zE&4J2+sx~wy5bL~zWvtt;TLzuwfp}5ckX6o>^w7FXL&)mx)RR=R_RTiflnV6$@r;d zdKMjDegD(z@3NxBSt3bq-u;%}@JsxtKL2a0U+db}XG|}S-lx)Z?H{MCtz&3T*Ndmg znd^?#CCjvDCRr$NWdA7o=Z5LpElX3kwB3_#`Mud$YH_u|DMq&4=Uex0-G1bL9YJA#uSWk`|3jU}qP70? zsj@HWU(D;Jbz3g(E9%`X@3((xrTAOf2O&Que^?!NQC)h;-i@4f+>+RG zMRk2{|GD?fw`{6nP8M*TlzG#)*WiGLNqFhU!v}Idynn3U`Gz6mVfFW&4Ga#3r&b;4 z&+`?1ar~a=oK1bpyDGjvl6~K^$GN<4<(;#I1~a=W-$Z;}_Hx!_Uxv*7yRUo;1uE8Y zZe86rb>rUo?6L<}-aqCs?fti;i2nEGYqizQD{cMLrn+)0l@+{}^=no1N{+i#;d5(Z zw&aUsPE=hawxcg4B;)fAHVcd6b}iLisn@$y=7nX?bXxIbQh`X-tS5GAHJ*LHU30Y$ zDMj8(bDtmBc`Apicq>24tJu2jw5GO@6dr()r=;R!#Hvw_k7nc=ObG&dLVQrxVZn zFusk65z^hV#5rR^e$cw^`7_GH4oJ$Rvnw~oJM(Owc76K8{|qcYy>|R($Xu>BZ}~g< zKjIZX(jTY4X|2_7P2IHfdX4I;+gTSnp7HAxv}qeHU}rGN`ziXPXW~!8GZLT9@YQDS z*V2f%Dy+ggaYf+CZ>yz`OqhFQa?hvYSziop)F+Bd-+8n)`j+*rL$^-KirT6welCI`uyY=edudjPnS95d3Rlbw{z42JX z=J}~?yC!)m&x`xkmbYM2gpZWt&M657FSV+JZn}T#UQ(}r)?Hqur?Dr;O4QbUx!l!X z!oSu2GaO{BQ~r~=b@SE#3>m9;)G$6=-JqJy!dbe;;tiMiyWI26(=w&mr5)E_xZhg; z!TtQr-w)jz6ECa(h+j}K!2&-&sQRuPD&EHF{G!vfN zez6y_llt-dXz>dptyi<2yyQ7%VlF=ERG^cZs87oT+r|Tn_AmI)z+ZpRrjFsIRnoHd z50f7rUE){1B_JbU;_ij&e3l28C-94e*+(t=-u|H1ZoTQZ{l-5pZojhBYD zC)XbC)8uBpxBMgf!M)`NrKTSLc6COHXZ-hXXLrc?=W(owjrwskPsre`Nqd$Pn`Hm; z{|s^aqC7+DUVaPAn^XIE!pD6(%@(d%yJ)AN`k6p~p5xcLt0R>{gE-Were%wTOUZZZ zC0!{<>zz2ae=&pOud+YdS@(W;8g+KCgkO8`@|eh?#W#NR99pwH%rE+Ge@ce9j{oDM z{F$tu{xd9hQTfl1t!zKnQ}xo>IYq24A6Czw@Zj0*N`K>9(MjDEx|^1rt37_^-l4*i z%nMHZXW&|_H?=&&{*uCUjwfu6I|OfhjIIlr*t3%T)?C>q6J**nGFRMKzsA`3;rr&& z{*HNOTRwbm_;Pz~bj;OvlWraN-W-&=W9o5+Dn3q~y3l}#54?3}{vDRz9Dexz54HVG zZ}aNResmw)Ro}IB?WC+a_3L_yE$)qzWw*~LuQYtp*uSUf_~iIW^8|h@eWc%R^~Y-e z;lEk`8C^m>J%S&mVp7zOpaXtILJMnyWYCnQreSa`*izzwWc17x=NT=vU9TS*^$HuE@Vx<|=Vtj#KjM@vo-6 ziI($@#vZuCW@M|eXy0kA@&)_qXMT`8^q(PP`ib4i)|L~5iUkjCuc?pPpI>lk(X`{X zts>zoDlWUUo~SBXks|rtRdfkYr1SzVkJr)nx%a4MKhDiexW;o@z-I04-1Co{+#kA% z_Nnf;G&%aleO6H$S5wuJo8SBo`nUelKiuu1SEHDvoA-o4`l$WB=j-HGtoPZxq3`FD z>J2GHH;pV$8-7<`D-!-J;?(B(N7eqNzq#QRuw2?nQ(q-=*QLbmI}$mx`1ou;Xe{c| N++WJI==;q7Hvu2(l$HPh literal 0 HcmV?d00001 diff --git a/users/people/dietmar_kuehl.html b/users/people/dietmar_kuehl.html new file mode 100644 index 0000000..ec5e8e8 --- /dev/null +++ b/users/people/dietmar_kuehl.html @@ -0,0 +1,53 @@ +--- +title: Dietmar Kuehl +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Dietmar Kuehl + + + +Dietmar Kuehl +============= + +![-](dietmar_kuehl.jpg) + Dietmar Kuehl (the "ue" is actually a "u-umlaut", ie. one of + those funny German characters which has two dots above it) was + fork(2)ed in early 1968. + + +He visited school more or less successfully from 1973 to + 1987. In 1987 he started to study at the Technical University + of Berlin. He finished his studies in 1997 with a Diplom + (roughly the German equivalent of a masters) in Mathematics. + His [thesis](http://www.dietmar-kuehl.de/generic-graph-algorithms.pdf) was "Design Pattern for the + Implementation of Graph Algorithms"; strike the "Design + Pattern" and put in "Generic" somehow to get an idea of the + main topic. + + +Since 1997 he has worked as consultant for a small company + called Claas Solutions (the "aa" is no typo), mainly working + for major German banks. Since late 1995 Dietmar Kuehl has been + one of the moderators of the newsgroup [comp.lang.c++.moderated](news:comp.lang.c++.moderated). He is active on the C++ + Standards committee. + + +Email: [dietmar\_kuehl@yahoo.com](mailto:dietmar_kuehl@yahoo.com) + + +Home page:  + + + + + + +Copyright © 2000 Dietmar Kuehl + + + + + diff --git a/users/people/dietmar_kuehl.jpg b/users/people/dietmar_kuehl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c97f54e4feebaac19d2a5fe01ad3dde1c91028da GIT binary patch literal 30510 zcmex=P%zdrV6brV^ksg_00IIa z6%33FAhir28YIWU3zA}BVPIgW0P&eWgZUg_l7RuNpM?v|V}$V31;9Km21YQ=z`z97 z_Z7_ZV9-xXV_;;+NlRm31B)<1MHbGS1s5@50NEeKzyKF91&in+M8IbL0Gm+2!0;a{ zV15CT$13%o5;>6FERYZY`IV7@fyn`aAtAsb0XxEe{3{28RFt7}VS{b5a$`i!w_}Qu7p&Dis`4@{>{(;BmM@ z!Bo%S|2qagusB0X1IUj5w;5U(csMvXI5~JYIe7%Rxwr*I`FVKwMJ0rVMTLbW1bM&! zN`cuJ1S2muH!mNr03V-#2p=Dx2#DYlfoKtgP&`lyLoZn1{{aR;4u%4T5N1Xt1|~s9 zWcP|z?iFfcPPGO@6-v2$>8aWkSzGBPkR!z2Y57+DyZ znOK-u+1WT)nR$#E8JGl_Srml~Sseotg_Q~$jo3scF5Kv(tRfn8Fv-}YsOh3JyXvIi z4-Y>k7n_PL+SIJ(GC3s0_0ZxHGx1BIk5WHvZaI9p^zmmm^(jkQw@f{9<;j<&TaR9S z`ZX-AtZmw|ZO5)X`)2MQo?hNQefjp|*PnkEWME=qWMW|fyNR8R)fDUmMMEJL$H2rw zC1F;h#)%>z7aR<__`z5u>0wdRBLa)l zaJxVq;e`LU7YzUI&|A4-4$iFJ=t@fGctMDaa{9`^6`K8_x1U@ z&82$FQ=hJ{IC`{1?DyW=e)H~sSa;v<*Z$eQb6Q-derTMy;A>@lgjJfc%=3E}x0s%j znYgRo_+@q3np<^yzi8*0p6!vH^X%o{wYA-?iKCIwLV+%!1~^|OOc!F?mwHIzw(#=^Kgl**Rq^vbtVQ> z=hkVTdnNa5?t!TL=k9L*9CqICb?&Rhnlr)Ysj{S`Yf`t(A3Xfe zVDTqA{#UmBy!-yEW0&81EI0dh;^(OQDF=S-e*a68Rd+W_*>flNo4(z$WC+FS2Asc<=_Vz1Z zwdY=x+jryU{`!|@^(K?HzxtwQo8vG4Guh1k{BQGRlk&Gds6Q(I{q^7X@;}f2zwl<; zvRl1dbywZ?T$>wxEBZuP`}vba>t5QLuPSA~KQ-V)f?jIkk+&D#eluLUPu{omW_?DQ z?s3U^%N$l6_V#PIA@w-sKSOR|Ew{byjv0sLxvwAlGV|5b8*eB5$e!yfzdwC<@&1GV z8Ja_PPJYQynp>27#q-4%S^LFb&e--GKbGpg?E>?b&*l4XZ7EuDJMQh`oGj1(3`wk& zA+zGktZyBPx>=D~!KZ#X+pc@o_p14eZ(R*ewk@|-*ZR*8A-woqfuW7ms@$G$welad zmS*0(U|PkUQM$(J?cv?k%m)+u?5rE(s`GsR+H3W6&3}2L_Dht#(X|t~^XIee}=%y`PcqfyGQ5QitgKXPwLeQ75VBd^~*P& z&%f+{eBm;kLr1Si)$&WrtLsb6+4c6+mrdHaTia6uzr>j{{%26Pymuw=@@MuR+50N{ z{!B@@_@5zc;aA=1=C8K#Mly82__}gq-_xbjqnPbCo$XFf+My`K`0lyn2_b8#V!M-b z1;4fbXLu8q{%_jN{|t>wwv?5(OnlJae`}p(MQ#88i|=09EoS~UO;Ta&ou*6Ce4QVH zZ|tneUuXXA)+_BB&v%|Hj;y|8J~_v*H@W<;{{66-U)SAE3GVyN(Il?|pX2 zyvOWYV&6_XSgOOnaZ`47XSR3S+U$GRZamxm{oD1Vho4qRRPr2sdAqPsYf07l3e~T7 zE?rAW-hDmqy?=2|-Lw6F<(L0b?fv@h-uf$6&%|8K=9C2nOGnRme*NVQncq1(_dWkN zJ^SX~AMZE+6?$1{bUgA@S?Jm|H07cIYTec@`k z>92NktIJ<4Rldr9Y#Vc}Im79wUpMYweEZvdW&P4G_8x0eO14K%xc&C{ofzqT9!w6( zSJqy&esOdE-CtH0kHu-!#aTz`Zm#b86m!kYf9txs>%aH)f391!_42t_f6Zlk)-as9 zlhS`bWB#JM_s_0+GWYF1MXuXRrQLgb3^Q*#d#u@>clYQ4UcYPa^o#2zJukL0v#Y;m zH?zz^t~IYZ|E|>A?7QBz|IY3{^*V2zX+lHg=ZIRbQ-5>_zGv6XGFTPfYNfZ;#ZR|0sQv|Ga*2?c&S#-aFSX z{dPWo@$T~F`^)~`Py5fXTe^PZ%iot`%x}%!eEqjYzkB_1`K4d}Gt9m#U27lxkN-tg z{G$8+SXJIvlt;diyJx-s|D{LKg~hDfEzc%qtewSsUS;e0buss!txmhP_jkDSH?i5e zd9wT~ak~|K07SYxB;&|0>sfJ!gY^aKWb2Z*_9RQugjF-F|!jn=>c& zZo65({N45o$$z!p{AcL-qBEn;xF9>#(p~YG@4~YetZENm|Ifhl{pPOI^%tu;3IpXd zR&Q&4vSHSLhKnV?kl;0>TkSz zYJRp(`MG5Vu{|zZ z^0NC6Y=4>iZ`0YAKX>|XNlfM4sUVn;(zfH;d%y3G#oOMmzLIq}d&aY-6KOY^&-`al z6D{IU-OIDlK#Xz8ji3D6`Ez@|c&9t1h@F47rf%1PSDQ+vZCdXkFCO9d{ENuryWf5N8~;Q9V$24s z&fRwR<6hf)CaNCj?Unw|;Pvcsbo9&cFLVFgzWGJaYWuaUwZ$8MmFj0RPP_Gd@1Aqt zYiIW5M$5dvbp3VR)M@qcmqViG{9cd}A-zQW4S&M?nw+_BzW454@#koo0ZXL3+nOaV zE4*L5sa^2z^w)nE{cqPV`a3`U_hj&U;FT%f&Jgt|CiUDxmL>6m^$^@Rqx37g$cP|H)l)7 zT?}1QEcq(uo9)#1{++$uZGV4Q{MfN}$d&MTf0f&ajHcXfBB`mFYcGAFW-3Y{N?i@>e_YXE4Ms~{yl%;?t44+R!{BxZFlz4CpzWn$6bAII3Qoo)%S+CcZrB=MDwfMI+Vc($#wOTiW|7NY)H9hL= zyzaeLIyWc2TwKSoeD5pS@>l&qhbwpMJmFHmyjv(LQz`aU(vusvZXM6fe`)WVTDJL1 z*_EA>C%cC1{280LCFEvi>H+R;^0n44)?ItQ_3He(Q}wU2g@xAswAgETaJLq_x{iS} zi|m=T`)6;xX*aw6!!|Xe1Fw7dUQLgah>U%58l;Y{BJoL^39?FM08}|E)IT#)TJpW1rX?b~#9Nh8?!=pXK@8y5!g%l{xMIubdZom%aAT zO~1^wJGLA7FVEB5w0qv2s(ZCIIj3yxFJ3!4<6G#T({`86UwR#6_-6H$jfeA|RXaYh zI=1QBe+Kn0N=MI~IGh^Ro|zoGX#?NGmlh$nWs~;DXg*4j<(pFHP! zD);O-g^gGDXQ&;wVB39Zey*wcz01`tG3pgxAp5~Wn&eiH91VL?p@omb?MjLmwED+T#x$Cu=U=5 zhD-5(-Y`HydD_R3Q2U&fo_ z$QP;CYqy7d6L>ps`ErvR_n&W^^`GJD>#u*g?GOK(=y~wkmZZmKuCH(Zj`6AztX#J& z#qhf2^=q$g+&wGy`0}^yS3`gQwVt_tVV?hs7t8)Le7UiI&GI8J)}FZGRw`=tI=a`j zKeu)L-h<0--S~CuKf{HjUAMA!o2M^+6&t?%mwuJ+nbeAHj~;Kkb#%&RY2LmjU;X;^ zSM)Z%)&27JbZO4F%~$_Mf6Wj7Qnz&4%kAu3Yj|E6t=jd+%RIPCIFV=Wey^18bj7Q7?fZ7K-H!Nfbc~6|vi;J{y}M_EU>enzzHx)bg#m%s5`{pz=OUnS=KXW%&gm+Pb5F+MgU-~su46rNy8HeO@wwjLw%`6T@9UjM2IjBU3CO=#ZEtRQK5VB(oYx!s z?C|;X`2_!F)*bo5leuo1L)(=DkMA+p>VGa<{<>Ce^@i8HY_<;9{bmV7|8kXKdUitn zMSokv>gzGO$BW$=Jmi_yS0_y3c=hb}5=KSk(%&)Z4<49ZyCG%k-rLLGp`3Q{@BF(F zwf+)GwlmHa79@N%x1PLXKL4GYTk}ixX6JdVS89??GugSt-fhoI*1lgldnf)f-+yD{ zufw0uUNu%1G1z}QI^sV=$RwBQxncLq-)U?i^#akL^H4vDp9r1C6{eGW>tU6XEIX93K$m@8;>_ z%D~9Tz`*0-lbM&#B*4Isn^#g4a0*47#NIGQj3!r7#Ld^7#MQO zOA0{Z9~c-IM3S;WY$ni1pGZ+eWE2AflLSaS9m3WDv6CQd2M{|YH!p>OfeGa1f|T48 z5c>!N14BnyX=(}s1G5hU14CO`W@Khok(tKVle{)3us(S zr6e^ugMop?fPsO5rzj-InSp`DhJk^DCmo5Mgv2gMttbI`+&RCXvM4h>qeMX?SyRE# z($Ye~BegsywWLHhATc>Ru_#5sIX|}`F|U$=0pe$nE(Re`*eZCsI-40Fbx5m+NJwChLI$6mAhg1#p$P8A$f&f$W2aoq|hh zT4HHVi2^89C+Fwnmli1$7bGU9D(IpoVzM*VQ6G%W9Vj> zz%Z3z7Q=joB@8PW)-h~i*v_zr;UL2?hSLle7_KthW_ZBxl;JhQ2ZnD9zZn@B*%^5m zg&8FoT^W5CgBT+j6ByGO^B7ARYZ#juyBQ}j&SG51xRP-r<4(qd zj3*f{GTvl-$oP`+6XP!?W+omc5hhtCH70!~3noVA8YSf+HQLZ&LF7N$O?8BB|q z)-Y{jI>>aI=_=C$rq@hgnHiY5nZ=kDnRS^hn4OvZnWLD~n2VU}n7f##F)w0X$GnUA zIP+!Z2h4Anf3mQ#2(u`#=(1R|c(8=BB(oH<)Uoui%wk!=vW?{k%Vm~_EFW0@vGTIY zuxhhfv3jybu%@$?v$nBLV_n9&mGvm=Ro17h-`LpL#Mso?%-KBHBH6Oos@Zzj=CZA4 zJHU34?J?U|c6N42c5QZBc7OIn_7e6s_L=N!*!QzvVt>m1gM*txp2LX4jU$R9kE4lW z8pkS*eH@oKo^$->6yQ|lwBq#VOyR8L?B`sxTv=R=Tr;@V zaUJEl!}Xb)n_G$7k~@$)le>X?2KNT;6WkBEfAR?NXz@7n#PF2z^zkg`Ilyz1=QA%a zuNtodZxn9{Zy)bU-ow22cz^H-^Xc(<@}=7SW_R?I%Ji&a9`E?5sivWurixZZtmQI%SmU}FJTA5juSZ%U;Z>?*cZN19+g^jvR zs?8Fc$F@qgiM9)EAJ{3_CD<*ndtk30x{*i;SLyE&Phv$x(j#-Xt9N#$^I2Ac< zb^7jX29mtKDe8@SGynZVD<3!nCNlcQ`R%t zbEW48FLSS2uOr?(-of6pydU{!`4su=@@4Y%@}2B^$4}KS&u_awgTJT$WdFMX>H&oT zy93z*0|I9UJ_|AostGzCEF2skyejxxh*L;^$n8*#(9+ODVffLU;NGyJk*hJg@obYp)1;;^&Ed_v zT4Y-qS{}E$x2|sEYb$EI-frDKzk{VCv*TQ+ap%m=e_bhEr@9Tgr*;47N$xq-YuG!Z z_kUkn-?@IX{&^GFCge@HHqn0Kib;Z#swO?2>^phe6on~WQ@%`%pL%kd$+Y>?xu%y+ ze=x&m#*UdPGbhaaGb>}()!9z7*Uyoe(>dq++?2VO<~ht;H(z#s_xxWAG8f!f=)Q2< zBDF=+7PBobTl{QE*plN*EtalaCbg`4+27@P%O9)=T5)8h`O1~6WLEXBW?Egk`sJFK zH5b;ptlhCrciqDEV(Ys%Fl;E@@M>ei#%r6rHyzq+v3cDV)h%qPg_loZA-^aDDW#9k(Rr|jlC^+!uVEVzwhvE<2 zJ{)oQ%8|e$=Z<JGJ+bGc)ybWwEKY4dZFYLw8PhXc&zhdydd}?J zw)5uacU-W%ua{1U5&nu^|`dz(vE%e%r>oM0K+(^0c;%3gxkGINh z{l49BhxJa^U4gsP?#bL+bYJuS`UhqY_C9oZc;->?quY;@AHRN5{N&HmmS?=rrahN` zzVe09i#;#hUS4<={p#uKg4e&_w7nI4JLjFoyDje>-k@}br~5M8FeLb5Kw~7;zB9#+${#dC@LkTD66O>A)y4C2qtqjnDGl^ zIWy{Pu*Cl(jM5AY%;33T5CLxPFd|L(f&}3hB8xm5%*4dV%*4#X&c@8l#>5DniWM?s zaST)vPAoKPoVd|xA?wA1A|Ha3i;R;VHhpw9nY3t==%rwl;zP-7&66K}TI>>%qH5|Y zrdDDWnhKi>#yt@$$iT$Jz{<$R#>mXb%*xEB&%h|iq{wXOC={4j*f>#1*yzK;jVuQ* zKK$quq?}YFGRe5fS!K~ClVF$R;zO63Coc|p^odnel}${|6f*mZ$4bJS>rpan%tp;`^%yCT^`m{z>ux-a*kAwcY9v#!JU1yP%s7kqm)sY^7yY>TD; zUIA6^gCVS;0V1jaOiP$5#Qo*sb{T$p$gI-V7SHeB|DQo}{@?!$|Ma=JO3oD?mk(AH zZ20Z|{a>E{pXg^PrzfwoPT(>4QNQQxe}>KW-y`b3+;RLXiHChll&jS=h+8$UGlqVQ)@TjvqwdZ;eUoR^KZSpC-XPNsJ_fC z`QLN)>Ei#=U)$gN&+yEgXIjnX3;dh^GaR{FB{$7BEK1=`$K45k?0PGM;A|Gh`~?0<%tM)jrVZPdHk9FjclD1V#3q@}Rrqnd(~LQF?p zx?NSqiiCCV|0%q`_+`6yciQa!`I>+KGu(Yxb8flLe+Ge51`n?(_y5~@`ai>z{|xW$ zy6myznmKLy@8fK8lfSKLGwA63x%7`j^6&o)x!;SQ9=@0)@$H>x#Ky4qfzM7~efUR9 zZi>y%y6a#6Gu$h+|NWl%(UaHdmXbH`)#=R7|IZ-a{hz_}WBsF95C1b95Ly4@+|I{s z8Z%3cR?cr1VV`IJq3=*GQ+^U+~zgj*#Y_}}Bu-W+A{vX@IUwkZ)6)EgUF`CkT z)ZWhiFWcu$(Xv{%4$ikr3jHPjYx6>@&J)%8{~0X8oLBG}kM+y$~ zdiK4nf4BXdZDgCFK((02FV0enj|?i#XMY!-s#&zi?qXeDtmBi7I?uMItHkO2TJd$l zr6&sff1WQWjX2ljeD6<8vBc}N-?kRNX5L#e>v{R1or*{2$ICP;ewq+ekUp_Yd zj7ELy*Ny3yA9cz<_-+5=*i7s1)!Ys{oE4^Ty<@^2{ElBP|A=8Sd-`XNC-=?>{%5#1 z|NH)*jZgmgt898It6?h9XtVf_@0T65!8LAH7F!owS~KV7uAaT2oSa_j505gweDI&) z!Cn7fe3bckYg@3ZJ8(py2M7k{R}ChYaU;{M=L@v;T+m^E&PMg%ZjKKBxTK z|2^VA!)NIkemBG?dqqA=IjOVBQgzLf++TX#%l=LmJN)tV`N_ZbzpMW&{rsQ!rFZsQ zd@7Ubr`dO_|NZ_?U;N*jYO8mfzg4{L|E^;4pW#&f&v^BJzsl3?rlhU1^?C9qeAWIx za_Wxjg8%9NZu`%`_u^ZU;n+jRpxl$oL$Cb1z>}yugYjQl^1tu@8B+fN#GVm-zOd!KZurU-wIY zCtLhp@`(53lP~d|DK9quig?Vs_l@l5{|v`dtKA<@winZwUsyicO!^(xlK_jduI?UfO9k9+{AXAxbSytZMpMAU{QSR~ z7e=}3FUn1gEwW5bl-g>c?7s6t>EWK1mj@>P*#ATNt^10;%Ni$S7o0wotp4b+zRwHa zAA6P8&y_gUVRwAhraMnweY52;DSvYPOv!%+@%IzIe>jlX&|Y}{tDX46y>XI$h9?}D z9}4|bzw^rI`0`^#lS_~PSo-hn(T!=-*eCzkR(rWm@rcc({|v{x|1&f`PX2Ii{?(JO zPE;ly|FP*m!${RsCr-u8 z*Z-)#>Xo~1&l9T?FB$(t+W(mR@XKA3U3*%Dmmi&0zyJ50b(g-{3!Qx`DtP=~(DDBa z2RH4t+;zs5rIyF)O!2pEr~iFl@t@(;{hyxa5ADCNQ&j(MZmfHt+%zQtajP{E?f?G% z{m(GtXLXxo)lT-cbAImp=V$+?{O|XF+VY=1E?<6p`l^Xv7HbNxS^l5lVDY}~{y+R| zN_Fm4@^7%;D*un?^V6;M&t)yv=Kg0e__^ov=_{w}DkI;@|6^{o_|xL0!1YgY@2{U< zYVG{HMf^`^pVvQB{U7W#|8e}+jOh<5to@Szd0(Dtf2sI!-ZJHnCu`R@Kehk!@Isw6-;brArUcY8 zwdZX5&oD{SzA;>~ZpNmfBQaO%%o{#)_W#uW&k*}SZQHs1U5o!S?7CO~t1tfh;(wm* ze_gHry{UgP^@aYLH~$&dS>=EH&u}8V|KH;Ie?h`=eT%Qv|G)I@!qi&!8C+8xxGrge zn;e-=42}xbQ7MaNp4Kh9`uOZsiPu^k*B}3gyUDBd>PyYJC7q|YB=RySmn^ma6iX~taJYM1-?&PKjm2wPz!mm=1`HQItcd?{(;{EBK5;OFRw|j^Vd7fv4FQJWBMXBHNj4Ws}p3FPPt)w!GoE9h0UQg?=C<3&u~=XagT%T z`Su^dIxYPAwE~9Tx^8O>w}i}Glf+WqYu^_1JN`#c{O_-)TKpFMKKVjcb85A1>z$J1 z1NXPT+2mVjb6O>Ax8oi69}~CCxLNCb@xtZcw}rMci&v`@+PwGi`0+d9N`c&;8^;^> zf7r83&35NMg`37~atrw`yn61WGFk9j%yRjAGYlrYd21}Fe(|61l?P1WOU@fj|4@JT zarVkHRXYRKB$Dc{PyWwfSpRPS_lo;-*!JXp+s}Kl+vJE2{hvXrG}iq;19L^KVY~0L{|sHp{~2ocXY&*uV<}`%{>OB2 z^NIb{t;S|wXBGalYkpk#)za|ZnMu8$w?)UzsMEaa{`cvBhKQd344?Qfoo3UliFj1| zkw6{a?+!AL{?i znN_j@qLv-3;QZgphb{jZPXA{(C%69B;-&v2<-bmAe`u@!_on@;S+hz6^OlSMt;qKQ z+r57Ae}=G<1K~^Tz6QrN$^YvAfBCy;(07{$pMJ+j zI)@)VyUX2sxtLX;=lRKoCx2PSEq+;@e92#LYuuH2ZH0CTnGa9ASyj||F6v&tpFyhZ zr7Qh9b?uwQUDMiG-?l&eXe9b!s?MIU=Tmu%7Wm%yw6~&)_mZK_zAIIU$D21a^v%7@ z@p<8o6i+#kukH&4F1v4WwdQcOIL2hj@O$!0#sgJnR3Dt|O!RZ^D3V#){qjGgKR>JC6W!>e!8_N4G zR%x$1mi=?_og%w3ok@ocXLH_GsF3Hmzvl3dV>}atr}TLKSp4kM$ye(h^9P>1Drf%I zHl<=(;C}|~{|t4G_S;LF-=6>H|DQpq_TrEI{{I=O<6lnt&v0$8`QI16RR1$17S+EH z*ng#>{%e2apW^=v6aOL2CDd)c$8UGVynP?4RKO3}@^Acz)aex^DKr&;N2}+V_- z{l84&zxvg`-P`ja{XfI3{|rAS{rb<)ar)nv{|t-&Gj#4-_$Pb$Tg~}jEaxBl@J*8c z^nV8Hp#Kb)4E{3&9*ple|L^y|Ci~>q&rh8Ew`TvJz&Fz$&-k4@^ZSgQ^2gb8>izux zsof9%<@xee@_&Yq()8dk)9dPUqy96jHxf>k$-b|tT^s*y`lb5+SH6d8eYbhwwTi*n zt3hniiiVI?EQ@w;X|h(DDRKYoVM7uB9k%&44-dRCwg0q#%At9A6`iLuWh{9F_UY`B z%%7;dt@%$-mZ16KW6u}s=4E#=6v*{1_`H7ajEV2RTf4FJ$+;)7u->)m;AdORa{BbS zMh^A-gqJcUN7C32>FjD$GBthY+SJ0|Aoul#b^!kl6&E?n?36CW#vA+v=cjy#O=W)c zSTUwM(NRP0=&?AVU(Qi{I+}NES8Paeo2Pi~f2259a;&H94hrwLJG}&cMsgH}ECYqzYqR1Or2P@tH+Atk1%`j89sVO2_Ccoq|JCnTwZ7XtSsk)MXu?#7sa}DcA(s|4W@>v# zo(QP0`g2@hYLP4dhyM&u!!OLZ`1Acyqx^HpRqm&bH-@QvdGJQ|yHM_1L7~gD3XU#d z$Y7{SFz@GRKc9R(B%3)Zdc)mE5iKkgd=n>rSk4~7(P%UI%N9evx-B;sK03(e9uoA| z!G!7b632PVTau6a-3~~WPj(YOe{J#6=O?c{Y*4P)cJQ2U+40GX=XAbdHB!^9hdJc*yJd_@WPIB$8Gkixp&s;rDVG@ zpLtct{7k<3X)2TZf&I=l4o&>}ldpbxWS4l_XG@XW$6mLVZ~w&4ziOZDrMzW-=Q~MP z!Gm)7FDo|tFlYyO+CS{xJnM0v1f8_tgf6?~h!B?zaix@c{W-=74j1yp0T%y40wV?k0wO_2hy0+&nM70`( zraEwKS-}{zf=g%x1GhYZ?h(T%KWGPv_SqDLrqNNgOWu@ zz8SimTVJMNsn0M$%yYrVr+@q}DiVUs%w|emUowwo~goq?e>x+o6`RbJoWDdc><5=xwt9))8BGQuFglWQ7ZD0 z0)MN)%UvC>w{XnQev$mDpufdiW&c6>`_c=~PAZLfQQz~Q;e#2cg)L{t4H4USGd}w< zbnV!i^5l1Pom*h>4c;b?>DKl2@04cB9C-Q0LH$MPm-W5wduKipd=U7bVM)U*t37+& z3?~F%(7$tJ-37bgHAf0g9ezGDZtnbrfBclUtNy&n_ip03BdapA=1SO}|FiuQ<5h;b z3sd4Z)X9Gkj?FWC6u(RHbu6FR6|Pk;PAt@F5V)$?z%@x!glkpf|Leb0z4rE7XohMq z275J#nyg@&s?{JCMlyt7z7S={wXeL*jO^WAQV zv(uigklMHYtwdp_^7@8~%@-yfZWcT)#CeyKaq$wvIZ2B=JM6;iZ+-ogbW)-I@aF#v zWjecN{9O~NRC}oKKf{HLP34L6E~I|h?HBl?uVJ4a-*UA|3C<4ZHz&eg)_<`7bK+ZH zzl746W%ZvH{{6TtZb{|sy|4eB55zh|CgIm4u9Q@YAS=_KD@mw(6q)^GmL&}91C&SLh|bMZ&bS1aC- z)0zA(W|qgRzTCyW>>E?B^jAOqb!3)|xy+&UH4fiS>Ue#yK31@qt?*y`G1Fu9M?Rf6 zFDbqH49oE^yT2?ii|Eg~U}1AJ`IXfS$s?!B-tK1E=A8fg`r>aqH`_mN3V18gSy}&C z`=%3HTf>#r{~5}xolcadZSn5x3SFxE*{1nN$-2Ipsc&u_{~M>g;`Frt46F1vS_Gd~ z&^@`sMsEAE3G#Plu77mvN2Kzm(9>V{ra1PS{MjF%Gx=qsod@wN@-zwL)mAR)eTkr8bWs?2YK85I~% z4Oer`9_~!Lbci>tq~htqD$jj#IkP@o;j6j0WA=mn`d1%Yob25G>csE++#fkOgk$ct zt_~Kv@Of9nu_x;1Z`Mtg_vLW#h|jZ=|EKXYzPZHkRgq-MBKE_QwaZ@_eR(8c$h75w zX_w5WBdYup>_4UaD%xG4kT3CXrro@=%5{t{-B+HrOb)gRmz(mg(LCYp)c*{RmEL`^ zdEgYv5VSOaNoWOQuvg>%i(j8#eK^nau~4VA^5(PhCfif~-TxO-eO_NZywBk9qy&bt zS(og>H+*{Ygf%piVQL6#XeOxN;S|Euc>d~x>B0S%d(K%~ol-ul|7Y2UM+fDa^_T8S zGwzu7_O`m_;otum{$zfgXMe=X`D)^dKLwwi|1;D*OxEHL=P7!*RO6;iv+ez~_@ALa z-Uuu!{ZCOQRIS2`3oY9+;i}Ir~4u-KrfS#|w8?-gxVf+*dnq&Qd|)bF=3z zEzwf9>IWzs--;sDYgG%r z)~r`KKhJ$`;(rFucWP%}=Dl2a-tf>@vIf-`h8f9$Q^Oz~rnyXBnMWJPR zV(d~OhPG|n$1mzV!%5YFfKluOb1T_^wN+RHV)(^pGeJ)E8zJbi8N z0p~p({lDt(Sv_jy`l-B{`D(+5&gp-aFXv%Q47AptrYe5%i`(trbJV+zE;=(u;7sB4 z%ZF!KCg+PUPWfT{@-*iiiw{nGk7^{8emYFuE))?|wn^#r_R!nQw{B255s~%vs)@T^ z-Mc`El*fjv*H^zg)2?ywq%OzB&SU@lCNEA{v}Yf$OS(#qPwun0@Cy=8x$f%9=`1%ccN_N=KsFy|If(&_iEwG{$es4j!#}a=R}WN z#GU?s+S0LZxj)(tZ!?x&J}Ew3{P+GpXXpQWxtZg+(1YXZk&{jO>}CYW%Q=6m|FnGN zzsKVLT58Vx4Jo)&Rg`M{@vG2}{okkmd;On5^6!zf^E;{{4obZ5-#Ym}gLbL?AO63$ zPpb>7yDT_zHitT)=p&qfB8UKpYygQjO>pjZPxHD5Vj0F+8=D)1$u0Ki#|g+r(Xl6aO=C zoR-M_&v2~jKf~|0&-)+QcStWTUH*IjKem&9+}9}AG$^fmE&rc^+2KolijtGH`i`dh z-Q90C&R_OrLAr*YLhVX_x$}RS{~SL*|B-EohMz)wPa&v@yg&c74!@t7+q{^#{GT1| zi>!pVowL~*UcKQz!w1)XH#L^U{e~8-F}W?N=$Bs3<6}QuMaxvHYK-{~4yr zOYC>O_M|!?(O`@p<~6LCyZ>*29cbj_vo}_EEs$O_!g{ zU6-#@lBIr|@4RkTz$$g8+U8To%xw#MoCDZaTxwpQE{qRy_xBTw}$S1F^-EL`nsgs2OiX$S(Mx+ zI4y;NZU2?0SGeWAKerd2^W5UG4daq1&mO;ZJ>DOAKFweXQmN$sV7ENLS zrK`+N2XlT~6i(*y>05K{ove#_=1sqI^UNyV*mquXi+*8vjCsnh8H|56ak7V>eO0yd zxk*X?hxX+kejITMp76`g;!SqJl1}etk0E02mb@S{p-A!ecl&7El&oI^g$LyostG+x) z-~Pw6{>Y{Y5|8|?E_+lluYS34@-EADZjZO?|9kVF;ne)^eeGrv$r8_nQZ;^Ze9pc7 zpP}NXr4d7N(wENCle3IYN-((HJ;=O&)%oTXOtBUwCexl5UoE-0RIowzB71G8`vd;hNfQT_MlpYG2;7OcDbiM~I{>95A51djg3j; zW`ABOAw!m?i0iXA*hDXsaM_kEiQb>__Mb}da`CXj6Lap1 zA1wJb*XE6YwN#DH2jSzKOyzEI^)G5=BFoYy?B%T7y7JOGg>M^o|C*ij@v+)Lnewe? zC*0_7KJmqmEpk)4On{LUU$8-{e(_Zfj#q(Us)uvfc5Qye=@GW==DgmXCL1o-X5U$s z^R>4W@jZ6yS*RTTWsze~8h@RCd7{-rHs+VfTR(KFeLT5rWy_IseYTCiWDQTeuwLZ3 z@2sBf|7CkhWcCbF@Pq4lCKYjVX_x~jq z^+hyT+x*Nj zzZ`!m|4S(T4{yhg&CBhBWtiG$)gS(2|Ks?XX`U$)r+igyD0S&uJL!<@q98GOf5~2% zidXjf5C1dlt=Sh}FCHj!>1e-1i_15+=#M}5%>Px~|GT%-ExN7pXKnH<1EF0LKEJuG z|1bPML-otm_ouTjz1}fT)#C5od!F9^zQ&w3=lFm1=MA1pgC}N5%3BV|o3FJ0y*&#Q<;~aUM)`_A z`tHt~_MhS1FT3fV_Rntr-EVM3GAsYD_NBx5en#icEZ3B+Z&JKfXu?|i)+OWVl zr>>HbUwW;;JoNolwqr}A_&Sp9^*_ezl&$_1ykm0O*C0ohjA{i&t<9l1M`~Z%onP2^ zM}FZ+zn&B!_oT1Mhj%N?y(+xye&>S@^?A4K-g|eHN*wuk#>xHn^ndT_-`CIlv!|jq z|9k!2)H%wbLDzrz8hHFs_sW>O=PuvFa{*t{c#kw$_H4JF@lK)7`D9XA)j^hy`2x$5 zC+*yDTAhW-CgwTMoWi&6UR&Ji_DQs!JMg`7Ud2DP)X=WDpWexZFWDYja!>pnRN5x- zohLoCQ}Fe&5(BFro-f)%C5sEcFOx`K*7uxKxqH2sR6*)*kA_PLHJ9uKTU=#pFY0Z0 zv81A7y|~U?i-v1!cg*P898=%%_=L&b{|u@xB$GT8_N6ZuJn{SPNB8qv3Y-kHmM(nb z7N%o3De8y#bT&_iH`8~%X5RVc@?=A$ORl}vI$vyVr5^qMeUap;6^)CZ|EVnd_Vmq} zk`H$J`aYaSCu8RBf0?B$v)DiTL8*Gd{>-P}t2zbiuAh{s4cxY7o}gU&l)O1McE<&jU;!{Ib~fZdKryjZaQ0{xML?zxeRQ zFTS1`PSR)UcTP*L+5b^uuglZd8&h6B54^3}+$Y#usdTK{V!m;3gW8`X+3Dvs|1;eE z&+yDlCB0wNOW}S;w&wAt#|7QrzL+zw83!i6O8d`n^r!vy{|r;-FFz@NXi>Ii z+pM21%KsU5)zA1*-}&tD6)&TgPbaIiwO8ElGx*PNxn6zMi!*a%{gNj+%;@-_DEQ$J z&wqv&2kpLlmfS3w!Qtj|;mupVew9t$nmyZiUB1no|8rxj$shZfHS^}JmpseJF)`)y zAH9kMD~*|7rMyBnv;Tfs|K|F?Nss$@*c zUv_tmiT&r4Pm$uuarR4>u-EgyN|CpG-qtA^XQ!7^x$cFfNw#oGU&(L%d{5y?kNl@p z?mzJP;SHS&)AznSeud-iBlf$Nj{P#cS8W5|CcmtzOqwdB9?tkrV`s@v$IA|JJoCFA zyi|7vU99JQ|M#!Et`p}@Ti+}B8*}C_JZ8!G(~6Uw zJtV}z-mGDrQpd+Pkts3;m(+r8FIaHywUw-N+wvQ)Y~1!8n|0)zk$Pukv_kld_?>0_ z-59i+9x=W$^KO{Dbc6la_{*@ER3-wFy3` zF;PC_>f7_$6FRPkOZI9XSscK(UQaTKU8d$IM-Tt)Y4LxScmKV|!|(s_ldP@Nnq;A= z{~4b8|Gs{1il65Dj?dhJ(?7iX&rtRK`Kv^ppxa4mi}_zRZ~0(p+PTE)&V~bqURFNy zEq?o}N6tu|X78tRioIs(AJ6&mlD`Vy%KF-*uWHLYeXW!I&B-MOCv7Ts%}klF?ic%f znZk2HC;Tox_>wH~{Zx^tkj=WlHp9!4t0pg7_r-YSJRZ3veGU$c1w5B#o|Mf#@}J>@ z+vhKj#SFK+iZndkEY|L{MQW1Kc{Sh99SWK!j8mj-+P;{7+y7piKcLV#@YKT=qjxG7 z-<;vTRr>7Jre7O{r+>EDUCdx!|J42us0Anbd7+Z0(UokkgE#8`Uq7$@FxE_OdhN_K z^^6|>TmKo3?hBKt_2IPWJi6R`bNRolf7vg-%q)Cz{8jpCjwicX%8wbgB>!iavf)2N z@wJj^Ig%+ns=^v`6^h(1&;OTxa`JER;xy?(4%MD{VV+MEW_Y~&XZy1@{?EyOZ<$SY zWlfwp=bwgqytnwjurL1^?xp@`*!iE~Z2#)3r5|1{+{YxhWXny?UqAjce7x)a?{{6v zWaV{BUU>)3G@0^zUb&LblG2IQsuN0zMGFfSTDLcb%swC|Frm5Y3k=x{{${$_!lVqp#H@osnl0|k_@f~`oAjM zDb89db@yBSvAqFzdGGP7*|f_|yb`6!QadT5f3y1PMLo(B&K2I3VAkZV|IDqv`ncBD zMZ9*)J+IBFwL2j!@#No$Plt2%->ceb|8B~3=VLFQ@V&k;x#Y`{yWf{zfBji*v82k0 zkKYU*AN|iT+kWqVhK2I-k`p!yIVkm7RLFk%82@2z<$ngQ!_(DQ&elA>uYZ=c@_&XI zyZYZg{m*bAe>(SzsxGz%o^9_pPqP2sf8}B0yv57Z|5O+L{Lk=d|L12v?fV|hEAF${ zc>09u9yfWu_kY4a-Id|H;dk8R^^T8kYw{0&Iu)^|InbKtzLT*OU&f~gFJ|5|;<9>i z;@lf4peyq`RIG4m?pjSsKy?Q7>a)%Gs7lchRv;T+4t35HfhFKc(Jwe-!e z5^`VRaNTLL@zPhDI+>jx9a+(z5s>7~K8dYqvhhOOIZtD{uAVq^Z_nNOAfu4fUFVr@ z&N=aXw^}q~fAZbqit0IzS6;GBc=1w+_nB2w+0m6R?CXt_?B=*AA91ztb92wB)a8`9 z*gMmI!^0!j9)8x(^WbRguqo=ayN#VaJc(wTi~X&hthZL|8f1?>sR5QA!Ky>j(hU4Qae>K zxx3HVO6zVa3o@^%Z@pYGZ&t26Pn~#6_Tlw%W>=g&z3Y~H{S$feN_CQw(h0faK9LWS zU!M7V&-r1=@ykvHQzMn%CJRro|02KYSg_5`qy#1BzL+G2+$WnSGahqLiTz`j|M$m9 zHDl>^9?c6z9FGl^&xHE)WmZj;az3jXG#Pe;I%k*4MpA>$%Z;jz$j@uk>*bf-8_0O{v z`4u6z*u-&tPMK5Czw4j=Gi;x({x7KJ#3YubOHZHvr+(v4xe7y@#_ZK|&VQ}X|IeUl zr*YkFrnNz;!SSeE_DTG={{Cm!^~>VddGDV|e}29AvGYrh155d$=RBK_YqP&ETxG7l zQEszNXP<*I^Md_bx)=Xj^`BwN=f~$|CbK!`yvhCTceCW~n_KnI&2~?me1QE&`qm9L zpZk*-3r{a8>St2_&)|5uK-R(hqswl^z<+7-UuOJgI8l@Nbjt2O^OKh|`HH3-;{>D2p&Q`JYH|%k{{aaf3&-UZ(59XFRE|aWZed4dY=VkBZ6X*Hs zU6hdcyZ3he_h^>6Mu#PNH(ilCf40wWR`i#&XuiEWw+sGINhvke@6M^y|9$>XwAAEf zu{&lpPg{IXO`*~|;L00@fLr!gzEl}AS+_JYiD~~xeP!4$cT-Z%f7YH2{~7LfSj(v_ zeEH=3<;4C8UdAirK~wAQx|cgv-bt|*zuW&%RxWeq>^Z&pwtUuY1bvB#RK|Rf)9QPiwBt{dc)~sk5*4{D(zGicppeI)R6DUh6+f*LleCYi36ed;hIsb(fwV4mS5mKW+2l`Fe7Cy%nGT z;a7hY-+S7A^70*rf9$(6U+nj`t#f^Dz07>Iv9ieDWcw4dm`=w@4BOYul98Shp?7Q5 z(~VNzD^wbIgVVS3+;a8^ydHE-^R&o%nI3PBZ3)5a?L()pY-saRQaiFb=Rd>elo+ZluwP}l~e`r_#=h9CLgXEqQuUuYaZWHC1 zz5lcI7m3aOd^?^b|J8T-)nl7*`AM}ad+-sdiaN@Sy5W&e+J3_3=b^s zXY)U-Z+~{p=zjgrz>miNIJLf7c~))sC;$E8e})I^rx`wFx#Fojckx;A*kkD{zuSLx zcbEU}biVJUwfo|O{OvOAznnit*o(g^s7#*ZP|vgf$Ld!P|1+GPu9JPWVZwg~{z*PZ zcE~$9^ffSk@_SjaFU|h=E}#992KJBS;{US!lK7N-MqgyH{>#ZKj$t)n6_2MqHc%D5 zv31K`GezxP4v*$Pys;!l(q&#&^!EB^&lX>H+xBG2GHc1obpAhaG5V28HWO^0KC^Yx zc)3sgSIvKh-|ILQ_WSG9-=5R(Px3#5nfxEYO9mUC_vGKOQ<3=~d*J*0e-`K88k%o1 znp)3OGymsSkxK?WsZTrP9&VMa+Su}%r~Q}Vsl3Qdd4~PVC(QFn{!stSXZBz94YH;e zeh6KXk&Sol{^-FesNoZLa>ktE{(niQ{v3<3{LjEQv(ICKUYq}SwXZGLn#ofT_$L@c|Kf>&08J@m;hoyhHf}O;FhDY~JO8&ZX-BzgK zyIKFjo!9ZA<&_uxff^IHFxO{Zcz!NFqbGmo=l={J&8Iv(ANsP_M5^sC-!i9F3URwO zajU)+oIWqQX?Qd6o zOz4w0>725s{s;GtmgOJ1Kub3t-d9UiKK1!F?~9?zQ`g;?E2&zU!5}N4;=Vgf)Z~KQ7cB<|xvyK(r!ePs zd=Fr_Q1n7~B}3r*Mc137v+wQdXPe1dZnH{ssr~;;4=o-usaEZEk-B5~^kaSAD{H^i zH)Ma+A4%m5OWviv|HH1$b9}BZd?j)B`q#t%8R`t3-uy9^`p@wG+T+jyg~sQN@`wL@ ztTmqSrkC4#VVU~1iehVOa%rfiDyxIWGP%;rDr zKkKIdeU#d8x;#i#!0ecD`|p$I|9$3S=9zS?+~xA^?v*V|_a!ZJyB}av)O#dVyq=RU zIlfBq^?5d%N6#hB$P4`Z8~)Hjxv$c&(zceB)4#p9;1 zB-gc|pbMGumcMOUR3{y~5%&5&!>PWyoV2fTu1|Mz)s{ns>}34K2pbr(IASD7!q z{$T&oQw5JFPUW}#JG1`Ie}<>74M%?U$aj`h)=4_CA1b)EWUJ4Nmg9Z#2I}C;7AO{gi#-nCUIM_Rl~6Szmu@V&rwM$w07sna<3j z^OvW2`X&F~Jmu+T@qd8_|1(UzV0YgFE#5-Y?N4F zYW1Jt<8iy?DL+KL0j8S{`}aLEbvN+*DWOV zkN$qno(XM!M{=kCnvoy0$bE%-X5fE@DaRyxH(i*;^7eOJSPBR8G4-tcG~dIWmH!#O z-z(vI`AnUYLC4Gbkz6&~5(}lf$$w_PJmP!&S4!uB+Juy|9ijBFPlwl=@~PxUp)GsVc$gt6?JKTlZU$% z`acFK8Ve^+x7*^aW_`4}z5S?c{f@@#KjuFcddd0naokqkpLOT-|Ag89)vPNEerKw_ zyDf3DN}s2&lJ89UuK1r@kN9WLFje1sp|rNd;8(1etj^4|o3Ffz|1%s*{pTI)?){@x zZt+?(lm1zOcV+MYbeFQ{I?1!+jJD2FdBZP8-tx=;Gt4%sJN4zO!Kp-z-rptmXJ08# zF8}xGQTylm&&f;NDwi)jeZ}E4izCza$~|ZQDgOwu;&AXPnwI(Y(|?BDJxjjVNoppZ ztW-(temqCJeC_7n7BRo}%-fcH?JLtl`M1gHXEpyb?EY$Nc9LIRPqI!vsVeOX<9~)y z`QPvVq=jF6@$uj3=9-^&nf33NpE;y@y;S=7+PR-Kw$VDdTrexa5 zlOJn-_3+t`AMUugocR>Rciz9ibZL|P9QC8W)+RoC!Y4ob)yJO7 zCG0W_ieIhp=F(*3WeDKs*t%ZihTOLaE}U79iYs; z4bE?x8qCwUT@$6v0`wSqy^BqB1LY0x-rl@ev15IeC#TNjRFQ?}I@OPgdvWk8Xogfw zb@+d!|0qjwNuk2ejUA`t< zkELopP+M9h|7T?{vrX_#1?N}tM+!Qt5@w#BJ7b~FC3$xypG5O~UB0KkYz!nGJ2(8aZ%ex4=lqU;BU8rd4gVSDG)|A4 za9on{Q`L<_p_7a@IeZd))_wE3aCG&~(uyLPh$HM%c$4f@R6coRwJvC~t8IZA_XUu|CpjIcTrKp zYk!~pnPWfxvi!AMEOI`R;rIQ{=M7&rHu0SK9{$1kcl|HHW6!oZs8`xQ>i;X^aZkhh zz$JtECbhrA4B2_MTvG}5h)dqCF}*`5-|)-l&L3CiY>sSEPg<>2mvFF+3RegTiBjs&;4&i0YhYtQI556LGv@huGu5Hf$8O)y6D*k7fc04S3#~bz^ z<@N86zuwP(^3{V*o5n5w85X`-a8sZzclL+6^_;hLilqL;-#PZN^rmZ%!H>kJ|JMIm z{hwi`{JuZMt0fG6C0tqlpJCU3hI{`RKA3-AeSdn%j=e{-oSv8RC{H~9&nSOoM-EG$ z!|nXpmtCIBocZ=YgO~q>f6^EFHU%B?Y-refRsJu>70H7=44&^y)ql)aUUhQ6;yU>y z(|!9Q-FS?rJT|JI!G3rcn zWsVE-pQngiIPI3c)_JFgOU;oJzngugmpZ#!#ys`)X|P>t*mv=528ZZ^iz#K?W)mMg ztDlj*;UU9;fIHPIHm^GII>yYzLG*6e(N*mKuRZ8l`OV61k*voTt67HYb)J4q{?Blx ze{#YnsgCun*9%)O{#wC*)SlN?EIwFn1B(y;hx&VU{~2!8{45oE^=sj@C`oSzyEFCg z?$;s2kZ)+R`d`~F3VIhBi*7^bM$ z|B!y(aq^6MH)O!f~DbhfMx0nUM4FPw)y$bp_v3cHz%j zT|E9XEYmx_!fv6;EcGxR^8ne?9%WxDPBbV)s(~6O;&)%YUU2ZYoN;A((5n>tU*hub z|L*^jJl(OU_wRYmq?*O?mAd~K zME=^O|9$??@c9I}dH)$6O=OUNaO}Nim4%!A_ni&%{69SY&v4Oh@_&XZqk4O7+c@Kf z!@PGE%G-bVHTmCTk3<2_58FMDIpj^Sf7P?_Kf^-lmm9s!A|7>o_MZR2`R}vvTPJ@k zc=@ENCV*YeaMSZ|GvXdUEfUJfWjp+I!r%BuwlP*Kj#(^HV)$y5BcBfn2t&L2$SbFp zzEr$8f#nI$rplU+NA2Gv{%1Iz@}HsNhR}b8=WTpE#SM zA66Cr8Sbb4XE=4nW9`Amr`bH*OBO2%f9pxzdT#Ca{d|AoSDwA%E>`@?DLt{J{om`F zcT4&vubFv-HF@R@)n`AVS*9BlzWo?vT6g&4naA>;!W_pwht$b$-hS<0@aMn${*v;y zj5FIM_q4^ow}1D`$Nu}wP1`uuYWdsz7La?lf4yx=tCK-beolgY_rIUt>=_R>t7)d3 z?K9;zK5cLRFXUhR?>%+%)KtPAdVaQ9!d3g@pLtjC=Py6b*dMZ=x%JH}dybd8-q`JT zTxkB}x6prvQ+D(JbwA4yo|08FQ@TUm+_%z2$;>lx=9lS@ zW~^h^IH`T1C?HvIS6GFN`SHC;EUv6mw!Ny%P;;5QrD)=^xf3}it}ni;e)c#APw7>* z&Tl3a3r>ixbg&L(kj%cJ#s2^L!>{ZG6BVn(+gYAkOg_|H}4snf(-^3R$d&Oep73pccP^bLge1GYlC90o`de+}NmTA16 z&zWypMZ?}Js{drW``j;0aWu*M&v4}Pv7+7vkBvd=x4djOIHoErsHk}V4XDK=vTuIu z;bU`T4SbTPo^I0Y44kOk6vbOrR3=}&c)o`@C*zG>ljQ|Hc-+?6_jq4^>9EUa`d{%y zYBskY|1+JFGS$7~LRLz8(=Q1H)k$^-5a)NdXuaI^&T92e2m@9QKHGGm*H<1=XsS~n+4b1 zD7kUq-};*c508C%_#*j7new%WlS&K+5_+J8wl|9gMgmoGQ%Q(hLGvKO3Uc<4XF zd;5E-{~6BIEnl&SXSd({$1nK387HqcnzrGX+xss$FL%|{|J?ihk5lxo&Y9WIl>PsH z`}!pz;qQEbADhmko&0O?FW$ZXKSTYllHCP7d-FUx1(o|b{^_h$IyiT)O5qm^HlE90 zK0RS8ntr?Q{hu`-zRs1g%J|i;Iq&^j4*u@{3|i^`8BRsaliBOC`NWf%YOa$foLl6f zq?}WK_&-B;vDzc9mnr;#eMXyj9{rT>@Ctrabjt1A&)WQpB?<|L?Y22cy8o=Td;j=9 zL-ov`J)5R%@|f$Xy07D!cmq&L@8`P@Gm9vX94L%72FI|6YDts+l@*`mLGj|Ds=iP5!3W zF7IP!bN~G5zw+-2H~tX!Gydun^rNtO%DRIV*7av?P;_6xq|Y~wNL$^QF3aC-h{ zTk%7$cRjv3k>iN7i2c?sd!G7F>*D{c+gl%Rw_kD2xrT{-_6K_(CKqWf4)!US7I{qY znTt#P%J2I{PguzW{;?Ks`}66a?frN6@()zS2e0`0beTC}8SBUz2=895d|j6Ui-mR^#2ds9(ml9KINmt2t} zl5Vkg@(cGbOvyiWhjp!^v*TC&LrbDnuIsXf7oCvaYE#C+aN_kBYYyR4EU!O@y(n1G z{{OoXNN*#ozAhab0^dOg=n1@3+4{qa7yLMe}<{b z2TndeX#aQmt9yx851d-Vcn7o~^YIV=Kn3MVg+1&{e|`7=?0x@oKi|>I6ZQM*kJ@hr zty(;sCX#$Yp?YHCSI&<`UzDpD->ui0P}!{6F@>#Rwr0!9(+Zy_9u-Q~ z=`a2>@U}hF{AP6duimPqGk3R?{)(H{rf~ny@^gP24q3dIxaaTm3nyjU{bxTfy-}Ea zc$f3J>f3i7%sTLSSL7)piSM%8(`A3!e~y0ftNnD(E0&&Z-VdkzXZW=E_(dnXwUhW} z$$#{Gb$Uw%U-KjTqv{i{J}U3qG3T+~i95+J59c53l-$)H&SQ`(*u(p4I%qC&`hSM0 zay|xzO70Hc7ZmI?P1O<)8BTTEVfTFZhjabk&a|A6_p|c3f9pTPj^Y(pCoW9kIB?JQ zqWwdozGp}Hg8I(wXAhqiU2Ff;{deH8H(RmI>yFzer8?gG?>>Px z7``a@r$3$L;K@nuGC4C&&3_+%&iSc2TV<2aoh3f~zvj#is=D8Or?BM4 z>W4>E|E=6vC;y}1tnig|YXj#q+<*{i$0X@??`!_ z;eEQ#{`OJ+w}<~TbZy;xX369J!~Z_o)`wNyxpX?jq(}LW#lyeLFTCh~Q{VpVmBlpY z7tX)pCAg&aJ%42UlHIkRPiFU0=3R!&kM93{A1nH1|B(*|K6ozWeRSOB(#;-8k8d4m z%lfNTzszqr;O;ytF8^hXto))s<&teS5=xwco%?^zxUbCr@UDBH?uM4Fzk{R`-br70 z9=6Ee{Xc{5zga?acFmdPE^y)WkNxlE;*Z)3{@tzjaGAx=!hZ0H6>{^Bs`GWrRPm_y z+ZF!_s&OdUX6rTmXZ;FK_Aon5#@ka>K0ca}UhtU2x$7&zz~tZ6_*ahb5VQbg(|Vy1L|HApif1 zpNc0-ygd2o_+S5}SA8BF=9|`_z-M@$qxz!d@f4T2oIT#g$7^1{Ehsg*yyqhh=rMxQ>m`ktIV=C2yox9;T0B};cDecAkm^CiCGM(M^2 z6OQ>zU10WHN2%uf2lqFZ8x}aqKQ89kk&`-IV#e~*^K3VnAATcKv{re+x1*mvCC@b1 z6034L`T9P2mPP2VqOyYcNmO+!uHIWm!KXW1_u6_D#W;!|m{U69F_FXF4# z1;f5+*K|I=+{82EWKa98>eP*8BapZx+X#d3)+VJ$midas<5fym4Lp zpB=w;9?v}{cfKLZ->Mzx&bkb1KqAtfzUSyRaKU0{aE#RvS^ybN;#g#%TE z9<2PqkjyY~6$jgCW3%YCT}sm!ZIqmLI8OaNNy@46^0aqbg7wb2nVw?k$)9q+DQ}1C zHy7=~ttqV;_Wv(EeNmqD@^h*4qZ73<`Ew2RxL>ACXw!+cv1rMQ|8cXv@W~k$<=XSS zZu0(L=InTLZm#Odfj?9HG4wSIT$j4Qj0&QugmfAL;@R)+GMU75`7vi%$7 zSKjNtY5%gq%ID%V3-=~vxwy4)>1mlsafhDjSiQR<|A?=lf6L|_PC2)wd2{l)iFZ8per)D=FvWUu{HJ+&XKr&<$+t1S zW~!FG|0zEE>PgFHhK%BW>ZkvROPri?pFz5=hcUXE@8Ek^jnB`bBvey=*qO&TPPlvY z^B<$yCRgd2GaDrtS>H@qJgMMZ-<&W5eygoANp8nhygd2kK*_XOQ`w?fww|zU*e#APKG>1FEeY*CeQbK}vBzGZ={ z-hDg7EV1tV>?!Z3w(~kQuZ`Jhw0qG^g?Xp^`HdF}Tb1Q}E1n%Rz3!b?dU@VNscP>T zvU8KybF#@YIqWZT$OtG&Vcb_5_$JLgHb63SsnOK$3xrlz1udHY|MKVaQO4(jPkvjH zqWVW)K6r}9&k8imB{EBG3} zR=qeacPDzg`;2<`Z}W{DJEmQEesV!&%9p1Xf~RrF%uJM*bTRFkA8t28;)vWK1^KNX zHW;1fn`v|LKf@mR^#2S}Ur$_ApKz}A;01HiF!TiJ}nZ0$ZWK6|yqtb_09ZBZ|m-!Z=qBJ*7YVKRWgv%v$nVj@#eff5sE`$~)}0`~Uqr_GQ+k85^|&&e^T2o1(q*n_W(a z4cEnQMF)Jc^xcm=n4n{`e&ua_Ctv0jX)#Ma*6B>2dF5P8%aez~oHKS@-+FS9Qr+}r z${B^nbZ+lZpSH*#BHI4h{3a)Gzq#Lyt&)*hbA`_zqdxn8TF0_hd^7uD zIVmY;*VP)E&z|iwUN4@!P)W(*SAzs&(cKSk>!Nj9mX$F|+@EBBSp4pvhtI@R(|wZ)+>>b)0wN*|DoU-yHCH^}6XD>)U-#vxHe)h5j?Hp^a1TQGwa@XW!^w#A(dw$Du>Q%Dxi%mGbeFxgv`{nKwetEp5=5{P+;hCB()*n7TKgv^Z`H_B{&+JnD z*^^DuD(=4h5t*SYoNo8iXwNJ?XTdr|f z+Gd}~la&0OE*`VDzy2k+Ts*SNqOiY(qblgf{0UOrB`s$>3{?cbHOr~H)J|DY@N?@F z%k|$UfKPk7SO4hF^D8|Dwr;ms-gZp;sG$(oX9-p$!MWnQ4NTih`fMl&x} zte>$7ir zHk7$8aBE#qy*X67M8;t0;Ul~F^_KRO`*!i0goXZn$$s?2jNgAF=Lj_cygAYL}JZ~UeC<;SC%jbcAz zGgfyR7epNNpE;)8)7$jP5ti^h!l~hgmxKo2?Dn;Q9aB zJ?s1%=e*V{e|YucN!8!-m9J#~GpJ7&JNxl#e(KL}HPv#eK9{V0^Q`lB$A4H5zwMrB zl1bHGx%g@4DmX$;!*Ocm6zDn7r2C zCwz^q{_NLJ9((WK^k>zcmpd>0XLwXzdSCMUPWN|}Qy=_Os}eudcVKyYZ=m0~TN?W( kA6uJZ?RtOvCe^6o+IyxBZ$#g2+2eJfY<75O6#xI50EBD_rvLx| literal 0 HcmV?d00001 diff --git a/users/people/dietmar_kuehl_small.jpg b/users/people/dietmar_kuehl_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3b7bf6579d7499a46e3c1cc6cc3ace2c8347a9c GIT binary patch literal 10571 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 W&XqxP{%U<$q5g8K*Hq2+|2F}i87UzE literal 0 HcmV?d00001 diff --git a/users/people/gary_powell.html b/users/people/gary_powell.html new file mode 100644 index 0000000..ec5a388 --- /dev/null +++ b/users/people/gary_powell.html @@ -0,0 +1,41 @@ +--- +title: Gary Powell +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Gary Powell + + + +Gary Powell +=========== + +![-](gary_powell.jpg) Gary + Powell has been messing around with C++ since '87 when he + dreamed about adding his own operators to the language. Since + then he's been busy overloading everything in sight, and + working on bringing functional programming to C++. + + +He currently works for Sierra On-line a division of Havas + Interactive, a wholly owned subsidiary of Vivedi Universal of + France, as a game programmer + where he writes AI. + + +He can be reached at [gary.powell@sierra.com](mailto:gary.powell@sierra.com) but don't ask him + how to solve the riddle of the left handed troll. + + + + + + +Copyright © 2000 Gary Powell + + + + + diff --git a/users/people/gary_powell.jpg b/users/people/gary_powell.jpg new file mode 100644 index 0000000000000000000000000000000000000000..349ad1cdbe9c10bc76f0f400ca59c69ec98c3ef9 GIT binary patch literal 13577 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 literal 0 HcmV?d00001 diff --git a/users/people/gary_powell_small.jpg b/users/people/gary_powell_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bb4e819160d27a19ce702d3717adb2b99440b7e GIT binary patch literal 9036 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 z�gzrt1U}a&&xmRbnI})n?Nrf;a^4e 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 literal 0 HcmV?d00001 diff --git a/users/people/glen_fernandes_small.jpg b/users/people/glen_fernandes_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b08464f76332e52d429357ace4e0385adacd79d GIT binary patch literal 7204 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 E08}|z(f|Me literal 0 HcmV?d00001 diff --git a/users/people/hartmut_kaiser.html b/users/people/hartmut_kaiser.html new file mode 100644 index 0000000..a5364ce --- /dev/null +++ b/users/people/hartmut_kaiser.html @@ -0,0 +1,42 @@ +--- +title: Harmut Kaiser +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Harmut Kaiser + + + +Harmut Kaiser +============= + +![-](hartmut_kaiser.jpg) + After 15+ interesting years that Hartmut spent working in + industrial software development, he still tremendously enjoys + working with modern software development technologies and + techniques. His preferred field of interest is the software + development in the area of object-oriented and component-based + programming in C++ and its application in complex contexts, + such as for spatial information systems, internet based + applications and parser technologies. Hartmut enjoys using and + learning about modern C++ programming techniques, such as + template based generic and meta-programming and preprocessor + based meta-programming. + + +You can contact him by sending mail to: Hartmut.Kaiser [at] + gmail [dot] com + + + + + + +Copyright © 2006 Harmut Kaiser + + + + + diff --git a/users/people/hartmut_kaiser.jpg b/users/people/hartmut_kaiser.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d6846d1792545e34ed466e9cf5a17fca7259c90 GIT binary patch literal 20675 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 literal 0 HcmV?d00001 diff --git a/users/people/hartmut_kaiser_small.jpg b/users/people/hartmut_kaiser_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cabaf00cd86585e33413785f35583656d530c3a GIT binary patch literal 9207 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 J=4k(a699Wa|Lp(( literal 0 HcmV?d00001 diff --git a/users/people/herve_bronnimann.html b/users/people/herve_bronnimann.html new file mode 100644 index 0000000..b8d61c5 --- /dev/null +++ b/users/people/herve_bronnimann.html @@ -0,0 +1,38 @@ +--- +title: Hervé Brönnimann +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Hervé Brönnimann + + + +Hervé Brönnimann +================ + +![-](herve_bronnimann.jpg) + Hervé Brönnimann is an Assistant Professor at the + [Polytechnic + University](http://www.poly.edu) in Brooklyn, NY. His research deals with + computational geometry, algorithms, and implementation. Prior + to crossing the Atlantic, he was a researcher at INRIA, + participating in the development of the [CGAL library](http://www.cgal.org) for + geometric computation. + + +In Boost, he is one of the authors of the Interval library, + and of the Minmax library. + + + + + + +Copyright © 2004 Hervé Brönnimann + + + + + diff --git a/users/people/herve_bronnimann.jpg b/users/people/herve_bronnimann.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e6af37430598f4498855ee0297e03db986f668a GIT binary patch literal 74080 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 z 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 literal 0 HcmV?d00001 diff --git a/users/people/howard_hinnant.html b/users/people/howard_hinnant.html new file mode 100644 index 0000000..769b9d7 --- /dev/null +++ b/users/people/howard_hinnant.html @@ -0,0 +1,50 @@ +--- +title: Howard Hinnant +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Howard Hinnant + + + +Howard Hinnant +============== + +![-](howard_hinnant.jpg) + When Howard Hinnant is not monkeying around, he is a software + engineer for Apple and represents Apple on the C++ Standards + committee as Library Working Group Chairman.  Howard has + is also one of the co-authors / co-inventors of the rvalue + reference work for C++09 making move semantics and perfect + forwarding practical in C++.  In the past Howard was the + principal author of the CodeWarrior C++ library. + + +Howard is married with four children, four dogs (he really + isn't that fond of dogs), a rabbit, several exotic lizards with + the usual accompaniment of insects (which the lizards are + supposed to eat but find more entertaining to turn loose in the + house), um... let's see ... fish, wild mice (they eventually + kidnapped all the domesticated rodents), several dozen chickens + (no I'm not kidding)...  The neighbors are trying to turn + my property into a federally protected wildlife preserve.  + They've got a fighting chance ... the kids alone would + qualify. + + +When not sitting in front of his computer, Howard enjoys + snow skiing and ... more, snow skiing. + + + + + + +Copyright © 2000 Howard Hinnant + + + + + diff --git a/users/people/howard_hinnant.jpg b/users/people/howard_hinnant.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a63a446b47195b929bff016a63ca4df266016575 GIT binary patch literal 19817 zcmex=ZM*FjzQw`ZB*{0D%ey zQ3eKxItB)&Crl3izyJTv%+D09z{IM-{D*;&fq^lDF$1KOuY}uyF@wQ?+rhbk!HDaC3~&)su!t@~1Z?IHun7eW4F9nL<`*D&tWy6ekptPy z0to?-Ul|z~m>eJ&5&|qDAbS}=VFn399uQyn64(z63tcsMzE1i87m1x5LJc=$yngoQMkNL&K}Kdl#{YL2SQyy;y$aAr{BL#6l%uR-?v=A|MwW47&KiSS9IU zQPU*nVA14alaH!wAP2CknI5|2GC5?ic#3PNSxM?6xD#-@Kpo+P|F;-;n89`mGT1Xb z(BIoS^=c@y+{Ue+cURwe+qC?~>$3OxtDaficmKKTKSLqsIs4hV69sr)-gWR<$!@vK z{q9ZCD;tY@*exd9?7XIOdhxH5`?VCa9lvcau8IBd&ns<1b>bn<_iveF_dVZz`_I}F zQ8QE+pC4kMw@3YR=LgqyYp?EnYn)h+nk#$q+WF5BUDH;!UuE!6TwZdluX*{;6OU#8 z&3hQhlfBLIlM0jh^tb=KZM%-i*}Cxd-FoqD0s}*T@!R6Zw~p06SYdv}$NO~LTh(VN zMbB@%-FGeH$^(<&s0YX1Rg^t=th}NBZT0>aiq$C@rEk{EzQ4av^=Mn^1uKT${|qN@ zEqIuqGC_L+bHh9So$LPHV)a~g=H$`U7gv41&R2X(yE1#`9>eV>HzRqo^}nqA8g>3s zUEBTzvu+pvnid`N_Ge^1PjX~*>XDFZSA!*elRs;xzx&T{DEjA%yVi@-O1ajZSYbAA ze(zsxtM{p*9~ZAJ|Ga&7wRD`W{j$HRS*E>P%yzB1IpLG%?&4YBHy*O(p1uF#s%5ph zZ~v-Q7imK$JkFMIY z<`4JAS6kYQujU=Mc_DS|qTT-Ib-CGI|7Kq;uh$ z7jCrk*#7^*=WSO$IlQZoy_hXxd^hodkNmqoPo;ITV;5#ezRTvkcy!6R=eD6F4tEd%10zed&T5hh%w^{~CG99e$O& z`PT8jYV|Gu8Jd4(J@;Gm=k?9@F6Q@z#j~!rcde!5S z`rBpBnWr{x4KDRv*{fc@WB0|I>A#}>ehJ_FSLxiLUq`PRKkSwplL!xvXyXh4dGJIlp#a zUwue?+6Bqzj!k>t6(5fMCwe|x-h0)5hOSLVchqgDoxCt5y+>`o-uBQsjosBNMDBfv z`Fr&C`rXni>`vu=t$%yE-v8z2_rE@WZPt2R=Kb;Q=HR_o8s54cx)vQgGrM-){oKyy zEmBv-V(!d}4a_*P{&J!8Y$mt)r}DRc{m-zrgD36Ry@M<-Ufo~9#Ceb7mtOLA8X7GjsP?t@LNr&6lyc2b(q=k1d|}uBAYeKmD!u=JM-zV)|D{RQ#|N+8*Y1 zX4ShTGFtQF&IeAp9=~$uzpYoJ!&h#;nQVV3V#l|KM#+WxcGuZ69{&FNyMFT9Us~J5 zLw9qFz0%sAE537@-F60#YV)wuU++A-acuWzyZO(T*B)1?n$5UmLi8(+8Q76y?L9WE<8$M`_B;ly{u)m@9SNw zcmKcma^JEqehpRCM{DI)<*vOqb=w`cz|9_ol3| zF?-g;;DD06c}CH*?nK?5aNuokTU-0idz;r?Y|nka`Q^R)mvs8q)khRp>6yRykaJ?) zt$A*~)pKsG$(z57XW84?=G%V7?%Mlr>gxRE4{o=UnFe81BSwF%K%~_!qKd`SDjre?9%Wp8u_G?%d#|%`dCM;%;@%xnI0~X`kuk zR{`Iv_5U+?{*r(8*Y(_&c|Gq|~?bZV}u1eRnS7nLT#b{mxDaJCki2`~Da2(rtEw^UierXE+%3pW#y24_Wsm_ODuVU#Vl8n^c0j|pExyli@DVN=VggkU;iqL-I)4IZTGi5?52GMg)9ee$-Z)(KlAv{ zSAXw%otFD{<)BC5_dP0%G_-!6P{b}Hf+6S?jU7)cl&RTt@qomPdYAjJHT4z zF@M437xjnK>MZk@$;do<=BaD%@t@&hmj22xRUO6!cm6XJKk<~kasSEh`ckG`wq5rB zFMSO;TO7kY%aOgwl)I(=`tI4qvB5Kbao*i~$>CS@j2HhI&RwX=zqY$z*G$z%XS6$O zw`Q2Vlm32Le%Jd2=g;5&yG5tmb??0}>-8BovtMkS6!A^&N$&S+FV|iB&!Bc}T|P^F z58E@_xqffV9&A0AaVpzo=YpeURl;w-)?fTJ@3h$bKQCW~&UW){n(w=|+W#^?>%7&? zwg&Gng>U`3YyETkx3@0rTN`rwc7AAG^yj=2#m#YXzBy}b&o12>%#&t&e&Lq=TKm7O zklOWk_1wbXX!qsW+l}*%i?cNf%DeD(pDrl;ct>+R_u9=;*Pq%>d-SAhzOTgorKVN! zS-E0&Cmid^D!*R;EBxxK@Rt$0^*=UWJMQ^w-?xnqcS^4NZEN+rL1EWx$t_#&ox1(6 ze%YRsCy%#h$4Ae)wsGI3yJu7w-+ueg(0FS}-|b7z+rRGkbvN|8%$u6mybSx5mRI>o zt1WChrMp{k{noYL>$?6k_+4#a^UHJAO1W9OjyIXRedm$imETs}h%W6b%@s7>wDE1u z54OK-|B|v|-elj-+1a1Yw2ArHgUB!cTI0R{GZ?rmnY!vkLCKcScX%)VonEW*&ERA9 z!AzC*Gw1n!IhS9$GqLP+c6G$DjkC6G*2{MG+5NJ5->l|aAEkbKFA-7>&%Vpl?!Ktx zPtEJ~sXu*>r0SS)zgc%Wa)X8G`Hfc$|4r7u`%n7vy6^v*udJ24@+dsw>!R;lrkPxO zbko@W?EF{t=6@coY_vgO}JYRkLsJQErnDf5-W^=Eqn01G(uX)Gs z{|v7#)Ew$ zRbH(J&K)z^Vw~;M>yW`5`=4P+{Usmvtt;&RUw-<@NNd%y-_49{IeTp znR5Gu2|2nK8V=phty{g{{;&MI zh~0Z)VsgBs`@5qvmo`a9voL;F+PZKNLxTmQRS4Uuiu)g@UM{GA_ANZPx;*VlcCMJ^ zlU)94&Dv0txxLvp{{EX?KX>EQU-Qqdm#Xe45zlKBeE4VDe}>Rn{%ado?&o}0$89xr zYr9NMw$ydgYZg*1zwR$iF5CZQTm8bX;;mobuda1o96Ko|`Q4%8CoJygF-hdyj_u=1 zd%kb|^V)gK|L&M)=22{K(xl*VSE^{r#zm&zUR-|qXW5ELkM1tt;(xkT*lJRprt0h* zm1*;R9qF8NfAj6?y8d5o`Z+J+Lk+9~Pb}TK^~c)1(-W_KYp?PX-4L1T|M&a; z+xvgYec5y2*s6% zvmQ9la%tjMXt})Z)%L@MyZSV$*%yXxGx;6!T%29Vyn01#?){flvsZmx8+r4m+06`n z#_N{Hu0Powp8d9%{aNmx_Y1bwZLbaf+j)I%XMb>?eBktw?>_j#+r}(WzVCZoIN(@7HN>)2{72b2Irr!@=K|E3!|<#{a+a zyy#b|t=zTCX|9ryCOga(f*w6<&&{3hon1SB$(OzN{xe+o&#*Xd@;`m63|Za1Q5U>F zJ-NIiOMC9_{|v7$e%XI%yPFR(ZQi+m?we$( z%^&Qxl)QPfyYO}H*6@g}S5t3YxTTk8-D;VCe0Slu$G6`0e~k|R!@n|W=gh0S^7zDW zf6C7;Ok5|nEsi_xS;%pN5V_}Duf>L6`1_@l)ue3skzMDn_FTL=zxz^wk=f>gJnI>* zyP4PU?6bYU;LD9$f2-%muPy&!U+cm9Yv$LMUyJ^@2flo~U-L~#{+9^nywcM1`|hs) zE1P}K=<|jTe+8!&Xa4qGdwg+a@3(!mR?&a9zxlQz`N@|%n_oYQb$z#Q^R`oWZkroz zm%6)UEr&RO8`A^p`6>s@l^y1r>^K1S(O)|S$x?HRIfayKod*^@b z-dk1wI#b2||J9xU)PEVKR_@I^%l)4rctO2tOYEfo46k{spP zSXEYUJenTOz;BjUf6KQwvpVWO!sOd9-}v+1;;i+e@BhYsiC^-i)^*;0hL4rAZoe#+Z%>x{rF(MIu|1K_ zGpFVUo?gGmbm5yri{5Xks;3xr*XFP7i_M-tNRB%ky6r*9=e}?G z61-*pL90%${cAga{j-$d`0a1*O<(xy_;Rl=S0HyB&KKS@HHrT{P>OrR%@iyS*>fFMhcH-1T3+^Jo4oUDEEp_(k}) z+Iel)e#OnnxhcQ+%eQK?++WfmUwu^+OP~E`c$~ld?dIiQ0}t{a-Tt2;FXKPM$`f&Y zsfGU;9tXeK|2g3ABG>&H%ipwQ|BAF;{^EDt>2FikRQ&C#|9=xa5(pW`WdHvUH1@{G z@c$7{gr~D}d_a)Do2QQ}1897f$HONxFP}+(fgv}qq$tSUNg*OKN`d_x0}}%$0~>=O z14CkRae;5JTL@@4%+u9bp*YCh3B*R=Z`U9rs+V;=0u-PFx(HbUEWzZ0q7ulMBZF~D zYH>0H17iyV14B-ENdZXw0|NttNK!V4%>){^6e)^`jACG5k^qUPL)bbXb`pf`0Ai=) z=A|$&FoE1$kdm7MVjp2(VCX0-O-*57VD@2PU}!7LOf6?%V7|h@z@U;-nw!bMzziC- z70FFaEM{O}0ga5Rl%ytSFfgzfFfcIi6omviGcd5&FfefNq$9DDkk}=u6(u15I_DQu z7GQ5S#UKOU{9&*wmJoH2@>L5Lx=BgFC-F)&zsWnf^QfDlWX z$-uC^m4QLx7D7yA0Rsbn3j@Qp^GN;?1ErUYl9B=|ef{$Ca=pydWIa%T!Yv}G0Im`@ z1Ia!;kbUs5Q*cR5ODxSPQ2?dt1~#~^TCgn{|( z83q<%ZU*Ll1><0r;nOw3F?Od?FOOlnN}OcqRzOx{c(OtDPq zOodEUOf5`(Of#4kF|A?R#&nSBG}Be42TZS-zA`f~b2E!ED>CacTQEB_`!h!|r!f~X z*D-f7Ph(!hypDMn^Ks_O%nz8~F#lv>V-aRiV9{lfS--Kdv5B#%vzfDb zutllpZR|7I*Rbzrzr_BO{Ram( zhdhT7hZ{!}M;=EL$25*r9Q!yfaXjbv%_+dC%4x;v&zZtm$=T1jgmV|?dCsStzqtgt z)VXZALb$TH8o6e0t>Ze%b%*OSH#fHuw}*D&U1k0CeLSHUS2g`2i_>&65c-EmAr>}@A3ZN6Xw(7^W;n6tLK}|w~g---#dOz zepP-){y6?B{%QQ1`Oove5#SV16L1zt6sQxJEwEGIy1-XKVL?Mdf5BYA9>GG&XheY`$kSo&Ot6qZi?JKxtH?7@^@>AsZ%fC_(Rd7_uQJA4{ zMB#&?jG~8Psp3M#bBe!})RjV&nv~Wn-BspNwopz}o}zq6`GbnQimytI%4(Hcs+_78 zsu`-&RgbHFS5sFDS8G?>uJ%G*LfuonN`1BZ9SvR$dyPVkMH*K$*)%OQvo+^xUeIFF zGS$k^nyqzSn@QVDJ5zhE_C+059ZQ`&okcp=b$N6hb<1>D>ps*I)AP}5(%Y{0PG3bo zN`IpMas7V=rUp3%OAKxs3K@DCHW}_R{A8qMlx#HH=!!9~v72$d@ebpUCfX*cCi6^g zmn-*YJy_l}>cU!LD~ ze+GX~|H=M$1JnZw19k_p1qKAp4ty457*rE^*!4^dwKT%oba6Wxg5C(xjXZO^0M=e z<9#+1& zLa-vQ;!LGhWoPB{Dz~bo)hyM?)rV>nYZ_}F);iWMtYfT8sykG#T;Edvw86b$MI%>Z zcH`M5gQiJMUz)?4ceTj2G_*W!b#GnW#@ANVcD>!YeSQZ^M`p*lPUFs*o&UO0x=wW) zbWiL4)05nDs@Jf0M(_W=w7zrwX8rRfuuaIDaBZUf#1)eSCsj>)JlS{hwkZlzx~6=Y z8b9^qG?Qubr*lm&o&I2k&x{>2Rc20@`Da$ftgEw~X0M+kGpBRT_qi!^FU@n9w{E`d z{O5ZYby>S(o$k7Y>&4c0Z(!I^y5ZHvgpJoWd2c$j*<$m$Evj4Q zY!%+xwT*FG<+cyoGqyk25xL{yPOqJZc3JP*x?6Ae@;!=sX73f<+rN)%U(3G#`>XbU zJy3Aq&B648j}OHkx_vm}@RcKhN6sDfK6>Jq+p)vP9gpunVS8fFNvo4PPg$JWe%kEx zwlk(@ww^UTyY-yexozjo&+oWkd12Q@n~VD{*zZ+ zk3}Ekv@L$h=m;Yh^Gvlx3-(CN_ z|K0hY`~Uy{e-x|-5D^rV5|YxCkkB+%S5P-rmywZ?QCAWN0VU`>K9mB_-eVAqqEb?d zvWiL)5=x+@0A#KQV3cK4VMbjKApHLbqcj5pGk7%shyXWtkf;1Xf^ZCxMP3iU#Kg$V z#LU9Z#>~vd#0Z^?7cyjV3{(&1g2AA*#NjFTQVeRMXNv}lv)rC^of zL&=KfqYU(PcR$>;K3R?|;dn#U#fr*KMm645&k(rU1m6=VSfl-i2k=f8u zC@`_GaiWs2(T9Z_Sq@%&_|YjyIjKlwl5vx>%A!ps!7jXTct*tK@g3bdli>rUM%UBCjWi5>fhyh`&Y}xWv29$xm=(0y+-kg%DjLjY+pAut?cpHA~l~)#Ft4s zJmTqXNye~}$8UC?QjxN033RxuC}bBWbEsqTfo(l1mMqm5_?Is~^)p19@&ARNi4%^g zDZj1p%Ua7A8p0*WQXS!uojGkGlj!23nhICBmNA6}dn^c9xFA&PfS?lFg%X=30dlH_ zjf;&Bq$!;>X=0qbCb^1#@sG({Chqvl_vujfnXGo!OAa%Sr|lAs-N*6oKf_O7!IKgU z94yzr)_*i(Q>e7r_;T`Lhg98TZS${8X6EOYE?U+ygDuc}<<-f3fqqMF{@haJ?rZU5 z2G8ovMQ!IQKe(LOEn{?Ox=x!@Kl5hJha6lj9g`2=y(l+LZP$tu%?CSgZ*7=2$zl=b z`4tzA8U9%QpJA{3Fa6GU{f}oB9KQVWF;7B0i_QI?8$UgFb7>6xt^7ytMpevQhflnA zvX?$Nm;WE&Jb>|4x_iI~;Gur@_`f%`KCyN-DR26g%YV|GW^Z8wO1@;u1@A+2N`sA~JYOHGS(` zUVZWF*!P85U3}K={_F|K=QkQQPM?w$=5Xt3AP=*|{k^jm`%RGEvp6VB@T(f5iRbNA zZ24O+{AYN&|4L~>>Zw{Cm$;ub(e)qY{|H~M{m*c?{?qlNmnTkMsjTv!q51EX`XAQs zpC2hoo@ODtq<8n~vipCI9jL3k?$37P%U{EZf|r8qB2uRReSL7-R{h;SmOp6z@Zwlf zb)$9J+uQ1g?UENuItrv^{5kz4R{xRU%L1M>Wwraw9&e8RXP9mOJ^6uy#F0ssCHDgu ziXv6g>w|yH551afvHpbL#_pDM8H+Qlk@liC6IEVWxOvKNv2?NJNVn+CbU*#r=(M=y-!|6Y`Ok1K`9H%ciTOsAs#dIfVr`x)3Yh+9ShSFr-@i^i zIG1bvmtXULy#Kx4|35>M)|<9l>rLy||7R$x&;QR*SO08kqRRhEKUFR}XjpeKEIYs) zI+aD(m+j)C8`Agsf3r^rD~Ozh=s+D*W8>rSh2_XTbYS-dzSlx2Meb&#?S${nPm0YwCY) z{?8!xyW&?-sab;G-3MD)T1G)Nl3me~$lW*ms-ZV^PAXB1Q>eTvP%79yjD>7WS>LX-GAaQ_rLnV7_l(@-+u=ESw;UDjwb$Rc(BeonepYR+8?D8=tO`WP9PS@k3SP*N$B^|K|UF|DS=S zh>z!PTHdmyv)p3a-f!M{{vt!fkLv#norZ@T)N0E9GYIJ%pU2L}sWRiEb69%UiOVnY zul0BeJ^%jqKf|soPc#H$;y-L*N?|a2>Cf{i->f3vXVL7um2WJ|7ZN4LDTZ+G`{%(u`jpJy_Nr;;qm@o`CzZjp8C1A^6vfZf8%d| zwg1?4Pj&MD%Rl!nW;8s(IpeqL2@lD5u{pELWw*J$-2EtN7Rzj>Ol!}F3|ulTH$GIk zJI=oRwTJKYLj6bo8IIQ9`_J&qeEG6J@+)7tJ(QgwFY>8gUncoKL(hq>%0(f0O{bh< z8@}64eqs7A=E#4BMVH$@^sTo)*mLo{{?p_C8JvG*Oe#7Q$P)4RU-6b*6IhcvT0j5s zUo8J;Th*oPjQA)USzu8Xil>Hv-*2W4nBT%+QQ?pO4q0Puad8y?C+GX zd#SvFC1vjCUGdS4KJ81JKjz#xdur+5!v75S_us9pk&tYRaVq%v>F58_?EjqkIiu?27u%3e z991*^>1^u%y*~K&{NEcN{bxAc(wS$Nw|TG_)6%oKtn=@|XKR^Sg{7>=HR};h3p3X~4%2NI_oQ*&EpW#J$>$=MqF1bIq z+;E=djFHPR=PhkFt=y6o1Z*4Se{a_QRr1J)S&|{CQs}emkNRU)a`X8dXD^*nCakF8 z7JvIR|M&Qx)BoQ8&%pfUcJ%2c$43ktX215@KN7aEPn)=>{!qN0+Phn9trgY@@4kLN z!N+QGDna^51^YZp7x&IUP5)T-t!IP;m-0;7WnI15nCnyA-hHRc0vy?1Sxw}r{fT$dc?-hb5pd)t&}Dj#o7nJ__+J%8HOw|}SE&5fV^X!q~<@AmsbQzrTU zzw&d9h5D>$1)k2|hM(=ud;e#cc06?cS*zpnAOF<hV-=~w>6f1>jj9%9o`aI5E8 zlKkwX{-5Hv!j21m_$~g=pgV6l=O_MvisPr={_ubJbCU#f2an6UX_3dzZ~xDrS#|#x z@2`2gmz}-hoToFJ|I45F-(MfUsIuF=?1XJhQ^k3^%*y)DDFU_)8UYnmAFm47GD^Di zZf@DL=|97T`KN1HB6htyP!nU%In8eM#eTxu)Enex@oV&;Da$&Nd3H9IEotG6}XliR+~HsMyf#<8AM#t+{A8A|Kl zU0-gO@!+`5=Di!G`|cY*d-BJBaqqJ`DP@1>{%6Skd(HlP#OC^E`~M^}K0o{+|M17k zqNjHi%4WRlvAOu4;Z*(o{|p!U7fxUQ!YZfekcyIaVxPr-2H{VU#m9A)Y8=l{dn|qT zKf^+!dcy}Nr<@9DjIGhuobagrjQs2W43GLb`Iqu+I4kdM){xCJ@yEjd3_brDPWhYs zs+uUMMYF!Suxm)fq0wo~Z^JpOp7b^Z%2+^0)ocKkJ|VXUP9q z|6{pl$tClC!@Dx`B2#Q@f6KM?*Z$}eFibivETqaP$?M=r6$D9tz{Ab`6(qxml&NE}i?>){b zztS_WD5(d_IbJkkv$a$Zsw}@y>B{x(U50dreAeVGE}_9^BwriVEfsuQCC}E-x1gwc z&!&lui&uO2Jl=3!)A-X{F5hmI+YujS+Hc-n%95Nnj zBQ&&?b#cbttLwW@PG5E+CABX-epAi<-^>3qG}_hW?bd&IfM;KV=a2p0?}s$LTYdi0 zSHo8ydnP>I@t;BXLZfiQNny?`j$8Ft{`g1!2oJw3yRq}6{AQcF`oGNo-u|9$Jb^QJ zarz&l+y5D6*Kce5*&)o*#9=4$H~e9JL*hLC@RglYoH5nhd?&rspX&c<{%~*RG~bC=CU1BDQh(%^@H}-rO^MVFtK)y4*uN{zshhHD+qK#87Ny3= zC!~mR*zBACNH+a%LgI`DRY94e&ox1xpZr~Z`O96uLwxsUf4DPK@zoPG!{-^_>-YX= zIHqINH{ryjRN*-Pjg#!(+xq|G`1DWu$FjJtFq<2lpI!Dn554^Gbz#+wB|QFr&i`3< zi;?UqU3J=%9r)e#N!Vw*NKf$mYFyAUEAkp{qld;{jQC7oNr=3mt&^jw#WSs{xcl? z&+u@r9si%Zmv_ElZ@g6U^Vfy?)T4bWvUR#2`~SXQf4%C*{xACL|1(UvTkz=krI~ql z%bfpx{?E|3i9hg1OrK3tfzT6|H(!o%E208YB*^FC^dEyFBJUy)*kY4&JVXlYm zonw6tO^#2EW=^+S!Sb6asa(pHCqc#f_uW+Ge#gZ z|1SS?`tSWe_Ww!#bYZdWGEvo|8>v?#W z|4aVzpW%`HXYud*@63u#XV`L5XTpr`WY!?JSy$(0moK|uvgJUoSj#j*wZ*$DH8Vx4vv;Y?ddS9H-Y-}* z&)4tjlt268>Mo!2oEYE|_t)&+v~^jR=KsGAj%k)l0ivM}$L%M7~{|w!=O9VI;uh5WJv;Xw;1g`+!{=?h#?|=XA?ZjIu zZ;sA3^Yyb`{HOSH{j>ev{~5}D<$cwD?q6j1q|LEl!h}bU%B@T!o;RNC3zV7gN3U+W z;j5yAgYl<2Pt={Cq$K}+-uln=vqAlw{rblfUmKMCOx5gkHrqJoQLXQPhM!w6X<1tJ z)Yd;N=*yYUv-+Vu%hEshZ~p4B|33d0`+o*4+gSTYk_#EHJb(G!Y5kSkFaI+<`p+=G zTmIjhs(OJ}1^?9hEdF}jFn=c0Qf{~7T;Zc0hgSEL`kk`-;=j~CRqZlmKURA4V`=eM z<--3AJbmx~a{Ro+WW^W1@IS-pW;?x2h6W9ij-UOGAN;%D`)B-}f9ZeU|Gocd|E?eN zTG(XoEx7-mp*-k6!`-#hJS@-jT27e|!gyDJ;Zjbv--Ls^*vd2nrGCfd{%1H-Xm?ED zf`2~uq_migk`l9Jb{+b}yL|G8+m17)C$C6bvn$l;_bnv{sZR$yFYJDFq$r}}KSOZK zirF%D+aK2Y`(K{vzVi4hx6tK3X7EYgvEh)5mHqfwQtK@9oBJQ_-p5`k5kC6j%a0=| z8Talt|NAcf_w{405C0h^J$&HA?kPKc2Xl4y+xo}*-|e;k%lV(7?95`f-*TmHk+N5g z6g4mBy|VP(%1oaljOFWkWG|ZEn0Mk@)Q13#fbBM$gsp0QZ!m|sxb*hcc1Yx2jawxi zx@x87{|mn!&r){Ux5cKiMrW_zHp{pE=6@4)cXM95-Kg?QZnHd zSGCelI;Cdm!;^vYX2rk%&oEVB@|%Z-2CA}-nLqa*`p+OZMPH`%*!$AAw|-B0wXtI+ zx01amo5+i_AOYzm8GKLYL?+KtDlp?Re%MzbQ}kd#<=*he79Y;1*c=IaSv%kO@+H68 zFhiRKxmL%&|NZO#C;It6@k?_i&0oi|*Qn6Fe3o7C-}BFsL552r!74FlwFY zWs2e#|M+h4#e@2KkKAs&`*+Xw{(JjR`@{b;T=?;y;obh3zuk{{t2~ux%G>()Kf@R4 zmv!b>>n=|D7tk?coX@9@oT7NpvgeiWHgQZ@7`)(`LzRzL|ynWlg%M#{uPO24|E0y~mI#a?n*YL6MR6mE9{j2{oNZhe14o{AL{>SL= ze};E=nx_dVC7k+M&F|}Qj^)Vw`Q*`9bUFHw-P3kURGWKY2m+J4R`_J%4uqj!wbk)42 zN1n}7NZ#>MpYg-#{|t>O0kyVC4kagYDk}=-w4cAxt$6?2n!N8?W~b+7fB(-=vLdPe z|HViB(Yp?Qa9J-ZeD_hC<(Wc<`lYw^DpRh-?peiA;=F2Q;Nzo0XX~sAK04fpd?CT_ zE$6%V=IJ*HuakL=S=&LajS3TZ+`OZkCbf6U%ypu^$&j-9{MeAcl*Qrs!sb-%8N6GPbW;-_ECPL_zCsx={dq7ySr}fWV~~Kd5EWo>jv#zCnhy6 zlz4pf#P6DkfB!Rl4rX%;;pgeK^z1KaI1-&urlVY*!X+hbJIyY6RdUeo%We+q0(6di zl6Y|2CBnnHRjARrT$=CWG1iai+h;%e&u}I`{J~$5s&k7k&FRq*=H!3e{cXb^W0^&X zSKQRx|9-RhWvTj~q4&%FAJ^i)@7Vu-g`Kns}OAKv|QcmDVL zrw{l4l>c%5@6XQLB~>;F_l#%%VXxWd{qH}+e+Jk3$&-K2Tfh82!~R%@gK~N~LHCPP ze%wF$pJC=4x66g%=??{~ik?_5OPwB6cX@iCMB>yV@7N#g|Hn4L=;r-Ri?95$|K!#9 z|I+8jvn7siY4VL*X4wAzKf`W0&Qv40qbt1|^P)YZwn#Z#%+K4l<;Wm>c9;KA7XW?)A&v1Ii&KmvT_eM7xaR^6&pM^wi~5NtJOrEh##n`7m6qZI1w_ zS)-EV)-7CjYc_d_HYlzuO)+DXj}8#ZwD@>hamB0n>JRr1F1-F=nxpo<|y|wuk?SjoF}QSydDHpJ6A*>0gg` z-i+X%G)4V~U1jn?`JhVW-IrQycANYEuC(9Vefj8rhRt=$f1m$-{OD=pDKleoUT(AV z_|Nbte%Bx8h3&B&kEc!g&roi^wXc5v_xWdk^+Zy0!Oe`}k-in@=9M|F3$9BF*7C5IlsTUGJ8Z z#M*3{cZdJcocZUh_D!qcm~u4#Gsl01*1ys#U;JmtIVn8hKZCyH-Oc|#tN#o6&v2^Z zKf@2>$Nw3g9=}+3*+!t%?XSoEFYed=Gd#|l?oeYTpa0SRz^4-Bl9~%2|A`;Xc5rmO z8rl#rHGwI_>O9NG2`U^Llm0Wb|L$#YVNj2gU;9UU;q>6kk2fhRN}gVR!tP4>ui7x4 z{|rCY?El5Qvc~hD^yKA7c|J=C%fI~Wt^R5M7vb;n&0qfYySJ&&`fC3<@6Y|;{~0dj zH9YzwzR=bzW}5b8xe5On#Qx4r^Z)zl_w9<0d=(3~oVl7e?fuUg8|vRrPuFb>4Py)q zVg0cG)1yBor4_ar{Lhlb|5p5GxS#x=;Y|EJ(14}=`}ooTd-dbIrP(V4S#m$r&Og4N zS5_|i7_ZOF<3E)DGc3FRv->|osg13=f4@qq%w+-g{MnCh|7V!7aU0`w=Szo8JAK?- zD)s*})Ge1&&^g~Rao5t#kE#r=yUQ%_5=o4DcYk{QzsdE*zw7@5emZleeas z%cM_Znd#x4_IIaQ{hNK~pVpiIXVBVn*N-z{V#}BHn?G802*vO$lsDX;SY2gt^V<8P zpOq(_+hZU6gWrqeYk&T)_&>e^->m%RUufGe`1Dn1QDA5YYbdC*5Er+a;f%8W);?#Q z`pf^G|7S3^^=h2*@wmokZqfe?o<^xl8?pnKD5}W+fy;N*G^@-!U|9@$>Im=ltgVf7ouG-Sp-E8M?j}*FWo- zv8jGf?FttsCFKT|xQdcPl8P3E5;AK4G~IvJ_5aKIvj2;o``VMPp%IQS|3CcWz4-5T zmW}=0kB{QFn^^SVVvQ#z-$@5xR{{?9PwuliT>$NN7$`C}9?^VP?GmHj*8lhyw| z|EF&bnhZH+BCnMfHKkf8$EcxX_fq$*f&TxmK6w3~L4JNvwtzvW^)mCC;F>ox&qYt% zRJ~`~l^Q9&caz!t*6S2Je&+tq|L^mE+4XKOt1`aqSllM#Qh(|{!>RuB^-ot`%5C{I z`J~+x`$hI=&VpwUPk+^fre|=pg@!WN?A*m;>;64?_u?<;V8oSN`Ao^Zzp#J*k`6ku0#u((1(Dm7wOEZ&AXh zU;m~!>+vm?SS&N)xYj?O{U>V6Wj;tU^#53>|L3ayt^MB*Z)RAvnqk!{rd2DrRxQw4 z)v#x8xsTNz;X`#7F8>18sxQ)42H2~e&}_f>Cwb}L>8nrn6jm?(D``Ks_w(O(4H`dI zl|GH&|9|bLdyPcuw8G=OsY=T7uO>HK{Z;>GYn6St&E|QA{rX>@{%3d;xBg#qrvJJZ zzcRj5BsR&ogn#w^`_BK*>8US66CnvbG?cmhquf4OHswiCCtmi+f1mXCKf{h65&s$F zUwxD~zv7s!<_qF(#je}=s;|1*4vzxL&Cz4yhF{XgezX>$C!p8er}hR%n7T!h>HY~A6J z`(ytX`QOW*efWC6^J~PX(i_j%H1c{j{%2^<|7@RjeDi+>m%s71Y-?uj_1XV3{GY6R zOPy-}hkb34Ddv8WK8f5ncNrYL{GZ_kkNl7RcWDRzGt}JBky?Nx1EsJF~waKWQR=B@er0~oB)30oEsy{yZviWQLo&OA{Y~BCfQ)S}c5Pqir z@m!vz8`64z%`c(QirbH>)h} zAD#Sj`QQ4R{~0dGP5+ltr~jdE`nPqf<%~bf%$xe3fzAH;)Bg--=gs~V9U&T;0JEK6 z{$u?i``5CYkL%7%((rzB&i>AqO~2~T{rmp={`dHE|J=gQz5LJc>F#-(i>I$W5$^Fx z-CpwfwBGr*iLZ=G>!yFQ|IFtf{PX_px~0)N^48btWUqet8~D0PYT|T@C1rn-fBt9q zF7YYx^vk4I_Kyml{9Sr{(I0-Bwwk-4RX-D_%dk!Q@^t={ubZEKdH84l_qzT!KaHwl z%~$vSY7L6ClP`ZHQRVq1;GpgHXES=XyUQ&7^KUl)?|qxEp8oe;EN=0C2DY!C>XU!Y zu-tWSTHzn_<)U8Gg z{3X-dr7GEy=&v3d==w;O!Nrjw40yj15#l3B2+Ry&? zUj2Lgralda$r25z9|i36|0MT^Unu#T!MvhjZrttP)>9t;dolT;QSyA(%O#Zutb0Cv z6}4|at=Ii6|L^m&-HQ*-2i0-*ZSMTu7oNSUnlbaZ&f?3D`)3KC-29(`>-2wy)<^&H z-`oVP7O0B<<^1nI!*Bg-U*lU#?xraB>(uNxnsh6b-~aFZ_pfaJx<9BeE}8h^kxz2} z*}i!B&-OF_zW;qc{QAk)N&mwC1$_xwsDAS6=Ej$c5-(L*oN4T<^omrSTvC+!r8aJ{ znA~DJo*n-gX8t|%SG&I3JKy`_W3?xSGVT8v#OGi5JNZ9DX%+v*>HisYE1w)u)LRrZ zrR4aYdNqmFza@UbxF{Vc!cOq$|$$KqG*#ZOPBEd6tCvHaTppa0f-UoMT@oObd*!%~aC^56Xz{%4qO z?>c{#M4yCYN6+kUHF5Pf|LXs}{GXxx-^?*I7Pf8YGo|2FAhxBmC~FM9ji>x^fshg9ipVv?*o zcmBoS<(E$WIk))l@z1sKk)Ny{+O?~@UQOxz^01pl^*=+;(N|SJ?7t;nIQ^$TT+Kch zG~() z43CxjRVzR1*+2d7{agEgO#jcoT>Jd#{!dq47FGqFOX731oj9j`mO!74{muUjyZ$qD zoqYW(|H{T!Zd$7jLFzS*?Vs&7voD-h(SOsZ|IhR<*B{w`dU~j^G;YD8!k+zC<)75Q zpTf^}{O9Vqud^EeUwHAK;dJ<7>C~&vnqtp5zB zSF^nlIDOCP_P;sv|0Mphjo1Hp>uo%cZT`IP)ysf={(t8G(^z-r HcL_k}4G(Q}UBi6#_Ey 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 + + + + + + +Copyright © 2001 Hubert Holin + + + + + diff --git a/users/people/hubert_holin.jpg b/users/people/hubert_holin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7533b9f675b3029b5b23ea9fb24be46b4cb6e8f2 GIT binary patch literal 12875 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 Bh6(@x literal 0 HcmV?d00001 diff --git a/users/people/jaakko_jarvi.html b/users/people/jaakko_jarvi.html new file mode 100644 index 0000000..a55c185 --- /dev/null +++ b/users/people/jaakko_jarvi.html @@ -0,0 +1,38 @@ +--- +title: Jaakko Järvi +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Jaakko Järvi + + + +Jaakko Järvi +============ + +![-](jaakko_jarvi.jpg) + Jaakko Järvi is currently a researcher (Post doc) in the + [Open Systems + Lab](http://www.osl.iu.edu/) at Indiana University. + + +He's the author of the [Tuple Library](/doc/libs/release/libs/tuple/index.html) and + co-author of the [Lambda + Library.](/doc/libs/release/libs/lambda/index.html) + + +He can be reached at [jajarvi@cs.indiana.edu](mailto:jajarvi@cs.indiana.edu). + + + + + + +Copyright © 2003 Jaakko Järvi + + + + + diff --git a/users/people/jaakko_jarvi.jpg b/users/people/jaakko_jarvi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6af42f3780eabb581db24e3505bf980b4af024fc GIT binary patch literal 25365 zcmex=nVHxa8Q3{Exwsh_n3$MBl8hi3 zkY5;>m|0laz>)$COpMITOe{=n?941oY)r+BOw58T46KSmhK_-3!ih?SjUq-97qW|P zbW%PTbn&6FSkecTqNb0k&L+W=7Hvu{K4j{mK6&wGGx3m=lEarCai}$Oa!E+GOmTHv zvL)!`f zRyGz6X69T*1|~sf7Lbcs1BDZn*a{mb8ZF%TLFC}YhssW(K}kg)ja5vXo5Usst1e33 zbcnt9lIbItX7P~893ZEvnYl`-r<8=6e_Fixu!iR4$DdoKEZKtUWVbMcqj9}%$mnqKVB@_qH{RC7XPc<%2D?~0sm?Cp1JzIZvY{~-IT180id9<4hXbzt40b?eO5 zWS{wb?Of$<{X<(#mbtVT)@w#_e%ym;_O5=aubI4?q}$4t^s-YsmSl)0AJ4j;_$JdQe<#aQtGzwn&x-C*o@{9P#{S$4 zOO?-#C!coz4zSI5vAk-f$oh`=6BmTsn)A!D;+4o1ey)FeroV`CFzYW@QFZYR@K|4C zE$6+%Y5BCTPWHP3_rDF1={%v?-|8k;1(Mf@sVwc&ZW1p5lz{g<76)D>PVmV9-w+cn_cvV{`1WmUQDy)K$g-tRS? z{8z4U_uVDvyYZvVBn5%%^D6%A-5M14#aw=?*SvX$c|`)e;y<^4I)Bwr^{{oLqeJHV zNmKYM0^AE@&7Yf32w-J=BKKr|{^$D&IenSmSw!Z~`{&c^eLO9C*?)%i*N5e5Zk$+{ z@}FT&`z687cK@ZCKf1n%yq#nu>awKCQt|nJhB=dVX-AYiF#qArcT2% zobUDZ{e9&uC-zVORLqM!&N`SeFOT1?#CCh_yK_>{?mFr!b(O9>Ez~wY>heRDJq;C) zJ+`d+e7-71bop_=tIS^?Sm!M|6X^Ed-PTY7gW2yQ6*>*84jm0Zn zINwO{C`dh7(z2=k+Q9?{>8j*;>3@EFy0a_h+qNywPK4z8-hNh) zn<;)#{er#ypY4k?x>IFRSmlM*TFtMoF|8Lf_457CV9C1ZM8xs5H%}(V-FNkWb!5Jo z^PNTa=N~bs&b95Cy5Rl((~Qb{Gj2&e|NQ#Qb-{^pbI$m8P5zgx_)<19(4#c}oc$TL z^;dIQ(l>4TXVK~Qb3t=h!?r&+{+ujb@=9>^MOO}att6h1kL6qL�eauD0=vqb<|> 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 literal 0 HcmV?d00001 diff --git a/users/people/jaakko_jarvi_small.jpg b/users/people/jaakko_jarvi_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fb5753bd610b16cad901a82725b0b712f43b146 GIT binary patch literal 2449 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 J@P?TGHvzC!G&}$R literal 0 HcmV?d00001 diff --git a/users/people/jan_gaspar_small.jpg b/users/people/jan_gaspar_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21706be22e10a3457ae9f360b94bfcc96450bd92 GIT binary patch literal 17752 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%0A3ySjd@bHUD2n&k}3rh&{fB}>O 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%0Aax5!$Nb0Qx^g+xt6 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 literal 0 HcmV?d00001 diff --git a/users/people/jeremy_siek_small.jpg b/users/people/jeremy_siek_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e4bfb9aa3518b156958032d3e7b82d15685520e GIT binary patch literal 6920 zcmex=d%gjktC@;z^DM`&!NUBtDOvz75RS3w) zFUc>?$S+u-V5(>E|1IY~xQK$Wo&ke}lcz89TLusi0GY(V$N(~v0Yro3Sa?BF3@i)` z3>6?g^Jg%h157e7fc3L*fq9G&p1J^-$Hl-1rWqKR!1}&|c^(Y zNsy6Qkn#Ur1{Mak|3?_@85kH@8NmP)Gz<(3%nXc7EUawo9GqO-jOdb#3{1>0NdX2% z7Di?!7A979HV#&19%DuZCP8KvMIl30$G}8krNTxdHj#-7H##Y+hz1=@GBzn{y6DWV zIw|97b zFtJccnANCpq6o+Z2ZJttFjh%=SkyGhIaoBg*yN)s8^{6dYNm%Sxl9gOES};TYF3i^ z2<`;jE>K4};r}fL9%itef(-TypO#GWRMk|OiVQ-cFR3k@@}zw z_c46Eaox?g8?snl)K6MJLF#($m7TlfRb#(cu zWzJ?t>^3sY`_J(6(oz8rE5V;3LB0B{o+^{F=KsI+Y2S$-YmN9j|A^Lx^@{#VaG2}R z_hhAExA{%h{g*z-PAv_&a_PHG_Hveq=RZa5Re$yU%AFjw>$Qikp175IB!ly5;IEbL zzAqD(J!g+ExRbo)VC-AJwQu;+*<1M{XU-F-)mfy(bYfHev#qZVCrdFfE+}A|&_4N+ zVbSbu-%KC)csvSy;c-Ud%D2ECg{;7L-n*agE&mhUX7Z$Dw|5!4uygyC{|uo8d26p& z>1L*`W!>%3WWQGXR`JGNSKs|*UAuOdb5gkM*XysY72o{r+H<$or<=L--o-B+{~20> zoHg0{ZfC7@5KP*!N8Wbhz8Q%^aVp2BYgle&H%Zyz_L!f!^Y7E56T08F#V@fwxc378 zmR-}cBQEeuhNUoy9O9lcN&n{kZ}T@Fyt_MJ>OVtt{$G_TCgJ=4U;gweT5q0nwdlp# z$d~6|%}v{rb!@B2&U03sa~GF?4U^N5;ZbZ~qOx@9dTLT*Az=x%^qxeDCawk6E%zA`j)Yy`TBF;)VRiT{CKVnS~9cqu3hP z&#!g?DK^uoIl8Ri#wuk7AY%=RPy>-3(e`+>6?Zd_hD z@5sNb*@732{fqx)D|Vvv-Tt+|?1Mi)epx=xZj!fk>E@T-i<0vvc|}LY>Hoj-IVyJB zChs)spZa0Hy6$hPjV=CBe1lW|RImMu^{RY!^R9h*pTqb1T9w$dgsXk(2~3WkoM&tn zu!%J2^`E@h-*NkDu61WOTssz}pB#N>%W2o<7kl@+-+Cgyrs9W0&Tl(wX5MMLu7}-h zc>X%^*4FwAt5ru!de18C&mUYk!K&)Xi=z_OE^8XRv{{ zw@T-GshMP8`UbPZ@1*>@l(+40yrQvh!{cR>+M=Gx3-nH~@Yvecxp8^3b{w;}-y+3| z=hxOv5BGib{nACz6yGb2N942rGrU}%RKcJ5L*ME@gQUg5wMS0=Qro_3Q~jh5w)>xN zl?htYeB5P5GxNjM&u`1WDqMf*_OnSQ{6Xfwx7X_3)70J)5&!?{XPfxaE8AyQr@xQe zdin0lN7uK9TX1lnG>nm+9K1*FzOHK3cc=7QdYQ^@CQdTPF83GEbpyQ_Rj1|unFWrAKcr`b-u-%(u+jDm^*CO+D6|6{kq=EXPMb&7rF ztFzvYV)1+o=d zfRW+nC~#AX7uLq&=rBBK}>m?S{r=@7OKh@Avs zJAl|Jxp^rJ3``(57o_B-fY?VE7#KRrN>fu97?^z+7#P~hGE>VL7?`gxFfgd(l;&nK zFffB!lp?vQiNy>IETC4KN=a&R1_J|&0RsaAPf zwsU?#Wl?5&Mu~z(vZjKerKN>}M{0RaYDtN1Kw@%sVo{2MbAE0?VqPT!1H{iDT?|5? zuvPGMbv84!G&9pR(lZ1LLkPT*5G4f3h{z~t{Co}s#~Gv88H5-@J3=gf5d(w8R|W>= z2?(*InG6iuTNxN6ZXv`}7BDdIw=ghlJCEcaF;IHRC@Cqh($_C9FW1XVP1XYiDBL1~ z3g9YnGmz}l1K9@;I|Y~2w8YY!5(QAIPR`HCFD+6iE=WvHRnSFG#AItkau$+1bb?aT zQj1dal2aAJGE>Vl^U@WZ^YcR zMHraho?&1S=4N1ynFlHh;PK|e8O8w0dExTUA?Y4u0yt%W83=-@pMimasW>wooPL~x zLKKoqi^?GKplr#&%D~0I&mh7e$sos|%%H)b%V5M{&S1^pz~IW@#o*5n!Vt+2$B@jB z!H~;P#8A#q!_dgk#?Z|$fnh4cEQa|EOBhx%tYg^3u$^HK!$F2)45t|`FkEH0&G3NX zDZ^`q4-DTJels#MvNQ5B3NuPF$}_4mYBL%!S}@u%x-$AO1~Eo5CNQQm<}sEs)-X0R zb~8?5oW;11aV6tM#+{4@8Ba1^WW34vknttsC&ph)%uGB?B22POYE1e}7EF#z-b^7( zu}tYqg-lgUElhn(Gnf`Jtzp{6bdc#Z(^aMiOs|=~GBYr9Gm9}RGV3y1Fgr8*Gee# zWgE*8mdh*;Sw67*W94O)Vbx}}V)bN=U`=N&XKiDh#=4AkE9+6#tE^91zp=5giLt4( znX`GYMY3hFRkQW5&1GB9c7W|7+hew`?Ck84?Aq+M?EdVD>?Q1N>@(Tdu%mq`#3IfJm>h$DZr`9X~pT!nZjAg+0VIza~J1%&ZnHe zxdge?xoo*YxU#q!xn^*!<2uT9hwC#pH@6bEC3hfqCU*n(4DJowC%7MS|Kt(k(c*FD ziQy^b>El_>bAab2&u3mClz1xZ)QY{`j|+a>Qxu}Eo21xl4m&67GR^+sAm+FCkUx=VVK^eq`C87-M0 znQEEEGG}DI%F4;Q%NEGalszo_Movu5K`u*firhZAm-52$cJi6>Q{?x{zfurYa8$@q zn4xe);e(=#qK9Is;zGr9ioccAl|q%8l-4WVRpwH*P)<{xqI^jCgNnS0uS$)|YL#26 zoT?V88LHD&kE?!HQ&$UDYggN@_Cj4k-BZ0veYN@>4PFg_z{eK3g1~~>x3~n0=8G0Eu8SXOtWTa)3Y&6^GiZQRTn{mDI4&#p|+9s(c z^Gt4-3Y+?xwwoR@{cC1!R%Eu$?4`Mid4l;I^XnEO76BGL7AGuOEuAduE%#Xdv@)|Q zvD#$y-dfi>+j^Dt3mbKtRGTF>k8PD~6KxmTKCn};OR!sD_rPA!KGA-W{UZluhZKip z4$mDm9kU$QIKFc-a4K@z>h#^&%DLA0fD5yWyGxhLIaeXqP}ftkP=St5HUglo4UPrunyo0@Gc|Y>e@+tD!<;&#jdX5@}2_NcI^Wl>+FU8AQ)KaDYsX^XiQs~%es zdooTcE+=kpJb!#*{N@DKgz$t_34ap(6Bi|ZP4Y~dlk_3kIeB{W>lBBSDJd^gZBr+u zK2Nhvo0Rq<-8Ox4`pXRajAyMQV$tEoNI>w)okSuqDTrS}a|;Oln#8vcJpomOoe#wBpE0 z^OY-C$*k&M&9u67^~*IeYc8yHS-WGM?z)BR#nyLkVAxQ);nl{3jn_7LZ#uNuV)ME! zs$1r472evljd5G$wh!Agwm;Yrx#Qwaubqc>S?}7qTW|OBJ&Jo~?-kwKzmIEQ%fA2n ztM-3AP;lVQ!SsWV55*t4eK_Lql_P;i&K>nWdg7SdvBSq5kMBQWdt%Q?tCKrVS)AH_ z+U)eUGp1*@o;5wY^_%jVb?{Qi~BCwUpjc%xv^^}BlUTIjVK z*JG|fxRG+>#m$_XA8(c2`hC0M4(pw+y8?Ho-IKYu=)UIt^$*M*?0x9+@XVv&N4Fm* zKYsnB_{pEAEzfwLO?xi?eB}$H7kgg1y}a-$`qk6d1+RaiI1BdHENUFNeMce7*NA_uKF9T|Xp$toUj1^Z2juU(bJ+|6%_#8K^{vTnG7i45)U}9nhjmm>9U|?Wm5)?9IRt$7h zGD01+`wZ&TKox;0Q4KH!BbXLSD$B0@rIozR@a6O}WBshhO;5I}-HcJ(Qg=;8>hH`u z<-A)@lVG}{pMfv@>?iH^Tc1u|)Ot4AKk8d|>9UzGciKuztLpFciQDgP zezk7$rXA-h`fJ{Axl^e15r|w>%g&&);ud_asjOLr! zth4)}#E)_vk3{ZlTdtN;qmomlSR|t zH#1Goxm3q@mE*xwn^aA6$xM3=nIG5Q8HCF2om{Z->Ezk2f=^E_Qmy%EWxseuSn0fP zJ6hs;_n*_9_j=#U9i@+x-L$l;o=*1Ie6rVjn$!H4`_@mUw`zP_YgAsgvi;gMqo8P4Rg0saPMkX)Gx^JDy=8a0 zbbI1+mh3Z%>v|eocq#Alx5!$9eJjIFW@R*OG+Mc9dFa~fQeQPrzAySSIb+Up`8lPk zFYf*edHv01_v#1x=3miWxK8-i-(^{A`sSFSM~qj1OT)BEdBrh literal 0 HcmV?d00001 diff --git a/users/people/joaquin_lopez.html b/users/people/joaquin_lopez.html new file mode 100644 index 0000000..25cf5bd --- /dev/null +++ b/users/people/joaquin_lopez.html @@ -0,0 +1,44 @@ +--- +title: Joaquín M López Muñoz +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Joaquín M López Muñoz + + + +Joaquín M López Muñoz +===================== + +![-](joaquin_lopez.jpg) + Joaquín is a telecom engineer from the [Polytechnic University of + Madrid](http://www.upm.es). He currently works as an independent consultant in + a number of technological companies and startups. + Though actual programming is not one + of his job responsibilities, he still does some C++ for fun + when nobody's around. + + +Joaquín's professional career began with his first + exposure to a Dragon 32 (a Tandy TRS-80 clone) at the age of + 13, though at the time he probably was unaware of the future + impact of this event. He enjoys Mathematics, Logic and Latin; + his lower case interests include paper folding, compulsive + reading, writing, traveling and visiting all sorts of pubs + and restaurants. + You can contact him at [joaquin.lopezmunoz@gmail.com](mailto:joaquin.lopezmunoz@gmail.com). + + + + + + +Copyright © 2004-2020 Joaquín M López + Muñoz + + + + + diff --git a/users/people/joaquin_lopez.jpg b/users/people/joaquin_lopez.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd36cac54d204b24c9bb2319236f9d5949260756 GIT binary patch literal 30625 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 literal 0 HcmV?d00001 diff --git a/users/people/joel_de_guzman.html b/users/people/joel_de_guzman.html new file mode 100644 index 0000000..9b23429 --- /dev/null +++ b/users/people/joel_de_guzman.html @@ -0,0 +1,30 @@ +--- +title: Joel de Guzman +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Joel de Guzman + + + +Joel de Guzman +============== + +![-](joel_de_guzman.jpg)Joel got into electronics and programming in the 80s because almost everything in music, his first love, is becoming electronic and digital. Back then, he used to build his own guitars, effect boxes and synths. He enjoys playing distortion-laden rock guitar, composes and produces his own music in his home studio. + + +Joel de Guzman is the main author of the [Boost.Spirit Parser](https://www.boost.org/libs/spirit) library, the [Boost.Fusion](https://www.boost.org/libs/fusion) library and the [Boost.Phoenix](http://boost-spirit.com/home/spirit2/libs/spirit/phoenix/doc/html/index.html) library. He has been a professional software architect and engineer since 1987. Joel specializes in high quality, cross platform libraries, particularly—but not limited to—those written in C and C++. Joel is an expert practitioner of modern C++ techniques, template metaprogramming and functional programming, with a focus on generic programming and library-centric design. He’s very happy and enthusiastic with his current job as a consultant and engineer at [BoostPro Computing](http://www.boostpro.com). +  +Recently, Joel got into building guitars again. You can see him in action at [http://www.cycfi.com.](http://www.cycfi.com) + + + + +Copyright © 2003 Joel de Guzman + + + + + diff --git a/users/people/joel_de_guzman.jpg b/users/people/joel_de_guzman.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc02a6affceb47f6885b70626b99d49a404a094c GIT binary patch literal 36002 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 CPvjo} literal 0 HcmV?d00001 diff --git a/users/people/joel_de_guzman_small.jpg b/users/people/joel_de_guzman_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d008d6d0a3d8252f48e3f1563c90207437d089c1 GIT binary patch literal 10611 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 literal 0 HcmV?d00001 diff --git a/users/people/john_maddock_small.jpg b/users/people/john_maddock_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a66ba7b270102faf21754c3916e8cd66a3663ac GIT binary patch literal 1325 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 I`u}eN06D?Y_y7O^ literal 0 HcmV?d00001 diff --git a/users/people/jonathan_turkanis_small.jpg b/users/people/jonathan_turkanis_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19f7476cf1f46ba73424061b4c118075e2023722 GIT binary patch literal 9782 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, ) is an independent + consultant and trainer based in the UK. He has developed and + delivered training course material and consultancy on many + aspects of OO development, which he has practiced across a + number of domains for longer than he cares (or can) remember. + His professional interests include patterns, OO and + component-based design, architecture, distributed object + systems, and languages, including C++, C#, Java, and Ruby. He + is also a member of the BSI C++ standards committee. + + +Now that writing code is no longer the core responsibility + of his job, his non-professional interests seem to include the + hacking associated with the aforementioned professional + interests. However, never being one to keep something to + himself (like C++'s relationship with C, this is regarded as + both a strength and a weakness), he shares/inflicts (delete as + necessary) his professional and non-professional development + experiences with/on (ditto) others through writing articles and + presenting tutorials, workshops and papers at conferences. + + +He is married, and not just to his work. He and Carolyn have + one child, Stefan. The little spare time that remains to him is + taken up with music, reading, pub appreciation, etc. Although + with a newborn, there is more reading and less pub appreciation + (pubs are still appreciated, but more in memory than in + interaction). Finally, although he enjoys writing, Kevlin is + not really one for writing in the third person. + + + + + + +Copyright © 2002 Kevlin Henney + + + + + diff --git a/users/people/kevlin_henney.jpg b/users/people/kevlin_henney.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bdc12256fd2622417303f3f557bb5a6e169ce07 GIT binary patch literal 18107 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 literal 0 HcmV?d00001 diff --git a/users/people/liequan_lee.html b/users/people/liequan_lee.html new file mode 100644 index 0000000..e499570 --- /dev/null +++ b/users/people/liequan_lee.html @@ -0,0 +1,39 @@ +--- +title: Lie-Quan Lee +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Lie-Quan Lee + + + +Lie-Quan Lee +============ + +![-](liequan_lee.jpg) + Lie-Quan Lee, AKA Rich Lee, is a graduate stduent in Computer + Science at University of Notre Dame. He is the author of the + Generic Graph Component Library (GGCL). + + +He has a strong desire of learning to disassemble and + assemable any electrical appliances. He likes playing bridge + but never had a chance to play it after he entered the + wonderful world of computers. + + +He can be contacted at liequan@slac.stanford.edu. + + + + + + +Copyright © 2004 Lie-Quan Lee + + + + + diff --git a/users/people/liequan_lee.jpg b/users/people/liequan_lee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7e54f20b55fd9217ddd40899be18d809d9a41f7 GIT binary patch literal 24165 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

    34xcJl7RO>tsz0W60 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 literal 0 HcmV?d00001 diff --git a/users/people/liequan_lee_small.jpg b/users/people/liequan_lee_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d1bf90a13fd00a8980df07fedb88644e84ee925 GIT binary patch literal 1288 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 literal 0 HcmV?d00001 diff --git a/users/people/mark_rodgers.html b/users/people/mark_rodgers.html new file mode 100644 index 0000000..615894d --- /dev/null +++ b/users/people/mark_rodgers.html @@ -0,0 +1,44 @@ +--- +title: Mark Rodgers +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Mark Rodgers + + + +Mark Rodgers +============ + +![-](mark_rodgers.jpg) Mark + Rodgers lives in [Wellington](http://www.wellington.govt.nz/), the capital of New Zealand, + with his wife, Clare, and their son, Ronnie. + + +He studied Computer Science at [Victoria University of Wellington](http://www.vuw.ac.nz/home/default.aspx) from 1983 to + 1986, completing a B.Sc. (Hons). He now works as + consultant through his company, Cadenza New Zealand Ltd, and + also markets Cadenza Drawing Board™, a CAD system he + developed. + + +Mark has been programming in C++ since about 1990, and loves + every minute of it, but is continually amazed at how much more + he still has to learn. + + +You can contact Mark at [mark.rodgers@cadenza.co.nz](mailto:mark.rodgers@cadenza.co.nz). + + + + + + +Copyright © 2000 Mark Rodgers + + + + + diff --git a/users/people/mark_rodgers.jpg b/users/people/mark_rodgers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0542e323a45ef73492cc315b07fdf5a2302137be GIT binary patch literal 23035 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 literal 0 HcmV?d00001 diff --git a/users/people/mark_rodgers_small.jpg b/users/people/mark_rodgers_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87209123689f6cfda4d6b7ec7105da5b89243ce2 GIT binary patch literal 2351 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 literal 0 HcmV?d00001 diff --git a/users/people/nicolai_josuttis.jpg b/users/people/nicolai_josuttis.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cedc21cd2282c4f544467eb3c3bad87eaae3bce GIT binary patch literal 19499 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 Yyg3Uw{xg_&iPdS0cNx6ga7~l literal 0 HcmV?d00001 diff --git a/users/people/paul_mensonides.html b/users/people/paul_mensonides.html new file mode 100644 index 0000000..8ad67a1 --- /dev/null +++ b/users/people/paul_mensonides.html @@ -0,0 +1,33 @@ +--- +title: Paul Mensonides +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Paul Mensonides + + + +Paul Mensonides +=============== + +![-](paul_mensonides.jpg) + Paul Mensonides was born on March 31 in 1977. He lives in + Tacoma, Washington. + + +His interests include musical composition, playing the + guitar, skiing, and programming--particularly in C and C++. + + + + + + +Copyright © 2002 Paul Mensonides + + + + + diff --git a/users/people/paul_mensonides.jpg b/users/people/paul_mensonides.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f570082a3119b394719d73023ddd1686c36e7329 GIT binary patch literal 26093 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 literal 0 HcmV?d00001 diff --git a/users/people/paul_mensonides_small.jpg b/users/people/paul_mensonides_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8780c741b87e7ba45f12131a78eb2ae29f0df3db GIT binary patch literal 7742 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 z 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 literal 0 HcmV?d00001 diff --git a/users/people/pavol_droba.html b/users/people/pavol_droba.html new file mode 100644 index 0000000..4213344 --- /dev/null +++ b/users/people/pavol_droba.html @@ -0,0 +1,51 @@ +--- +title: Pavol Droba +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Pavol Droba + + + +Pavol Droba +=========== + +![-](pavol_droba.jpg) Pavol + Droba lives in Bratislava, the capital of Slovakia with his + beautiful wife Lenka. + + +Since childhood he has always been messing with computers in + one way or the other until he settled down with C++. Since then + he did a lot of various projects but he retained his affinity + to his favorite programming language. + + +He loves to design nice programs that works and to see how + the pieces of the puzzle called design come together. + + +Currently he is a developer in a small company where he + leads a group of 5 other guys. + + +When he is not at the computer Pavol enjoys his time with + his wife. In winter he likes skiing, in summer he does some + scuba diving. + + +You can leave him a message at [droba@topmail.sk](mailto:droba@topmail.sk). + + + + + + +*Copyright © 2004 Pavol Droba* + + + + + diff --git a/users/people/pavol_droba.jpg b/users/people/pavol_droba.jpg new file mode 100644 index 0000000000000000000000000000000000000000..964a3504b90cfb890aa3b9db88fed31ef33918b0 GIT binary patch literal 23801 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 IuK#}%0JRk&!TC60*0R$=- zm>C!tJQzGc9Htvg8vh^uf5h~Y$&J~aRfG8t0~4w&10w?iLka@}10w@7Ge{?+IzIy= zSQKOc7&~w+lcr!D~Ialu`~1lIQzEb76apO(hJ$dHqk#=r&^VT6h-oH+|FVg&YC6axcX z#1t%|ix2^u`2%c10RzK-tbq9iNFJ-ye@f&)cC$c20OVIj1_mYv2!@0JiwMYG22hwm z!jK2V=ROGb0|P@S0|P?=DC)oz1NTw}2?j>A6a!8P|Nk+lxn<_0DwG#xmXxICDI`@Y zIHu$$r7FPF(Fz4qJ%j)682G^A3@HsDJO1BhXkp;t;Nalo;Nj%t5#;9L78K>@;o%pR z5Ed2{7M2j?0Rt!nW@8YHyxiQpe7pjDd;%hTe0(Axf=>jZMG!*qKq(BpV1fS!7z8;O z3K&9}8I>5A1R0qH8UNp9U}0eUe}vJVfq{{g5ez^6DD=1B9REu-|{_exCY#(#i);^F!$&%AfbzCr91?v2D4aTzhJubnoqhD-VYp4rvY!>CcJ|RMha~ z*tVo|t4hd!hW{6~9b0U=N{8bt=Ze^cp|9Q+Z;%ak|9pPkcDaK~Z_nTT)9!57>!{W% zhU-oqE)|)(u6XwDh-oJ8s-@naEncXq@ORmRV^?2vHGbQ4qcD9--e1w`$alAY&RcYa zvH07b2Tw!Gl5go`yPcZz_I5UV`PSaMFMsugey-d1C^;%RTIzwdkaz#7{fnk^^d0-N zHPHOhyfrMp!_-}VJ-%4Ad#1yNN6#YOt~tI#aL>0dx&Jb6@4vYB-lBVqqK3C-i9FQs zY~nblje8H@WTNY9zUBDd)6Tw~qKg08dvL~m8K zEB@NN;`Z!muTFonR*}wY@VxzxZLVE++1A9``O4K2nj5Sx|1x`P^!QKX&)3;v6DNM{ zxw`sJ%&}j|(+!)p-;Q?t`>QteRiv%q%pEz|irX(eEK_}#)Act0b6M`MxY_$>Z=L_* zvd@o<@~hJ%eze|xGDBjgs0FvgtL@c|3e9hAHh*5dX}iAnul3h-U+oCvna=+7(ayCS ze|g{d_HNa0iSyYy#WQou>W{t;{kNqye7SD_tK9mV#kXVLX5W5!<6G0Sjfc*c@Bg_z zuzSX@Y5z7}uG?TbJ^98fqs)vmysW>qiu)H&dGA+0Yv=xN*H`tV@HeUV^vkPXQq&0Q z@DiRecTY!r*C8zez>Dt{w;Wm@Uc~W^|1#I z@MV^-udY83=Fip=>!KD&Ky+TPFiy?0A1{aICb z=-+*_`MK3OYFE8pbI+{p`m5W?4r=nRs=itF-Ti$v*y~|&-PZg5fxFdtd%tYDcX*C!J2?A+PyE`QnC>H{{Ol5Dc+>s_NF zB`vq+QTjouDurVccqK4f|cHBJ;u`2wJI+)Z+WZCRhjai;s51pS(D$b>Y7`6Ui8XA zy}}2I>|59BS2sso)GNHeU_JH3-^ADN_q1KN>w9r*$;+LG|Ja^fk^A-innSNzEgoJC z@X))SJFSMfuGf3Qey!VYO~r*cm6Pkb>nF=Uv|sZi;I_4%$(b^bG)-=-S6>w#Eqsno$+wrRI)|Nb>Mym#Y2LvPkAyQPs+ z@-~Z0J%|tXUCwuzXWK&Qx!vhMWV&?9_wAN`aohX*zwS#hcT3-wPEcd0RQAY@joYey9k8i=YV>g3m{|(=G%8$dE#aNcDXaziQCwx+gCG7PX6Wj{rb0Mw}06$*qi)1EY05a zMP=ldE7wxRep#$*R(fqaWsl#p?HB)5|J$;svN<_g?(K%s2NT!t{=QwYUF^x%i$>Fh zU&%7Bd;Ikd|JE?p@++>DC47>J()->2GccB4Ui|O&e+ITK(^=PWbg_7b;s&0eP`S5pL2cl zU)5+Ghb|r0U6V3BS?&K{dA7N3(~~$p+oRu1_Gc!S87|L%ULC#ra{i}j#ohCs+ntRS zvT6A%_Mag&)YR&Ak-TDq#nwLiYt#QTTnfu7UR->eb^kf@xfUh$R~IljxxcYv*zMF_ z?0qvvqS~X_=hzJ;nfp&QZ!mKhG1$MhzvaC0!Z*Xcr=L|m6ZDGgue)E|_UPi06WWwq5^8II6Znw4nKf|_H$@b^{j+KiwZ!UkG zmlhv?GT-I!@#;;lSM0nI<*na#Gx>h;w%`|6L#I?lO8=F={GVaTU#SO1QH7h<9oxWu zvp0Fw#xq7|&)CiWYwo^x_wDUfUu^6)8Ls+u@#~VUedV|OnEoNt?%dXEz z4Q*6CBV_Mx9d#?a?)_!^f7@TJYky@Qn(qH9|ImqzXOErdO|4$g_Qa&odF}0gbNlM- zSN>-ZfAyb1c~)s(@m-Z&$7Qcs9Lde#&Hq|oI)CODk=AYd7_4oTf2nVG-XZ(0?){VK zFT$p;ntrQomi^&b6#x0O{=baA)o=eU$+L)C!@F;T^4Ig;FW!CWU;DD&{Pll^gVjQg z+5fLTY-D`q--e=^Y>s7oYcqA#=ka8lRc9tzK1IXq$f=<3&e-_?KVmpgyDIa$B%ZS9qAJ05bg`p&ao^;f>H+x*Hu+*aOr zwS{E%uF{=6^WGo%Yij>Ibi&tDwKLal+t!}Fd{cShis{;0lI+d(<@u(IS*txuvb=nJ z&3oT_@9&nH?f-Y%Bg65R_QL$M?fU%7zx?Yje$@5x_LWT$e0{q$_P)JWZ~1ol#pA30 z89kk4_~z8fWae4tL(Xp7?e#j@{bk-ZyIzy9`@iI7y|CN&%jegLKT*<~RvErX@lWHH z_W!#*c)INT$;BtLxo5`YHY6APdGMd%b6t~r(Yl_M+4pjcw^bJW3j8zS{j>iJuddur zP}#JDao;8P{3qLgdXyTz%U{C7f3D!l-~SBzz8d=-dzYNpa)5cms|36S) ziIL&|Bc2FPXXp5UAb&ScA6EuOMg|5R51-7ud?o<~hTOc8q9AuCg^0)~1@?0cObnb1 zYz&4B42j9b1-`*nCgJCt}%dmc?_3zJpvRI5aL9!1d|JjN*EXz z0~i<>j8jsJlNlHoTNoG^a>`2zK;j=57#Kv7vO#PnP(MYaC?Yb7fq_W^B%Tgo>wwrv z5Viw|osyfE!oa`;a&tjSZVHHfgn@yfqpUPFg@J+Dhk=2itt>OOoPmM)3IhX!N=|8R zCIbUAsFx;^o0?e6z`z3P38|E%CTB1(uoy5fFz^(G1UWM>u-Gs#aPXufv6GP4C8-r9 zAYVJ@7gQEyre~BWXe4VY7+P9dD0rln=cJaD=msPvXD1e=C^+Zm79{3XGB7~=4AR9Q z1PWUPPgiF%LrXI=T_Zh1urP$cD+y6Tkc^0og2vD1KyaKfik(4-A+#gJ@)t2MSbSw* zV4i>wOPa~Ru)URmLE;udOl1KB1Ahwx!?yEC{t*MEmyD8<0xNy}^73-M%+zE(P=LZM zBB%ha5;p_MK0T0q@UT;GNli;E%_&g;rRwDTocz)vh2nz5OY3@`&hF!eJqFfbKori0Uu zb5Mvva%oW+L>`na8CV&(82A}P7$h0w7?c?_7<3to7|a>085|f~8N3+$8A2E$8R8g{ z88R4h8HyOn8EP0B8QK`S8744HWthb|r>_aE#$J!v%(`47V8` zFg#^=&G3QY8^do#Mn-l)8&lU1WRA_LZHTU6Ng!-Im>-J(0bHy^Vb)`x^HB?3dV| zvj5=V=8)$w;&9`L;>hD@;+V#?f)mvHXlJkR-* z^Ea0umpYd%R|r=YS0mR9u60~Tx$ba%=H}*B;%beuTf*DNyOQ@X?>*ihe8PNse4czMeD!>@`L^+0 z;(N!>$*;=q$REdF#XpUIGyi%1Hv*gjY68vzi2`*3vjuhvTo?E%C@g3w=r5Qn*dw?~ z@TA}iA$B1(Ay=Ukp%$UVLWhMO3o{EV3p)!Z3pWcd5k4yXRD?}LUBpu)OQc(5t;ji% z528Y%CZb`Y6{536_liCcV-`~r^AyVw>lfQ3c1`S;xU9INc&d1(_&V`R;@>5tB^)GD zCAuWmOI(%sC8;3kDw!=gQF6QFT`3kREvZ1Ma;bSzN2T6Ki%45bCrfupZ<4+x!z806 z6C_hDvsmVg%vV`CS$Ek2*_pD3W#7n&$vMbn$xV^lC-+ibSl&)PQ+|s4e)(4lq6&@* zISMlrjwpOklu`6hELB{ncuw)RlDbl;Qj^kprMt>p$`;CL%2SjNDSuFrSMgP;QCY2W zOO;dALN!Bmy6SP&?`rC5;cD$_+tpsEOQ?IQSE;X7zoWscVXslBu}I^JCYz>(X13;B z%?nygTBceVTC=szYcpw^X=iHB)xN01s$;2>r?W`sx-O5dqi&h*YTbu=VtPJ$O?un) z-s!98N9j-0Kd%4Jz|AWxeGd%b!+e zRwY)OtlnGeT4!6YvVLKsZj)-W#OATBl5L{xLfZ#+3U+x`)E7~X8FS38+pzM(1 zu*~7Pqo!k);~K|zP6kdzPFtP6J6k!|Iv;Rhc5!#|y?$6-w=|9>3Zh(3~VZiP{w!nbE*@4f341;Qdjt2_|#|N(p{ubgC(jRg=R3o%B z^iUXoSWMW;u=B&(*Ssq#Qv%Y8hXD`qGpA(+5K9?gmA$Mn< zP+oT4k$k!Qiu{WO+68R|4+^acrxt!F@-A9d%vc;-yrV>BBO+ve{)n z%EQVxR|r<*Rh+5Rs_d+MUgcJ`w3?+lx%yCzVohVs!&=AMg>{T|Np*+nmFrvTpEkHR ztZ3wF%x*l}WY9FJ=}U8X^R5=zmWGzct?sR>+xXgw+OD@-x6kij>B#Ij*J<22v-4k9 zO4q4wgYIeFe|nO8PW2l0&glK$m)3W#->iS$1hxrz6Ru6PpSWU@;H0Wak0<+1-Zn*H zO4pPxQ{$(eoMtj@{&cSCrPCkG@R_k=rpn9-GylxWn00lw)9m$gWaf0v`93#g?xlGS z^VZFmo!>qG*MiIiHx{}t+_p$<(X_>Ei^~>2TN1Y9_)?3dE0;+v>t6PEdEW8|D}q)W zS!up<n-08LR&@Ss;TX*a2UcN_h&+NUTd;9ls?Q7Zh ze}C2fuLlYayg8VD@bRJeL$?n{9KLcS@W{EN-bYUyb31nUxa0BtCu~pbIcarr=P8R* z+fSRF-gd_H%+|A}XSbd+JGbq;`S~3eEHCW3XmfGjCHqSUFS}emcE$6`>8pNMFJ241 zcH?@?^#?anZoIgebMxb^vRl7zH{4;p({)$i?zDR{_ZHpPyubc|*@L|gT^^o!6#VG+ zB941>eqjr}1vfdx!UD zK16(Y`myNa|4%)iB|k6!V)EtC*MP70zU6-V{k`jlf5Y(^y?W-B?{lMn*=)($)dBo*+Z~;5h+szXvA6 z$i&Pdz`(@F%*@Ej$j!yV!otqTz`)2PsK^W+aaS@DW=$+~3Q8(!QZ{xLVQZYUXj5=< zar5EJ6BllN{9*Fq&l?XOa`~iUvgFDWQB^^ZtxQZz3?M_mRxk=GG8sAs3Kc3DIRzz6 zDncDy?>ORN#K6X2z`)pWfPsyfK_W2ciQtCj;m#Y z!gLlZY+ba`D(bs?PGX(R?YL`iaxH^;UWZY#K^;dVn5^mi)_q1jSZ~Kj14>t3KCG88BePFEwYidRG)7Bez(Na*qqAbNxNe+B8oPucjk6q4_?V~CA3s8A(=q| z(!Dm|VqgF_is2!}z!3QV(u5-hCnR_@dDsMaK(WHu!0HyGBe(u30{um9z^z*Bufn+k3uS{Qdr;qNm$_ z1l=-gDoTcJ+9dYM+VDLesU$ z^Tl+p^w~(KZoSs;E?n)J8+c{)iZvnM&uny6>{&CFjTtm&nE>j^GaLYiErS3g6*7Rj z_YC#_uWU$?a4?WyIKU*qaHz3?g_(hi4Ky)r_^V~oalf@Qc5ME1H)^9?Son11H(_pb z3+FO#^VrX@2-=)Jo3=ABg$TnC2n$~4vY;a&;P>^6~NMK@Y0J)Tb|Nqr3NfOQs z5)K9oUGwXJXI%J9=Aix+3wdR?=o$ zy0~xm{wX^=RaR_~oB|r0kO%v$EUy(47#I$LT?ZyW&Sqe6 zW>~^3;Qs&mo+OEs18gEZ&I}R^JPe5p2be%^Wnh|WyicXdY~m8`7016v>Pn^D<2WRe z_v^}~yP}aNo_@MB@5T%LEOoW%LHsu2!EDb?eM$)ke`R;&*v|AKpR<~mgLQU#X1q!} zd7`+sZ25`DyY+z*;IKA>cU}?D%(z~&73uLr^za| z>H7Nq?62gSFa32*`z5*WQ|!qai+Odt{=03fydUz*Svr;Y^_DMIT70YL;LAT(Pj&aK zon$ua-@-je;SLIY4h9D8{}(S9Fti!+FeDf-b|e@uHZXujz!Dgk4L@(nId(mB!_%rc z>n6AxZnjseR(xBgpKd?X>fGFpGoc2(vD{A*UG`eJZKlwD-IF)! zTz)ew;q>Cu>kVv4y1jr?$y3>-V$!6$qET6q{Y>+{nHZ7=IOmTFp={6699$6rz!Hle>}JgKgA2%6tCz0Sd&q^&i?7VeZrAS zOQn~s>X)9lWdYX~#!y)66?)q5NLe4d<#nCT&?!%zO?$bmH0{OgZ!+mCy0-J=<>gst zN}rtZan$(yI2{<7kEZ*u1POBRBU ze-=kioxEh9h<~p0^j9^}l^4Rl-~ae;;mXL(VIMcDO5eW~c;eyPyoz5Fznt@*ncti) zyyn478`GzcKKmZ?(+#|`DtN8xKlLSF<^3Y-W@>GH9M8wjY%dgXXG&<&{;$$g&wc%2 zaq9X{RZI0XyOuc#)d}sHR6TQ<*s1JgdwKu0o{ZQjo$_MYwm<(FHd*Sns64td-HCru z0yF==e1(CLCka%uG7B6?U|x*b-{y~?w*z^(UkaM_`qM_DT6gC4E3bG3M>JlWPi`IUsti%Ziy{}nzr zDwtJ%X}9m`!}Bvg9C*cX_te8mfuOu)9*(C@T()>$C->Ci?8n>hw(hgn_;S4G;m68| z7)y!8p^uityf5(ADBj^xK)1_Inc^xMzib)BDo(scN}$RnNaR-n^ij&r|+0Ov#MV z$*TT#<+_}W?2*m4BNn$$R`b!;^HjTi`JnFpEx(;z7R`y7wql>)?L`aYDtAVljhHXz zyU23t;l7til~HBN9_OUr&GOzfyKD2u#V2oV`aY$`Ot*RI%*@my$0Q0iKJFC>wPxot zQMj{c(x0|h>MNFtUYI^5>8#Y^=`U-_KA+P+7#_TNnwiGKqbt5wZ4ZllXuB&oQ`PT~ zK-l`snAsP0YDxEe-;=<=?5Dtxpa9R8_W!S40hi5eh78UUZOovS7AuHsW8h(Y!9M@F z+f3=VR(5mepK0p8#{b33)>-($Cx6&{$WU)+9z(t;klUBMex-FyX;+hpw#pPPK^`fQKg0tx-jvnnTRNI~U>qwEc zePaKmjpxfew|%pWQd@FO_qeaxU2d1DI&FDAMQ=+Oc-DaHAORi*7SJSz{Qv9Mpd}AO zGN|McIKZIUz~ErOuz>4RYM*KG%=uTcGZ;6|)_7BDbI-1#9QD z+_nAVt^TTFr_GAfLYcWYi(BXCy?cA&;r!{QdIx*|uD!&mXJ({CxI(^{WxC||(7@&Ijb>Gc&Fa!J*qyqnaOvD$o>M}#&#PKii#k1@ zrG5Cq+4<8ROkTDtLSjyF$mOo+MSt6DtUs-~sT`BA@#xI7&8gE?Tt3owCot~Rzryop zO%|*F7QW+T-`(g z4|3D$e9}B6dE(l&-}|PCt32*A_A{xDj`zI#pJ7?0URwCHknT;Yhn}TA^7Y$2Y1>Wv zmeR>G`TBWNMcI-c{_2xUUGUOw$J59E8A@(Qf||I9faBr+e-V;cKrPxM28DmUM|^6_<>}hzC!apPKE7N2)~t#hVVZ{oUwk+Juq5(Oc>nJ5D?O{W zSjDZ>I6rmb(dbfplY^?k`wE_|6P}W?RNQUu%r|@WuY{XPr{`?^sNeqkPyH2}q>$7f zpS@Y8d02Uwy9vH;IDP2p@!6dzz4IpbADFqK0~W*#3=Ayn|1Uwx90pKpVDZGcNuf+< zW`>!D6>lznoiXEck?Pd@PEA?rmOFQCVo5dSJ~{L0+*21fDNR|jVW&o^=7yWPr>3S& znKPA3dd1xn4VQJoc5-0)b zAC_5tU+>coD+%Zp;o>RQLHi+pI9_HN`qO|KnUn%+;2O3C=tt+(IxaocWx z{qmoIzwW>6+ng0Xjpu&X*;*g2 z_s;*_e+HdzfsxB8I@?Q*~+!YSMO5pm1QrlEH3%6ng1&e)FDQX>O5QDPvf7F8Y{7^6ITOFMitiP4SxHg~V^^M~?+oFE9VKy!&fk`h82G zNgv#I@=un3H*flN%l{1J2Oi3c`MvrnpHnfd?6pyrq}mI`;4Lo&=AM4uWam=s81^qN zy|6N{;NLs z`eaWl7z*+%H;e7+4)ZI%vFeP_?8&PIoz^U|nU+y; zJt#7?SL4L)H3hL3YF`K)dBc(!lr5*JvQ%CC`tE%yu`|_H>F}RC_Eu(My`J$g``un~ z;*vEp7fol{wk}=k!>&o)w^a)-Z`mxf@546l*UAs-xAecM@BVGH^~P!aUt9rO10`O0 zuHE-gBqXx;?z*cgI$1~e_{5cb`xANkv!cz?!cA7CTvb9XQx=&y&5nEeGtk+rKy~xP zuGq=#uO)e9B7^nJZ)((SbiX+Jt<#3pDmT7+Z+M`*-c4QXSHQey#ebuX4<4O!y=!*( zd7b8yRmU|yRSNA*mV08CdCp_9lXZebSc8JxGcTh_rGBqhO7ZP&75fyjYE#rqvHuL0 zK5eeQYHS=cdA@wvdXe>ibngE<{%e`loZXeKqPMkXB~A*+D#*3#6-jmM{bFRR&wqXO z-6!jxIsdv*zx6+Z&U-hnOfS8acTH;k-uPPAIyd$4o3#(V{FwA>gVh00^O1pp@&DCJ zMl;h}N>lS^cb0Nojf#0z^fRz_EQznh)@|G-E5#pA!(>yXmp)b>>@0QY1*=u^; zi&*dOGVKZsU#Kp1L(?^G>8w?aKDlDM*+reA^8*+?l!Syfh+SA!+8q?NJm}VvRj2gc zof6q}F8JQv`|+F$Pp0?Jd_VnK{ZBPdtwm=fZB}ZQT=IS-vEP1YQutDiBfAQ3s!i*5 z;>^lEWl~_IWBJ%JGs=G6o=K~iO16_bv4TmJC0t@{wp~*xR>KW)w9_D3{G3T{xfK~7puAU>E*ku zsc>S_g1x+sF?ah)RY*QP zd|sye@REOyt)b%THw52L_IvF(N8aPB)#cvlv4*FAN!l+fZvqW?GsyqH_W0uN{;a6Y z_DXqXer=_ewvmDt?y_EKpUEs2zA?KjSkmm2+0#?=%j~Bt)M`?hDj2f(s&Jju#IT7b zYc2@(&h>m**IKyiJGbyEjY-;B-&Doj{aUhDaNcoQT;jfx`Qxqbtvf?xbJ{IzG|-~SA6Hc4*wjeK=y z?v_LQLi$uQ{w|%<^DpPl*W8)QO+_QEq$W%E*zB^|l%=^!vzPJ5@PvPXb zPs?we`CL;Mw`%LheRlTewWi3ZZae>E??vHOPuHLmSEh=8c+OL~P-maW`z_zDu07AH zntbV(xoukeM0=U=^2d+=Gh~F6F)(z1Msu%!p3`15c-t9&}=r(hjXn zxvkOClU8yVxw5Qvi|TqA>J)J|&_#5K=dJT@!tswh*PdXx%aOPETd&uZS0*dNzAE@$ zdhnIwuHfvYzZ%oJmZX{n39ji@nbg~0`c^c<+wlbF$LgD!x0dX8S?{zbxZ<;$_hP-1 zvYRsIU5%R>+p@XpSeQ4!Okr$v^c$GI2B)^y4{e7XN`w)~0qSM#{q_dh&*`Y?xW zh~ls1-Ve3Dt$J0sw_fPvk>aHfHBSFZPY<5|dQ!kczkR=R>d$n1np1hoV%4KNVZGv2 z@w~sLm3^vEzBm8Nj-wUPi@K%?x7_nszwP5s`x8g1*1J4hBNMT0(v*Lb;;mo(XL$O^ zXxp}9T2@-BDTVt5pMTnsXPb7Venokd&Gbhz!zwm@dGB$_efClznWSBlt3oF(wltB| zek1TAzP;~L==N>eksI^4J|<4f%e^Xl(6c|Mk; z71#Wm|7ahl%RFnL6w!6LVx`Jga;`SB6s_7edH-3}9UiCNt?=fHOqf&T9>8%=?8imy5-6hKl&5ftVf=V_9Z^~#2 zoT}AvZY{6dlyys%YN@dpew#FViAT}}BgT}dtjDQ-Cw6KFaFtyOH7k<)yLs8F{|p)n z7yHXrZkQ&w&!Q&(cJjZKvyW??_Oj;XT$Q~dedgoO0vsZ_i5knChIsPY-3X?=9&Ud?_$rc`{G#-p==h-}k%!d-?9k zmC}uZv!|YD7vn3szQ{)2e!|b0_ad#n#EaSQwyN8HX1Y>!=)xs+{=eG=*Bz{Qn8XwR zqyNU~4-b89CT|gcDf9NIPDF5Anzv)!M46xSqO~0>lAO)bXMS_7NOGInr84_${6VI` zW6x&C>bY+Am!7m?*{rqM^;5DITTgacHMis4{vDoLTHmIa>a}dQxNFv-J>kUrtpbtk z(almJP8xY}|#ZQ0QizF6bnOA+HFl2+6>V@t+{Tr56hG#=X)TT@fm5F$)CH9IX^mI(t z3OB>sMX4eO-%jP8^(xrfYTD6%0a6=%?nYXAEtr(S^*!S^yY=#SqT9S91axwYvfQlL z)^M)->~Z1Es?<1TH(!m0k`;3kD|VTdoD9!ey;0o4I%KiSwoipWFKn5*>G-c3{~3xW z|J|$|>)Nb!(CXFPCHq8tB^NBzI`*-=+t6a?zfhk@&Q(UI0wS$_m2du&3H&`bdG(a- z{~3;dICuEM=la&qVUmVr7Ej`>U-WxlcyZQmOQ>D>$H1lW85R`Paa|>;LX?UvhdopJmGIyINK!|1&J@{^lw-dFtu*zKwxP zGCh93zxSWP;PC4`^Yw*}$9>*+iC_Q3sZURe>z>qk&TE;U@bOWl>ejlTsFe?oERQ^U zS*FJSSH*vZitrOBbv|915XVs?RJl{Iq(!{2Zu8HMeo@0w{!hx^NI8Q|6lqX9Q&#>lFx6uFvF>cbzPrc zc*}JxTDi)o;>ITJkUlfEmSYZ?Q-nf86n7pC{G#)1kK_A( zAEq4k^fK~}y1)}@<8$-q{MqtK@!HZq?r+wZqIchGf`88C-jxe=E}2*@3JUE^3z@67 zWzza{znuj4_21zj_DPlNS% zJ^MvwF4!ed(Tds|-BF&R#SXnhLz0oyG zZGAzZgW9i_(ABpbwSKowU8J!pBjV}B=G|hquQbeFQm+|3JF8{WZj}%R!=*t-yFyln z#BO@mpSqLjDt=I$b@U%zCH0eS7;M zcm0*;GFM%+7fHO^^PizB<`19QM^TPugc>a>T^PiHrq8GJNf+4QM(&Q_n)<4dGA*B-t(#Y z%Xhi=#a{f&zx2?`ExYyA&OiS`o?fy&f5tkl`EZ4S_e9lur#%kVz5n}ujm?@TPj~r; zy{kSaeYcyZT2XTU*;3j`_iyk2o~qHQy-`i0MA0ZqY0@e!#deX+=PVwsnRlgp=go?L z^N-cIZ1?l_@74c%Ugh8+|L(4uYpWjLIr^d8`z>F{vd^C9;?%wyYqXuajGY`@5>)EBVs%(PL>~|A<=2)NVQSDXYbXI!hd1B?`tXD6h zMB+s>t(m3y-s|po7oFuw`v@I>is+7jK=fIxBnS*e<@}3Etwj=D^sXwVOZpfyL?3fVMd-i ztu}ElKY!N7&UyO9KT?vxY%F4WpLH*+GvmElqOmnHqGjnV%UzZb<^8k59A zuLxRd9pT!z%jntaWUI|4+Kp^?LOD!M`h}LUyVHpZv|zep#rJOI7}1o7#=@ z!r#xkf7bf)w3FsHIgQO1AG6poCr$G- zU7F+6rtBs(?TG!KuA;q1Mb7!|+N619+P0KTXC)nv2@lg4CZ|sHGEZ`<{r*Nnf8x~_ zF%wjs9Ml(bXkG2g{Smfio2JSnjpf;qKkrZ|?~HzxHXdQG-;sm4w4$m(F9meHt8B9hx|U%Va@X0@Jjkl;4vxiZbr+^+I%|mJyX-wYhgCXp^}3~}oo6tVOjzzb ThaoFrt5GA{#!{mO`TsWohd&UW literal 0 HcmV?d00001 diff --git a/users/people/peter_dimov_small.jpg b/users/people/peter_dimov_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1a39124b44dd69de463c8dddd77c890ef70185e GIT binary patch literal 20444 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 literal 0 HcmV?d00001 diff --git a/users/people/peter_dimov_small_old.jpg b/users/people/peter_dimov_small_old.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e457500adb100e86462d3e4bcb8ab1a9b5685d3e GIT binary patch literal 2362 zcmex=8;G z)H5(-_(iUwW$pkka<)WpdpCN3cY31zV>gMj@ z=@lFj8WtWA8I_!pnwFlCnN?g;T2@|BS=HRq+ScCD*)?hMl&RCE&zL!D(c&dbmn~nh za@D5ITefc7zGLUELx+zXJ$C%W$y1juU%7hi`i+~n9zJ^fGCT2kvRz*WLA;&=W#6n>uqec!9r-=(U9^_Ou4*DRP zRCJL`OvU7(>PL{P!Hy=*%}r!E8t!Jelm8!J5aeKJW=LUX6l7o$WMmd({C|sqhnbOq zNsw8P!JdI(!Ndar%m)^*H#(fiTlT4G0mJmKZ{2<|t8Aa*Vc5X&MssVTQh_EB!tP0{H3`q?<0gPP?h7KYQV51H!VC6EN!}IHc z(VjC>PZf1rjz!;_%;F=&QmWyg-lMrt=~tqzL0-Y7)_bD*wi!xk{UF**lf5MDi*Mc zFb0QCSh|e;qfAgj(K@MT={J`46>Q;EjQ88+=9&?aZy^%PKea#GQg;cr!L3@(WsR$) zqFf(r+Z%E6kXPBn_c#7C%#Y%<%3_FO&=8oyvqXdOQG=WYqbrkf>9He*zdqG_`J~yk z%Kctic<%5d+g?p6m)C0BqPvUbynY$H;$Q2zkoVne(JKsoY)|ED3NpflH=ek2^Nyp& ziF5H;6RKwIo>??^>Ee^BTXMDDPL?_mcZxMneJy6|Lo#9 z%f+CoOlv6YnN1+mGIIA2f+r$SH3Bs7tdq|t6V=baa)l6bi3s{ z|1;Q4-J_hE6d80YQYX!OMt||~^(&UDrg`3oigmBd+w4-b#;RQIDwEm*rUv7bsYy=n z3Rsy9)~}Zf)4l)0eW`**i%QBTzv2+X2PqQ_?0GIGNO2^%f8@V5?XXNk&g&Czqg-6? z%I;YkbaTc7c4kxm1Z&%{k`9<+)QlM{U6s_an81CnJyf2c=`OfR~V#!|EYca zGsx?(&!MYp?KiKR#;7oHTU&BZvgM;rGnF98x`;oE*E%PQKegnV!F+wK7<2vM>6LC< z@*n=3^1FOt=j@V}0_pNo&$nf06fuAIe~{UzX0-3`%Z5W$>DMN3?YB^BP^t5KAGhz= zq&MuY4}LI;3(Z^1VL$WV)J0XC({h*HU6UoAV_%xb)%=dl>L2^(CG4h^*7xq5EHr#F zufSeGE9F>d`nkJ@pR&Jec5TQ=V=k{-)S%KHIA!g& z7?}StEYY3!#_-V3BjjlFm>!b78OKry`3NS^)xQ zr4^iR{5$$XtByQbRxe5DcFI4kOn)6KVw?oRVy zs#`v*h$Z=?+R@|Ey$TASr98RKRel9A9ua4s$Nt)fSz-b2UEzSfdnb-7KCwK0nW-tV zWv?qM!wdJE3(OG{SQ(5ah%IDronX0)QBd`y$$_oQ8S)j*|M{c-d0`&we+J>ne^;^R m>(m=N-w`_|vS;!vACAfEY+o{_lm><{dEfZHfa4|O|C<0$v*Qu~ literal 0 HcmV?d00001 diff --git a/users/people/ralf_w_grosse_kunstleve.html b/users/people/ralf_w_grosse_kunstleve.html new file mode 100644 index 0000000..86971a8 --- /dev/null +++ b/users/people/ralf_w_grosse_kunstleve.html @@ -0,0 +1,62 @@ +--- +title: Ralf W. Grosse-Kunstleve +copyright: © 2001 Ralf W. Rene Rivera 2004-2005. +revised: +--- + + +Ralf W. Grosse-Kunstleve + + + +Ralf W. Grosse-Kunstleve +======================== + +![-](ralf_w_grosse_kunstleve.jpg) Ralf is a crystallographer. He has a degree in + Mineralogy ([Bochum, Germany](http://www.mineralogie.ruhr-uni-bochum.de/eng/index.html)), and a Ph.D. in + Crystallography ([ETH Zurich](http://www.crystal.mat.ethz.ch/Intro/lfkcry) , Switzerland). Real Mineralogists + and Crystallographers run experiments with x-rays and hardware + that is not normally associated with C++ and Boost. However, + when Ralf kept breaking the expensive experimental equipment + too often, he decided that he would cause less damage as a + computational crystallographer. + + +Being a scientist, Ralf spent most of his life programming + in Fortran, the great grand-father of all good programming + languages (if you know Backus-Naur you know the name of the + [inventor of Fortran](http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Backus.html)). Ralf is a co-author + of the [CNS](http://cns.csb.yale.edu/) Fortran program that is very popular in + structural biology. When he learned that a real programmer can + write Fortran in any language, Ralf knew that it was time for + him to learn C++. Of course, absorbing four decades of progress + in the field of computer science all at once crashed his brain. + To be able to deal with the challenge, he spawned two child + processes and named them Lisa and Anna. To see Lisa, click on + the picture and turn your monitor by 180 degrees around the + view axis. (Other pictures of [Lisa](http://cci.lbl.gov/~rwgk/Lisa-Roza-Illes/) and [Anna](http://cci.lbl.gov/~rwgk/Anna-Rhona-Illes/) do not require gymnastics with the + monitor.) + + +Right now, Ralf is working for the [Computational + Crystallography Initiative](http://cci.lbl.gov/) at the [Lawrence Berkeley + National Laboratory](http://www.lbl.gov/) in California. The goal of this + initiative is to write a software system for high-throughput + protein crystal structure determination, also known as [Structural Genomics](http://www.nigms.nih.gov/news/announcements/psi.html). Surprisingly, the gestation + period for such a system turns out to be much longer than it + was for Lisa and Anna. However, pre-natal diagnosis already + revealed that Python and C++ are the parents-to-be. For an + ultra-sound image of the new system at its early developmental + stage [click here](http://cctbx.sourceforge.net/). + + + + + + + Grosse-Kunstleve + + + + + diff --git a/users/people/ralf_w_grosse_kunstleve.jpg b/users/people/ralf_w_grosse_kunstleve.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1ff16899deb7a2aac0562b4402d77eeb31eff51 GIT binary patch literal 29133 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 G|4jfA5nIjx literal 0 HcmV?d00001 diff --git a/users/people/ralf_w_grosse_kunstleve_sm.jpg b/users/people/ralf_w_grosse_kunstleve_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65a822e3e001568f9753f53444f23c38656e065a GIT binary patch literal 8122 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 WNvzTdY_R;}|0rWoSB|gz|C<1K3N`Kk literal 0 HcmV?d00001 diff --git a/users/people/rene_rivera.html b/users/people/rene_rivera.html new file mode 100644 index 0000000..d69794c --- /dev/null +++ b/users/people/rene_rivera.html @@ -0,0 +1,43 @@ +--- +title: René Rivera +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2005. +revised: +--- + + +René Rivera + + + +René Rivera +=========== + +![-](rene_rivera.jpg) + René has spent most of his life programming in one + language or another. From assembly, through BASIC, and up to + C++ and Lisp, he has managed to program on a variety of + computers and operating systems. + + +In the past he managed to get a concurrent MS and BS in + Computer Science from Loyola University at Chicago. Work for + the Institute for the Learning Sciences at Northwestern + University building AI related systems. And worked on game + development at Jellyvision Inc. ([jellyvision.com](http://jellyvision.com)). + Where he lead the programming of "You Don't Know Jack: The 5th + Dementia", and of "That's a Fact: Jack! Read.". Which where the + basis for the development of the first two versions of "Who + Wants To Be a Millionaire". + + +His motto of "clean code, clean graphics, it can always + stand improvement" has repeatedly gotten him in trouble. + + + + + + + + + diff --git a/users/people/rene_rivera.jpg b/users/people/rene_rivera.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bda1c7f4c09427a759310fec0b7d0c069d0a5e10 GIT binary patch literal 6987 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 literal 0 HcmV?d00001 diff --git a/users/people/robert_ramey.html b/users/people/robert_ramey.html new file mode 100644 index 0000000..7559280 --- /dev/null +++ b/users/people/robert_ramey.html @@ -0,0 +1,45 @@ +--- +title: Robert Ramey +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Robert Ramey + + + +Robert Ramey +============ + +![-](robert_ramey.jpg) +[Robert Ramey](http://www.rrsd.com) + is a contract software developer living in Santa Barbara, + California. He has been involved in all aspects of the computer + industry for more than 30 years. + + +After graduating with an MS in Operations Research from U.C. + Berkeley in 1971 and serving 18 months in the miltary, he left + on a trip to Ecuador. There he founded a data processing + company which is still in operation today. Returning to + California in 1986, he focused on the more technical aspects of + software development. This has resulted in the completion of + projects such as the Postman's Sort and Boost serialization + library - among others. + + +Other current interests include hanggliding, squash, hiking + and bike riding. + + + + + + +Copyright © 2004 Robert Ramey + + + + + diff --git a/users/people/robert_ramey.jpg b/users/people/robert_ramey.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7924badf8d6c929fe07d6a44300038a30d953324 GIT binary patch literal 129764 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

    0^~=l4^)geF^*{j%w}_wuxJuj%B>VJ0_QAtW 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 P7k8ZV^_r^L{{JQbem@a! literal 0 HcmV?d00001 diff --git a/users/people/doug_gregor.html b/users/people/doug_gregor.html new file mode 100644 index 0000000..1c0c66a --- /dev/null +++ b/users/people/doug_gregor.html @@ -0,0 +1,47 @@ +--- +title: Doug Gregor +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Doug Gregor + + + +Doug Gregor +=========== + +![-](doug_gregor.jpg) Doug + is a post-doctoral research fellow in the [Open Systems Lab](http://www.osl.iu.edu), + part of the [Computer Science](http://www.cs.indiana.edu) department at [Indiana University, + Bloomington.](http://www.iub.edu). + + +As a generic programming zealot, his search for the One True + Generic Language has seen him through the trials of the + [Generic Programming Group](http://www.cs.rpi.edu/research/gpg/), and [many](http://www.boost.org) [diversions](http://www.open-std.org/jtc1/sc22/wg21/). + + +When not hunched over in front of an [XEmacs](http://www.xemacs.org) window, + Doug looks to his wife Amy to help him navigate through the + daylight. Once there, he enjoys tennis and the occasional game + of paintball. + + +Email: dgregor -at- cs.indiana.edu + + +Home page: [`http://www.osl.iu.edu/~dgregor`](http://www.osl.iu.edu/~dgregor/) + + + + + + +Copyright © 2005 Doug Gregor + + + + + diff --git a/users/people/doug_gregor.jpg b/users/people/doug_gregor.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66fdd3b335433f71ff2575feabb1971266192542 GIT binary patch literal 30947 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°*YVM=@J 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 KqUE0R|0V#z<&_@* literal 0 HcmV?d00001 diff --git a/users/people/doug_gregor_small.jpg b/users/people/doug_gregor_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9955bc0c34e029ed67a3a8e758b9779a7d260d7c GIT binary patch literal 2493 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 + + + + + + +Copyright © 2002 Ed Brey + + + + + diff --git a/users/people/ed_brey.jpg b/users/people/ed_brey.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a37894726c2378b2ac7565bdd8c022966c14aea GIT binary patch literal 13913 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 Xh^Hx29p5$-{+jnAw;Z+5aD5 zFcDy2Vq|7wVPR$DU;EGRN`eebU;r@B562 zJ>_RPa}z!bs~lNjzx!Ul7>795g4&h-lk#1;yR>uM+xnbUDs+r{la*yVzArKVww=vw z-X)WmCl$`i+zq4CH@E2MC_kJcgHak^UE5~Y+tGiJTP=z`EYtvvchMR8|S|1#guTWHu-055A+c+ z>Q|e?YI*$UI#t1whK2^I8Vpt?kC*a!Yju3O74l~J!quV&`aN#no2jwuK-^S0*A zI4S+SE@|C^&7M5w{*N-d52dE2TGaG5C{Miq_iWMh%eGHeCtXr8(%|Xy&N2UXQ0C>L z35T09w=|h4{J5;C*#AyH@%!>Q2C7G%7O(a*mAkR#>)TV#`4Z=5GCeK4Z1SJsVUl=T zyM0XWakOmGn4I#HD$+h%bmY`KG%S*&)KSeV4UJ>?b))~OY5STm)~ z$%MaJ$X{4Fzb|xdP4ul7R|*3f+F}>-0zF6+3GT6+X*qB(1#=bbuvdox5%H=bfC zcT~D?T0)&=l3#)4?@N_Ji*}g3oV{g|#er)t_*aLgJvH1IWXoG~>v6|DO)K96aqXgK z`vrFYoY<+NGWT$f;cLgM7fyvwesR83K;~6vde6#}Ow&HjE{hXWZlU?el1aPg$)zeJ!(_Vd!~M;Si-b>*OV$pmJ?1kr=CfAeEZ!fXbM%xt#4Bx)qk-tCH+Ve|6y6fZI)GGUbkD8o|@EtxZuXY8}jvU-C}CO zdUG3vncS5_qCT?EQ{NGw%+hdpq3!F`Y_&CVzK5i)8Qo6bw<=U8xt`~_+wq^9&&{~| zk^MrlV!`1gcB@#P6_X~tVGrQV$q{eU-R1ssc__==ZSq-5vLrvvKPq>LvEZ{CGyBs& zUWLxq(_&r2H!38}nJF`OyQ>9D{)*aGFC|N5*TV~w=XM zNoKO9p_h$3TxKxz&L}>={`al6G@Y9!9wMTdDvsS=rVMry3g=z<{&1(v>@8ECc(%#f z+8<3%e}^8*y?5PkBI5k)eRIG4zV!S{POfi2?Wx!;b+ViFmL^ZAx~TLl zF#Xfz52u?aKC}5${WkWNS)Nb=BaflavhbN^>?Yl|99y;}uFsXSJpVWHvUS5LxBFcm zRpux*Ss1R*{dP1%zoPWZOe-Vy&p}r@*Um7MRCq3u71lgGo*~%j+r^G2IXf+nXRVZ3 za`8pbn#Xbq);-_Wy?-b7=;e~)$#ZhORVU6cTYId4KPT{*S*K;h@uxR0?DI67tGaRL ze}-GjtV<&e9~rP)6&U|qT~T{jI;^+ZEFy2QmBXv7=P8krvfk_M^=@TI7nb1?R-&?uhzr|jJ;W&D_xfAyWM6M6qI1yboLD2RIka;7}EFG1nT&m@eF-Y zc&2={LbIGmr`q(pZa3KP&Azpb_u?6|z8`jBtd1&0EPY?@KRn^^NN~=|Q|8KZa!>ra zpqPHeBQ)Z6fpO!8W%2y%f7f*dGq@d@c-mxV*@B0)6HB)9AIgtXXF22-@@@IFJ5l#M z4(oK!-y3{v4eQl?8+NAr)s`>JRf)V%yF$okTkq845{+d>J>S;+XApX1_9^8^&CUDQ zCK&Gz+`qPn+4A7xm`sT$0_z`n&TDF@Uvb&v@r5Z{nvS176L_@iNvLz9)~yONL($@$ z6B~|2eEE7@>!Xcl#6rn(*6mL>+XKh> zzxAG?t+J^%=j?6tC|1xN{tLff7f;t;sB{gni&iS&^v$!n%q*HW=(6n@w zmkA5fb3!^M*UMObs+e)yc6Z3iQ2lp3(VUM@*hr-Oec<&wY0G{7h{M^3);{YIR(U0P zv#+*&sn^u~6Yh2WXnT8Fbk?H_D&af=3B^afrW)OJ==&&I$r$3YIMi#()x|X}^A}CA zpEAj^?RC&nT&|0Vz#Zdd>S literal 0 HcmV?d00001 diff --git a/users/people/eric_friedman.html b/users/people/eric_friedman.html new file mode 100644 index 0000000..c3c8005 --- /dev/null +++ b/users/people/eric_friedman.html @@ -0,0 +1,44 @@ +--- +title: Eric Friedman +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Eric Friedman + + + +Eric Friedman +============= + +![-](eric_friedman.jpg) + Eric Friedman is an undergraduate at Stanford University. Born + in 1984, he discovered programming at 10 and Boost at 17. He is + a Computer Science major, with interests in Political Science + and Arabic. + + +Eric is co-author of the [Variant library](/doc/libs/release/libs/variant/index.html) + and intends to author more. + + +He enjoys rap music, discussing politics, and, of course, + programming. + + +Though not starving, Eric is a college student and so + appreciates both spontaneous donations and internship + opportunities. He can be contacted at [ebf@users.sourceforge.net](mailto:ebf@users.sourceforge.net). + + + + + + +Copyright © 2003 Eric Friedman + + + + + diff --git a/users/people/eric_friedman.jpg b/users/people/eric_friedman.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fecf0ad9e1fd2ad3dfeeb04c2eb06c579d97204 GIT binary patch literal 14523 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 literal 0 HcmV?d00001 diff --git a/users/people/fernando_cacciola.html b/users/people/fernando_cacciola.html new file mode 100644 index 0000000..1828553 --- /dev/null +++ b/users/people/fernando_cacciola.html @@ -0,0 +1,64 @@ +--- +title: Fernando Cacciola +copyright: Rene Rivera 2004-2005. +revised: +--- + + +Fernando Cacciola + + + +Fernando Cacciola +================= + +![-](fernando_cacciola.jpg) +[Fernando Cacciola](mailto:fernando_cacciola@hotmail.com) has been programming since + 1984 when he got his hand on a Tandy Color Computer II for the + first time. He started with BASIC at the time, but quickly + moved to Assembly Language to get the most out of the Home + Computers of the time (from a Sinclair 1500 [Z80] to a + Commodore 64 [Motorola 6510]). + + +In 1990 he discovered the C programming language and started + to work as a professional programmer. In 1995 he discovered + C++, and during his long time employement in a company + producing CAD systems, the fields of Geometric Computing, + Computer Graphics, Image Processing and Numerics in + general. + + +He studied Biochemistry at the John F. Kennedy (Argentina) + University for 4+ years, but had to drop because of his + full-time job as a programmer. He would complete a CS degree if + he only had the time. + + +After 13 years of being an employed programmer (in just a + couple of companies), by the end of 2003, he became a + freelancer and founded SciSoft, a company specialized in + technically/scientifically-oriented software. + + +Currently he is an active developer of the [Computational Geometry + Algotithms Library (CGAL)](http://www.cgal.org/) and a member of the [IEEE Computer + Society](http://www.computer.org/), the [Association for Computing Machinery (ACM)](http://www.acm.org/) and + the [ACCU + community](http://www.accu.org/). + + +You are always welcome to visit Fernando's [home + page](http://fcacciola.50webs.com/). + + + + + + +Copyright © 2004 Fernando Cacciola + + + + + diff --git a/users/people/fernando_cacciola.jpg b/users/people/fernando_cacciola.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c6d1fe3d2918e832cb517c54b34ea882b47c4db GIT binary patch literal 38339 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 literal 0 HcmV?d00001 diff --git a/users/people/fernando_cacciola_small.jpg b/users/people/fernando_cacciola_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0bd455b579b17b326c2943d33ef7b70b0fcf975 GIT binary patch literal 9371 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

  • VN)X%oZXd2rt!+GpG441KQH{8In)o2gLW}`El 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 literal 0 HcmV?d00001 diff --git a/community/blom_libraries/logos/blom_logo.png b/community/blom_libraries/logos/blom_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..833968ae968c33646a56aeee309bc12070857567 GIT binary patch literal 14478 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 ROa=x922WQ%mvv4FO#qFr|7-vN literal 0 HcmV?d00001 diff --git a/community/committee.html b/community/committee.html new file mode 100644 index 0000000..778f987 --- /dev/null +++ b/community/committee.html @@ -0,0 +1,182 @@ +--- +title: C++ Committee Meetings +copyright: +revised: +--- + + +C++ Committee Meetings + + + body {font-family: sans-serif;} + + + +C++ Committee Meeting FAQ for Boost Members +=========================================== + + +**Who can attend C++ Committee meetings?** + Members of PL22.16 (the INCITS/ANSI committee) or of WG21 (ISO) + member country committee ("national body" in ISO-speak). + [INCITS](http://www.ncits.org/) has broadened PL22.16 + membership requirements so anyone can join, regardless of + nationality or employer. + + +Meeting attendance requirements are tighter than in earlier + times, due to changes in INCITS and ISO rules. Anyone who is an + employee of a PL22.16 member organization can attend, as can + anyone who is a member of one of the national body groups such as + the [BSI](http://en.wikipedia.org/wiki/British_Standards). + + +Any non-member who would like to visit should check with the + PL22.16 chair or head of their national delegation. The Boosters + who are active on the committee can help smooth the way. Contact + the [Boost + developer list](https://lists.boost.org/mailman/listinfo.cgi/boost) for more information. + + +**When and where is the next meeting?** There + are three meetings a year. Two are usually in North + America, and one is usually outside North + America. See a general [list of + meeting locations and dates](http://www.open-std.org/jtc1/sc22/wg21/docs/meetings). Detailed information about a + particular meeting, including hotel information, is usually + provided in a paper appearing in one of [mailings](#Mailing) for the prior meeting. If there isn't a + link to it on the [Meetings](http://www.open-std.org/jtc1/sc22/wg21/docs/meetings) + web page, you will have to go to the committee's [Papers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/) + page and search a bit. + + +**Is there a fee for attending meetings?** No, + but there can be a lot of incidental expenses like travel, + lodging, and meals. + + +**What is the schedule?** The meetings start at + 9:00AM on Monday, and 8:30AM other days, unless otherwise + announced. It is best to arrive a half-hour early to grab a good + seat, some coffee, tea, or donuts, and to say hello to people. + + +Until the next + standard ships most meetings are running through Saturday, + although some end on Friday. The last day, the meeting is generally over + much earlier than on other days. Because the last day's formal meeting is for formal votes + only, it is primarily of interest only to actual committee + members. + + +Sometimes there are evening technical sessions; the details + aren't usually available until the Monday morning meeting. + There may be a reception one evening, and, yes, significant + others are invited. Again, details usually become available + Monday morning. + + +**What actually happens at the meetings?** + Monday morning an hour or two is spent in full committee on + administrivia, and then the committee breaks up into working + groups (Core, Library, and Enhancements). The full committee + also gets together later in the week to hear working group + progress reports. + + +The working groups are where most technical activities take + place. Each active issue that appears on an issues list is + discussed, as are papers from the mailing. Most issues are + non-controversial and disposed of in a few minutes. Technical + discussions are often led by long-term committee members, often + referring to past decisions or longstanding working group + practice. Sometimes a controversy erupts. It takes first-time + attendees awhile to understand the discussions and how + decisions are actually made. The working group chairperson + moderates. + + +Sometimes straw polls are taken. In a straw poll anyone + attending can vote, in contrast to the formal votes taken by + the full committee, where only voting members can vote. + + +Lunch break is an hour and a half. Informal subgroups often + lunch together; a lot of technical problems are discussed or + actually solved at lunch, or later at dinner. In many ways + these discussions involving only a few people are the most + interesting. Sometimes during the regular meetings, a working + group chair will break off a sub-group to tackle a difficult + problem. + + +**Do I have to stay at the main hotel?** No, + and committee members on tight budgets often stay at other, + cheaper, hotels. (The main hotels are usually chosen because + they have large meeting rooms available, and thus tend to be + pricey.) The advantage of staying at the main hotel is that it + is then easier to participate in the off-line discussions, which + can be at least as interesting as what actually happens in the + scheduled meetings. + + +**What do people wear at meetings?** Programmer + casual. No neckties to be seen. + + +**What should I bring to a meeting?** It is almost + essential to have a laptop computer along. There is a meeting wiki and + there is internet connectivity. Wireless + connectivity has become the norm. + + +**What should I do to prepare for a meeting?** + It is helpful to have downloaded the mailing or individual + papers for the meeting, and read any papers you are interested + in. Familiarize yourself with the issues lists if you haven't + done so already. Decide which of the working groups you want to + attend. + + +**What is a "Paper"?** An electronic document containing + issues, proposals, or anything else the committee is interested + in. Very little gets discussed at a meeting, much less acted + upon, unless it is presented in a paper. [Papers are + available](http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/) to anyone. Papers don't just appear randomly; + they become available four (lately six) times a year, before + and after each meeting. Committee members often refer to a + paper by saying what mailing it was in: "See the pre-Redmond + mailing." + + +**What is a "Mailing"?** A mailing is the set of papers + prepared four to six times a year before and after each + meeting, or between meetings. It is physically just a [.zip or + .gz](http://www.open-std.org/jtc1/sc22/wg21/docs/mailings/) archive of all the papers for a meeting. Although the + mailing's archive file itself is only available to committee + members and technical experts, the contents (except copies of + the standard) are available to the general public as individual + papers. The ways of ISO are inscrutable. + + +**What is a "Reflector"?** The committee's + mailing lists are called "reflectors". There are a number of + them; "all", "core", "lib", and "ext" are the main ones. As a + courtesy, Boost technical experts can be added to committee + reflectors at the request of a committee member. + + + +--- + + +© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010 + + +Distributed under the Boost Software License, Version 1.0. See + [www.boost.org/LICENSE\_1\_0.txt](https://www.boost.org/LICENSE_1_0.txt) + + +Revised + 18 January 2010 + diff --git a/community/counted_body.html b/community/counted_body.html new file mode 100644 index 0000000..e0209c6 --- /dev/null +++ b/community/counted_body.html @@ -0,0 +1,677 @@ +--- +title: Counted Body Techniques +copyright: Kevlin Henney 1998-1999. +revised: +--- + + +Counted Body Techniques + + + +Counted Body Techniques +======================= + +[Kevlin Henney](/users/people/kevlin_henney.html) + + ([kevlin@curbralan.com](mailto:kevlin@curbralan.com)) + + +Reference counting techniques? Nothing new, you might think. + Every good C++ text that takes you to an intermediate or + advanced level will introduce the concept. It has been explored + with such thoroughness in the past that you might be forgiven + for thinking that everything that can be said has been said. + Well, let's start from first principles and see if we can + unearth something new.... + + +And then there were none... +--------------------------- + + +The principle behind reference counting is to keep a running + usage count of an object so that when it falls to zero we know + the object is unused. This is normally used to simplify the + memory management for dynamically allocated objects: keep a + count of the number of references held to that object and, on + zero, delete the object. + + +How to keep a track of the number of users of an object? + Well, normal pointers are quite dumb, and so an extra level of + indirection is required to manage the count. This is + essentially the PROXY pattern described in *Design + Patterns* [Gamma, Helm, Johnson & Vlissides, + Addison-Wesley, ISBN 0-201-63361-2]. The intent is given as +> +> *Provide a surrogate or placeholder for another object +> to control access to it.* +> +> +> + + +Coplien [*Advanced C++ Programming Styles and Idioms*, + Addison-Wesley, ISBN 0-201-56365-7] defines a set of idioms + related to this essential separation of a handle and a body + part. The *Taligent Guide to Designing Programs* + [Addison-Wesley, ISBN 0-201-40888-0] identifies a number of + specific categories for proxies (aka surrogates). Broadly + speaking they fall into two general categories: + + +* *Hidden*: The handle is the object of interest, + hiding the body itself. The functionality of the handle is + obtained by delegation to the body, and the user of the + handle is unaware of the body. Reference counted strings + offer a transparent optimisation. The body is shared between + copies of a string until such a time as a change is needed, + at which point a copy is made. Such a COPY ON WRITE pattern + (a specialization of LAZY EVALUATION) requires the use of a + hidden reference counted body. +* *Explicit*: Here the body is of interest and the + handle merely provides intelligence for its access and + housekeeping. In C++ this is often implemented as the SMART + POINTER idiom. One such application is that of reference-counted smart pointers that collaborate to keep a count of an + object, deleting it when the count falls to zero. + + +Attached vs detached +-------------------- + + +For reference counted smart pointers there are two places + the count can exist, resulting in two different patterns, both + outlined in *Software Patterns* [Coplien, SIGS, ISBN + 0-884842-50-X]: + + +* COUNTED BODY or ATTACHED COUNTED HANDLE/BODY places the + count within the object being counted. The benefits are that + countability is a part of the object being counted, and that + reference counting does not require an additional object. The + drawbacks are clearly that this is intrusive, and that the + space for the reference count is wasted when the object is + not heap-based. Therefore the reference counting ties you to + a particular implementation and style of use. +* DETACHED COUNTED HANDLE/BODY places the count outside the + object being counted, such that they are handled together. + The clear benefit of this is that this technique is + completely unintrusive, with all of the intelligence and + support apparatus in the smart pointer, and therefore can be + used on classes created independently of the reference + counted pointer. The main disadvantage is that frequent use + of this can lead to a proliferation of small objects, i.e. + the counter, being created on the heap. + + +Even with this simple analysis, it seems that the DETACHED + COUNTED HANDLE/BODY approach is ahead. Indeed, with the + increasing use of templates this is often the favourite, and is + the principle behind the common - but not standard - + `counted_ptr`. *[The Boost name is [`shared_ptr`](/doc/libs/release/libs/smart_ptr/shared_ptr.htm) + rather than `counted_ptr`.]* + + +A common implementation of COUNTED BODY is to provide the + counting mechanism in a base class that the counted type is + derived from. Either that, or the reference counting mechanism + is provided anew for each class that needs it. Both of these + approaches are unsatisfactory because they are quite closed, + coupling a class into a particular framework. Added to this the + non-cohesiveness of having the count lying dormant in a + non-counted object, and you get the feeling that excepting its + use in widespread object models such as COM and CORBA the + COUNTED BODY approach is perhaps only of use in specialized + situations. + + +A requirements based approach +----------------------------- + + +It is the question of openness that convinced me to revisit + the problems with the COUNTED BODY idiom. Yes, there is a + certain degree of intrusion expected when using this idiom, but + is there anyway to minimize this and decouple the choice of + counting mechanism from the smart pointer type used? + + +In recent years the most instructive body of code and + specification for constructing open general purpose components + has been the Stepanov and Lee's STL (Standard Template + Library), now part of the C++ standard library. The STL + approach makes extensive use of compile time polymorphism based + on well defined operational requirements for types. For + instance, each container, contained and iterator type is + defined by the operations that should be performable on an + object of that type, often with annotations describing + additional constraints. Compile time polymorphism, as its name + suggests, resolves functions at compile time based on function + name and argument usage, i.e. overloading. This is less + intrusive, although less easily diagnosed if incorrect, than + runtime polymorphism that is based on types, names and function + signatures. + + +This requirements based approach can be applied to reference + counting. The operations we need for a type to be + *Countable* are loosely: + + +* An `acquire` operation that registers interest + in a *Countable* object. +* A `release` operation unregisters interest in + a *Countable* object. +* An `acquired` query that returns whether or + not a *Countable* object is currently acquired. +* A `dispose` operation that is responsible for + disposing of an object that is no longer acquired. + + +Note that the count is deduced as a part of the abstract + state of this type, and is not mentioned or defined in any + other way. The openness of this approach derives in part from + the use of global functions, meaning that no particular member + functions are implied; a perfect way to wrap up an existing + counted body class without modifying the class itself. The + other aspect of openness comes from a more precise + specification of the operations. + + +For a type to be *Countable* it must satisfy the + following requirements, where `ptr` is a non-null + pointer to a single object (i.e. not an array) of the type, and + *`#function`* indicates number of calls to + `*function(*ptr*)*`: + +| | | | +| --- | --- | --- | +| *Expression* | *Return type* | *Semantics and notes* | +| `acquire(ptr)` | no requirement | *post*: `acquired(ptr)` | +| `release(ptr)` | no requirement | *pre*: `acquired(ptr)` +*post*: `acquired(ptr) == #acquire - + #release` | +| `acquired(ptr)` | convertible to `bool` | *return*: `#acquire > #release` | +| `dispose(ptr, ptr)` | no requirement | *pre*: `!acquired(ptr)` +*post*: `*ptr` no longer usable | + + +Note that the two arguments to `dispose` are to + support selection of the appropriate type-safe version of the + function to be called. In the general case the intent is that + the first argument determines the type to be deleted, and would + typically be templated, while the second selects which template + to use, e.g. by conforming to a specific base class. + + +In addition the following requirements must also be + satisfied, where `null` is a null pointer to the + *Countable* type: + +| | | | +| --- | --- | --- | +| *Expression* | *Return type* | *Semantics and notes* | +| `acquire(null)` | no requirement | *action*: none | +| `release(null)` | no requirement | *action*: none | +| `acquired(null)` | convertible to `bool` | *return*: `false` | +| `dispose(null, null)` | no requirement | *action*: none | + + +Note that there are no requirements on these functions in + terms of exceptions thrown or not thrown, except that if + exceptions are thrown the functions themselves should be + exception-safe. + + +Getting smart +------------- + + +Given the *Countable* requirements for a type, it is + possible to define a generic smart pointer type that uses them + for reference counting: +``` + +template +class countable\_ptr +{ +public: // construction and destruction + + explicit countable\_ptr(countable\_type \*); + countable\_ptr(const countable\_ptr &); + ~countable\_ptr(); + +public: // access + + countable\_type \*operator->() const; + countable\_type &operator\*() const; + countable\_type \*get() const; + +public: // modification + + countable\_ptr &clear(); + countable\_ptr &assign(countable\_type \*); + countable\_ptr &assign(const countable\_ptr &); + countable\_ptr &operator=(const countable\_ptr &); + +private: // representation + + countable\_type \*body; + +}; + +``` + +The interface to this class has been kept intentionally + simple, e.g. member templates and `throw` specs have + been omitted, for exposition. The majority of the functions are + quite simple in implementation, relying very much on the + `assign` member as a keystone function: +``` + +template +countable\_ptr::countable\_ptr(countable\_type \*initial) + : body(initial) +{ + acquire(body); +} + +template +countable\_ptr::countable\_ptr(const countable\_ptr &other) + : body(other.body) +{ + acquire(body); +} + +template +countable\_ptr::~countable\_ptr() +{ + clear(); +} + +template +countable\_type \*countable\_ptr::operator->() const +{ + return body; +} + +template +countable\_type &countable\_ptr::operator\*() const +{ + return \*body; +} + +template +countable\_type \*countable\_ptr::get() const +{ + return body; +} + +template +countable\_ptr &countable\_ptr::clear() +{ + return assign(0); +} + +template +countable\_ptr &countable\_ptr::assign(countable\_type \*rhs) +{ + // set to rhs (uses Copy Before Release idiom which is self assignment safe) + acquire(rhs); + countable\_type \*old\_body = body; + body = rhs; + + // tidy up + release(old\_body); + if(!acquired(old\_body)) + { + dispose(old\_body, old\_body); + } + + return \*this; +} + +template +countable\_ptr &countable\_ptr::assign(const countable\_ptr &rhs) +{ + return assign(rhs.body); +} + +template +countable\_ptr &countable\_ptr::operator=(const countable\_ptr &rhs) +{ + return assign(rhs); +} + +``` + +Public accountability +--------------------- + + +Conformance to the requirements means that a type can be + used with `countable_ptr`. Here is an implementation + mix-in class (*mix-imp*) that confers countability on its + derived classes through member functions. This class can be + used as a class adaptor: +``` + +class countability +{ +public: // manipulation + + void acquire() const; + void release() const; + size\_t acquired() const; + +protected: // construction and destruction + + countability(); + ~countability(); + +private: // representation + + mutable size\_t count; + +private: // prevention + + countability(const countability &); + countability &operator=(const countability &); + +}; + +``` + +Notice that the manipulation functions are + `const` and that the `count` member + itself is `mutable`. This is because countability is + not a part of an object's abstract state: memory management + does not depend on the `const`-ness or otherwise of + an object. I won't include the definitions of the member + functions here as you can probably guess them: increment, + decrement, and return the current count, respectively for the + manipulation functions. In a multithreaded environment, you + should ensure that such read and write operations are + atomic. + + +So how do we make this class *Countable*? A simple set + of forwarding functions does the job: +``` + +void acquire(const countability \*ptr) +{ + if(ptr) + { + ptr->acquire(); + } +} + +void release(const countability \*ptr) +{ + if(ptr) + { + ptr->release(); + } +} + +size\_t acquired(const countability \*ptr) +{ + return ptr ? ptr->acquired() : 0; +} + +template +void dispose(const countability\_derived \*ptr, const countability \*) +{ + delete ptr; +} + +``` + +Any type that now derives from `countability` may + now be used with `countable_ptr`: +``` + +class example : public countability +{ + ... +}; + +void simple() +{ + countable\_ptr ptr(new example); + countable\_ptr qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs + +``` + +Runtime mixin +------------- + + +The challenge is to apply COUNTED BODY in a non-intrusive + fashion, such that there is no overhead when an object is not + counted. What we would like to do is confer this capability on + a per object rather than on a per class basis. Effectively we + are after *Countability* on any object, i.e. anything + pointed to by a `void *`! It goes without saying + that `void` is perhaps the least committed of any + type. + + +The forces to resolve this are quite interesting, to say + the least. Interesting, but not insurmountable. Given that the + class of a runtime object cannot change dynamically in any well + defined manner, and the layout of the object must be fixed, we + have to find a new place and time to add the counting state. + The fact that this must be added only on heap creation suggests + the following solution: +``` + +struct countable\_new; +extern const countable\_new countable; + +void \*operator new(size\_t, const countable\_new &); +void operator delete(void \*, const countable\_new &); + +``` + +We have overloaded `operator new` with a dummy + argument to distinguish it from the regular global + `operator new`. This is comparable to the use of the + `std::nothrow_t` type and `std::nothrow` + object in the standard library. The placement `operator + delete` is there to perform any tidy up in the event of + failed construction. Note that this is not yet supported on all + that many compilers. + + +The result of a `new` expression using + `countable` is an object allocated on the heap that + has a header block that holds the count, i.e. we have extended + the object by prefixing it. We can provide a couple of features + in an anonymous namespace (not shown) in the implementation + file for supporting the count and its access from a raw + pointer: +``` + +struct count +{ + size\_t value; +}; + +count \*header(const void \*ptr) +{ + return const\_cast(static\_cast(ptr) - 1); +} + +``` + +An important constraint to observe here is the alignment of + `count` should be such that it is suitably aligned + for any type. For the definition shown this will be the case on + almost all platforms. However, you may need to add a padding + member for those that don't, e.g. using an anonymous + `union` to coalign `count` and the most + aligned type. Unfortunately, there is no portable way of + specifying this such that the minimum alignment is also + observed - this is a common problem when specifying your own + allocators that do not directly use the results of either + `new` or `malloc`. + + +Again, note that the count is not considered to be a part of + the logical state of the object, and hence the conversion from + `const` to non-`const` - + `count` is in effect a `mutable` + type. + + +The allocator functions themselves are fairly + straightforward: +``` + +void \*operator new(size\_t size, const countable\_new &) +{ + count \*allocated = static\_cast(::operator new(sizeof(count) + size)); + \*allocated = count(); // initialise the header + return allocated + 1; // adjust result to point to the body +} + +void operator delete(void \*ptr, const countable\_new &) +{ + ::operator delete(header(ptr)); +} + +``` + +Given a correctly allocated header, we now need the + *Countable* functions to operate on `const void + *` to complete the picture: +``` + +void acquire(const void \*ptr) +{ + if(ptr) + { + ++header(ptr)->value; + } +} + +void release(const void \*ptr) +{ + if(ptr) + { + --header(ptr)->value; + } +} + +size\_t acquired(const void \*ptr) +{ + return ptr ? header(ptr)->value : 0; +} + +template +void dispose(const countable\_type \*ptr, const void \*) +{ + ptr->~countable\_type(); + operator delete(const\_cast(ptr), countable); +} + +``` + +The most complex of these is the `dispose` + function that must ensure that the correct type is destructed + and also that the memory is collected from the correct offset. + It uses the value and type of first argument to perform this + correctly, and the second argument merely acts as a strategy + selector, i.e. the use of `const void *` + distinguishes it from the earlier dispose shown for `const + countability *`. + + +Getting smarter +--------------- + + +Now that we have a way of adding countability at creation + for objects of any type, what extra is needed to make this work + with the `countable_ptr` we defined earlier? Good + news: nothing! +``` + +class example +{ + ... +}; + +void simple() +{ + countable\_ptr ptr(new(countable) example); + countable\_ptr qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs + +``` + +The `new(countable)` expression defines a + different policy for allocation and deallocation and, in common + with other allocators, any attempt to mix your allocation + policies, e.g. call `delete` on an object allocated + with `new(countable)`, results in undefined + behaviour. This is similar to what happens when you mix + `new[]` with `delete` or + `malloc` with `delete`. The whole point + of *Countable* conformance is that *Countable* + objects are used with `countable_ptr`, and this + ensures the correct use. + + +However, accidents will happen, and inevitably you may + forget to allocate using `new(countable)` and + instead use `new`. This error and others can be + detected in most cases by extending the code shown here to add + a check member to the `count`, validating the check + on every access. A benefit of ensuring clear separation between + header and implementation source files mean that you can + introduce a checking version of this allocator without having + to recompile your code. + + +Conclusion +---------- + + +There are two key concepts that this article has + introduced: + + +* The use of a generic requirements based approach to + simplify and adapt the use of the COUNTED BODY pattern. +* The ability, through control of allocation, to + dynamically and non-intrusively add capabilities to fixed + types using the RUNTIME MIXIN pattern. + + +The application of the two together gives rise to a new + variant of the essential COUNTED BODY pattern, UNINTRUSIVE + COUNTED BODY. You can take this theme even further and contrive + a simple garbage collection system for C++. + + +The complete code for `countable_ptr`, + `countability`, and the `countable new` + is also available. +*First published in* [Overload](http://www.accu.org/index.php/overloadonline) +*25, April 1998, ISSN 1354-3172* + + + + + + + + diff --git a/community/cpp.html b/community/cpp.html new file mode 100644 index 0000000..7dc2bc5 --- /dev/null +++ b/community/cpp.html @@ -0,0 +1,90 @@ +--- +title: C++ +copyright: Beman Dawes 2002. Daniel James 2007. Rene Rivera 2007. +revised: 2007-10-22 22:55:52 +0100 +--- + + +C++ + + + +C++ +=== + +C++ Organizations +----------------- +[C++ + Standards Committee](http://www.open-std.org/jtc1/sc22/wg21/) +Issues lists and papers give insight into current status + and future directions. +[Association of C & C++ + Users](http://www.accu.org) +Over 2400 book reviews, and lots more. + +Online Publications +------------------- +[The + C++ Source](http://www.artima.com/cppsource/index.jsp) +*"The Premier Online Journal for the C++ + Community"*. + +Copies of the C++ Standard +-------------------------- +[ANSI Store](http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882%2D2003) +The full C++ Standard including TC1 corrections + (INCITS/ISO/IEC 14882) is available as a PDF document for $18 + US. The document is certainly not a tutorial but is + interesting to those who care about the precise specification + of both the language and the standard library. +[Book](http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470846747.html) +The full C++ Standard including TC1 corrections is also + available in book form, list price $65 US. Since the content + of the book is the same as the much cheaper ANSI PDF, the + book form is only of interest to those who prefer a physical + book, say for a school or company library. + +Contributed Articles +-------------------- +[C++ Committee + Meetings](/community/committee.html) +FAQ for Boost Members wishing to attend a standards + committee meeting. +[Generic Programming + Techniques](generic_programming.html) +By [David + Abrahams](/users/people/dave_abrahams.html) and [Jeremy Siek](/users/people/jeremy_siek.html) describes + some of the techniques used in Boost libraries. +[Error and Exception + Handling](error_handling.html) +Describes approaches to errors and exceptions by [David Abrahams](/users/people/dave_abrahams.html). +[Exception-Safety in + Generic Components](exception_safety.html) +Lessons Learned from Specifying Exception-Safety for the + C++ Standard Library by [David Abrahams](/users/people/dave_abrahams.html). +[Counted Body + Techniques](/community/counted_body.html) +By [Kevlin + Henney](/users/people/kevlin_henney.html) is must reading for those interested in reference + counting, a widely used object management idiom. Originally + published in [Overload](http://www.accu.org/index.php/overloadonline) + magazine. +[Implementation + Variations](/community/implementation_variations.html) +Sometimes one size fits all, sometimes it doesn't. This + page deals with the trade-offs. +[Feature + Model Diagrams in text and HTML](/community/feature_model_diagrams.html) +Describes how to represent feature model diagrams in text + form. + + + + + + + + + + + diff --git a/community/error_handling.html b/community/error_handling.html new file mode 100644 index 0000000..5908708 --- /dev/null +++ b/community/error_handling.html @@ -0,0 +1,267 @@ +--- +title: Error and Exception Handling +copyright: David Abrahams 2001-2003. +revised: +--- + + +Error and Exception Handling + + + +Error and Exception Handling +============================ + +References +---------- + + +The following paper is a good introduction to some of the + issues of writing robust generic components: +> +> [D. Abrahams: +> ``Exception Safety in Generic Components''](/community/exception_safety.html), originally +> published in [M. Jazayeri, R. Loos, D. Musser (eds.): Generic Programming, +> Proc. of a Dagstuhl Seminar, Lecture Notes on Computer +> Science. Volume. 1766](https://doi.org/10.1007/3-540-39953-4) +> +> +> + + +Guidelines +---------- + + +### When should I use exceptions? + + +The simple answer is: ``whenever the semantic and + performance characteristics of exceptions are + appropriate.'' + + +An oft-cited guideline is to ask yourself the question ``is + this an exceptional (or unexpected) situation?'' This guideline + has an attractive ring to it but is usually a mistake. The + problem is that one person's ``exceptional'' is another's + ``expected'': when you look at the terms carefully, the + distinction evaporates and you're left with no guideline. After + all, if you check for an error condition, then in some sense + you expect it to happen, or the check is wasted code. + + +A more appropriate question to ask is: ``do we want stack + unwinding here?'' Because actually handling an exception is + likely to be significantly slower than executing mainline code, + you should also ask: ``Can I afford stack unwinding here?'' For + example, a desktop application performing a long computation + might periodically check to see whether the user had pressed a + cancel button. Throwing an exception could allow the operation + to be canceled gracefully. On the other hand, it would + probably be inappropriate to throw and *handle* exceptions + in the inner loop of this computation because that could have a + significant performance impact. The guideline mentioned above + has a grain of truth in it: in time-critical code, throwing an + exception should *be* the exception, not the rule. + + +### How should I design my exception classes? + + +1. **Derive your exception class from + `std::exception`**. Except in \*very\* rare + circumstances where you can't afford the cost of a virtual + table, `std::exception` makes a reasonable + exception base class, and when used universally, allows + programmers to catch "everything" without resorting to + `catch(...)`. For more about + `catch(...)`, see below. +2. **Use *virtual* inheritance.** This + insight is due to Andrew Koenig. Using virtual inheritance + from your exception's base class(es) prevents ambiguity + problems at the catch-site in case someone throws an + exception derived from multiple bases which have a base + class in common: + +``` + +#include +struct my\_exc1 : std::exception { char const\* what() const throw(); }; +struct my\_exc2 : std::exception { char const\* what() const throw(); }; +struct your\_exc3 : my\_exc1, my\_exc2 {}; + +int main() +{ + try { throw your\_exc3(); } + catch(std::exception const& e) {} + catch(...) { std::cout << "whoops!" << std::endl; } +} + +``` +The program above prints `"whoops"` because the C++ runtime +can't resolve which `exception` instance to match in the first +catch clause. +3. ***Don't* embed a std::string object** or + any other data member or base class whose copy constructor + could throw an exception. That could lead directly to + std::terminate() at the throw point. Similarly, it's a bad + idea to use a base or member whose ordinary constructor(s) + might throw, because, though not necessarily fatal to your + program, you may report a different exception than intended + from a *throw-expression* that includes construction + such as: + +``` + +throw some\_exception(); + +``` + +There are various ways to avoid copying string objects + when exceptions are copied, including embedding a + fixed-length buffer in the exception object, or managing + strings via reference-counting. However, consider the next + point before pursuing either of these approaches. +4. **Format the `what()` message on + demand**, if you feel you really must format the + message. Formatting an exception error message is typically a + memory-intensive operation that could potentially throw an + exception. This is an operation best delayed until after + stack unwinding has occurred, and presumably, released some + resources. It's a good idea in this case to protect your + `what()` function with a `catch(...)` + block so that you have a fallback in case the formatting code + throws +5. **Don't worry *too* much about the + `what()` message**. It's nice to have a + message that a programmer stands a chance of figuring out, + but you're very unlikely to be able to compose a relevant and + *user*-comprehensible error message at the point an + exception is thrown. Certainly, internationalization is + beyond the scope of the exception class author. [Peter Dimov](/users/people/peter_dimov.html) makes an + excellent argument that the proper use of a + `what()` string is to serve as a key into a table + of error message formatters. Now if only we could get + standardized `what()` strings for exceptions + thrown by the standard library... +6. **Expose relevant information about the cause of + the error** in your exception class' public interface. + A fixation on the `what()` message is likely to + mean that you have neglected to expose information someone might + need, in order to make it a coherent message for users. For + example, if your exception reports a numeric range error, + it's important to have the actual numbers involved available + *as numbers* in the exception class' public interface + where error reporting code can do something intelligent with + them. If you only expose a textual representation of those + numbers in the `what()` string, you will make life + very difficult for programmers who need to do something more + (e.g. subtraction) with them than dumb output. +7. **Make your exception class immune to + double-destruction** if possible. Unfortunately, + several popular compilers occasionally cause exception + objects to be destroyed twice. If you can arrange for that to + be harmless (e.g. by zeroing deleted pointers) your code will + be more robust. + + +### What About Programmer Errors? + + +As a developer, if I have violated a precondition of a + library I'm using, I don't want stack unwinding. What I want is + a core dump or the equivalent - a way to inspect the state of + the program at the exact point where the problem was detected. + That usually means `assert()` or something like + it. + + +Sometimes it is necessary to have resilient APIs which can + stand up to nearly any kind of client abuse, but there is + usually a significant cost to this approach. For example, it + usually requires that each object used by a client be tracked + so that it can be checked for validity. If you need that sort + of protection, it can usually be provided as a layer on top of + a simpler API. Beware half-measures, though. An API that + promises resilience against some, but not all abuse is an + invitation to disaster. Clients will begin to rely on the + protection and their expectations will grow to cover + unprotected parts of the interface. + + +**Note for Windows developers**: unfortunately, + the native exception-handling used by most Windows compilers + actually throws an exception when you use + `assert()`. Actually, this is true of other + programmer errors such as segmentation faults and + divide-by-zero errors. One problem with this is that if you use + JIT (Just In Time) debugging, there will be collateral + exception-unwinding before the debugger comes up because + `catch(...)` will catch these not-really-C++ + exceptions. Fortunately, there is a simple but little-known + workaround, which is to use the following incantation: +``` + +extern "C" void straight\_to\_debugger(unsigned int, EXCEPTION\_POINTERS\*) +{ + throw; +} +extern "C" void (\*old\_translator)(unsigned, EXCEPTION\_POINTERS\*) + = \_set\_se\_translator(straight\_to\_debugger); + +``` + +This technique doesn't work if the SEH is raised from within + a catch block (or a function called from within a catch block), + but it still eliminates the vast majority of JIT-masking + problems. + + +### How should I handle exceptions? + + +Often the best way to deal with exceptions is to not handle + them at all. If you can let them pass through your code and + allow destructors to handle cleanup, your code will be + cleaner. + + +#### Avoid `catch(...)` when + possible + +Unfortunately, operating systems other than + Windows also wind non-C++ "exceptions" (such as thread + cancellation) into the C++ EH machinery, and there is sometimes + no workaround corresponding to the + `_set_se_translator` hack described above. The + result is that `catch(...)` can have the effect of + making some unexpected system notification at a point where + recovery is impossible to look just like a C++ exception thrown + from a reasonable place, invalidating the usual safe + assumptions that destructors and catch blocks have taken valid + steps to ensure program invariants during unwinding. + + I reluctantly concede this point to Hillel Y. Sims, after + many long debates in the newsgroups: until all OSes are + "fixed", if every exception were derived from + `std::exception` and everyone substituted + `catch(std::exception&)` for + `catch(...)`, the world would be a better place. + + +Sometimes, `catch(...)`, is still the most + appropriate pattern, in spite of bad interactions with + OS/platform design choices. If you have no idea what kind of + exception might be thrown and you really *must* stop + unwinding it's probably still your best bet. One obvious place + where this occurs is at language boundaries. + + + + + + + + + diff --git a/community/exception_safety.html b/community/exception_safety.html new file mode 100644 index 0000000..a313ee1 --- /dev/null +++ b/community/exception_safety.html @@ -0,0 +1,764 @@ +--- +title: Exception-Safety in Generic Components +copyright: David Abrahams 2001. +revised: +--- + + +Exception-Safety in Generic Components + + +/\*\*/ + + + +Exception-Safety in Generic Components +====================================== + +**Lessons Learned from Specifying + Exception-Safety for the C++ Standard Library** + + +### [David Abrahams](http://daveabrahams.com) + + +### [dave@boostpro.com](mailto:dave@boostpro.com) + + +**Abstract.** This paper represents the + knowledge accumulated in response to a real-world need: that + the C++ Standard Template Library exhibit useful and + well-defined interactions with exceptions, the error-handling + mechanism built-in to the core C++ language. It explores the + meaning of exception-safety, reveals surprising myths about + exceptions and genericity describes valuable tools for + reasoning about program correctness, and outlines an automated + testing procedure for verifying exception-safety. + + +**Keywords:** exception-safety, exceptions, + STL, C++ + + +1 What is exception-safety? +--------------------------- + + +Informally, exception-safety in a component means that it + exhibits reasonable behavior when an exception is thrown during + its execution. For most people, the term + “reasonable” includes all the usual expectations + for error-handling: that resources should not be leaked, and + that the program should remain in a well-defined state so that + execution can continue. For most components, it also includes + the expectation that when an error is encountered, it is + reported to the caller. + + +More formally, we can describe a component as minimally + exception-safe if, when exceptions are thrown from within that + component, its invariants are intact. Later on, we'll see that + at least three different levels of exception-safety can be + usefully distinguished. These distinctions can help us to + describe and reason about the behavior of large systems. + + +In a generic component, we usually have an additional + expectation of *exception-neutrality*, which means that + exceptions thrown by a component's type parameters should be + propagated, unchanged, to the component's caller. + + +2 Myths and Superstitions +------------------------- + + +Exception-safety seems straightforward so far: it doesn't + constitute anything more than we'd expect from code using more + traditional error-handling techniques. It might be worthwhile, + however, to examine the term from a psychological viewpoint. + Nobody ever spoke of “error-safety” before C++ had + exceptions. + + +It's almost as though exceptions are viewed as a + *mysterious attack* on otherwise correct code, from which + we must protect ourselves. Needless to say, this doesn't lead + to a healthy relationship with error handling! During + standardization, a democratic process that requires broad + support for changes, I encountered many widely-held + superstitions. To even begin the discussion of + exception-safety in generic components, it may be worthwhile + confronting a few of them. + + +*“Interactions between templates and exceptions are + not well-understood.”* This myth, often heard from + those who consider these both new language features, is easily + disposed of: there simply are no interactions. A template, once + instantiated, works in all respects like an ordinary class or + function. A simple way to reason about the behavior of a + template with exceptions is to think of how a specific + instantiation of that template works. Finally, the genericity + of templates should not cause special concern. Although the + component's client supplies part of the operation (which may, + unless otherwise specified, throw arbitrary exceptions), the + same is true of operations using familiar virtual functions or + simple function pointers. + + +*“ It is well known to be impossible to write an + exception-safe generic container.”* This claim is + often heard concerning an article by Tom Cargill + [[4]](#reference4 "Tom Cargill, “Exception Handling: A False Sense of Security”, C++ Report, Nov-Dec 1994") in which he explores the + problem of exception-safety for a generic stack template. In + his article, Cargill raises many useful questions, but + unfortunately fails to present a solution to his + problem.[1](#footnote1 "Probably the greatest impediment to a solution in Cargill's case was an unfortunate combination of choices on his part: the interface he chose for his container was incompatible with his particular demands for safety. By changing either one he might have solved the problem.") He concludes by suggesting + that a solution may not be possible. Unfortunately, his article + was read by many as “proof” of that speculation. + Since it was published there have been many examples of + exception-safe generic components, among them the C++ standard + library containers. + + +*“Dealing with exceptions will slow code down, and + templates are used specifically to get the best possible + performance.”* A good implementation of C++ will not + devote a single instruction cycle to dealing with exceptions + until one is thrown, and then it can be handled at a speed + comparable with that of calling a function [[7]](#reference7 "Bjarne Stroustrup, The Design And Evolution of C++. Addison Wesley, Reading, MA, 1995, ISBN 0-201-54330-3, Section 16.9.1."). That alone gives + programs using exceptions performance equivalent to that of a + program which ignores the possibility of errors. Using + exceptions can result in faster programs than + “traditional” error handling methods for other + reasons. First, a catch block indicates to the compiler + which code is devoted to error-handling; it can then be + separated from the usual execution path, improving locality of + reference. Second, code using “traditional” error + handling must typically test a return value for errors after + every single function call; using exceptions completely + eliminates that overhead. + + +*“Exceptions make it more difficult to reason about + a program's behavior.”* Usually cited in support of + this myth is the way “hidden” execution paths are + followed during stack-unwinding. Hidden execution paths are + nothing new to any C++ programmer who expects local variables + to be destroyed upon returning from a function: +``` + +ErrorCode f( int& result ) // 1 +{ // 2 + X x; // 3 + ErrorCode err = x.g( result ); // 4 + if ( err != kNoError ) // 5 + return err; // 6 + // ...More code here... + return kNoError; // 7 +} + +``` + +In the example above, there is a “hidden” call + to `X::~X()` in lines 6 and 7. Granted, using + exceptions, there is no code devoted to error handling + visible: +``` + +int f() // 1 +{ // 2 + X x; // 3 + int result = x.g(); // 4 + // ...More code here... + return result; // 5 +} + +``` + +For many programmers more familiar with exceptions, the + second example is actually more readable and understandable + than the first. The “hidden” code paths include the + same calls to destructors of local variables. Also, they + follow a simple pattern which acts *exactly* as though + there was a potential return statement after each function + call in case of an exception. Readability is enhanced because + the normal path of execution is unobscured by error-handling, + and return values are freed up to be used naturally. + + +There is an even more important way in which exceptions can + enhance correctness: by allowing simple class invariants. In + the first example, if `x`'s constructor should need + to allocate resources, it has no way to report a failure: in + C++, constructors have no return values. The usual result when + exceptions are avoided is that classes requiring resources must + include a separate initializer function which finishes the job + of construction. The programmer can therefore never be sure, + when an object of class `X` is used, whether he is + handling a full-fledged `X` or some abortive attempt + to construct one (or worse: someone simply forgot to call the + initializer!) + + +3 A contractual basis for exception-safety +------------------------------------------ + + +A non-generic component can be described as exception-safe + in isolation, but because of its configurability by client + code, exception-safety in a generic component usually depends + on a contract between the component and its clients. For + example, the designer of a generic component might require that + an operation that is used in the component's destructor not + throw any exceptions.[2](#footnote2 " It is usually inadvisable to throw an exception from a destructor in C++, since the destructor may itself be called during the stack-unwinding caused by another exception. If the second exception is allowed to propagate beyond the destructor, the program is immediately terminated.") The generic component might, + in return, provide one of the following guarantees: + + +* The *basic* guarantee: that the invariants of the + component are preserved, and no resources are leaked. +* The *strong* guarantee: that the operation has + either completed successfully or thrown an exception, leaving + the program state exactly as it was before the operation + started. +* The *no-throw* guarantee: that the operation will + not throw an exception. + + +The basic guarantee is a simple minimum standard for + exception-safety to which we can hold all components. It says + simply that after an exception, the component can still be used + as before. Importantly, the preservation of invariants allows + the component to be destroyed, potentially as part of + stack-unwinding. This guarantee is actually less useful than it + might at first appear. If a component has many valid states, + after an exception we have no idea what state the component is + in; only that the state is valid. The options for recovery, in + this case, are limited: either destruction or resetting the + component to some known state before further use. Consider the + following example: +``` + +template +void print\_random\_sequence() +{ + std::vector v(10); // A vector of 10 items + try { + // Provides only the *basic* guarantee + v.insert( v.begin(), X() ); + } + catch(...) {} // ignore any exceptions above + // print the vector's contents + std::cout "(" << v.size() << ") "; + std::copy( v.begin(), v.end(), + std::ostream\_iterator( std::cout, " " ) ); +} + +``` + +Since all we know about v after an exception is that it is + valid, the function is allowed to print any random sequence of + `X`s.[3](#footnote3 "In practice, of course, this function would make an extremely poor random sequence generator!") It is “safe” in + the sense that it is not allowed to crash, but its output may + be unpredictable. + + +The *strong* guarantee provides full + “commit-or-rollback” semantics. In the case of C++ + standard containers, this means, for example, that if an + exception is thrown all iterators remain valid. We also know + that the container has the same elements as before the + exception was thrown. A transaction that has no effects if it + fails has obvious benefits: the program state is simple and + predictable in case of an exception. In the C++ standard + library, nearly all of the operations on the node-based + containers list, set, multiset, map, and multimap provide the + *strong* guarantee.[4](#footnote4 "It is worth noting that mutating algorithms usually cannot provide the strong guarantee: to roll back a modified element of a range, it must be set back to its previous value using operator=, which itself might throw. In the C++ standard library, there are a few exceptions to this rule, whose rollback behavior consists only of destruction: uninitialized_copy, uninitialized_fill, and uninitialized_fill_n.")). + + +The *no-throw* guarantee is the strongest of all, and + it says that an operation is guaranteed not to throw an + exception: it always completes successfully. This guarantee is + necessary for most destructors, and indeed the destructors of + C++ standard library components are all guaranteed not to throw + exceptions. The *no-throw* guarantee turns out to be + important for other reasons, as we shall see.[5](#footnote5 "All type parameters supplied by clients of the C++ standard library are required not to throw from their destructors. In return, all components of the C++ standard library provide at least the basic guarantee.") + + +4 Legal Wrangling +----------------- + + +Inevitably, the contract can get more complicated: a quid + pro quo arrangement is possible. Some components in the C++ + Standard Library give one guarantee for arbitrary type + parameters, but give a stronger guarantee in exchange for + additional promises from the client type that no exceptions + will be thrown. For example, the standard container operation + `vector::erase` gives the *basic* + guarantee for any `T`, but for types whose copy + constructor and copy assignment operator does not throw, it gives + the *no-throw* guarantee.[6](#footnote6 "Similar arrangements might have been made in the C++ standard for many of the mutating algorithms, but were never considered due to time constraints on the standardization process.") + + +5 What level of exception-safety should a component + specify? +------------------------------------------------------------- + + +From a client's point-of-view, the strongest possible level + of safety would be ideal. Of course, the *no-throw* + guarantee is simply impossible for many operations, but what + about the *strong* guarantee? For example, suppose we + wanted atomic behavior for + `vector::insert`. Insertion into the middle + of a vector requires copying elements after the insertion point + into later positions, to make room for the new element. If + copying an element can fail, rolling back the operation would + require “undoing” the previous copies...which + depends on copying again. If copying back should fail (as it + likely would), we have failed to meet our guarantee. + + +One possible alternative would be to redefine + `insert` to build the new array contents in a fresh + piece of memory each time, and only destroy the old contents + when that has succeeded. Unfortunately, there is a non-trivial + cost if this approach is followed: insertions near the end of a + vector which might have previously caused only a few copies + would now cause every element to be copied. The *basic* + guarantee is a “natural” level of safety for this + operation, which it can provide without violating its + performance guarantees. In fact all of the operations in the + library appears to have such a “natural” level of + safety. + + +Because performance requirements were already a + well-established part of the draft standard and because + performance is a primary goal of the STL, there was no attempt + to specify more safety than could be provided within those + requirements. Although not all of the library gives the + *strong* guarantee, almost any operation on a standard + container which gives the *basic* guarantee can be made + *strong* using the “make a new copy” strategy + described above: +``` + +template +void MakeOperationStrong( Container& c, const BasicOp& op ) +{ + Container tmp(c); // Copy c + op(tmp); // Work on the copy + c.swap(tmp); // Cannot fail[7](#footnote7 "Associative containers whose Compare object might throw an exception when copied cannot use this technique, since the swap function might fail.") +} + +``` + +This technique can be folded into a wrapper class to make a + similar container which provides stronger guarantees (and + different performance characteristics).[8](#footnote8 "This suggests another potential use for the oft-wished-for but as yet unseen container traits<> template: automated container selection to meet exceptionsafety constraints.") + + +6 Should we take everything we can get? +--------------------------------------- + + +By considering a particular implementation, we can hope to + discern a natural level of safety. The danger in using this to + establish requirements for a component is that the + implementation might be restricted. If someone should come up + with a more-efficient implementation which we'd like to use, we + may find that it's incompatible with our exception-safety + requirements. One might expect this to be of no concern in the + well-explored domains of data structures and algorithms covered + by the STL, but even there, advances are being made. A good + example is the recent *introsort* algorithm [[6]](#reference6 "D. R. Musser, “ Introspective Sorting and Selection Algorithms” Software-Practice and Experience 27(8):983-993, 1997."), which represents a + substantial improvement in worst-case complexity over the + well-established *quicksort*. + + +To determine exactly how much to demand of the standard + components, I looked at a typical real-world scenario. The + chosen test case was a “ composite container.” Such + a container, built of two or more standard container + components, is not only commonly needed, but serves as a simple + representative case for maintaining invariants in larger + systems: +``` + +// SearchableStack - A stack which can be efficiently searched +// for any value. +template +class SearchableStack +{ + public: + void push(const T& t); // O(log n) + void pop(); // O(log n) + bool contains(const T& t) const; // O(log n) + const T& top() const; // O(1) + private: + std::set set\_impl; + std::list::iterator> list\_impl; +}; + +``` + +The idea is that the list acts as a stack of set iterators: + every element goes into the set first, and the resulting + position is pushed onto the list. The invariant is + straightforward: the set and the list should always have the + same number of elements, and every element of the set should be + referenced by an element of the list. The following + implementation of the push function is designed to give the + *strong* guarantee within the natural levels of safety + provided by set and list: +``` + +template // 1 +void SearchableStack::push(const T& t) // 2 +{ // 3 + set::iterator i = set\_impl.insert(t); // 4 + try // 5 + { // 6 + list\_impl.push\_back(i); // 7 + } // 8 + catch(...) // 9 + { // 10 + set\_impl.erase(i); // 11 + throw; // 12 + } // 13 +} // 14 + +``` + +What does our code require of the library? We need + to examine the lines where non-const operations occur: + + +* Line 4: if the insertion fails but `set_impl` + is modified in the process, our invariant is violated. We + need to be able to rely on the *strong* guarantee from + `set::insert`. +* Line 7: likewise, if `push_back` fails, but + `list_impl` is modified in the process, our + invariant is violated, so we need to be able to rely on the + *strong* guarantee from list::insert. +* Line 11: here we are “rolling back” the + insertion on line 4. If this operation should fail, we will + be unable to restore our invariant. We absolutely depend on + the *no-throw* guarantee from + `set::erase`.[9](#footnote9 "One might be tempted to surround the erase operation with a try/catch block to reduce the requirements on set< T> and the problems that arise in case of an exception, but in the end that just begs the question. First, erase just failed and in this case there are no viable alternative ways to produce the necessary result. Second and more generally, because of the variability of its type parameters a generic component can seldom be assured that any alternatives will succeed.") +* Line 11: for the same reasons, we also depend on being + able to pass the `i` to the `erase` + function: we need the *no-throw* guarantee from the copy + constructor of `set::iterator`. + + +I learned a great deal by approaching the question this way + during standardization. First, the guarantee specified for the + composite container depends on stronger guarantees + from its components (the *no-throw* guarantees in line + 11). Also, I took advantage of all of the natural levels of + safety to implement this simple example. Finally, the analysis + revealed a requirement on iterators which I had previously + overlooked when operations were considered on their own. The + conclusion was that we should provide as much of the natural + level of safety as possible. Faster but less-safe + implementations could always be provided as extensions to the + standard components. [10](#footnote10 "The prevalent philosophy in the design of STL was that functionality that wasn't essential to all uses should be left out in favor of efficiency, as long as that functionality could be obtained when needed by adapting the base components. This departs from that philosophy, but it would be difficult or impossible to obtain even the basic guarantee by adapting a base component that doesn't already have it.") + + +7 Automated testing for exception-safety +---------------------------------------- + + +As part of the standardization process, I produced an + exception-safe reference implementation of the STL. + Error-handling code is seldom rigorously tested in real life, + in part because it is difficult to cause error conditions to + occur. It is very common to see error-handling code that + crashes the first time it is executed ...in a shipping product! + To bolster confidence that the implementation worked + as advertised, I designed an automated test suite, based on an + exhaustive technique due to my colleague Matt Arnold. + + +The test program started with the basics: reinforcement and + instrumentation, especially of the global operators + `new` and `delete`.[11](#footnote11 "An excellent discussion on how to fortify memory subsystems can be found in: Steve Maguire, Writing Solid Code, Microsoft Press, Redmond, WA, 1993, ISBN 1-55615- 551-4.")Instances of the components + (containers and algorithms) were created, with type parameters + chosen to reveal as many potential problems as possible. For + example, all type parameters were given a pointer to + heap-allocated memory, so that leaking a contained object would + be detected as a memory leak. + + +Finally, a scheme was designed that could cause an operation + to throw an exception at each possible point of failure. At the + beginning of every client-supplied operation which is allowed + to throw an exception, a call to `ThisCanThrow` was + added. A call to `ThisCanThrow` also had to be added + everywhere that the generic operation being tested might throw + an exception, for example in the global operator + `new`, for which an instrumented replacement was + supplied. +``` + +// Use this as a type parameter, e.g. vector +struct TestClass +{ + TestClass( int v = 0 ) + : p( ThisCanThrow(), new int( v ) ) {} + TestClass( const TestClass& rhs ) + : p( ThisCanThrow(), new int( \*rhs.p ) ) {} + const TestClass& operator=( const TestClass& rhs ) + { ThisCanThrow(); \*p = \*rhs.p; } + bool operator==( const TestClass& rhs ) const + { ThisCanThrow(); return \*p == \*rhs.p; } + ...etc... + ~TestClass() { delete p; } +}; + +``` + +`ThisCanThrow` simply decrements a “throw + counter” and, if it has reached zero, throws an + exception. Each test takes a form which begins the counter at + successively higher values in an outer loop and repeatedly + attempts to complete the operation being tested. The result is + that the operation throws an exception at each successive step + along its execution path that can possibly fail. For example, + here is a simplified version of the function used to test the + *strong* guarantee: [12](#footnote12 "Note that this technique requires that the operation being tested be exception-neutral. If the operation ever tries to recover from an exception and proceed, the throw counter will be negative, and subsequent operations that might fail will not be tested for exception-safety.") +``` + +extern int gThrowCounter; // The throw counter +void ThisCanThrow() +{ + if (gThrowCounter-- == 0) + throw 0; +} + +template +void StrongCheck(const Value& v, const Operation& op) +{ + bool succeeded = false; + for (long nextThrowCount = 0; !succeeded; ++nextThrowCount) + { + Value duplicate = v; + try + { + gThrowCounter = nextThrowCount; + op( duplicate ); // Try the operation + succeeded = true; + } + catch(...) // Catch all exceptions + { + bool unchanged = duplicate == v; // Test *strong* guarantee + assert( unchanged ); + } + // Specialize as desired for each container type, to check + // integrity. For example, size() == distance(begin(),end()) + CheckInvariant(v); // Check any invariant + } +} + +``` + +Notably, this kind of testing is much easier and less + intrusive with a generic component than with non-generics, + because testing-specific type parameters can be used without + modifying the source code of the component being tested. Also, + generic functions like `StrongCheck` above were + instrumental in performing the tests on a wide range of values + and operations. + + +8 Further Reading +----------------- + + +To my knowledge, there are currently only two descriptions + of STL exception-safety available. The original specification + [[2]](#reference2 "D. Abrahams, Exception Safety in STLport") for the reference + exception-safe implementation of the STL is an informal + specification, simple and self-explanatory (also verbose), and + uses the *basic-* and *strong-*guarantee distinctions + outlined in this article. It explicitly forbids leaks, and + differs substantively from the final C++ standard in the + guarantees it makes, though they are largely identical. I hope + to produce an updated version of this document soon. + + +The description of exception-safety in the C++ Standard + [[1]](#reference1 "International Standard ISO/IEC 14882, Information Technology-Programming Languages-C++, Document Number ISO/IEC 14882-1998") is only slightly more + formal, but relies on hard-to-read “standardese” + and an occasionally subtle web of implication.[13](#footnote13 "The changes to the draft standard which introduced exception-safety were made late in the process, when amendments were likely to be rejected solely based on the number of altered words. Unfortunately, the result compromises clarity somewhat in favor of brevity. Greg Colvin was responsible for the clever language-lawyering needed to minimize the extent of these changes.") In particular, leaks are + not treated directly at all. It does have the advantage that it + *is* the standard. + + +The original reference implementation [[5]](#reference5 "B. Fomitchev, Adapted SGI STL Version 1.0, with exception handling code by D. Abrahams") of the exception-safe STL + is an adaptation of an old version of the SGI STL, designed for + C++ compilers with limited features. Although it is not a + complete STL implementation, the code may be easier to read, + and it illustrates a useful base-class technique for + eliminating exception-handling code in constructors. The full + test suite [[3]](#reference3 "D. Abrahams and B. Fomitchev, Exception Handling Test Suite") used to validate the + reference implementation has been used successfully to validate + all recent versions of the SGI STL, and has been adapted to + test one other vendor's implementation (which failed). As noted + on the documentation page, it also seems to have the power to + reveal hidden compiler bugs, particularly where optimizers + interact with exception-handling code. + + +References +---------- + + +1. International + Standard ISO/IEC 14882, *Information Technology-Programming + Languages-C++*, Document Number ISO/IEC 14882-1998, + available from . +2. D. Abrahams, + *Exception Safety in STLport*, available at . +3. D. Abrahams and + B. Fomitchev, *Exception Handling Test Suite*, available + at . +4. Tom Cargill, + “Exception Handling: A False Sense of Security,” + C++ Report, Nov-Dec 1994, also available at [http://www.awprofessional.com/content/images/020163371x/supplements/Exception\_Handling\_Article.html](http://www.informit.com/content/images/020163371x/supplements/Exception_Handling_Article.html). +5. B. Fomitchev, + *Adapted SGI STL Version 1.0*, with exception handling + code by D. Abrahams, available at . +6. D. R. Musser, + “Introspective Sorting and Selection Algorithms,” + *Software-Practice and Experience* 27(8):983-993, + 1997. +7. Bjarne + Stroustrup, *The Design And Evolution of C++*. Addison + Wesley, Reading, MA, 1995, ISBN 0-201-54330-3, Section + 16.9.1. + + +Footnotes +--------- + + +1 Probably the + greatest impediment to a solution in Cargill's case was an + unfortunate combination of choices on his part: the interface + he chose for his container was incompatible with his particular + demands for safety. By changing either one he might have solved + the problem. + + +2 It is usually + inadvisable to throw an exception from a destructor in C++, + since the destructor may itself be called during the + stack-unwinding caused by another exception. If the second + exception is allowed to propagate beyond the destructor, the + program is immediately terminated. + + +3 In practice of + course, this function would make an extremely poor random + sequence generator! + + +4 It is worth noting + that mutating algorithms usually cannot provide the + *strong* guarantee: to roll back a modified element of a + range, it must be set back to its previous value using + `operator=`, which itself might throw. In the C++ + standard library, there are a few exceptions to this rule, + whose rollback behavior consists only of destruction: + `uninitialized_copy`, + `uninitialized_fill`, and + `uninitialized_fill_n`. + + +5 All type parameters + supplied by clients of the C++ standard library are required + not to throw from their destructors. In return, all components + of the C++ standard library provide at least the *basic* + guarantee. + + +6 Similar + arrangements might have been made in the C++ standard for many + of the mutating algorithms, but were never considered due to + time constraints on the standardization process. + + +7 Associative + containers whose `Compare` object might throw an + exception when copied cannot use this technique, since the swap + function might fail. + + +8 This suggests + another potential use for the oft-wished-for but as yet unseen + `container_traits<>` template: automated + container selection to meet exception-safety constraints. + + +9 One might be + tempted to surround the erase operation with a + `try`/`catch` block to reduce the + requirements on `set` and the problems that + arise in case of an exception, but in the end that just begs + the question. First, erase just failed and in this case there + are no viable alternative ways to produce the necessary result. + Second and more generally, because of the variability of its + type parameters a generic component can seldom be assured that + any alternatives will succeed. + + +10 The prevalent + philosophy in the design of STL was that functionality that + wasn't essential to all uses should be left out in favor of + efficiency, as long as that functionality could be obtained + when needed by adapting the base components. This departs from + that philosophy, but it would be difficult or impossible to + obtain even the *basic* guarantee by adapting a base + component that doesn't already have it. + + +11 An excellent + discussion on how to fortify memory subsystems can be found in: + Steve Maguire, Writing Solid Code, Microsoft Press, Redmond, + WA, 1993, ISBN 1-55615- 551-4. + + +12 Note that this + technique requires that the operation being tested be + exception-neutral. If the operation ever tries to recover from + an exception and proceed, the throw counter will be negative, + and subsequent operations that might fail will not be tested + for exception-safety. + + +13 The changes to + the draft standard which introduced exception-safety were made + late in the process, when amendments were likely to be rejected + solely based on the number of altered words. + Unfortunately, the result compromises clarity somewhat in favor + of brevity. Greg Colvin was responsible for the clever + language-lawyering needed to minimize the extent of these + changes. + + + + + + + + + diff --git a/community/feature_model_diagrams.html b/community/feature_model_diagrams.html new file mode 100644 index 0000000..fc30636 --- /dev/null +++ b/community/feature_model_diagrams.html @@ -0,0 +1,169 @@ +--- +title: Feature Model Diagrams in text and HTML +copyright: Beman Dawes 2000. +revised: +--- + + +Feature Model Diagrams in text and HTML + + + +Feature Model Diagrams in text and HTML +======================================= + + +By [Beman + Dawes](/users/people/beman_dawes.html) + +Introduction +------------ + + +In their seminal book, Generative Programming, Czarnecki and + Eisenecker ([C&E](#GenerativeProgramming))) + describe how to build feature models [C&E 4.4] consisting + of a feature diagram plus semantic, rationale, and other + attributes. Feature models are then used to drive design cycles + which eventually lead to manual or automatic assembly of + configurations. + + +Feature models provide a language to describe the library + variability that is often such an issue in boost.org + discussions. The Whorf hypothesis that "Language shapes the way + we think, and determines what we can think about" seems to + apply. In discussion of library variability issues, we have + been crippled by lack of a good language. With feature models, + we now have a language to carry on the dialog. + + +The graphical feature diagrams presented by C&E are not + in a suitable form for the email discussions boost.org depends + upon. The hierarchical nature of feature diagrams can be + represented by a simple text-based feature diagram language. A + feature model can also take advantage of the hyperlinks + inherent in HTML. + + +Grammar +------- + + +The grammar for the feature diagram language is expressed in + Extended Bakus-Naur Form;::= represents productions, [...] + represents options, {...} represents zero or more instances, + and represents | alternatives. +``` + +feature-model ::= concept-name details { feature } + +feature ::= feature-name [details] + +details ::= "(" feature-list ")" // required features + | "[" feature-list "]" // optional features + +feature-list ::= element { "|" element } // one only + | element { "+" element } // one or more + | element { "," element } // all + // [a+b] equivalent to [a,b] + +element ::= feature + | details +concept-name ::= name + +feature-name ::= name + +``` + +The usual lexical conventions apply. Names are + case-insensitive and consist of a leading letter, followed by + letters, digits, underscores or hyphens, with no spaces + allowed. + + +At least one instance of each name should be hyperlinked to + the corresponding [Feature + Description](#FeatureDescriptions). + + +While the grammar is intended for written communication + between people, it may also be trivially machine parsed for use + by automatic tools. +Descriptive information is associated with each concept or + feature. According to [C&E 4.4.2] this includes: + + +* Semantic descriptions. +* Rationale. +* Stakeholders and client programs. +* Exemplar systems. +* Constraints and default dependency rules. +* Availability sites, binding sites, and binding mode. +* Open/Closed attribute. + + +What is a Feature? +------------------ + + +A feature [C&E 4.9.1] is "anything users or client + programs might want to control about a concept. Thus, during + feature modeling, we document no only functional features ... + but also implementation features, ..., various optimizations, + alternative implementation techniques, and so on." + + +Example +------- +``` + +special-container ( organization, + performance, + interface ) // all required + +organization [ ordered + indexed ] // zero or more (4 configurations) + +indexed [ hash-function ] // zero or one (2 configurations) + +performance ( fast | small | balanced ) // exactly one (3 configurations) + +interface ( STL-style + cursor-style ) // one or more (3 configurations) + +``` + +There should be feature descriptions for + `some-container, organization, ordered, indexed, + hash-function, performance, fast, small, balanced, interface, + STL-style, and cursor-style`. + + +The number of possible configurations is (2 + 2\*2) \* 3 \* 3 = + 54, assuming no constraints. + + +There are equivalent representations. For example: +``` + +special-container ( organization[ ordered+indexed[ hash-function ]], + performance( fast|small|balanced ), + interface( STL-style+cursor-style ) ) + +``` + +References +---------- + + +Krzysztof Czarnecki and Ulrich W. + Eisenecker, [Generative + Programming](http://www.generative-programming.org), Addison-Wesley, 2000, ISBN 0-201-30977-7 + + + + + + + + + diff --git a/community/generic_programming.html b/community/generic_programming.html new file mode 100644 index 0000000..fd418de --- /dev/null +++ b/community/generic_programming.html @@ -0,0 +1,469 @@ +--- +title: Generic Programming Techniques +copyright: David Abrahams 2001. +revised: +--- + + +Generic Programming Techniques + + +/\*\*/ + + + +Generic Programming Techniques +============================== + +This is an incomplete survey of some of the generic + programming techniques used in the [boost](/) + libraries. + + +Table of Contents +----------------- + + +* [Introduction](#introduction) +* [The Anatomy of a Concept](#concept) +* [Traits](#traits) +* [Tag Dispatching](#tag_dispatching) +* [Adaptors](#adaptors) +* [Type Generators](#type_generator) +* [Object Generators](#object_generator) +* [Policy Classes](#policy) + + +Introduction +------------ + + +Generic programming is about generalizing software + components so that they can be easily reused in a wide variety + of situations. In C++, class and function templates are + particularly effective mechanisms for generic programming + because they make the generalization possible without + sacrificing efficiency. + + +As a simple example of generic programming, we will look at + how one might generalize the `memcpy()` function of + the C standard library. An implementation of + `memcpy()` might look like the following: +``` + +void\* memcpy(void\* region1, const void\* region2, size\_t n) +{ + const char\* first = (const char\*)region2; + const char\* last = ((const char\*)region2) + n; + char\* result = (char\*)region1; + while (first != last) + \*result++ = \*first++; + return result; +} + +``` + +The `memcpy()` function is already generalized to + some extent by the use of `void*` so that the + function can be used to copy arrays of different kinds of data. + But what if the data we would like to copy is not in an array? + Perhaps it is in a linked list. Can we generalize the notion of + copy to any sequence of elements? Looking at the body of + `memcpy()`, the function's **minimal requirements** are that it needs to + *traverse* through the sequence using some sort of + pointer, *access* elements pointed to, *write* the + elements to the destination, and *compare* pointers to + know when to stop. The C++ standard library groups requirements + such as these into **concepts**, in + this case the [Input + Iterator](http://en.cppreference.com/w/cpp/concept/InputIterator) concept (for `region2`) and the [Output + Iterator](http://en.cppreference.com/w/cpp/concept/OutputIterator) concept (for `region1`). + + +If we rewrite the `memcpy()` as a function + template, and use the [Input + Iterator](http://en.cppreference.com/w/cpp/concept/InputIterator) and [Output + Iterator](http://en.cppreference.com/w/cpp/concept/OutputIterator) concepts to describe the requirements on the + template parameters, we can implement a highly reusable + `copy()` function in the following way: +``` + +template +OutputIterator +copy(InputIterator first, InputIterator last, OutputIterator result) +{ + while (first != last) + \*result++ = \*first++; + return result; +} + +``` + +Using the generic `copy()` function, we can now + copy elements from any kind of sequence, including a linked + list that exports iterators such as `std::[list](http://en.cppreference.com/w/cpp/container/list)`. +``` + +#include +#include +#include + +int main() +{ + const int N = 3; + std::vector region1(N); + std::list region2; + + region2.push\_back(1); + region2.push\_back(0); + region2.push\_back(3); + + std::copy(region2.begin(), region2.end(), region1.begin()); + + for (int i = 0; i < N; ++i) + std::cout << region1[i] << " "; + std::cout << std::endl; +} + +``` + +Anatomy of a + Concept +--------------------- + + +A **concept** is a set of + requirements consisting of valid expressions, associated types, + invariants, and complexity guarantees. A type that satisfies + the requirements is said to **model** + the concept. A concept can extend the requirements of another + concept, which is called **refinement**. + + +* **Valid Expressions** are + C++ expressions which must compile successfully for the + objects involved in the expression to be considered + *models* of the concept. +* **Associated Types** are + types that are related to the modeling type in that they + participate in one or more of the valid expressions. + Typically associated types can be accessed either through + typedefs nested within a class definition for the modeling + type, or they are accessed through a [traits + class](#traits). +* **Invariants** are run-time characteristics + of the objects that must always be true, that is, the + functions involving the objects must preserve these + characteristics. The invariants often take the form of + pre-conditions and post-conditions. +* **Complexity Guarantees** are maximum limits + on how long the execution of one of the valid expressions + will take, or how much of various resources its computation + will use. + + +The concepts used in the C++ Standard Library are documented + at the [C++ reference + website](http://en.cppreference.com/w/). + + +Traits +------ + + +A traits class provides a way of associating information + with a compile-time entity (a type, integral constant, or + address). For example, the class template [`std::iterator_traits`](http://en.cppreference.com/w/cpp/iterator/iterator_traits) + looks something like this: +``` + +template +struct iterator\_traits { + typedef ... iterator\_category; + typedef ... value\_type; + typedef ... difference\_type; + typedef ... pointer; + typedef ... reference; +}; + +``` + +The traits' `value_type` gives generic code the + type which the iterator is "pointing at", while the + `iterator_category` can be used to select more + efficient algorithms depending on the iterator's + capabilities. + + +A key feature of traits templates is that they're + *non-intrusive*: they allow us to associate information + with arbitrary types, including built-in types and types + defined in third-party libraries, Normally, traits are + specified for a particular type by (partially) specializing the + traits template. + + +For an in-depth description of + `std::iterator_traits`, see [this + page](http://en.cppreference.com/w/cpp/iterator/iterator_traits). Another very different expression of the traits idiom + in the standard is `std::numeric_limits` + which provides constants describing the range and capabilities + of numeric types. + + +Tag + Dispatching +---------------- + + +Tag dispatching is a way of using function overloading to + dispatch based on properties of a type, and is often used hand + in hand with traits classes. A good example of this synergy is + the implementation of the [`std::advance()`](http://en.cppreference.com/w/cpp/iterator/advance) function in the C++ Standard + Library, which increments an iterator `n` times. + Depending on the kind of iterator, there are different + optimizations that can be applied in the implementation. If the + iterator is [random + access](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator) (can jump forward and backward arbitrary distances), + then the `advance()` function can simply be + implemented with `i += n`, and is very efficient: + constant time. Other iterators must be `advance`d in + steps, making the operation linear in n. If the iterator is + [bidirectional](http://en.cppreference.com/w/cpp/concept/BidirectionalIterator), then it makes sense for `n` to be + negative, so we must decide whether to increment or decrement + the iterator. + + +The relation between tag dispatching and traits classes is + that the property used for dispatching (in this case the + `iterator_category`) is often accessed through a + traits class. The main `advance()` function uses the + [`iterator_traits`](http://en.cppreference.com/w/cpp/iterator/iterator_traits) class to get the + `iterator_category`. It then makes a call the the + overloaded `advance_dispatch()` function. The + appropriate `advance_dispatch()` is selected by the + compiler based on whatever type the `iterator_category` resolves to, either [`input_iterator_tag`](http://en.cppreference.com/w/cpp/iterator/iterator_tags), [`bidirectional_iterator_tag`](http://en.cppreference.com/w/cpp/iterator/iterator_tags), or [`random_access_iterator_tag`](http://en.cppreference.com/w/cpp/iterator/iterator_tags). A **tag** is simply a class whose only purpose is to + convey some property for use in tag dispatching and similar + techniques. Refer to [this + page](http://en.cppreference.com/w/cpp/iterator/iterator_tags) for a more detailed description of iterator tags. +``` + +namespace std { + struct input\_iterator\_tag { }; + struct bidirectional\_iterator\_tag { }; + struct random\_access\_iterator\_tag { }; + + namespace detail { + template + void advance\_dispatch(InputIterator& i, Distance n, **input\_iterator\_tag**) { + while (n--) ++i; + } + + template + void advance\_dispatch(BidirectionalIterator& i, Distance n, + **bidirectional\_iterator\_tag**) { + if (n >= 0) + while (n--) ++i; + else + while (n++) --i; + } + + template + void advance\_dispatch(RandomAccessIterator& i, Distance n, + **random\_access\_iterator\_tag**) { + i += n; + } + } + + template + void advance(InputIterator& i, Distance n) { + typename **iterator\_traits::iterator\_category** category; + detail::advance\_dispatch(i, n, **category**); + } +} + +``` + +Adaptors +-------- + + +An *adaptor* is a class template which builds on + another type or types to provide a new interface or behavioral + variant. Examples of standard adaptors are [std::reverse\_iterator](http://en.cppreference.com/w/cpp/iterator/reverse_iterator), + which adapts an iterator type by reversing its motion upon + increment/decrement, and [std::stack](http://en.cppreference.com/w/cpp/container/stack) , which adapts a container to provide a simple stack + interface. + + +A more comprehensive review of the adaptors in the standard + can be found [here](http://portal.acm.org/citation.cfm?id=249118.249120). + + +Type + Generators +---------------- + + +**Note:** The *type generator* concept has + largely been superseded by the more refined notion of a + [metafunction](/doc/libs/release/libs/mpl/doc/refmanual/metafunction.html). + See *[C++ + Template Metaprogramming](http://www.boost-consulting.com/mplbook/)* for an in-depth discussion of + metafunctions. + + +A *type generator* is a template whose only purpose is + to synthesize a new type or types based on its template + argument(s)[[1]](#footnote1). The generated type is + usually expressed as a nested typedef named, appropriately + `type`. A type generator is usually used to + consolidate a complicated type expression into a simple one. + This example uses an old version of [`iterator_adaptor`](/doc/libs/release/libs/iterator/doc/iterator_adaptor.html) whose design didn't allow derived + iterator types. As a result, every adapted iterator had to be a + specialization of `iterator_adaptor` itself and + generators were a convenient way to produce those types. +``` + +template +struct filter\_iterator\_generator { + typedef iterator\_adaptor< + + Iterator,filter\_iterator\_policies, + Value,Reference,Pointer,Category,Distance> **type**; +}; + +``` + +Now, that's complicated, but producing an adapted filter + iterator using the generator is much easier. You can usually + just write: +``` + +boost::filter\_iterator\_generator::type + +``` + +Object + Generators +------------------ + + +An *object generator* is a function template whose only + purpose is to construct a new object out of its arguments. + Think of it as a kind of generic constructor. An object + generator may be more useful than a plain constructor when the + exact type to be generated is difficult or impossible to + express and the result of the generator can be passed directly + to a function rather than stored in a variable. Most Boost + object generators are named with the prefix + "`make_`", after `std::[make\_pair](http://en.cppreference.com/w/cpp/utility/pair/make_pair)(const T&, const U&)`. + + +For example, given: +``` + +struct widget { + void tweak(int); +}; +std::vector widget\_ptrs; + +``` + +By chaining two standard object generators, + `std::[bind2nd](http://en.cppreference.com/w/cpp/utility/functional/bind12)()` + and `std::[mem\_fun](http://en.cppreference.com/w/cpp/utility/functional/mem_fun)()`, + we can easily tweak all widgets: +``` + +void tweak\_all\_widgets1(int arg) +{ + for\_each(widget\_ptrs.begin(), widget\_ptrs.end(), + **bind2nd**(std::**mem\_fun**(&widget::tweak), arg)); +} + +``` + +Without using object generators the example above would look + like this: +``` + +void tweak\_all\_widgets2(int arg) +{ + for\_each(struct\_ptrs.begin(), struct\_ptrs.end(), + **std::binder2nd >**( + std::**mem\_fun1\_t**(&widget::tweak), arg)); +} + +``` + +As expressions get more complicated the need to reduce the + verbosity of type specification gets more compelling. + + +Policy Classes +-------------- + + +A policy class is a template parameter used to transmit + behavior. An example from the standard library is + `std::[allocator](http://en.cppreference.com/w/cpp/memory/allocator)`, + which supplies memory management behaviors to standard [containers](http://en.cppreference.com/w/cpp/container). + + +Policy classes have been explored in detail by [Andrei Alexandrescu](http://www.moderncppdesign.com/) in + [this + chapter](http://www.informit.com/articles/article.aspx?p=167842) of his book, *Modern C++ Design*. He + writes: +> +> In brief, policy-based class design fosters assembling a +> class with complex behavior out of many little classes +> (called policies), each of which takes care of only one +> behavioral or structural aspect. As the name suggests, a +> policy establishes an interface pertaining to a specific +> issue. You can implement policies in various ways as long as +> you respect the policy interface. +> +> +> Because you can mix and match policies, you can achieve a +> combinatorial set of behaviors by using a small core of +> elementary components. +> +> +> + + +Andrei's description of policy classes suggests that their + power is derived from granularity and orthogonality. + Less-granular policy interfaces have been shown to work well in + practice, though. [This paper](http://svn.boost.org/svn/boost/tags/release/Boost_1_30_2/boost/libs/utility/iterator_adaptors.pdf) describes an old version of [`iterator_adaptor`](/doc/libs/release/libs/iterator/doc/iterator_adaptor.html) that used non-orthogonal policies. + There is also precedent in the standard library: [`std::char_traits`](http://en.cppreference.com/w/cpp/string/char_traits), despite its name, acts as a + policies class that determines the behaviors of [std::basic\_string](http://en.cppreference.com/w/cpp/string/basic_string). + + +Notes +----- + + +[1] Type generators + are sometimes viewed as a workaround for the lack of + “templated typedefs” in C++. + + + + + + + + + diff --git a/community/groups.html b/community/groups.html new file mode 100644 index 0000000..24239f7 --- /dev/null +++ b/community/groups.html @@ -0,0 +1,280 @@ +--- +title: Boost Mailing Lists +copyright: Beman Dawes, David Abrahams, 2001-2005. +revised: +--- + + +Boost Mailing Lists + + + +Boost Mailing Lists (A.K.A. Discussion Groups) +============================================== + +The mailing lists are the heart of the Boost community. You + may read the lists via full-content email or email digests. +Before Posting +-------------- + + +**Read the [Discussion Policy + and Guide to Effective Posting](policy.html).** Doing so will + help you to ensure that your post is read by the people who + can help you and received in the spirit in which it was + intended. + + +**Subscribe your posting address.** As an + anti-spam measure, postings to most Boost mailing lists will + only be accepted if the posting's "From:" header contains an + email address that is subscribed to the list. If you try to + post from an address that isn't subscribed, you will probably + get a message that says: +> +> You are not allowed to post to this mailing list, +> and your message has been automatically rejected. If you +> think that your messages are being rejected in error, +> contact the mailing list owner at *list +> administrator's email address*. +> +> +> + + +If you need to post from multiple email addresses, you + should subscribe to each one separately. You can configure your + subscription settings for any address to disable mail + delivery via each mailing list's web interface. +* [Users](#users) +* [Developers](#main) + + [Archives](#archive) +* [Announce](#announce) +* [Interest](#interest) +* [Project-Specific](#projects) + + [Boost.Build](#jamboost) + + [Boost CMake](#cmake) + + [Python C++-Sig (for + Boost.Python)](#cplussig) + + [Language Binding](#langbinding) + + [Boost.MPI Development](#mpi) + + [Boost.Spirit](#spirit) + + [Boost.Documentation](#boostdocs) + + [Testing](#testing) + + [Boost.uBlas (numerics)](#ublas) + + [Boost.Thread](#thread) + + [Translation Groups](#translation) +* [#boost IRC channel](#IRC) + + +Boost Users mailing list +------------------------ + + +This list is oriented toward casual users of the Boost + libraries. It is a good place to start if you are having + trouble getting started with Boost or its individual libraries. + Feel free to post both "newbie" and more challenging questions, + but please check first to see if there's an appropriate + [Project-Specific](#projects) list; you'll often get + better answers in a forum dedicated to your problem area. This + list is relatively low volume (less than 500 per month). + Subscribe or unsubscribe at the [Boost Users list home page](https://lists.boost.org/mailman/listinfo.cgi/boost-users). + + +Boost developers mailing list +----------------------------- + + +This is the main Boost mailing list. It is high volume (over + 1000 messages per month), very technical, and oriented toward + Boost library developers. It is also read by many other members + interested in watching the Boost library development process. + Virtually all Boost decisions, major or minor, technical or + otherwise, are reached via public discussion on this mailing + list. It is where the formal reviews of proposed libraries take + place. Subscribe or unsubscribe at . + + +When we talk about the "members of Boost", we are talking + about those signed up for this main mailing list. + + +### Archives for Boost + developers list + + +Archives of Boost messages include the [MailMan Archive](https://lists.boost.org/Archives/boost/) on [our home + page](/). + + +Boost Announce mailing + list +---------------------------- + + +This is an announce-only list for notification of upcoming + software releases and formal reviews of proposed libraries. One + to three messages per month.  Subscribe or unsubscribe at + the [Boost Announce list home page](https://lists.boost.org/mailman/listinfo.cgi/boost-announce). + + +Boost Interest Mailing + List +---------------------------- + + +This list is a moderated low-traffic announcement-only list + of interest to the Boost community. On-topic messages will + include announcements of books, magazine articles, papers, + talks, seminars, products, tools, events, or conferences on + advanced uses of C++, generic/generative/meta-programming, and, + of course, the Boost libraries. Off-topic will be discussion of + any kind. Job postings are accepted at the moderators' + discretion. Subscribe or unsubscribe at the [Boost-Interest home page](https://lists.boost.org/mailman/listinfo.cgi/boost-interest). + + +Project-Specific + lists +----------------------- + +Several mailing lists have been established for + specific Boost projects: + + ### Boost.Build list + + +The mailing list for the [Boost + Build System](../build/) is located [here](https://lists.boost.org/mailman/listinfo.cgi/boost-build). + + +### Boost CMake list + + +Development of the experimental [CMake build + system](http://svn.boost.org/trac/boost/wiki/CMake) is being coordinated on the [Boost + CMake mailing list](https://lists.boost.org/mailman/listinfo.cgi/boost-cmake). Any questions about CMake should be + asked here and not on the main Boost.Build list. + + +### Python C++-Sig (for + Boost.Python) + + +The [Python C++-sig](http://www.python.org/community/sigs/current/c++-sig/) is not strictly Boost-specific, + but nearly all the traffic concerns [Boost.Python](/doc/libs/release/libs/python). See also the + [Language Binding](#langbinding) list below. You can + join the [mailing list](http://mail.python.org/mailman/listinfo/cplusplus-sig "Python C++-sig mailing list"). There are + also searchable archives at [ASPN](http://aspn.activestate.com/ASPN/Mail/Browse/Threaded/cpp-sig). + + +### Language + Binding + + +The [Language Binding](http://lists.sourceforge.net/lists/listinfo/boost-langbinding) list is for discussion of + a generalized framework for binding C++ to other languages and + systems based on the technology of [Boost.Python](/doc/libs/release/libs/python) and [Luabind](http://luabind.sourceforge.net/). + The plan is to provide a single front-end for describing + bindings with runtime-pluggable back ends for binding to + specific languages. + + +### Boost.MPI Development + + +A separate developer mailing list for [Boost.MPI](/doc/libs/release/libs/mpi/) specific topics is + located [here](https://lists.boost.org/mailman/listinfo.cgi/boost-mpi). + + +### Boost.Spirit lists + + +Spirit has two additional mailing lists. [Spirit-general](https://lists.sourceforge.net/lists/listinfo/spirit-general) for Spirit users and + [Spirit-devel](https://lists.sourceforge.net/lists/listinfo/spirit-devel) for Spirit developers (open + to anyone who wishes to hang out with Spirit coders). + + +### Boost.Documentation + list + + +The mailing list for the [Boost Documentation + System](/doc/libs/release/doc/html/boostbook.html) is located [here](https://lists.boost.org/mailman/listinfo.cgi/boost-docs). + + +### uBLAS development + (ublas-dev) list + + +A separate user and developer mailing list for [Boost + uBLAS](/doc/libs/release/libs/numeric/ublas/doc/) specific topics is located [here](https://lists.boost.org/). + + +### Thread development + (threads-devel) list + + +A separate developer mailing list for [Boost Thread](/doc/libs/release/libs/thread/doc/index.html) + specific topics is located [here](https://lists.boost.org/mailman/listinfo.cgi/threads-devel). + + +**Important:** This mailing list is for the + discussion of the specification and implementation of + Boost.Threads only — questions regarding + usage should be directed to the [Boost + Users](#users) list, or the main [Boost + developers](#main) list. + + +### Testing list + + +The setup, procedures and tools necessary for running Boost + regression tests are discussed on [this list](https://lists.boost.org/mailman/listinfo.cgi/boost-testing). The list's main participants are + regression runners - people who run Boost tests on a variety of + compilers and platforms, and the maintainers of tools for + collecting and processing test results. + + +**Important:** questions relevant to a wider audience, + including questions about Boost.Test framework or test results + for a particular library, should be posted to main development + list. + + +### Translation + Groups + + +Boost doesn't have the resources to translate the + documentation itself, but there is at least one separate group + translating the documentation. If you have formed another, tell + us on the [documentation list](#boostdocs) and we'll + add a link. + + +* [Chinese + translators group](http://groups.google.com/group/boost_doc_translation) ([main + webpage](http://code.google.com/p/boost-doc-zh/)) + + +#boost IRC channel +------------------ + + +In addition to the mailing lists presented above, a #boost + IRC channel on [freenode](http://freenode.net) is + frequented by Boost developers and users. As usual with IRC + channels, one should not necessarily expect that his questions + will be answered right away. The channel is not strictly + moderated. + + + + + + + + + diff --git a/community/gsoc.html b/community/gsoc.html new file mode 100644 index 0000000..43a5bb2 --- /dev/null +++ b/community/gsoc.html @@ -0,0 +1,161 @@ +--- +title: Boost C++ Libraries +copyright: David Bellot 2020, Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +Since 2005, Boost has participated in the Google [Summer of Code™](https://summerofcode.withgoogle.com/), + initiative, a program in which student developers are sponsored + for their contributions within open source organizations that are + willing to mentor the participants. + + +Currently the application process begins around + March/April by the student + [reviewing past GSoC + project ideas](#HistoricalGSoCIdeaspagesforyears2006tonow) and approaching the [Boost + developers mailing list](https://www.boost.org/community/groups.html#main) to find a mentor willing to mentor + them and codevelop a project proposal to be submitted to Google + for funding the upcoming summer. Students are expected to be + flexible with regard to what topics and proposals mentors are + willing to mentor. + + +If you arrive at the process too late to prearrange a mentor, + some potential mentors supply prewritten project proposals with + C++ programming competency tests on [this year's GSoC Project Ideas page](https://github.com/boostorg/wiki/wiki/Google-Summer-of-Code%3A-Overview). If you have in the past + made a **substantial** contribution to a well known open source project or participated in previous editions of the GSoC, it may be + possible to skip submission of the C++ programming competency test solution (decided on a case by case basis). + + +Submit the competency test solution as part of the project proposal + you will submit to the Google Summer of Code program. You can copy and + paste relevant parts of your code or you can include links to, for example, + GitHub repository with your solution project. + + + +### Google Summer of Code 2020 overview +This year, in 2020, 10 students will work with us on improving and adding new features to many of our libraries. + +Once again, the competition has been very hard. A few numbers: +- we received 93 proposals in total. 85 of them were complete, then we kept 47 proposals only +- finally we selected 10 of them, covering 7 different Boost libraries +- and countless hours of work from the most incredible team of mentors! + +Here is the list of projects for 2020: + +#### Boost.Real + + +* Kishan Shukla will be working on making the Real library ready for revision. His main goal is to reimplement the division algorithm so it can be used with any number base representation and the Karatsuba multiplication algorithm. Also, it will be working on implementing some operators and common irrational numbers as Pi. + *Mentors*: Laouen Belloli and Damian Vicino. + + +#### Boost.Astronomy + + +* Syed Ali Hasan will be working on the astronomical coordinate system, he will implement different coordinate conversion using SOFA library + *Mentor*: Pranam Lashkari +* Gopi Krishna Menon will be completing the parser for FITS file and also optimise the already developed components. + *Mentor*: Sarthak Singhal + + +#### Boost.GIL + + +* Debabrata Mandal will be implementing histogram computation as a built-in feature, algorithms for histogram analysis, + image processing algorithms based on histogram and possibly integration with Boost.Histogram library. + *Mentors*: Mateusz Loskot, Pranam Lashkari +* Olzhas Zhumabek will be extending GIL's portfolio of image processing algorithms, implementing for image scaling and + sampling, Perona–Malik diffusion, Non-Maximum Suppression for object detection, Hysteresis threshold and some more. + *Mentor*: Mateusz Loskot + + +**Boost.Multiprecision** + + +* Dimitris Los will work on extending and optimizing parts of Boost.Multiprecision to higher precision of many thousands of bits or more. + *Mentor*: Christopher Kormanyos + + +#### Boost.uBlas + + +* Ashar Khan will stabilize and improve Boost.uBlas using the C++20-Standard. The main focus of his project will be enhancing code-coverage and documentation, + integrating static code analysis and generating tensor concepts. + *Mentor*: Cem Bassoy +* Tom Kwok will improve and finalize the implementation of data frames in uBlas, with the aim of delivering production-ready by the end of the summer. + Data frames in uBlas are similar in functionalities to other implementations like in R, Python.Pandas or Julia. + *Mentor*: David Bellot + + +#### Boost.Geometry + + +* Tinko Bartels will work on robust yet efficient geometric predicates for Boost Geometry. + *Mentor*: Vissarion Fisikopoulos + + +#### Boost.Real + + +* Vikram Singh Chundawat will work in taking Real to revision ready state. His focus will be in improving the internal representation datatypes + and providing functions required to conveniently support Taylor series. + *Mentors*: Damian Vicino and Laouen Belloli + + +### Github's for standalone GSoCs past and present +Since 2013 with Boost's transition to git we have kept a single umbrella org on github for those GSoCs which are fairly self standing. Incremental extensions to existing libraries usually enter that library's main git repo as an experimental branch. Here are those orgs: +* GSoC 2020: +* GSoC 2019: +* GSoC 2018: +* GSoC 2017: +* GSoC 2015: +* GSoC 2014: +* GSoC 2013: + + +Students may find examining past GSoC source code and commit histories of use. +### Historical GSoC Ideas pages for years 2006 to now + + +* 2020 [Project Ideas](https://github.com/boostorg/wiki/wiki/Google-Summer-of-Code:-2020) +* 2019 [Project Ideas](https://github.com/boostorg/wiki/wiki/Google-Summer-of-Code:-2019) +* 2018 [Project Ideas](https://github.com/boostorg/wiki/wiki/Google-Summer-of-Code:-2018) +* 2017 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2017) +* 2016 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2016) +* 2015 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2015) +* 2014 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2014) +* 2013 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2013) +* 2012 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2012) +* 2011 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2011) +* 2010 [Project Ideas](https://svn.boost.org/trac/boost/wiki/SoC2010) +* 2009 [Project Ideas](https://svn.boost.org/trac/boost/wiki/soc2009) +* 2008 [Project Ideas](http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Google_Summer_Of_Code_2008) +* 2007 [Project Ideas](http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Google_Summer_Of_Code_2007) +* 2006 [Project Ideas](http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Google_Summer_Of_Code_2006). +[An overview of Boost participation in Google Summer of Code™ 2006](https://www.boost.org/community/gsoc_2006_boost_overview.html). + + +### Sponsorships + + +* [IMC Financial Markets, 2016](imc_summer_of_code_2016.html) + + + + +Revised $Date: 2020-05-12$ + + + + diff --git a/community/gsoc_2006_boost_overview.html b/community/gsoc_2006_boost_overview.html new file mode 100644 index 0000000..33d70a7 --- /dev/null +++ b/community/gsoc_2006_boost_overview.html @@ -0,0 +1,823 @@ +--- +title: An overview of Boost participation in Google Summer of Code™ 2006 +copyright: +revised: 2007-10-22 22:55:52 +0100 +--- + + +An overview of Boost participation in Google Summer of Code™ + 2006 + + +/\*\*/ + + + +An overview of Boost participation in Google Summer of + Code™ 2006 +================================================================== + +For the second consecutive year, Google has conducted its + [Summer of Code™](http://code.google.com/soc/) + initiative, a program by which student developers are sponsored + for their contributions within open source organizations + willing to mentor the participants. The 2006 campaign has run + between April and September, with active development work + taking place between May 23 and August 21. + + +Around mid April, when the program had just started, some + Boost members began considering the possibility to enter Summer + of Code as a mentoring organization. Despite the lack of time + and the fact that most of us were completely new to this + initiative, Boost managed to successfully apply for the + program. As a result ten projects were selected and mentored, + most of which are expected to become full contributions to + Boost shortly. + + +We give here a summary report of this experience, along with + a short analysis of the main problems we found, so that we can + work at solving them and do better next year. + + +Contents +-------- + + +* [How the program works](#how_the_program_works) + + [2006 figures](#figures_2006) +* [Boost participation](#boost_participation) + + [Application and + process selection](#application_and_process_selection) + + [Accepted + projects](#accepted_projects) + + [Development](#development) + + [Results](#results) +* [Analysis](#analysis) + + [Boost appeal](#boost_appeal) + + [Opportunities + lost?](#opportunities_lost) + + [Projects startup](#projects_startup) + + [Ongoing + development](#ongoing_development) + + [Public + communication issues](#public_communication_issues) + + [Scope of + projects](#scope_of_projects) +* [Suggestions for + improvement](#suggestions_for_improvement) + + [Preparation](#preparation) + + [Public + communication](#public_communication) + + [Project + management](#project_management) +* [Conclusions](#conclusions) +* [Acknowledgements](#acknowledgements) + + +How the program works +--------------------- + + +There are three types of participants in Google Summer of + Code: + + +* Google itself acts as the funding partner and conducts + the overall program. +* The open-source organizations accepted into the program + must designate people inside the organization who will act as + project mentors. +* Students submit their project ideas and, if selected, + work in collaboration with one of the mentoring + organizations; upon successful completion of the project, + students receive the full stipend for the program. + + +The program goes through the following stages: + + +* Organization selection: those open source organizations + willing to enter Summer of Code submit an expression of + interest to Google, along with information Google uses for + qualifying purposes. Selected organizations are publicly + announced and each organization is expected to provide a pool + of project ideas. +* Student selection: students willing to participate submit + one or more project proposals, typically expanding on some of + the ideas previously provided by the mentoring organizations. + A student can apply several times and for different + organizations, but ultimately can only be chosen for just one + project. These proposals are routed by Google to the + appropriate organizations, which must analyze them, rank + them, and assign mentors to the most promising applications. + Based on the information provided by mentoring organizations, + Google issues the final list of accepted projects. +* Development: Students, guided by their assigned mentors, + are expected to complete the projects during a period of three + months. Google asks mentors for a mid-program review upon + which continuation of the project depends. +* Final review: Once the development period is over, + mentors are requested to inform Google of the results of the + project, and determine whether students qualify to receive + the full stipend. + + +### 2006 + figures + + +The 2006 campaign of Google Summer of Code took place + between April 14 and September 25. A total of 102 mentoring + organizations participated. Of the 6,338 applications submitted + by 3,044 students around the globe, 630 were finally selected + and funded. Google has spent more than US$3 million in student + stipends and compensations to the mentoring organizations. + + +Boost participation +------------------- + + +### Application and process + selection + + +On April 14, the same day Google Summer of Code started, + Julio M. Merino Vidal (later to become one of the selected + students) sent a message encouraging Boost members to + participate in this program as a mentoring organization. This + call sparked the interest of the community; although time was + already short for doing all the preparation labors, Boost + moderators put rapidly themselves to work and conducted the + preliminary registration steps. In the meantime, a Wiki page + was grown with project ideas provided by Boost members, + totaling more than twenty proposals. + + +By the beginning of May Boost was officially accepted into + the program and Boost moderators set out to form a group of + mentors, selected on an invitation basis. As student selection + is a delicate process, involving the assessment of individuals + on their technical skills, all subsequent discussions were + conducted by the selected mentors on a private mail list + established for their collaboration. + + +We were not prepared for the avalanche of student + applications that followed. On day two after the application + period was open, we had received three proposals; the next day it + was 14, and within a week the count exceeded 50. By the end of + the application period the total number of proposals received + was 174, which forced us to go through a very intensive ranking + process and recruit additional mentors. Two rules were followed + so as rationalize the process of selection among dozens of + different proposals: + + +* Where there were competing applications for the same + project idea, only one were to be ultimately selected; so, no + two projects with the same or very similar goals were + accepted. +* Some of the applications built on a given Boost library + (for instance, the Boost Graph Library is a frequent target + for the addition of algorithms.) We limited the applications + to a maximum of two per Boost library. + + +These rules have the combined effect of greatly reducing the + number of eligible applications while at the same time + distributing the accepted projects evenly across the space of + ideas. Moreover, students with unique proposals, i.e. project + ideas not coming from the pool originally presented by Boost, + are at a competitive advantage. + + +The different proposals were classified according to their + related technological area so that each cluster could be + handled by an appointed mentor with the required expertise on + the subject. Mentors submitted then "focus reports" summarizing + the applications under their responsibility; these reports + served as a first filter to help reduce the number of final + applications to be evaluated jointly. Along the process, + students with the most promising proposals were asked to refine + their ideas and provide further information. + + +Although not enforced by the official rules, we agreed upon + a one-to-one ratio of mentors to students, which ultimately + marked a hard limit on the maximum number of eligible + projects. + + +### Accepted projects + + +Google accepted and funded the ten top-ranked projects + endorsed by Boost. Of these, eight projects are libraries or + library components targeted for future inclusion into Boost, + while the remaining two consist of utility programs heavily + relying on Boost. +> +> **C++ Coroutine Library** +> +> Giovanni Piero Deretta, mentored by Eric Niebler. +> +> Library for the management through a modern C++ interface of +> OS-provided coroutine facilities. +> +> +> +> +> **Concurrency Library** +> +> Matthew Calabrese, mentored by David Abrahams. +> +> STL-inspired generic framework for high-level specification +> and execution of parallelizable algorithms. +> +> +> +> +> **TR1 Math Special Functions** +> +> Xiaogang Zhang, mentored by John Maddock. +> +> Implementation of the 23 special mathematical functions +> specified in C++ standard library extension proposal TR1. +> +> +> +> +> **The Boost.Process library** +> +> Julio M. Merino Vidal, mentored by Jeff Garland. +> +> Portable library for process launching and basic +> management. +> +> +> +> +> **Out-of-Core Graphs and Graph +> Algorithms** +> +> Stéphane Zampelli, mentored by Jeremy Siek. +> +> Extension of the Boost Graph Library to deal with out-of-core +> structures, i.e. data sets too large to be kept in main +> memory at once. +> +> +> +> +> **MISC (M)ulti (I)ndex (S)pecialized +> (C)ontainers** +> +> Matías Capeletto, mentored by Joaquín M +> López Muñoz. +> +> Families of specialized containers internally based on +> Boost.MultiIndex. +> +> +> +> +> **Generic Tree Container** +> +> Bernhard Reiter, mentored by René Rivera. +> +> Design and implementation of a family of STL-compatible tree +> containers. +> +> +> +> +> **Viewer utility for FSMs** +> +> Ioana Tibuleac, mentored by Andreas Huber Dönni. +> +> Utility program for the visualization of finite state +> machines (FSMs) specified with Boost.Statechart. +> +> +> +> +> **Modular C++ preprocessor, using +> Boost.Spirit** +> +> Hermanpreet 'Lally' Singh, mentored by Joel de Guzman. +> +> Implementation with Boost.Spirit and Boost.Wave of a +> front-end translator from Modular C++ (as specified in a +> proposal to add modules to C++ by Daveed Vandevoorde) to +> standard C++. +> +> +> +> +> **Implementing a state of the art Mincut/Maxflow +> algorithm.** +> +> Stephan Diederich, mentored by Douglas Gregor. +> +> Implementation of a fast mincut/maxflow routine for the Boost +> Graph Library based on a new algorithm devised by Vladimir +> Kolmogorov. +> +> +> + + +### Development + + +Two main facilities were set up to assist students and + mentors during the development phase: a mailing list and a + Trac/SVN project management system with separate directories + for each project. One of the students, Matí as Capeletto, + out of personal initiative registered a Google Group aimed at + giving students with Boost a place for informal interaction and + discussion of common problems. + + +After the initial warm-up period, each student-mentor pair + performed development work mostly privately. The usage of the + Boost mailing lists was scarce, and only by the end of the + program did some students publicly announced their results. + + +### Results + + +By the date the development period was officially closed, + the status of the different projects was as follows: + + +* Seven projects were completed or nearly completed and the + students are expected to ask for a formal review within 2006 + or early 2007. Four of these projects necessitated a goal + reorientation during development, basically because the + original plan was too ambitious for three months. Most of the + projects are still in active development during the months + following the Summer of Code program. +* Two projects did not reach the planned goals, but + nevertheless produced useful material that could be expanded + outside of the Summer of Code program. +* One project was abandoned shortly after the midterm + review. The reasons for the abandonment are unknown. + + +The results of all the projects can be consulted online at + the dedicated [Trac + site](http://svn.boost.org/trac/boost/browser/sandbox/SOC/2006). + + +Analysis +-------- + + +We examine the various stages of Boost participation in + Summer of Code, with an emphasis on discovering opportunities + for improvement. + + +### Boost + appeal + + +In a mid project [presentation + at OSCON 2006](http://code.google.com/soc/GSoC2006Statistics.pdf), Chris DiBona from Google provided some data + about the organizations which received the most + applications: + +| Organization | No of applications | +| --- | --- | +| KDE | 244 | +| Ubuntu & Bazaar | 236 | +| Python Software Foundation | 212 | +| GNOME | 199 | +| Apache Software Foundation | 190 | +| **Boost** | **174** | +| Gaim | 152 | +| The GNU Project | 148 | +| Drupal | 146 | +> +> The numbers shown here have been estimated from a chart +> included in the presentation slides. This chart contains an +> additional column labeled "Google" which actually accounts +> for the applications dismissed because of their low +> quality. +> +> +> + + +The fact that Boost is ranked the sixth most attractive + organization out of a total of 102 was entirely unexpected, + especially considering the wide popularity of the rest of + top-rated organizations. There is a more or less implicit + consensus among Boost members that ours is a relatively niche + project, known for its quality standards by seasoned C++ + practitioners, but with a limited penetration among entry level + programmers: maybe the figures above should make us reconsider + this assumption. A cursory examination of the applications + submitted to Boost reveals that most applicants were regular + users of Boost: many cite the Boost status among the C++ + community as an appealing factor to apply. + + +### Opportunities lost? + + +If we look at the number of funded projects concerning + the applications received, figures are not so favorable to + Boost. + +| Organization | No of projects | Project/app ratio | +| --- | --- | --- | +| KDE | 24 | 9.8 % | +| Ubuntu & Bazaar | 22 | 9.3 % | +| Python Software Foundation | 23 | 10.8 % | +| GNOME | 19 | 9.5 % | +| Apache Software Foundation | 27 | 14.2 % | +| **Boost** | **10** | **5.7 %** | +| Gaim | 8 | 5.3 % | +| The GNU Project | 10 | 6.8 % | +| Drupal | 14 | 9.6 % | + + +It turns out that the project/application ratio for almost + any other organization among the top nine is considerably + higher than that of Boost. As it happens, Google initially + requested that organizations submitted the maximum number of + projects they felt they could cope with, and we got funding for + exactly what we aimed for, so the limiting factor lies entirely + on Boost's side. + + +### Projects startup + + +Contributing to Boost relies on a fair number of guidelines + and protocols for coding, documentation, testing and + maintenance. Many of the required tools are exclusively used + within Boost, and some of them are not trivial, like for + instance Boost.Build. Although the Boost web site contains + information about all these tools and procedures, this + intelligence is scattered through unrelated pages and sometimes + is very hard to come by. + + +So, there is a good deal of expertise required to begin + working at Boost. Some students have reported on startup + difficulties getting to know these details and familiarizing + themselves with the tools, most notably `bjam` and + Quickbook. Each student overcome the startup difficulties on + their own or resorting to their mentors (see the section on + [public communication + issues](#public_communication_issues)). + + +### Ongoing development + + +Once students got past the startup stage, most projects + advanced without serious complications. In the majority of + cases, it was realized at some point during the development + that there was no time to complete it. Some participants had to + redefine the goals to keep the project within + schedule, while others simply decided that they would continue + working after the official deadline of Summer of Code. + + +The information flow between each student and their mentor + was usually reported by both parties to be satisfactory. The + projects suffering from lack of communication have been + precisely those yielding the poorest results. In general, + mentors have not felt overwhelmed by requests from their + students, and even in a couple of cases, the projects were run + practically unattended. This fact is witness to the high + competence of the students recruited into the program. + + +The degree of usage of the Trac/SVN system has varied. Some + students did frequent updates, while others have just used the + repository to dump the final results for the official + submission to Google. + + +### Public communication + issues + + +Students and mentors had at their disposal three different + forums for the public interchange of information and + support: + + +* Boost public lists, especially the developers and users + lists. +* A dedicated mailing list reaching all students and + mentors working at Summer of Code in Boost. +* A more casual Google Group, set up by one of the + students, aimed at providing the participants with a place + for socializing and resolution of common problems. + + +Despite this abundance of resources, there was an almost + complete lack of group communication among all the parties + involved and between these and the larger Boost community. + Seemingly, students were satisfied to pursue their activities + by relying on support from their mentors alone. This + circumstance has prevented Boost members from enriching the + initiative by offering their experience and insight, and has + possibly led students to the false impression that contributing + to Boost proceeds in a predictable linear path from requisites + to completion of the work. When asked about their not engaging + in public communication, the students gave vague justifications + that can be classified into the following: + + +* Doubts were deemed too technical or specific to be worth + raising in public. +* A craving for perfectionism detracted students from asking + or submitting work in progress until they felt their material + looked good enough. +* Shyness: some students probably lacked previous + experience communicating in public, and most are not English + native speakers, which could also be a limiting factor. + + +Although students did not identify the following as a reason + not to go public, likely, many of them did not feel + the need given the ready access to their mentors they + enjoyed. It is easy to grow used to such a dedicated source of + support and neglect to resort to other resources. Mentors + should have encouraged their students to pursue the public + discussion of projects, which constitutes one of the pillars of + Boost renowned quality. + + +### Scope of projects + + +In hindsight, it has become apparent that most projects were + too ambitious to be completed within the three months of + duration of the program, and even those that were considered a + success will need weeks or months of polishing up before the + material is ready for a formal review. In contrast with other + organizations participating in the Summer of Code program, + Boost has as of this writing included no results into its codebase. No formal review for any project has been requested yet, + either. + + +These scope issues are very dependent on the particular type + of project. We can classify the Boost projects for Summer of + Code as follows: + + +* Full-fledged libraries, +* additions to existing Boost libraries, +* utilities and tool projects using Boost. + + +Of these, additions (like for instance the max-flow min-cut + algorithm for BGL by Stephan Diederich) are the most suitable + for completion in a short period of time: most of the + preparation work is already done, and the student has clear + guides as to what coding and documentation standards to follow. + Also, these projects need not undergo a formal review, since it + is the responsibility of the hosting library author to review + the code and include it within her discretion. Utility projects + seem also suitable for small timeframes, though most project + proposals and requests are naturally oriented to contributions + of actual code to the Boost project. + + +As for those projects involving the design and realization + of full-fledged libraries, there is little hope that the goals + and scope can be kept modest enough for a three-month schedule. + Boost candidate libraries developed by professional authors + usually take much longer than three months to be accepted; some + libraries have been evolving through several *years* + before being included in Boost. So, the best we can hope for + if we are to support the realization of library projects for + Boost inside Summer of Code is that the results by the end of + the program can be evaluated to constitute a viable + *potential* contribution to Boost. When this is the case, + it is crucial that the student commits to further working on + the project up to completion and formal review. Perhaps more + important than getting libraries coded is to engage new authors + in a long-term relationship with the Boost project. + + +Suggestions for + improvement +---------------------------- + + +The following proposals aim to alleviate some of the + problems we have identified during the development of Summer of + Code within Boost. These action points are related only to the + issues found in connection with Boost: we are not addressing + other areas of improvement associated with the Summer of Code + program itself. + + +### Preparation + + +Much work can be done before the actual program begins. The + following preparation activities can already be launched: + + +**Create a pool of ideas for projects.** This + action will provide valuable extra time for evaluation and + refining of ideas before the Summer of Code begins. The + experience has shown that those projects with more preparation + work, especially in the area of design, were ultimately more + successful. The pool can also be used to retain interesting + ideas that arise on the mailing lists and very often are not + given proper attention and become abandoned. + + +**Create a student pool.** Prior involvement + with Boost is an advantage both in the selection phase + and later during project development. Those students with a + serious interest in participating in Summer of Code with Boost + can enter the pool and begin exploring ideas and interacting + with the community well in advance of the summer, to put + themselves in a favorable position for the selection. + Advertisement for the student pool can be initiated in the + beginning of 2007 through the usual channels (web site and + mailing lists): additionally, Boost members involved with the + University can spread this information locally and help raise + the interest of students in their environment. + + +**Create a mentor pool.** Given the rush with + which Boost entered the 2006 Summer of Code campaign, the + invitation of mentors has to be done on an on-demand basis as + it became all too evident that the task was growing bigger and + bigger. The organization must be better + prepared next year so that several people with the ability + and will to participate as Boost mentors are identified in + advance. + + +**Prepare a startup package.** In order to + facilitate the initial period of getting familiarized with the + various Boost guidelines, protocols and tools, it would be + extremely useful to prepare a compilation of startup material + for students. This package can consist of a single document + gathering the currently dispersed information, or go beyond + this and provide some bundle of documentation and pre-built + tools, an approach that one of the students is currently + working on. + + +### Public communication + + + students must get involved with the community + as soon as possible and grow to appreciate the advantages of + public development concerning solitary coding. + + +**Mandate (bi)weekly reports.** These reports + should be directed to the public mailing lists to allow all Boost members to follow the work in progress + and contribute. Reporting has the extra benefit for students of + forcing them to reflect on their work periodically and + struggle with the often difficult task of presenting their + ideas to others. + + +**Conduct student-mentor exclusively through public + channels.** This might be too drastic a policy, as some + matters need privacy and depending on the amount of + information exchanged flooding problems may arise. Less severe + variations involve allowing for some private interchange at the + mentors' discretion and moving this kind of communication to a + dedicated public mailing list different from the general + ones. + + +### Project management + + +The two most important issues to improve upon with respect + to the management are: + + +* Project scope must be kept under control, +* The progress has to be publicly visible, so that problems + of scope, design and/or schedule can be more easily + detected. + + +Some of the proposals in this section are not to be regarded + as strict rules, but rather as general guidelines to be kept in + mind by students and encouraged by mentors. + + +**Create a best practices document.** This + document can serve as a guideline for project management, an + area in which Boost traditionally imposes no requirements. + Students might lack the expertise in this area that is usually + taken for granted in the traditional model where contributions + to Boost are made by professional programmers. + + +**Mandate a design phase.** Having a concrete + design set up and clearly described early in the project will + help estimate the necessary effort for completion of the work. + This is also an opportunity for public discussion. + + +**Maintain code, docs and tests in parallel.** + All too often, novice programmers do the coding in one fell + swoop and only then move to testing and documenting their work. + This is unacceptable by all current methodology standards, and + can result in serious underestimations of the time to + completion. + + +**Encourage the KISS principle.** It is much + better to finish a simpler library and then iteratively evolve + it, once it has been exposed to public scrutiny and usage. + + +**More Trac updates.** The repository should be + viewed as an everyday work tool, not only as of the place into + which to dump the final results. Updating often leads to more + visibility of the work by the mentor and the public in + general. + + +**Informal reviews.** The typical Summer of + Code Boost project will not be completed by the official + deadline, as have been discussed earlier. To somehow + officialize the work done within the Summer of Code proper, and + also to allow the students to reach some sort of psychological + milestone, informal reviews can be instituted where Boost + members evaluate the work done at the end of Summer of + Code. + + +**Engage students.** This experience has shown + that it is possible to guide willing and bright students to the + competence levels required for contributing to Boost. The best + possible outcome of Summer of Code campaigns are the + incorporation of new people into the circle of Boost active + contributors. Strive to make the students commit to Boost. + + +Conclusions +----------- + + +Despite the lack of previous experience in Boost, our + participation in Google Summer of Code has been extremely + fruitful: much useful material has been produced, and, perhaps + more importantly, some of the students are likely to commit on + a long-term basis and grow to be regular Boost contributors. + Traditionally, becoming a productive Boost author has a very + high entry barrier due to the extreme quality standards, lack + of public support and the very specific culture of the project. + The appeal of Summer of Code itself and the possibility of + being gently mentored into the world of Boost has most likely + been key factors in lowering this entry barrier. + + +The process has not been without some difficulties, either, + as it was expected of a newcomer organization as Boost. We have + tried to identify in this paper the areas of improvement and + suggest specific actions so that the upcoming Google Summer of + Code 2007 can be an even more rewarding experience. + + +Acknowledgements +---------------- + + +This paper couldn't have been written without the numerous + reports and contributions kindly provided by Boost students and + mentors: Many thanks to all the participants for sharing their + experiences with me. Thank you also to the people at Google who + have promoted and conducted the Summer of Code initiative. + + + + + + +© Copyright 2006 Joaquín M López + Muñoz. + + diff --git a/community/imc_summer_of_code_2016.html b/community/imc_summer_of_code_2016.html new file mode 100644 index 0000000..1eec807 --- /dev/null +++ b/community/imc_summer_of_code_2016.html @@ -0,0 +1,58 @@ +--- +title: Boost C++ Libraries +copyright: Jon Kalb 2016. +revised: +--- + + +Boost C++ Libraries + + + +IMC Summer of Code 2016 +======================= + +[![IMC](../gfx/imc.png)](http://www.imc.com/) +Boost has participated in the Google Summer of Code program + for a decade and is very grateful for Google's generous past + support. This program allows college students to have a paid + summer internship working on open source projects, giving them + an interesting alternative to summer onsite internships. + Because the students that work on Boost libraries tend to stay + with the same libraries summer after summer, the continuity of + this program is important to Boost and to the students that + work on Boost projects. + + +Boost has traditionally been a model GSoC participant + receiving a more than average slot allocation, so we were + caught by surprise when Google rejected our 2016 application. + They asked us to apply again next year but to sit out 2016 to give open-source projects which don't normally get awarded + an opportunity. We understand this rationale, but this policy + would mean no summer internships for Boost and leave students + that have been working on Boost libraries looking for other + alternatives for the summer of 2016. + + +When [IMC Financial Markets](http://www.imc.com/) + learned about this situation, they saw it as an opportunity to + support the Boost community and demonstrate their commitment to + student development and open source. + + +IMC worked with Boost to create its own "Boost Summer of + Code" program, deliberately patterned after Google's program. + IMC also stepped up to underwrite all the costs of this program + for the summer of 2016. + + +We thank IMC for their support and community leadership. + + + + + + + + + diff --git a/community/implementation_variations.html b/community/implementation_variations.html new file mode 100644 index 0000000..f221237 --- /dev/null +++ b/community/implementation_variations.html @@ -0,0 +1,287 @@ +--- +title: Boost Implementation Variations +copyright: Beman Dawes 2001. +revised: +--- + + +Boost Implementation Variations + + + +Boost Implementation Variations +=============================== + +Separation of interface and implementation +------------------------------------------ + + +The interface specifications for boost.org library + components (as well as for quality software in general) are + conceptually separate from implementations of those interfaces. + This may not be obvious, particularly when a component is + implemented entirely within a header, but this separation of + interface and implementation is always assumed. From the + perspective of those concerned with software design, + portability, and standardization, the interface is what is + important, while the implementation is just a detail. + + +Dietmar Kühl, one of the original boost.org + contributors, comments "The main contribution is the interface, + which is augmented with an implementation, proving that it is + possible to implement the corresponding class and providing a + free implementation." + + +Implementation variations +------------------------- + + +There may be a need for multiple implementations of an + interface, to accommodate either platform dependencies or + performance tradeoffs. Examples of platform dependencies + include compiler shortcomings, file systems, thread mechanisms, + and graphical user interfaces. The classic example of a + performance tradeoff is a fast implementation that uses a lot + of memory versus a slower implementation which uses less + memory. + + +Boost libraries generally use a [configuration + header](/doc/libs/release/libs/config/config.htm), boost/config.hpp, to capture compiler and platform + dependencies. Although the use of boost/config.hpp is not + required, it is the preferred approach for simple configuration + problems. + + +Boost policy +------------ + + +The Boost policy is to avoid platform dependent variations + in interface specifications, but supply implementations which + are usable over a wide range of platforms and applications. + That means boost libraries will use the techniques below + described as appropriate for dealing with platform + dependencies. + + +The Boost policy toward implementation variations designed + to enhance performance is to avoid them unless the benefits + greatly exceed the full costs. The term "full costs" is + intended to include both tangible costs like extra maintenance, + and intangible cost like increased difficulty in user + understanding. + + +Techniques for providing implementation variations +-------------------------------------------------- + + +Several techniques may be used to provide implementation + variations. Each is appropriate in some situations, and not + appropriate in other situations. + + +### Single general purpose implementation + + +The first technique is to simply not provide implementation + variation at all. Instead, provide a single general-purpose + implementation, and forgo the increased complexity implied by + all other techniques. + + +**Appropriate:** When it is possible to write a + single portable implementation which has reasonable performance + across a wide range of platforms. Particularly appropriate when + alternative implementations differ only in esoteric ways. + + +**Not appropriate:** When implementation + requires platform specific features, or when there are multiple + implementation possible with widely differing performance + characteristics. + + +Beman Dawes comments "In design discussions, some + implementation is often alleged to be much faster than another, + yet a timing test discovers no significant difference. The + lesson is that while algorithmic differences may affect speed + dramatically, coding differences such as changing a class from + virtual to non-virtual members or removing a level of + indirection are unlikely to make any measurable difference + unless deep in an inner loop. And even in an inner loop, modern + CPUs often execute such competing code sequences in the same + number of clock cycles! A single general purpose implementation + is often just fine." + + +Or as Donald Knuth said, "Premature optimization is the root + of all evil." (Computing Surveys, vol 6, #4, p 268). + + +### Macros + + +While the evils of macros are well known, there remain a few + cases where macros are the preferred solution: + + +* Preventing multiple inclusion of headers via #include + guards. +* Passing minor configuration information from a + configuration header to other files. + + +**Appropriate:** For small compile-time + variations that would otherwise be costly or confusing to + install, use, or maintain. More appropriate to communicate + within and between library components than to communicate with + library users. + + +**Not appropriate:** If other techniques will + do. + + +To minimize the negative aspects of macros: + + +* Only use macros when they are clearly superior to other + techniques. They should be viewed as a last resort. +* Names should be all uppercase and begin with the + namespace name. This will minimize the chance of name + collisions. For example, the #include guard for a boost + header called foobar.h might be named BOOST\_FOOBAR\_H. + + +### Separate files + + +A library component can have multiple variations, each + contained in its own separate file or files. The files for the + most appropriate variation are copied to the appropriate + include or implementation directories at installation time. + + +The way to provide this approach in boost libraries is to + include specialized implementations as separate files in + separate sub-directories in the .ZIP distribution file. For + example, the structure within the .ZIP distribution file for a + library named foobar which has both default and specialized + variations might look something like: +``` + +foobar.h // The default header file +foobar.cpp // The default implementation file +readme.txt // Readme explains when to use which files +self\_contained/foobar.h // A variation with everything in the header +linux/foobar.cpp // Implementation file to replace the default +win32/foobar.h // Header file to replace the default +win32/foobar.cpp // Implementation file to replace the default + +``` + +**Appropriate:** When different platforms + require different implementations, or when there are major + performance differences between possible implementations. + + +**Not appropriate:** When it makes sense to use + more that one of the variations in the same installation. + + +### Separate components + + +Rather than have several implementation variations of a + single component, supply several separate components. For + example, the Boost library currently supplies + `scoped_ptr` and `shared_ptr` classes + rather than a single `smart_ptr` class parameterized + to distinguish between the two cases. There are several ways to + make the component choice: + + +* Hardwired by the programmer during coding. +* Chosen by programmer written runtime logic (trading off + some extra space, time, and program complexity for the + ability to select the implementation at run-time.) + + +**Appropriate:** When the interfaces for the + variations diverge, and when it is reasonable to use more than + one of the variations. When run-time selection of + implementation is called for. + + +**Not appropriate:** When the variations are + data type, traits, or specialization variations which can be + better handled by making the component a template. Also not + appropriate when choice of variation is best done by some setup + or installation mechanism outside of the program itself. Thus + usually not appropriate to cope with platform differences. + + +**Note:** There is a related technique where + the interface is specified as an abstract (pure virtual) base + class (or an interface definition language), and the + implementation choice is passed off to some third-party, such + as a dynamic-link library or object-request broker. While that + is a powerful technique, it is way beyond the scope of this + discussion. + + +### Template-based approaches + + +Turning a class or function into a template is often an + elegant way to cope with variations. Template-based approaches + provide optimal space and time efficiency in return for + constraining the implementation selection to compile time. + + +Important template techniques include: + + +* Data type parameterization. This allows a single + component to operate on a variety of data types and is why + templates were originally invented. +* Traits parameterization. If parameterization is complex, + bundling up aspects into a single traits helper class can + allow great variation while hiding messy details. The C++ + Standard Library provides several examples of this idiom, + such as `iterator_traits<>` (24.3.1 + lib.iterator.traits) and char\_traits<> (21.2 + lib.char.traits). +* Specialization. A template parameter can be used purely + for the purpose of selecting a specialization. For + example: +``` + +SomeClass my\_fast\_object; // fast and small are empty classes +SomeClass my\_small\_object; // used just to select specialization + +``` + +**Appropriate:** When the need for variation is + due to data type or traits or is performance-related like + selecting among several algorithms, and when a program might + reasonably use more than one of the variations. + + +**Not appropriate:** When the interfaces for + variations are different, or when choice of variation is best + done by some mechanism outside of the program itself. Thus + usually not appropriate to cope with platform differences. + + + + + + + + + diff --git a/community/index.html b/community/index.html new file mode 100644 index 0000000..6adaf67 --- /dev/null +++ b/community/index.html @@ -0,0 +1,50 @@ +--- +title: Community +copyright: Rene Rivera 2007. +revised: +--- +Community + + +/\*\*/ + + + +Community +========= + +Although Boost was begun by members of the C++ Standards + Committee Library Working Group, participation has expanded to + include thousands of programmers from the C++ community at + large. + + +If you are interested in participating in Boost, please join + our main [developers mailing + list](groups.html#main). Discussions are highly technical, and listed members + are encouraged to participate in formal reviews of proposed + libraries. There is also a [users + mailing list](groups.html#users), and several [project specific lists](groups.html#projects). + + +If you are looking for more lively interaction with the + Boost community there are also some [internet + relay chat](irc.html) channels (freenode) that users and developers + like to hang out in. + + +Below is a community maintained calendar of Boost related + events. Mostly, this includes development of the release. Note + that schedules slip and this might not be up to + date. + + + + + + + + + diff --git a/community/irc.html b/community/irc.html new file mode 100644 index 0000000..142dcf6 --- /dev/null +++ b/community/irc.html @@ -0,0 +1,66 @@ +--- +title: Boost IRC Hangouts +copyright: Rene Rivera 2007. +revised: +--- + + +Boost IRC Hangouts + + + +Boost IRC Hangouts +================== + +Boost users and developers spend time in various IRC + channels to generally work together. The attendance and traffic + of the channels vary greatly but there is usually someone + around to chat. And many times chat about just about any topic, + not just about the Boost C++ Libraries. + + +Even though the channels are not moderated in the strict + sense, for some there is the expectation that one should follow + the usual Boost discussion rules of civility. This is both as a + recognition that the Boost community is varied in age, and in + sensibilities. So please keep your language clean. And don't be + surprised if you find yourself reprimanded by the ops. + + +Our channels can be found on the [freenode](http://freenode.net/) network. + + +#boost +------ + + +This is the main channel, and as such sees a good deal of + traffic at times. Most times one can find about 80 "people" + (there are a few bots in there) and a good representation from + Boost developers. If you are looking for some quick help in + getting something in Boost working this is a good place to + go. + + +* [Connect](irc://freenode/boost) + + +##c++ +----- + + +This is rather chatty but topical, hence the ## in the name, + C++ language discussion channel. Many of the same people who + hang out in the #boost channel, also hang out here. + + +* [Connect](irc://freenode/%23%23c++) + + + + + + + + + diff --git a/community/moderators.html b/community/moderators.html new file mode 100644 index 0000000..81135fe --- /dev/null +++ b/community/moderators.html @@ -0,0 +1,72 @@ +--- +title: Moderators +copyright: Beman Dawes 2001-2004. +revised: +--- + + +Moderators + + + +Boost Moderators +================ + +The Boost moderators are [Dave Abrahams](/users/people/dave_abrahams.html), Carl + Daniel, [Beman + Dawes](/users/people/beman_dawes.html), [Jeff + Garland](/users/people/jeff_garland.html), [Doug + Gregor](/users/people/doug_gregor.html), and [John + Maddock](/users/people/john_maddock.html). You can reach the moderators at [boost-owner@lists.boost.org](mailto:boost-owner@lists.boost.org). + + +**Note:** The boost moderators do not moderate any + mailing lists other than the main Boost developers' list. For + example, the boost-users list moderators are at [boost-users-owner@lists.boost.org](mailto:boost-users-owner@lists.boost.org). + The moderators of [every other + Boost list](/community/groups.html) can be reached through its home page. + + +Moderator Functions +------------------- + + +* Monitor the mailing list to ensure dialog remains within + the acceptable boundaries set by the [discussion policy](/community/policy.html). When + discussion strays, use private email to gently remind, + strongly rebuke, or outright ban, as the situation + demands. + + +* Approve the initial postings of new (and thus still + moderated) members, and move members to the "Group Policy" + posting status. + + +* Administer the internal operations of the Boost web site, + the main Boost mailing list, the CVS repository, and other + Boost administrative machinery. + + +* Act as an executive committee overseeing important + administrative and policy decisions. Boost is a zero-budget + organization with no income and no expenses, so that + eliminates the need for most management. Technical decisions + are worked out on the mailing list. The moderators handle the + few remaining decisions that need a definite answer. + + +* Beyond the purely administrative duties, work to keep the + Boost community vibrant and alive. That may be as simple as + saying "thank you" to an individual member, or as complex as + starting some major new initiative. Do whatever it + takes! + + + + + + + + + diff --git a/community/official_library_maintainer_program.html b/community/official_library_maintainer_program.html new file mode 100644 index 0000000..492b0ef --- /dev/null +++ b/community/official_library_maintainer_program.html @@ -0,0 +1,88 @@ +--- +title: Boost Library Official Maintainer Program +copyright: Alex Olivas 2015. +revised: +--- + + +Boost Library Official Maintainer Program + + +/\*\*/ + + + +Boost Library Official Maintainer Program +========================================= + + +Introduction +------------ + + +The [Boost Community Maintenance Team](https://svn.boost.org/trac/boost/wiki/CommunityMaintenance) (CMT) has identified many Boost + libraries still used but not maintained actively. To protect the + reputation that Boost has cultivated over the years, as an + organization that provides high-quality open-source software, + all libraries bundled with Boost releases + have active and engaged maintainers. The purpose of the Boost + Library Official Maintainer Program is to recruit companies and + organizations, that are likely already providing internal support, + to become official maintainers of those libraries already important + to them. + + +In exchange for taking on maintenance of a library, Boost will + display the maintainer's logo below in the [Libraries and Participants](#libraries_and_participants) + section. Boost may also display the logo on the Boost github + and Trac sites. Maintainers are also allowed to use the [Boost Official Library + Maintainer Logo](blom_libraries/logos/blom_logo.png) on their own sites, presentations, + etc... + + +Applying to the Program +----------------------- + + +If you're interested in maintaining a Boost library : + + +1. Read the [Memorandum of + Understanding](blom_libraries/BLOM_MoU_v0.pdf), which outlines what's expected of + mainainers as well as terms for leaving the program. +2. Send an email to the program administrator ([Alex Olivas](mailto:olivas@icecube.umd.edu)) indicating + which library (or libraries) you'd like to maintain. + + +Thanks for helping out! + + +Libraries and + Participants +--------------------------- + + +[Boost.Function](blom_libraries/boost_function.html) - + Maintained by [The IceCube + Collaboration](http://www.icecube.wisc.edu) ![IceCube South Pole Neutrino Observatory](blom_libraries/logos/IceCube_horizontal2.jpg) + + +### Program Administrator + + +The Boost Library Official Maintainer Program is currently + administered by [Alex + Olivas](mailto:olivas@icecube.umd.edu). Feel free to send an email if you'd like more + information about the program. + + + + + +Revised 14 September 2015 + + + + diff --git a/community/policy.html b/community/policy.html new file mode 100644 index 0000000..80a934d --- /dev/null +++ b/community/policy.html @@ -0,0 +1,415 @@ +--- +title: Boost Discussion Policy +copyright: Beman Dawes, Rob Stewart, David Abrahams, 2000-2005. +revised: +--- + + +Boost Discussion Policy + + + +Boost Discussion Policy +======================= + +Email discussion is the tie that binds boost members + together into a community. If the discussion is stimulating and + effective, the community thrives. If the discussion degenerates + into name-calling and ill will, the community withers and + dies. + + +* [Acceptable Topics](#acceptable) +* [Unacceptable Topics](#unacceptable) +* [Effective Posting](#effective) + + [Well-Crafted Posting is Worth the Effort](#well-crafted) + + [Put the Library Name in the Subject Line](#subject-line) + + [Don't Use Tabs](#tabs) + + [Limit Line + Length](#longlines) + + [Don't Overquote, Don't Top-Post, and Do + Use Inline Replies for Readable Quotations](#quoting) + + [Keep the Formatting of Quotations Consistent](#formatting-quotations) + + [Summarizing and Referring to Earlier Messages](#summarizing-referring) + + [Maintain the Integrity of Discussion Threads](#discussion-threads) + + [Keep The Size of Your Posting Manageable](#max-size) +* [Prohibited Behavior](#behavior) + + [Flame wars](#flame-wars) + + [Third-party attacks](#third-party-attacks) + + [Off-topic posts](#off-topic-posts) +* [Culture](#culture) +* [Guidelines for Effective Discussions](#effective-discussions) +* [Library Names](#lib_names) + + +Acceptable + topics +------------------ + + +* Queries to determine interest in a possible library + submission. +* Technical discussions about a proposed or existing + library, including bug reports and requests for help. +* Formal Reviews of proposed libraries. +* Reports of user experiences with Boost libraries. +* Boost administration or policies. +* Compiler specific workarounds as applied to Boost + libraries. + + +Other topics related to boost development may be acceptable, + at the discretion of moderators. If unsure, go ahead and post. + The moderators will let you know. + + +Unacceptable + Topics +-------------------- + + +* Advertisements for commercial products. +* Requests for help getting non-boost code to compile with + your compiler. Try the comp.lang.c++.moderated newsgroup + instead. +* Requests for help interpreting the C++ standard. Try the + comp.std.c++ newsgroup instead. +* Job offers. +* Requests for solutions to homework assignments. + + +Effective + Posting +------------------ + + +Most Boost mailing lists host a great deal of traffic, so + your post is usually competing for attention with many other + communications. This section describes how to make sure it has + the desired impact. + + +### Well-Crafted Posting is Worth the Effort + + +Don't forget, you're a single writer but there are many + readers, and you want them to stay interested in what you're + saying. Saving your readers a little time and effort is usually + worth the extra time you spend when writing a message. Also, + boost discussions are saved for posterity, as rationales and + history of the work we do. A post's usefulness in the future is + determined by its readability. + + +### Put the Library Name in the Subject Line + + +When your post is related to a particular Boost library, + it's helpful to put the library name in square brackets at the + beginning of the subject line, e.g. +> +> Subject: [Regex] Why doesn't this pattern match? +> +> +> + + +The Boost developers' list is a high-volume mailing list, + and most maintainers don't have time to read every message. A + tag on the subject line will help ensure the right people see + your post. + + +### Don't Use Tabs + + +If you use tabs to indent your source code, convert them to + spaces before inserting the code in a posting. Something in the + processing chain usually strips all the indentation and leaves + a mess behind. + + +### Limit Line + Length + + +If you put source code in your postings and your mailer + wraps long lines automatically, either keep the code narrow or + insert the code as an (inline, if possible) attachment. That + will help ensure others can read what you've posted. + + +### Don't Overquote, Don't + Top-Post, and Do Use Inline Replies for Readable Quotations + + +Please **prune extraneous quoted text** from + replies so that only the relevant parts are included. It will + save time and make your post more valuable when readers do not + have to find out which exact part of a previous message you + are responding to. + + +Don't [top-post](http://en.wikipedia.org/wiki/Posting_style#Top-posting); + inline replies are the appropriate [posting style](http://en.wikipedia.org/wiki/Posting_style) + for Boost lists. + + +The common and very useful inline approach cites the small + fractions of the message you are actually responding to and + puts your response directly beneath each citation, with a blank + line separating them for readability: +``` +Person-you're-replying-to wrote: + +> Some part of a paragraph that you wish to reply to goes +> here; there may be several lines. + +Your response to that part of the message goes here. There may, +of course, be several lines. + +> The second part of the paragraph that is relevant to your +> reply goes here; again there may be several lines. + +Your response to the second part of the message goes here. +... + +``` + +For more information about effective use of quotation in + posts, see [this helpful guide](http://www.netmeister.org/news/learn2quote.html). + + +### Keep the Formatting of Quotations Consistent + + +Some email and news clients use poor word wrapping + algorithms that leave successive lines from the same quotation + with differing numbers of leading "`>`" + characters. **Microsoft Outlook** and + **Outlook Express**, and some web clients, are + especially bad about this. If your client offends in this way, + please take the effort to clean up the mess it makes in quoted + text. Remember, even if you didn't write the original text, + it's *your* posting; whether you get your point across + depends on its readability. + + +The Microsoft clients also create an unusually verbose + header at the beginning of the original message text and leave + the cursor at the beginning of the message, which encourages + users to write their replies before all of the quoted text + rather than putting the reply in context. Fortunately, Dominic + Jain has written a utility that fixes all of these problems + automatically: [Outlook Quotefix](http://home.in.tum.de/~jain/software/outlook-quotefix/) for Outlook Users and [OE QuoteFix](http://home.in.tum.de/~jain/software/oe-quotefix/) for users of Outlook Express. + + +### Summarizing and Referring to Earlier Messages + + +A summary of the foregoing thread is only needed after a + long discussion, especially when the topic is drifting or a + result has been achieved in a discussion. The mail system will + do the tracking that is needed to enable mail readers to + display message threads (and every decent mail reader supports + that). + + +If you ever have to refer to single message earlier in a + thread or in a different thread then you can use a URL to the + [message archives](groups.html#archive). To help to + keep those URLs short, you can use [tinyurl.com](http://tinyurl.com). Citing the relevant portion + of a message you link to is often helpful (if the citation is + small). + + +### Maintain the Integrity of Discussion Threads + + +**When starting a new topic, always send a fresh + message**, rather than beginning a reply to some other + message and replacing the subject and body. Many mailers can detect the thread you started with and will show the + new message as part of the original thread, which probably + isn't what you intended. Follow this guideline for your own + sake as well as for others'. Often, people scanning for + relevant messages will decide they're done with a topic and + hide or kill the entire thread: your message will be missed, + and you won't get the response you're looking for. + + +By the same token, **When replying to an existing + message, use your mailer's "Reply" function**, so that + the reply shows up as part of the same discussion thread. + + +**Do not reply to digests** if you are a digest + delivery subscriber. Your reply will not be properly threaded + and will probably have the wrong subject line. Instead, you can + reply through the [GMane web interface](http://news.gmane.org/gmane.comp.lib.boost.devel). + + +### Keep The Size of Your Posting Manageable + + +The mailing list software automatically limits message and + attachment size to a reasonable amount, typically 75K, which is + adjusted from time-to-time by the moderators. This limit is a + courtesy to those who rely on dial-up Internet access and let's + face it, no one wants to read a posting that consists of 75K of + error message text. + + +Prohibited + Behavior +-------------------- + + +Prohibited behavior will not be tolerated. The moderators + will ban postings by abusers. + + +### Flame wars + + +Personal insults, argument for the sake of argument, and all + the other behaviors which fall into the "flame war" category + are prohibited. Discussions should focus on technical + arguments, not the personality traits or motives of + participants. + + +### Third-party attacks + + +Attacks on third parties such as software vendors, hardware + vendors, or any other organizations, are prohibited. Boost + exists to unite and serve the entire C++ community, not to + disparage the work of others. + + +Does this mean that we ban the occasional complaint or wry + remark about a troublesome compiler? No, but be wary of + overdoing it. + + +### Off-topic posts + + +Discussions that stray from the acceptable topics are + strongly discouraged. While off-topic posts are often well + meaning and not as individually corrosive as other abuses, + cumulatively the distraction damages the effectiveness of + discussion. + + +Culture +------- + + +In addition to technical skills, Boost members value + collaboration, acknowledgment of the help of others, and a + certain level of politeness. Boost membership is very + international, and ranges widely in age and other + characteristics. Think of discussion as occurring among + colleagues in a widely read forum, rather than among a few + close friends. + + +Always remember that the cumulative effort spent by people + reading your contribution scales with the (already large) + number of boost members. Thus, do invest time and effort to + make your message as readable as possible. Adhere to English + syntax and grammar rules such as proper capitalization. Avoid + copious informalism, colloquial language, or abbreviations, + they may not be understood by all readers. Re-read your message + before submitting it. + + +Guidelines for Effective Discussions +------------------------------------ + + +Apply social engineering to prevent heated technical + discussion from degenerating into a shouting match, and to + actively encourage the cooperation upon which Boost + depends. + + +* Questions help. If someone suggests something that you + don't think will work, then replying with a question like + "will that compile?" or "won't that fail to compile, or am I + missing something?" is a lot smoother than "That's + stupid - it won't compile." Saying "that fails to compile for + me, and seems to violate section n.n.n of the standard" would + be yet another way to be firm without being abrasive. +* If most of the discussion has been code-free + generalities, posting a bit of sample code can focus people + on the practical issues. +* If most of the discussion has been in terms of specific + code, try to talk a bit about hidden assumptions and + generalities that may be preventing discussion closure. +* Taking a time-out is often effective. Just say: "Let me + think about that for a day or two. Let's take a time-out to + digest the discussion so far." + + +Avoid ***Parkinson's Bicycle Shed***. + Parkinson described a committee formed to oversee design of an + early nuclear power plant. There were three agenda items - when + to have tea, where to put the bicycle shed, and how to ensure + nuclear safety. Tea was disposed of quickly as trivial. Nuclear + safety was discussed for only an hour - it was so complex, + scary, and technical that even among experts few felt + comfortable with the issues. Endless days were then spent + discussing construction of the bicycle shed (the parking lot + would be the modern equivalent) because everyone thought they + understood the issues and felt comfortable discussing them. + + +Library Names +------------- + + +In order to ensure a uniform presentation in books and + articles, we have adopted a convention for referring to Boost + libraries. Library names can either be written in a compact + form with a dot, as "Boost.Name", or in a long form + as "the Boost Name library." For example: +> +> **Boost.Python** serves a very different +> purpose from **the Boost Graph library**. +> +> +> + + +Note that the word "library" is not part of the name, and as + such isn't capitalized. + + +Please take care to avoid confusion in discussions between + libraries that have been accepted into Boost and those that + have not. Acceptance as a Boost library indicates that the code + and design have passed through our peer-review process; failing + to make the distinction devalues the hard work of library + authors who've gone through that process. Here are some + suggested ways to describe potential Boost libraries: + + +* the proposed Boost Name library +* the Boost.Name candidate +* the Name library (probably the best choice + where applicable) + + +Note that this policy only applies to discussions, not to + the documentation, directory structure, or even identifiers in + the code of potential Boost libraries. + + + + + + + + diff --git a/community/requests.html b/community/requests.html new file mode 100644 index 0000000..446a117 --- /dev/null +++ b/community/requests.html @@ -0,0 +1,43 @@ +--- +title: Requesting New Features +copyright: +revised: +--- + + +Requesting New Features + + + +Requesting new features for Boost libraries +=========================================== + +If you have an idea for a feature or improvement to an + existing Boost library - go ahead and post it to either + [boost-users list](/community/groups.html#users) or + [boost mailing list](/community/groups.html#main) + (if you are posting for the first time, please read our + [discussion + policy](https://www.boost.org/more/discussion_policy.htm) before you actually post). + + +You can also try submitting a feature request to our + [issue tracker](https://github.com/boostorg/) + on GitHub, but experience has shown that posting to either of the mailing lists is usually a more effective way to get attention + of boost developers. + + +If your proposal has its merits, it's very likely that it + will generate a constructive discussion that might actually + result in (sometimes substantial) improvement of the library - + and your name being put on the library's [Acknowledgements](/development/requirements.html#Acknowledgements) + section! + + + + + + +© html) 2002 + + diff --git a/community/review_schedule.html b/community/review_schedule.html new file mode 100644 index 0000000..722b3a6 --- /dev/null +++ b/community/review_schedule.html @@ -0,0 +1,456 @@ +--- +title: Boost Formal Review Schedule +copyright: Beman Dawes, Tom Brinkman, Jeff Garland, 2001-2005. +revised: +--- + + +Boost Formal Review Schedule + + + +Boost Formal Review Schedule +============================ + +Reviews are scheduled when the review wizards approve a + review manager and agree with the manager and author on dates. + See [Formal Review Process](reviews.html) for more + information. + + +In addition to upcoming reviews, the schedule includes + recent reviews already completed; that helps track review + manager assignments and libraries reviewed but not yet posted + on the website. There is often a lag between acceptance and + site posting as authors address issues raised in the formal + review. + + +Schedule +-------- + +| Submission | Submitter | Link | Review Manager | Review Dates | +| --- | --- | --- | --- | --- | +| URL | Vinnie Falco, Alan de Freitas | * [Github](https://github.com/CPPAlliance/url) +* [Documentation](https://master.url.cpp.al/) + | [Klemens Morgenstern](https://lists.boost.org/Archives/boost/2022/06/253225.php) | August 13, 2022 - August 22, 2022 | +| Text (mini-review) | Zach Laine | * [Github](https://github.com/tzlaine/text) +* [Documentation](https://tzlaine.github.io/text) + | [Needed!](https://lists.boost.org/Archives/boost/2020/08/249594.php) | - | + + +Past Review Results and Milestones +---------------------------------- + +| Submission | Submitter | Review Manager | Review Dates | Result | +| --- | --- | --- | --- | --- | +| MySQL | Ruben Perez | Richard Hodges | May 9, 2022 - May 18, 2022 | ~~[Pending](https://lists.boost.org/Archives/boost/2022/05/252898.php)~~ +[Accepted](https://lists.boost.org/Archives/boost//2022/06/253193.php) || Lambda2 | Peter Dimov | Joel de Guzman | March 22, 2021 - March 31, 2021 | ~~[Pending](https://lists.boost.org/Archives/boost/2021/03/251218.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2021/04/251393.php) || Describe | Peter Dimov | Richard Hodges | March 1, 2021 - March 10, 2021 | ~~[Pending](https://lists.boost.org/Archives/boost/2021/02/250933.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2021/03/251099.php) | +| PFR(Precise and Flat Reflection) | Antony Polukhin | Benedek Thaler | September 28, 2020 - October 7, 2020 | ~~[Pending](https://lists.boost.org/Archives/boost/2020/09/250077.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2020/10/250176.php) | +| JSON | Vinnie Falco, Krystian Stasiowski | Pranam Lashkari | September 14, 2020 - September 23, 2020 | ~~[Pending](https://lists.boost.org/Archives/boost/2020/09/249708.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2020/10/250129.php) | +| LEAF(Lightweight Error Augmentation Framework) | Emil Dotchevski | Michael Caisse | May 22, 2020 - May 31, 2020 | ~~[Pending](https://lists.boost.org/Archives/boost/2020/05/248850.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2020/08/249657.php) | +| Text | Zach Laine | Glen Fernandes | June 11, 2020 - June 20, 2020 | ~~[Pending](https://lists.boost.org/Archives/boost/2020/06/249094.php)~~ +[Rejected](https://lists.boost.org/Archives/boost/2020/06/249242.php) | +| Review Wizard Status Report | | Mateusz Loskot | May 20, 2020 | [Report](https://lists.boost.org/Archives/boost/2020/05/248944.php) | +| Boost 1.73.0 Released | | Marshall Clow | April 28, 2020 | [Notes](https://www.boost.org/users/history/version_1_73_0.html) | +| Boost 1.72.0 Released | | Marshall Clow | December 11, 2019 | [Notes](https://www.boost.org/users/history/version_1_72_0.html) | +| STLInterfaces | Zach Laine | Barrett Adair | December 10, 2019 - December 19, 2019 | ~~[Pending](https://lists.boost.org/boost-announce/2019/12/0564.php)~~ +[Conditionally Accepted](https://lists.boost.org/boost-announce/2019/12/0568.php) | +| StaticString (was FixedString) | Krystian Stasiowski and Vinnie Falco | Joaquin M López Muñoz | November 25, 2019 - December 4, 2019 | ~~[Pending](https://lists.boost.org/boost-announce/2019/11/0563.php)~~ +[Accepted -- Added in 1.73](https://lists.boost.org/Archives/boost/2020/02/248229.php) | +| Boost 1.71.0 Released | | Marshall Clow | August 19, 2019 | [Notes](https://www.boost.org/users/history/version_1_71_0.html) | +| out\_ptr | JeanHeyd Meneide | Zach Laine | June 16, 2019 - July 10, 2019 | ~~[Pending](https://lists.boost.org/boost-announce/2019/06/0556.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2019/07/0558.php) | +| Boost 1.70.0 Released | | Marshall Clow | April 12, 2019 | [Notes](https://www.boost.org/users/history/version_1_70_0.html) | +| Variant2 | Peter Dimov | Michael Caisse | April 1, 2019 - April 15, 2019 | ~~[Ongoing](https://lists.boost.org/Archives/boost/2019/03/245563.php)~~ +[Accepted -- Added in 1.71](https://lists.boost.org/boost-announce/2019/06/0553.php) | +| Boost 1.69.0 Released | | Marshall Clow | December 11, 2018 | [Notes](https://www.boost.org/users/history/version_1_69_0.html) | +| Histogram | Hans Dembinski | Mateusz Loskot | September 17, 2018 - September 26, 2018 | ~~[Pending](https://lists.boost.org/boost-announce/2018/09/0544.php)~~ +[Accepted -- Added in 1.70](https://lists.boost.org/boost-announce/2018/10/0548.php) | +| Boost 1.68.0 Released | | Marshall Clow | August 09, 2018 | [Notes](https://www.boost.org/users/history/version_1_68_0.html) | +| Boost 1.67.0 Released | | Daniel James | April 16, 2018 | [Notes](https://www.boost.org/users/history/version_1_67_0.html) | +| YAP | Zach Laine | Louis Dionne | February 5, 2018 - February 14, 2018 | ~~[Ongoing](https://lists.boost.org/boost-announce/2018/02/0537.php) +[Conditionally Accepted](https://lists.boost.org/boost-announce/2018/03/0540.php)~~ +[Accepted -- Added in 1.70](https://lists.boost.org/boost-announce/2018/06/0542.php) | +| Outcome | Niall Douglas | Charley Bay | January 19, 2018 - January 28, 2018 | ~~[Pending](https://lists.boost.org/boost-announce/2018/01/0533.php)~~ +[Accepted -- Added in 1.70](https://lists.boost.org/boost-announce/2018/02/0536.php) | +| Boost 1.66.0 Released | | Daniel James | December 19, 2017 | [Notes](https://www.boost.org/users/history/version_1_66_0.html) | +| Double-Ended | Benedek Thaler | Thorsten Ottosen | September 21, 2017 - October 7, 2017 | ~~[Pending](https://lists.boost.org/boost-announce/2017/09/0528.php)~~ +[Conditionally Accepted](https://lists.boost.org/boost-announce/2017/10/0530.php) | +| Fit (now HOF) | Paul Fultz | Matt Calabrese | September 8, 2017 - September 20, 2017 | ~~[Pending](https://lists.boost.org/boost-announce/2017/09/0526.php)~~ +[Accepted -- Added in 1.67](https://lists.boost.org/boost-announce/2017/09/0529.php) | +| Boost 1.65.1 Released | | Daniel James | September 7, 2017 | [Notes](https://www.boost.org/users/history/version_1_65_1.html) | +| Boost 1.65.0 Released | | Daniel James | August 21, 2017 | [Notes](https://www.boost.org/users/history/version_1_65_0.html) | +| mp11 | Peter Dimov | Bjorn Reese | July 15, 2017 - July 24, 2017 | ~~[Ongoing](https://lists.boost.org/boost-announce/2017/07/0519.php)~~ +[Accepted -- Added in 1.66](https://lists.boost.org/boost-announce/2017/08/0520.php) | +| Beast | Vinnie Falco | Michael Caisse | July 1, 2017 - July 10, 2017 | ~~[Pending](https://lists.boost.org/boost-announce/2017/06/0515.php)~~ +[Accepted -- Added in 1.66](https://lists.boost.org/Archives/boost/2017/07/237385.php) | +| pdqsort | Orson Peters | Steven Ross | June 21, 2017 - June 30, 2017 | [Accepted](https://lists.boost.org/boost-announce/2017/06/0518.php) | +| Nowide | Artyom Beilis | Frédéric Bron | June 12, 2017 - June 21, 2017 | ~~[Pending](https://lists.boost.org/boost-announce/2017/06/0512.php)~~ +[Accepted -- Added in 1.73](https://lists.boost.org/boost-announce/2017/06/0516.php) | +| Timsort | Alexander Zaitsev | Steven Ross | June 3, 2017 - June 12, 2017 | ~~[Ongoing](https://lists.boost.org/boost-announce/2017/06/0509.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2017/06/0513.php) | +| Outcome | Niall Douglas | Charley Bay | May 19, 2017 - May 28, 2017 | ~~[Pending](https://lists.boost.org/boost-announce/2017/05/0504.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2017/06/0510.php) | +| PolyCollection | Joaquín Mª López Muñoz | Ion Gaztañaga | May 3, 2017 - May 12, 2017 | ~~[Ongoing](https://lists.boost.org/boost-announce/2017/05/0502.php)~~ +[Accepted -- Added in 1.65](https://lists.boost.org/boost-announce/2017/05/0505.php) | +| Boost 1.64.0 Released | | Rene Rivera | April 19, 2017 | [Notes](https://www.boost.org/users/history/version_1_64_0.html) | +| CallableTraits | Barrett Adair | Louis Dionne | April 3, 2017 - April 12, 2017 | ~~[Ongoing](https://lists.boost.org/Archives/boost/2017/03/234005.php)~~ +[Conditionally Accepted -- Added in 1.66](https://lists.boost.org/Archives/boost/2017/04/234513.php) | +| Stacktrace | Antony Polukhin | Niall Douglas | March 17, 2017 - March 26, 2017 | ~~[Ongoing](https://lists.boost.org/boost-announce/2017/03/0493.php)~~ +[Accepted -- Added in 1.65](https://lists.boost.org/boost-announce/2017/03/0496.php) | +| Safe Numerics | Robert Ramey | Andrzej Krzemienski | March 2, 2017 - March 16, 2017 | ~~[Ongoing](https://lists.boost.org/boost-announce/2017/03/0491.php)~~ +[Conditionally Accepted -- Added in 1.69](https://lists.boost.org/boost-announce/2017/03/0494.php) | +| Boost 1.63.0 Released | | Marshall Clow | December 26, 2016 | [Notes](https://www.boost.org/users/history/version_1_63_0.html) | +| Stacktrace | Antony Polukhin | Niall Douglas | December 14, 2016 - December 23, 2016 | ~~[Pending](https://lists.boost.org/boost-announce/2016/12/0483.php)~~ +[Conditionally Accepted](https://lists.boost.org/boost-announce/2017/01/0486.php) | +| Synapse | Emil Dotchevski | Edward Diener | December 2, 2016 - December 11, 2016 | ~~[Pending](https://lists.boost.org/boost-announce/2016/12/0479.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2016/12/0484.php) | +| Parallel Sorting Sub-library | Francisco José Tapia | Steven Ross | November 11, 2016 - November 20, 2016 | ~~[Pending](https://lists.boost.org/Archives/boost/2016/11/231544.php)~~ +[Accepted](https://lists.boost.org/Archives/boost/2016/11/231732.php) | +| Process | Klemens Morgenstern | Antony Polukhin | October 27, 2016 - November 5, 2016 | ~~[Pending](https://lists.boost.org/boost-announce/2016/10/0476.php)~~ +[Accepted -- Added in 1.64](https://lists.boost.org/boost-announce/2016/11/0477.php) | +| Boost 1.62.0 Released | | Rene Rivera | September 28, 2016 | [Notes](https://www.boost.org/users/history/version_1_62_0.html) | +| Fiber (mini-review) | Oliver Kowalke | Nat Goodspeed | May 23, 2016 - June 2, 2016 | ~~[Pending](https://lists.boost.org/boost-announce/2016/05/0473.php)~~ +[Accepted -- Added in 1.62](https://lists.boost.org/boost-announce/2016/06/0474.php) | +| Review Wizard Status Report | | Ronald Garcia | May 19, 2016 | [Report](https://lists.boost.org/boost-announce/2016/05/0471.php) | +| Boost 1.61.0 Released | | Rene Rivera | May 13, 2016 | [Notes](https://www.boost.org/users/history/version_1_61_0.html) | +| Fit | Paul Fultz | Vicente Botet | March 2, 2016 - March 13, 2016 | ~~[Ongoing](https://lists.boost.org/Archives/boost/2016/03/228107.php)~~ +[Rejected](https://lists.boost.org/Archives/boost/2016/04/228770.php) | +| Quaternions, Vectors, Matrices (QVM) | Emil Dotchevski | Adam Wulkiewicz | December 7, 2015 - December 23, 2015 | ~~[Ongoing](https://lists.boost.org/boost-announce/2015/12/0458.php)~~ +[Accepted -- Added in 1.62](https://lists.boost.org/Archives/boost/2016/01/227027.php) | +| Boost 1.60.0 Released | | Marshall Clow | December 17, 2015 | [Notes](https://www.boost.org/users/news/version_1_60_0) | +| Fiber (mini-review) | Oliver Kowalke | Nat Goodspeed | September 4, 2015 - September 13, 2015 | ~~[Pending](https://lists.boost.org/boost-announce/2015/09/0453.php)~~ +[Continuing Conditionally Accepted](https://lists.boost.org/boost-announce/2015/10/0456.php) | +| Asynchronous File I/O | Niall Douglas and + Paul Kirth | Ahmed Charles | August 21, 2015 - August 31, 2015 | ~~[Pending](https://lists.boost.org/boost-announce/2015/08/0451.php)~~ + Rejected (no result posted) + | +| Boost 1.59.0 Released | | Marshall Clow | August 13, 2015 | [Notes](https://www.boost.org/users/news/version_1_59_0) | +| Http | Vinícius dos Santos Oliveira | Bjorn Reese | August 7, 2015 - August 16, 2015 | ~~[Pending](https://lists.boost.org/boost-announce/2015/08/0449.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2015/08/0452.php) | +| DLL | Antony Polukhin | Vladimir Prus | June 29, 2015 - July 12, 2015 | ~~[Pending](https://lists.boost.org/Archives/boost/2015/07/223995.php)~~ +[Accepted -- Added in 1.61](https://lists.boost.org/boost-announce/2015/07/0448.php) | +| Hana | Louis Dionne | Glen Fernandes | June 10, 2015 - June 24, 2015 | [Accepted -- Added in 1.61](https://lists.boost.org/boost-announce/2015/07/0443.php) | +| Metaparse | Abel Sinkovics | Christophe Henry | May 25, 2015 - June 7, 2015 | ~~[Pending](https://lists.boost.org/Archives/boost/2015/05/222478.php)~~ +[Accepted -- Added in 1.61](https://lists.boost.org/boost-announce/2015/07/0446.php) | +| Boost 1.58.0 Released | | Marshall Clow | April 17, 2015 | [Notes](https://www.boost.org/users/news/version_1_58_0) | +| Endian Mini-Review | Beman Dawes | Joel Falcou | January 23, 2015 - February 1, 2015 | ~~[Ongoing](https://lists.boost.org/boost-announce/2015/01/0428.php)~~ +[Accepted -- Added in 1.58](https://lists.boost.org/Archives/boost/2015/02/220090.php) | +| Review Wizard Status Report | | Ronald Garcia | January 22, 2015 | [Report](https://lists.boost.org/boost-announce/2015/01/0427.php) | +| Compute | Kyle Lutz | Antony Polukhin | December 15, 2014 - December 30, 2014 | ~~[Ongoing](https://lists.boost.org/boost-announce/2014/12/0423.php)~~ [Accepted -- Added in 1.61](https://lists.boost.org/boost-announce/2015/01/0425.php) | +| Sort | Steven Ross | Edward Diener | November 10, 2014 - November 19, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/11/0421.php)~~ [Accepted + -- Added in 1.58](https://lists.boost.org/boost-announce/2014/11/0422.php) | +| Boost 1.57.0 Released | | Marshall Clow | November 3, 2014 | [Notes](https://www.boost.org/users/news/version_1_57_0) | +| Review Wizard Status Report | | Ronald Garcia | August 30, 2014 | [Report](https://lists.boost.org/boost-announce/2014/08/0414.php) | +| Variadic Macro Data | Edward Diener | Steven Watanabe | August 21, 2014 - August 30, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/08/0413.php)~~ +[Accepted -- Added in 1.60](https://lists.boost.org/boost-announce/2015/02/0432.php) | +| Boost 1.56.0 Released | | Marshall Clow | August 7, 2014 | [Notes](https://www.boost.org/users/news/version_1_56_0) | +| Convert | Vladimir Batov | Edward Diener | May 12, 2014 - May 25, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/05/0403.php)~~ +[Accepted](https://lists.boost.org/boost-announce/2014/06/0406.php) | +| TypeIndex Mini-Review | Antony Polukhin | Niall Douglas | April 21, 2014 - April 30, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/04/0399.php)~~ +[Accepted + -- Added in 1.56](https://lists.boost.org/boost-announce/2014/05/0402.php) | +| Align | Glen Fernandes | Ahmed Charles | April 11, 2014 - April 20, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/04/0398.php)~~ +[Accepted + -- Added in 1.56](https://lists.boost.org/boost-announce/2014/04/0400.php) | +| Fiber | Oliver Kowalke | Nat Goodspeed | January 6, 2014 - January 15, 2014 | ~~[Pending](https://lists.boost.org/boost-announce/2014/01/0392.php)~~ +[Conditionally + Accepted](https://lists.boost.org/boost-announce/2014/01/0393.php) | +| TypeIndex | Antony Polukhin | Niall Douglas | November 11, 2013 - November 20, 2013 | ~~[Conditionally + Accepted](https://lists.boost.org/boost-announce/2013/11/0389.php)~~ | +| Boost 1.55.0 Released | | Marshall Clow | November 11, 2013 | [Notes](https://www.boost.org/users/news/version_1_55_0) | +| Boost 1.54.0 Released | | Marshall Clow | July 1, 2013 | [Notes](https://www.boost.org/users/news/version_1_54_0) | +| Review Wizard Status Report | | Ronald Garcia | March 14, 2013 | [Report](https://lists.boost.org/boost-announce/2013/03/0378.php) | +| Boost 1.53.0 Released | | Marshall Clow | February 4, 2013 | [Notes](https://www.boost.org/users/news/version_1_53_0) | +| Review Wizard Status Report | | Ronald Garcia | November 10, 2012 | [Report](https://lists.boost.org/boost-announce/2012/11/0374.php) | +| Boost 1.52.0 Released | | Marshall Clow | October 5, 2012 | [Notes](https://www.boost.org/users/news/version_1_52_0) | +| Review Wizard Status Report | | Ronald Garcia | September 27, 2012 | [Report](https://lists.boost.org/boost-announce/2012/09/0370.php) | +| ODEint | Karsten Ahnert and + Mario Mulansky | Steven Watanabe | September 19, 2012 - September 28, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/09/0369.php)~~ +[Accepted + -- Added in 1.53](https://lists.boost.org/boost-announce/2012/10/0371.php) | +| Coroutine | Oliver Kowalke | Hartmut Kaiser | September 3, 2012 - September 12, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/09/0366.php)~~ +[Accepted + -- Added in 1.53](https://lists.boost.org/boost-announce/2012/11/0375.php) | +| Contract | Lorenzo Caminiti | Dave Abrahams | August 22, 2012 - August 31, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/08/0362.php)~~ +[Accepted -- Added in 1.67](https://lists.boost.org/boost-announce/2012/09/0368.php) | +| Boost 1.51.0 Released | | Marshall Clow | August 20, 2012 | [Notes](https://www.boost.org/users/news/version_1_51_0) | +| Review Wizard Status Report | | Ronald Garcia | August 15, 2012 | [Report](https://lists.boost.org/boost-announce/2012/08/0360.php) | +| Type Erasure | Steven Watanabe | Lorenzo Caminiti | July 18, 2012 - July 27, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/07/0357.php)~~ +[Accepted + -- Added in 1.54](https://lists.boost.org/boost-announce/2012/08/0364.php) | +| Review Wizard Status Report | | Ronald Garcia | July 13, 2012 | [Report](https://lists.boost.org/boost-announce/2012/07/0355.php) | +| Boost 1.50.0 Released | | Beman Dawes | June 28, 2012 | [Notes](https://www.boost.org/users/news/version_1_50_0) | +| Multiprecision Arithmetic | John Maddock | Jeffrey Hellrung | June 8, 2012 - June 17, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/06/0353.php)~~ +[Accepted + -- Added in 1.53](https://lists.boost.org/boost-announce/2012/08/0359.php) | +| Boost 1.49.0 Released | | Beman Dawes | February 24, 2012 | [Notes](https://www.boost.org/users/news/version_1_49_0) | +| Predef | Rene Rivera | Joel Falcou | February 20, 2012 - February 29, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/02/0349.php)~~ +[Accepted + -- Added in 1.55](https://lists.boost.org/boost-announce/2013/04/0379.php) | +| Review Wizard Status Report | | Ronald Garcia | January 10, 2012 | [Report](https://lists.boost.org/boost-announce/2012/01/0344.php) | +| Context (mini-review) | Oliver Kowalke | Giovanni Deretta | January 2, 2012 - January 11, 2012 | ~~[Pending](https://lists.boost.org/boost-announce/2012/01/0343.php)~~ +[Accepted + -- Added in 1.51.0](https://lists.boost.org/boost-announce/2012/01/0348.php) | +| Boost 1.48.0 Released | | Beman Dawes | November 16, 2011 | [Notes](https://www.boost.org/users/news/version_1_48_0) | +| Local | Lorenzo Caminiti | Jeffrey Hellrung | November 10, 2011 - November 19, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/11/0338.php)~~ +[Accepted + -- Added in 1.50](https://lists.boost.org/boost-announce/2011/12/0340.php) | +| Atomic | Helge Bahmann | Tim Blechmann | October 17, 2011 - October 26, 2011 | [Accepted + -- Added in 1.53](https://lists.boost.org/boost-announce/2011/11/0337.php) | +| Algorithm | Marshall Clow | Dave Abrahams | September 22, 2011 - October 1, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/09/0333.php)~~ +[Accepted + -- Added in 1.50](https://lists.boost.org/boost-announce/2011/12/0341.php) | +| Endian | Beman Dawes | Joel Falcou | September 5, 2011 - September 14, 2011 | [Conditionally + Accepted](https://lists.boost.org/boost-announce/2011/11/0336.php) | +| Conversion | Vicente Botet | Gordon Woodhull | August 20, 2011 - August 29, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/08/0330.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2012/07/0356.php) | +| Containers | Ion Gaztañaga | John Maddock | August 3, 2011 - August 12, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/08/0329.php)~~ +[Accepted -- Added in 1.48.0](https://lists.boost.org/Archives/boost/2011/08/184936.php) | +| Lockfree | Tim Blechmann | Hartmut Kaiser | July 18, 2011 - July 27, 2011 | [~~Pending~~](https://lists.boost.org/boost-announce/2011/07/0324.php) +[Accepted + -- Added in 1.53](https://lists.boost.org/boost-announce/2011/08/0331.php) | +| Boost 1.47.0 Released | | Beman Dawes | July 12, 2011 | [Notes](https://www.boost.org/users/news/version_1_47_0) | +| Type Traits Introspection | Edward Diener | Joel Falcou | July 1, 2011 - July 10, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/06/0320.php)~~ +~~[Pending](https://lists.boost.org/boost-announce/2011/07/0322.php)~~ +[Accepted + -- Added in 1.54](https://lists.boost.org/boost-announce/2011/08/0328.php) | +| Assign v2 | Erwann Rogard, + Thorsten Ottosen | John Bytheway | June 15, 2011 - June 24, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/06/0315.php)~~ +~~[Pending](https://lists.boost.org/boost-announce/2011/06/0319.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2011/07/0321.php) | +| Heaps | Tim Blechmann | Andrew Sutton | May 30, 2011 - June 8, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/05/0314.php)~~ +[Accepted + -- Added in 1.49](https://lists.boost.org/boost-announce/2011/06/0316.php) | +| Review Wizard Status Report | | Ronald Garcia | May 23, 2011 | [Report](https://lists.boost.org/boost-announce/2011/05/0311.php) | +| AutoIndex (Tool) | John Maddock | Daniel James | May 5, 2011 - May 14, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/05/0308.php)~~ +[Accepted + -- Added in 1.48.0](https://lists.boost.org/boost-announce/2011/05/0312.php) | +| Convert | Vladimir Batov | Edward Diener | April 23, 2011 - May 2, 2011- | ~~[Pending](https://lists.boost.org/boost-announce/2011/04/0302.php)~~ +[Withdrawn](https://lists.boost.org/boost-announce/2011/05/0307.php) +[(Report)](https://lists.boost.org/boost-announce/2011/05/0309.php) | +| Locale | Artyom Beilis | Chad Nelson | April 7, 2011 - April 16, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/04/0298.php)~~ +~~[Pending](https://lists.boost.org/boost-announce/2011/04/0303.php)~~ +[Accepted + -- Added in 1.48.0](https://lists.boost.org/boost-announce/2011/04/0304.php) | +| Context | Oliver Kowalke | Vicente Botet | March 21, 2011 - March 30, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/03/0296.php)~~ +~~[Accepted + Provisionally](https://lists.boost.org/boost-announce/2011/05/0310.php)~~ +[Accepted + -- Added in 1.51.0](https://lists.boost.org/boost-announce/2012/01/0348.php) | +| Type Traits Extensions (Fast-Track) | Frédéric Bron | Joel Falcou | March 14, 2011 - March 18, 2011 | [Accepted + -- Added in 1.48.0](https://lists.boost.org/boost-announce/2011/03/0297.php) | +| Boost 1.46.1 Released | | Beman Dawes | March 21, 2011 | [Notes](https://www.boost.org/users/news/version_1_46_1) | +| Review Wizard Status Report | | Ronald Garcia | March 4, 2011 | [Report](https://lists.boost.org/boost-announce/2011/03/0289.php) | +| XInt | Chad Nelson | Vladimir Prus | March 2, 2011 - March 12, 2011 | ~~[Pending](https://lists.boost.org/boost-announce/2011/03/0288.php)~~ +[Rejected](https://lists.boost.org/boost-announce/2011/04/0305.php) | +| Boost 1.46 Released | | Beman Dawes | February 21, 2011 | [Notes](https://www.boost.org/users/news/version_1_46_0) | +| Phoenix (mini-review) | Joel de Guzmann | Hartmut Kaiser | February 20, 2011 - March 2, 2011 | [Accepted + -- Added in 1.47.0](https://lists.boost.org/boost-announce/2011/03/0291.php) | +| Process | Boris Schaeling | Marshall Clow | February 7. 2011 - February 16, 2011 | [Rejected](https://lists.boost.org/boost-announce/2011/03/0292.php) | +| GIL.IO | Christian Henning | Mateusz Loskot | December 1, 2010 - December 10, 2010 | [Accepted + -- Added in 1.68.0](https://lists.boost.org/boost-announce/2011/01/0281.php) | +| Boost 1.45 Released | | Beman Dawes | November 20, 2010 | [Notes](https://lists.boost.org/boost-announce/2010/11/0272.php) | +| Chrono | Vicente Botet | Anthony Williams | November 6, 2010 - November 15, 2010 | [Accepted + -- Added in 1.47.0](https://lists.boost.org/boost-announce/2011/01/0280.php) | +| Ratio | Vicente Botet | Anthony Williams | October 2, 2010 - October 11, 2010 | [Accepted + -- Added in 1.47.0](https://lists.boost.org/boost-announce/2010/10/0270.php) | +| Boost 1.44 Released | | Beman Dawes | August 17, 2010 | [Notes](https://lists.boost.org/boost-announce/2010/08/0264.php) | +| Boost.Assign Extensions (Mini-Review) | Erwann Rogard | Thorsten Ottosen | June 13, 2010 - June 19, 2010 | [Rejected](https://lists.boost.org/boost-announce/2010/10/0269.php) | +| Review Wizard Status Report | | Ronald Garcia | May 26, 2010 | [Report](https://lists.boost.org/boost-announce/2010/05/0262.php) | +| Move | Ion Gaztañaga | ~~OvermindDL1~~ + Michael Caisse + | May 10, 2010 - May 24, 2010 | [Accepted + -- Added in 1.48.0](https://lists.boost.org/boost-announce/2011/02/0283.php) | +| Boost 1.43 Released | | Beman Dawes | May 6, 2010 | [Notes](https://lists.boost.org/boost-announce/2010/05/0258.php) | +| Log | Andrey Semashev | Vladimir Prus | March 8, 2010 - March 17, 2010 | ~~[Accepted + Provisionally](https://lists.boost.org/boost-announce/2010/03/0256.php)~~ + Accepted -- Added in 1.54 + | +| Interval Containers | Joachim Faulhaber | Hartmut Kaiser | February 18, 2010 - February 27, 2010 | [Accepted + -- Added in 1.46](https://lists.boost.org/boost-announce/2010/04/0257.php) | +| Boost 1.42 Released | | Beman Dawes | February 2, 2010 | [Notes](https://lists.boost.org/boost-announce/2010/02/0250.php) | +| Review Wizard Status Report | | John Phillips | December 7, 2009 | [Report](../development/report-dec-2009.html) | +| Meta State Machine (MSM) | Christophe Henry | Dave Abrahams | November 23, 2009 - December 13, 2009 | [Accepted -- Added in 1.44](https://lists.boost.org/Archives/boost/2010/01/160812.php) | +| Boost 1.41 Released | | Beman Dawes | November 18, 2009 | [Notes](https://lists.boost.org/boost-announce/2009/11/0241.php) | +| Geometry | Barend Gehrels, + Bruno Lalande, + and Mateusz Loskot | Hartmut Kaiser | November 5, 2009 - November 22, 2009 | [Accepted + -- Added in 1.47.0](https://lists.boost.org/boost-announce/2009/11/0245.php) | +| Boost 1.40 Released | | Beman Dawes | August 27, 2009 | [Notes](https://lists.boost.org/boost-announce/2009/08/0235.php) | +| Polygon | Lucanus Simonson | Fernando Cacciola | August 24, 2009 - September 2, 2009 | [Accepted + -- Added in 1.44](https://lists.boost.org/boost-announce/2009/11/0239.php) | +| Review Wizard Status Report | | Ronald Garcia | June 4, 2009 | [Report](../development/report-jun-2009.html) | +| Boost 1.39 Released | | Beman Dawes | May 3, 2009 | [Notes](https://lists.boost.org/boost-announce/2009/05/0232.php) | +| Polynomial | Paweł Kieliszczyk | John Maddock | March 10, 2009 - March 19, 2009 | [Rejected](https://lists.boost.org/boost-announce/2009/04/0228.php) | +| Boost.Range (Update) | Neil Groves | Thorsten Ottosen | February 20, 2009 - March 3, 2009 | [Accepted + -- Added in 1.43](https://lists.boost.org/boost-announce/2009/04/0231.php) | +| Boost 1.38 Released | | Beman Dawes | February 9, 2009 | [Notes](https://lists.boost.org/boost-announce/2009/02/0223.php) | +| Futures (2 candidates) | 1. Braddock Gaskill +2. Anthony Williams + | Tom Brinkman | January 5, 2009 - January 20, 2009 | [Williams + Accepted -- Added in 1.41 + Gaskill Rejected](https://lists.boost.org/boost-announce/2009/04/0229.php) | +| Constrained Value | Robert Kawulak | ~~Jeff Garland~~ + Gordon Woodhull + | December 1, 2008 - December 10, 2008 | ~~[Accepted](https://lists.boost.org/boost-announce/2010/09/0265.php)~~ + Orphaned + | +| Review Wizard Status Report | | John Phillips | November 25, 2008 | [Report](../development/report-nov-2008.html) | +| Globally Unique Identifier (mini-review) (now + UUID) | Andy Tompkins | Hartmut Kaiser | November 23, 2008 - November 29, 2008 | [Accepted + -- Added in 1.42](https://lists.boost.org/boost-announce/2009/01/0221.php) | +| Boost 1.37 Released | | Beman Dawes | November 3, 2008 | [Notes](https://lists.boost.org/boost-announce/2008/11/0209.php) | +| Thread-Safe Signals (now Signals2) | Frank Hess | Stjepan Rajko | November 1, 2008 - November 10, 2008 | [Accepted + -- Added in 1.39](https://lists.boost.org/boost-announce/2008/11/0211.php) | +| Phoenix | Joel de Guzman | Hartmut Kaiser | September 21, 2008 - September 30, 2008 | [~~Accepted Conditionally~~](https://lists.boost.org/boost-announce/2008/10/0205.php) +[~~Under Development~~](https://lists.boost.org/Archives/boost/2010/05/167128.php) +[Accepted + -- Added in 1.47.0](https://lists.boost.org/boost-announce/2011/03/0291.php) | +| DataFlow Signals | Stjepan Rajko | Jaakko Järvi | September 1, 2008 - September 10, 2008 | [Rejected](https://lists.boost.org/Archives/boost/2008/09/142198.php) | +| Boost 1.36 Released | | Beman Dawes | August 14, 2008 | [Notes](https://lists.boost.org/boost-announce/2008/08/0196.php) | +| Finite State Machines | Andrey Semashev | Martin Vuille | August 11, 2008 - August 27, 2008 | [Rejected](https://lists.boost.org/boost-announce/2008/09/0202.php) ([Notes](https://lists.boost.org/boost-announce/2008/09/0203.php)) + | +| Review Wizard Status Report | | John Phillips | 2008 May 16 | [Report](../development/report-may-2008.html) | +| Egg | Shunsuke Sogame | Dan Marsden | March 31, 2008 - April 13, 2008 | [Rejected](https://lists.boost.org/boost-announce/2008/05/0192.php) | +| Boost 1.35 Released | | Beman Dawes | March 29, 2007 | [Notes](https://lists.boost.org/boost-announce/2008/03/0183.php) | +| Proto | Eric Niebler | Hartmut Kaiser | March 1, 2008 - March 14, 2008 | [Accepted -- Added in 1.37](https://lists.boost.org/boost-announce/2008/04/0187.php) | +| Floating Point Utilities | Johan Råde | John Maddock | February 18, 2008 - February 27, 2008 | [Accepted -- Added in 1.??](https://lists.boost.org/boost-announce/2008/03/0179.php) | +| Logging | John Torjo | Gennadiy Rozental | February 4, 2008 - February 13, 2008 | [Rejected](https://lists.boost.org/boost-announce/2008/03/0181.php) | +| Flyweight | Joaquín Mª López Muñoz | Ion Gaztañaga | January 21, 2008 - January 30, 2008 | [Accepted -- Added in 1.38](https://lists.boost.org/boost-announce/2008/02/0174.php) | +| Singleton (fast-track) | Tobias Schwinger | John Torjo | January 14, 2008 - January 18, 2008 | [Rejected](https://lists.boost.org/boost-announce/2008/01/0171.php) | +| Switch | Steven Watanabe | Stejpan Rajko | January 5, 2008 - January 13, 2008 | ~~[Accepted Provisionally](https://lists.boost.org/boost-announce/2008/01/0166.php)~~ Orphaned + | +| Factory (fast-track) | Tobias Schwinger | John Torjo | December 17, 2007 - December 21, 2007 | [Accepted -- Added in 1.43](https://lists.boost.org/boost-announce/2007/12/0161.php) | +| Unordered Containers | Daniel James | Ion Gaztañaga | December 7, 2007 - December 16, 2007 | [Accepted -- Added in 1.36](https://lists.boost.org/boost-announce/2007/12/0158.php) | +| Forward (fast-track) | Tobias Schwinger | John Torjo | December 3, 2007 - December 7, 2007 | [Accepted -- Added in 1.43](https://lists.boost.org/boost-announce/2007/12/0153.php) | +| Review Wizard Status Report | | Ronald Garcia | 2007 November 16 | [Report](../development/report-nov-2007.html) | +| Exception | Emil Dotchevski | Tobias Schwinger | September 27, 2007 - October 7, 2007 | [Accepted + -- Added in 1.36](https://lists.boost.org/boost-users/2007/11/31912.php) | +| Review Wizard Status Report | | Ronald Garcia | 2007 September 14 | [Report](../development/report-sep-2007.html) | +| Scope Exit | Alexander Nasonov | ~~Jody Hagins~~ + John R. Phillips + | August 13, 2007 - August 22, 2007- | [Accepted -- Added in 1.38](https://lists.boost.org/boost-announce/2008/05/0190.php) | +| Time Series | Eric Niebler | John R. Phillips | July 30, 2007 - August 13, 2007 | [~~Accepted~~](https://lists.boost.org/boost-announce/2007/08/0142.php) +[Orphaned](https://lists.boost.org/Archives/boost/2010/05/167128.php) | +| Boost 1.34.1 Released | | Thomas Witt | July 24, 2007 | [Notes](https://lists.boost.org/boost-announce/2007/07/0135.php) | +| Boost 1.34.0 Released | | Thomas Witt | May 12, 2007 | [Notes](https://lists.boost.org/boost-announce/2007/05/0131.php) | +| Globally Unique Identifier | Andy Tompkins | Hartmut Kaiser | April 30, 2007 - May 10, 2007 | ~~[Accepted Provisionally](https://lists.boost.org/boost-announce/2007/05/0134.php)~~ +[Accepted -- Added in 1.42](https://lists.boost.org/boost-announce/2009/01/0221.php) | +| Math Toolkit | John Maddock | Matthias Schabel | April 11, 2007 - April 27, 2007 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2007/05/0129.php) | +| Quantitative Units | Matthias Schabel | John R. Phillips | March 26, 2007 - April 4, 2007 | [Accepted -- Added in 1.36](https://lists.boost.org/boost-announce/2007/04/0126.php) | +| Intrusive Containers | Ion Gaztañaga | Joaquín Mª López Muñoz | March 12, 2007 - March 21, 2007 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2007/04/0122.php) | +| Bimap | Matias Capeletto | Ion Gaztañaga | February 15 2007- March 2, 2007 | [Accepted -- Added in 1.35](https://lists.boost.org/Archives/boost/2007/03/117351.php) | +| Accumulators | Eric Niebler | John R. Phillips | January 29, 2007 - February 7, 2007 | [Accepted -- Added in 1.36](https://lists.boost.org/boost-announce/2007/02/0114.php) | +| Function Types (Re-review) | Tobias Schwinger | Tom Brinkman | 2006 November 6 - 2006 November 17 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/11/0106.php) | +| Generic Image Library | Lubomir Bourdev | Tom Brinkman | 2006 October 5 - 2006 October 25 | [Accepted -- Added in 1.35](https://lists.boost.org/Archives/boost/2006/11/112896.php) | +| Message Passing | Doug Gregor | Jeremy Siek | 2006 September 6 - 2006 September 15 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/09/0099.php) | +| Physical Quantities System | Andy Little | Fred Bertsch | 2006 May 31 - 2006 June 9 | [Rejected](https://lists.boost.org/boost-announce/2006/06/0096.php) | +| Pimpl Pointer | Asger Mangaard | Rene Rivera | 2006 May 15 - 2006 May 24 | [Rejected](https://lists.boost.org/boost-announce/2006/10/0104.php) | +| Fusion | Joel de Guzman | Ronald Garcia | 2006 May 1 - 2006 May 10 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/06/0094.php) | +| Property Tree | Marcin Kalicinski | Thorsten Ottosen | 2006 April 18 - 2006 April 30 | [Accepted -- Added in 1.41](https://lists.boost.org/boost-announce/2006/05/0092.php) | +| Promotion Traits (fast-track) | Alexander Nasonov | Tobias Schwinger | 2006 April 1 - 2006 April 9 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/04/0086.php) | +| Review Wizard Status Report | | Tom Brinkman | 2006 March 30 | [Report](../development/report-apr-2006.html) | +| Shmem (now Interprocess) | Ion Gaztañaga | Fred Bertsch | 2006 February 6 - 2006 February 15 | [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/02/0083.php) | +| Fixed Strings | Reece Dunn | Harmut Kaiser | 2006 January 19 - 2006 February 5 | [Rejected](https://lists.boost.org/boost-announce/2006/02/0081.php) | +| Review Wizard Status Report | | Ronald Garcia | 2006 January 19 | [Report](../development/report-jan-2006.html) | +| asio | Christopher Kohlhoff | Jeff Garland | 2005 December 10 - + 2005 December 30 | [Accepted -- Added in 1.35](https://lists.boost.org/Archives/boost/2006/03/102287.php) | +| Boost 1.33.1 Released | | Doug Gregor | 2005 December 5 | [Notes](https://lists.boost.org/boost-announce/2005/12/0077.php) | +| Review Wizard Status Report | | Ronald Garcia | 2005 December 1 | [Report](https://lists.boost.org/boost-announce/2005/12/0076.php) | +| Logging Library | John Torjo | Hartmut Kaiser | 2005 November 7 - 2005 November 16th | [Rejected](https://lists.boost.org/boost-announce/2005/11/0075.php) | +| Boost 1.33.1 Beta Released | | Doug Gregor | 2005 November 9 | [Notes](https://lists.boost.org/boost-announce/2005/11/0073.php) | +| binary\_int | Scott Schurr and + Matt Calabrese | Pavel Vozenilek | 2005 October 13 - 2005 October 20 | [Accepted -- Added in 1.37.](https://lists.boost.org/boost-announce/2006/01/0078.php) | +| TR1 | John Maddock | Beman Dawes | 2005 September 24 - 2005 October 5 | Accepted -- Added in 1.34 | +| Xpressive | Eric Niebler | Thomas Witt | 2005 September 8 - 2005 September 18 | Accepted -- Added in 1.34 | +| Boost 1.33.0 Released | | Doug Gregor | 17 August 2005 | [Notes](https://lists.boost.org/boost-announce/2005/08/0067.php) | +| Function Types | Tobias Schwinger | John Maddock | 2005-Jun-6 to 2005-June-16 | ~~[Accepted Provisionally](https://lists.boost.org/boost-announce/2005/06/0066.php)~~, + [Accepted -- Added in 1.35](https://lists.boost.org/boost-announce/2006/11/0106.php) | +| Typeof | Arkadiy Vertleyb and + Peder Holt | Andy Little | 2005 May 20 - 2005 May 30 | Accepted -- Added in 1.34 | +| Singleton | Jason Hise | Pavel Vozenilek | 2005 May 5 - 2005 May 15 | [Rejected](https://lists.boost.org/boost-announce/2005/05/0062.php) | +| FOREACH Macro | Eric Niebler | Gennadiy Rozental | 2005 April 25 - 2005 May 1 | Accepted -- Added in 1.34 | +| Hash | Daniel James | Thorsten Ottosen | 2005 Mar 21 - 2005 March 12 | Accepted -- Added in 1.33 | +| State Chart | Andreas Huber | Pavel Vozenilek | 2005 Feb 23 - 2005 March 9 | Accepted -- Added in 1.34 | +| Wave | Hartmut Kaiser | Tom Brinkman | 2005 Feb 7 - 2005 Feb 20 | Accepted -- Added in 1.33 | +| Pointer Containers | Thorsten Ottosen | Pavol Droba | 2004 Sept 26 - Oct 5 | Accepted -- Added in 1.33 | +| Named Params | David Abrahams & + Daniel Wallin | Doug Gregor | 2004 Nov 1 - 2004 Nov 20 | Accepted -- Added in 1.33 | +| Output Formatters | Reece Dunn | John Torjo | 2004 Sept 11 - Sept 25 | [Rejected](https://lists.boost.org/Archives/boost/2004/10/74535.php) | +| Iostreams | Jonathan Turkanis | Jeff Garland | 2004 Aug 28 - Sep 11 | Accepted -- Added in 1.33 | +| More IO | Daryle Walker | Tom Brinkman | 2004 Aug 21 - 28 | Rejected | +| Tribool | Douglas Gregor | Thomas Witt | 2004 May 19-29 | Accepted -- Added in 1.32 | +| Assignment | Thorsten Ottosen | Tom Brinkman | 2004 Apr 1 - 11 | Accepted -- Added in 1.32 | +| Serialization (re-review) | Robert Ramey | Jeff Garland | 2004 Apr 13 - 26 | Accepted -- Added in 1.32 | +| Container Traits (now Range) | Thorsten Ottosen | Hartmut Kaiser | 2004 Apr 28 - May 7 | Accepted -- Added in 1.32 | +| Indexed Set (now MultiIndex) | Joaquín Mª López Muñoz | Pavel Vozenilek | 2004 Mar 20 - 30 | [Accepted -- Added in 1.32](https://lists.boost.org/Archives/boost/2004/04/63582.php) | +| Circular Buffer | Jan Gaspar | Pavel Vozenilek | 2004 Mar 5 - 15 | Accepted -- Added in 1.35 | +| enable\_if | Jaakko Järvi & + Jeremiah Willcock & + Andrew Lumsdaine | (fasttrack) | Dec 2003 | Accepted -- added in 1.31 | +| FC++ | Brian McNamara & Yannis Smaragdakis | Mat Marcus | 2004 Feb 14 - Mar 1 | Rejected | +| Numeric Conversions Library | Fernando Cacciola | Thorsten Ottosen | 8 - 22 Dec 2003 | Accepted -- added in 1.32 | +| String Algorithm Library | Pavol Droba | Thorsten Ottosen | 17 - 30 Oct 2003 | Accepted -- added in 1.32 | +| Shifted Pointer | Philippe A. Bouchard | Doug Gregor | 24 - 30 Sep 2003 | Rejected | +| Fixed-Point Decimal | Bill Seymour | Jens Maurer | 11 - 21 Jul 2003 | Rejected | +| Math Constants | Paul A. Bristow | Jaap Suter | 06 - 15 Jun 2003 | Rejected | +| Command Line & Config | Vladimir Prus | Aleksey Gurtovoy | 21 May - 03 Jun 2003 | Accepted -- added in 1.32 | +| I/O Manipulators and Adaptors | Daryle Walker | Ed Brey | 27 Feb - 11 Mar 2003 | - | +| Variant | Eric Friedman & Itay Maman | Jeff Garland | 16 - 25 Feb 2003 | Accepted -- added in 1.31 | +| Optional | Fernando Cacciola | Douglas Gregor | 09 - 18 Dec 2002 | Accepted -- added in 1.30 | +| Serialization | Robert Ramey | Dave Abrahams | 02 - 11 Nov 2002 | Rejected | +| Spirit | Joel de Guzman | John Maddock | 11 - 20 Oct 2002 | Accepted -- added in 1.30 | +| Minmax | Hervé Bronnimann | Thomas Witt | 28 Sep - 07 Oct 2002 | Accepted -- added in 1.32 | +| Filesystem | Beman Dawes | William Kempf | 14 - 23 Sep 2002 | Accepted -- added in 1.30 | +| Interval Arithmetic Library | Hervé Bronnimann & + Guillaume Melquiond & + Sylvain Pion | Beman Dawes | 31 Aug - 09 Sep 2002 | Accepted -- added in 1.30 | +| Template Meta Programming Library MPL | Aleksey Gurtovoy | Douglas Gregor | 15 - 29 Jul 2002 | Accepted -- added in 1.30 | +| uBLAS | Joerg Walter & Mathias Koch | Ed Brey | 21 Jun - 01 Jul 2002 | Accepted -- added in 1.29 | +| Dynamic Bitset | Chuck Alison & Jeremy Siek | Mat Marcus | 08 - 17 Jun 2002 | Accepted -- added in 1.29 | +| Date / Time | Jeff Garland | Darin Adler | 15 - 24 Apr 2002 | Accepted -- added in 1.29 | +| Lambda | Jaakko Järvi & Gary Powell | Aleksey Gurtovoy | 08 - 20 Mar 2002 | Accepted and added | +| Signals | Douglas Gregor | William Kempf | 18 - 27 Feb 2002 | Accepted -- added in 1.29 | +| I/O State Saver | Daryle Walker | Beman Dawes | 06 - 16 Feb 2002 | Accepted and added | +| printf-like formatting for iostreams | Samuel Krempp | Jens Maurer | 13 - 23 Jan 2002 | Accepted -- added in 1.29 | +| Multi-array | Ron Garcia | John Maddock | 02 - 12 Jan 2002 | Accepted -- added in 1.29 | +| Unit Test Library | Gennadiy Rozental | Jeremy Siek | 01 - 13 Dec 2001 | Accepted and added | +| GCD Library plus integer additions | Daryle Walker | Dave Abrahams | 17 - 26 Sep 2001 | - | +| Thread Library | Bill Kempf | Ed Brey | Aug 30 - Sep 8 | Accepted and added | +| Config System | John Maddock | Doug Gregor | Aug 20 - 29 | Accepted and added | +| Bind Library | Peter Dimov | Darin Adler | Aug 10 - 19 | Accepted and added | +| Base from Member Library | Daryle Walker | Beman Dawes | Jul 30 - Aug 9 | - | +| Coding Guidelines | Dave Abrahams | Aleksey Gurtovoy | Jul 20 - 29 | - | +| Preprocessor Library | Vesa Karvonen | Jeremy Siek | Jun 28 - Jul 9 | Accepted and added | +| Tuples Library | Jaakko Järvi | Beman Dawes | Jun 17 - 26 | Accepted and added | +| Function Library | Doug Gregor | John Maddock | Jun 6 - 16 | Accepted and added | +| Tokenizer | John Bandela | Doug Gregor | May 28 - Jun 6 | Accepted and added | +| Special Functions | Hubert Holin | Jens Maurer | May 18 - 27 | Accepted and added | + +Review Managers +--------------- + + +In order for a review to proceed, a Boost member must + volunteer to manage the review. This should be someone with + experience with the review process and knowledge of the + library's domain. If you would like to volunteer to become a + review manager, please contact Mateusz Loskot + (mateusz at loskot dot net) or John Phillips + (johnphillipsithaca at gmail dot com). + + + + + + + + + diff --git a/community/reviews.html b/community/reviews.html new file mode 100644 index 0000000..97b9b70 --- /dev/null +++ b/community/reviews.html @@ -0,0 +1,373 @@ +--- +title: Boost Formal Review Process +copyright: Beman Dawes, 2000. +revised: +--- + + +Boost Formal Review Process + + + +Boost Formal Review Process +=========================== + +Before Requesting a Formal Review +--------------------------------- + + +**Read and follow the Boost [submission + process](/development/submissions.html).** There are several steps a library author + must take before a formal review is requested. + +* [Introduction](#Introduction) +* [What to include in Review Comments](#Comments) +* [Results](#Results) +* [Notes for Review Managers](#Review_Manager) +* [Notes for Library Submitters](#Submitters) +* [Library Maintainer's Rights and + Responsibilities](#Maintainer) +* [Review Wizard](#Wizard) +* [Fast Track Reviews](#Fast-Track) + + +Introduction +------------ + + +Proposed libraries are accepted into Boost only after + undergoing a formal review, where Boost mailing list members + comment on their evaluation of the library. + + +The final "accept" or "reject" decision is made by the + [Review Manager](#Review_Manager), based on the + review comments received from boost mailing list members. + + +Boost mailing list members are encouraged to submit Formal + Review comments: + + +* Publicly on the mailing list. +* Privately to the Review Manager. + + +Private comments to a library submitter may be helpful to + her or him, but won't help the Review Manager reach a decision, + so the other forms are preferred. + + +The review period will normally last for 10 days. + + +What to include in + Review Comments +----------------------------------- + + +Your comments may be brief or lengthy, but the + Review Manager needs your evaluation of the library. If you + identify problems along the way, please note if they are minor, + serious, or showstoppers. + + +The goal of a Boost library review is to improve the library + through constructive criticism, and at the end a decision must + be made: is the library good enough at this point to accept + into Boost? If not, we hope to have provided enough + constructive criticism for it to be improved and accepted at a + later time. The Serialization library is a good example of how + constructive criticism resulted in revisions resulting in an + excellent library that was accepted in its second review. + + +Here are some questions you might want to answer in your + review: + + +* What is your evaluation of the design? +* What is your evaluation of the implementation? +* What is your evaluation of the documentation? +* What is your evaluation of the potential usefulness of + the library? +* Did you try to use the library? With what compiler? Did + you have any problems? +* How much effort did you put into your evaluation? A + glance? A quick reading? In-depth study? +* Are you knowledgeable about the problem domain? + + +And finally, every review should answer this question: + + +* Do you think the library should be accepted as a Boost + library? Be sure to say this explicitly so that your other + comments don't obscure your overall opinion. + + +Many reviews include questions for library authors. Authors + are interested in defending their library against your + criticisms; otherwise, they would not have brought their library + up for review. If you don't get a response to your question + quickly, be patient; if it takes too long or you don't get an + answer you feel is sufficient, ask again or try to rephrase the + question. Do remember that English is not the native language + for many Boosters, and that can cause misunderstandings. + + +E-mail is a poor communication medium, and even if messages + rarely get lost in transmission, they often get drowned in the + deluge of other messages. Don't assume that an unanswered + message means you're being ignored. Given constructively, + criticism will be taken better and have more positive effects, + and you'll get the answers you want. + + +Results +------- + + +Within a reasonable time after the conclusion of the comment + period, the Review Manager will post a message to the mailing + list saying if the library has been accepted or rejected. A + rationale is also helpful, but its extent is up to the Review + Manager. If there are suggestions, or conditions that must be + met before final inclusion, they should be stated. Concerns + about the timeliness or quality of the review report should be + brought to the Review Wizards off-list. + + +Notes for + Review Managers +-------------------------- + + +Before a library can be scheduled for formal review, an + active boost member not connected with the library submission + must volunteer to be the "Review Manager" for the library. + Members may contact a library author on- or off-list to express + interest in managing the review. The library author has to accept + a person as a review manager. + + +The Review Manager: + + +* Checks the submission to make sure it really is complete + enough to warrant formal review. See the [Boost Library Requirements + and Guidelines](/development/requirements.html). If necessary, work with the submitter to + verify the code compiles and runs correctly on several + compilers and platforms. +* Finalizes the schedule with the Review Wizard and the submitter. +* Posts a notice of the review schedule on both the regular + **[boost mailing list](mailto:boost@lists.boost.org)** and the + **[boost-announce](mailto:boost-announce@lists.boost.org) mailing list**. + + The notice should include a brief description of the + library and what it does, to let readers know if the + library is one they are interested in reviewing. + + If the library is known to fail with certain + compilers, please mention them in the review notice so + reviewers with those compilers won't waste time + diagnosing known problems. + + It is advised to send the notice to each mailing list + in a separate e-mail, otherwise online e-mail to news + gateways could get confused. +* Inspects the Boost [library catalogue](/doc/libs/release/libs/libraries.htm) + for libraries which may interact with the new submission. + These potential interactions should be pointed out in the + review announcement, and the author(s) of these libraries + should be privately notified and urged to participate in the + review. +* Urges people to do reviews if they aren't forthcoming. +* Follows review discussions regarding the library, + moderating or answering questions as needed. +* Asks the [review wizard](#Wizard) for + permission to extend the review schedule if it appears that + too few reviews will be submitted during the review period. +* Decides if there is consensus to accept the library and + if there are any conditions attached. Consensus is not the + same as a vote. The Review Manager has discretion to weigh + opinions based on authority or thoughtfulness. +* Posts a notice of the [review + results](#Results) on the regular **[boost](mailto:boost@lists.boost.org)** mailing + list, the **[boost-users](mailto:boost-users@lists.boost.org)** + mailing list, and the **[boost-announce](mailto:boost-announce@lists.boost.org)** + mailing list. + + +In other words, it is the Review Manager's responsibility to + make sure the review process works smoothly. + + +Although the review manager is also allowed to review the library, + they are expected to serve the interests of the Boost users. + Since the review manager may have a (strong) opinion about the library, + it is recommended as a matter of principle they do not share their opinion + until the very end of the review. Possibly, until the summary of reviews. + The review manager will make the final choice and announcing an opinion early + in the process could negatively affect the review process. + + +Notes for Library + Submitters +----------------------------- + + +See [Submission + Process](/development/submissions.html) for a description of the steps a library developer + goes through to get a library accepted by Boost. + + +First, the library author should accept a review manager. + If they feel, for whatever reason, a candidate for a review manager + is not competent or fair, they should not accept such candidate. + + +A proposed library should remain stable during the review + period; it will just confuse and irritate reviewers if there + are numerous changes. It is, however, useful to upload fixes + for serious bugs right away, particularly those which prevent + reviewers from fully evaluating the library. Post a notice of + such fixes on the mailing list. + + +Library improvements suggested by reviewers should normally + be held until after the completion of review period. If the + suggested changes might affect the reviewer's judgments, post a + notice of the pending change on the mailing list. + + +Library + Maintainer's Rights and Responsibilities +------------------------------------------------- + + +By submitting a library to boost, you accept responsibility + for maintaining your library or finding a qualified volunteer + to serve as maintainer. You must be willing to put your library + and documentation under a Boost-compatible license. + + +You will be expected to respond to reasonable bug reports + and questions on time and to participate as needed + in discussions of your library on the boost mailing lists. + + +You are free to change your library in any way you wish, and + you are encouraged to actively make improvements. However, peer + review is an important part of the Boost process and as such + you are also encouraged to get feedback from the boost + community before making substantial changes to the interface of + an accepted library. + + +If at some point you no longer wish to serve as maintainer + of your library, it is your responsibility to make this known + to the boost community and to find another individual to take + your place. + + +Libraries which have been abandoned will be put in care of + the [Community + Maintenance Team](https://svn.boost.org/trac/boost/wiki/CommunityMaintenance). + + +Review Wizards +-------------- + + +The Review Wizards coordinate the formal review + schedule: + + +* When a formal review is requested for a library: + + Approve the review manager based on initial acceptance + by the library submitter, their participation in the Boost + community, including the mailing list, previous reviews, + and other forums. + + Suggest a schedule, after checking (via private + email) the availability of the review manager and library + author. + + Finalize the schedule, once the review manager + verifies the library is ready for review. + + Resolve schedule slips or other issues with review + managers and submitters. +* Maintains a schedule of both past and pending reviews, in + the form of the [Review + Schedule](review_schedule.html) web page. +* Resolves questions from review managers and library + submitters, who sometimes want a third opinion on questions + such as "Should we extend the review period because + ...?" +* Monitors the general review process, and makes minor + adjustments as needed, or queries the list about possible + major adjustments. + + +The role of Boost Review Wizard is currently played by: + + +* Mateusz Loskot (mateusz at loskot dot net) +* John Phillips (johnphillipsithaca at gmail dot com) + + +Past Review Wizards (we thank you for your service): + + +* Ronald Garcia +* Tom Brinkman +* Thomas Witt + + +Fast Track + Reviews +------------------- + + +To qualify for fast track review: + + +* The component must be small. +* The technique must be already in use in Boost libraries + and the new component provides a common implementation. +* A full Boost-conformant implementation is available in + the sandbox. +* The Review Wizard determines that the proposal qualifies + for fast track review. + + +Procedure: + + +* The Boost Review Wizard posts a review announcement to + the main Boost developer's list. The fast track review period will + normally last for 5 days. No two fast-track reviews will run + in parallel. Fast track reviews may run during full reviews, + though generally, this is to be avoided. +* After the review period ends, the submitter will post a + review summary containing proposed changes to the reviewed + implementation. +* The Review Wizard will accept or reject the proposed + library and proposed changes. +* After applying the proposed changes, the component is + checked into the repository like any other library. + + +Mini-Reviews +------------ + + +If a review results in conditions on acceptance, the review + manager may request a Mini-Review to determine if the + conditions have been met. The Mini-Review is usually conducted + by the same review manager. + + + + + + + + + diff --git a/community/sandbox.html b/community/sandbox.html new file mode 100644 index 0000000..2937ba5 --- /dev/null +++ b/community/sandbox.html @@ -0,0 +1,72 @@ +--- +title: Boost Sandbox +copyright: Rene Rivera 2007. +revised: +--- + + +Boost Sandbox + + + +Boost Sandbox +============= + +When boost was developed using subversion, the Boost Sandbox + contained unreviewed code that is intended to eventually become + a part of the Boost libraries. New libraries should be + developed separately as [git + modules](https://svn.boost.org/trac/boost/wiki/ModularBoost), and existing projects should be [moved to + GitHub](https://svn.boost.org/trac/boost/wiki/ExtractSandbox). The sandbox remains as a historical record. + + +Accessing the Boost Sandbox +--------------------------- + + +The Boost Sandbox lives at + within the old Boost Subversion repository. + + +Organization +------------ + + +Because there were typically many projects in the sandbox at + any one time (in various stages of development), the sandbox + should have been organized by project. Each project should have + had its own subdirectory inside sandbox. For example, + an XML library would reside in sandbox/xml. Inside + that project-specific subdirectory, the project would be + organized like any other Boost library, with a boost + subdirectory (for headers) and libs subdirectory (for + source code, build files, and documentation). Our hypothetical + XML project would likely have had the following structure: + + +* sandbox/xml/ + + boost/ - Contains xml.hpp, which + includes all of the headers from xml/ + - xml/ - Contains Boost.XML headers + + libs/ + - xml/ + * build/ - Contains Jamfiles + to build Boost.XML + * doc/ - Contains documentation for + Boost.XML + * src/ - Contains Boost.XML compiled + source files + + +Many existing projects in the sandbox didn't follow this + structure, opting to place headers in sandbox/boost + and supporting files in sandbox/libs. + + + + + + + + + diff --git a/development/_template_.html b/development/_template_.html new file mode 100644 index 0000000..3e170a2 --- /dev/null +++ b/development/_template_.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/development/borland_cpp.html b/development/borland_cpp.html new file mode 100644 index 0000000..62d3c2b --- /dev/null +++ b/development/borland_cpp.html @@ -0,0 +1,405 @@ +--- +title: Portability Hints: Borland C++ 5.5.1 +copyright: +revised: 2007-10-22 22:55:52 +0100 +--- + + +Portability Hints: Borland C++ 5.5.1 + + + +Portability Hints: Borland C++ 5.5.1 +==================================== + +It is a general aim for boost libraries to be [portable](/development/requirements.html#Portability). The + primary means for achieving this goal is to adhere to ISO + Standard C++. However, ISO C++ is a broad and complex standard + and most compilers are not fully conformant to ISO C++ yet. In + order to achieve portability in the light of this restriction, + it seems advisable to get acquainted with those language + features that some compilers do not fully implement yet. + + +This page gives portability hints on some language features + of the Borland C++ version 5.5.1 compiler. Furthermore, the + appendix presents additional problems with Borland C++ version + 5.5. Borland C++ 5.5.1 is a freely available command-line + compiler for Win32 available at . + + +Each entry in the following list describes a particular + issue, complete with sample source code to demonstrate the + effect. Most sample code herein has been verified to compile + with gcc 2.95.2 and Comeau C++ 4.2.44. + + +Preprocessor symbol +------------------- + + +The preprocessor symbol `__BORLANDC__` is defined + for all Borland C++ compilers. Its value is the version number + of the compiler interpreted as a hexadecimal number. The + following table lists some known values. + +| Compiler | `__BORLANDC__` value | +| --- | --- | +| Borland C++ Builder 4 | 0x0540 | +| Borland C++ Builder 5 | 0x0550 | +| Borland C++ 5.5 | 0x0550 | +| Borland C++ 5.5.1 | 0x0551 | +| Borland C++ Builder 6 | 0x0560 | + + +Core Language +------------- + + +### [using-directive] Mixing `using`-declarations + and `using`-directives + + +Mixing `using`-directives (which refer to whole + namespaces) and namespace-level `using`-declarations + (which refer to individual identifiers within foreign + namespaces) causes ambiguities where there are none. The + following code fragment illustrates this: +``` + +namespace N { + int x(); +} + +using N::x; +using namespace N; + +int main() +{ + &x; // Ambiguous overload +} + +``` + +### [using template] `using`-declarations for class + templates + + +Identifiers for class templates can be used as arguments to + `using`-declarations as any other identifier. + However, the following code fails to compile with Borland + C++: +``` + +template +class X { }; + +namespace N +{ + // "cannot use template 'X' without specifying specialization parameters" + using ::X; +}; + +``` + +### [template const arg] Deduction of constant arguments to + function templates + + +Template function type deduction should omit top-level + constness. However, this code fragment instantiates "f(int)": +``` + +template +void f(T x) +{ + x = 1; // works + (void) &x; + T y = 17; + y = 20; // "Cannot modify a const object in function f(int)" + (void) &y; +} + +int main() +{ + const int i = 17; + f(i); +} + +``` + +### [function address] Resolving addresses of overloaded + functions + + +Addresses of overloaded functions are not in all contexts + properly resolved (std:13.4 [over.over]); here is a small + example: +``` + +template +void f( void(\*g)(Arg) ); + +void h(int); +void h(double); + +template +void h2(T); + +int main() +{ + void (\*p)(int) = h; // this works (std:13.4-1.1) + void (\*p2)(unsigned char) = h2; // this works as well (std:13.4-1.1) + f(h2); // this also works (std:13.4-1.3) + + // "Cannot generate template specialization from h(int)", + // "Could not find a match for f(void (\*)(int))" + f(h); // should work (std:13.4-1.3) + + f( (void(\*)(double))h); // C-style cast works (std:13.4-1.6 with 5.4) + + // "Overloaded 'h' ambiguous in this context" + f(static\_cast(h)); // should work (std:13.4-1.6 with 5.2.9) +} + +``` + +**Workaround:** Always use C-style casts when + determining addresses of (potentially) overloaded + functions. + + +### [string conversion] Converting `const char *` to + `std::string` + + +Implicitly converting `const char *` parameters + to `std::string` arguments fails if template + functions are explicitly instantiated (it works in the usual + cases, though): +``` + +#include + +template +void f(const std::string & s) +{} + +int main() +{ + f("hello"); // "Could not find a match for f(char \*)" +} + + +``` + +**Workaround:** Avoid explicit template + function instantiations (they have significant problems with + Microsoft Visual C++) and pass default-constructed unused dummy + arguments with the appropriate type. Alternatively, if you wish + to keep to the explicit instantiation, you could use an + explicit conversion to `std::string` or declare the + template function as taking a `const char *` + parameter. + + +### [template value defaults] Dependent default arguments for + template value parameters + + +Template value parameters which default to an expression + dependent on previous template parameters don't work: +``` + +template +struct A +{ + static const bool value = true; +}; + +// "Templates must be classes or functions", "Declaration syntax error" +template::value> +struct B {}; + +int main() +{ + B x; +} + + +``` + +**Workaround:** If the relevant non-type + template parameter is an implementation detail, use inheritance + and a fully qualified identifier (for example, + ::N::A::value). + + +### [function partial ordering] Partial ordering of function + templates + + +Partial ordering of function templates, as described in + std:14.5.5.2 [temp.func.order], does not work: +``` + +#include + +template struct A {}; + +template +void f(const A &) +{ + std::cout << "f(const A&)\n"; +} + +template +void f(T) +{ + std::cout << "f(T)\n"; +} + +int main() +{ + A a; + f(a); // output: f(T) (wrong) + f(1); // output: f(T) (correct) +} + +``` + +**Workaround:** Declare all such functions + uniformly as either taking a value or a reference + parameter. + + +### [instantiate memfun ptr] Instantiation with member function + pointer + + +When directly instantiating a template with some member + function pointer, which is itself dependent on some template + parameter, the compiler cannot cope: +``` + +template class C { }; +template +class A +{ + static const int v = C::value; +}; + +``` + +**Workaround:** Use an intermediate + `typedef`: +``` + +template class C { }; +template +class A +{ + typedef void (T::\*my\_type)(); + static const int v = C::value; +}; + +``` + +(Extracted from e-mail exchange of David Abrahams, Fernando + Cacciola, and Peter Dimov; not actually tested.) + + +Library +------- + + +### [cmath.abs] Function `double std::abs(double)` + missing + + +The function `double std::abs(double)` should be + defined (std:26.5-5 [lib.c.math]), but it is not: +``` + +#include + +int main() +{ + double (\*p)(double) = std::abs; // error +} + +``` + +Note that `int std::abs(int)` will be used + without warning if you write `std::abs(5.1)`. + + +Similar remarks apply to seemingly all of the other standard + math functions, where Borland C++ fails to provide + `float` and `long double` overloads. + + +**Workaround:** Use `std::fabs` + instead if type genericity is not required. + + +Appendix: Additional issues with Borland C++ version + 5.5 +--------------------------------------------------------- + + +These issues are documented mainly for historic reasons. If + you are still using Borland C++ version 5.5, you are strongly + encouraged to obtain an upgrade to version 5.5.1, which fixes + the issues described in this section. + + +### [inline friend] Inline friend functions in template + classes + + +If a friend function of some class has not been declared + before the friend function declaration, the function is + declared at the namespace scope surrounding the class + definition. Together with class templates and inline + definitions of friend functions, the code in the following + fragment should declare (and define) a non-template function + "bool N::f(int,int)", which is a friend of class + N::A. However, Borland C++ v5.5 expects the function + f to be declared beforehand: +``` + +namespace N { +template +class A +{ + // "f is not a member of 'N' in function main()" + friend bool f(T x, T y) { return x < y; } +}; +} + +int main() +{ + N::A a; +} + +``` + +This technique is extensively used in boost/operators.hpp. + Giving in to the wish of the compiler doesn't work in this + case, because then the "instantiate one template, get lots of + helper functions at namespace scope" approach doesn't work + anymore. Defining BOOST\_NO\_OPERATORS\_IN\_NAMESPACE (a define + BOOST\_NO\_INLINE\_FRIENDS\_IN\_CLASS\_TEMPLATES would match this + case better) works around this problem and leads to another + one, see [using-template]. + + + + + + +html) + + diff --git a/development/bugs.html b/development/bugs.html new file mode 100644 index 0000000..eb54030 --- /dev/null +++ b/development/bugs.html @@ -0,0 +1,50 @@ +--- +title: Bugs +copyright: +> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. +> Duis ligula lorem, consequat eget, tristique nec, auctor +> quis, purus. Vivamus ut sem. Fusce aliquam nunc vitae purus. +> Aenean viverra malesuada libero. Fusce ac quam. Donec neque. +> Nunc venenatis enim nec quam. Cras faucibus, justo vel +> accumsan aliquam, tellus dui fringilla quam, in condimentum +> augue lorem non tellus. Pellentesque id arcu non sem placerat +> iaculis. Curabitur posuere, pede vitae lacinia accumsan, enim +> nibh elementum orci, ut volutpat eros sapien nec sapien. +> Suspendisse neque arcu, ultrices commodo, pellentesque sit +> amet, ultricies ut, ipsum. Mauris et eros eget erat dapibus +> mollis. Mauris laoreet posuere odio. Nam ipsum ligula, +> ullamcorper eu, fringilla at, lacinia ut, augue. Nullam +> nunc. +> +> +> + + +The Boost pages avoid the use of tables as a layout + mechanism. This helps, and hurts, in a variety of ways. The + most important benefit is the wider semantic access of the + content. It means that the largest set of browsers will + interpret tables as what they are; tabular content. The + following convenient sample comes from the helpful [HTML4 W3 standard](http://www.w3.org/TR/html4/struct/tables.html#h-11.5): + + + CODE-PAGE SUPPORT IN MICROSOFT WINDOWS + +| Code-Page ID | Name | ACP | OEMCP | Windows NT 3.1 | Windows NT 3.51 | Windows 95 | +| --- | --- | --- | --- | --- | --- | --- | +| 1200 | Unicode (BMP of ISO/IEC-10646) | | | X | X | \* | +| 1250 | Windows 3.1 Eastern European | X | | X | X | X | +| 1251 | Windows 3.1 Cyrillic | X | | X | X | X | +| 1252 | Windows 3.1 US (ANSI) | X | | X | X | X | +| 1253 | Windows 3.1 Greek | X | | X | X | X | +| 1254 | Windows 3.1 Turkish | X | | X | X | X | +| 1255 | Hebrew | X | | | | X | +| 1256 | Arabic | X | | | | X | +| 1257 | Baltic | X | | | | X | +| 1361 | Korean (Johab) | X | | | \*\* | X | +| 437 | MS-DOS United States | | X | X | X | X | +| 708 | Arabic (ASMO 708) | | X | | | X | +| 709 | Arabic (ASMO 449+, BCON V4) | | X | | | X | +| 710 | Arabic (Transparent Arabic) | | X | | | X | +| 720 | Arabic (Transparent ASMO) | | X | | | X | + + +###### Heading 6 + + +One of the most important elements of HTML is the hypertext + link. In the Boost pages all [links](/) are treated + in a similar, consistent, manner regardless of context as much + as possible. Stylistic variations are present to account for + color contrast differences in the context. For example the + links in the header, and footer use different colors to match + the text color and contrast as much as possible with the + respective backgrounds. Within section content, like here, the + links also provide differing look & feel based on wether + they target the [Boost web site](/), or some + [external web + site [class="external"]](http://www.google.com/). Since most of the time links are + internal, that is the default semantic. External links need to + be decorated with [class="external"]. + + +* One +--- + + +This a "directory" unordered list [ul + class="directory"]. It is styled to show a list of short + items in as compact a form as possible. Currently that + means the items are arrayed in two columns and items are + packed to read left-to-right and top-to-bottom. +* Two +--- + + +Even though this an unordered list, one can also arrange + any block elements in this way. The top container needs to + be a [class="directory"] and the interior items + [class="directory-item"]. + + +Unordered Lists [ul] +-------------------- + + +This type of list is one of the most commonly used + structural elements used. It's used for directory listing, + history listings, table of contests, and many more. The goal is + to classify the various lists by type with a + [class="type-here"] attribute on the list [ul]. Please resist + the urge to use a classification just because it has the + particular look you want. As at some future point the look will + change and you will have no say in the effect of the particular + context. + + +### Default [ul] + + +* Item 1 + + Subitem 1a + - Subitem 1a1 + - Subitem 1a2 + + Subitem 1b +* Item 2 + + Subitem 2a + + Subitem 2b + + +### Directory [ul class="directory"] + + +* Item 1 + + Subitem 1a + - Subitem 1a1 + - Subitem 1a2 + + Subitem 1b +* Item 2 + + Subitem 2a + + Subitem 2b + + +### Table of contents [ul class="toc"] + + +* [Item 1](#) + + [Subitem 1a](#) + + [Subitem 1b](#) +* [Item 2](#) + + [Subitem 2a](#) + + [Subitem 2b](#) + + +### History [ul class="history"] + + +* Item 1 + + Subitem 1a + + Subitem 1b +* Item 2 + + Subitem 2a + + Subitem 2b + + +### Menus [ul class="menu"] + + +* [Item 1](#) +* [Item 2](#) + + +### Tree [ul class="tree"] + + +* Item 1 + + Subitem 1a + - Subitem 1a1 + - Subitem 1a2 + + Subitem 1b +* Item 2 + + Subitem 2a + + Subitem 2b + + +Preformatted [pre] +------------------ + + +This is often used to show code examples, or more accurately + fixed examples. For example the [Boost Software License](/users/license.html): +``` +``` + + + + + + + + diff --git a/development/header.html b/development/header.html new file mode 100644 index 0000000..a1f67cc --- /dev/null +++ b/development/header.html @@ -0,0 +1,108 @@ +--- +title: Boost Header policy +copyright: Beman Dawes 1998. +revised: 2007-10-22 22:55:52 +0100 +--- + + +Boost Header policy + + + +Boost Header policy +=================== + +Header files are the place where a library comes into + contact with user code and other libraries. To co-exist + peacefully and productively, headers must be "good + neighbors". + + +Here are the standards for boost headers. Many of these are + also reasonable guidelines for general use. + + +* Header filenames should have a .hpp (lowercase) + extension. +* Unless multiple inclusion is intended, wrap the header in + #ifndef guards. Use a naming convention that minimizes the + chance of clashes with macro names from other's code. The + [sample header](#SampleHeader) uses the Boost + convention of all uppercase letters, with the header name + prefixed by the namespace name, and suffixed with HPP, + separated by underscores. +* Wrap the header contents in a namespace to prevent global + namespace pollution. The namespace approach to pollution + control is strongly preferred to older approaches such as + adding funny prefixes to global names. Libraries which are + designed to work well with other Boost libraries should be + placed in namespace boost. +* Make sure that a translation unit consisting of just the + contents of the header file will compile successfully. +* Place the header file in a sub-directory to prevent + conflict with identically named header files in other + libraries. The parent directory is added to the compiler's + include search path. Then both your code and user code + specifies the sub-directory in #include directives. + Thus the header [sample header](#SampleHeader) + would be included by #include + . (Note, including from current + file directory using #include "furball.hpp" syntax + is discouraged .) +* The preferred ordering for class definitions is public + members, protected members, and finally private members. +* Include the boost/config.hpp [configuration + header](/doc/libs/release/libs/config/config.htm) if there is a need to deal with compiler or + platform configuration issues. + + +Sample + Header +-------------- +``` + +// Boost general library furball.hpp header file ---------------------------// + + < *html) > + +// See https://www.boost.org/ for latest version. + +#ifndef BOOST\_FURBALL\_HPP +#define BOOST\_FURBALL\_HPP + +namespace boost { + +// Furball class declaration -----------------------------------------------// + + class furball + { + public: + void throw\_up(); + private: + int whatever; + }; // furball + +} // namespace + +#endif // include guard + +``` + +Coding Style +------------ + + +The alert reader will have noticed that the [sample header](#SampleHeader) employs a certain coding + style for indentation, positioning braces, commenting ending + braces, and similar formatting issues. These stylistic issues + are viewed as personal preferences and are not part of the + Boost Header Policy. + + + + + + + + + diff --git a/development/index.html b/development/index.html new file mode 100644 index 0000000..5551284 --- /dev/null +++ b/development/index.html @@ -0,0 +1,71 @@ +--- +title: Boost Development +copyright: Rene Rivera 2007. +revised: +--- + + +Boost Development + + +/\* div { + background: transparent !important; + } + #content .section .openhub table { + background: transparent !important; + clear: none !important; + border-spacing: 0em !important; + margin-bottom: 0.25em !important; + } + #content .section .openhub table tr td { + border: none !important; + } + #content .section #openhub-cost table tr td { + background: transparent !important; + border-bottom: 1px #DDD solid !important; + } + #content .section .openhub img { + border: none !important; + padding: 0em !important; + } + /\*]]>\*/ + + + +Development +=========== + +Boost sources are on + [GitHub](https://github.com/boostorg). + + +Boost developers constitute a wide array of people + throughout much of the world. Over the years much work has gone + into the quantity and quality of the C++ libraries and tools + that make up Boost. There are many ways to become part of the + Boost developer community, all starting with getting involved + in the development discussion. But if you are looking for an + "easy" place to get your feet wet is to volunteer [testing](testing.html) resources. The wonderful people at + [Black Duck + Open Hub](http://www.openhub.net/) provide a peek into what goes into Boost: + + +* +* + +Release Schedule +================ + +Below is a community maintained calendar of Boost related + events. The release managers try to keep the release related + portion of the calendar up to date. + + + + + + + + + diff --git a/development/int_const_guidelines.html b/development/int_const_guidelines.html new file mode 100644 index 0000000..bceb5d5 --- /dev/null +++ b/development/int_const_guidelines.html @@ -0,0 +1,423 @@ +--- +title: Coding Guidelines for Integral Constant Expressions +copyright: Dr John Maddock 2001. +revised: 2007-10-22 22:55:52 +0100 +--- + + +Coding Guidelines for Integral Constant Expressions + + + +Coding Guidelines for Integral Constant Expressions +=================================================== + +Integral Constant Expressions are used in many places in + C++; as array bounds, as bit-field lengths, as enumerator + initialisers, and as arguments to non-type template parameters. + However many compilers have problems handling integral constant + expressions; as a result of this, programming using non-type + template parameters in particular can be fraught with + difficulty, often leading to the incorrect assumption that + non-type template parameters are unsupported by a particular + compiler. This short article is designed to provide a set of + guidelines and workarounds that, if followed, will allow + integral constant expressions to be used in a manner portable + to all the compilers currently supported by boost. Although + this article is mainly targeted at boost library authors, it + may also be useful for users who want to understand why boost + code is written in a particular way, or who want to write + portable code themselves. + + +What is an Integral Constant Expression? +---------------------------------------- + + +Integral constant expressions are described in section 5.19 + of the standard, and are sometimes referred to as "compile time + constants". An integral constant expression can be one of the + following: + + +1. A literal integral value, for example `0u` or + `3L`. +2. An enumerator value. +3. Global integral constants, for example: + +``` + +const int my\_INTEGRAL\_CONSTANT = 3; + +``` +4. Static member constants, for example: + +``` + +struct myclass +{ static const int value = 0; }; + +``` +5. Member enumerator values, for example: + +``` + +struct myclass +{ enum{ value = 0 }; }; + +``` +6. Non-type template parameters of integral or enumerator + type. +7. The result of a `sizeof` expression, for + example: + +``` + +sizeof(foo(a, b, c)) + +``` +8. The result of a `static_cast`, where the + target type is an integral or enumerator type, and the + argument is either another integral constant expression, or a + floating-point literal. +9. The result of applying a binary operator to two integral + constant expressions: + +``` + +INTEGRAL\_CONSTANT1 op INTEGRAL\_CONSTANT2 + +``` +provided that the operator is not an assignment operator, or comma +operator. +10. The result of applying a unary operator to an integral + constant expression: + +``` + +op INTEGRAL\_CONSTANT1 + +``` +provided that the operator is not the increment or decrement operator. + + +Coding Guidelines +----------------- + + +The following guidelines are declared in no particular order + (in other words you need to obey all of them - sorry!), and may + also be incomplete, more guidelines may be added as compilers + change and/or more problems are encountered. + + +### When declaring constants that are class members always use + the macro `BOOST_STATIC_CONSTANT.` +``` + +template +struct myclass +{ + BOOST\_STATIC\_CONSTANT(int, value = sizeof(T)); +}; + +``` + +Rationale: not all compilers support inline initialisation + of member constants, others treat member enumerators in strange + ways (they're not always treated as integral constant + expressions). The BOOST\_STATIC\_CONSTANT macro uses the most + appropriate method for the compiler in question. + + +### Don't declare integral constant expressions whose type is + wider than int. + + +Rationale: while in theory all integral types are usable in + integral constant expressions, in practice many compilers limit + integral constant expressions to types no wider than + `int`. + + +### Don't use logical operators in integral constant + expressions; use template meta-programming instead. + + +The header `` + contains a number of workaround templates, that fulfil the role + of logical operators, for example instead of: +``` + +INTEGRAL\_CONSTANT1 || INTEGRAL\_CONSTANT2 + +``` + +Use: +``` + +::boost::type\_traits::ice\_or::value + +``` + +Rationale: A number of compilers (particularly the Borland + and Microsoft compilers), tend to not to recognise integral + constant expressions involving logical operators as genuine + integral constant expressions. The problem generally only shows + up when the integral constant expression is nested deep inside + template code, and is hard to reproduce and diagnose. + + +### Don't use any operators in an integral constant expression + used as a non-type template parameter + + +Rather than: +``` + +typedef myclass mytypedef; + +``` + +Use: +``` + +typedef myclass< some\_symbol> + mytypedef; + +``` + +Where `some_symbol` is the symbolic name of a an + integral constant expression whose value is + `(INTEGRAL_CONSTANT1 == INTEGRAL_CONSTANT2).` + + +Rationale: the older EDG based compilers (some of which are + used in the most recent version of that platform's compiler), + don't recognise expressions containing operators as non-type + template parameters, even though such expressions can be used + as integral constant expressions elsewhere. + + +### Always use a fully qualified name to refer to an integral + constant expression. + + +For example: +``` + +typedef myclass< ::boost::is\_integral::value> mytypedef; + +``` + +Rationale: at least one compiler (Borland's), doesn't + recognise the name of a constant as an integral constant + expression unless the name is fully qualified (which is to say + it starts with `::`). + + +### Always leave a space after a '`<`' and before + '`::`' + + +For example: +``` + +typedef myclass< ::boost::is\_integral::value> mytypedef; + ^ + ensure there is space here! + +``` + +Rationale: `<:` is a legal digraph in it's own + right, so `<::` is interpreted as the same as + `[:`. + + +### Don't use local names as integral constant expressions + + +Example: +``` + +template +struct foobar +{ + BOOST\_STATIC\_CONSTANT(int, temp = computed\_value); + typedef myclass mytypedef; // error +}; + +``` + +Rationale: At least one compiler (Borland's) doesn't accept + this. + + +Although it is possible to fix this by using: +``` + +template +struct foobar +{ + BOOST\_STATIC\_CONSTANT(int, temp = computed\_value); + typedef foobar self\_type; + typedef myclass<(self\_type::temp)> mytypedef; // OK +}; + +``` + +This breaks at least one other compiler (VC6), it is better + to move the integral constant expression computation out into a + separate traits class: +``` + +template +struct foobar\_helper +{ + BOOST\_STATIC\_CONSTANT(int, value = computed\_value); +}; + +template +struct foobar +{ + typedef myclass< ::foobar\_helper::value> mytypedef; // OK +}; + +``` + +### Don't use dependent default parameters for non-type + template parameters. + + +For example: +``` + +template ::value> // Error can't deduce value of I in some cases. +struct foobar; + +``` + +Rationale: this kind of usage fails for Borland C++. Note + that this is only an issue where the default value is dependent + upon a previous template parameter, for example the following + is fine: +``` + +template // OK, default value is not dependent +struct foobar; + +``` + +Unresolved Issues +----------------- + + +The following issues are either unresolved or have fixes + that are compiler specific, and/or break one or more of the + coding guidelines. + + +### Be careful of numeric\_limits + + +There are three issues here: + + +1. The header may be absent - it is + recommended that you never include directly + but use instead. This header + includes the "real" header if it is available, + otherwise it supplies it's own std::numeric\_limits + definition. Boost also defines the macro BOOST\_NO\_LIMITS if + is absent. +2. The implementation of std::numeric\_limits may be defined + in such a way that its static-const members may not be usable + as integral constant expressions. This contradicts the + standard but seems to be a bug that affects at least two + standard library vendors; boost defines + BOOST\_NO\_LIMITS\_COMPILE\_TIME\_CONSTANTS in + when this is the case. +3. There is a strange bug in VC6, where the members of + std::numeric\_limits can be "prematurely evaluated" in + template code, for example: +``` + +template +struct limits\_test +{ + BOOST\_STATIC\_ASSERT(::std::numeric\_limits::is\_specialized); +}; + +``` + +This code fails to compile with VC6 even though no instances + of the template are ever created; for some bizarre reason + `::std::numeric_limits::is_specialized` + always evaluates to false, irrespective of what the template + parameter T is. The problem seems to be confined to expressions + which depend on std::numeric\_limts: for example if you replace + `::std::numeric_limits::is_specialized` + with `::boost::is_arithmetic::value`, then + everything is fine. The following workaround also works but + conflicts with the coding guidelines: +``` + +template +struct limits\_test +{ + BOOST\_STATIC\_CONSTANT(bool, check = ::std::numeric\_limits::is\_specialized); + BOOST\_STATIC\_ASSERT(check); +}; + +``` + +So it is probably best to resort to something like this: +``` + +template +struct limits\_test +{ +#ifdef BOOST\_MSVC + BOOST\_STATIC\_CONSTANT(bool, check = ::std::numeric\_limits::is\_specialized); + BOOST\_STATIC\_ASSERT(check); +#else + BOOST\_STATIC\_ASSERT(::std::numeric\_limits::is\_specialized); +#endif +}; + +``` + +### Be careful how you use the sizeof operator + + +As far as I can tell, all compilers treat sizeof expressions + correctly when the argument is the name of a type (or a + template-id), however problems can occur if: + + +1. The argument is the name of a member-variable, or a local + variable (code may not compile with VC6). +2. The argument is an expression which involves the creation + of a temporary (code will not compile with Borland C++). +3. The argument is an expression involving an overloaded + function call (code compiles but the result is a garbage + value with Metroworks C++). + + +### Don't use boost::is\_convertible unless you have to + + +Since is\_convertible is implemented in terms of the sizeof + operator, it consistently gives the wrong value when used with + the Metroworks compiler, and may not compile with the Borland's + compiler (depending upon the template arguments used). + + + + + + + + + diff --git a/development/library_metadata.html b/development/library_metadata.html new file mode 100644 index 0000000..28fd557 --- /dev/null +++ b/development/library_metadata.html @@ -0,0 +1,212 @@ +--- +title: Library Metadata - Boost C++ Libraries +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2005. +revised: 2005-12-17 14:32:46 -0500 +--- + + +Library Metadata - Boost C++ Libraries + + + +Library Metadata +================ + +A module can contain an optional file which describes the + libraries that it contains. This is located at + `meta/libraries.json`. It either contains a single + json object for a single library, or a list or json objects for + any number of libraries. + + +For example, for a single library: +``` + +{ + "key": "unordered", + "name": "Unordered", + "authors": [ "Daniel James" ], + "maintainers": [ "Daniel James " ], + "description": "Unordered associative containers.", + "category": [ + "Containers" + ] +} + + +``` + +An example for multiple libraries: +``` + +[ + { + "key": "functional", + "name": "Functional", + "authors": [ "Mark Rodgers" ], + "description": "The Boost.Function library contains a family of class templates that are function object wrappers.", + "category": [ + "Function-objects" + ] + }, + { + "key": "functional/factory", + "name": "Functional/Factory", + "authors": [ "Tobias Schwinger" ], + "maintainers": [ "Tobias Schwinger " ], + "description": "Function object templates for dynamic and static object creation", + "documentation": "factory/", + "category": [ + "Function-objects" + ] + }, +] + + +``` + +Json fields +----------- + + +### key + + +This is a unique identifier for the library, typically the + path to it from the `libs` directory. + + +### name + + +Human readable name of the library + + +### status + + +Used for libraries with special statuses, currently can have + value `deprecated` for deprecated libraries, and + `hidden` for libraries which shouldn't be displayed to + the user. + + +### authors + + +Either a string, or a list of strings, containing the names + of the authors + + +### description + + +A brief description of what the library does + + +### category + + +A list of categories that the library belongs to, the full + list is below. + + +### documentation + + +Path to the documentation, defaults to the root of the + module. + + +### cxxstd + + +The minimum C++ standard compilation level at which + all, or the large majority, of the functionality in + the library is usable. The possible values are: + + +* 98 = C++98 +* 03 = C++98/C++03 +* 11 = C++11 +* 14 = C++14 +* 17 = C++17 +* 20 = C++20 + + +The level only indicates the minimum level, which + means that the functionality of the library can be + used when compiling at that level or at a higher + level. There may be some functionality in the library + which will need a higher C++ standard compilation + level than is indicated by this value, but the + information about that specific functionality will be + provided for the end-user within the documentation for + that library. If a library does not have this field it + indicates that the end-user will have to read the + library documentation to understand what C++ standard + compilation level is needed to use the library. + + +Available categories +-------------------- +String +String and text processing +Containers +Containers +Iterators +Iterators +Algorithms +Algorithms +Function-objects +Function objects and higher-order programming +Generic +Generic Programming +Metaprogramming +Template Metaprogramming +Preprocessor +Preprocessor Metaprogramming +Concurrent +Concurrent Programming +Math +Math and numerics +Correctness +Correctness and testing +Error-handling +Error handling and recovery +Data +Data structures +Domain +Domain Specific +Image-processing +Image processing +IO +Input/Output +Inter-language +Inter-language support +Emulation +Language Features Emulation +Memory +Memory +Parsing +Parsing +Patterns +Patterns and Idioms +Programming +Programming Interfaces +State +State Machines +System +System +Miscellaneous +Miscellaneous +workarounds +Broken compiler workarounds + + + + + + + + diff --git a/development/report-apr-2006.html b/development/report-apr-2006.html new file mode 100644 index 0000000..c00a0df --- /dev/null +++ b/development/report-apr-2006.html @@ -0,0 +1,257 @@ +--- +title: Review Wizard Status Report for April 2006 +copyright: +revised: +--- + + +Review Wizard Status Report for April 2006 + + + +Review Wizard Status Report for April 2006 +========================================== + +News +---- + + +April 1, 2006 -- The "Promotion Traits" Review Begins + (Fast-Track) Proposal to add promote, integral\_promotion and + floating\_point\_promotion class templates to type\_traits + library. + + +April 6, 2006 -- The "Function Types" Review Begins + (Fast-Track) This library provides a metaprogramming facility + to classify, decompose and synthesize function-, function + pointer-, function reference- and member function pointer + types. + + +March 22, 2006 -- Asio Accepted Announcement: + + +February 17, 2006 - Shared Memory Library Accepted + Announcement: + + +February 5, 2006 - Fixed String Library Rejected + Announcement: + + +We need experienced review managers. Please take a look at + the list of libraries in need of managers and check out their + descriptions. If you can serve as review manager for any of + them, email Ron Garcia or Tom Brinkman "garcia at cs dot + indiana dot edu" and "reportbase at gmail dot com" + respectively. + + +A link to this report will be posted to www.boost.org. If + you would like us to make any modifications or additions to + this report before we do that, please email Ron or Tom. + + +If you're library author and plan on submitting a library + for review in the next 3-6 months, send Ron or Tom a short + description of your library and we'll add it to the Libraries + Under Construction below. We know that there are many libaries + that are near completion, but we have hard time keeping track + all of them. Please keep us informed about your progress. + + +Review + Queue +------------- + + +* Promotion Traits - April 1, 2006 (fast-track) +* Function Types - April 6, 2006 (fast-track) +* Fusion +* Pimpl Pointer +* Property Tree +* Physical Quantities System +* Intrusive Containers + +--- + + +### Function Types + (mini-re-review) + + +| Author: | Tobias Schwinger | +| Review Manager: | Tom Brinkman | +| Download: | | +| Description: | This library provides a + metaprogramming facility to classify, decompose and + synthesize function-, function pointer-, function + reference- and member function pointer types. For the + purpose of this documentation, these types are + collectively referred to as function types (this + differs from the standard definition and redefines the + term from a programmer's perspective to refer to the + most common types that involve functions). +The classes introduced by this library shall conform + to the concepts of the Boost Metaprogramming library + (MPL). + +The Function Types library enables the user + to: + +* test an arbitrary type for being a function + type of specified kind, +* inspect properties of function types, +* view and modify sub types of an encapsulated + function type with MPL Sequence operations, + and +* synthesize function types. + +This library supports variadic + functions and can be configured to support non-default + calling conventions. | + + +### Promotion Traits + + +| Author: | Alexander Nasonov | +| Review Manager: | Tobias Schwinger | +| Download: | | +| Description: | Proposal to add promote, + integral\_promotion and floating\_point\_promotion class + templates to type\_traits library. +Alexander tried it on different compilers with + various success: GNU/Linux (gentoo-hardened): gcc 3.3 + and 3.4, Intel 7, 8 and 9 Windows: VC7 free compiler + Sparc Solaris: Sun C++ 5.3 and 5.7 +See comments at the beginning of + promote\_enum\_test.cpp for what is broken. | + + +### Intrusive Containers + + +| Author: | Olaf Krzikalla | +| Review Manager: | Thorsten Ottosen | +| Download: | | +| Description: | While intrusive containers were + and are widely used in C, they became more and more + forgotten in the C++-world due to the presence of the + standard containers, which don't support intrusive + techniques. Boost.Intrusive not only reintroduces this + technique to C++, but also encapsulates the + implementation in STL-like interfaces. Hence anyone + familiar with standard containers can use intrusive + containers with ease. | + + +### Fusion + + +| Author: | Joel de Guzman | +| Review Manager: | Ron Garcia | +| Download: | + | +| Description: | Fusion is a library of heterogenous + containers and views and algorithms. A set of + heterogenous containers (vector, list, set and map) is + provided out of the box along with view classes that + present various composable views over the data. The + containers and views follow a common sequence concept + with an underlying iterator concept that binds it all + together, suitably making the algorithms fully generic + over all sequence types. +The architecture is somewhat modeled + after MPL which in turn is modeled after STL. It is + code-named "fusion" because the library is the "fusion" + of compile time metaprogramming with runtime + programming. | + + +### Pimpl + Pointer + + +| Author: | Asger Mangaard | +| Review Manager: | Need Volunteer | +| Download: | Boost Sandbox () + under pimpl\_ptr. | +| Description: | The pimpl idiom is widely used to + reduce compile times and disable code coupling. It does + so by moving private parts of a class from the .hpp file + to the .cpp file. However, it's implementation can be + tricky, and with many pitfalls (especially regarding + memory management). The pimpl\_ptr library is a single + header file, implementing a special policy based smart + pointer to greately ease the implementation of the pimpl + idiom. | + + +### Property + Tree + + +| Author: | Marcin Kalicinski | +| Review Manager: | Need Volunteer | +| Download: | Boost Sandbox Vault - + property\_tree\_rev4.zip | +| Description: | Property tree is a data structure + - a tree of (key, value) pairs. It differs from its + cousin, "usual" property map, because it is hierarchical, + not linear. Thus, it is more like a minimalistic Document + Object Model, but not bound to any specific file format. + It can store contents of XML files, windows registry, + JSON files, INI files, even command line parameters. The + library contains parsers for all these formats, and + more. | + + +### Physical Quantities + System + + +| Author: | Andy Little | +| Review Manager: | Need Volunteer | +| Download: | | +| Description: | PQS (Physical Quantities System) + is used for modelling physical-quantities in C++ + programs. The advantages over using built-in types in the + role include: trapping errors in dimensional analysis, + detailed semantic specifications for reliable and + repeatable conversions between units and + self-documentation of source code. PQS is based around + the principles and guidelines of the International System + of Units (SI). The library predefines a large number of + quantities, physical and maths constants using a common + syntax. The library also includes (or will soon include) + classes for manipulating quantities algebraically, for + example angles (radians, steradians, + degrees,minutes,seconds) and vectors, matrices and + quaternions for more advanced modelling of physical + systems. | + + +Libraries under + development +---------------------------- + + +Geometry Library - Author - Andy Little (?) + + +C2\_functions Library - Author - Marcus Mendenhall + + +Please let us know of any libraries you are currently + developing that you intend to submit for review. + + + + + + + + + diff --git a/development/report-dec-2009.html b/development/report-dec-2009.html new file mode 100644 index 0000000..50d1dbc --- /dev/null +++ b/development/report-dec-2009.html @@ -0,0 +1,565 @@ +--- +title: Review Wizard Status Report for December 2009 +copyright: +revised: +--- + + +Review Wizard Status Report for December 2009 + + + +Review Wizard Status Report for December 2009 +============================================= + +News +---- + + +Polygon Library Accepted +Boost 1.40 Released +New Libraries: None +Revised Libraries: Accumulators, Asio, Circular Buffer, Filesystem, Foreach, Function, Fusion, Hash, Interprocess, Intrusive, MPL, Program Options, Proto, Python, Serialization, Unordered, Xpressive + +Geometry Library Accepted +Boost 1.41 Released +New Libraries: Property Tree +Revised Libraries: DateTime, Filesystem, Iostreams, Math, Multi-index Containers, Proto, Python, Regex, Spirit, System, Thread, Unordered, Utility, Wave, Xpressive + +MSM Library Review Underway + + +Constrained Value Review - Review Result still Pending + +Older Issues +============ + + +The Time Series Library, accepted in August 2007, has not yet been +submitted to SVN. + + +The Floating Point Utilities Library, has not yet been submitted to +SVN. It is slated to be integrated with the Boost.Math library. + + +The Switch Library, accepted provisionally in January 2008, +has not yet been submitted for mini-review and full acceptance. + + +The Phoenix Library, accepted provisionally in September 2008, +has not yet been submitted for mini-review and full acceptance. + + +For libraries that are still waiting to get into SVN, please get them +ready and into the repository. The developers did some great work +making the libraries, so don't miss the chance to share that work with +others. + +General Announcements +===================== + + +As always, we need experienced review managers. The review queue has +been growing substantially but we have had few volunteers, so manage +reviews if possible and if not please make sure to watch the review +schedule and participate. Please take a look at the list of libraries +in need of managers and check out their descriptions. In general +review managers are active boost participants or library +contributors. If you can serve as review manager for any of them, +email Ron Garcia or John Phillips, "garcia at osl dot iu dot edu" +and "phillips at mps dot ohio-state dot edu" respectively. + + +We are also suffering from a lack of reviewers. While we all +understand time pressures and the need to complete paying work, the +strength of Boost is based on the detailed and informed reviews +submitted by you. A recent effort is trying to secure at least five +people who promise to submit reviews as a precondition to starting +the review period. Consider volunteering for this and even taking the +time to create the review as early as possible. No rule says you can +only work on a review during the review period. + + +A link to this report will be posted to www.boost.org. If you would +like us to make any modifications or additions to this report before +we do that, please email Ron or John. + + +If you're a library author and plan on submitting a library for review +in the next 3-6 months, send Ron or John a short description of your +library and we'll add it to the Libraries Under Construction below. We +know that there are many libraries that are near completion, but we +have hard time keeping track all of them. Please keep us informed +about your progress. + + +The included review queue isn't a classic queue. It is more an unordered list of the libraries awaiting review. As such, any library in the queue can be reviewed once the developer is ready and a review manager works with the wizards and the developer to schedule a review. It is not FIFO. + +Review Queue +============ + + +* Lexer +* Shifted Pointer +* Logging +* Log +* Join +* Pimpl +* Task +* Endian +* Conversion +* Sorting +* GIL.IO +* AutoBuffer +* String Convert +* Move +* Containers +* Interval Containers +* Type Traits Extensions +* Interthreads +* Bitfield +* Lockfree + +--- +Lexer +----- + + +| Author: | Ben Hanson | +| Review Manager: | Eric Neibler | +| Download: | [Boost Vault](http://boost-consulting.com/vault/index.php?action=downloadfile&filename=boost.lexer.zip&directory=Strings%20-%20Text%20Processing) | +| Description: | A programmable lexical analyser generator inspired by 'flex'. +Like flex, it is programmed by the use of regular expressions +and outputs a state machine as a number of DFAs utilising +equivalence classes for compression. | + +Shifted Pointer +--------------- + + +| Author: | Phil Bouchard | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://www.boost-consulting.com/vault/index.php?&direction=0&order=&directory=Memory) | +| Description: | Smart pointers are in general optimized for a specific resource +(memory usage, CPU cycles, user friendliness, ...) depending on +what the user need to make the most of. The purpose of this smart +pointer is mainly to allocate the reference counter (or owner) and +the object itself at the same time so that dynamic memory management +is simplified thus accelerated and cheaper on the memory map. | + +Logging +------- + + +| Author: | John Torjo | +| Review Manager: | Gennadiy Rozental | +| Download: | | +| Description: | Used properly, logging is a very powerful tool. Besides aiding +debugging/testing, it can also show you how your application is +used. The Boost Logging Library allows just for that, supporting +a lot of scenarios, ranging from very simple (dumping all to one +destination), to very complex (multiple logs, some enabled/some +not, levels, etc). It features a very simple and flexible +interface, efficient filtering of messages, thread-safety, +formatters and destinations, easy manipulation of logs, finding +the best logger/filter classes based on your application's +needs, you can define your own macros and much more! | + +Log +--- + + +| Author: | Andrey Semashev | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://tinyurl.com/cm9lum) | +| Description: | The library is aimed to help adding logging features to +applications. It provides out-of-box support for many widely used +capabilities, such as formatting and filtering based on attributes, +sending logs to a syslog server or to Windows Event Log, or simply +storing logs into files. It also provides basic support for the +library initialization from a settings file. The library can also be +used for a wider range of tasks and implement gathering and processing +statistical information or notifying user about application events. | + +Join +---- + + +| Author: | Yigong Liu | +| Review Manager: | Needed | +| Download: | | +| Description: | Join is an asynchronous, message based C++ concurrency +library based on join calculus. It is applicable both to +multi-threaded applications and to the orchestration of asynchronous, +event-based applications. It follows Comega's design and +implementation and builds with Boost facilities. It provides a high +level concurrency API with asynchronous methods, synchronous methods, +and chords which are "join-patterns" defining the synchronization, +asynchrony, and concurrency. | + +Pimpl +----- + + +| Author: | Vladimir Batov | +| Review Manager: | Needed | +| Download: | +[Boost Vault](http://www.boost-consulting.com/vault/index.php?action=downloadfile&filename=Pimpl.zip&directory=&) + (documentation) + | +| Description: | The Pimpl idiom is a simple yet robust technique to +minimize coupling via the separation of interface and implementation +and then implementation hiding. This library provides a convenient +yet flexible and generic deployment technique for the Pimpl idiom. +It's seemingly complete and broadly applicable, yet minimal, simple +and pleasant to use. | + +Task +---- + + +| Author: | Oliver Kowalke | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost-threadpool.2.tar.gz&directory=Concurrent%20Programming) | +| Description: | Formerly called Thread Pool +The library provides: +\* thread creation policies: + +* determines the management of worker threads: +* fixed set of threads in pool +* create workerthreads on demand (depending on context) +* let worker threads ime out after certain idle time + + +* channel policies: manages access to queued tasks: + + + bounded channel with high and low watermark for queuing tasks + + unbounded channel with unlimited number of queued tasks + + rendezvous syncron hand-over between producer and consumer threads +* queueing policy: determines how tasks will be removed from channel: + + + FIFO + + LIFO + + priority queue (attribute assigned to task) + + smart insertions and extractions (for instance remove oldest task with + certain attribute by newest one) +* tasks can be chained and lazy submit of taks is also supported (thanks to +Braddocks future library). +* returns a task object from the submit function. The task it self can +be interrupted if its is cooperative (means it has some interruption points +in its code -> this\_thread::interruption\_point() ). + | + +Endian +------ + + +| Author: | Beman Dawes | +| Review Manager: | Needed | +| Download: | | +| Description: | | + +Conversion +---------- + + +| Author: | Vicente Botet | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://www.boostpro.com/vault/index.php?action=downloadfile&filename=conversion.zip&directory=Utilities&) | +| Description: | Generic explicit conversion between unrelated types. + +Boost.Conversion provides: +* a generic convert\_to function which can be specialized by the user to +make explicit conversion between unrelated types. +* a generic assign\_to function which can be specialized by the user to +make explicit assignation between unrelated types. +* conversion between std::complex of explicitly convertible types. +* conversion between std::pair of explicitly convertible types. +* conversion between boost::optional of explicitly convertible types. +* conversion between boost::rational of explicitly convertible types. +* conversion between boost::interval of explicitly convertible types. +* conversion between boost::chrono::time\_point and boost::ptime. +* conversion between boost::chrono::duration and boost::time\_duration. + | + +Sorting +------- + + +| Author: | Steven Ross | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://www.boostpro.com/vault/index.php?action=downloadfile&filename=algorithm_sorting.zip) | +| Description: | A grouping of 3 templated hybrid radix/comparison-based sorting +algorithms that provide superior worst-case and average-case +performance to std::sort: integer\_sort, which sorts fixed-size data +types that support a rightshift (default of >>) and a comparison +(default of <) operator. float\_sort, which sorts standard +floating-point numbers by safely casting them to integers. +string\_sort, which sorts variable-length data types, and is optimized +for 8-bit character strings. +All 3 algorithms have O(n(k/s + s)) runtime where k is the number of +bits in the data type and s is a constant, and limited memory overhead +(in the kB for realistic inputs). In testing, integer\_sort varies +from 35% faster to 8X as fast as std::sort, depending on processor, +compiler optimizations, and data distribution. float\_sort is roughly +7X as fast as std::sort on x86 processors. string\_sort is roughly 2X +as fast as std::sort. | + +GIL.IO +------ + + +| Author: | Christian Henning | +| Review Manager: | Needed | +| Download: | [GIL Google Code Vault](http://gil-contributions.googlecode.com/files/rc2.zip) | +| Description: | I/O extension for boost::gil which allows reading and +writing of/in various image formats ( tiff, jpeg, png, etc ). This +review will also include the Toolbox extension which adds some common +functionality to gil, such as new color spaces, algorithms, etc. | + +AutoBuffer +---------- + + +| Author: | Thorsten Ottosen | +| Review Manager: | Needed | +| Download: | [Here](http://www.cs.aau.dk/~nesotto/boost/auto_buffer.zip) | +| Description: | Boost.AutoBuffer provides a container for efficient dynamic, local buffers. +Furthermore, the container may be used as an alternative to std::vector, +offering greater flexibility and sometimes better performance. | + +String Convert +-------------- + + +| Author: | Vladimir Batov | +| Review Manager: | Needed | +| Download: | [Boost Vault](http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost-string-convert.zip) | +| Description: | The library takes the approach of boost::lexical\_cast in the area of +string-to-type and type-to-string conversions, builds on the past +boost::lexical\_cast experience and advances that conversion +functionality further to additionally provide: + +* throwing and non-throwing conversion-failure behavior; +* support for the default value to be returned when conversion fails; +* two types of the conversion-failure check -- basic and better/safe; +* formatting support based on the standard I/O Streams and the standard +(or user-defined) I/O Stream-based manipulators +(like std::hex, std::scientific, etc.); +* locale support; +* support for boost::range-compliant char and wchar\_t-based string containers; +* no DefaultConstructibility requirement for the Target type; +* consistent framework to uniformly incorporate any type-to-type conversions. +It is an essential tool with applications making extensive use of +configuration files or having to process/prepare considerable amounts +of data in, say, XML, etc. | + +Move +---- + + +| Author: | Ion Gaztanaga | +| Review Manager: | Needed | +| Download: | and online documentation at | +| Description: | In C++0x, move semantics are implemented with the introduction of +rvalue references. They allow us to implement move() without verbosity +or runtime overhead. Boost.Move is a library that offers tools to +implement those move semantics not only in compilers with rvalue +references but also in compilers conforming to C++03. | + +Containers +---------- + + +| Author: | Ion Gaztanaga | +| Review Manager: | Needed | +| Download: | .zip&directory=Containers& | +| Documentation: | | +| Description: | Boost.Container library implements several well-known containers, +including STL containers. The aim of the library is to offers advanced +features not present in standard containers or to offer the latest +standard draft features for compilers that comply with C++03. | + +Interval Containers Library +--------------------------- + + +| Author: | Joachim Faulhaber | +| Download: | | +| Documentation: | | +| Review Manager: | Needed | +| Description: | The Interval Template Library (Itl) provides intervals +and two kinds of interval containers: Interval\_sets and +interval\_maps. Interval\_sets and maps can be used just +as sets or maps of elements. Yet they are much more +space and time efficient when the elements occur in +contiguous chunks: intervals. This is obviously the case +in many problem domains, particularly in fields that deal +with problems related to date and time. +Interval containers allow for intersection with interval\_sets +to work with segmentation. For instance you might want +to intersect an interval container with a grid of months +and then iterate over those months. +Finally interval\_maps provide aggregation on +associated values, if added intervals overlap with +intervals that are stored in the interval\_map. This +feature is called aggregate on overlap. It is shown by +example: + +``` + +typedef set guests; +interval\_map party; +guests mary; mary.insert("Mary"); +guests harry; harry.insert("Harry"); +party += make\_pair(intervaldoc/index.html + + + +``` + +### Naming consistency + + +As library developers and users have gained experience with + Boost, the following consistent naming approach has come to be + viewed as very helpful, particularly for larger libraries that + need their own header subdirectories and namespaces. + + +Here is how it works. The library is given a name that + describes the contents of the library. Cryptic abbreviations + are strongly discouraged. Following the practice of the C++ + Standard Library, names are usually singular rather than + plural. For example, a library dealing with file systems might + chose the name "filesystem", but not "filesystems", "fs" or + "nicecode". + + +* The library's primary directory (in parent + boost-root/libs) is given that same name. For + example, boost-root/libs/filesystem. +* The library's primary header directory (in + boost-root/libs/name/include) is given that same + name. For example, + boost-root/libs/filesystem/boost/filesystem. +* The library's primary namespace (in parent + *::boost*) is given that same name, except when + there's a component with that name (e.g., + *boost::tuple*), in which case the namespace name is + pluralized. For example, *::boost::filesystem*. + + +When documenting Boost libraries, follow these conventions + (see also the following section of this document): + + +* The library name is set in roman type. +* The library name is capitalized. +* A period between "Boost" and the library name (e.g., + Boost.Bind) is used if and only if the library name is not + followed by the word "library". +* The word "library" is not part of the library name and is + therefore lowercased. + + +Here are a few examples of how to apply these + conventions: + + +* Boost.Bind was written by Peter Dimov. +* The Boost Bind library was written by Peter Dimov. +* I regularly use Bind, a Boost library written by Peter + Dimov. + + +### Documentation + + +Even the simplest library needs some documentation; the + amount should be proportional to the need. The documentation + should assume the readers have a basic knowledge of C++, but + are not necessarily experts. + + +The format for documentation should be HTML, and should not + require an advanced browser or server-side extensions. Style + sheets are acceptable. ECMAScript/JavaScript is discouraged. + The documentation entry point should always be a file named + index.html; see [Redirection](#Redirection). + + +There is no single right way to do documentation. HTML + documentation is often organized quite differently from + traditional printed documents. Task-oriented styles differ from + reference oriented styles. In the end, it comes down to the + question: Is the documentation sufficient for the mythical + "average" C++ programmer to use the library successfully? + + +Appropriate topics for documentation often include: + + +* General introduction to the library. The introduction + particularly needs to include: + + A very high-level overview of what the library is + good for, and perhaps what it isn't good for, + understandable even by those with no prior knowledge of + the problem domain. + + The simplest possible ("hello world") example of + using the library. +* Tutorial covering basic use cases. +* Reference documentation: + + Description of each class. + + Relationship between classes. + + For each function, as applicable, description, + requirements (preconditions), effects, post-conditions, + returns, and throws. + + Discussion of error detection and recovery + strategy. +* How to compile and link. +* How to test. +* Version or revision history. +* Rationale for design decisions. See [Rationale rationale](#Rationale). +* Acknowledgements. See [Acknowledgments rationale.](#Acknowledgements) + + +If you need more help with how to write documentation you + can check out the article on [Writing + Documentation for Boost](../doc/libs/release/more/writingdoc/index.html). + + +Rationale +--------- + + +Rationale for some of the requirements and guidelines + follows. + + +### Exception-specification + rationale + + +Exception specifications [ISO 15.4] are sometimes coded to + indicate what exceptions may be thrown, or because the + programmer hopes they will improve performance. But consider + the following member from a smart pointer: +``` + +T& operator\*() const throw() { return \*ptr; } + +``` + +This function calls no other functions; it only manipulates + fundamental data types like pointers Therefore, no runtime + behavior of the exception-specification can ever be invoked. + The function is completely exposed to the compiler; indeed it + is declared inline Therefore, a smart compiler can easily + deduce that the functions are incapable of throwing exceptions, + and make the same optimizations it would have made based on the + empty exception-specification. A "dumb" compiler, however, may + make all kinds of pessimizations. + + +For example, some compilers turn off inlining if there is an + exception-specification. Some compilers add try/catch blocks. + Such pessimizations can be a performance disaster which makes + the code unusable in practical applications. + + +Although initially appealing, an exception-specification + tends to have consequences that require **very** + careful thought to understand. The biggest problem with + exception-specifications is that programmers use them as though + they have the effect the programmer would like, instead of the + effect they actually have. + + +A non-inline function is the one place a "throws nothing" + exception-specification may have some benefit with some + compilers. + + +### Naming conventions + rationale + + +The C++ standard committee's Library Working Group discussed + this issue in detail, and over a long period of time. The + discussion was repeated again in early boost postings. A short + summary: + + +* Naming conventions are contentious, and although several + are widely used, no one style predominates. +* Given the intent to propose portions of boost for the + next revision of the C++ standard library, boost decided to + follow the standard library's conventions. +* Once a library settles on a particular convention, a vast + majority of stakeholders want that style to be consistently + used. + + +### Source code fonts + rationale + + +Dave Abrahams comments: An important purpose (I daresay the + primary purpose) of source code is communication: the + documentation of intent. This is a doubly important goal for + boost, I think. Using a fixed-width font allows us to + communicate with more people, in more ways (diagrams are + possible) right there in the source. Code written for + fixed-width fonts using spaces will read reasonably well when + viewed with a variable-width font, and as far as I can tell + every editor supporting variable-width fonts also supports + fixed width. I don't think the converse is true. + + +### Tabs rationale + + +Tabs are banned because of the practical problems caused by + tabs in multi-developer projects like Boost, rather than any + dislike in principle. See [mailing list archives](../community/groups.html#archive). + Problems include maintenance of a single source file by + programmers using tabs and programmers using spaces, and the + difficulty of enforcing a consistent tab policy other than just + "no tabs". Discussions concluded that Boost files should either + all use tabs, or all use spaces, and thus the decision to stick + with spaces for indentation. + + +### Directory and + File Names rationale + + +1. Some legacy file systems require + single-case names. Single-case names eliminate casing mistakes + when moving from case-insensitive to case-sensitive file + systems. + + +2. This is the lowercase portion of + the POSIX portable filename character set. To quote the POSIX + standard, "Filenames should be constructed from the portable + filename character set because the use of other characters can + be confusing or ambiguous in certain contexts." + + +3. Strict implementations of ISO + 9660:1999 and some legacy operating systems prohibit dots in + directory names. The need for this restriction is fading, and + it will probably be removed fairly soon. + + +4. POSIX has special rules for names + beginning with a period. Windows prohibits names ending in a + period. + + +5. Would be too confusing or + ambiguous in certain contexts. + + +6. We had to draw the line + somewhere, and so the limit imposed by a now obsolete Apple + file system was chosen years ago. It still seems a reasonable + limit to aid human comprehension. + + +7. ISO 9660:1999. + + +### ECMAScript/JavaScript rationale + + +Before the 1.29.0 release, two Boost libraries added + ECMAScript/JavaScript documentation. Controversy followed (see + [mailing list + archives](../community/groups.html#archive)), and the developers were asked to remove the + ECMAScript/JavaScript. Reasons given for banning included: + + +* Incompatible with some older browsers and some text based + browsers. +* Makes printing docs pages difficult. +* Often results in really bad user interface design. +* "It's just annoying in general." +* Would require Boost to test web pages for + ECMAScript/JavaScript compliance. +* Makes docs maintenance by other than the original + developer more difficult. + + +Please conside those reasons if you decide that JavaScript + is something you must use. In particular please keep in mind + that the Boost community is not responsible for testing your + use of JavaScript. And hence it is up to you to ensure that the + above issues are fully resolved in your use case. + + +ECMAScript/JavaScript use is allowed but discouraged for the + reasons above. + + +### Rationale rationale + + +Rationale is defined as "The fundamental reasons for + something; basis" by the American Heritage Dictionary. + + +Beman Dawes comments: Failure to supply contemporaneous + rationale for design decisions is a major defect in many + software projects. Lack of accurate rationale causes issues to + be revisited endlessly, causes maintenance bugs when a + maintainer changes something without realizing it was done a + certain way for some purpose, and shortens the useful lifetime + of software. + + +Rationale is fairly easy to provide at the time decisions + are made, but very hard to accurately recover even a short time + later. + + +### Acknowledgements rationale + + +As a library matures, it almost always accumulates + improvements suggested to the authors by other boost members. + It is a part of the culture of boost.org to acknowledge such + contributions, identifying the person making the suggestion. + Major contributions are usually acknowledged in the + documentation, while minor fixes are often mentioned in + comments within the code itself. + + + + + + + diff --git a/development/reuse.html b/development/reuse.html new file mode 100644 index 0000000..a530f27 --- /dev/null +++ b/development/reuse.html @@ -0,0 +1,87 @@ +--- +title: Boost Library Reuse +copyright: Beman Dawes 2000. +revised: 2007-10-22 22:55:52 +0100 +--- + + +Boost Library Reuse + + + +Boost Library reuse: cost versus benefit trade-offs +=================================================== + +A Boost library **should not** use libraries + other than Boost or the C++ Standard Library. + + +A Boost library **should** use other Boost + Libraries or the C++ Standard Library, but only when the + benefits outweigh the costs. + + +The benefits of using components from other libraries may + include clearer, more understandable code, reduced development + and maintenance costs, and the assurance which comes from + reusing well-known and trusted building blocks. + + +The costs may include undesirable coupling between + components, and added compilation and runtime costs. If the + interface to the additional component is complex, using it may + make code less readable, and thus actually increase development + and maintenance costs. + + +Negative effects of coupling become obvious when one library + uses a second library which uses a third, and so on. The worst + form of coupling requires the user understand each of the + coupled libraries. Coupling may also reduce the portability of + a library - even in case when all used libraries are + self-sufficient (see example of questionable usage of + library below). + + +**Example where another boost component should + certainly be used:** boost::noncopyable (in [boost/utility.hpp](/doc/libs/release/boost/utility.hpp)) + has considerable benefits; it simplifies code, improves + readability, and signals intent. Costs are low as coupling is + limited; noncopyable itself uses no other classes and its + header includes only the lightweight headers + and . There are no + runtime costs at all. With costs so low and benefits so high, + other boost libraries should use boost::noncopyable when the + need arises except in exceptional circumstances. + + +**Example where a standard library component might + possibly be used:** Providing diagnostic output as a + debugging aid can be a nice feature for a library. Yet using + Standard Library can involve a lot of + additional cost, particularly if is unlikely + to be used elsewhere in the application. In certain GUI or + embedded applications, coupling to would be a + disqualification. Consider redesign of the boost library in + question so that the user supplies the diagnostic output + mechanism. + + +**Example where another boost component should not be + used:** The boost dir\_it library has considerable + coupling and runtime costs, not to mention portability issues + for unsupported operating systems. While completely appropriate + when directory iteration is required, it would not be + reasonable for another boost library to use dir\_it just to + check that a file is available before opening. C++ Standard + Library file open functionality does this at lower cost. Don't + use dir\_it just for the sake of using a boost library. + + + + + + + + + diff --git a/development/running_regression_tests.html b/development/running_regression_tests.html new file mode 100644 index 0000000..3d11940 --- /dev/null +++ b/development/running_regression_tests.html @@ -0,0 +1,299 @@ +--- +title: Running Boost Regression Tests +copyright: Rene Rivera 2007. MetaCommunications, Inc. 2004-2007. +revised: +--- + + +Running Boost Regression Tests + + + +Running Boost Regression Tests +============================== + +Running Regression Tests Locally +-------------------------------- + +***It's easy to run regression tests on your Boost + clone.*** + + +To run a library's regression tests, run Boost's + [b2](/build/) utility from the + **/libs/**/test directory. To run a + single test, specify its name (as found in + **/libs/**/test/Jamfile.v2) on the + command line. + + +See the [Getting + Started guide](/doc/libs/release/more/getting_started/index.html) for help building or downloading + bjam for your platform, and navigating your Boost + distribution. + + +To run every library's regression tests, run b2 + from **/status directory. + + +To run Boost.Build's regression tests, run "python + test\_all.py" from **/tools/build/v2/test + directory. (Python 2.3 ≤ version < 3.0 required.) + +Running Boost's Automated Regression and Reporting +-------------------------------------------------- + +This runs all Boost regression tests and reports the results back to + the Boost community. + + +### Requirements + + +* Python (2.3 ≤ version < 3.0). +* Git (recent version). +* At least 5 gigabytes of disk space per compiler to be + tested. + + +### Step by step instructions + + +1. Create a new directory for the branch you want to + test. +2. Download the [run.py](https://raw.githubusercontent.com/boostorg/regression/develop/testing/src/run.py) script into that directory: + +> +> 1. Open [run.py](https://raw.githubusercontent.com/boostorg/regression/develop/testing/src/run.py) script in your browser. +> 2. Click the ***Raw*** button. +> 3. Save as run.py in the directory you just created. +> +> +> + +4. Run "`python run.py options... [commands]`" + **with these three required options**, plus any others you wish to employ: + + + * --runner= - Your choice of name that + identifies your results in the reports [1](#runnerid1), [2](#runnerid2). + * --toolsets= - The toolset(s) you want to test + with [3](#toolsets). + * --tag= - The tag (i.e. branch) you want to test. + The only tags that currently make sense are + develop and master.For example: + +python run.py --runner=Metacomm + --toolsets=gcc-4.2.1,msvc-8.0 --tag=develop + + +**Note**: If you are behind a firewall/proxy + server, everything should still "just work". In the rare cases + when it doesn't, you can explicitly specify the proxy server + parameters through the --proxy option, e.g.: +``` +python run.py ... **--proxy=http://www.someproxy.com:3128** + +``` + +### Options +``` +commands: cleanup, collect-logs, get-source, get-tools, patch, regression, +setup, show-revision, test, test-boost-build, test-clean, test-process, test- +run, update-source, upload-logs + +Options: + -h, --help show this help message and exit + --runner=RUNNER runner ID (e.g. 'Metacomm') + --comment=COMMENT an HTML comment file to be inserted in the reports + --tag=TAG the tag for the results + --toolsets=TOOLSETS comma-separated list of toolsets to test with + --libraries=LIBRARIES + comma separated list of libraries to test + --incremental do incremental run (do not remove previous binaries) + --timeout=TIMEOUT specifies the timeout, in minutes, for a single test + run/compilation + --bjam-options=BJAM\_OPTIONS + options to pass to the regression test + --bjam-toolset=BJAM\_TOOLSET + bootstrap toolset for 'bjam' executable + --pjl-toolset=PJL\_TOOLSET + bootstrap toolset for 'process\_jam\_log' executable + --platform=PLATFORM + --user=USER Boost SVN user ID + --local=LOCAL the name of the boost tarball + --force-update do an SVN update (if applicable) instead of a clean + checkout, even when performing a full run + --have-source do neither a tarball download nor an SVN update; used + primarily for testing script changes + --ftp=FTP FTP URL to upload results to. + --proxy=PROXY HTTP proxy server address and port + (e.g.'http://www.someproxy.com:3128') + --ftp-proxy=FTP\_PROXY + FTP proxy server (e.g. 'ftpproxy') + --dart-server=DART\_SERVER + the dart server to send results to + --debug-level=DEBUG\_LEVEL + debugging level; controls the amount of debugging + output printed + --send-bjam-log send full bjam log of the regression run + --mail=MAIL email address to send run notification to + --smtp-login=SMTP\_LOGIN + STMP server address/login information, in the + following form: :@[:] + --skip-tests do not run bjam; used for testing script changes + +``` + +To test develop use "`--tag=develop`", + and to test master use + "`--tag=master`". Or substitute any Boost + tree of your choice. + + +### Details + + +The regression run procedure will: + + +* Download the most recent regression scripts. +* Download the designated testing tool sources including + Boost.Jam, Boost.Build, and the various regression + programs. +* Download the most recent from the [Boost Git Repository](/users/download/#repository) + into the subdirectory boost. +* Build b2 and process\_jam\_log if + needed. (process\_jam\_log is a utility, which + extracts the test results from the log file produced by + Boost.Build). +* Run regression tests, process and collect the + results. +* Upload the results to a common FTP server. + + +The report merger process running continuously will merge + all submitted test runs and publish them at [various locations](testing.html#RegressionTesting). + + +### Advanced use + + +### Providing detailed information about your environment + + +Once you have your regression results displayed in the + Boost-wide reports, you may consider providing a bit more + information about yourself and your test environment. This + additional information will be presented in the reports on a + page associated with your runner ID. + + +By default, the page's content is just a single line coming + from the comment.html file in your run.py + directory, specifying the tested platform. You can put online a + more detailed description of your environment, such as your + hardware configuration, compiler builds, and test schedule, by + simply altering the file's content. Also, please consider + providing your name and email address for cases where Boost + developers have questions specific to your particular set of + results. + + +### Incremental runs + + +You can run run.py in [incremental mode](#incremental) by simply passing it an + identically named command-line flag: +``` +python run.py ... **--incremental** + +``` + +### Patching Boost sources + + +You might encounter an occasional need to make local + modifications to the Boost codebase before running the tests, + without disturbing the automatic nature of the regression + process. To implement this under regression.py: + + +1. Codify applying the desired modifications to the sources + located in the ./boost\_root subdirectory in a single + executable script named patch\_boost + (patch\_boost.bat on Windows). +2. Place the script in the run.py directory. + + +The driver will check for the existence of the + patch\_boost script, and, if found, execute it after + obtaining the Boost sources. + + +### Feedback + + +Please send all comments/suggestions regarding this document + and the testing procedure itself to the [Boost Testing list](/community/groups.html#testing). + + +### Notes + + +[1] If you are + running regressions interlacingly with a different set of + compilers (e.g. for Intel in the morning and GCC at the end of + the day), you need to provide a *different* runner id + for each of these runs, e.g. your\_name-intel, and + your\_name-gcc. + + +[2] The limitations + of the reports' format/medium impose a direct dependency + between the number of compilers you are testing with and the + amount of space available for your runner id. If you are + running regressions for a single compiler, please make sure to + choose a short enough id that does not significantly disturb + the reports' layout. You can also use spaces in the runner ID + to allow the reports to wrap the name to fit. + + +[3] If + --toolsets option is not provided, the script will try + to use the platform's default toolset (gcc for most + Unix-based systems). + + +[4] By default, + the script runs in what is known as *full mode*: on each + run.py invocation all the files that were left in + place by the previous run — including the binaries for + the successfully built tests and libraries — are deleted, + and everything is rebuilt once again from scratch. By contrast, + in *incremental mode* the already existing binaries are + left intact, and only the tests and libraries which source + files has changed since the previous run are re-built and + re-tested. + + +The main advantage of incremental runs is a significantly + shorter turnaround time, but unfortunately they don't always + produce reliable results. Some type of changes to the codebase + (changes to the b2 testing subsystem in particular) often + require switching to a full mode for one cycle in order to + produce trustworthy reports. + + +As a general guideline, if you can afford it, testing in + full mode is preferable. + + + + + + + + + diff --git a/development/separate_compilation.html b/development/separate_compilation.html new file mode 100644 index 0000000..1312e51 --- /dev/null +++ b/development/separate_compilation.html @@ -0,0 +1,536 @@ +--- +title: Guidelines for Authors of Boost Libraries Containing Separate Source +copyright: John Maddock 1998. +revised: 2007-10-22 22:55:52 +0100 +--- + + +Guidelines for Authors of Boost Libraries Containing Separate + Source + + + +Guidelines for Authors of Boost Libraries Containing + Separate Source +===================================================================== + +These guidelines are designed for the authors of Boost + libraries which have separate source that need compiling in + order to use the library. Throughout, this guide refers to a + fictitious "whatever" library, so replace all occurrences of + "whatever" or "WHATEVER" with your own library's name when + copying the examples. + + +Contents +-------- +[Changes Affecting Source + Code](#source_changes) + + +[Preventing Compiler ABI + Clashes](#abi) +[Static or Dymanic + Libraries](#static_or_dynamic) +[Supporting Windows Dll's](#dlls) +[Automatic Library Selection and + Linking with auto\_link.hpp](#auto-link) + + +[Changes Affecting the Build + System](#build_changes) + + +[Creating the Library + Jamfile](#jamfile) +[Testing Auto-linking](#testing) + + +[Copyright](#copyright) + +Changes + Affecting Source Code +------------------------------ + + +### Preventing Compiler ABI + Clashes + + +There are some compilers (mostly Microsoft Windows compilers + again!), which feature a range of compiler switches that alter + the ABI of C++ classes and functions. By way of example, + consider Borland's compiler which has the following + options: +``` + +-b (on or off - effects enum sizes). +-Vx (on or off - empty members). +-Ve (on or off - empty base classes). +-aX (alignment - 5 options). +-pX (Calling convention - 4 options). +-VmX (member pointer size and layout - 5 options). +-VC (on or off, changes name mangling). +-Vl (on or off, changes struct layout). + +``` + +These options are provided in addition to those affecting + which runtime library is used (more on which later); the total + number of combinations of options can be obtained by + multiplying together the individual options above, so that + gives 2\*2\*2\*5\*4\*5\*2\*2 = 3200 combinations! + + +The problem is that users often expect to be able to build + the Boost libraries and then just link to them and have + everything just plain work, no matter what their project + settings are. Irrespective of whether this is a reasonable + expectation or not, without some means of managing this issue, + the user may well find that their program will experience + strange and hard to track down crashes at runtime unless the + library they link to was built with the same options as their + project (changes to the default alignment setting are a prime + culprit). One way to manage this is with "prefix and suffix" + headers: these headers invoke compiler specific #pragma + directives to instruct the compiler that whatever code follows + was built (or is to be built) with a specific set of compiler + ABI settings. + + +Boost.config provides the macro BOOST\_HAS\_ABI\_HEADERS which + is set whenever there are prefix and suffix headers available + for the compiler in use, typical usage in a header like + this: +``` + +#ifndef BOOST\_WHATEVER\_HPP +#define BOOST\_WHATEVER\_HPP + +#include + +// this must occur after all of the includes and before any code appears: +#ifdef BOOST\_HAS\_ABI\_HEADERS +# include BOOST\_ABI\_PREFIX +#endif +// +// this header declares one class, and one function by way of examples: +// +class whatever +{ + // details. +}; + +whatever get\_whatever(); + +// the suffix header occurs after all of our code: +#ifdef BOOST\_HAS\_ABI\_HEADERS +# include BOOST\_ABI\_SUFFIX +#endif + +#endif + +``` + +You can include this code in your library source files as + well if you want, although you probably shouldn't need to: + + +* If you *don't* use these in the library source + files (but do in your library's headers) and the user + attempts to compile the library source with a non-default ABI + setting, then they will get compiler errors if there are any + conflicts. +* If you *do* include them in both the library's + headers and the library source files, then the code should + always compile no matter what the compiler settings used, + although the result might not match what the user was + expecting: since we've forced the ABI back into default + mode. + + +#### Rationale: + + +Without some means of managing this issue, users often + report bugs along the line of "Your silly library always + crashes when I try and call it" and so on. These issues can be + extremely difficult and time consuming to track down, only to + discover in the end that it's a compiler setting that's changed + the ABI of the class and/or function types of the program + compared to those in the pre-compiled library. The use of + prefix/suffix headers can minimize this problem, although + probably not remove it completely. + + +##### Counter Argument #1: + + +Trust the user, if they want 13-byte alignment (!) let them + have it. + + +##### Counter Argument #2: + + +Prefix/suffix headers have a tendency to "spread" to other + boost libraries - for example if boost::shared\_ptr<> + forms part of your class's ABI, then including prefix/suffix + headers in your code will be of no use unless shared\_ptr.hpp + also uses them. Authors of header-only boost libraries may not + be so keen on this solution - with some justification - since + they don't face the same problem. + + +### Static or Dynamic Libraries + + +When the users runtime is dynamically linked the Boost + libraries can be built either as dynamic libraries (.so's on + Unix platforms, .dll's on Windows) or as static libraries (.a's + on Unix, .lib's on Windows). So we have a choice as to which is + supported by default: + + +* On Unix platforms it typically makes no difference to the + code: the user just selects in their makesfile which library + they prefer to link to. +* On Windows platforms, the code has to be specially + annotated to support DLL's, so we need to pick one option as + the default and one as an alternative. +* On Windows platforms, we can inject special code to + automatically select which library variant to link against: + so again we need to decide which is to be the default (see + the section on auto-linking below). + + +The recomendation is to pick static linking by default. + + +#### Rationale: + + +There is no one policy that fits all here. + + +The rationale for the current behaviour was inherited from + Boost.Regex (and it's ancestor regex++): this library + originally used dynamic linking by default whenever the runtime + was dynamic. It's actually safer that way should you be using + regex from a dll for example. However, this behavior brought a + persistent stream of user complaints: mainly about deployment, + all asking if static linking could be the default. After regex + changed behavior the complaints stopped, and the author hasn't + had one complaint about static linking by default being the + wrong choice. + + +Note that other libraries might need to make other choices: + for example libraries that are intended to be used to implement + dll pluggin's would like need to use dynamic linking in almost + all cases. + + +### Supporting Windows Dll's + + +On most Unix-like platforms no special annotations of source + code are required in order for that source to be compiled as a + shared library because all external symbols are exposed. + However the majority of Windows compilers require that symbols + that are to be imported or exported from a dll, be prefixed + with \_\_declspec(dllimport) or \_\_declspec(dllexport). Without + this mangling of source code, it is not possible to correctly + build shared libraries on Windows (historical note - originally + these declaration modifiers were required on 16-bit Windows + where the memory layout for exported classes was different from + that of "local" classes - although this is no longer an issue, + there is still no way to instruct the linker to "export + everything", it also remains to be seen whether 64-bit Windows + will resurrect the segmented architecture that led to this + problem in the first place. Note also that the mangled names of + exported symbols are different from non-exported ones, so + \_\_declspec(dllimport) is required in order to link to code + within a dll). + + +In order to support the building of shared libraries on MS + Windows your code will have to prefix all the symbols that your + library exports with a macro (lets call it BOOST\_WHATEVER\_DECL) + that your library will define to expand to either + \_\_declspec(dllexport) or \_\_declspec(dllimport) or nothing, + depending upon how your library is being built or used. Typical + usage would look like this: +``` + +#ifndef BOOST\_WHATEVER\_HPP +#define BOOST\_WHATEVER\_HPP + +#include + +#ifdef BOOST\_HAS\_DECLSPEC // defined in config system +// we need to import/export our code only if the user has specifically +// asked for it by defining either BOOST\_ALL\_DYN\_LINK if they want all boost +// libraries to be dynamically linked, or BOOST\_WHATEVER\_DYN\_LINK +// if they want just this one to be dynamically liked: +#if defined(BOOST\_ALL\_DYN\_LINK) || defined(BOOST\_WHATEVER\_DYN\_LINK) +// export if this is our own source, otherwise import: +#ifdef BOOST\_WHATEVER\_SOURCE +# define BOOST\_WHATEVER\_DECL \_\_declspec(dllexport) +#else +# define BOOST\_WHATEVER\_DECL \_\_declspec(dllimport) +#endif // BOOST\_WHATEVER\_SOURCE +#endif // DYN\_LINK +#endif // BOOST\_HAS\_DECLSPEC +// +// if BOOST\_WHATEVER\_DECL isn't defined yet define it now: +#ifndef BOOST\_WHATEVER\_DECL +#define BOOST\_WHATEVER\_DECL +#endif + +// +// this header declares one class, and one function by way of examples: +// +class BOOST\_WHATEVER\_DECL whatever +{ + // details. +}; + +BOOST\_WHATEVER\_DECL whatever get\_whatever(); + +#endif + +``` +And then in the source code for this library one would use: + +``` + + +// +// define BOOST\_WHATEVER SOURCE so that our library's +// setup code knows that we are building the library (possibly exporting code), +// rather than using it (possibly importing code): +// +#define BOOST\_WHATEVER\_SOURCE +#include + +// class members don't need any further annotation: +whatever::whatever() { } +// but functions do: +BOOST\_WHATEVER\_DECL whatever get\_whatever() +{ + return whatever(); +} + +``` + +#### Importing/exporting dependencies + + +As well as exporting your main classes and functions (those + that are actually documented), Microsoft Visual C++ will warn + loudly and often if you try to import/export a class whose + dependencies are not also exported. Dependencies include: any + base classes, any user defined types used as data members, plus + all of the dependencies of your dependencies and so on. This + causes particular problems when a dependency is a template + class, because although it is technically possible to export + these, it is not at all easy, especially if the template itself + has dependencies which are implementation-specific details. In + most cases it's probably better to simply suppress the warnings + using: +``` + +#ifdef BOOST\_MSVC +# pragma warning(push) +# pragma warning(disable : 4251 4231 4660) +#endif + +// code here + +#ifdef BOOST\_MSVC +#pragma warning(pop) +#endif + +``` + +This is safe provided that there are no dependencies that + are (template) classes with non-constant static data members, + these really do need exporting, otherwise there will be + multiple copies of the static data members in the program, and + that's really really bad. + + +Historical note: on 16-bit Windows you really did have to + export all dependencies or the code wouldn't work, however + since the latest Visual Studio .NET supports the import/export + of individual member functions, it's a reasonably safe bet that + Windows compilers won't do anything nasty - like changing the + class's ABI - when importing/exporting a class. + + +#### Rationale: + + +*Why bother - doesn't the import/export mechanism take up + more code that the classes themselves?* + + +A good point, and probably true, however there are some + circumstances where library code must be placed in a shared + library - for example when the application consists of multiple + dll's as well as the executable, and more than one those dll's + link to the same Boost library - in this case if the library + isn't dynamically linked and it contains any global data (even + if that data is private to the internals of the library) then + really bad things can happen - even without global data, we + will still get a code bloating effect. Incidentally, for larger + applications, splitting the application into multiple dll's can + be highly advantageous - by using Microsoft's "delay load" + feature the application will load only those parts it really + needs at any one time, giving the impression of a much more + responsive and faster-loading application. + + +*Why static linking by default?* + + +In the worked example above, the code assumes that the + library will be statically linked unless the user asks + otherwise. Most users seem to prefer this (there are no + separate dll's to distribute, and the overall distribution size + is often significantly smaller this way as well: i.e. you pay + for what you use and no more), but this is a subjective call, + and some libraries may even only be available in dynamic + versions (Boost.threads for example). + + +### Automatic Library + Selection and Linking with [auto\_link.hpp](/doc/libs/release/boost/config/auto_link.hpp) + + +Many Windows compilers ship with multiple runtime libraries + - for example Microsoft Visual Studio .NET comes with 6 + versions of the C and C++ runtime. It is essential that the + Boost library that the user links to is built against the same + C runtime as the program is built against. If that is not the + case, then the user will experience linker errors at best, and + runtime crashes at worst. The Boost build system manages this + by providing different build variants, each of which is build + against a different runtime, and gets a slightly different + mangled name depending upon which runtime it is built against. + For example the regex libraries get named as follows when built + with Visual Studio .NET 2003: +``` + +boost\_regex-vc71-mt-1\_31.lib +boost\_regex-vc71-mt-gd-1\_31.lib +libboost\_regex-vc71-mt-1\_31.lib +libboost\_regex-vc71-mt-gd-1\_31.lib +libboost\_regex-vc71-mt-s-1\_31.lib +libboost\_regex-vc71-mt-sgd-1\_31.lib +libboost\_regex-vc71-s-1\_31.lib +libboost\_regex-vc71-sgd-1\_31.lib + +``` + +The difficulty now is selecting which of these the user + should link his or her code to. + + +In contrast, most Unix compilers typically only have one + runtime (or sometimes two if there is a separate thread safe + option). For these systems the only choice in selecting the + right library variant is whether they want debugging info, and + possibly thread safety. + + +Historically Microsoft Windows compilers have managed this + issue by providing a #pragma option that allows the header for + a library to automatically select the library to link to. This + makes everything automatic and extremely easy for the end user: + as soon as they include a header file that has separate source + code, the name of the right library build variant gets embedded + in the object file, and as long as that library is in the + linker search path, it will get pulled in by the linker without + any user intervention. + + +Automatic library selection and linking can be enabled for a + Boost library by including the header + , after first defining + BOOST\_LIB\_NAME and, if applicable, BOOST\_DYN\_LINK. +``` + +// +// Automatically link to the correct build variant where possible. +// +#if !defined(BOOST\_ALL\_NO\_LIB) && !defined(BOOST\_WHATEVER\_NO\_LIB) && !defined(BOOST\_WHATEVER\_SOURCE) +// +// Set the name of our library, this will get undef'ed by auto\_link.hpp +// once it's done with it: +// +#define BOOST\_LIB\_NAME boost\_whatever +// +// If we're importing code from a dll, then tell auto\_link.hpp about it: +// +#if defined(BOOST\_ALL\_DYN\_LINK) || defined(BOOST\_WHATEVER\_DYN\_LINK) +# define BOOST\_DYN\_LINK +#endif +// +// And include the header that does the work: +// +#include +#endif // auto-linking disabled + +``` + +The library's user documentation should note that the + feature can be disabled by defining either BOOST\_ALL\_NO\_LIB or + BOOST\_WHATEVER\_NO\_LIB: + + +If for any reason you need to debug this feature, the header + will output some helpful + diagnostic messages if you first define + BOOST\_LIB\_DIAGNOSTIC. + + +Changes + Affecting the Build System +----------------------------------- + + +### Creating the library Jamfile + + +The Jamfile for building library "whatever" typically lives + in boost-root/libs/whatever/build, the only extra step required + is to add a requirement to the library target so + that your code knows whether it's building a dll or static + library, a typical Jamfile would like like this: +``` + +lib boost\_regex : ../src/whatever.cpp : + shared:BOOST\_WHATEVER\_DYN\_LINK=1 ; + + +``` + +### Testing + Auto-linking + + +Testing the auto-link feature is somewhat convoluted, and + requires access to a compiler that supports the feature: refer + to [libs/config/test/link/test/Jamfile.v2](/doc/libs/release/libs/config/test/link/test/Jamfile.v2) + for an example. + + + + + + + + + diff --git a/development/submissions.html b/development/submissions.html new file mode 100644 index 0000000..2ba811d --- /dev/null +++ b/development/submissions.html @@ -0,0 +1,344 @@ +--- +title: Boost Library Submission Process +copyright: Beman Dawes, 2000. +revised: +--- + + +Boost Library Submission Process + + + +Boost Library Submission Process +================================ + +This page describes the process a library developer goes + through to get a library accepted by Boost. + + +See the [Boost Library + Requirements and Guidelines](requirements.html) page for issues of content. + + +### Steps for getting a library accepted by Boost: + + +* [1. Learn about Boost](#Learn) +* [2. Determine interest](#interest) +* [3. Start Development](#Development) +* [4. Refinement](#Refinement) +* [5. Getting seconded for review](#Seconded) +* [6. Seek a Review Manager](#Seeking) +* [7. Formal Review](#Review) +* [8. Web site posting](#SitePosting) +* [9. People page](#People) +* [10. Lifecycle](#Lifecycle) + + +1. Learn about Boost +-------------------- + + +Follow posts on the [main + developers mailing list](/community/groups.html#main) for a while, or look through the + [archives](/community/groups.html#archive). Explore + the [web site](/). Learn the [Requirements](requirements.html). Read the rest of this + page to learn about the process. Search the web to get an idea + of the commitment required to get a library into Boost. + + + +There is a culture associated with Boost, aimed at + encouraging high quality libraries by a process of discussion + and refinement. Some libraries get past community review + in less than two years from first concept, but most take longer, + sometimes a lot longer. Five to ten years to get a library past + review and into Boost is not unheard of, and you should prepare + yourself for the personal investment required. + + +2. Determine + interest +---------------------- + + +While participation in reviews for other submissions is not a + prerequisite for submitting a library to Boost, it is highly + recommended; it will acquaint you with the process and the + emotional demands of a formal review. There's nothing that quite + deflates the ego like having brilliant members of the C++ + community critiquing your work, but, alas, it's worth it! + + +Potential library submitters should be careful to + research the prior art before beginning to design a + new library. Unfortunately, now and then folks arrive at Boost + with a new library into which they have invested many hours, only + to find that Boost already has that functionality, and sometimes + has had it for years. Candidates should also research libraries being + developed by others intended for Boost - if you have an itch + to scratch, often so have had others and collaboration + developing their library is usually considerably more efficient + than going at it alone. + + +Potential library submitters should also be careful to + publicise, canvas for, and gauge interest in their library, + ideally before beginning it, but certainly before submitting it + for review. Even a superbly designed library can fail review if + there isn't enough interest in the subject matter; We can only + review libraries with enough appeal to form a viable peer + review. Ensuring that enough people are interested in your + potential library goes a long way to ensure that. + + +There are many places to publicise and canvas for a library. + The Boost developers [mailing + list](/community/groups.html) ought to be your first stop in gauging interest + in a possible new C++ library. Be prepared to pivot your design + and focus until your proposed library finds traction. Other + places useful for gauging interest in a library might be [Reddit/r/cpp](https://www.reddit.com/r/cpp/). + + +A message to the Boost developers mailing list + might be as simple as "Is there any interest in a + library which solves Travelling Salesperson problems in linear + time?" + + +A bit of further description or snippet of code may be + helpful. By the way, the preferred format for messages on the + mailing list is plain text; not rich text, HTML, etc. + + +Avoid posting lengthy descriptions, documentation, + or code to the mailing list, and, please, no attachments. + The best place to provide lengthy material is via. a web link. + Project hosting services such as sourceforge, github, google + code, and bitbucket serve well for this purpose. + + +3. Start + Development +--------------------- + + +If response to an initial query indicates interest, then + by all means make your library publicly available if you haven't + already done so. + + +Please commit your code to a version control system such as + Git, and make your documentation available in HTML format on + a public website such as Github. An issue tracker such as the one + provided by Github is also highly recommended. + + +Your library should contain material as if it were on the + boost.org web site. The closer your library reflects the + final directory structure and format of the web site, the + better. This makes it possible for reviewers to simply copy + your code into the Boost distribution for testing. + + +Please verify that your library compiles and runs under + at least two compilers. This flushes out obvious portability + problems. + + +It is recommended that you release your code under the Boost + Software License; see the [Requirements](requirements.html) page for more + information. + + +4. Refinement +------------- + + +Discuss, refine, rewrite. Repeat until satisfied. + + +The exact details of this process varies a lot. Usually it + is public, on the mailing list, but frequently discussion + happens in private emails. For some libraries the process is + over quickly, but for others it goes on for months. It's + often challenging, and sometimes veers into completely + unexpected directions. + + +The [archive](/community/groups.html#archive) of + past messages is one way to see how this process worked for + other Boost libraries. + + +To get an idea of best practices with some samples of script + and code in existing Boost libraries, see the + [Best Practices Handbook](https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook) on the Boost wiki. + + +5. Getting seconded + for review +------------------------------- + + +When you feel that your library is ready for entry into Boost, + you need to find at least one member (but preferably several) of + the Boost community who is willing to publicly endorse your + library for entry into Boost. A simple method of achieving this + is to post to [the Boost + developers mailing list](/community/groups.html) a short description of your + library, links to its github and documentation, and a request for + endorsements. + + +It is expected that those who endorse a library for review + will have performed at least a cursory check of the library's + suitability for Boost in terms of documentation, fit with + the rest of Boost and usefulness. A public endorsement of a + library for review means that from an initial glance, they + believe that the library has a reasonable chance to be accepted + during a formal review. The expectation is that these endorsers + will themselves review of the library during formal review + period, though this is not binding. + + +Once you have a list of people who have publicly endorsed + your library for review, email [the Review Wizards](/community/reviews.html#Wizard) + to request that your library be added to [the review queue](/community/review_schedule.html) + where the following information will be shown: + + +* Submission +* Submitter +* Links to Source (GitHub), Documentation (HTML website) + and any Incubator entry +* Names of members who endorse this submission for review +* Review Manager +* Review Dates + + +6. Seek a Review + Manager +------------------------- + + +In order to schedule a formal review, the author must find a + capable volunteer to manage the review. This should be someone + with knowledge of the library domain, and experience with the + review process. See [Formal + Review Process](/community/reviews.html) for the responsibilities of the review + manager. + + +Authors can find community members interested in managing + reviews through discussion of the library on the developer + list. If no one steps forward to volunteer to manage the + review, it is appropriate to contact an experienced Boost + member who showed interest in the library. Be considerate that + managing a review is a serious commitment; for this reason, + it's better to contact the member off-list. + + +If you cannot find a review manager after 3 weeks using the + means above, and your submission is targeting eventual + standardization, there is a list of Boost regulars who are also + WG21 committee members who have volunteered to act as review + managers in such cases. Please try them in the order listed. + They are: Zach Laine, Micheal Caisse, Matt Calabrese, Edward + Diener, Louis Dionne, Vinnie Falco, Glen Fernandes, and David + Sankel. + + +Once a potential review manager has been identified, [contact the + review wizards](/community/reviews.html#Wizard) for approval. The wizards approve review + managers based on their level of participation in the Boost + community. + + +The review wizards will coordinate with both the author and + review manager to schedule a date convenient for both. + + +See [Formal Review + Process](/community/reviews.html) for details. + + +7. Formal Review +---------------- + + +Before your formal review begins, double-, triple-, and + quadruple-check your library. Verify that every code example + works, that all unit tests pass on at least two compilers on at + least two major operating systems, and run your documentation + through a spelling and grammar checker. + + +Please do not modify your library on its master branch + during a review. Instead, modify a separate develop branch in + response to feedback and reviews. For bigger ticket items of + work, open issues on your issue tracker so interested people can + track the fixing of specific issues raised. + + +The review manager will consider all the reviews made by + members of the community and arrive at a decision on + whether your library is rejected, conditionally accepted or + unconditionally accepted. They will post a report summarising + the decision publicly. If conditions are attached to + acceptance, you will need to implement those conditions or + else undergo an additional formal review. + + +8. Boost web site + posting +-------------------------- + + +Once an accepted library is ready for inclusion on the Boost + web site, the submitter is typically given Boost repository + write access, and expected to check-in and maintain the library + there. Contact the moderators if you need write access or + direct use of the repository isn't possible for you. + + +9. People page +-------------- + + +If the boost.org web site doesn't already have your capsule + biography and picture (optional, with not-too-serious pictures + preferred!), please send them to the Boost webmaster. It is up + to you as to whether or not the biography includes your email + address or other contact information. The preferred picture + format is .jpg, but other common formats are acceptable. The + preferred image size is 500x375 but the webmaster has photo + editing software and can do the image preparation if + necessary. + + +10. Lifecycle +------------- + + +Libraries are software; they lose their value over time if + not maintained. Postings on the Boost developers or users + mailing lists can alert you to potential maintenance needs; + please plan to maintain your library over time. If you no + longer can or wish to maintain your library, please post a + message on the Boost developers mailing list asking for a new + maintainer to volunteer and then spend the time to help them + take over. + + +Orphaned libraries will be put in the care of the [Community + Maintenance Team](https://svn.boost.org/trac/boost/wiki/CommunityMaintenance). + + + + + + + + + diff --git a/development/template/template.html b/development/template/template.html new file mode 100644 index 0000000..769a07b --- /dev/null +++ b/development/template/template.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2005. +revised: 2005-12-17 14:32:46 -0500 +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/development/test.html b/development/test.html new file mode 100644 index 0000000..3032191 --- /dev/null +++ b/development/test.html @@ -0,0 +1,127 @@ +--- +title: Boost Test Policies and Protocols +copyright: Beman Dawes 2001. +revised: +--- + + +Boost Test Policies and Protocols + + + +Boost Test Policies and Protocols +================================= + +The Boost libraries are intended to be both reliable and + portable. Every experienced programmer knows that means each + library must be tested against a suitable number of test cases, + on a wide range of platforms, and then tested again (regression + tested) every time a change is made and before every + release. + + +"Quality assurance based on a wide range of targeted tests" + as one of the key answers to C.A.R Hoare's question "How did + software get so reliable without proof." + + +Regression test +--------------- + + +Boost uses an automatic [regression + test suite](/doc/tools/regression/index.html) which generates HTML [compiler status + tables](/development/testing.html#RegressionTesting). + + +Test Policy +----------- + + +### Required + + +* Every Boost library should supply one or more suitable + test programs to be exercised by the Boost [regression + test suite](/doc/tools/regression/index.html). In addition to the usual compile-link-run + tests expecting successful completion, compile-only or + compile-and-link-only tests may be performed, and success for + the test may be defined as failure of the steps. +* Test program execution must report errors by returning a + non-zero value. They may also write to stdout or stderr, but + that output should be relatively brief. Regardless of other + output, a non-zero return value is the only way the + regression test framework will recognize an error has + occurred. Note that test programs to be included in the + status tables must compile, link, and run quickly since the + tests are executed many, many, times. +* Libraries with time consuming tests should be divided + into a fast-execution basic test program for the status + tables, and a separate full-coverage test program for + exhaustive test cases. The basic test should concentrate on + compilation issues so that the status tables accurately + reflect the library's likelihood of correct compilation on a + platform. +* If for any reason the usual test policies do not apply to + a particular library, an alternate test strategy must be + implemented. +* A [Jamfile](/doc/tools/regression/index.html#Adding_new_test) to drive the regression tests for the + library. + + +### Optional (but highly recommended) + + +The [Boost + Test Library](/doc/libs/release/libs/test/index.html) provides many useful components which ease the + construction of test programs. + + +* Use the library's [Test Tools](/doc/libs/release/libs/test/doc/html/boost_test/testing_tools.html) for the construction of simple test programs + that do not need much structure. +* Use the library's [Unit + Test Framework](/doc/libs/release/libs/test/doc/html/boost_test/tests_organization.html) for the construction of more complex test + programs that need to be structured into individual tests and + test suites. + + +Suggested Protocol for Fixing Bugs or Adding Features. +------------------------------------------------------ + + +* First, add regression test cases that detects the bug or + tests the feature. Sometimes adding one case suggests similar + untested cases, and they are added too. +* Second, for bugs, run the regression test and verify that + the bug is now detected. +* Third, then, and only then, fix the bug or add the + feature. +* Finally, rerun the full regression tests - sometimes the + change breaks something else. + + +History +------- + + +[See + Regression Test History](/doc/tools/regression/index.html#History). + + +Acknowledgements +---------------- + + +Written by Beman Dawes. Jens Maurer, Paul Moore, Gary Powell + and Jeremy Siek contributed helpful suggestions. + +--- + + + + + + + + + diff --git a/development/testing.html b/development/testing.html new file mode 100644 index 0000000..01b5dd3 --- /dev/null +++ b/development/testing.html @@ -0,0 +1,144 @@ +--- +title: Testing +copyright: Rene Rivera 2007. +revised: +--- + + +Testing + + +/\*\*/ + + + +Testing +======= + +* [Regression Tests](#RegressionTesting) +* [Snapshots](#Snapshots) +* [Inspection Reports](#Inspection) +* [More about regression + tests](#Introduction) + + +Regression Tests +---------------- + + +A group of volunteers donate CPU cycles and large amounts of + disk space to collectively produce the regression testing + result tables. Various Boost repository versions are tested for + the benefit of library developers and interested users: + +| Version | Developers | +| --- | --- | +| Develop branch | [Summary](tests/develop/developer/summary.html) | [Unresolved + Issues](tests/develop/developer/issues.html) | +| Master branch | [Summary](tests/master/developer/summary.html) | [Unresolved + Issues](tests/master/developer/issues.html) | + + +Snapshots +--------- + + +Snapshots are used for quality control checks.  The + Unix tarballs and Windows zipballs are identical except for the + line endings exported from Git. + + +Because the snapshots represent work-in-process, they may + not be suitable for production use. + +| Version | Download | Documentation | +| --- | --- | --- | +| Master branch | [Sourceforge](https://sourceforge.net/projects/boost/files/boost/snapshots/master/ "Boost master branch snapshots on sourceforge"), [JFrog.io](https://boostorg.jfrog.io/artifactory/main/master/ "Boost master branch snapshots on JFrog.io"). | [Documentation](/doc/libs/master/ "Boost master branch documentation snapshot") | +| Develop branch | [Sourceforge](https://sourceforge.net/projects/boost/files/boost/snapshots/develop/ "Boost develop branch snapshots on sourceforge"), [JFrog.io](https://boostorg.jfrog.io/artifactory/main/develop "Boost develop branch snapshots on JFrog.io"). | [Documentation](/doc/libs/develop/ "Boost develop branch documentation snapshot") | + + +The Git master branch can be checked out from . + + +Inspection + Reports +------------------- + + +The Boost snapshots are inspected daily to detect problems + such as missing copyrights or licenses. The Boost Inspection + Report tells all! + +| Version | +| --- | +| [Develop + branch](http://boost.cowic.de/rc/docs-inspect-develop.html) | +| [Master + branch](http://boost.cowic.de/rc/docs-inspect-master.html) | + + +More about + regression tests +---------------------------- + + +Will all Boost libraries work with your compiler?  + Unfortunately, the answer is "it depends". See the [regression testing results](#RegressionTesting) to see + exactly what works and what doesn't. + + +Boost libraries rely on modern C++ features such as + templates and the C++ Standard Library.  Most modern + compilers support those major features fairly well. But even + today, years after the adoption of the C++ Standard, some + compilers still don't support important minor features like + partial template specialization. + + +Boost library authors often expend a great deal of effort + trying to work around compiler deficiencies.  + Nevertheless, some libraries will not compile at all with + certain compilers or may have crippled functionality.  + Even if the current release of a compiler supports a boost + library, older versions of the compiler may not work + properly. + + +Boost releases are run through regression tests which + automatically generates compiler status tables for various + platforms. Unless otherwise indicated, the C++ Standard Library + implementation is the one shipped with the compiler. + + +### Warnings: + + +* These tables are not a good indication of a particular + compiler's compliance with the C++ Standard.  The Boost + libraries often contain workarounds which mask compiler + deficiencies. +* Some regression tests are run only occasionally, and so + are relatively out-of-date.  Check the date and revision + in the column heading. + + +The development code is being updated several times a day, + so it may contain bug fixes, compiler workarounds, new + features, and even whole new libraries. It may be unstable, + however. + + +A list of some of the organizations helping with testing is + listed on the [Acknowledgements + page](/community/acknowledgements.html#testing). + + + + + + + + + diff --git a/development/website_updating.html b/development/website_updating.html new file mode 100644 index 0000000..42ba258 --- /dev/null +++ b/development/website_updating.html @@ -0,0 +1,337 @@ +--- +title: Boost C++ Libraries - Updating Website +copyright: Rene Rivera 2006-2007. +revised: +--- + + +Boost C++ Libraries - Updating Website + + + +Updating and Editing Website Content +==================================== + +* [Getting Content](#GettingContent) +* [Existing Page](#ExistingPage) +* [New Page](#NewPage) +* [Menus, Sidebars, and Index](#Menus) +* [Feeds](#Feeds) +* [Local Server](#Local_Server) + + +Getting + Content +---------------- + + +The website content lives in the [git repository](https://github.com/boostorg/website/). + + +In progress work is on the `beta` branch, the + live website is on the `master` branch. The website + is updated automatically from the git repo. If you want to + update the website, please create a pull request. + + +Existing + Page +-------------- + + +Large sections of the site are automatically generated, this + includes the release notes, the news pages and any files in the + generated directory. If you wish to edit these, see below. + + +The web content is structured to be as simple as possible to + make generic editing possible. At minimum only a text editor + and [HTML Tidy](http://tidy.sourceforge.net/) are needed to edit + content. The content uses [XHTML 1.0 Strict](http://www.w3.org/TR/xhtml1/) for various + reasons, the most important being to increase accessibility and + to enforce the separation of style from content. After getting + the content you want to edit as above, make the changes you + want and run the result through HTML Tidy with these + options: +``` + +tidy --tidy-mark no -i -wrap 78 -m -asxhtml --merge-divs no --merge-spans no --doctype strict *fname* + +``` + +Running HTML Tidy with a consistent set of options also + helps in keeping an accurate change history in the repository. + There are [examples](/development/exemplar.html) of + the kinds of styles supported either directly or through the + use of [class="*value*"] attributes for the + various XHTML tags. Please pay attention to any errors and + warnings that HTML Tidy mentions and strive to remove all of + them. + + +**NOTE:** The options for tidy are for + the latest version. In particular the --merge-\* + options may not be available in the version that comes as part + of many Unix/Linux distributions, and Windows utilities. + Removing the unavailable options is possible and will work. But + we recommend installing the latest tidy if possible. + You can obtain up to date Windows binaries, and sources from + the [HTML Tidy Library + Project](http://tidy.sourceforge.net/). + + +The pages should be viewable in most browsers. If possible + test you changes in as many as possible. Preferably at least + two modern browsers if you are on Windows. But if you are on another + platform testing with the "default" browser is best. + Normally viewing the page in outside of the web server context + will only show you the content and part of the footer. + This is because the site uses Server Side Includes (SSI) + which most browsers will not process. To look at the + complete content you will need to either run your own Apache + server, or commit the changes and view the changes online + at: + +| Site | URL | Branch | +| --- | --- | --- | +| Beta | | `beta` | +| This is the experimetal version of the + website. Development work should be done here first and + then merged to the live website. | +| Live | | `master` | +| The website the general public will + see. | + + +New Page +-------- + + +To make adding new pages easier there is a [template](/development/template/template.html) to get one + started. There are also `_template_.html` files in + the various site sections which already include the correct + sidebar menus. To start, copy the template to the section of + the website you want to add to and name the new file with a + reasonably clear name. The section is up to you but the + intended type of content for each is: +Introduction +Content to help new users understand what Boost is for + and what it is about. This is the one place where new + visitors are going to visit. Directory: /users +Community +For users who are interested in participating, or are + already participitating, this section describes how the Boost + community of users and developers functions. Directory: + /community +Development +Prospective or existing Boost developers make use of this + section to quickly get to the most frequetly used content. + This section is intended to hold the references to resources + or directly include content that changes frequently. Or + content that only pertains to library developers, although it + may be of more widespread interest as users become more + involved in the Boost community. Directory: + /development +Documentation +This section organizes documents specific to the Boost + libraries. This includes at minimum the library documentation + published with each of the Boost releases. Also included is + access to the community maintained Wiki. Directory: + /doc + +To provide the section user interface look and feel there + are some changes that need to be done to the template: + + +* Each section has a different CSS style reference + included in the head section. This reference needs + to change to one of: + + + + Introduction: + /style-v2/section-boost.css + + Community: + /style-v2/section-community.css + + Development: + /style-v2/section-development.css + + Support: /style-v2/section-support.css + + Documentation: + /style-v2/section-doc.css +* Each section displays a different context sensitive + sidebar menu through the use of SSI. The reference to the + sidebar to display needs to change in the sidebar + section to one of: + + + + Introduction: + /common/sidebar-boost.html + + Community: + /common/sidebar-community.html + + Development: + /common/sidebar-development.html + + Support: /common/sidebar-support.html + + Documentation: /common/sidebar-doc.htmlIn the sidebar section there are two menus + included the first is common to all the pages and contains + the download link and search box. Do not replace that + sidebar (/common/sidebar-common.html). It's the + second #include that should be changed to reflect + the current section. +* Since this is a new page, you will also need to insert + your own corresponding copyright in the footer. +* To insert the new content you need to insert it into the + section-body section. Replace the {stuff} + placeholder with the content you want. In addition you + might also want to change the title, in the head, + and in the section-title section. + + +In addition to the immediate content for the new page one + needs to add an entry to the page so it can be accessed from + the sidebar and index. See below... + + +Menus, Sidebars, and + Index +--------------------------- + + +The various navigation elements are structured to make + adding new entries easy and to keep all places where wuch + entries show consistent. To do this the site makes use of SSI + to reduce the locations that have those entries to + *one*. This means that changing it at the single common + place one doesn't have to worry about changing all the pages, + they all reflect the new content immediately. To add items to + the various section menus edit the corresponding menu file in + the website/common directory: + + +* Introduction: /common/menu-boost.html +* Community: /common/menu-community.html +* Development: /common/menu-development.html +* Documentation: /generated/menu-doc.html + + +Generated Pages +--------------- + + +There are various sections of the web site that are + generated by a php script from quickbook source files: the home + page, news, downloads, version history and feeds. The content + is not directly editable, but instead is generated from source + Quickbook documents. For example, to add a news item one + would: + + +1. Create a new file in the /feed/news directory, + say /feed/news/gui\_review\_ends.qbk. +2. In a shell, run the /site-tools/update.py + script. This will generate the page for the new news item, + regenerate the /feed/news.rss file to include it, + update pages which link to the new item and update the file + /site-tools/state/feed-pages.txt which tracks the + current state of generated files. +3. Add the new files to the SVN repository, and commit. + + +The same procedure applies to the other feeds, but keep in + mind that some feeds may combine entries from more than one + feed subdirectory. Currently this requires Quickbook and Python + in your path. + + +Local + Server +------------- + + +Even though the web site is designed so that one only needs + some basic tools and a web browser to make changes there are + some aspects that are dynamic and hence will not work without + an accompanying web server. To set up local web server for + doing changes to the dynamic content one needs to: + + +1. Install and get working [Apache 2.x.](http://httpd.apache.org/) and [PHP 5.3 or later](http://php.net/) (install PHP as an + Apache module, not as CGI). +2. Set up a symbolic host lookup in your hosts + file by adding "127.0.0.1 boost.localhost". +3. Add a virtual host in Apache to match the new local + host. A likely configuration to work is: +``` + + + ServerName boost.localhost + DocumentRoot "/path/to/boost/website" + + Options +MultiViews +Includes +ExecCGI +FollowSymLinks +Includes + AllowOverride All + Order allow,deny + Allow from all + # For apache 2.4: + # Require all granted + + + +``` +4. Create a local PHP configuration file for Boost specific + settings as + "/path/to/boost/website/common/code/boost\_config\_local.php" + that contains something like: +``` + + + +``` + +For a brief explanation of the settings see the + [common/code/boost\_config.php](https://github.com/boostorg/website/blob/master/common/code/boost_config.php) file. +5. In order to view the documentation, or the build + sub-site, you'll need to setup the appropriate directories. + /build needs to contain the [website + branch of Boost.Build](https://github.com/boostorg/build/tree/website). A soft link to another directory + can be used here (which is how it's done on the server). + STATIC\_DIR needs to be the location of unzipped + copies of the appropriate boost distribution to serve the + documentation. By default, boost\_config.php sets STATIC\_DIR + to $BOOST\_WEBSITE\_SHARED\_DIR/archives/live. Follow steps + similar to this, changing variables as necessary: +``` + +BOOST\_WEBSITE\_SHARED\_DIR=/home/www/shared +mkdir -p $BOOST\_WEBSITE\_SHARED\_DIR/archives/live +cd $BOOST\_WEBSITE\_SHARED\_DIR/archives/live +wget https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost\_1\_74\_0.tar.gz +tar -xvf boost\_1\_74\_0.tar.gz +``` + + +### Ubuntu setup + + +To setup the site on Ubuntu, I needed to do: +``` + +sudo apt-get install apache2 libapache2-mod-php5 +sudo a2enmod headers +sudo a2enmod rewrite +sudo a2enmod include +sudo a2dismod deflate +sudo service apache2 restart +``` + +I had to disable `deflate` because it interacts + badly with php's `virtual` function. + + + + + + + + + diff --git a/doc/_template_.html b/doc/_template_.html new file mode 100644 index 0000000..3e170a2 --- /dev/null +++ b/doc/_template_.html @@ -0,0 +1,24 @@ +--- +title: Boost C++ Libraries +copyright: Rene Rivera 2007. +revised: +--- + + +Boost C++ Libraries + + + +Boost C++ Libraries +=================== + +{stuff} + + + + + + + + + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..2827ed2 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,57 @@ +--- +title: Boost C++ Libraries +copyright: Beman Dawes, David Abrahams, 1998-2005. Rene Rivera 2004-2005. +revised: +--- + + +Boost C++ Libraries + + +/\*\*/ + + + +Documentation +============= + +Much work goes into the documentation for the Boost + libraries and tools. The documentation included in the library + and tool release is also available here: + + +Additional information about the testing and release practices, + infrastructure and in progress developments is available on + our [Trac wiki](https://svn.boost.org/trac/boost/). + + +Translations +------------ + + +Boost doesn't have the resources to translate the + documentation itself, but there is at least one separate group + translating the documentation. If you have formed another, tell + us on the [documentation list](/community/groups.html#boostdocs) and + we'll add a link. + + +* [Chinese + translations](http://code.google.com/p/boost-doc-zh/) ([mailing + list](http://groups.google.com/group/boost_doc_translation)) + + + + + + + + + diff --git a/doc/libs/1_36_0/libs/test/docbook/img/boost.test.logo.png b/doc/libs/1_36_0/libs/test/docbook/img/boost.test.logo.png new file mode 100644 index 0000000000000000000000000000000000000000..89467d97048280b97e67319083da10cf4e763be5 GIT binary patch literal 24740 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 SZ6N~#1B0ilpUXO@geCw?jqSPs literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/mb1.png b/doc/libs/1_53_0/libs/pool/doc/images/mb1.png new file mode 100644 index 0000000000000000000000000000000000000000..b665e77cf836f9c851f32ac8f6d0d082e0c225c7 GIT binary patch literal 23456 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 Tdoq)Ofq}u()z4*}Q$iB}pg91> literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/mb2.png b/doc/libs/1_53_0/libs/pool/doc/images/mb2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee31245d7752a0556ddeb8f49aa7c961049f02a GIT binary patch literal 31393 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 R7mnvgp6V-YDn9BLx21#W(cb;%E4{yo2wcg2 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/mb3.png b/doc/libs/1_53_0/libs/pool/doc/images/mb3.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb1f186f4a158805d52915b3afee10613740b71 GIT binary patch literal 71013 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/pc1.png b/doc/libs/1_53_0/libs/pool/doc/images/pc1.png new file mode 100644 index 0000000000000000000000000000000000000000..61489b592b9f446af41a3b8dbddf8669aec900ab GIT binary patch literal 9227 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/pc2.png b/doc/libs/1_53_0/libs/pool/doc/images/pc2.png new file mode 100644 index 0000000000000000000000000000000000000000..a33551cd43596b04cfadb97065925f825f38706e GIT binary patch literal 9867 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 W#_-cwuFDJz3=E#GelF{r5}E)id8m#6 literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/pc3.png b/doc/libs/1_53_0/libs/pool/doc/images/pc3.png new file mode 100644 index 0000000000000000000000000000000000000000..42f475b24d23ac6bf0f48e5dd6dd2da3791af06e GIT binary patch literal 7249 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 av7f&$F+X1;R*Zpxfx*+&&t;ucLK6Tm`PHTX literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/pc4.png b/doc/libs/1_53_0/libs/pool/doc/images/pc4.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d65d4290d8d25e4c081dc5e3bae11565b29bc9 GIT binary patch literal 8954 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±G`*@ybi$zjN~I1AM0r7|fW{ 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_53_0/libs/pool/doc/images/pc5.png b/doc/libs/1_53_0/libs/pool/doc/images/pc5.png new file mode 100644 index 0000000000000000000000000000000000000000..f5978aa3b62c50667f083ee6bf9b994311758bc4 GIT binary patch literal 9630 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 Dm=fi4 literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/doc/html/boost_asio/async_op1.png b/doc/libs/1_61_0/doc/html/boost_asio/async_op1.png new file mode 100644 index 0000000000000000000000000000000000000000..0de79911e48a2a084d5cd5f4f4fa006a937ae8f6 GIT binary patch literal 24084 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 E06T`Vh5!Hn literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/doc/html/boost_asio/async_op2.png b/doc/libs/1_61_0/doc/html/boost_asio/async_op2.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8d3c08726284b5008a94f61fb539b0722a67ff GIT binary patch literal 25260 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 A^#A|> literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/doc/html/boost_asio/proactor.png b/doc/libs/1_61_0/doc/html/boost_asio/proactor.png new file mode 100644 index 0000000000000000000000000000000000000000..a0653b0106c8514b24ad8ed3aef48d320168634f GIT binary patch literal 30877 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∋X>eh*16o^nTUnt--MJ|0#VH@jq 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/alert.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..b4645bc7e7cd81f2818bf22aa898e95f89f7b154 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZVAW?*1oN<7}ez`(#Bl2vQw%VQUVy#($c(b7<_!Z&&*`7 zwYIFTuIA!kP?6(!`t<3^g$y0J3{Q73WQH(YSjJ#(AQj-}VXe>LZ_gkv$q?hiVP&Xj ztS4or%^)MjpsB?1|Nnp9pi5p13=F0vL4Lvi$p8#BTQ7jZgtNdSvY3H^>jMZgI;}C8 z!N9FSxfgB=H7N+NC77H_+N#nawR{=RqTMBX)(LXL|IjinhDSdCyWWZ3S$0kBOZbahGm>{cU3L4X z*xaKNrl+L*2&>`tT{GF}sK6TCoSy58@94C>csZ@3se0z)OD!J`ePg?KNk!eRu!nuZ zwIuy5g5`UyU*2!`JMiPV^UIVvmW1t{f1*^~1#9h_jDIZO*R6JmbN8&QBXd?)zY=(& z`HG+Mis#k2-hNM1nwI_8efYU@yAuCZhY42|Be;Juo!svFUA16}A_D^hgQu&X%Q~lo FCIA+53ZVc1 literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/blank.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..764bf4f0c3bb4a09960b04b6fa9c9024bca703bc GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4kiW$2A`O3a~K#HSkfJR9T^xl_H+M9WMyDr z)b(_645^s&_M)R8g96V1g9H1Y`?|@Qa8+HmHda4(nQ?zM!!?FAj1kNm*b;aTNHv%; cj9>w=gf!;AOne?`3=9kmp00i_>zopr0BeEaktF{gKeVcsDJ z0oVU;*6~a;Smx2ZrsEQ?ZxM&ygvBnFE?nmtg94rky>!~x8m)3j$<^(USQPg)>&zq; zMi;kRX=V2=&tIr>`d!)XyUpL@9=UmHetuZ+!_#HmOU>-J$pS3-bN!ardIyAF-G1#? z>&)f7E`k#|4sWoP;JM|(l6I_WZ`%~1y>agujE%b%?TB9+mb}(fsxyPFgQGMy*=%;A z(aZyu>`GQPiY$*T-1gu1pAwY3_N%b5cB#xoiRPn8jf*q{Trb|_a%sui&dtzin6_r? zu}%d~p(mAmOGTO#c2u;xJ(}Y^?ex>t7XL(?7U+1p1hOa|ab;w%c)sCoo@_(^WX<=s zr#89B91nl^w~jx#=XQ?S<*?OXYm`>JmO9g8;`^U+STt2<{M7jt yFTo&UT%Db3I{*CoWB+`guig6oxB?on>HF_suX>mE-_|+p)}_VbyG%XWRxDs!Bbdb`rSkCf z_opQpQ)e&z9?Q3;X^2drllMU70&71c8CwuJm{abIp zeHPuYNTZJ3@x#oHxOW1*hRe1@t$mhYkYRMp!NudU$f{L`HtEbcpPpkT-Q%WwW82?% zC04fVjt$l>J1E5m&cv;Mo-ym249h`b!OT;yI|^kU z7g#)~+Iz@=rzNo?Z+rL2lqSFB&0ni{FPmfwyfr;gD5K)Z38R1FYejhuGSfQP|hTIvQJ?m5M8zE|_KJ2Ny0Fm1o>%kU%6J0MhalaBNL z`|XP~Ht29?&a!*3EqAew_mM&!z3HdD7hn7l!t9~x=u!|XzH8m#&o*bC7c(?GuT1E< zIxY74U)KBI?en(Zj`8vg@_IC9@{~!dRw-$!in=2h%i uo%h^T#Pz@K#3`Fjeg5EaktF{gFX#;)5A z0&V{%irr-ME}D3(<3UjG?A^;f=DTxNc8JvRJ?~omN$9208L_ft0gE{24F|>2&Q_(X zyZRk}S@Y!IJLwtuX$cuSW9kad-E9>}+B4ar@B8JKU&IA}ZdvzvdHazWz|5Z1g ze)`Eh`){a=Ty&?>q6`CxFY1#$=XWS5S;+8pJeF8|am8VmFNNE0pWSjTLp3m4UCF?B z)v7}^cJ1H)wSBfZUSXp*CCGT~*L1 z!O^woK;8cKATG~IcM5iAPD}l8PyF`VZ_(}ou7b0cInG+vv8ev~-ZX{}_a4{SRWsNx zp57$DG;5jTyyy8w3^D7&C6fPqtf+bOwJP3cC`GVy&NA$7e!FZ3*ZX_(gMKMn{jgqg*t>n5-mVwdc+LxmI|e9UlrZu5 zQ({_ROHtjRNV$1z%lk=bT+YJ`-QVnLY|jT_oBf)`qRPnx(gN%Xx|4tEMdaVwoi3 z8lgAcLau*<4)^ratatOor+TqI{wNVS?clathJwW!uZ)j$%&5q+Ew{P&-MZ_q|3(_ifRH$!b{%@XfPPgvO) wR!x~yId8sr_tEzopr0G&e8k^lez literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/13.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/13.png new file mode 100644 index 0000000000000000000000000000000000000000..5b41e02a670f020ae62b7854482c4ba1980d73cf GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`%IK)5S5QVovKN`}4B` zMA$w&XL9s;aOlF(1%)YvneO4jm-o(&U;MKD#e?Mq8+>b)^R3G((>5$`ILflv=tsMT zqri^uWh?XJrteF)Ir(#L@uYSZ#}5m2PWL-;h`yh)YSr?%_21hCg6ylJ<~^TZ68k@M z*0PUs0U}2m4Zrz%{ru!$;?!{|$E-JRd$xd+!qOu@YuZ+=+K?-K{IOu7#Gy?(C029K zJuHwgKK8+3O1mEi<8zsP?~|?OE?SqZ;@R}Hh*OcJN#Q`=cIVYsi%fl`jgRf~&@_Gf zwzE(sdH3B%ReKL@(z)}#{LAm!8Ou74CNVNBn8MT`ef;AL!#4E;rLlAT)H7zW#a>U8 zU^AP|o3>d}=J>$`0|rHwDM43C-@g0)`~9hChd_}fnOvtgEzsbyc%HHSwnVR+$0Qaf z4hDzV>nAp?Vf*l#Q@}~VH~7Z3-c_p%=AWOKD!ECAd8tU(q6Mq8jughk>rJ2Tw)o@M zm#pV3mrVI!!@p|Pp+XrSHQ@j+Lm56tj!LO-Hu>!LzuT|B{(4Tap5^mRI^HKOr#o>( zhECmcH*b>$SLC#%J&RUEtqrq3WKa^{tg=+3a-Mjg$X|1pImHv7|6G6l?EhE#0)GDv Vq@B#jVqjok@O1TaS?83{1OO3{4iFg+V~@k_l_W_wBcH zWmp*BaqNHHW9Xsz@VDKv%bG0$2|bO5Z6>~kGkrGPetRKrdu;6W&)@+-S^-5e@qWpx=%~ppu-*HbtcU?B((KtQse2TO*ZEl8Jswt zRO&J4%x73CvPq};vBd=w-op^F6<=oH98=hD0fB5^~^0#Ht9-5wBo~e$L z1lS(@e{k6MP=#(Q)65P&Df1-{87Bltt+Mf&((ZAvc!Ef@>!Js&9H9b5iNOkrjBYL6 zJ*_!sB>iV?h@ACiit<@=<+J)R*K4P%cxw9w^X5-kmdSp5TRo@ZmA&eVHGWMv{dC`S zuce2g9b}I0mp%UT(3$h)E?kO6N0T-NtiR6f#9?6EcU;-Tw>eSb#{2IdZ1@=hR$sjr zzyA8Z#}+%3XYST(VGvBTnww-G;h@R7RHW^&qTY1wDM1E2%vZCnP73-ad;I5-GeP_8 zE`G0F6Q(`qeEN%Bd`m@QuDc4b82Acr%ROx3%dny5{(I}bX7&S{bY%G0Jv1kte!3xU z{l(W`FJx^snCW9M|9s%ekN~~u3#V){n|<~=yTas?3Ovp)cJVPNC~di&>!GEaktF{gFH!7eFB zfwuoy?SYP89?67Uc^u>7$ueKD;_TuU8yCKP?%y^nk6}6Q`Xb ztf|`>GH3mp6jYb?>^RdSfr%@^R!^go|6uIuQi$NDW>upBo%&=x}fma9VINW5Ly|Qkmm3JvHr(Hb1rr&)I%k zqW}1XsO0Up4@Uid#O=~jwU>`!u0>yZkk=jF7J(OKyBQi3I1HqEAMAR!+FC^5{Aa5( zf1b8B8nUgv%H`5>GKER;h_=JWcU60(815ha{H$oF%dBM*eC_{b&TZl;l$m|{>8A+2 z>GpSd7ik$I?GB%onzMHA^lP*F zk0)=tnX|7g@rLFCKI7=6AyTdvVl+z`(%Z>FVdQ I&MBb@0M`i8D*ylh literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/3.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff0a93931515bb97a045dfa61a8530d87e458fd GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`$7M>EaktF{gFH*{(+p zB5wOOu6l7m)8 z=-oKUH}V^&iJyB|uo8LF()AHB5)-MfO`N3nt zvX}OXM~sd8*9*0GtV!A!kzpdmy4F;zn{|?kqeR<^5G@5I1_ong&q>Sg=9!B)JHv7pU)=hauMINB3;oaL&ye>}mU!H{id4Bxig=9%^>^=*s?64R8I`k2o? pd-p8Ef~{sjr?y8+Fx+F*x_2OD_kw447#J8BJYD@<);T3K0RY@Tw*mkF literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/4.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/4.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa29fc0b48c17aa6ce5540e1af5c00510c33ff7 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`)qx>EaktF{gFH#x5mC zfwup%GG$o)=ergqP)_hu?Cbmc-FuV6=PTSkE z?z;W`K`XyJWKnY38^_LI-}iXo6rn{K^Ugm{NGsVLTQQIQc;ScrMIF~}*~{?xZ|}UC z)%voeOU2Vbu7Bb(%{5!g=daxAHc3V5z+>?E76HlSc>&q{{ zJgU5>EY^K=``x_dYqp*_vnNK+lE-=9auZ+6u0=XLho7HKd(8afJ98Qv1B>H_g?h*I z^7xt(_!*jJt_^x6<$Ce%iJd)$VVYl~OqdVEFZF#=7-s1t%fP_E;OXk;vd$@?2>|9n B#bp2h literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/5.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/5.png new file mode 100644 index 0000000000000000000000000000000000000000..36e785867ad9b06bb5da296fee61b67cd8159ded GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`&U2>EaktF{gFn*{nkj zBCY4o9LZ47@QCRUnZAf+N!}-g*k62kUh<2$=N}3cU-wJsu7~Tf`D?j51GwEfg_G2_ zuV#t97&qf=>*tSit#h_USr*FJFU!>WaGpbPU+ne2DLtw;&jomW^|@TLId}ILd4;Y; z`kGI<1$&J<4oW?f4p9*ch$x|rP+;KqSwET0Ksa~vKtM(>J91HOJ>EhB>xN^tsw+8di7uv`rMqUeL zJtlGLsS$%o&3$<<&56<(YY$o;PcU%UfB(F1o@3V5sOFBi;${Vo2fOrSjvstkva9-x zil;zZBGUt9^BXy4GknxI4hvj-p!#HTV6S6ePsEk3N^VkheYYwwc>v z!48gj&!5^CXy3`&YF5dr$YOKedHr?gg#ir$OfFx%f9Fdu@F;mr4Z2vhci-*k?73P? f@97_A_`n?SY~RWh)zCHu1_lOCS3j3^P6EaktF{gFH{#8D;%7vjax1W#KXIAnv(J`n z&5VyM+63~m6_r{NIT!+`rAn_gmE-I&+!3QUA?T1q^ClfZ7RG!2%96cqg2wgyaq?lS zMX$X!U8LbO@45W6mvfv$L-`J@Z+FmS&DLGD$|-VMfY)E~efQs=*mUM;<-bcWOZM5Z zTz)B%D3P@Lt`d*4kJ{wr1(Q_jEaktF{gLJ{wyX( zf%f{%yMM5|1Qs>DxO#n#YtRpleGYL4%{eMNMC?4cR!{jhN$+gat*(bhBwQW8eR)?F zba$a+^0L_vzt^7O@l~6=`|-z${Iyee1O}bTzyIC7L&Goql*H!=r=P}oFAaJ)O@ZgI z{@Sm`#{5B@N=kt`V%+OqiyeDxcc)!#?*L7k5+eADVIg?*L>hpfK3x*)1hCVBt; z;|%wV8@Gym{wcFIjN7SWb%BU0N0Y+6yzR|3cK@fSPF7(wKKyx4{o#4fYt#Iv1TDJ# z*2#-AZQqV>`4S8w#?i?>7PHU(+hgr1l-*Nl-OBiY{af+c^=0Sh`7EaktF{kyy#=ct) z0&EZJryZ5xyvdOv(510`p{HDvlxC~E$|>iVgULHQ3PYvrom?h2P4(>+k=FEToVfLb z-1}ul4-dV}J2m&O{aGGazV^u2>+);2+U^P78~6Tv*4AI1E_e2NCZAD1|9M}poAQ6# z2UUCjU5lzOJ!f0qp`v6c!}s@T(aY_*-6p<)(^RJf%{ZH;pv2Hn%$FKjXEE0=dabFI zOUbTczTJ2ED(5xNoT$P%L(+vssY!q-Q6kB1zW$Oa(QCh^Kc6#2_JRrTx8JslG@1mM zBBvdU`kln8=_3m^%&og1Cq^RrH#tzmz{IfafeFfcH9y85}Sb4q9e0BP^KrT_o{ literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/9.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/callouts/9.png new file mode 100644 index 0000000000000000000000000000000000000000..abe636072b61306fbcd6157b95dfdf7e86a77e5d GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`&U8>EaktF{gEcf7T%f znb!OIl8YM`EC?0g)MK6LySsR*bBW@-#a{$sD|jaA?Rq5|BVw*<(2>_Fw2;L_Ls+eT z*=m-pP5G8*zMrjje*N{AqvqEc&v$lO8~PeQnNu$u7&XUG^XcT&$oGAZue{@YWbseb zX;0Q#doE68rNi6aM(w}9J~guKY8ESl1YdhX&(saqqyj~D?!KF+)#9L-_*{J2Y1Ks< zObjyp?mceG5^anO3Q8tYyaIvx98EzeZXaKe_`Z|7b6wRX+{3FhZAn{V<2dEM9+du_kptYsE+ z{WKfa2W_~S^T2{nZ8E1=H*3uG*3`)V4^%t_SRAV?Wb9U5edYbrW%=bs0jAGCWzMDv z&-uLjLxRB%P3bLBx;@8}pH%jFEoHiFvT*CZ6}7y~440#x2c4?eefQp-XqD5OV!VD< d@-ZKf|NC_Jf+y*vd<+Z>44$rjF6*2UngH>Mv>N~b literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/caution.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/caution.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7809ca4a9c8d778087522e5ce04b6e90099595 GIT binary patch literal 1250 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NW(e>Jab;j&;NV~o5MYpy zU{F+KFf?Rva$<;zVn|MA$j)XcE@r5%W@u?)XlW_#>0#*UDemd%nKFf8%9P?MQ>y38 zVVEwkZjIWyHF@jSt$X(}?A@Du?i|Cp zbLXyIW4Lzh+_h`h?%iX!chB(NJdh*`E$$X&!4}4&+z{J`|sZwzJC|^ z{$1kxcf;@BzyJTw@c+NS|Nj#IN5NBISn~R-X--a%afBxQ|J!3zMjr_SU zk_iHr)f*lf{$5^Qz}I)@3FlWvw(w~u=1P@VsTP+$RNGvxbHL-(%M6nc6`{zlU zjGQJeveps+!&Jb&mD)L@hA} z1_tL6*NBqf{Irtt#G+IN2MuLS&)mfHRNut(%;anZ6Fnn63k6F{eFF=914D)6qRirw zN{8Ia;*!i{z0_j8l+uFyyb`_S{M?DV6n8K%Fld2|%S_KpEGaEYWk@zRFt#waFg8d` zG)YZPF-fe)lBATd3a!N{b-$VA&f+n^|#(~yCI Ofx*+&&t;ucLK6T%G-N*j literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/draft.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/draft.png new file mode 100644 index 0000000000000000000000000000000000000000..0084708c9b8287c51efa6b40b8d492854191455e GIT binary patch literal 17454 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 YsPxZ;53A2HFfcH9y85}Sb4q9e0Fi|iga7~l literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/home.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..5584aacb097a80e66a5320312b6e4eb017af1a06 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&Dfg?(A@OuseF>a6(*+nzF*onKLh6zO-%YmOy{sw6wJU|Nk%gvq74Hfq|za z$S?Rm0x$^OKX;CSfq}EYBeIx*fm;ZK886+f`@_J%pjzS@Q4*Y=R#Ki=l*-_nm|T>f zo0^iDsNj}alvU8YOY t9}F9JU6`43jMG5vNQA&8NcoN_f;wr$vARr(hAt9lu zscC6x>EvV>6{VS+EaBwj6ciMco$ZvI98_E!l$@NLot<4>UER|o(bHqOcQ41TYc{y!?kM?_wFg)yJvXsp5^oB z9Pi&Vyniq7|3Ab3{~Z7S3p{_W`TV)z`}cpO z$(;G%_wGG* z?AW<;=dNA5cJJQ3=g*(NfB*jb_wWDz|6hCQ@I3|w2F4_BcNgdM3%p4T42R|DNig) zWpL0?*7VFxOi%SqOwUZtRxr^s(z8&owA44S&^IttNG{4OE~#|Ltt>9dOx8;+)=McZ z$j>X$OU}=oxJz*d0|SE=*tpE}yu^~yqEv=t literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/next.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/next.png new file mode 100644 index 0000000000000000000000000000000000000000..59800b4e87f60c0e3383ede2b384b9be0f5ffe8d GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&Dfg?(8r&Hr}>%OQ656nzF)*4nJa0`Jj)#l9-t%+}PK^d+g590~2^trx_V+aGYt)W#Kgko@Q{~>i6>w}LxPb)_bi1gN;4a>^d{wcn;SkfJR9T^xl_SO6joXo($ zppfhlZ{Pm>`SaViZ};!tyLt1*|NsBbojZ3P6EBL3=9l=JzX3_ zD&{0TNo#1Z_o+&KnDHU@)Rs;LG+GiER_Ffe$!`njxgN@xNAPfH=1 literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/note.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/note.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c3c645ab9af6318035b026dd86944b9ddc9114 GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4h9AWhNCh`Dhvz^OiAAEE({E-dXuv&t)U99M06BF~bt=lC3t1z!y3OU-_; z>3=1k>J3(3i_72APIz-IDqpqc+E%+vGv;(%KfZ!%@4A+C&xmZ75-RagX8L}A{%x+r zX<~gz))PX{awr=ezabJ<%O$qq%HpE?3}IarYhrI#g}e)4`)(-lYr?KO{@fm?UzpsD z&F7x?_G;CcbIZ>^o0GCAMe@{JfwtZgS9s0dn=t$|`IrrC3yU6#%a-U6G$wZz0 z>m`@($9HNPdGJ4#pEvb;3eT@>Ck6%v=MvY5lHmNblJdl&R0anPWlhiA#Pn3(#PrPM zYy}fNBRvZROG|wN3w;Aah2)~l;*v^-+{)sT%w)aPV!f2og8aM^z2yAdiMtecFfcG^ zfsM;d&r2*RElOoDPD(L1F;6y4H8Hg?FgGwTOER!DNJ%kHHBU4$OExhPxjgw70|Nse jNLN5&dMbmFNrjP#wt==mQ8cF^C=xwg{an^LB{Ts5w*0vf literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..d88a40f923e3c554125f01cd366707c60cfcad04 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?WS z3GfMV6&DdqOG`60Hr}>%%ZlYo1O0u~loc*tzSP~>;p||S5Et|R|Noh1c$yg)73T~N2spa`a*~JRJ5eh~I1}5!gYtAz;Fo=OPI2WZRmSpDVDTHL^rZN~B=o=X8 z8<-ql-^0nkz!2u?;uumfC;0|1OPoRyGxLNShYX~Tl_Wf9G1_imu)%RA9}mw<0X2^e zQioc&m}WXSvRw^OFi2qFa&lm1W^U?K=~^Ook|m{hVvche^Q6-g?(V)Vn8U=toEqFE UkjD9gfq{X+)78&qol`;+00?PtqyPW_ literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev_disabled.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/prev_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3c17e02d156e7494dbab2f9cd66af46af2358c GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhlO-<`D(~2b}=LHv2RC7dZWAVCrDh<7Ss(U_A1L-MNQRp<#x>RYL|A z0d8w%7gb?npBLs13>ys`SR)0#F|i0-(0!9|ZvFp)$&5@KPtr;p8yJ{=^Qv)(GIJ<+ zNI0-0Zew5(Fj?c!G-tyG77m3Osc(4d6PFVdQ&MBb@ E0L^J1b^rhX literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/smiley.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..30a77f71ce16872d046a1a5d6fd698a2f65a3f62 GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uV36QoW?*1YTQtp`fq{X!*vT`5gM;JtL;nX1 z42*&SJ|V8+B7&<|tz5IBw4@*~EXexT*H!m!O?Pp!sH>^CckiyDuKJ|Dl+(w%CQay1 zOYu8%=FGd73zHKgmoF}|u{3I~kKDVXVbQ_`9c`_Fz7{iQrl~4QMTGi1fByW=jcKLD z*?C#s*_rWAAIx@f)c16=+qAB-t1T`u&hzVsWjnTSn>lml<@5cSX&!B@jUfSci{|F_ z_w^KKXB!)+#6)_3`t<4gwQEt~&MzL%J+!ao-_JD<@64PzGws6Z-hv$8-Me=7btN{` zl~t96rKP3$c$&I9TcsogXQl?mL%y{W;-5&-92C)*?h!W?b)Wnj^{5*w_%-mE4Lj!$7BYguC zr{Y6*7#J8-K`Mgt(@M${i&7bU6O)Vbb5m0?6BXPti&D$;i?WLqd?OT$3=B-#%hsG{ zU|`huba4!+n3FrHHoVC|#v<-Y&ynX`2+ z)ci{*-@n^>-frGI_MA-9eHCQCFMs-NiTvCzJ8a&6h<9#D<(d3(^{E}JLTitR9GSK2 z$*O4*8tU!OHS*&Yg~mSMD)7~hd93j+u`cf5MM<4*zJ;yfFKhYEn9bv3Xeg3g;K-G= z;q?Q<5Qk-d*rznCncd{p+umG~t-YZ3L%_f9;YyrSd?k7nE}0j~xg-T!p1r_pXw_8J z^q9XtRP=q)pSk7_!?YePxacL!`8E4~v$oZii_iB4y^t?YSBana!LlH(Q{_whcc+EB z6^^opPM-68`QEg&=hc<^;brIeKBf1+k=uTZ@Aa)4^R8_EExPXM@|~g)-OB%bBP#i` ie0$=QHXfdLO8@!p%oni+1)dBH3=E#GelF{r5}E*N2(Kal literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/tip.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/tip.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4aab3bb3543191c360387c4af9a3cbaa051345 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BV36QoU|?X-y2mNSz`($iDJ87yAgr${wU6ATeb^ycE^w7cIp z?_W?xU6%d(bb~@Shbi-aG=ETBbm~(ogOmrW&bwBIxdt+K+A3yD;V_t}R>0LF5GN)x zed{W(mq$!1ciVpPy1}W+9bm)Xrgda~bSbG?a3DdjluYV+O9SdLnMpASqX+9EZY3c7C@7#N&OTq83NAIrA4U>si~GJ7Ut&0mS)MRMrP)TsYwQg=9VeOrfC+2Nk)mu rLdL(;85kJ&K)M1F(^DCYOe>5`v<1B4~iR4S3j3^P6tl1hi%%HopDWWCg4y_C{| z{JavqiARt`YJFJnVhX)qGzOMplv!L->5yAl zT#}irms+fsQd*FoSE84kpF44v;tmD|1}(60ndy0nC8b5F42emG<`xDZ$;L?r7Ky3J=GDKJX@I;2(iM=Hp2}coT4AYeplx7Y_5oxZgQu&X%Q~lo FCIGT9P(J_w literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..17d9c3ec491ae1ba22188ce85985623c92ffa9be GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj7G?$phK4%r{|pQa%*9TgAsieWw;%dHU|?X- z3h)VW6&DdqOG|Thu-mqE%ZlYoyE{8BU%nLR@2jS)FmvY2qel)W#Kk;%^zi@x|I?Un z*fKCM@RbDl1^-6|46X<6oM2#J;4JWnEM{Qf76M_$OLy!3FfcHvmbgZg1m~xflqVLY zGWaGY7v<-srer26xMdclmgg5`7c2NiC>R+Sn6#IzInThrAO_OlT$Gwvl9`{U5R#dj z%3x@qZ(yu%U~+tY4<`cyLy@P8V@SoEspmFwHW&!FJyeg_(XezvV9WvAI|r@_>dZZG zPW6aiOT!J--9O?NG0%AP;}ge|4lDQN4=-}8`?JGwx}?mMnO)OdyQdu$nQCjPRV}jm z$u!Qa8E-cQ-r3Nz>Y(YPTd#BPEH+&8GWqfD!}4*53%dA!%#3$cIv;a~fq{X+)78&q Iol`;+0POUaApigX literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up_disabled.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/up_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e22bc8712192df3a8faa3264b0ec71ff3aaaa96c GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rjj4rT@h2G_o0{}>n;SkfJR9T^xl_SO6joXo($ zppfhl|Nrwy-~uYR zhzc&Dg3GAj3M#mY3a+7o>!{!cD!7RXZlQwPsNfDNxQhzzp@RFU-~lRlhzcH|g2$-f z2`YGs3Z9{Y=cwQXDtL(sUZH~5sNfAMc#8_&p@R3Q-~%f7hzdTTg3qYn3o7`E3cjI& z@2KDhD)@;CexZWjsNfGO_=^hup@RP~@T}IQi-CcGuO!GX7$yd$8C(zCIl;idaKO{W zF{ENn(v#GNhX4QTi=1XMFdktN{`IZ@p>>FWLcsvS9SfKMdlAq$6s7@ONV`8frfZ~QMdG-hBC2vApc;y96* zmcYQFpvLCIAmDK02m=$xYzYU3L}6wQg@_sdlHD~JI1CtW_~{utEVY`?z`(%Z>FVdQ I&MBb@06Fw0-2eap literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/warning.png b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..1c33db8f34a8b42b373179b46a2d8d8a10e061a9 GIT binary patch literal 1241 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NW(e>JaphoO5CF?5GB9W| zFc>m0I59AIF)#!%FhnshWHT@nGcZ&$Ftji*^e`|?VPKe2T|Fl#Xiikroa*YO3=B&x zEth(EEp2I8I%UezrAyZ`FswB+TsvjTRtAQxnwndCdbZA)vvujxty{P5WnkF5cJ1D+ zTaPg?91{>YCLwX`*s*gA4Ce#{&Phm|)6~4iz;I1d^V+p*_ZS%N-Mjakf#JEL;`8Uv z-!m}0=iqq%{{43bhVS3M|7T$MKMF=efJz}yVEuRs0|NtNlDE4HLkFv@2Ll7c3r`ov zkcwNmlWOyu3izvS7ejxP>R-!INP5f(XN|IS^C^Iyp?`SUk1vQO?s(K&l| zi|Nkt0@~*ymDp65*E-HED6u(s{Mfrxmah{JrgAMTIq)Du?nC5nnYTRgThA|azEdIl zD^uvV>~q(b?>`Fd;xnAbe7so1I$-&keKN}|vNNOCvX<~g{)wp7{&hR__v^cBU*Gq* zV3YS!cBPWsl#eNWc|~nAXWMOB8tQWBuXo=4>}cytyX_5F^Az{bVJ>7~U~n#RjVKAu zPb(=;EJ|f?&`{R&%uP&B^-WCAOwLv?(KFJsP_VSrH?Yt*FjPn`$}BFabjYnNF3C*R zOD)z*DJ{s)E742N&z-nSaR&nfgBIAh%=Em(lG377hGY|?B=Z!b6jL*k#Ka_13kwTN zLrZf@a|7cv1EVApQ-8txlNlHo_&~Y>64O%|j7%zwOtcNO4T_>U4H+017(8A5T-G@y GGywozG)2h( literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/logo.jpg b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a658bbea9e573faa4abdedb03ea1e61b7c8cfb92 GIT binary patch literal 9048 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/phase_lattice_2d_0000.jpg b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/phase_lattice_2d_0000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f98703eb98d670309f0b5804b3d727603bf25abf GIT binary patch literal 1995 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 L=UB3V{QsK({lUTD literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/numeric/odeint/doc/html/solar_system.jpg b/doc/libs/1_61_0/libs/numeric/odeint/doc/html/solar_system.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b89c3b3deb95b060a9d9036e8288544fbf5c0560 GIT binary patch literal 31597 zcmex=83u;`w;7xnn3+HTL^3loGqbRN4?hnVHy<}AC$AtcAHRTrpa2(-kg$+|Fu#C+!2bgb+#HNXj1w3c1sVPyVUT5D zWME=qW@Kc512zsub|w~9X3qad7{UY?m>8K^7@3$E`59SQxLLRvnV4Bv*%;Ubg*b#2 zIh71WM8(9F%^U;6Bg&>s-FoG!k%V#LWffJYX_9V1k%f&Dr!QQ7DKzZh2MzO(q|~&c zibzlvNpV+UBS^lFs{##Y;2xA|=*XMX%zSU>>kL>twRp;;3IsdwPs=jUO ze}?q+YAMT?&GM@1{juw)j$h!#d*>u0WKfOCsC$`l=_D_ohXs<0zOSC#E&oK|{) z*HO+b*5=HU4~We9Yx?5vizo7Hp?*4kZ<^zmKU%5whok;8Y`(6)=TH0B)l>d6@Mr%! z?>{6tadPp#Q|HP7kStF_;L6`Q{5%f)BQ z*G`)wl^@bR%~Di(q6GikR5!UZrsj)J8s6?bwdi#I{@bh8iOl)CXp+>D%7qUasu$Q! zZ*ur9KPP)(_>SGRj-^{8R&QQYHScNNtgPx#ne7%rRX-DLd?vU>Z&}lRvxzC>Z^e~% zUz5uqWZLJ}()jgy^UU-gYIma+?R&?Uop?-l^SLb>!{YJ+E;@WR+N_hUvSwAxDoZYY z6>a%5rE#10clvi)q`Jzky1pa$+4a@Uho($h{ zqv7rSGv)=QO$~}J<38}`)zY}0EAGYTRy{m^QN{C=)!%tREDh_O7GHO_ozbGzI{U(! zZ8iRzP3E09^WSJ)?j9QGXZJcPQ~TX?D-GMw%qWRhj?1S0($+VUReVp1uiD?8@$=#DvUjCNYK*=q{hrh_zub83 zt-F%TL zIoD&dS4&U)#q)V*{QCVe#XrBQZ>Vs6q-L&iDSA)IfoH}IYxKk_RyRC;c_oCMqxSEq zkLRCX-~8|7J)OF<)}j9yigWLOD*4Zl@?Ok7ZSJc73_G{I|7lgfsk~c$v)|SFJGaaK z%&joL&-Tah#A>l!`;X@+NeU?nL~$ntx`hZi8eab5bl>o2#~XL%c?^#X%YI~6xL2uMCsk^)I%(P){_J?($8N)TMCtg4W5)`#b+*|q{j~f9kJ+@U z#o@Z9yLCM>oo(XUk&c$^L}hHBmXo z3*QwJ-*9beO|tzy?M`LvfdE>j1C)rk+>$Sd4OS6b7w5Dc(S6%^6|tkf0g6C z&0PDR1e^@+zn}ZvVo|-Hr^c&Escw(wEm^1_$6-@{Jhs{{zB|R-dhM*klcUy^Uela5 z@3pUIq|BuYUWYdww^CFySH8cxpyK=ExZ}!SdM)Lb`?+mi5%#XmE8ySf$Mx4%d^Noy z&G=`{o%8j7GMj&?ZVr83RFi%1Pv_3?pMsC~6&Bt0eX=PmH1f&bfRI(kRS(^_Y>U#~ zYLj{?^ew-e^7a(LjlyoC(gCT}XQxy$K3sMvZ{6d70OxA!g9*#mtXkHiYjf7OVBVZ7 z$11fJ9;!L&A9wfHhdmm11#W*l^}bWjJKsw?*I|0<G$W%jy|mstnip0&-%>9Oq%ES<&>rBau)s_0O- z+pGO*OQ+QH*o(e;#e2RmcW2$>xETAj<)=Q)y7^i?ZR(OYZ<&uQX?jwv!BRahVw#yV z|Lr~e`5JMz8xk%48GAfnYdW9P)}_RlWa%;0@xku-e|3(3p6lW8pm5F0WwSEDD7(?g zU*Y3g^_};Ge{9@+#V9B(TD80L$;7nZ3$qtR=a!dtE^@jmvTx2Lt<}|TZ!UgX;WerI z*pihWsw>Nu?c1;L(f@SMc{x+T^9sj}mGrmGOiPj!^l6?|`ctXr^vlx*4)=|VLcV6! zZ2Po2rB{}H>O9R@J+o^QAJy#6lYTc>^Hpf*)5UMjbEsY@o8+tik}TswCRF@ta({lkd-t_9{Dt4QXQX~q=9t%S zxbf+htvCJrQ#PE>-hQx`;ePg#wJX0o?pl2HRilFH?bZnl3(w~V=NR2T@Gte*yay2* zUs-KA{4Qks!Cc|mX_||dZK?XCkm~m0%&I?fOT?7t=lN}m{e5aq+sU>!Vh{B0-hQ?@ zKlQNe7N2F`UWaC^-tG8$dB|@=ua1dg4iS5DA_G_-cE-!+ZQopw_G$8o({`1Snad89 z9lP7RUp{~O(p|kTw6#-Kh8UJkinMOl7M2g~GG%jUn92M3 zy^i+hEniu(JyPq`FVnM93q56YChVD@UDNgc@J>Ie13{seuU~eJbT{&4`M74INBh*0 z#8VsW=Lk4H59Gb`XUf9A&yW3QSR42%dxaST=V^1}{(oN%{uR2pUhnzivXgh0?m8RT z5P0Aw%jYX`tvsJEE`9iH;=K6nI(kiOBj^5%Y+lI|-nZ}8cO%{zxk<;R8kApNt@`?4C3BzMu1{~|Y~Hl#mo3|${5!n&_PZ@5lP(6w zBrJ4Y-KHsd&u{a`SK8Lz%EoPPj^3E$X?13v&6_DZRIC%#ZbeE9E?e|-0B=GE= z{iW^m7JN_3PyDwi`t|#jcFGekq)c17a%t1LzN#S2)wy5q)NX28ptaf2g6Hs#u&_6h zQ?E{PNq2Y8FA#87_?>N)xop1Pq z6#M#Bkxe^GGa0_@bo1+%vOcxufW+S!YqYrQkEowK=D+)^SiX!wWcFjDOSfM|J)Y*t zqP52997CJM(+N}G{#YsE{$6^aQs%Tfe=KUk559hOqDV$*alxjjn<*>S?|rtlzjVc# zX`W*4lRV~kl@+}{S?|5`&4Z0R2X6jbW!vy8^MKSjXx@b8P#OMnS&1N3bGz-=F%=#wmN6UZ!li-)BAR zsL7S7JJOu5b$#^><}cPsVzcjiwQ=)g!MxS~HcGR(HrKe9-7nj|IZ^$V?xNe;(|n8f zga=*S8&fV_s;VpHsI@baH`Jv_EdRHnVEe{5;Wwmpd+z0xzp0z`x$KDEj;A@Vo_YJ8 zit^N2d1|u;-<8e2jBgkcuZ4X}JRf|jYk5b`zPC@l`)j|6l)E2OXvO<<=`5bI*M;l0 zUvd3>TdsX(^3s*lTx@4}FveLizmtA?CCPT(r*yMh^-|mZZBJf&Jmuz{(~_(9`4*ha zxN{}=mS$?>s?2Lbe-}<*{I^JzUx`tAd8W&y`N`Y)9zH3bH0|_1;jjYPugBM1yRpfu zy47f@NI>MXg)5vnlMQF=*{{KQz42t?8~(ZO+wC0g)+8?faP9XtQ4H{!n}#nYx!45XiUHTZz89WiQK|3J7-ngzWnvf$LbmX9J5cZ`Lg}A$$4GX zsA>LT;%y-cQ!}1)xkf5YlrXZ%TlM19se_ST{rTWy6?WIRk^EC=vhA%!v^^YtJa)xTKVO0yVU)^(`~kW`u%UiXXWCw+c|+Q z-M$S8p&pwob&pq_nsnJ&kxgSsfUmU=@+9@XjPv|56TMce_*sU%dbMQrV!qHRGuO?^T(&TJ=TA-N-{*V(Gej-E zay_7T-=DR2&fl9=|6!F3a<=v4`VT!;GxjOp&}dn_s)mkwzp-j ztv{j9woYtKxb9TdNk7}JF!Q!6_a;2DxW;kHUF6}Esn1uLOq!-Ie&+1PJ*l7d^K1HN z?H2ppU3us`+tE|;hTLzhT_fF61qhsD(<7WrkHm(6O;!<(H< zuJK`ViIM{k7XhhUrSmOBZo#+%_hNnyVOfuY8OSY}r z^qzh8OuHxPLKPn$oC#ZV*ks-u+v5hxZ_BuOgp~DHsrGL=t!3=wEILWxjA%=XmEOUR zw-42Xr+=!Nd-smdzUMoCZ!T1QwdwV(zAtxHAAfn##apW6ON>ihnQeIMixxMXjsSkE zr{KmHG)&hUtDelUsO{UVc1mBQY_;z$W!u!;l+z+2ANyDD-pIAe-cp5e-7@JpkEGiZ z+cgdv&GvInUs2wt^*c7E)WBM~w3J^``-DQ18& zb&I#(QJ$9-qQY=#(WDcc3Va8$Qeo}Cb*j#_eyi6{m6MP7esjflZMHq9Ti=W6bn6*U z3-Y=+;p6v|WvfD2JpGQIP+wW{{Pw2lUH;m~_G^DSGv8?X@qD!nE4F>Fe4#0}ZC;C) zT)WDm7ZF!4c&s^bX0OV7q1_)}?hLb4^U&p+l_k1+{-i1Pdw$&iy2{qKl;igMQ+Ln& zeYyN!XU>)Tz9yIB_=@K|iq7qf-Mr`3Pyh4{H(t)$v~Syjc@vK8|G==>P(^D|)0v~8 zj!BG5#BC4U*Rbq)q7Gw@mVVG zQR5qLH{9I2{iD`x)AhNA61g*6PkAiaaZ++p)+(tDTw7y(K6{+`vb2ir0i)mDCkjVZ zdfDE33WY{0C!9JU;P^zK-fkx}f*_H#e$Jm?ejy*6=GWF`}S zoW7=YGhZwTi=OS>e=}&JSPBo9$ERb9{3KZG?mfs}+w+rkS9-OMbZOP`wLjG?rw4?2 z`d4pC-tJveCiO%4E30kwmFeMK0bIweI!@Ln3;cSepZLl9q|JYZjPK$l8)eM%Up&7Z zGwprOyt9F-xyko5-|ms>STNHku4fH%Rne9_i49?$OyBBeM}1YxQZ9y>_|Q-EIHu(j>ky_T9;|z8aXmc-FjS zPfbliimwIzUD&k2UCDq^_Iz33JLL&|%eSX}>eoHE+4t???~mG!nplS?E<2s^uHvl8 zg|(@hGE$ORCit85Y}NYsl}AST+mntTKlhpGtC>5Nn=@{W{g@^FPJ7;G--v5ERj) zbN;$4&y3YwZ7p7}*7(@%DcGsCZ&8VwnN#$Z`osIxKGhysw*IESf<~YH-WkqYWk0oL z1^P^nXw3K8H-rD^iA`<`XJ7is$*ZJw( z=CVb*7w){_b}nIi?D0F^U(C8$XDRB2`ZR3(t{5ulu6lPyYbe7c59W|{$G2Cve^lRp zd%Jwin({r`32S|M^K{!KXHDC#JY|vm_Asm8zxa9{nK>V(6SrMlw6Jfko5C{- z%`lFL*~W7B6+>l%Iy7A47zAqhAMJfKn~8tB&D`{eCv_9o&-p44tT?IiacBLfxlR55 ztS;;#zR|n~%?(|MO`5PuKMS3^SMiwyC`NpJ7h;e}*Yx^*?9T zqsXqGoU{IjwCtM2yKdUtJocHbD@^#-C)pi~w_iLd*n2!#S6Z@LTSPHrflX0#D&cR%{~H{sf? ztRFAdiSPR3esxQL_L+^GPgZ%_W&Aey&rs4Aefu(>SF_cTKVLt5H&M)$b9_{?bmEgo zAA_zM? zs&*|~*5>}_;M0gFDe@l$H~wd6ytd z*qc}Dva$JE79Ez3J)24u%9Ja8q zr|MDx!zqilS6q$nlqf0YkiDH0Ym;@ycE_FG-jm;gx{lUtdAm+MzU^9Yd|pt1=gX5k zNm}QFG*bDzU8)y2R4VtU>B`3|-01ziE$yGf(bn4qzo)iW>td)0LwS8XgzK@GVz7$-H+;lxVHumMew^t=rJzTuh(29*c_-`)xpM7(LaV^BjlsT5 zOAU+mrcb@wDYu}@;b|+wafvQ@ z8LH~7I<-gA98P|=$zk$3H{1T`e$_&G&9YV9g&Vudwq4Wdb+6oX*6OtFs;&I|+!NSS zmD}B4?VUJfYS^3Z9i?1%&!6;?zgLt0>#E$cT`jrapXNQQ`*Qg|gUhz8{AIH~6wi4r zblb=4<=pi0SJApnr~R_BSFeihc-T{2m*;J$qP42&%$ZdSHZokS-FI8&{Uh}qA<^IW zi}+^Uc+DE?_0YoR<7t`cOEg6DLfu=Rne%W>@VAu|(JK1%uQB-YK~I*FEf|ok2Q?;6UvpYyYL(aPkE&bJwnyaHslG8Q z-n-Rp8<*FtUtW=G&1MxUFi&4KPb}kR>|@?nM`aSdEhlLG{;vC@{z!L)cE+mDwHI&y zov@*$s%^p1-1%ked5%S#3J%#Dm{kyFs9@}<9(O^3Ppo!ycd>z-75e&6*oe%-wf2X~(NIAs=nF zn5{^jSID8HHY;!6l5=}DzE?IDI^(I@X?$+qpZ^R$vZsOS!^~wnrat+6e&2%V&JEGp zyF+yI@2p*O^plFV)p6a@O`7TrXRlw)SoZiz=j~OWUYxqGHLsF6itFWvySLwzzZKnQ z{a)^6&efO+N1CR~p43v==Bra|(-hT}8FA8lOV3`G6AcAbpW^pRyxA{!cixWB*=dQ* z@Bj8?CvD*_UD7SNfmx1TujXDks~8F?cR}I5%%EL+0V?Ub9TyZP5mOZ z>2kbijJCRKUF)MX#$CJ2Sw0`u{PQ^O&c@E({SVcS z#S6W^=4{t)DHUIJ>&EjnQ<`-hqdH?<);YX+z?R3Z@~R%v`dch;!FL>2?91&{HR>xr?tdLpHS3k&_WM(J&-{Ja|F6)^ zmHTG>xN_z4rOPKnLv0EUb4jX9a^qUjP!uuw4TH?2(x0!g-~DG0I*%RPCw zqL-Wx47*&&mR{C7eUZdTjStmK>~5)zOW%Cl>!nh^pe);TvFw(M5jkSJymL3*^_NwZ zl~vIe5&59h>hai>F)-AD(Sd=1ZTGH&3bp=HmuJ6!I`3%3OJAjTX2m|!m$hGAd_4C* z!CYeqA*A*dHlTzo|2IH)*eP zE-re1^IBI5Cr@H1yC+M^B*~PC(H&227k~J9JBnwP?fFmqO1tvg9)6!X>*ExC6GLU2 zR;A_J#Ve9~#hkCooLKc|Pm=xA;G(y0=bhgo_B-$LL0A9WO~HF6Jf7SZ+P5@iQf8~7 z{A*J|g`aaz+dPo$-qV)1TcA|^c3;JRhKK8-5RLaWrSfs?`}XXaEp}|PwP>92^yF)| zpDx-PsKT5UVY=gOBzUCu_W z(8yk0FQe1`fmdU>e+3^Gnaj=a*J}Qhxta6Z=e>$6%3ZkbX6>OJzGe?|_MXbISBwm; zsCYQdW$`q#&_I>Co+O3m&x`%e-TB6M`*JzI#Zt!q3_s^f|J&-ma@|7d+Mm%o=kGQ7 z&u~$9*6f$7Y@eNb@Lc--&M<$bGP(Z@w!7X>Jo??aP~T*(O0=2X>8lT>*3O<87E_(hea`zn&8{%; zx_VFH?QiQdmamQC*!+9{+V6QUCi))r`Sz;f#EXWN4)W`hIKD2<4^+BW&Hpg(c#dvT zYFM|*PqlKDtEQzpm$~cTUT+#|%KA66HciIm%qAmYsg)+9=GJ?qi6f;{apIMRQ?H!085~)dSKPC%+!>Lbxna+~73V`vDQ~^| zB(zuWfcD1jz9U^*`qVPT8#ZZVCNsKhJgCn;@#M7QYz^0jC-O=B7y2)* zn!a~GzYV+2nT+zu37a^#Wf!j%nl;ONYtvM*wq?Qp)^E9_A8LDjm$72NYwcgF4StqN zFaK;@@h4$-v_Zesw{Ke2E>AUHmV1l!Ma{OYx!0d6DsobOCC}TJry@f`riB?EP?Fu6 z|KZPd;X68I{rU%syi@<3EC{-?ox3zB#8HDMw4p?$Xw8}>wa(hi2ifDEL8^sW+3YV@ z1W(;u$-b_rS@((U>|?d#Db^cHmW!5#1ad{Y3Nrj%_gG)sUz+dqj}7;2TI3E{JkgSD z2wwMx`{S$kTdnKkckP~P8(a6{-I<9gm7%ev+Cf(iTv|C*V;)o0k&8B$#keNUI~TG- za6zKF=N1>!)5_D?6Qc+qL5&2PR0IkJNk;A+}CdVeAwo2#b++x&z}!H&OB>ml~pV{nPb^<&V=J4S4>)~*b^hpEK;bA zJKT3#asHZ|>10d&s@h#e*w=`M-=;3tZr1U{<97dkeJqN3%zap? zFXyn{rW=c=#y+l|S`)JHDudpE6Ne}4>GOZ~qjY25LAT3?ILi#_~b4Y<#5w|ONje&qWR?zuO0Zmdh6kg`=@eC@T1-7%>Nj5d9} zT>G~(OcL*(QT?~#%YTLst#9=IGbFxC|9fQTe}+?+|1)sJ9s1AkP3~F!9q;*n)>dw> z?_A&YUDIqQ+|pP# zZFi5pZ=`D^(^*y*9gB=7y^Y~P{49b8rIu8x_e5WR*s`7X@Q0+Qk#$F2X^TCqyOq8B z?<%ea<`boFIT|1-$1 z4Hm6kv~q&6yG{Yc_1!?y`K=!n^&O7HzKC>%8vjzO=Bj$8PqR7p&RxwdC8M zc@Nv~Wh$)>jeOj;?4_fYPNU=$i*Sb4G?~u_mG4LUqYg{=Z}@gqZvQNMqd!mD`7&SW zRR=%55}&*K@@kJMr8hgLK5ml?@tC)Kf#?kbH->{Yxu^UO?va_dxHptvdC%t43(qb8 z*nTvdD>Zt5xQE=ftqs*>>dYsFq;~CddJw0YZe~zR1!FK;-$*O6YFLAdY5dMKUXhbW@L3+>{A}= zuG=%B6vEbSye*XV^U1`;UzHo$AD@-ah(4XU-TzU0yZI?E z?#0JVB<0FZda_(O)AR7rawE5;l2YQ4N8T-e?&@Y^wpXiOc+b_lJYC-F{{388vMKV0 zn3(Uj&b4!^zt?+N&0BG5qUTH2%H&y|$~-n`{s44GUX( zD(lUv-=^LtgYTSFnWPgp$^Vt*TZNe^JazkyHr_EiFH{q~`S7 zP1CY={!&_0K6k>2szpl8w{M0zd}EGsFRT-vCz;27OKb6M%Z*jP+IwfMm)+^>C8E^& zYRa3qnT!m@M;s=fd_KvuJJn9SGQ92Xf_*=pKX)se8+m5ionH&?Ez*0fkjb)cT@TZY z5VsHJEH-n0K6Gy``!xFz=i|M{Htj!AFQF@WOxpXEr2Y?{O~O2ZtM*LwnY*;KHNeAv zy{N_WR}b{r3v=|3m>=W)H*MO*)N{d-C$*MFm2614tD*H|=2F4qGCC25t#=DvvsjYJ zuRMi)g3h|l%VuS+vvstY8(Och$8^Q6XCeC>e(Wz>eEaV0?N_^YJ?~t$d|PS(r^}_l zJBu5qZZcj^Un!rXTu``U!`z#Po|()v)7CkDMV5&<+HdV= zsq*p%)%%@7#1lTARPBV;wSl^~kDkllIX*IsakD)B+WlD{ zcX!9z8-?d>`q!-%Z{KNK7Wv`d&DT?FL_T`5-a4HV$h09?R?S~jC*_mpn;=%5y1AVX z7!QbRqvW;Hnufcpc)M@b94}iZaM=|0Il6E7bKop7`-$Y^HD>J@rx_AOu3cUtggQ=Mr$lgae-ABP`Z z<9sY8Z97>$bx(?U*38xVH%)!D++)jTK1r8bC^Ml$y0u4c@w5D|*223=Kmimbf0EyL zoAa@*(CyF6pY3=WI?+1Xush1swKisfzDq(w2lGtf)n4J-)mPLl$=Y?hu-|IWiv{b~ zoL|4W;{BHEU2e;|5hYqKh?JYSx@T3u3_+86P(%Tf*6P{z%FQ(4e{`*DOOop;_ZuL^0GgW`io{gJ+{Jpu2&Z+kE!FTUqP0HprTfk!zi^Ta<~Oc$jH~`Q^yVz9v_rKeHdT zX)e|i+xzdvnZE7f_jE~8On|*t)cetXpaDmq?o%u@B^-hF&K5cYech_Ij;Cr9ZfpcpE7EW?W zHC&-u>sorR&cBj5{p0qGce|UTz4F2+hbuuvWZg)-pG}D}tqeT(=p&Ix%mK%?36*c2?oLN&Vd# z4D!C|z9yGrA{$sf*=}{;9(-2z=zX4#d#XS1zYG2LXT_y^n}4mJbv~ufvdW@kkH4&= z`trx2sZQ%`O{Z+n__n+!j`wYN@7J%A+i&GbPJ4KFab(`j)SuH9t$lUJa^~yC*_983A_9kqYwb7F%vJj;~(qz05LPmd`iSbJ^xFuXBpRMuIP{tP)6D zI-%vOvi(o3mzN?IO|+h|F4S>qfUS$bS=UH!h2=YprC)s-5{MYi{25-z7J`Wjb-+`gGgyi}uT9vQ{Q@D@3)H zX&ewLI<>GRS1{?;`Wy0-{yG0ho)*2W|6J!}#Y6AD7T*52_T19^K+&K%LR064U!CwN ziS?=L^bISDzH%_H{kAzSSCV&G-|vK77w^2?E}^_?@!G|6)0&ov2b@$XQq+2J%8`eY zMZj(MuFPc{91;)8G_P`fmS#NV$K{>d*4u2GHgDakdDE(*(_Ta@p1W6j?}8P}`_?R+ z>b{yoqw_$5Ig!*GrZi&+b3|_J-~J>)?(jo~i;@eI{oS@mK2v99+!e$-Am&i4Fy;fYO0WrUbtML*QI_u#|F zEs4`Smv}1M%@I8JDTcT2#@$^XU+1m8oxDvfb-~sEzRx}neSHrtS+!t~CXoG$cQvS{BW6T^_Qz!!I3gr2POJbvYa%G8Gw z1TK12e(!zWm7jFDZpjJVi+3~=RxD3Gbk;jqetDp;I>U^o{=aoB<(CLJvNUmC+PQt+ zKDh(|*TA|@{DLbz=LWh?Te+V9G@HWIg^@GePgJTf*adj#?0Fp}-__q&X%=fIy{%%} zi#*;GkF?&8J)y5^D-Jcio3MMy!;pEL8Pl8WEgsCY|6OsrKIOfd{r7zHKWE*H?7RGq zJedBvw7IzKa)m)=o==;lk&Va2mWKUqD>PD#_GDG+B)jKNX;@R+ci_-Jg@01%SB--r z%KtM+FR!q8ldn{5CFd+Zb@k%T=$rhuo{yih-<=}O5%Vwg*Xwzp1ks&Wb~DlXX!G5& z=Y=@|ci)K5a4`+pG|BQoTeusGk=2H;QCV`% zruIP(IFk*xv{^jzi_CiZ`oe1Ief-MzLFwkQZ$X_U!#utf=}p^pHfw*h+h4Njb*ibX z-=p^`mOf5X`kfqYe>JLRT;IJ*VMSL7*YoY1=XWU1`klqw&{TBx%;WzI(9x4We~)aR z_Hg?=k^JWq!?;7AwY}bFJ+m%`=kLO6k4-`^bw!oMZ`#ww`SMh_QQs-=%M5FrUCvh4 z#NM2h+j67FIp;5nckjNtBHNdHt<)0AUb9MWTS%qtsV#36){BeAfap|464_1nu%9_?cV{O^>e6Otb#M8=#Nz5&ID`lNOt?4}X>f_|& zHTK73mu$_=Q&?@j@M!3@hcCC}7Vp@SF*(#oyl(DZQ$}WiRjU@vv%Gelfq%iZlFPBt zy~mm^=daootG)8Yix&&4x@OJl6th^^DYAL@ZUNCyN0rG37$&dMom1ny>Ftvf&u;lM ze!I84VEtB+hO^Vc4(jTzJ98#}`ZUXnj6ao=dbJmAo)WNW{?YBd;)jn{mYXfyZhm_1 z<8^nukEVF&RrvO;eiyncW8xLJ&VWY2Cw&SjAzzZh=O%~E4Bm3=NY3((eR4?_S9$N} zZu6I1(N+FCB=r00m3GgriACHLF?H4K3wMzDr#oZ0 zqGwR3$9nViZSRV=gumPz&;F-v@7tpZ-A|6|z59Bt^I683B9qo54Q+92Y$MXO72YhZ zaFmZ0`O)%j-m&->-yWa$oxUsay;SY=_pdJdeKlM4^H96{mq%gFx9q&7%8NEJEt5E& zDEi{KQBJwurl6D=YyaJ@+H!sQO7Hl*RbI2QTAuV>JT0m9c!ImaU&rgqm(9vt5%=M( zndIKz`8BuRd};`Ze1B!VudYNqwY88+RlM7z;cka$TpbWlbzTj`(usi#1 zR4(j^lv?(Fi>0nf`Fh6(jjM7@i#VS4c}Dv5{cV52_WMFnwrS9yDx%>Nfch3pCqxs_Ka)}*h{XSpiN}aUg z@~+E=HpwqOY3we=_%8MegD1nw`!WWvYUB^rPTv%C;KGviop&Q^{r;Scty;2r;?BRU zuOvSH-1+!(*0tAhkEXM1xwk#;rIzt=_lfQSr}hU49nDE%x1WDIes-Lm^tC7RdCHVF z-3^v)J78pcY4@V4xD^$7)8%(gw%U{WxWj9qvv#4zs$a}fJN~AIa)XDMA3Y6~oY}xo zhMS7_`84Jm8v`b6+JHzXWtqe=G*;t{;h@xrESM9xvE@Pp8l|^-0-(hNe}M>c3=v z-u3v0%a0XlTf=t8p8DMS<9u(JCv$kPFl$+4#Jm@$HfifG>k~b+OQ88~Y_d1*ubmN z`<+>E{_!_uPxNhbOAeXHFga=bX9$^OE~Asdz4KeBN<)V4^>en5?&cg<-cup`IP|^B zg0FJ3UQUU9T(Q>NazT&Mxh?yR^jEY!+VL5@96PuryoVmy&Cvb^j~W3 zHS?rBZd!|dqJ@|34t8aBKjZJ0_44Ag@ShUXr{Ay^@L=?rw)^;bJE5jU(dkFbxVpBs z-kK-XyJCy8$RviU)h8rRY1%LylxTb>y01;RrvK5=&D)qu7VLdn_lBnOU$W9gw=rT6#6ZcDaVB*4D;>6+j4s?uM0Y;kq#wjX-09!fZM!}B@z;yjZoL;NxPIZP>v_+YPaQs<*z=(xHNjo^ z^XrS3eNEZ!>u%cq-tPP}>G0y!Ssq2zw!S;FrkPE+?DL{lvnA_A%1d?kmp7eDU-`4V zj;OIK_HHYFc&+|GbrlT)v_mV31=k~he6-WZy< zWbMQ|-KpD7H{8s*mR)MP@4n-Nq%T*dOxdUtaQV>mE>-Y6l_+?gis8zChN#E#i)KBK z-F@v=-oCA|KNI>lJ}ArP-NNVp;>qjJ`yc9;o-mKDSSMLqJMXS{&aK{U3lFUHDYl$@ ztLkUgwD9Lolg`SfU(g8sGQCZ4?*35FZ1}a6pEldAyY-(z+Fajy%atp^F>5QX7DvC* zyeRu%O+`=1rw{)bG&!}89iLY_<+u5T<9{S?M}C`qjta%Yy z+L5cCG(Jx9+LCM8^ZB?c=c_$mrEmM1_6E-H6w9wUzur3cA)Bal?ZvyV*VB!GT)GMFf?mRm$FIShYaN z(}uy)>d%v#Z-l;ov_Ai8`}f+QtlSw#^+L_g*mLzhZOs$vxZ)jZbMoR0rr>Eo)mB?- zRvkO7{$g$4@w8)WzEu3P%~-Vcw(f_uwz8t4R*wGuLVaQuj~zrs_!AZ|uq`gvlKP|f zQq3{BY0;|l1uKm1<-R=A>vyF3S}y zdpA{e=PuZL=}O3^56348StcKFS8seHGXLz#>C9iUgDOQIy*poN+c_t@WaEri%a?i9 zJ-xd?P3v{edTE7vG-8xfzap_vYD?`>ix}`K}xJTh@9; zdRwvaEWcy)`QP*~t{0D=g@vXnG`QOT$a)%nMrn7cjrG}0?{|IoU35aF@7Px+ji)O% zop`h29`tl zI$(m&mUkb{3GVGas&!mzo+H21289L}=L2i@$vi%McE#R^Ci>#g47 z%(ok^JYoKMfc^99x|hplJ^Ih!|F>$ze7+evW>WGB2Hi3f99f&IKV?;ASDn4PQsel| z#|@<_8=PNyh|FK<{#`{j`mV`kU(>c0#{Mg)E%a?UN zofRYYZ{o48$hp1y5*V28OsY5Ay8Ljt;^88Go^N*&%?{@++jik>{`#d^)8|fmEb~cf zC%2(W)uqi>SmaJ@Ue(9cxY~4mZ%DqW%|ut53Dzq^rx`4LtWtQ>nQ2e|iYJ1<9OZ8P z@xLL@U~}qd&Gw^tJLPm^^Oha^)Mb74x{kO?RaRHXs)r0|J;)QWuB?aruVxd-H*QJh|%+yr(>PBN?zY&>&2B(m0=rPWu4e~j$d89 zpiq)^N5zxZSJ=dNJFkk}zVYG4KjGVLH&)GjveSF(75zynjlYf-etprTRmLFtTVhfE zl!-TI-=B9NR@daRZ^?V{ENqw5p3b!@XTm(98o7nXl^|FOSar?v+zTXbtXcdfEx%ChxoUtZ@GF=;-0(PGoE z{miKrc|S|(O|3c`-ZRxy<;(r4+Y86L;RWMqQ?#!yr8EUAjzNC?u^e`Ek&*=+^m;{|pmv#|Njjbv0WqTzvM$D_NDE ztEE$fK9oK1YV&Rlm^gicO5+s4E3dwTcF3(wee#Soa+jR-J3q$kt$#1=jN91VYrARk zTPFUn{TIrX$}Kip_0Klxdm86|hN+)Eukb(opTWYq@!_$n_hwlvuF~cyGmB_u{Lc`+ zJ8t1>kW8su-=@v;d6OX&HS~g60OgsetWO9a>dld zr3@ac{aoAANQ2lW0?7iD&U+!|A^)@U$_himx zgPtpao~NDFL-V~dZg472(AG3OvFd@r6F#?PiaTuz7yc?q)U_4MmLFf!*ROaiT+FM7A>&J*tjdiCE3VHapK!&d+zirZF&^( z_p;_mJ;4i6Iah-3Xuo>;e5tL8M#?m|$M;)ZRX+YQ{dxDpw>4)zpS^I$-(qu2+0G1e zXQjy!3o;X@Me1H*z5M3A$iF2?%ciRKO>3MHw3)qEevhYU!1b3xe?hZwQQGHt&n~=` zFY?`3Yt^)+>az|8W-KtdTN}D&ZTzMKk2f;6OiG=&-@>JcQMvimkI4;TZ`b$S&Tfj+ znQ$vl>`h+(yH>8t9X+8z%U4^SXy89qHOX?q#FIr&K6$DI_Fp;Kmg3!bC(XWCJH)fs zUvcWqU8_yL=qpcSeZ=`{VOm(l+^GRwnKEY&KA-<1+bX+d&5G8$4WZvv{w1#J{cvW| z&zhS#w@dST^VEyK>nojJd6cof3`@2*@nD|3zT_4^^k ziqZ3D)@5Hv-eMfPa@+dj-gC;iw=6jLt$JQ8&ys^IIcs8mInVp^?Um9bGmoBCZ!4yH zO@4oF;cV0lg1nC*o(o08Tief?#64kakPm7E&A{cp5Fp8uBm1?PJq@P1k+@o?>uc@!O)`TYhde z$dW$7;uy60%ofq?_pBi?0@cUYw@68vZ#h7gZ(W z_dDQK?)TG`aZ@fHH#)Y;B7|FJl3dKU-d{egQoldh`|a9pox1H~?y4=ZYrkB*VtQe( zX{fG`w~q0lSD}wf5}dU)6`D8{=2c$Rzti73?b@BqlIGG0+r@Qm=JZw0e43M2_FHK2 z^h_2*?c*w}a~5*T98wK=wUIx`uJEn+(PZI$GYa>sf7`FWDcFXWWv1zji~a$tR>fH+ zFI!y1n0G3|?_7A>o1O}}bN&fGHpV|}(hkdi+-7#sFn!WZ(OYga1piI@9cpuc@#{~g z`Ir0_iOVzE%)Za%T~ZhPb9MdBz>aI$t?eS)m-32Cob+$e_dt=NjbRVGRW%iiHCYNw zQ@-&Z}s`rB_kH{pnkXC#-@l?)*CZjIjf&gQg-(hH{c-VBweOTt{+V#{_%y(wFD`tGae z-uc_3Up`sAX3eUZNo}(@u53Q7ypgM86}OlQ1EYHUoZIW?KeZR(Ij7rsL+ke3`6+Ki z3$8u0Tzyc7>7~~CicF;@zn)jp&je4{-(#6N)x{(J3$yU;H}>oY-`>vbNxm|r;^?Y- z+jeCaI;%L%(0A&;zj5-0=bJ56PbM9iif#l-7Z)^2Hc zme4+#cjexel5=Og?LD5V&+J-rN1(1f@^Zvg{!h1FdO!KkFkL$O;oM297Ogtj6|R@R z<3ep`+7gqGZj*v8dsXsTFKILTF4({Qfd7gETK5?ke(_dH#+kZKy|HS|)#B4$pB9>2 z-SS#;#ljT~ze)`x1uv%c?kGtMV{A|ne7jzs<<#nTucP}@otma=ZrUH+s%!jV)8##r zmg?3Nily~QO>Mm!viVENEV)l6dbg%!u2p@u?eUdd|E}uUv!h?X%2>Vfjd8$*tC!BJ z7+(&(Cc0$#G)raHi-MY_%ldZROm2#9DYi0p zkF_@y^^g={T5YmP>$mXL@JYv~Sy%g-Tn=qNm#_NzTQKv|1KaLOJ>9jtRq2*tb&kog zbsl@&ICY~BwO@JF5x+3BF7*Z1ruN5)Kej%;X8l<1Or+VWV^>N`O}swG>P-k-YklXn zO450o2C*~+QP($ToZPz4b1~em!ndtz=|5#_(dhkkx=*HAv#wk9aN^@lt`j3OS0);r zwfXY5Wx^t@&AV-c{JOf|#VmjJ&8VNVrg7U(<;UBM=Q)R~T%RQ&bb8{NhPJ-9{vvfd zpZs-cyp*aie_ATbHy*a{prK5THx~BuLxa!1mtMbnXTz=U!CB&OZm-`enyh^ERZ{EH zY0EFBPV+MDZu6Aw3EbnjxGtqL_-SN{)r~mCpX&WTeK(cWp4`&RdPz@rCa++}F^zW{ zkM&xqt9bydM|HZ)_A>Xod_Fy<5821%jewZSGY1gs z$>Pvzkv}!uA~9_ZyCZ^?seUVceJ?olyjTPX?t8X zbhZ)VcorDK_-Nm%#4CPS%KeH zcem<_hOBvOq`qfQ+2qZF!mMq2kAkbsE@vCa&ON-MKz7qHjgP;1_sBaRpNYM)|syBtf7;ZX+{5?v@&m6RHxI7$E!W=*-a|yKN56Q=YmIQ zb;t7w$ATRC_Wto#UV2(5 zvYq9(RJK#))Te2NkJ>I?OZ~d(LRf0JYL-vjahu+IPs2~OC9V8iWza6q`z67D7iUO|C^ zoqu18{<=N!cJi)UX_=Y#JQGzPXWUika_e(RNsx?;mGn>$2P)yLPumUAV1l*eD~&aQWJmosYCK!v9_AyLW$~dwSA}HHUWm@ZJ3V?%|W~?iJ+k z?Rw1iFm1B`_sx!R7puZ#YOio*Ja7rMy``p=S{k16{T0t7lj)Z347~WaC#_*%`D^ca z{n@rVVYl|l@2ig6HmN!`c6Da?!IjI8zs~ZOs;)ggNl3ycX8DrMXTCg*Wj;13X!DL< zpGp6wGTF92zgBYD*R+rEs_3WqH1q6ZXRq)0x%AQ8je3IDwYEKcu;Eac_7%mQRVNmA z*59w*()U0-{Js7;xs+_n$Nw27?hbykj@N%qZl5b}kV(eXYbR5C!f!oEdf*z$wOL}u zjQcC?wOe&sr#G*izid{v4FAQohP(I4R$Sb-_1N2;w{4Sm#@yZQUASB*;M$qG`0raq z&dN;st-!onj@_p4#;g4i|HSjRe%+t*@jt`q*xLv9dBiT7v`K4)`aGd$!ZwB+%JW2Z z>V=giI9oh#R}QwCFSqCCmd9TWljqe1#jGzZ^= z?~zv4&eWu1?q9CIW<}`SoAg_XNksVdrzp%CpO=PVM-2BlmB&B&pMMS-a%b+-v(>UYdLsOS4GfO{l<|s zmYEvqEE}DUCuFXXU$!88M&`HIYCH3|{kHu0`%I$lhlsn7yKks?#NwUSf0pPkJQ6Bo zZ6EP+rH9~>pw0e_%nkngw#HBR=lQn0*CJ$R+oQP0o=^MycZO9}3f$5AtgSR-<)S2> z7L$$Nly5RK9pMetnWDvyf_zzs9>~@AY>a6`59JCg->ReJ6;zI121bWM~^->zjQQdHEI zW~j3v!=>8Q2lVF))Lz;2GjX@st8TZ8k3xmiZYTK$`CRu@oO|`%)W0f9YF`(}AJzZ0 zSH&sH;`G({I`-?m>Ap_ei$4Xmf5*NSTfR0!-pnR`^UvT-<~*{~xN0WdIrOwIM$Yc6 zZ^ZnFzjN(87rzxQQw`sB@@h}^3jGGT;IO=R>YzJ%6;!W?o_ar1l0S-27{6>##F9 zmHp0~4zE||T4Rp{2wBUu)~c1X9$)Yx)mUEU&(9;@!!>hf-hJctd~5YiCo!uvMPH@e zMPug5`CZwxfu&h!&EAv{8?U`mfuCPpZGQV6wi9`6?X+_@`W`>F?3wPebZflGqwN_> zI$3f9m8-U$e6k|>Os(2)SCzs(mP>b&S*CeR-NrP}-Rj(|S9jiiG0&3f4!zViZ(G+k z@#QO*t>{hZs+jAwC$EPiHC08xoke(+_0E0OwGZyE`V;r@xzw)rY%hZAuTIN4<+U)< z+yBR=y{n%qm`oLUXD?-8I3?iI73E*6Cdo_vk=T9ldB{JXpV^ar=e%c`Ds=Tyux;eL z%l)g(E0UM@PJcE@=u+u}Uxw4=W|j4(Wls`sKCccs&7kI$TH8GK6)UDDcd6>Vd)^u< z_heFC1ONH;XQEkm%|5qY_2ZhnMc&;%E^afOE+v!U=X5!x+>7Joe})&Wizl~ni~N0% z&K9Zh^4at0rabePH#*q7o;EAXdWUsmdv2O+=^fq!Co*+r{GG-e7#$mOL?!zK1A}FH zS<EVMW&h zh6M}^4B1-=?X?f-Kie<4xjU>r`*ZuT6^o@8x488eZvNYH#eG7cO1^NvpUT(NIfoS+ z`VP(#SSV%Q%ef)Wv{HS0oPX|CwFe320x^udmu_l?uG)6x_h*?ElDnD@rsR2~KIlKk zb_=xJDdO6SPu$03=YL8U%gHV^^s2hKper$FxATuxzf(3T#s_guzf(}Pv3Ix2o6fru z8d9r1JgOJa=SuqBzb)JK3ESlhAwh@px86}HJ+XF+memZU)Ca9kuQD<%4OHr#rZM?S z;1;vRk76I2J&4ubm~-rF{MMhQtJ0RO+nTmv?ViI{o-a?!uZcLervK9>kHF(RRUg*4 zu6t)UNB-}u6W}!nvocq_d+=!OtcTNcvgU1@*R*XN)3sMWS4>(Hz520|SJctg6X6x= z9?Kk0{CpI|p&kWu2aq-($5Obl`iwaJw&HPwy3wRp+e&NHDV_tuB%T=bjda%Yi2 zisIA=QQ6;Df1T{TrS*xY>!WMd)(cKoMN7ACA znPGJPI`6YOufvsXQ*#Qp)Xk0gwC22uk-N%x9W#qaAeWE$6Ze*1@p|7 z{cTgOzxhZ)+eXz6lh7+4w)Cr%eA;xTOLq2}4IwUa{w}+{4n8Sf^Ex8`{UmAE$8icj z%U-7%L|<~5xI*{hroFXiFDyt|+OQ$h!^r(cpD1(Fn+2a&E#4ljzQ?Zg*@gGz)68C- z=DT?D3fCR|oYa{Yv&Ao$w(Z)PoNCjksJ#EYV!CV)pIG+O%q_Rpn60vw?Yrrjx9#@I z$4eG3UecP_Gz+w0+g%Ej^E3h&7#K`JL*e*$Q*Lm#yR}%(ULfIee$u`;rD;{T*y0iD@wnJ z?X7INGi!$PvMe6gU3;cCv(9|g~yjwnpijFp~gy;;s(+U((f5D=O zhBI4&=DlI+KT>$->yy8wR)_0U_KBr^kCIm1U9)!EuUlW!Libz(6ulN6Oa*O@i z82g`3_5U-(&2RHv_&4j}e}?m#^}oJ8xmVNk@waTowf_wJewXJMw;6QZS=7cK+-Ldv zUf_9|zKUPPYh9<*`20~nnw=+hYVO;mJ3? zDcimpzqjT$g8$C@lXCa&<+MVDRf{&B_I1|P2vV7*8K^e3%ln$qS}uLt{`^#a(dzj} zuB)HQD(GR)E&H9U@yV)dP0PuG-NCU>T7RtyGl}b8E42E&PASi#ImRI&n`cVz+2gU& zPU1rzo1>oZ)BK4)|Go3Lyw}%u>+|f=U7RUjYyCEIsu(UX(sr955ojfNSn-vv-lZJ9 z^Et6?I@OuqzFqDMa(^}H%g5;}rkr><|H_I9TP}SHwZHcEfJ@+^MU8e0%;#E|EUcPR zO`G%e3sN^8zjm~0hdZ0wkw05DofLBPkMm&dYU`Rc&-I(Dr^}fW8%{)(aa=3ybK7US zb<4C@mhVKr23!sfI&#_H=A4kl;s9@J!*8JsLZ06kvO3@Cy?eKOo~7*dM4ObA>yK?) z*S9Q+XLrdYr4QFvDZF>id$3@FVZyr5pCt+Y5wkyTyPfjQIj^SffbQ+$ZPPe(zrB)J z9Qpjq;;7j@uca1;hFWQLrWZ7C{$SU@uu9bBd*Gboa_iR!JlSz5aGh^vTf_^wmAhPR zjBNZ(RVJ~Nby@D^Xq*^0lS{d^Zm;ykW1FP&f|Hi)zcnk6HKz8jqW72nw%GQl?8K6yc^g&ZmbnC9{+M-6 zIpC5&vTBgI5J%auAJ$W!MEA2#nwOJmQr*6z-&H2;H{){mO^**&vxfBly>m%x!T~KE zPwle`UsE(Kb}2A|+E4_}Sh*_jY5l=DpUzIdT50@{_1$ivyPR1r+p}GHQ%bf>-%_bu z$q~uXys_e%r_%HpX$qV99zXy7C-}$Yx98r41--TVeA#=u^=fyWvaZv$H+gM!4?SAC zc&cJK^M&bG`kQ^t!}*om+R}Jj&-0#t2Hu4;D|6WfN97wISER*m+HJc-+;w02ZvVC? z+f`aKr)_$lxOC0jq@bh8LS8)w9n%zw59rkUEo475UnuhQ{=ONEy6-AB9_j`0J5A&*4*@WdQJSN|Cw+$((Og^bH-&y2G#gEuF zu7w#N|1-$15S=%F<@czl*~{bR?s)laXX=;#3|A^&Uf+KD_Po_cn(Vp$cy_r?wJE;+ z@5I4&GYgI<^#|6o2k$Y@Fk79s>Xn{!^|pv<`k|o$ZIy4Xd1Yy;_Rp)bcIt|(WcX0K zQ)*hP!Y6;Lro7!jkH1`7duC!*=tildv(`n(sEh49(YF2C^ScYW%tUhrDH%6XX2eiuXtqoZjyDC&83; z+TE-rFIA5{dlh1J`OulYzrF{Z@mlmP?u<2G*6W=86XgY@&sk2Z)J(CC-W+yo>AEGi zUse5#dRz4;Xw%tf1@4zCldmwX)Y6z5s+<;i>tm8dop!_HD;3j(`=WKsysI_^-F~}e zrN2K%n%>=H2a&R}H1$4jL-k3X*EcU)czfyY+1Z# z9?~Bfwycp`CT8nu<#GA)lmgxU{&{L|p7(y)8vNi|R@a+J&o0|u*V^l~wS0BwG)Lvm zEUzYkO^OEfjc?mznx7tMqxEAg>_2XE!tJFc) zNf$5wI-|%JaX65@B=Ygo8T~V3BRT(X_aUi?(>M+b{fQS((2nE-2#cmjGA?>MU$)6c_3)yo zB-^rGnQMgDue=Wb$vNYpb#`-|u+g1M*SpX5oVj}K*6!A$FCMO*nOyXR|DsCeq>8JL z4c8d&uubh#n{26D|=(z!Y5i6s2Kjr+7Q@o=qjbY zNxQ1mw#lf~)!Y0E|Jj8KwSK$IZ-1RGx#@aJr0A_lH?y~0-W!^l8*^GjG2k0a%^4)bp^V_wT!QywK`&ZnU8?$EP zZhPaix=WN6E&nUU!pk0f_vOWdPMImQVq5r?!3%~7o&7WG;Pu8i2^M)zAAP+MR^NO3 z{WtANEUOl*Z}1kGBM|bTu4fIiHlJh!6NiFqUGh)c4^vMWMqhr{-d4VAhTO!K*F9&8 zDzr0~ykXDcx}JEWG^xtx)dA%~mDZ^&`WgFF>XP5oerwJ#|IV>w&*79sWvklt-zM(! z^%vneeQndiX_l(5FCLs`K522^!dafq(hs-n7u1(DH(opM_bm7Am9Dn-s|z+fOMd6G zWfJ>~q_4|fv-DJkg@)?|Hfk-gT04E&%BFQ3uU0PeOq}X`TqQ>`*5iqR@{K0jgV(Qv z1`NPw_(fQ?Tn!0%{ClNmbY!fH?#TUnFb+-h(J>T?)T=@z}=T=>U9tmP;()$gpzCF=qqjR_``wqKdhSYhFgoZc=dUr--zsfLt#ng5B(1I6lKZyneDklCoRyOsC zj-H=s=VOW3S@UHMZ@eAbb=iZXsp+P>tgem2?|BoCF|FVKLh9?5>yxKE{xZ|IX}8?k zS6LBKo4idX=^UE3k>AjZS!0@}NPCyVx>vH25$uWQc^ntr?*6cDI@hY%Dj(17mprL3 zb4gQ;bhZ50R&nlkf7UtiC|f0cD%Lf21+UM{xDZoBR|>B&6TAJ=_7 ztEY9=zev_Um~pA{p3|0#-YQwETi;FosLB4a_;YUA(9__y0kr#IH z&a8>A1&i*)rFc$EGhERTT(!wVV)cZFw)RJNyg$M4zDEDVd-?BD&s~!bnr~*`cQ?<; z*)w#ZM}?*@t$bismC-|e(F6sbM2Ky6B~k!gI0!VNqIbxn{sLQvA!TP z^{Kz>H`z~{eUtV6-{pU{tlN6?{Y6jr(2m@vN*6EcDsP(1f9qM?yPmd)n{no8L3@{! zKIMCS^FH^VTbGSwKS5&JZk2$wQD*~O7uC)Y~_0^nZoMtx46B4f$zY( z3n72m|1o`xNueGu%Bq^KjwG*PN~Fk@fd}C8cP@w6$LeTIHF*HJNq6 z-WvDsw>%28vU=i=-_Gt>7r6E4@?9yLZk}o7_q-X!dCTCHN?hW~a1WldLRS`hZ~FH9 z;rhq#tn21m-gT_G$Fpx!$h<|LXJ6Y|P!=Gyhn_0UuQ>WuHZ|TF1u`WX7N}UWa7#g>HxaMgwOQm1MudGh{u6@R!gs1zkchJZ^kU) ztCde|*fVjtsL13}QIo!>-b?Z?X|lV;AG;hpO{eR`-8;eRTT{PD#dMw5%&MCA;^IcR zwKf-byPMjqTJmL?!?WsBA{S#?#l zWGw3n;hUt)BpKa`h@N@pc=YkXPN zGwJN@c?$*3iez~U-7#*vvhyBiZ(!}I1)rK9da8&_2)I(Z@6CnCi_0S(8hh%RGCL*p zZ{Jg&HMNW3p{<`vvfQ><8_~X}X1Yy3OP}~1jMsjd@giY!SnN8JkdmqV@*>YxnB-ow zIMWrs*Qc;0DaTh-?= z+Q`?LzCYeqYs}lLdwnvbjQyQ#MM4Yy)SNp$&zsLl zU)${Q9}k^lo0|1LUe4N7`FLfbf5C>Qn{H>$lVgx^4N{#lsao#%@{P<39!!2!C${Iy z-w7Y?|9$NGci;Th^)~+*Qf$osGgMrx&tJFobm>2ZqUcwPw^qz6%>YgPX0*C#CMro%PPouuFH@ zlj&Ked+$G39?W{-bnq3Mb9H+KO-c4Q;01xiwR(%>SUxscNRvzAx_@ zXP-4Q`|PY!+tclDw6TQcw~fDs7UKgk?)5_LS#@gB`(;aRPk&-2y(Mh-6kWzG53i-J zTiq&A6~sC(_#T@U&q|$Ay;qltcv79#FYo@NTT^6nXM5k%S$XFi1LaN2ZKf-(VqKOe z72cV7&n&c(dq3YNgLjo>cE7gnI49cvu*B(h+oNsWyb665En=r6Rwi>wJQQD(#m;5h z@Qd+{>4o!#x7S{}%X(dOlEkKH?OCgX{X=zaZQfsRU%DdWurSN%Pv#jKjVfU|n8MmjD*u8pnssd6P%sMF3XUcd= zb#m@|qjUj*!rNP8>T5PiEScn$c{lUr!X2xdTndg%RJx+gD0Rf{;yr!0K${=6pha{9 zTepxdOqTtO2NHIVq7yggu}LPLTzlm!(>g8hv)iO@B+t=Sm>3kA$|rh;uRD$^6*H zo4;Ul?(#{$e|Fq@yISk=?YA?V)~eJko}Ra122b{Bg08A5pR5}XElBgYTKVRYf@f^iHXHFr?wMPIZ@-g% zx_SDp4oCj@_@1jOpNoz(9h$qSqkx}zmHq~qPnGH>A@fC~xhlSIDj&3}G+68Jye_fF`%}8=&ZB0pe*R~e7n7lx`P3`JP^PR| zVusIK$@e-FW{Rb7^)PKJ;x1aVc+>u=lWL5&eYe|oI`b~S!uIPXizlsryV|$%^tB4* z8ElN#l-V5)STi_%VivIN+dVy=t;X(_)}5%o**AR(b?%p4yIkD$mgjq;;!YEjFKg^B zTsk2Wwv;EU^2=kdu0#EgnWqhPEUdc4S z{}yg5s8(zl_V(vi&{#i-dQb#@~2IgF#Cv$eOKdm>ut`d#(d_xpB77oX62w07n8Xw96W z%PJ?mSSr@ee8J87Pg_@6EAGt>1h- zV%@#KcT>KYYh`9?CH-bI*taA|GdwQr9LG~nnI^tHx*HCfhwC1EyFL2*)Y}c$chqL* zzPYVi@#rG=T9xzOF}ki+!mCR|SG|35?`e3z zwL@RNnrt|0Hq{=N>bX(qzjx1e&Ak_AdAu;H%+w1$wo-jvp5f)S zI-7QHp7Q0asVS3|*7~rnFxBop+tt30uGTGRdYiH{C`KbIe2Zzw<~0|+_DnprYm!6} z{|>8nFPCjN-hXyoi}-KVkk6Mc$G%uLZ|W|8p%7&o-}7-2%%|qn?y#R9r&if>^}fRP zcpX)x6Naz0uG{VrJ2f@_%atHY9>%^3@1v*NBknGmp=@LLQFZa$RhbGaD^gmQ_Qo7n zcsOC=`5=2kdEeSCmwgjnuh9FpS)(B)v)1X~4FAaLvgdsk&tIQ^b}fBZ^vjelt5&ak zSjSvCDKz-tFFDTt44;oJuKc>_yRJ&5pCn6BN||4l=F1M(=q+CB@7-6P7T2wieDQQ? zSE9(8O|@@9e+VUN1AJUrA5Zi_CmB(IH^Zg7Au;yer$RpR~S>qCvyFC`O23DeUXoseOVsdU9Dxt=;z`OA}uGBY11>!ilbvh3F8pCaeBz3zHib^8oG#~%*2qTUF3$KHJLc4c7M zvi0It`o6MS%?=)&ooQkH)40NK-uQg|_17G2k;Xi}ycJG`O+wyA+JauzQYWtoz=b;^Xe3fLid`;tk*xEur>-d?%;f_uhKFdQ)usWX>k;x6NY9PA*(2p7dp_ zQ@Y_Ao_h@yCniRSzq+r%-h4hbyK>K)try>f^8Eznjx7j zeaF|V>wEB3&{_H4RH-k;{5s{rxhvPK-!aeViP^56=>?e^vQ0#O^6px3P1UKrX@x;4 z*SSTBFXg93>8;gxd&6hjUz2mS61#RQ_lxa`y!UF~-c38M*LLpmP|^%&im$t` zuI0YnX2p#Q`7O;SCI6J|NV?bZpP}+oTFLf|*Lz*2P0bdXeyO4-E6DH7@tZSB1K*!~ zP-<3P`|kF^tc_{g<|wHgF4~!;yd`F3-m-P86gg(k-yXb%QPb1FszGgfyQ0ME3Cjz> zBZSbo5J-u1&?aly@&5O0zbh5DM9-g^t6RtHxh2%HCOj}cn%Bkjes-T!ma@B&z-3NB zsj#H34w1eiQ=e~5JZ4^>`Df3)oM#uee4Uv(xjc8rSKnDr-HVqkU%Ft`wje3@roBrO zRXomWOx_cC=H3ij<*Cg|*R|&{?}%1?B;N6Z?LngHl}bDF{buU3u8M}LY`QWtThG*R zNs!LH>1mNu?Im6?H{WRe*}HMsp-+E4pRCILwmVUr+s(H1;ny&2S>5czvWFfQuAUpW zC{gN6sDj6$i0fCs+?;#2K|}Cd%jDyGzbyHY8~rWMcgt$YYqk|_uT^_uG?q+TCh@*) zV~dfy@sYDH=H2yX@=##9qj@88t=Q+sv;XFP3cC7u?`^GPMsvbs(iM)L4c&2n&8Fb% z-YTM9ZD~yjAI}}W)R*LLvwL|Q`|Xo9^3~gmkH7K`ot(xh`)<9~mRMn_1v_s4jjokd zjq-RK9Q64p%VewNwn;jxyw;~ZIFUQoWW5ci@j(@y$CG7Rz4ia_2f6<{RLXmA*59LB zbLYN$z2(}8ca^zZ&Y?LACamzf-j{Lr<%|svT{f;h7JZ}PNz)QG(b=cx?mT0&_UOhO zvBR4r<+SJBeqUnFvFUWzC7p;Zno3(;E`~W<{`OSp+i=J;Ei{cI`DyCRx9e-x?Q?u) zVt#ksuCxl?GHqTv5#^nMM>7_#|5^wqC&N|SyCotU^}UYA^o)V0&wZeOyg z_&BL`TfDM(?c%dKM)5lT8L}4qPMNah%BJAcp&Y;6mnDBqWhk2%y~4;K;p>fw~ho^P5k;Zp1;nOkl1>5Cv zCtKKY$Ct*0m%OPgeX=%I#6EfZC7sinc57bV{m&q`M5lHq*M0wlYKbuZ`M3X^yJLHL z$HUMqJC=SI-V&9ecRt+h;@M!IPd42zRgR^~croZou&l1N?c5OaXV0tkd3tx=vE8q1 z&HOZ7;BfY5o~qZazHKSjUS~Uhce*3CG%ImUlVz%7z?u^s7gxSp7}-$d)cK)Z;qKhi zhce_E}N854Lf2{cgE3Ibe;a&$>@bJb6QdjZZ17PSfjp<=yeVe}`Lr z@B4kfpGk)C$ER<8cKvj0?xa;!yDVLO3<5e-R1@a8_doY@D2;RGKYv0>>2KRl{i$!w ze4TgvmY$GO`E_@}i}$(}=GG+>PNy&16?oO1cP`K03AM9KIC~~{*P9)6 z&q9B0`F%Tn+w|x%y<73sD?eyxYT==C1dzB=2dUw-@5 zJ(_!R|1&%|w~Xh|-5vhZE=8vAyePgSsQbWLZkY{dRlJ@lx$_ z&)RnO`?{Ms{c=aLwr%r?P1|`bdf!#=i0}4W^=~QkExqaJ(Z40ljrH-n72Yf#Hposq zv+?fxL*>D_20Gn2S)bTvEiNm(zwNSTZ;0__&odj2P34nXx+=_A`oQuQoy%1|UfzXR zZmxR4@Z<%Cz{>@Eq{KdAx;hOtp=LHO( zPh4Y=DLyubH-&MHfaNd#+Vs!aQsJ2s7TeXeY$Lz#v)T8c`CQpH@mmtT}V z`<;yx0|WaZPZ!6Kh}N|;s&hg@<&N7wKj)Kv>t*t(EzZ$V(OJx~PMjILG;=r}Zp^OG z*tA1x(Md0X3-;GqcyBJ{%+818 zc%!O0F=*L4hBn9hYoirIL+h{VJiWW}QTIxQsFoAuqM~#EzdfygUUcDvNmstI_ZUxV zo0zq{DXDn3<)4?!@7C?F58OQE-h7@5N-mA3pYGc5Z)$j*;QM!BNq_(H&+?zp*pu_~ zr^uD-#VP;)a5_+Q~r4}Mzzccd-ZY4+Pj;U>Xm(7*1^uCaA~Q!k7|aIe7**+@>joIYD=a>%=P<} zo&EFCg@t~mtP_1#CK;7ipE|X#vg-7-T^a7jSL_s6ps_f2v)Yap&Il%<3x^V&w&!oo zdV4Es`|a9=t{syM8FZbdRGm7#zq0D{vt1v0rIqUb|I1i^S*WXN27`+alM17ziKDRe8dM7GQ+-A0B>Cz|qaXlMuOa6GkEc8rM zQ+3*-MdzV-Qh@TN>*hKt$PU)Y=cjPIe^ZrP?(I(O5vw3eez|JTJPYz^9$E4}Ny z`}1dKRodD$?{DM1KFhS?`#ay%C41+-Gr#BH<@wh7eZu+`9&cy7aO2g-j!e@Y zC4GAJy71g=_qG!vZAAXrLF z@~hM&^ytyt#S!F2B8usX1fBS?`rww@mrd%02VvN%a=L`Nx7n zTn=7Z%2V^@;*3_-0~bmk)z(&gf0KA_W3tH{YxfOndnMQJ>#F*Ykd-()Me&r#LdN9u zMj1)R+V{41qPIPW+O9YC)VDIWZ*Na8i`jU4Vw>ZS-|r1e=1%-qcZHcz>RIX;Bd5 zO4Qa@m+Tj|sjoAcvFJh6HlEqXogX~$GzoQOYULJhT2yfVPhQmJ)2DYzcJp@Zx0G2v z@6LwA&eDn-La$z(a`HIw?&Zl0k+aX8`B~K7`le+p`(>xRP~*&+)sJK1?=Ps3UgNj> z?`ie5F_Z-KdGi78%@kc6_|hX3u&kX=_ky^y&S3?=j|E{Ml{qU1?RVmLup?c;I2Y zxvA|#3At^&|M&%j86$GdR%K`Z43D3GU%Ye8O~t3K6(0gt-FSGR>)5fWJ0BLDJMf?L zP}=t3(BQ*A=gHmQ87rf~e>f=$cXjALWV z+1=g5%)Kj*zcGKvKUqleO??yd>1Su7BNx23{5PMG@xh6+OZV)W6+Cxtt-5LM)5IOR zOM84d6D-*BdWSdsw6dxba#(lSGct6l&App9zw`V4{>%G<`H%w( z$H^@pB^VT2SWlQ|tG|h|to}BMYx-$5VNQmgFZU)!${NnCGOq4o`!s*IPR2T;4m>^;>z7hjw%158blIOMA*N+|8QNAV@b6v zqf=&a?kOpOmGX=`GbijRu@>L3d@6GUqxUK4hLotNs6qv{9tOt*iH_5SZNdNQ53nQ~ w&b;ljX_8f_YNJb3Rn*2WwwCv<)cj=+l?EaktF{gKeVcsDJ z0oVU;*6~a;Smx2ZrsEQ?ZxM&ygvBnFE?nmtg94rky>!~x8m)3j$<^(USQPg)>&zq; zMi;kRX=V2=&tIr>`d!)XyUpL@9=UmHetuZ+!_#HmOU>-J$pS3-bN!ardIyAF-G1#? z>&)f7E`k#|4sWoP;JM|(l6I_WZ`%~1y>agujE%b%?TB9+mb}(fsxyPFgQGMy*=%;A z(aZyu>`GQPiY$*T-1gu1pAwY3_N%b5cB#xoiRPn8jf*q{Trb|_a%sui&dtzin6_r? zu}%d~p(mAmOGTO#c2u;xJ(}Y^?ex>t7XL(?7U+1p1hOa|ab;w%c)sCoo@_(^WX<=s zr#89B91nl^w~jx#=XQ?S<*?OXYm`>JmO9g8;`^U+STt2<{M7jt yFTo&UT%Db3I{*CoWB+`guig6oxB?on>HF_suX>mE-_|+p)}_VbyG%XWRxDs!Bbdb`rSkCf z_opQpQ)e&z9?Q3;X^2drllMU70&71c8CwuJm{abIp zeHPuYNTZJ3@x#oHxOW1*hRe1@t$mhYkYRMp!NudU$f{L`HtEbcpPpkT-Q%WwW82?% zC04fVjt$l>J1E5m&cv;Mo-ym249h`b!OT;yI|^kU z7g#)~+Iz@=rzNo?Z+rL2lqSFB&0ni{FPmfwyfr;gD5K)Z38R1FYejhuGSfQP|hTIvQJ?m5M8zE|_KJ2Ny0Fm1o>%kU%6J0MhalaBNL z`|XP~Ht29?&a!*3EqAew_mM&!z3HdD7hn7l!t9~x=u!|XzH8m#&o*bC7c(?GuT1E< zIxY74U)KBI?en(Zj`8vg@_IC9@{~!dRw-$!in=2h%i uo%h^T#Pz@K#3`Fjeg5EaktF{gFX#;)5A z0&V{%irr-ME}D3(<3UjG?A^;f=DTxNc8JvRJ?~omN$9208L_ft0gE{24F|>2&Q_(X zyZRk}S@Y!IJLwtuX$cuSW9kad-E9>}+B4ar@B8JKU&IA}ZdvzvdHazWz|5Z1g ze)`Eh`){a=Ty&?>q6`CxFY1#$=XWS5S;+8pJeF8|am8VmFNNE0pWSjTLp3m4UCF?B z)v7}^cJ1H)wSBfZUSXp*CCGT~*L1 z!O^woK;8cKATG~IcM5iAPD}l8PyF`VZ_(}ou7b0cInG+vv8ev~-ZX{}_a4{SRWsNx zp57$DG;5jTyyy8w3^D7&C6fPqtf+bOwJP3cC`GVy&NA$7e!FZ3*ZX_(gMKMn{jgqg*t>n5-mVwdc+LxmI|e9UlrZu5 zQ({_ROHtjRNV$1z%lk=bT+YJ`-QVnLY|jT_oBf)`qRPnx(gN%Xx|4tEMdaVwoi3 z8lgAcLau*<4)^ratatOor+TqI{wNVS?clathJwW!uZ)j$%&5q+Ew{P&-MZ_q|3(_ifRH$!b{%@XfPPgvO) wR!x~yId8sr_tEzopr0G&e8k^lez literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/13.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/13.png new file mode 100644 index 0000000000000000000000000000000000000000..5b41e02a670f020ae62b7854482c4ba1980d73cf GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`%IK)5S5QVovKN`}4B` zMA$w&XL9s;aOlF(1%)YvneO4jm-o(&U;MKD#e?Mq8+>b)^R3G((>5$`ILflv=tsMT zqri^uWh?XJrteF)Ir(#L@uYSZ#}5m2PWL-;h`yh)YSr?%_21hCg6ylJ<~^TZ68k@M z*0PUs0U}2m4Zrz%{ru!$;?!{|$E-JRd$xd+!qOu@YuZ+=+K?-K{IOu7#Gy?(C029K zJuHwgKK8+3O1mEi<8zsP?~|?OE?SqZ;@R}Hh*OcJN#Q`=cIVYsi%fl`jgRf~&@_Gf zwzE(sdH3B%ReKL@(z)}#{LAm!8Ou74CNVNBn8MT`ef;AL!#4E;rLlAT)H7zW#a>U8 zU^AP|o3>d}=J>$`0|rHwDM43C-@g0)`~9hChd_}fnOvtgEzsbyc%HHSwnVR+$0Qaf z4hDzV>nAp?Vf*l#Q@}~VH~7Z3-c_p%=AWOKD!ECAd8tU(q6Mq8jughk>rJ2Tw)o@M zm#pV3mrVI!!@p|Pp+XrSHQ@j+Lm56tj!LO-Hu>!LzuT|B{(4Tap5^mRI^HKOr#o>( zhECmcH*b>$SLC#%J&RUEtqrq3WKa^{tg=+3a-Mjg$X|1pImHv7|6G6l?EhE#0)GDv Vq@B#jVqjok@O1TaS?83{1OO3{4iFg+V~@k_l_W_wBcH zWmp*BaqNHHW9Xsz@VDKv%bG0$2|bO5Z6>~kGkrGPetRKrdu;6W&)@+-S^-5e@qWpx=%~ppu-*HbtcU?B((KtQse2TO*ZEl8Jswt zRO&J4%x73CvPq};vBd=w-op^F6<=oH98=hD0fB5^~^0#Ht9-5wBo~e$L z1lS(@e{k6MP=#(Q)65P&Df1-{87Bltt+Mf&((ZAvc!Ef@>!Js&9H9b5iNOkrjBYL6 zJ*_!sB>iV?h@ACiit<@=<+J)R*K4P%cxw9w^X5-kmdSp5TRo@ZmA&eVHGWMv{dC`S zuce2g9b}I0mp%UT(3$h)E?kO6N0T-NtiR6f#9?6EcU;-Tw>eSb#{2IdZ1@=hR$sjr zzyA8Z#}+%3XYST(VGvBTnww-G;h@R7RHW^&qTY1wDM1E2%vZCnP73-ad;I5-GeP_8 zE`G0F6Q(`qeEN%Bd`m@QuDc4b82Acr%ROx3%dny5{(I}bX7&S{bY%G0Jv1kte!3xU z{l(W`FJx^snCW9M|9s%ekN~~u3#V){n|<~=yTas?3Ovp)cJVPNC~di&>!GEaktF{gFH!7eFB zfwuoy?SYP89?67Uc^u>7$ueKD;_TuU8yCKP?%y^nk6}6Q`Xb ztf|`>GH3mp6jYb?>^RdSfr%@^R!^go|6uIuQi$NDW>upBo%&=x}fma9VINW5Ly|Qkmm3JvHr(Hb1rr&)I%k zqW}1XsO0Up4@Uid#O=~jwU>`!u0>yZkk=jF7J(OKyBQi3I1HqEAMAR!+FC^5{Aa5( zf1b8B8nUgv%H`5>GKER;h_=JWcU60(815ha{H$oF%dBM*eC_{b&TZl;l$m|{>8A+2 z>GpSd7ik$I?GB%onzMHA^lP*F zk0)=tnX|7g@rLFCKI7=6AyTdvVl+z`(%Z>FVdQ I&MBb@0M`i8D*ylh literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/3.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff0a93931515bb97a045dfa61a8530d87e458fd GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`$7M>EaktF{gFH*{(+p zB5wOOu6l7m)8 z=-oKUH}V^&iJyB|uo8LF()AHB5)-MfO`N3nt zvX}OXM~sd8*9*0GtV!A!kzpdmy4F;zn{|?kqeR<^5G@5I1_ong&q>Sg=9!B)JHv7pU)=hauMINB3;oaL&ye>}mU!H{id4Bxig=9%^>^=*s?64R8I`k2o? pd-p8Ef~{sjr?y8+Fx+F*x_2OD_kw447#J8BJYD@<);T3K0RY@Tw*mkF literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/4.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/4.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa29fc0b48c17aa6ce5540e1af5c00510c33ff7 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`)qx>EaktF{gFH#x5mC zfwup%GG$o)=ergqP)_hu?Cbmc-FuV6=PTSkE z?z;W`K`XyJWKnY38^_LI-}iXo6rn{K^Ugm{NGsVLTQQIQc;ScrMIF~}*~{?xZ|}UC z)%voeOU2Vbu7Bb(%{5!g=daxAHc3V5z+>?E76HlSc>&q{{ zJgU5>EY^K=``x_dYqp*_vnNK+lE-=9auZ+6u0=XLho7HKd(8afJ98Qv1B>H_g?h*I z^7xt(_!*jJt_^x6<$Ce%iJd)$VVYl~OqdVEFZF#=7-s1t%fP_E;OXk;vd$@?2>|9n B#bp2h literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/5.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/5.png new file mode 100644 index 0000000000000000000000000000000000000000..36e785867ad9b06bb5da296fee61b67cd8159ded GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`&U2>EaktF{gFn*{nkj zBCY4o9LZ47@QCRUnZAf+N!}-g*k62kUh<2$=N}3cU-wJsu7~Tf`D?j51GwEfg_G2_ zuV#t97&qf=>*tSit#h_USr*FJFU!>WaGpbPU+ne2DLtw;&jomW^|@TLId}ILd4;Y; z`kGI<1$&J<4oW?f4p9*ch$x|rP+;KqSwET0Ksa~vKtM(>J91HOJ>EhB>xN^tsw+8di7uv`rMqUeL zJtlGLsS$%o&3$<<&56<(YY$o;PcU%UfB(F1o@3V5sOFBi;${Vo2fOrSjvstkva9-x zil;zZBGUt9^BXy4GknxI4hvj-p!#HTV6S6ePsEk3N^VkheYYwwc>v z!48gj&!5^CXy3`&YF5dr$YOKedHr?gg#ir$OfFx%f9Fdu@F;mr4Z2vhci-*k?73P? f@97_A_`n?SY~RWh)zCHu1_lOCS3j3^P6EaktF{gFH{#8D;%7vjax1W#KXIAnv(J`n z&5VyM+63~m6_r{NIT!+`rAn_gmE-I&+!3QUA?T1q^ClfZ7RG!2%96cqg2wgyaq?lS zMX$X!U8LbO@45W6mvfv$L-`J@Z+FmS&DLGD$|-VMfY)E~efQs=*mUM;<-bcWOZM5Z zTz)B%D3P@Lt`d*4kJ{wr1(Q_jEaktF{gLJ{wyX( zf%f{%yMM5|1Qs>DxO#n#YtRpleGYL4%{eMNMC?4cR!{jhN$+gat*(bhBwQW8eR)?F zba$a+^0L_vzt^7O@l~6=`|-z${Iyee1O}bTzyIC7L&Goql*H!=r=P}oFAaJ)O@ZgI z{@Sm`#{5B@N=kt`V%+OqiyeDxcc)!#?*L7k5+eADVIg?*L>hpfK3x*)1hCVBt; z;|%wV8@Gym{wcFIjN7SWb%BU0N0Y+6yzR|3cK@fSPF7(wKKyx4{o#4fYt#Iv1TDJ# z*2#-AZQqV>`4S8w#?i?>7PHU(+hgr1l-*Nl-OBiY{af+c^=0Sh`7EaktF{kyy#=ct) z0&EZJryZ5xyvdOv(510`p{HDvlxC~E$|>iVgULHQ3PYvrom?h2P4(>+k=FEToVfLb z-1}ul4-dV}J2m&O{aGGazV^u2>+);2+U^P78~6Tv*4AI1E_e2NCZAD1|9M}poAQ6# z2UUCjU5lzOJ!f0qp`v6c!}s@T(aY_*-6p<)(^RJf%{ZH;pv2Hn%$FKjXEE0=dabFI zOUbTczTJ2ED(5xNoT$P%L(+vssY!q-Q6kB1zW$Oa(QCh^Kc6#2_JRrTx8JslG@1mM zBBvdU`kln8=_3m^%&og1Cq^RrH#tzmz{IfafeFfcH9y85}Sb4q9e0BP^KrT_o{ literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/9.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/callouts/9.png new file mode 100644 index 0000000000000000000000000000000000000000..abe636072b61306fbcd6157b95dfdf7e86a77e5d GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqFpV_;w?d&FzWz`&U8>EaktF{gEcf7T%f znb!OIl8YM`EC?0g)MK6LySsR*bBW@-#a{$sD|jaA?Rq5|BVw*<(2>_Fw2;L_Ls+eT z*=m-pP5G8*zMrjje*N{AqvqEc&v$lO8~PeQnNu$u7&XUG^XcT&$oGAZue{@YWbseb zX;0Q#doE68rNi6aM(w}9J~guKY8ESl1YdhX&(saqqyj~D?!KF+)#9L-_*{J2Y1Ks< zObjyp?mceG5^anO3Q8tYyaIvx98EzeZXaKe_`Z|7b6wRX+{3FhZAn{V<2dEM9+du_kptYsE+ z{WKfa2W_~S^T2{nZ8E1=H*3uG*3`)V4^%t_SRAV?Wb9U5edYbrW%=bs0jAGCWzMDv z&-uLjLxRB%P3bLBx;@8}pH%jFEoHiFvT*CZ6}7y~440#x2c4?eefQp-XqD5OV!VD< d@-ZKf|NC_Jf+y*vd<+Z>44$rjF6*2UngH>Mv>N~b literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/caution.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/caution.png new file mode 100644 index 0000000000000000000000000000000000000000..4be6d07237c70f92024fa479896a55331cbb5027 GIT binary patch literal 1400 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSV36ftV_;x7Juk1Ffq{Xg*vT`5gM)*kh9jke zfq{Xuz$3Dlfq`==2s6IwUBJn}z#v)T8c`CQpH@mmtT}V z`<;yx0|U!fPZ!4!kIuc*qjN+;C63qMpINs3_FcWZK~)Pys+upkYA)1`b!O;wSR{Cm zrIX8ocaMg|&ZS}Ve7+p?@bEBkjJxo`;n8A6#bfHGhK%}x910=1JFYY>-LfUedbjm$ z+vDxqq_>G|SXwb@a`DW`pZ}lzUt|2aS0Z_aS7FY_M;rG|YqIS2jlXVs=b?CU|IB|U z-z{FYgm1#qzDRBJwG(HZx_PaOS5Rl)tW##eOa(bBL$30!K6@b5JN~DfaY^izJq69l z-hclyH5@OF(8@}CHTyZkh1mUyS06fUy82L^@4*eBu+P%7eZNN<%(}5>>w4)-H*L17PGacO_0395*|_hg zHp9g>+r@9=45aQB3x@s;S$bLN^*j!So&U}+U6IlD^7R4TOcld)RVAlQ8JwM!s}1+o zE2?g8uGq^i6P*&pI7h7V+^X&~*JGD6O61(=?#b%laQ6M}z;d@%E_Ck-nWNV-StmGr z2zENSK=Q>A-RQpPTXV$31>3mAgw|Ja8eix93UPboWLJ51_m@A2V|c88XzhKrcLEXXR4W&T%SNa9 zo@4B;)w&Zg>D3?3#hWCuZcJ6wQ(|FaWcc*y)1^nr*Y6xFKOpUL{~z4gme;zY(yZrqY{|krAWd}0$uU_5#>C>m4?3bqR6#nVY7BKJ9;#hoszV*c4 zt&#r&*kz(WEnSkfy0biz=XmGU+`0un{{8*k>7uk{+qQf9d>!WfPd3F)@JgEW*CQkB z$i}7L9=cCZm0x}9=+R%tBz?;CHZHYR7ZDd+7q^$op}P9_-$#pU_oi5@1sHwm($m&E zG^uBaD)WJjOCzRU%{92F-4!zFhLZGK?KuU>f)5WgGH=3jwVopdc{U#H6?vDBVwVz(id(ZHpY|fF}g`f5bRNhHSDnAfE zvG}2%|4*%no0IQn-`BUDVQ!`Wm~%br+a8r!QOs;Taw}i{+fnxCk8QGXU7XIO>v=oH z-w7}m9hGSAU}-!gTYBYvq|fa8%C09=K3{eJpD3Bz(`xw9c)R7kchP;!=EoRx7BI|U zWMSZ4qUQeL#G-~61x6mG?LCI&#`Bm2Ps+unFdn|llfcMyq@l&ojrk9E#cSqwU*7k+ RF)%PNc)I$ztaD0e0su5UiTVHl literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/important.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/important.png new file mode 100644 index 0000000000000000000000000000000000000000..994325ed7dad03f7b4826819e0a15a633c3348dd GIT binary patch literal 1742 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 R7#J8BJYD@<);T3K0RRT5O@aUb literal 0 HcmV?d00001 diff --git a/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/note.png b/doc/libs/1_61_0/libs/spirit/repository/doc/html/images/note.png new file mode 100644 index 0000000000000000000000000000000000000000..c425ecb301e54f1439da221ef940f0fb62d656f1 GIT binary patch literal 2312 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 sTrIJFn|9^uTWtmmtT}V z`<;yx0|VzOPZ!6Kh}O9?qH|)7S01l7EI#=lL$}HCt4XNQXPc}63mVg!K<%6o;ma8|5BqkU!X>!eeXSLf(vu`R) z&YkF2e(_e&>U7S>BFcwNFKKcdGPS7zus!R@8>PNsq<(Z|K$vxiCaE#ye)okpwVmh-M?p#9GSQ~J^em!8Ox3B@7MX; zemtT+&-b@pP|3$&X`ZR8LfqB|>s+h+x&8a+`@xmR)aO5$Twkc(y5>mWv@GL<%+k5r z)0aoCoBH!}|9&^Et4>`LT(TeS=n&CVQ#+QQZ8GaTvwA+Gz@j&EY<`~LcXw-BvQe<_ zwp#p(Ai2mzK|9Z_UatQ0>PjX5+NaWYeqYpaQu8ozk~r2DEOX2J)a=O9Q-2E9Rp0s$ z?!TvFYnz4`%R(g{)}UQ7HWd#xE_U~?Ny~b5bw2Y6#sl~E?%r=_XlOT0MM{zB(o0^i zrCLuvX-S_ov9G@P^yKn+&rZ1TdH0A22Dxd7K3XYop3`#6{p9y~{mcFr-m7{qcj{@V z*V52SFWH<*JSKHG?Q_^^^JlMP+|Ad2^-7Pweft0NgEy2E<3H{$QJHt z^;-Jr;>nZ3^Y62K`1_^vZuPOQsO+AXj1_USeU|mUXWwHlT=aY|zv2?NQ*rNO)ei*5 z#w>4sUGm|sS(DY#oc4t^9On!YPNrBb`ODWQ%*2+=b2CTmdg=UIbC{Epr|Lf~vRtz< zL3qlQioBlZ$2>A4V%}`}{V;G%Z{VWm4ML3bgq2czHb^Dwwz+b>WZ}H>IeE=G(GS6f z>%GnVbDn0NG*(b>GIwoe0%_BnM)T{|P}`us#?`Giu%*X1Xc?7C6V>a@^VWT(qS zZ<*Eq%yc(|DYQ6oSSq$kgs*!owuUvE)k?5sqW9{#%Wj^z@OIgcE04n?D!#iaEVvk@ z(({_*w$k&r>TmBj+I4{qt@~SzL=QNXv&oBklig% zw7;n+v!>?0x%W~V+m3l}*Cl%_O{%d^`oB;0P=b8^zJKiRsy`@bF6TRw{3hGtmG6|_ zdh=FaNSl~;+34#prsMK8^Il&UeSS_;FJ{7(>&6^24@toy5GnsTx)%wY`rRFb?t@5qg#L2=Dt(P}K&TYEN?eL-0E+4y}%_EooYe>dLyDaR(qTa;rG z6|*lzW13Le`*p(GnDt^VR45&OdiwDjDa#{w#qwe^4_>YQnGVJh|-@o zc467oJKz61{N`q8%KdvnR_``!*>P;8xt>E&+ttvMw`RF7et02Id&|4K)3%ANJv+6v zHTW@~!|t{7Pd}ZMzBMm!{dO~LPDU@!rUQw|&YLzp3ea2sVW#@~#Jq(^Z!S&M`*-i4 zf8~+F>076M*3n;@u~p>mIwcO3V;ns@zn&9xeYW&$?}=OG=can``!B!z=-gY;-bNKc zmc}J_%U-fIByq3R~-}POFr5A((TI252}h4rwcXiJ&NA1qp$t%^YeVgr~VpK+Gg&yI{)RU za}yJS*%tj-;=x)%`V@fx*kR>QL!h z|EY`iT;()~zGLt=ow=KR?><3hmChe|5?%EhzLjrR`R%}<*wV6?T}J)0zE|gYu8pN0 zb}@#>&PfRWUwmzOJcH8h%^#Z?TLid1{PyBiIr7$h%BnwW1VXbKl3C8j_n!@yO<>s*SdbO@y@@@kRq`Bz*)|Z6Bj!@c`tNGl5IK5A=bT& zyYg}i&dz8xz7TP9-iH5H9p%j* zM68dr%}&4fK+@Xgww-f%)_JB~^yz5$!G3ptXTfkT;o5t)>1Pw{WD@`7#J8BJYD@<);T3K0RU3X2d@AC literal 0 HcmV?d00001 diff --git a/doc/libs/1_62_0/doc/html/boost_asio/async_op1.png b/doc/libs/1_62_0/doc/html/boost_asio/async_op1.png new file mode 100644 index 0000000000000000000000000000000000000000..0de79911e48a2a084d5cd5f4f4fa006a937ae8f6 GIT binary patch literal 24084 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 E06T`Vh5!Hn literal 0 HcmV?d00001 diff --git a/doc/libs/1_62_0/doc/html/boost_asio/async_op2.png b/doc/libs/1_62_0/doc/html/boost_asio/async_op2.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8d3c08726284b5008a94f61fb539b0722a67ff GIT binary patch literal 25260 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 A^#A|> literal 0 HcmV?d00001 diff --git a/doc/libs/1_62_0/doc/html/boost_asio/proactor.png b/doc/libs/1_62_0/doc/html/boost_asio/proactor.png new file mode 100644 index 0000000000000000000000000000000000000000..a0653b0106c8514b24ad8ed3aef48d320168634f GIT binary patch literal 30877 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∋X>eh*16o^nTUnt--MJ|0#VH@jq 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 literal 0 HcmV?d00001 diff --git a/doc/libs/1_77_0/libs/leaf/doc/html/index.html b/doc/libs/1_77_0/libs/leaf/doc/html/index.html new file mode 100644 index 0000000..18e5356 --- /dev/null +++ b/doc/libs/1_77_0/libs/leaf/doc/html/index.html @@ -0,0 +1,6596 @@ +--- +title: LEAF +copyright: © 2018-2021 Emil Dotchevski. Distributed under the Boost Software License, Version 1.0. +revised: +--- + +LEAF + +function switch\_style() +{ + var i, tag; + for( i=0, tag=document.getElementsByTagName("link"); i`](#tutorial-async_result) + - [Using Exception Handling](#tutorial-async_eh) + + [Classification of Failures](#tutorial-classification) + + [Converting Exceptions to `result`](#tutorial-exception_to_result) + + [Using `error_monitor` to Report Arbitrary Errors from C-callbacks](#tutorial-on_error_in_c_callbacks) + + [Diagnostic Information](#tutorial-diagnostic_information) + + [Working with `std::error_code`, `std::error_condition`](#tutorial-std_error_code) + - [Introduction](#_introduction) + - [Support in LEAF](#_support_in_leaf) + + [Boost Exception Integration](#tutorial-boost_exception_integration) +* [Examples](#example) +* [Synopsis](#synopsis) + + [Error Reporting](#synopsis-reporting) + - [`error.hpp`](#error.hpp) + - [`common.hpp`](#common.hpp) + - [`result.hpp`](#result.hpp) + - [`on_error.hpp`](#on_error.hpp) + - [`exception.hpp`](#exception.hpp) + - [`capture.hpp`](#_capture_hpp) + + [Error Handling](#tutorial-handling) + - [`context.hpp`](#context.hpp) + - [`handle_errors.hpp`](#handle_errors.hpp) + - [`pred.hpp`](#pred.hpp) +* [Reference: Functions](#functions) + + [`activate_context`](#activate_context) + + [`capture`](#capture) + + [`context_type_from_handlers`](#context_type_from_handlers) + + [`current_error`](#current_error) + + [`exception`](#exception) + + [`exception_to_result`](#exception_to_result) + + [`make_context`](#make_context) + + [`make_shared_context`](#make_shared_context) + + [`new_error`](#new_error) + + [`on_error`](#on_error) + + [`try_catch`](#try_catch) + + [`try_handle_all`](#try_handle_all) + + [`try_handle_some`](#try_handle_some) +* [Reference: Types](#types) + + [`context`](#context) + - [Constructors](#context::context) + - [`activate`](#context::activate) + - [`deactivate`](#context::deactivate) + - [`handle_error`](#context::handle_error) + - [`is_active`](#context::is_active) + - [`print`](#context::print) + - [`propagate`](#context::propagate) + + [`context_activator`](#context_activator) + + [`diagnostic_info`](#diagnostic_info) + + [`error_id`](#error_id) + - [Constructors](#error_id::error_id) + - [`is_error_id`](#is_error_id) + - [`load`](#error_id::load) + - [`operator==`, `!=`, `<`](#error_id::comparison_operators) + - [`operator bool`](#error_id::operator_bool) + - [`to_error_code`](#error_id::to_error_code) + - [`value`](#error_id::value) + + [`error_monitor`](#error_monitor) + + [`e_api_function`](#e_api_function) + + [`e_at_line`](#e_at_line) + + [`e_errno`](#e_errno) + + [`e_file_name`](#e_file_name) + + [`e_LastError`](#e_LastError) + + [`e_source_location`](#e_source_location) + + [`e_type_info_name`](#e_type_info_name) + + [`error_info`](#error_info) + + [`polymorphic_context`](#polymorphic_context) + + [`result`](#result) + - [Constructors](#result::result) + - [`error`](#result::error) + - [`load`](#result::load) + - [`operator=`](#result::operator_eq) + - [`operator bool`](#result::operator_bool) + - [`value`, `operator*`, `->`](#result::value) + + [`verbose_diagnostic_info`](#verbose_diagnostic_info) +* [Reference: Predicates](#predicates) + + [`catch_`](#catch_) + + [`if_not`](#if_not) + + [`match`](#match) + + [`match_member`](#match_member) + + [`match_value`](#match_value) +* [Reference: Traits](#traits) + + [`is_predicate`](#is_predicate) + + [`is_result_type`](#is_result_type) +* [Reference: Macros](#macros) + + [`BOOST_LEAF_`](#_boost_leaf) + - [`ASSIGN`](#BOOST_LEAF_ASSIGN) + - [`AUTO`](#BOOST_LEAF_AUTO) + - [`CHECK`](#BOOST_LEAF_CHECK) + - [`EXCEPTION`](#BOOST_LEAF_EXCEPTION) + - [`NEW_ERROR`](#BOOST_LEAF_NEW_ERROR) + - [`THROW_EXCEPTION`](#BOOST_LEAF_THROW_EXCEPTION) +* [Design](#rationale) + + [Rationale](#_rationale) + + [Critique 1: Error Types Do Not Participate in Function Signatures](#exception_specifications) + + [Critique 2: LEAF Does Not Facilitate Mapping Between Different Error Types](#translation) + + [Critique 3: LEAF Does Not Treat Low Level Error Types as Implementation Details](#errors_are_not_implementation_details) +* [Alternatives to LEAF](#_alternatives_to_leaf) + + [Comparison to Boost Exception](#boost_exception) + + [Comparison to Boost Outcome](#boost_outcome) + - [Design Differences](#_design_differences) + - [The Interoperability Problem](#interoperability) +* [Benchmark](#_benchmark) +* [Running the Unit Tests](#_running_the_unit_tests) + + [Meson Build](#_meson_build) + + [Boost Build](#_boost_build) +* [Configuration Macros](#configuration) +* [Limitations](#_limitations) +* [Acknowledgements](#_acknowledgements) + + +[GitHub](https://github.com/boostorg/leaf) | [PDF](https://boostorg.github.io/leaf/leaf.pdf) + + + +Abstract +-------- + +Boost LEAF is a lightweight error handling library for C++11. Features: + + + +* Small single-header format, no dependencies. +* Designed for maximum efficiency ("happy" path and "sad" path). +* No dynamic memory allocations, even with heavy payloads. +* O(1) transport of arbitrary error types (independent of call stack depth). +* Can be used with or without exception handling. +* Support for multi-thread programming. + + + + +| [Introduction](#introduction) | [Tutorial](#tutorial) | [Synopsis](#synopsis) | [Whitepaper](https://github.com/boostorg/leaf/blob/master/doc/whitepaper.md) | [Benchmark](https://github.com/boostorg/leaf/blob/master/benchmark/benchmark.md) | Reference: [Functions](#functions) | [Types](#types) | [Predicates](#predicates) | [Traits](#traits) | [Macros](#macros) | +LEAF is designed with a strong bias towards the common use case where callers of functions which may fail check for success and forward errors up the call stack but do not handle them. In this case, only a trivial success-or-failure discriminant is transported. Actual error objects are communicated directly to the error-handling scope, skipping the intermediate check-only frames altogether. + + + +Support +------- + +* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel) +* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boost-users) +* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boost) +* [Report an issue](https://github.com/boostorg/leaf/issues) on GitHub + + + +Portability +----------- + +LEAF requires only C++11, but is tested on many compiler versions and C++ standards. + +The library uses thread-local storage, except when multi-threading is disabled (e.g. on some embedded platforms). See [Configuration Macros](#configuration). + + + +Distribution +------------ + + + +There are three distribution channels: + +* LEAF is included in official [Boost](https://www.boost.org/) releases, starting with Boost 1.75. +* The source code is hosted on [GitHub](https://github.com/boostorg/leaf). +* For maximum portability, the latest LEAF release is also available in single-header format: simply download [leaf.hpp](https://raw.githubusercontent.com/boostorg/leaf/gh-pages/leaf.hpp) (direct download link). + + + +| | | +| --- | --- | +| | +LEAF does not depend on Boost or other libraries. + | + + + +Five Minute Introduction +------------------------ + +We’ll implement two versions of the same simple program: one using the LEAF `noexcept` API to handle errors, and another using the exception-handling API. + +### `noexcept` API +We’ll write a short but complete program that reads a text file in a buffer and prints it to `std::cout`, using LEAF to handle errors without exception handling. + + + +| | | +| --- | --- | +| | +LEAF provides an [Exception-Handling API](#introduction-eh) as well. + | + +We’ll skip to the chase and start with the `main` function: it will try several operations as needed and handle all the errors that occur. Did I say **all** the errors? I did, so we’ll use `leaf::try_handle_all`. It has the following signature: + + + +``` +template +<> try\_handle\_all( TryBlock && try\_block, Handler && ... handler ); +``` + +`TryBlock` is a function type, required to return a `result` — for example, `leaf::result` — that holds a value of type `T` or else indicates a failure. + +The first thing `try_handle_all` does is invoke the `try_block` function. If the returned object `r` indicates success, `try_handle_all` unwraps it, returning the contained `r.value()`; otherwise it calls the first suitable error handling function from the `handler…​` list. + +We’ll see later just what kind of a `TryBlock` will our `main` function pass to `try_handle_all`, but first, let’s look at the juicy error-handling part. In case of an error, LEAF will consider each of the error handlers, in order, and call the first suitable match: + + + +``` +int main( int argc, char const \* argv[] ) +{ + return leaf::try\_handle\_all( + + [&]() -> leaf::result + { + // The TryBlock goes here, we'll see it later + }, + + // Error handlers below: + + [](leaf::match, leaf::match\_value, leaf::e\_file\_name const & fn) + { **(1)** + std::cerr << "File not found: " << fn.value << std::endl; + return 1; + }, + + [](leaf::match, leaf::e\_errno const & errn, leaf::e\_file\_name const & fn) + { **(2)** + std::cerr << "Failed to open " << fn.value << ", errno=" << errn << std::endl; + return 2; + }, + + [](leaf::match, leaf::e\_errno const \* errn, leaf::e\_file\_name const & fn) + { **(3)** + std::cerr << "Failed to access " << fn.value; + if( errn ) + std::cerr << ", errno=" << \*errn; + std::cerr << std::endl; + return 3; + }, + + [](leaf::match, leaf::e\_errno const & errn) + { **(4)** + std::cerr << "Output error, errno=" << errn << std::endl; + return 4; + }, + + [](leaf::match) + { **(5)** + std::cout << "Bad command line argument" << std::endl; + return 5; + }, + + [](leaf::error\_info const & unmatched) + { **(6)** + std::cerr << + "Unknown failure detected" << std::endl << + "Cryptic diagnostic information follows" << std::endl << + unmatched; + return 6; + } + ); +} +``` + + + +| | | +| --- | --- | +| **1** | This handler will be called if the detected error includes: +• an object of type `enum error_code` equal to the value `open_error`, and +• an object of type `leaf::e_errno` that has `.value` equal to `ENOENT`, and +• an object of type `leaf::e_file_name`. +In short, it handles "file not found" errors. | +| **2** | This handler will be called if the detected error includes: +• an object of type `enum error_code` equal to `open_error`, and +• an object of type `leaf::e_errno` (regardless of its `.value`), and +• an object of type `leaf::e_file_name`. +In short, it will handle other "file open" errors. | +| **3** | This handler will be called if the detected error includes: +• an object of type `enum error_code` equal to any of `size_error`, `read_error`, `eof_error`, and +• an optional object of type `leaf::e_errno` (regardless of its `.value`), and +• an object of type `leaf::e_file_name`. | +| **4** | This handler will be called if the detected error includes: +• an object of type `enum error_code` equal to `output_error`, and +• an object of type `leaf::e_errno` (regardless of its `.value`), | +| **5** | This handler will be called if the detected error includes an object of type `enum error_code` equal to `bad_command_line`. | +| **6** | This last handler is a catch-all for any error, in case no other handler could be selected: it prints diagnostic information to help debug logic errors in the program, since it failed to find an appropriate error handler for the error condition it encountered. | + + + +| | | +| --- | --- | +| | +It is critical to understand that the error handlers are considered in order, rather than by finding a "best match". No error handler is "better" than the others: LEAF will call the first one for which all of the arguments can be supplied using the available error objects. + | + +Now, reading and printing a file may not seem like a complex job, but let’s split it into several functions, each communicating failures using `leaf::result`: + + + +``` +leaf::result parse\_command\_line( int argc, char const \* argv[] ) noexcept; **(1)** + +leaf::result> file\_open( char const \* file\_name ) noexcept; **(2)** + +leaf::result file\_size( FILE & f ) noexcept; **(3)** + +leaf::result file\_read( FILE & f, void \* buf, int size ) noexcept; **(4)** +``` + + + +| | | +| --- | --- | +| **1** | Parse the command line, return the file name. | +| **2** | Open a file for reading. | +| **3** | Return the size of the file. | +| **4** | Read size bytes from f into buf. | + +For example, let’s look at `file_open`: + + + +``` +leaf::result> file\_open( char const \* file\_name ) noexcept +{ + if( FILE \* f = fopen(file\_name,"rb") ) + return std::shared\_ptr(f,&fclose); + else + return leaf::new\_error(open\_error, leaf::e\_errno{errno}); +} +``` + +If `fopen` succeeds, we return a `shared_ptr` which will automatically call `fclose` as needed. If `fopen` fails, we report an error by calling `new_error`, which takes any number of error objects to communicate with the error. In this case we pass the system `errno` (LEAF defines `struct e_errno {int value;}`), and our own error code value, `open_error`. + +Here is our complete error code `enum`: + + + +``` +enum error\_code +{ + bad\_command\_line = 1, + open\_error, + read\_error, + size\_error, + eof\_error, + output\_error +}; +``` + +We’re now ready to look at the `TryBlock` we’ll pass to `try_handle_all`. It does all the work, bails out if it encounters an error: + + + +``` +int main( int argc, char const \* argv[] ) +{ + return leaf::try\_handle\_all( + + [&]() -> leaf::result + { + leaf::result file\_name = parse\_command\_line(argc,argv); + if( !file\_name ) + return file\_name.error(); +``` + +Wait, what’s this, if "error" return "error"? There is a better way: we’ll use `BOOST_LEAF_AUTO`. It takes a `result` and bails out in case of a failure (control leaves the calling function), otherwise uses the passed variable to access the `T` value stored in the `result` object. + +This is what our `TryBlock` really looks like: + + + +``` +int main( int argc, char const \* argv[] ) +{ + return leaf::try\_handle\_all( + + [&]() -> leaf::result **(1)** + { + BOOST\_LEAF\_AUTO(file\_name, parse\_command\_line(argc,argv)); **(2)** + + auto load = leaf::on\_error( leaf::e\_file\_name{file\_name} ); **(3)** + + BOOST\_LEAF\_AUTO(f, file\_open(file\_name)); **(4)** + + BOOST\_LEAF\_AUTO(s, file\_size(\*f)); **(4)** + + std::string buffer( 1 + s, '\0' ); + BOOST\_LEAF\_CHECK(file\_read(\*f, &buffer[0], buffer.size()-1)); **(4)** + + std::cout << buffer; + std::cout.flush(); + if( std::cout.fail() ) + return leaf::new\_error(output\_error, leaf::e\_errno{errno}); + + return 0; + }, + + .... **(5)** + + ); **(6)** +} +``` + + + +| | | +| --- | --- | +| **1** | Our `TryBlock` returns a `result`. In case of success, it will hold `0`, which will be returned from `main` to the OS. | +| **2** | If `parse_command_line` returns an error, we forward that error to `try_handle_all` (which invoked us) verbatim. Otherwise, `BOOST_LEAF_AUTO` gets us a variable, `file_name`, to access the parsed string. | +| **3** | From now on, all errors escaping this scope will automatically communicate the (now successfully parsed from the command line) file name (LEAF defines `struct e_file_name {std::string value;}`). This is as if every time one of the following functions wants to report an error, `on_error` says "wait, associate this `e_file_name` object with the error, it’s important!" | +| **4** | Call more functions, forward each failure to the caller. | +| **5** | List of error handlers goes here (we saw this earlier). | +| **6** | This concludes the `try_handle_all` arguments — as well as our program! | + +Nice and simple! Writing the `TryBlock`, we focus on the "happy" path — if we encounter any error we just return it to `try_handle_all` for processing. Well, that’s if we’re being good and using RAII for automatic clean-up — which we are, `shared_ptr` will automatically close the file for us. + + + +| | | +| --- | --- | +| | +The complete program from this tutorial is available [here](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_result.cpp?ts=4). The [other](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_eh.cpp?ts=4) version of the same program uses exception handling to report errors (see [below](#introduction-eh)). + | + + +--- + +### Exception-Handling API +And now, we’ll write the same program that reads a text file in a buffer and prints it to `std::cout`, this time using exceptions to report errors. First, we need to define our exception class hierarchy: + + + +``` +struct bad\_command\_line: std::exception { }; +struct input\_error: std::exception { }; +struct open\_error: input\_error { }; +struct read\_error: input\_error { }; +struct size\_error: input\_error { }; +struct eof\_error: input\_error { }; +struct output\_error: std::exception { }; +``` + +We’ll split the job into several functions, communicating failures by throwing exceptions: + + + +``` +char const \* parse\_command\_line( int argc, char const \* argv[] ); **(1)** + +std::shared\_ptr file\_open( char const \* file\_name ); **(2)** + +int file\_size( FILE & f ); **(3)** + +void file\_read( FILE & f, void \* buf, int size ); **(4)** +``` + + + +| | | +| --- | --- | +| **1** | Parse the command line, return the file name. | +| **2** | Open a file for reading. | +| **3** | Return the size of the file. | +| **4** | Read size bytes from f into buf. | + +The `main` function brings everything together and handles all the exceptions that are thrown, but instead of using `try` and `catch`, it will use the function template `leaf::try_catch`, which has the following signature: + + + +``` +template +<> try\_catch( TryBlock && try\_block, Handler && ... handler ); +``` + +`TryBlock` is a function type that takes no arguments; `try_catch` simply returns the value returned by the `try_block`, catching any exception it throws, in which case it calls the first suitable error handling function from the `handler…​` list. + +Let’s first look at the `TryBlock` our `main` function passes to `try_catch`: + + + +``` +int main( int argc, char const \* argv[] ) +{ + return leaf::try\_catch( + + [&] **(1)** + { + char const \* file\_name = parse\_command\_line(argc,argv); **(2)** + + auto load = leaf::on\_error( leaf::e\_file\_name{file\_name} ); **(3)** + + std::shared\_ptr f = file\_open( file\_name ); **(2)** + + std::string buffer( 1+file\_size(\*f), '\0' ); **(2)** + file\_read(\*f, &buffer[0], buffer.size()-1); **(2)** + + std::cout << buffer; + std::cout.flush(); + if( std::cout.fail() ) + throw leaf::exception(output\_error{}, leaf::e\_errno{errno}); + + return 0; + }, + + .... **(4)** + + ); **(5)** +} +``` + + + +| | | +| --- | --- | +| **1** | Except if it throws, our `TryBlock` returns `0`, which will be returned from `main` to the OS. | +| **2** | If any of the functions we call throws, `try_catch` will find an appropriate handler to invoke (below). | +| **3** | From now on, all exceptions escaping this scope will automatically communicate the (now successfully parsed from the command line) file name (LEAF defines `struct e_file_name {std::string value;}`). This is as if every time one of the following functions wants to throw an exception, `on_error` says "wait, associate this `e_file_name` object with the exception, it’s important!" | +| **4** | List of error handlers goes here. We’ll see that later. | +| **5** | This concludes the `try_catch` arguments — as well as our program! | + +As it is always the case when using exception handling, as long as our `TryBlock` is exception-safe, we can focus on the "happy" path. Of course, our `TryBlock` is exception-safe, since `shared_ptr` will automatically close the file for us in case an exception is thrown. + +Now let’s look at the second part of the call to `try_catch`, which lists the error handlers: + + + +``` +int main( int argc, char const \* argv[] ) +{ + return leaf::try\_catch( + [&] + { + // The TryBlock goes here (we saw that earlier) + }, + + // Error handlers below: + + [](open\_error &, leaf::match\_value, leaf::e\_file\_name const & fn) + { **(1)** + std::cerr << "File not found: " << fn.value << std::endl; + return 1; + }, + + [](open\_error &, leaf::e\_file\_name const & fn, leaf::e\_errno const & errn) + { **(2)** + std::cerr << "Failed to open " << fn.value << ", errno=" << errn << std::endl; + return 2; + }, + + [](input\_error &, leaf::e\_errno const \* errn, leaf::e\_file\_name const & fn) + { **(3)** + std::cerr << "Failed to access " << fn.value; + if( errn ) + std::cerr << ", errno=" << \*errn; + std::cerr << std::endl; + return 3; + }, + + [](output\_error &, leaf::e\_errno const & errn) + { **(4)** + std::cerr << "Output error, errno=" << errn << std::endl; + return 4; + }, + + [](bad\_command\_line &) + { **(5)** + std::cout << "Bad command line argument" << std::endl; + return 5; + }, + + [](leaf::error\_info const & unmatched) + { **(6)** + std::cerr << + "Unknown failure detected" << std::endl << + "Cryptic diagnostic information follows" << std::endl << + unmatched; + return 6; + } ); +} +``` + + + +| | | +| --- | --- | +| **1** | This handler will be called if: +• an `open_error` exception was caught, with +• an object of type `leaf::e_errno` that has `.value` equal to `ENOENT`, and +• an object of type `leaf::e_file_name`. +In short, it handles "file not found" errors. | +| **2** | This handler will be called if: +• an `open_error` exception was caught, with +• an object of type `leaf::e_errno` (regardless of its `.value`), and +• an object of type `leaf::e_file_name`. +In short, it handles other "file open" errors. | +| **3** | This handler will be called if: +• an `input_error` exception was caught (which is a base type), with +• an optional object of type `leaf::e_errno` (regardless of its `.value`), and +• an object of type `leaf::e_file_name`. | +| **4** | This handler will be called if: +• an `output_error` exception was caught, with +• an object of type `leaf::e_errno` (regardless of its `.value`), | +| **5** | This handler will be called if a `bad_command_line` exception was caught. | +| **6** | If `try_catch` fails to find an appropriate handler, it will re-throw the exception. But this is the `main` function which should handle all exceptions, so this last handler matches any error and prints diagnostic information, to help debug logic errors. | + + + +| | | +| --- | --- | +| | +It is critical to understand that the error handlers are considered in order, rather than by finding a "best match". No error handler is "better" than the others: LEAF will call the first one for which all of the arguments can be supplied using the available error objects. + | + +To conclude this introduction, let’s look at one of the error-reporting functions that our `TryBlock` calls, for example `file_open`: + + + +``` +std::shared\_ptr file\_open( char const \* file\_name ) +{ + if( FILE \* f = fopen(file\_name,"rb") ) + return std::shared\_ptr(f,&fclose); + else + throw leaf::exception(open\_error{}, leaf::e\_errno{errno}); +} +``` + +If `fopen` succeeds, it returns a `shared_ptr` which will automatically call `fclose` as needed. If `fopen` fails, we throw the exception object returned by `leaf::exception`, which in this case is of type that derives from `open_error`; the passed `e_errno` object will be associated with the exception. + + + +| | | +| --- | --- | +| | `try_catch` works with any exception, not only exceptions thrown using `leaf::exception`. + | + + + +| | | +| --- | --- | +| | +The complete program from this tutorial is available [here](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_eh.cpp?ts=4). The [other](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_result.cpp?ts=4) version of the same program does not use exception handling to report errors (see the [previous introduction](#introduction-result)). + | + +Tutorial +-------- + +This section assumes the reader has basic understanding of using LEAF to handle errors; see [Five Minute Introduction](#introduction). + +### Error Communication Model +#### `noexcept` API +The following figure illustrates how error objects are transported when using LEAF without exception handling: + + +![LEAF 1](LEAF-1.png) + +Figure 1. LEAF noexcept Error Communication Model + + +The arrows pointing down indicate the call stack order for the functions `f1` through `f5`: higher level functions calling lower level functions. + +Note the call to `on_error` in `f3`: it caches the passed error objects of types `E1` and `E3` in the returned object `load`, where they stay ready to be communicated in case any function downstream from `f3` reports an error. Presumably these objects are relevant to any such failure, but are conveniently accessible only in this scope. + +*Figure 1* depicts the condition where `f5` has detected an error. It calls `leaf::new_error` to create a new, unique `error_id`. The passed error object of type `E2` is immediately loaded in the first active `context` object that provides static storage for it, found in any calling scope (in this case `f1`), and is associated with the newly-generated `error_id` (solid arrow); + +The `error_id` itself is returned to the immediate caller `f4`, usually stored in a `result` object `r`. That object takes the path shown by dashed arrows, as each error-neutral function, unable to handle the failure, forwards it to its immediate caller in the returned value — until an error-handling scope is reached. + +When the destructor of the `load` object in `f3` executes, it detects that `new_error` was invoked after its initialization, loads the cached objects of types `E1` and `E3` in the first active `context` object that provides static storage for them, found in any calling scope (in this case `f1`), and associates them with the last generated `error_id` (solid arrow). + +When the error-handling scope `f1` is reached, it probes `ctx` for any error objects associated with the `error_id` it received from `f2`, and processes a list of user-provided error handlers, in order, until it finds a handler with arguments that can be supplied using the available (in `ctx`) error objects. That handler is called to deal with the failure. + + +#### Exception-Handling API +The following figure illustrates the slightly different error communication model used when errors are reported by throwing exceptions: + + +![LEAF 2](LEAF-2.png) + +Figure 2. LEAF Error Communication Model Using Exception Handling + + +The main difference is that the call to `new_error` is implicit in the call to the function template `leaf::exception`, which in this case takes an exception object of type `Ex`, and returns an exception object of unspecified type that derives publicly from `Ex`. + + +#### Interoperability +Ideally, when an error is detected, a program using LEAF would always call [`new_error`](#new_error), ensuring that each encountered failure is definitely assigned a unique [`error_id`](#error_id), which then is reliably delivered, by an exception or by a `result` object, to the appropriate error-handling scope. + +Alas, this is not always possible. + +For example, the error may need to be communicated through uncooperative 3rd-party interfaces. To facilitate this transmission, a error ID may be encoded in a `std::error_code`. As long as a 3rd-party interface understands `std::error_code`, it should be compatible with LEAF. + +Further, it is sometimes necessary to communicate errors through an interface that does not even use `std::error_code`. An example of this is when an external lower-level library throws an exception, which is unlikely to be able to carry an `error_id`. + +To support this tricky use case, LEAF provides the function [`current_error`](#current_error), which returns the error ID returned by the most recent call (from this thread) to [`new_error`](#new_error). One possible approach to solving the problem is to use the following logic (implemented by the [`error_monitor`](#error_monitor) type): + +1. Before calling the uncooperative API, call [`current_error`](#current_error) and cache the returned value. +2. Call the API, then call `current_error` again: + + 1. If this returns the same value as before, pass the error objects to `new_error` to associate them with a new `error_id`; + 2. else, associate the error objects with the `error_id` value returned by the second call to `current_error`. + +Note that if the above logic is nested (e.g. one function calling another), `new_error` will be called only by the inner-most function, because that call guarantees that all calling functions will hit the `else` branch. + + + +| | | +| --- | --- | +| | +To avoid ambiguities, whenever possible, use the [`exception`](#exception) function template when throwing exceptions to ensure that the exception object transports a unique `error_id`; better yet, use the [`THROW_EXCEPTION`](#BOOST_LEAF_THROW_EXCEPTION) macro, which in addition will capture `__FILE__` and `__LINE__`. + | + + +--- + + +### Loading of Error Objects +To load an error object is to move it into an active [`context`](#context), usually local to a [`try_handle_some`](#try_handle_some), a [`try_handle_all`](#try_handle_all) or a [`try_catch`](#try_catch) scope in the calling thread, where it becomes uniquely associated with a specific [`error_id`](#error_id) — or discarded if storage is not available. + +Various LEAF functions take a list of error objects to load. As an example, if a function `copy_file` that takes the name of the input file and the name of the output file as its arguments detects a failure, it could communicate an error code `ec`, plus the two relevant file names using [`new_error`](#new_error): + + + +``` +return leaf::new\_error(ec, e\_input\_name{n1}, e\_output\_name{n2}); +``` + +Alternatively, error objects may be loaded using a `result` that is already communicating an error. This way they become associated with that error, rather than with a new error: + + + +``` +leaf::result f() noexcept; + +leaf::result g( char const \* fn ) noexcept +{ + if( leaf::result r = f() ) + { **(1)** + ....; + return { }; + } + else + { + return r.load( e\_file\_name{fn} ); **(2)** + } +} +``` + +[`result`](#result) | [`load`](#result::load) + + + +| | | +| --- | --- | +| **1** | Success! Use `r.value()`. | +| **2** | `f()` has failed; here we associate an additional `e_file_name` with the error. However, this association occurs iff in the call stack leading to `g` there are error handlers that take an `e_file_name` argument. Otherwise, the object passed to `load` is discarded. In other words, the passed objects are loaded iff the program actually uses them to handle errors. | + +Besides error objects, `load` can take function arguments: + +* If we pass a function that takes no arguments, it is invoked, and the returned error object is loaded. +Consider that if we pass to `load` an error object that is not needed by any error handler, it will be discarded. If the object is expensive to compute, it would be better if the computation can be skipped as well. Passing a function with no arguments to `load` is an excellent way to achieve this behavior: + + + +``` +struct info { .... }; + +info compute\_info() noexcept; + +leaf::result operation( char const \* file\_name ) noexcept +{ + if( leaf::result r = try\_something() ) + { **(1)** + .... + return { }; + } + else + { + return r.load( **(2)** + [&] + { + return compute\_info(); + } ); + } +} +``` + +[`result`](#result) | [`load`](#result::load) + + + +| | | +| --- | --- | +| **1** | Success! Use `r.value()`. | +| **2** | `try_something` has failed; `compute_info` will only be called if an error handler exists which takes a `info` argument. | +* If we pass a function that takes a single argument of type `E &`, LEAF calls the function with the object of type `E` currently loaded in an active `context`, associated with the error. If no such object is available, a new one is default-initialized and then passed to the function. +For example, if an operation that involves many different files fails, a program may provide for collecting all relevant file names in a `e_relevant_file_names` object: + + + +``` +struct e\_relevant\_file\_names +{ + std::vector value; +}; + +leaf::result operation( char const \* file\_name ) noexcept +{ + if( leaf::result r = try\_something() ) + { **(1)** + .... + return { }; + } + else + { + return r.load( **(2)** + [&](e\_relevant\_file\_names & e) + { + e.value.push\_back(file\_name); + } ); + } +} +``` + +[`result`](#result) | [`load`](#result::load) + + + +| | | +| --- | --- | +| **1** | Success! Use `r.value()`. | +| **2** | `try_something` has failed — add `file_name` to the `e_relevant_file_names` object, associated with the `error_id` communicated in `r`. Note, however, that the passed function will only be called iff in the call stack there are error handlers that take an `e_relevant_file_names` object. | + + +--- + +### Using `on_error` +It is not typical for an error-reporting function to be able to supply all of the data needed by a suitable error-handling function in order to recover from the failure. For example, a function that reports `FILE` operation failures may not have access to the file name, yet an error handling function needs it in order to print a useful error message. + +Of course the file name is typically readily available in the call stack leading to the failed `FILE` operation. Below, while `parse_info` can’t report the file name, `parse_file` can and does: + + + +``` +leaf::result parse\_info( FILE \* f ) noexcept; **(1)** + +leaf::result parse\_file( char const \* file\_name ) noexcept +{ + auto load = leaf::on\_error(leaf::e\_file\_name{file\_name}); **(2)** + + if( FILE \* f = fopen(file\_name,"r") ) + { + auto r = parse\_info(f); + fclose(f); + return r; + } + else + return leaf::new\_error( error\_enum::file\_open\_error ); +} +``` + +[`result`](#result) | [`on_error`](#on_error) | [`new_error`](#new_error) + + + +| | | +| --- | --- | +| **1** | `parse_info` parses `f`, communicating errors using `result`. | +| **2** | Using `on_error` ensures that the file name is included with any error reported out of `parse_file`. All we need to do is hold on to the returned object `load`; when it expires, if an error is being reported, the passed `e_file_name` value will be automatically associated with it. | + + + +| | | +| --- | --- | +| | `on_error` —  like `load` — can be passed any number of arguments. + | + +When we invoke `on_error`, we can pass three kinds of arguments: + +1. Actual error objects (like in the example above); +2. Functions that take no arguments and return an error object; +3. Functions that take an error object by mutable reference. + +If we want to use `on_error` to capture `errno`, we can’t just pass [`e_errno`](#e_errno) to it, because at that time it hasn’t been set (yet). Instead, we’d pass a function that returns it: + + + +``` +void read\_file(FILE \* f) { + + auto load = leaf::on\_error([]{ return e\_errno{errno}; }); + + .... + size\_t nr1=fread(buf1,1,count1,f); + if( ferror(f) ) + throw leaf::exception(); + + size\_t nr2=fread(buf2,1,count2,f); + if( ferror(f) ) + throw leaf::exception(); + + size\_t nr3=fread(buf3,1,count3,f); + if( ferror(f) ) + throw leaf::exception(); + .... +} +``` + +Above, if a `throw` statement is reached, LEAF will invoke the function passed to `on_error` and associate the returned `e_errno` object with the exception. + +The final type of arguments that can be passed to `on_error` is a function that takes a single mutable error object reference. In this case, `on_error` uses it similarly to how such functios are used by `load`; see [Loading of Error Objects](#tutorial-loading). + + +--- + +### Using Predicates to Handle Errors +Usually, LEAF error handlers are selected based on the type of the arguments they take and the type of the available error objects. When an error handler takes a predicate type as an argument, the [handler selection procedure](#handler_selection_procedure) is able to also take into account the *value* of the available error objects. + +Consider this error code enum: + + + +``` +enum class my\_error +{ + e1=1, + e2, + e3 +}; +``` + +We could handle `my_error` errors like so: + + + +``` +return leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( my\_error e ) + { **(1)** + switch(e) + { + case my\_error::e1: + ....; **(2)** + break; + case my\_error::e2: + case my\_error::e3: + ....; **(3)** + break; + default: + ....; **(4)** + break; + } ); +``` + + + +| | | +| --- | --- | +| **1** | This handler will be selected if we’ve got a `my_error` object. | +| **2** | Handle `e1` errors. | +| **3** | Handle `e2` and `e3` errors. | +| **4** | Handle bad `my_error` values. | + +If `my_error` object is available, LEAF will call our error handler. If not, the failure will be forwarded to our caller. + +This can be rewritten using the [`match`](#match) predicate to organize the different cases in different error handlers. The following is equivalent: + + + +``` +return leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + []( leaf::match m ) + { **(1)** + assert(m.matched == my\_error::e1); + ....; + }, + + []( leaf::match m ) + { **(2)** + assert(m.matched == my\_error::e2 || m.matched == my\_error::e3); + ....; + }, + + []( my\_error e ) + { **(3)** + ....; + } ); +``` + + + +| | | +| --- | --- | +| **1** | We’ve got a `my_error` object that compares equal to `e1`. | +| **2** | We`ve got a `my_error` object that compares equal to either `e2` or `e3`. | +| **3** | Handle bad `my_error` values. | + +The first argument to the `match` template generally specifies the type `E` of the error object `e` that must be available for the error handler to be considered at all. Typically, the rest of the arguments are values. The error handler to be dropped if `e` does not compare equal to any of them. + +In particular, `match` works great with `std::error_code`. The following handler is designed to handle `ENOENT` errors: + + + +``` +[]( leaf::match ) +{ +} +``` + +This, however, requires C++17 or newer, because it is impossible to infer the type of the error enum (in this case, `std::errc`) from the specified type `std::error_code`, and C++11 does not allow `auto` template arguments. LEAF provides the following workaround, compatible with C++11: + + + +``` +[]( leaf::match, std::errc::no\_such\_file\_or\_directory> ) +{ +} +``` + +In addition, it is possible to select a handler based on `std::error_category`. The following handler will match any `std::error_code` of the `std::generic_category` (requires C++17 or newer): + + + +``` +[]( std::error\_code, leaf::category> ) +{ +} +``` + + + +| | | +| --- | --- | +| | +See [`match`](#match) for more examples. + | + +The following predicates are available: + +* [`match`](#match): as described above. +* [`match_value`](#match_value): where `match` compares the object `e` of type `E` with the values `V…​`, `match_value` compare `e.value` with the values `V…​`. +* [`match_member`](#match_member): similar to `match_value`, but takes a pointer to the data member to compare; that is, `match_member<&E::value, V…​>` is equvialent to `match_value`. Note, however, that `match_member` requires C++17 or newer, while `match_value` does not. +* `[catch\_](#catch_)`: Similar to `match`, but checks whether the caught `std::exception` object can be `dynamic_cast` to any of the `Ex` types. +* [`if_not`](#if_not) is a special predicate that takes any other predicate `Pred` and requires that an error object of type `E` is available and that `Pred` evaluates to `false`. For example, `if_not>` requires that an object `e` of type `E` is available, and that it does not compare equal to any of the specified `V…​`. + +Finally, the predicate system is easily extensible, see [Predicates](#predicates). + + + +| | | +| --- | --- | +| | +See also [Working with `std::error_code`, `std::error_condition`](#tutorial-std_error_code). + | + + +--- + +### Binding Error Handlers in a `std::tuple` +Consider this snippet: + + + +``` +leaf::try\_handle\_all( + [&] + { + return f(); // returns leaf::result + }, + + [](my\_error\_enum x) + { + ... + }, + + [](read\_file\_error\_enum y, e\_file\_name const & fn) + { + ... + }, + + [] + { + ... + }); +``` + +[`try_handle_all`](#try_handle_all) | [`e_file_name`](#e_file_name) + +Looks pretty simple, but what if we need to attempt a different set of operations yet use the same handlers? We could repeat the same thing with a different function passed as `TryBlock` for `try_handle_all`: + + + +``` +leaf::try\_handle\_all( + [&] + { + return g(); // returns leaf::result + }, + + [](my\_error\_enum x) + { + ... + }, + + [](read\_file\_error\_enum y, e\_file\_name const & fn) + { + ... + }, + + [] + { + ... + }); +``` + +That works, but it is better to bind our error handlers in a `std::tuple`: + + + +``` +auto error\_handlers = std::make\_tuple( + [](my\_error\_enum x) + { + ... + }, + + [](read\_file\_error\_enum y, e\_file\_name const & fn) + { + ... + }, + + [] + { + ... + }); +``` + +The `error_handlers` tuple can later be used with any error handling function: + + + +``` +leaf::try\_handle\_all( + [&] + { + // Operations which may fail **(1)** + }, + + error\_handlers ); + +leaf::try\_handle\_all( + [&] + { + // Different operations which may fail **(2)** + }, + + error\_handlers ); **(3)** +``` + +[`try_handle_all`](#try_handle_all) | [`error_info`](#error_info) + + + +| | | +| --- | --- | +| **1** | One set of operations which may fail…​ | +| **2** | A different set of operations which may fail…​ | +| **3** | …​ both using the same `error_handlers`. | + +Error-handling functions accept a `std::tuple` of error handlers in place of any error handler. The behavior is as if the tuple is unwrapped in-place. + + +--- + +### Transporting Error Objects Between Threads +Error objects are stored on the stack in an instance of the [`context`](#context) class template in the scope of e.g. [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) functions. When using concurrency, we need a mechanism to collect error objects in one thread, then use them to handle errors in another thread. + +LEAF offers two interfaces for this purpose, one using `result`, and another designed for programs that use exception handling. + +#### Using `result` +Let’s assume we have a `task` that we want to launch asynchronously, which produces a `task_result` but could also fail: + + + +``` +leaf::result task(); +``` + +Because the task will run asynchronously, in case of a failure we need it to capture the relevant error objects but not handle errors. To this end, in the main thread we bind our error handlers in a `std::tuple`, which we will later use to handle errors from each completed asynchronous task (see [tutorial](#tutorial-binding_handlers)): + + + +``` +auto error\_handlers = std::make\_tuple( + [](E1 e1, E2 e2) + { + //Deal with E1, E2 + .... + return { }; + }, + + [](E3 e3) + { + //Deal with E3 + .... + return { }; + } ); +``` + +Why did we start with this step? Because we need to create a [`context`](#context) object to collect the error objects we need. We could just instantiate the `context` template with `E1`, `E2` and `E3`, but that would be prone to errors, since it could get out of sync with the handlers we use. Thankfully LEAF can deduce the types we need automatically, we just need to show it our `error_handlers`: + + + +``` +std::shared\_ptr ctx = leaf::make\_shared\_context(error\_handlers); +``` + +The `polymorphic_context` type is an abstract base class that has the same members as any instance of the `context` class template, allowing us to erase its exact type. In this case what we’re holding in `ctx` is a `context`, where `E1`, `E2` and `E3` were deduced automatically from the `error_handlers` tuple we passed to `make_shared_context`. + +We’re now ready to launch our asynchronous task: + + + +``` +std::future> launch\_task() noexcept +{ + return std::async( + std::launch::async, + [&] + { + std::shared\_ptr ctx = leaf::make\_shared\_context(error\_handlers); + return leaf::capture(ctx, &task); + } ); +} +``` + +[`result`](#result) | [`make_shared_context`](#make_shared_context) | [`capture`](#capture) + +That’s it! Later when we `get` the `std::future`, we can process the returned `result` in a call to [`try_handle_some`](#try_handle_some), using the `error_handlers` tuple we created earlier: + + + +``` +//std::future> fut; +fut.wait(); + +return leaf::try\_handle\_some( + + [&]() -> leaf::result + { + BOOST\_LEAF\_AUTO(r, fut.get()); + //Success! + return { } + }, + + error\_handlers ); +``` + +[`try_handle_some`](#try_handle_some) | [`result`](#result) | [`AUTO`](#BOOST_LEAF_AUTO) + +The reason this works is that in case it communicates a failure, `leaf::result` is able to hold a `shared_ptr` object. That is why earlier instead of calling `task()` directly, we called `leaf::capture`: it calls the passed function and, in case that fails, it stores the `shared_ptr` we created in the returned `result`, which now doesn’t just communicate the fact that an error has occurred, but also holds the `context` object that `try_handle_some` needs in order to supply a suitable handler with arguments. + + + +| | | +| --- | --- | +| | +Follow this link to see a complete example program: [capture\_in\_result.cpp](https://github.com/boostorg/leaf/blob/master/example/capture_in_result.cpp?ts=4). + | + + +--- + +#### Using Exception Handling +Let’s assume we have an asynchronous `task` which produces a `task_result` but could also throw: + + + +``` +task\_result task(); +``` + +Just like we saw in [Using `result`](#tutorial-async_result), first we will bind our error handlers in a `std::tuple`: + + + +``` +auto handle\_errors = std::make\_tuple( +{ + [](E1 e1, E2 e2) + { + //Deal with E1, E2 + .... + return { }; + }, + + [](E3 e3) + { + //Deal with E3 + .... + return { }; + } ); +``` + +Launching the task looks the same as before, except that we don’t use `result`: + + + +``` +std::future launch\_task() +{ + return std::async( + std::launch::async, + [&] + { + std::shared\_ptr ctx = leaf::make\_shared\_context(&handle\_error); + return leaf::capture(ctx, &task); + } ); +} +``` + +[`make_shared_context`](#make_shared_context) | [`capture`](#capture) + +That’s it! Later when we `get` the `std::future`, we can process the returned `task_result` in a call to [`try_catch`](#try_catch), using the `error_handlers` we saved earlier, as if it was generated locally: + + + +``` +//std::future fut; +fut.wait(); + +return leaf::try\_catch( + + [&] + { + task\_result r = fut.get(); // Throws on error + //Success! + }, + + error\_handlers ); +``` + +[`try_catch`](#try_catch) + +This works similarly to using `result`, except that the `std::shared_ptr` is transported in an exception object (of unspecified type which [`try_catch`](#try_catch) recognizes and then automatically unwraps the original exception). + + + +| | | +| --- | --- | +| | +Follow this link to see a complete example program: [capture\_in\_exception.cpp](https://github.com/boostorg/leaf/blob/master/example/capture_in_exception.cpp?ts=4). + | + + +--- + + +### Classification of Failures +It is common for any given interface to define an `enum` that lists all possible error codes that the API reports. The benefit of this approach is that the list is complete and usually contains comments, so we know where to go for reference. + +The disadvantage of such flat enums is that they do not support handling a whole class of failures. Consider this error handler from the [introduction section](#introduction-result): + + + +``` +.... +[](leaf::match, leaf::e\_errno const \* errn, leaf::e\_file\_name const & fn) +{ + std::cerr << "Failed to access " << fn.value; + if( errn ) + std::cerr << ", errno=" << \*errn; + std::cerr << std::endl; + return 3; +}, +.... +``` + +It will get called if the value of the `error_code` enum communicated with the failure is one of `size_error`, `read_error` or `eof_error`. In short, the idea is to handle any input error. + +But what if later we add support for detecting and reporting a new type of input error, e.g. `permissions_error`? It is easy to add that to our `error_code` enum; but now our input error handler won’t recognize this new input error — and we have a bug. + +If we can use exceptions, the situation is better because exception types can be organized in a hierarchy in order to classify failures: + + + +``` +struct input\_error: std::exception { }; +struct read\_error: input\_error { }; +struct size\_error: input\_error { }; +struct eof\_error: input\_error { }; +``` + +In terms of LEAF, our input error exception handler now looks like this: + + + +``` +[](input\_error &, leaf::e\_errno const \* errn, leaf::e\_file\_name const & fn) +{ + std::cerr << "Failed to access " << fn.value; + if( errn ) + std::cerr << ", errno=" << \*errn; + std::cerr << std::endl; + return 3; +}, +``` + +This is future-proof, but still not ideal, because it is not possible to refine the classification of the failure after the exception object has been thrown. + +LEAF supports a novel style of error handling where the classification of failures does not use error code values or exception type hierarchies. If we go back to the introduction section, instead of defining: + + + +``` +enum error\_code +{ + .... + read\_error, + size\_error, + eof\_error, + .... +}; +``` + +We could define: + + + +``` +.... +struct input\_error { }; +struct read\_error { }; +struct size\_error { }; +struct eof\_error { }; +.... +``` + +With this in place, `file_read` from the [print\_file\_result.cpp](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_result.cpp?ts=4) example can be rewritten like this: + + + +``` +leaf::result file\_read( FILE & f, void \* buf, int size ) +{ + int n = fread(buf, 1, size, &f); + + if( ferror(&f) ) + return leaf::new\_error(input\_error{}, read\_error{}, leaf::e\_errno{errno}); **(1)** + + if( n!=size ) + return leaf::new\_error(input\_error{}, eof\_error{}); **(2)** + + return { }; +} +``` + +[`result`](#result) | [`new_error`](#new_error) | [`e_errno`](#e_errno) + + + +| | | +| --- | --- | +| **1** | This error is classified as `input_error` and `read_error`. | +| **2** | This error is classified as `input_error` and `eof_error`. | + +Or, even better: + + + +``` +leaf::result file\_read( FILE & f, void \* buf, int size ) +{ + auto load = leaf::on\_error(input\_error{}); **(1)** + + int n = fread(buf, 1, size, &f); + + if( ferror(&f) ) + return leaf::new\_error(read\_error{}, leaf::e\_errno{errno}); **(2)** + + if( n!=size ) + return leaf::new\_error(eof\_error{}); **(3)** + + return { }; +} +``` + +[`result`](#result) | [`on_error`](#on_error) | [`new_error`](#new_error) | [`e_errno`](#e_errno) + + + +| | | +| --- | --- | +| **1** | Any error escaping this scope will be classified as `input_error` | +| **2** | In addition, this error is classified as `read_error`. | +| **3** | In addition, this error is classified as `eof_error`. | + +This technique works just as well if we choose to use exception handling: + + + +``` +void file\_read( FILE & f, void \* buf, int size ) +{ + auto load = leaf::on\_error(input\_error{}); + + int n = fread(buf, 1, size, &f); + + if( ferror(&f) ) + throw leaf::exception(read\_error{}, leaf::e\_errno{errno}); + + if( n!=size ) + throw leaf::exception(eof\_error{}); +} +``` + +[`on_error`](#on_error) | [`exception`](#exception) | [`e_errno`](#e_errno) + + + +| | | +| --- | --- | +| | +If the type of the first argument passed to `leaf::exception` derives from `std::exception`, it will be used to initialize the returned exception object taken by `throw`. Here this is not the case, so the function returns a default-initialized `std::exception` object, while the first (and any other) argument is associated with the failure. + | + +And now we can write a future-proof handler that can handle any `input_error`: + + + +``` +.... +[](input\_error, leaf::e\_errno const \* errn, leaf::e\_file\_name const & fn) +{ + std::cerr << "Failed to access " << fn.value; + if( errn ) + std::cerr << ", errno=" << \*errn; + std::cerr << std::endl; + return 3; +}, +.... +``` + +Remarkably, because the classification of the failure does not depend on error codes or on exception types, this error handler can be used with `try_catch` if we use exception handling, or with `try_handle_some`/`try_handle_all` if we do not. Here is the complete example from the introduction section, rewritten to use this technique: + +* [print\_file\_result\_error\_tags.cpp](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_result_error_tags.cpp?ts=4) (using `leaf::result`). +* [print\_file\_eh\_error\_tags.cpp](https://github.com/boostorg/leaf/blob/master/example/print_file/print_file_eh_error_tags.cpp?ts=4) (using exception handling). + + +--- + +### Converting Exceptions to `result` +It is sometimes necessary to catch exceptions thrown by a lower-level library function, and report the error through different means, to a higher-level library which may not use exception handling. + + + +| | | +| --- | --- | +| | +Understand that error handlers that take arguments of types that derive from `std::exception` work correctly — regardless of whether the error object itself is thrown as an exception, or [loaded](#tutorial-loading) into a [`context`](#context). The technique described here is only needed when the exception must be communicated through functions which are not exception-safe, or are compiled with exception-handling disabled. + | + +Suppose we have an exception type hierarchy and a function `compute_answer_throws`: + + + +``` +class error\_base: public std::exception { }; +class error\_a: public error\_base { }; +class error\_b: public error\_base { }; +class error\_c: public error\_base { }; + +int compute\_answer\_throws() +{ + switch( rand()%4 ) + { + default: return 42; + case 1: throw error\_a(); + case 2: throw error\_b(); + case 3: throw error\_c(); + } +} +``` + +We can write a simple wrapper using `exception_to_result`, which calls `compute_answer_throws` and switches to `result` for error handling: + + + +``` +leaf::result compute\_answer() noexcept +{ + return leaf::exception\_to\_result( + [] + { + return compute\_answer\_throws(); + } ); +} +``` + +[`result`](#result) | [`exception_to_result`](#exception_to_result) + +The `exception_to_result` template takes any number of exception types. All exception types thrown by the passed function are caught, and an attempt is made to convert the exception object to each of the specified types. Each successfully-converted slice of the caught exception object, as well as the return value of `std::current_exception`, are copied and [loaded](#tutorial-loading), and in the end the exception is converted to a `[result](#result)` object. + +(In our example, `error_a` and `error_b` slices as communicated as error objects, but `error_c` exceptions will still be captured by `std::exception_ptr`). + +Here is a simple function which prints successfully computed answers, forwarding any error (originally reported by throwing an exception) to its caller: + + + +``` +leaf::result print\_answer() noexcept +{ + BOOST\_LEAF\_AUTO(answer, compute\_answer()); + std::cout << "Answer: " << answer << std::endl; + return { }; +} +``` + +[`result`](#result) | [`AUTO`](#BOOST_LEAF_AUTO) + +Finally, here is a scope that handles the errors — it will work correctly regardless of whether `error_a` and `error_b` objects are thrown as exceptions or not. + + + +``` +leaf::try\_handle\_all( + []() -> leaf::result + { + BOOST\_LEAF\_CHECK(print\_answer()); + return { }; + }, + + [](error\_a const & e) + { + std::cerr << "Error A!" << std::endl; + }, + + [](error\_b const & e) + { + std::cerr << "Error B!" << std::endl; + }, + + [] + { + std::cerr << "Unknown error!" << std::endl; + } ); +``` + +[`try_handle_all`](#try_handle_all) | [`result`](#result) | [`CHECK`](#BOOST_LEAF_CHECK) + + + +| | | +| --- | --- | +| | +The complete program illustrating this technique is available [here](https://github.com/boostorg/leaf/blob/master/example/exception_to_result.cpp?ts=4). + | + + +--- + +### Using `error_monitor` to Report Arbitrary Errors from C-callbacks +Communicating information pertaining to a failure detected in a C callback is tricky, because C callbacks are limited to a specific static signature, which may not use C++ types. + +LEAF makes this easy. As an example, we’ll write a program that uses Lua and reports a failure from a C++ function registered as a C callback, called from a Lua program. The failure will be propagated from C++, through the Lua interpreter (written in C), back to the C++ function which called it. + +C/C++ functions designed to be invoked from a Lua program must use the following signature: + + + +``` +int do\_work( lua\_State \* L ) ; +``` + +Arguments are passed on the Lua stack (which is accessible through `L`). Results too are pushed onto the Lua stack. + +First, let’s initialize the Lua interpreter and register `do_work` as a C callback, available for Lua programs to call: + + + +``` +std::shared\_ptr init\_lua\_state() noexcept +{ + std::shared\_ptr L(lua\_open(), &lua\_close); **(1)** + + lua\_register(&\*L, "do\_work", &do\_work); **(2)** + + luaL\_dostring(&\*L, "\ **(3)** +\n function call\_do\_work()\ +\n return do\_work()\ +\n end"); + + return L; +} +``` + + + +| | | +| --- | --- | +| **1** | Create a new `lua_State`. We’ll use `std::shared_ptr` for automatic cleanup. | +| **2** | Register the `do_work` C++ function as a C callback, under the global name `do_work`. With this, calls from Lua programs to `do_work` will land in the `do_work` C++ function. | +| **3** | Pass some Lua code as a `C` string literal to Lua. This creates a global Lua function called `call_do_work`, which we will later ask Lua to execute. | + +Next, let’s define our `enum` used to communicate `do_work` failures: + + + +``` +enum do\_work\_error\_code +{ + ec1=1, + ec2 +}; +``` + +We’re now ready to define the `do_work` callback function: + + + +``` +int do\_work( lua\_State \* L ) noexcept +{ + bool success = rand()%2; **(1)** + if( success ) + { + lua\_pushnumber(L, 42); **(2)** + return 1; + } + else + { + leaf::new\_error(ec1); **(3)** + return luaL\_error(L, "do\_work\_error"); **(4)** + } +} +``` + +[`new_error`](#new_error) | [`load`](#error_id::load) + + + +| | | +| --- | --- | +| **1** | "Sometimes" `do_work` fails. | +| **2** | In case of success, push the result on the Lua stack, return back to Lua. | +| **3** | Generate a new `error_id` and associate a `do_work_error_code` with it. Normally, we’d return this in a `leaf::result`, but the `do_work` function signature (required by Lua) does not permit this. | +| **4** | Tell the Lua interpreter to abort the Lua program. | + +Now we’ll write the function that calls the Lua interpreter to execute the Lua function `call_do_work`, which in turn calls `do_work`. We’ll return `[result](#result)`, so that our caller can get the answer in case of success, or an error: + + + +``` +leaf::result call\_lua( lua\_State \* L ) +{ + lua\_getfield(L, LUA\_GLOBALSINDEX, "call\_do\_work"); + + error\_monitor cur\_err; + if( int err=lua\_pcall(L, 0, 1, 0) ) **(1)** + { + auto load = leaf::on\_error(e\_lua\_error\_message{lua\_tostring(L,1)}); **(2)** + lua\_pop(L,1); + + return cur\_err.assigned\_error\_id().load(e\_lua\_pcall\_error{err}); **(3)** + } + else + { + int answer = lua\_tonumber(L, -1); **(4)** + lua\_pop(L, 1); + return answer; + } +} +``` + +[`result`](#result) | [`on_error`](#on_error) | [`error_monitor`](#error_monitor) + + + +| | | +| --- | --- | +| **1** | Ask the Lua interpreter to call the global Lua function `call_do_work`. | +| **2** | `on_error` works as usual. | +| **3** | `load` will use the `error_id` generated in our Lua callback. This is the same `error_id` the `on_error` uses as well. | +| **4** | Success! Just return the `int` answer. | + +Finally, here is the `main` function which exercises `call_lua`, each time handling any failure: + + + +``` +int main() noexcept +{ + std::shared\_ptr L=init\_lua\_state(); + + for( int i=0; i!=10; ++i ) + { + leaf::try\_handle\_all( + + [&]() -> leaf::result + { + BOOST\_LEAF\_AUTO(answer, call\_lua(&\*L)); + std::cout << "do\_work succeeded, answer=" << answer << '\n'; **(1)** + return { }; + }, + + [](do\_work\_error\_code e) **(2)** + { + std::cout << "Got do\_work\_error\_code = " << e << "!\n"; + }, + + [](e\_lua\_pcall\_error const & err, e\_lua\_error\_message const & msg) **(3)** + { + std::cout << "Got e\_lua\_pcall\_error, Lua error code = " << err.value << ", " << msg.value << "\n"; + }, + + [](leaf::error\_info const & unmatched) + { + std::cerr << + "Unknown failure detected" << std::endl << + "Cryptic diagnostic information follows" << std::endl << + unmatched; + } ); + } +``` + +[`try_handle_all`](#try_handle_all) | [`result`](#result) | [`AUTO`](#BOOST_LEAF_AUTO) | [`error_info`](#error_info) + + + +| | | +| --- | --- | +| **1** | If the call to `call_lua` succeeded, just print the answer. | +| **2** | Handle `do_work` failures. | +| **3** | Handle all other `lua_pcall` failures. | + + + +| | | +| --- | --- | +| | +Follow this link to see the complete program: [lua\_callback\_result.cpp](https://github.com/boostorg/leaf/blob/master/example/lua_callback_result.cpp?ts=4). + | + + + +| | | +| --- | --- | +| | +When using Lua with C++, we need to protect the Lua interpreter from exceptions that may be thrown from C++ functions installed as `lua_CFunction` callbacks. Here is the program from this section rewritten to use a C++ exception to safely communicate errors out of the `do_work` function: [lua\_callback\_eh.cpp](https://github.com/boostorg/leaf/blob/master/example/lua_callback_eh.cpp?ts=4). + | + + +--- + +### Diagnostic Information +LEAF is able to automatically generate diagnostic messages that include information about all error objects available to error handlers. For this purpose, it needs to be able to print objects of user-defined error types. + +To do this, LEAF attempts to bind an unqualified call to `operator<<`, passing a `std::ostream` and the error object. If that fails, it will also attempt to bind `operator<<` that takes the `.value` of the error type. If that also doesn’t compile, the error object value will not appear in diagnostic messages, though LEAF will still print its type. + +Even with error types that define a printable `.value`, the user may still want to overload `operator<<` for the enclosing `struct`, e.g.: + + + +``` +struct e\_errno +{ + int value; + + friend std::ostream & operator<<( std::ostream & os, e\_errno const & e ) + { + return os << "errno = " << e.value << ", \"" << strerror(e.value) << '"'; + } +}; +``` + +The `e_errno` type above is designed to hold `errno` values. The defined `operator<<` overload will automatically include the output from `strerror` when `e_errno` values are printed (LEAF defines `e_errno` in ``, together with other commonly-used error types). + + + +| | | +| --- | --- | +| | +The automatically-generated diagnostic messages are developer-friendly, but not user-friendly. Therefore, `operator<<` overloads for error types should only print technical information in English, and should not attempt to localize strings or to format a user-friendly message; this should be done in error-handling functions specifically designed for that purpose. + | + + +--- + +### Working with `std::error_code`, `std::error_condition` +#### Introduction +The relationship between `std::error_code` and `std::error_condition` is not easily understood from reading the standard specifications. This section explains how they’re supposed to be used, and how LEAF interacts with them. + +The idea behind `std::error_code` is to encode both an integer value representing an error code, as well as the domain of that value. The domain is represented by a `std::error_category` reference. Conceptually, a `std::error_code` is like a `pair`. + +Let’s say we have this `enum`: + + + +``` +enum class libfoo\_error +{ + e1 = 1, + e2, + e3 +}; +``` + +We want to be able to transport `libfoo_error` values in `std::error_code` objects. This erases their static type, which enables them to travel freely across API boundaries. To this end, we must define a `std::error_category` that represents our `libfoo_error` type: + + + +``` +std::error\_category const & libfoo\_error\_category() +{ + struct category: std::error\_category + { + char const \* name() const noexcept override + { + return "libfoo"; + } + + std::string message(int code) const override + { + switch( libfoo\_error(code) ) + { + case libfoo\_error::e1: return "e1"; + case libfoo\_error::e2: return "e2"; + case libfoo\_error::e3: return "e3"; + default: return "error"; + } + } + }; + + static category c; + return c; +} +``` + +We also need to inform the standard library that `libfoo_error` is compatible with `std::error_code`, and provide a factory function which can be used to make `std::error_code` objects out of `libfoo_error` values: + + + +``` +namespace std +{ + template <> + struct is\_error\_code\_enum: std::true\_type + { + }; +} + +std::error\_code make\_error\_code(libfoo\_error e) +{ + return std::error\_code(int(e), libfoo\_error\_category()); +} +``` + +With this in place, if we receive a `std::error_code`, we can easily check if it represents some of the `libfoo_error` values we’re interested in: + + + +``` +std::error\_code f(); + +.... +auto ec = f(); +if( ec == libfoo\_error::e1 || ec == libfoo\_error::e2 ) +{ + // We got either a libfoo\_error::e1 or a libfoo\_error::e2 +} +``` + +This works because the standard library detects that `std::is_error_code_enum::value` is `true`, and then uses `make_error_code` to create a `std::error_code` object it actually uses to compare to `ec`. + +So far so good, but remember, the standard library defines another type also, `std::error_condition`. The first confusing thing is that in terms of its physical representation, `std::error_condition` is identical to `std::error_code`; that is, it is also like a pair of `std::error_category` reference and an `int`. Why do we need two different types which use identical physical representation? + +The key to answering this question is to understand that `std::error_code` objects are designed to be returned from functions to indicate failures. In contrast, `std::error_condition` objects are never supposed to be communicated; their purpose is to interpret the `std::error_code` values being communicated. The idea is that in a given program there may be multiple different "physical" (maybe platform-specific) `std::error_code` values which all indicate the same "logical" `std::error_condition`. + +This leads us to the second confusing thing about `std::error_condition`: it uses the same `std::error_category` type, but for a completely different purpose: to specify what `std::error_code` values are equivalent to what `std::error_condition` values. + +Let’s say that in addition to `libfoo`, our program uses another library, `libbar`, which communicates failures in terms of `std::error_code` with a different error category. Perhaps `libbar_error` looks like this: + + + +``` +enum class libbar\_error +{ + e1 = 1, + e2, + e3, + e4 +}; + +// Boilerplate omitted: +// - libbar\_error\_category() +// - specialization of std::is\_error\_code\_enum +// - make\_error\_code factory function for libbar\_error. +``` + +We can now use `std::error_condition` to define the *logical* error conditions represented by the `std::error_code` values communicated by `libfoo` and `libbar`: + + + +``` +enum class my\_error\_condition **(1)** +{ + c1 = 1, + c2 +}; + +std::error\_category const & libfoo\_error\_category() **(2)** +{ + struct category: std::error\_category + { + char const \* name() const noexcept override + { + return "my\_error\_condition"; + } + + std::string message(int cond) const override + { + switch( my\_error\_condition(code) ) + { + case my\_error\_condition::c1: return "c1"; + case my\_error\_condition::c2: return "c2"; + default: return "error"; + } + } + + bool equivalent(std::error\_code const & code, int cond) const noexcept + { + switch( my\_error\_condition(cond) ) + { + case my\_error\_condition::c1: **(3)** + return + code == libfoo\_error::e1 || + code == libbar\_error::e3 || + code == libbar\_error::e4; + case my\_error\_condition::c2: **(4)** + return + code == libfoo\_error::e2 || + code == libbar\_error::e1 || + code == libbar\_error::e2; + default: + return false; + } + } + }; + + static category c; + return c; +} + +namespace std +{ + template <> **(5)** + class is\_error\_condition\_enum: std::true\_type + { + }; +} + +std::error\_condition make\_error\_condition(my\_error\_condition e) **(6)** +{ + return std::error\_condition(int(e), my\_error\_condition\_error\_category()); +} +``` + + + +| | | +| --- | --- | +| **1** | Enumeration of the two logical error conditions, `c1` and `c2`. | +| **2** | Define the `std::error_category` for `std::error_condition` objects that represent a `my_error_condition`. | +| **3** | Here we specify that any of `libfoo:error::e1`, `libbar_error::e3` and `libbar_error::e4` are logically equivalent to `my_error_condition::c1`, and that…​ | +| **4** | …​any of `libfoo:error::e2`, `libbar_error::e1` and `libbar_error::e2` are logically equivalent to `my_error_condition::c2`. | +| **5** | This specialization tells the standard library that the `my_error_condition` enum is designed to be used with `std::error_condition`. | +| **6** | The factory function to make `std::error_condition` objects out of `my_error_condition` values. | + +Phew! + +Now, if we have a `std::error_code` object `ec`, we can easily check if it is equivalent to `my_error_condition::c1` like so: + + + +``` +if( ec == my\_error\_condition::c1 ) +{ + // We have a c1 in our hands +} +``` + +Again, remember that beyond defining the `std::error_category` for `std::error_condition` objects initialized with a `my_error_condition` value, we don’t need to interact with the actual `std::error_condition` instances: they’re created when needed to compare to a `std::error_code`, and that’s pretty much all they’re good for. + + +#### Support in LEAF +The following support for `std::error_code` and `std::error_condition` is available: + +* The [`match`](#match) template can be used as an argument to a LEAF error handler, so it can be considered based on the value of a communicated `std::error_code`. + + +| | | +| --- | --- | +| | +See [`match`](#match) for examples. + | +* The [`error_id`](#error_id) type can be converted to a `std::error_code`; see [`to_error_code`](#error_id::to_error_code). The returned object encodes the state of the `error_id` without any loss of information. This is useful if an `error_id` needs to be communicated through interfaces that support `std::error_code` but do not use LEAF. +* The `error_id` type can be implicitly initialized with a `std::error_code`. If the `std::error_code` was created using `to_error_code`, the original `error_id` state is restored. Otherwise, the `std::error_code` is [loaded](#tutorial-loading) so it can be used by LEAF error handlers, while the `error_id` itself is initialized by [`new_error`](#new_error). +* The `leaf::result` type can be implicitly initialized with an `error_id`, which means that it can be implicitly initialized with a `std::error_code`. + + +--- + + +### Boost Exception Integration +Instead of the [`boost::get_error_info`](https://www.boost.org/doc/libs/release/libs/exception/doc/get_error_info.html) API defined by Boost Exception, it is possible to use LEAF error handlers directly. Consider the following use of `boost::get_error_info`: + + + +``` +typedef boost::error\_info my\_info; + +void f(); // Throws using boost::throw\_exception + +void g() +{ + try + { + f(); + }, + catch( boost::exception & e ) + { + if( int const \* x = boost::get\_error\_info(e) ) + std::cerr << "Got my\_info with value = " << \*x; + } ); +} +``` + +We can rewrite `g` to access `my_info` using LEAF: + + + +``` +#include + +void g() +{ + leaf::try\_catch( + [] + { + f(); + }, + + []( my\_info x ) + { + std::cerr << "Got my\_info with value = " << x.value(); + } ); +} +``` + +[`try_catch`](#try_catch) + +Taking `my_info` means that the handler will only be selected if the caught exception object carries `my_info` (which LEAF accesses via `boost::get_error_info`). + +The use of [`match`](#match) is also supported: + + + +``` +void g() +{ + leaf::try\_catch( + [] + { + f(); + }, + + []( leaf::match\_value ) + { + std::cerr << "Got my\_info with value = 42"; + } ); +} +``` + +Above, the handler will be selected if the caught exception object carries `my_info` with `.value()` equal to 42. + +Examples +-------- + +See [github](https://github.com/boostorg/leaf/tree/master/example). + + + +Synopsis +-------- + +This section lists each public header file in LEAF, documenting the definitions it provides. + +LEAF headers are designed to minimize coupling: + +* Headers needed to report or forward but not handle errors are lighter than headers providing error-handling functionality. +* Headers that provide exception handling or throwing functionality are separate from headers that provide error-handling or reporting but do not use exceptions. + +A standalone single-header option is available; please `#include `. + + +--- +### Error Reporting +#### `error.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + class error\_id + { + public: + + error\_id() noexcept; + + template + error\_id( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + error\_id( std::error\_code const & ec ) noexcept; + + int value() const noexcept; + explicit operator bool() const noexcept; + + std::error\_code to\_error\_code() const noexept; + + friend bool operator==( error\_id a, error\_id b ) noexcept; + friend bool operator!=( error\_id a, error\_id b ) noexcept; + friend bool operator<( error\_id a, error\_id b ) noexcept; + + template + error\_id load( Item && ... item ) const noexcept; + + friend std::ostream & operator<<( std::ostream & os, error\_id x ); + }; + + bool is\_error\_id( std::error\_code const & ec ) noexcept; + + template + error\_id new\_error( Item && ... item ) noexcept; + + error\_id current\_error() noexcept; + + ////////////////////////////////////////// + + class polymorphic\_context + { + protected: + + polymorphic\_context() noexcept = default; + ~polymorphic\_context() noexcept = default; + + public: + + virtual void activate() noexcept = 0; + virtual void deactivate() noexcept = 0; + virtual bool is\_active() const noexcept = 0; + + virtual void propagate() noexcept = 0; + + virtual void print( std::ostream & ) const = 0; + }; + + ////////////////////////////////////////// + + template + class context\_activator + { + context\_activator( context\_activator const & ) = delete; + context\_activator & operator=( context\_activator const & ) = delete; + + public: + + explicit context\_activator( Ctx & ctx ) noexcept; + context\_activator( context\_activator && ) noexcept; + ~context\_activator() noexcept; + }; + + template + context\_activator activate\_context( Ctx & ctx ) noexcept; + + template + struct is\_result\_type: std::false\_type + { + }; + + template + struct is\_result\_type: is\_result\_type + { + }; + +} } + +#define BOOST\_LEAF\_ASSIGN(v, r)\ + auto && <> = r;\ + if( !<> )\ + return <>.error();\ + v = std::forward>)>(<>).value() + +#define BOOST\_LEAF\_AUTO(v, r)\ + BOOST\_LEAF\_ASSIGN(auto v, r) + +#define BOOST\_LEAF\_CHECK(r)\ + auto && <> = r;\ + if( <> )\ + ;\ + else\ + return <>.error() + +#define BOOST\_LEAF\_NEW\_ERROR <> ::boost::leaf::new\_error +``` + +Reference: [`error_id`](#error_id) | [`is_error_id`](#is_error_id) | [`new_error`](#new_error) | [`current_error`](#current_error) | [`polymorphic_context`](#polymorphic_context) | [`context_activator`](#context_activator) | [`activate_context`](#activate_context) | [`is_result_type`](#is_result_type) | [`ASSIGN`](#BOOST_LEAF_ASSIGN) | [`AUTO`](#BOOST_LEAF_AUTO) | [`CHECK`](#BOOST_LEAF_CHECK) | [`NEW_ERROR`](#BOOST_LEAF_NEW_ERROR) + +#### `common.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + struct e\_api\_function { char const \* value; }; + + struct e\_file\_name { std::string value; }; + + struct e\_type\_info\_name { char const \* value; }; + + struct e\_at\_line { int value; }; + + struct e\_errno + { + int value; + friend std::ostream & operator<<( std::ostream &, e\_errno const & ); + }; + + namespace windows + { + struct e\_LastError + { + unsigned value; + friend std::ostream & operator<<( std::ostream &, e\_LastError const & ); + }; + } + +} } +``` + +Reference: [`e_api_function`](#e_api_function) | [`e_file_name`](#e_file_name) | [`e_at_line`](#e_at_line) | [`e_type_info_name`](#e_type_info_name) | [`e_source_location`](#e_source_location) | [`e_errno`](#e_errno) | [`e_LastError`](#e_LastError) + +#### `result.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + class result + { + public: + + result() noexcept; + result( T && v ) noexcept; + result( T const & v ); + + template + result( U && u, <> ); + + result( error\_id err ) noexcept; + result( std::shared\_ptr && ctx ) noexcept; + + template + result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + result( std::error\_code const & ec ) noexcept; + + result( result && r ) noexcept; + + template + result( result && r ) noexcept; + + result & operator=( result && r ) noexcept; + + template + result & operator=( result && r ) noexcept; + + explicit operator bool() const noexcept; + + T const & value() const; + T & value(); + + T const & operator\*() const; + T & operator\*(); + + T const \* operator->() const; + T \* operator->(); + + <> error() noexcept; + + template + error\_id load( Item && ... item ) noexcept; + }; + + template <> + class result + { + public: + + result() noexcept; + + result( error\_id err ) noexcept; + result( std::shared\_ptr && ctx ) noexcept; + + template + result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + result( std::error\_code const & ec ) noexcept; + + result( result && r ) noexcept; + + template + result( result && r ) noexcept; + + result & operator=( result && r ) noexcept; + + template + result & operator=( result && r ) noexcept; + + explicit operator bool() const noexcept; + + void value() const; + + <> error() noexcept; + + template + error\_id load( Item && ... item ) noexcept; + }; + + struct bad\_result: std::exception { }; + + template + struct is\_result\_type>: std::true\_type + { + }; + +} } +``` + +Reference: [`result`](#result) | [`is_result_type`](#is_result_type) + +#### `on_error.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + <> on\_error( Item && ... e ) noexcept; + + class error\_monitor + { + public: + + error\_monitor() noexcept; + + error\_id check() const noexcept; + error\_id assigned\_error\_id() const noexcept; + }; + +} } +``` + +Reference: [`on_error`](#on_error) | [`error_monitor`](#error_monitor) + +#### `exception.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template **(1)** + <> exception( Ex &&, E && ... ) noexcept; + + template **(2)** + <> exception( E1 &&, E && ... ) noexcept; + + <> exception() noexcept; + + template **(1)** + <> exception( error\_id id, Ex &&, E && ... ) noexcept; + + template **(2)** + <> exception( error\_id id, E1 &&, E && ... ) noexcept; + + <> exception( error\_id id ) noexcept; + +} } + +#define BOOST\_LEAF\_EXCEPTION <> ::boost::leaf::exception + +#define BOOST\_LEAF\_THROW\_EXCEPTION <> ::boost::leaf::exception +``` + +Reference: [`exception`](#exception) | [`EXCEPTION`](#BOOST_LEAF_EXCEPTION) | [`THROW_EXCEPTION`](#BOOST_LEAF_THROW_EXCEPTION) + + + +| | | +| --- | --- | +| **1** | Only enabled if std::is\_base\_of::value. | +| **2** | Only enabled if !std::is\_base\_of::value. | + +#### `capture.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + decltype(std::declval()(std::forward(std::declval())...)) + capture(std::shared\_ptr && ctx, F && f, A... a); + + template + <-deduced>> exception\_to\_result( F && f ) noexcept; + +} } +``` + +Reference: [`capture`](#capture) | [`exception_to_result`](#exception_to_result) + +--- + + +### Error Handling +#### `context.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + class context + { + context( context const & ) = delete; + context & operator=( context const & ) = delete; + + public: + + context() noexcept; + context( context && x ) noexcept; + ~context() noexcept; + + void activate() noexcept; + void deactivate() noexcept; + bool is\_active() const noexcept; + + void propagate () noexcept; + + void print( std::ostream & os ) const; + + template + R handle\_error( R &, H && ... ) const; + }; + + ////////////////////////////////////////// + + template + using context\_type\_from\_handlers = typename <>::type; + + template + BOOST\_LEAF\_CONSTEXPR context\_type\_from\_handlers make\_context() noexcept; + + template + BOOST\_LEAF\_CONSTEXPR context\_type\_from\_handlers make\_context( H && ... ) noexcept; + + template + context\_ptr make\_shared\_context() noexcept; + + template + context\_ptr make\_shared\_context( H && ... ) noexcept; + +} } +``` + +Reference: [`context`](#context) | [`context_type_from_handlers`](#context_type_from_handlers) | [`make_context`](#make_context) | [`make_shared_context`](#make_shared_context) + +#### `handle_errors.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + typename std::decay()().value())>::type + try\_handle\_all( TryBlock && try\_block, H && ... h ); + + template + typename std::decay()())>::type + try\_handle\_some( TryBlock && try\_block, H && ... h ); + + template + typename std::decay()())>::type + try\_catch( TryBlock && try\_block, H && ... h ); + + ////////////////////////////////////////// + + class error\_info + { + //No public constructors + + public: + + error\_id error() const noexcept; + + bool exception\_caught() const noexcept; + std::exception const \* exception() const noexcept; + + friend std::ostream & operator<<( std::ostream & os, error\_info const & x ); + }; + + class diagnostic\_info: public error\_info + { + //No public constructors + + friend std::ostream & operator<<( std::ostream & os, diagnostic\_info const & x ); + }; + + class verbose\_diagnostic\_info: public error\_info + { + //No public constructors + + friend std::ostream & operator<<( std::ostream & os, diagnostic\_info const & x ); + }; + +} } +``` + +Reference: [`try_handle_all`](#try_handle_all) | [`try_handle_some`](#try_handle_some) | [`try_catch`](#try_catch) | [`error_info`](#error_info) | [`diagnostic_info`](#diagnostic_info) | [`verbose_diagnostic_info`](#verbose_diagnostic_info) + +#### `pred.hpp` + + +#include + + +``` +namespace boost { namespace leaf { + + template + struct is\_predicate: std::false\_type + { + }; + + template + struct match + { + E matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + + template + struct match\_value + { + E matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + + template + struct match\_member; + + template + struct member + { + E matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + + template + struct catch\_ + { + std::exception const & matched; + + // Other members not specified + }; + + template + struct catch\_ + { + Ex const & matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + + template + struct if\_not + { + E matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + + template + bool category( std::error\_code const & ec ) noexcept; + + template + struct condition; + +} } +``` + +Reference: [`match`](#match) | [`match_value`](#match_value) | [`match_member`](#match_member) | [`catch_`](#catch_) | [`if_not`](#if_not) | [`category`](#category) | [`condition`](#condition) + + + + +Reference: Functions +-------------------- + + + +| | | +| --- | --- | +| | +The contents of each Reference section are organized alphabetically. + | + + +--- +### `activate_context` +#include + + +``` +namespace boost { namespace leaf { + + template + context\_activator activate\_context( Ctx & ctx ) noexcept + { + return context\_activator(ctx); + } + +} } +``` + +[`context_activator`](#context_activator) + +Example: + + +``` +leaf::context ctx; + +{ + auto active\_context = activate\_context(ctx); **(1)** +} **(2)** +``` + + + +| | | +| --- | --- | +| **1** | Activate `ctx`. | +| **2** | Automatically deactivate `ctx`. | + + +--- + +### `capture` +#include + + +``` +namespace boost { namespace leaf { + + template + decltype(std::declval()(std::forward(std::declval())...)) + capture(std::shared\_ptr && ctx, F && f, A... a); + +} } +``` + +[`polymorphic_context`](#polymorphic_context) + +This function can be used to capture error objects stored in a [`context`](#context) in one thread and transport them to a different thread for handling, either in a `[result](#result)` object or in an exception. + + +Returns: + +The same type returned by `F`. +Effects: + +Uses an internal [`context_activator`](#context_activator) to [`activate`](#context::activate) `*ctx`, then invokes `std::forward(f)(std::forward(a)…​)`. Then: + + +* If the returned value `r` is not a `result` type (see [`is_result_type`](#is_result_type)), it is forwarded to the caller. +* Otherwise: + + + If `!r`, the return value of `capture` is initialized with `ctx`; + + + + + + | | | + | --- | --- | + | | + An object of type `leaf::[result](#result)` can be initialized with a `std::shared_ptr`. + | + + otherwise, it is initialized with `r`. + + + +In case `f` throws, `capture` catches the exception in a `std::exception_ptr`, and throws a different exception of unspecified type that transports both the `std::exception_ptr` as well as `ctx`. This exception type is recognized by [`try_catch`](#try_catch), which automatically unpacks the original exception and propagates the contents of `*ctx` (presumably, in a different thread). + + + +| | | +| --- | --- | +| | +See also [Transporting Error Objects Between Threads](#tutorial-async) from the Tutorial. + | + + +--- + +### `context_type_from_handlers` +#include + + +``` +namespace boost { namespace leaf { + + template + using context\_type\_from\_handlers = typename <>::type; + +} } +``` + +Example: + + +``` +auto error\_handlers = std::make\_tuple( + [](e\_this const & a, e\_that const & b) + { + .... + }, + + [](leaf::diagnostic\_info const & info) + { + .... + }, + .... ); + +leaf::context\_type\_from\_handlers ctx; **(1)** +``` + + + +| | | +| --- | --- | +| **1** | `ctx` will be of type `context`, deduced automatically from the specified error handlers. | + + + +| | | +| --- | --- | +| | +Alternatively, a suitable context may be created by calling [`make_context`](#make_context), or allocated dynamically by calling [`make_shared_context`](#make_shared_context). + | + + +--- + +### `current_error` +#include + + +``` +namespace boost { namespace leaf { + + error\_id current\_error() noexcept; + +} } +``` + + +Returns: + +The `error_id` value returned the last time [`new_error`](#new_error) was invoked from the calling thread. + + +| | | +| --- | --- | +| | +See also [`on_error`](#on_error). + | + + +--- + +### `exception` +#include + + +``` +namespace boost { namespace leaf { + + template **(1)** + <> exception( Ex && ex, E && ... e ) noexcept; + + template **(2)** + <> exception( E1 && e1, E && ... e ) noexcept; + + <> exception() noexcept; **(3)** + + template **(4)** + <> exception( error\_id id, Ex && ex, E && ... e ) noexcept; + + template **(5)** + <> exception( error\_id id, E1 && e1, E && ... e ) noexcept; + + <> exception( error\_id id ) noexcept; **(6)** + +} } +``` + +The `exception` function is overloaded: it can be invoked with no arguments, or else there are several alternatives, selected using `std::enable_if` based on the type of the passed arguments: + + + +| | | +| --- | --- | +| **1** | Selected if the first argument is not of type `error_id` and is an exception object, that is, iff `Ex` derives publicly from `std::exception`. In this case the return value is of unspecified type which derives publicly from `Ex` **and** from class [`error_id`](#error_id), such that: + +* its `Ex` subobject is initialized by `std::forward(ex)`; +* its `error_id` subobject is initialized by `[new\_error](#new_error)(std::forward(e)…​`). + + + | +| **2** | Selected if the first argument is not of type `error_id` and is not an exception object. In this case the return value is of unspecified type which derives publicly from `std::exception` **and** from class `error_id`, such that: + +* its `std::exception` subobject is default-initialized; +* its `error_id` subobject is initialized by `[new\_error](#new_error)(std::forward(e1), std::forward(e)…​`). + + + | +| **3** | If the fuction is invoked without arguments, the return value is of unspecified type which derives publicly from `std::exception` **and** from class `error_id`, such that: + +* its `std::exception` subobject is default-initialized; +* its `error_id` subobject is initialized by `[new\_error](#new_error)()`. + + + | +| **4** | Selected if the first argument is of type `error_id` and the second argument is an exception object, that is, iff `Ex` derives publicly from `std::exception`. In this case the return value is of unspecified type which derives publicly from `Ex` **and** from class [`error_id`](#error_id), such that: + +* its `Ex` subobject is initialized by `std::forward(ex)`; +* its `error_id` subobject is initialized by `id.[`load`](#error_id::load)(std::forward(e)…​)`. + + + | +| **5** | Selected if the first argument is of type `error_id` and the second argument is not an exception object. In this case the return value is of unspecified type which derives publicly from `std::exception` **and** from class `error_id`, such that: + +* its `std::exception` subobject is default-initialized; +* its `error_id` subobject is initialized by `id.[`load`](#error_id::load)(std::forward(e1), std::forward(e)…​`). + + + | +| **6** | If `exception` is invoked with just an `error_id` object, the return value is of unspecified type which derives publicly from `std::exception` **and** from class `error_id`, such that: + +* its `std::exception` subobject is default-initialized; +* its `error_id` subobject is initialized by copying from `id`. + + + | + + + +| | | +| --- | --- | +| | +The first three overloads return an exception object that is associated with a new `error_id`. The second three overloads return an exception object that is associated with the specified `error_id`. + | + +Example 1: + + +``` +struct my\_exception: std::exception { }; + +throw leaf::exception(my\_exception{}); **(1)** +``` + + + +| | | +| --- | --- | +| **1** | Throws an exception of a type that derives from `error_id` and from `my_exception` (because `my_exception` derives from `std::exception`). | + +Example 2: + + +``` +enum class my\_error { e1=1, e2, e3 }; **(1)** + +throw leaf::exception(my\_error::e1); +``` + + + +| | | +| --- | --- | +| **1** | Throws an exception of a type that derives from `error_id` and from `std::exception` (because `my_error` does not derive from `std::exception`). | + + + +| | | +| --- | --- | +| | +To automatically capture `__FILE__`, `__LINE__` and `__FUNCTION__` with the returned object, use [`EXCEPTION`](#BOOST_LEAF_EXCEPTION) instead of `leaf::exception`. + | + + +--- + +### `exception_to_result` +#include + + +``` +namespace boost { namespace leaf { + + template + <-deduced>> exception\_to\_result( F && f ) noexcept; + +} } +``` + +This function can be used to catch exceptions from a lower-level library and convert them to `[result](#result)`. + + +Returns: + +Where `f` returns a type `T`, `exception_to_result` returns `leaf::result`. +Effects: + + +1. Catches all exceptions, then captures `std::current_exception` in a `std::exception_ptr` object, which is [loaded](#tutorial-loading) with the returned `result`. +2. Attempts to convert the caught exception, using `dynamic_cast`, to each type `Exi` in `Ex…​`. If the cast to `Exi` succeeds, the `Exi` slice of the caught exception is loaded with the returned `result`. + + + +| | | +| --- | --- | +| | +An error handler that takes an argument of an exception type (that is, of a type that derives from `std::exception`) will work correctly whether the object is thrown as an exception or communicated via [`new_error`](#new_error) (or converted using `exception_to_result`). + | + +Example: + + +``` +int compute\_answer\_throws(); + +//Call compute\_answer, convert exceptions to result +leaf::result compute\_answer() +{ + return leaf::exception\_to\_result(compute\_answer\_throws()); +} +``` + +At a later time we can invoke [`try_handle_some`](#try_handle_some) / [`try_handle_all`](#try_handle_all) as usual, passing handlers that take `ex_type1` or `ex_type2`, for example by reference: + + + +``` +return leaf::try\_handle\_some( + + [] -> leaf::result + { + BOOST\_LEAF\_AUTO(answer, compute\_answer()); + //Use answer + .... + return { }; + }, + + [](ex\_type1 & ex1) + { + //Handle ex\_type1 + .... + return { }; + }, + + [](ex\_type2 & ex2) + { + //Handle ex\_type2 + .... + return { }; + }, + + [](std::exception\_ptr const & p) + { + //Handle any other exception from compute\_answer. + .... + return { }; + } ); +``` + +[`try_handle_some`](#try_handle_some) | [`result`](#result) | [`AUTO`](#BOOST_LEAF_AUTO) + + + +| | | +| --- | --- | +| | +When a handler takes an argument of an exception type (that is, a type that derives from `std::exception`), if the object is thrown, the argument will be matched dynamically (using `dynamic_cast`); otherwise (e.g. after being converted by `exception_to_result`) it will be matched based on its static type only (which is the same behavior used for types that do not derive from `std::exception`). + | + + + +| | | +| --- | --- | +| | +See also [Converting Exceptions to `result`](#tutorial-exception_to_result) from the tutorial. + | + + +--- + +### `make_context` +#include + + +``` +namespace boost { namespace leaf { + + template + context\_type\_from\_handlers make\_context() noexcept + { + return { }; + } + + template + context\_type\_from\_handlers make\_context( H && ... ) noexcept + { + return { }; + } + +} } +``` + +[`context_type_from_handlers`](#context_type_from_handlers) + +Example: + + +``` +auto ctx = leaf::make\_context( **(1)** + []( e\_this ) { .... }, + []( e\_that ) { .... } ); +``` + + + +| | | +| --- | --- | +| **1** | `decltype(ctx)` is `leaf::context`. | + + +--- + +### `make_shared_context` +#include + + +``` +namespace boost { namespace leaf { + + template + context\_ptr make\_shared\_context() noexcept + { + return std::make\_shared>>(); + } + + template + context\_ptr make\_shared\_context( H && ... ) noexcept + { + return std::make\_shared>>(); + } + +} } +``` + +[`context_type_from_handlers`](#context_type_from_handlers) + + + +| | | +| --- | --- | +| | +See also [Transporting Error Objects Between Threads](#tutorial-async) from the tutorial. + | + + +--- + +### `new_error` +#include + + +``` +namespace boost { namespace leaf { + + template + error\_id new\_error(Item && ... item) noexcept; + +} } +``` + + +Requires: + +Each of the `Item…​` types must be no-throw movable. +Effects: + +As if: + + +``` +error\_id id = <>; +return id.load(std::forward(item)...); +``` + +Returns: + +A new `error_id` value, which is unique across the entire program. +Ensures: + +`id.value()!=0`, where `id` is the returned `error_id`. + + +| | | +| --- | --- | +| | `new_error` discards error objects which are not used in any active error-handling calling scope. + | + + + +| | | +| --- | --- | +| | +When loaded into a `context`, an error object of a type `E` will overwrite the previously loaded object of type `E`, if any. + | + + +--- + +### `on_error` +#include + + +``` +namespace boost { namespace leaf { + + template + <> on\_error(Item && ... item) noexcept; + +} } +``` + + +Requires: + +Each of the `Item…​` types must be no-throw movable. +Effects: + +All `item…​` objects are forwarded and stored, together with the value returned from `std::unhandled_exceptions`, into the returned object of unspecified type, which should be captured by `auto` and kept alive in the calling scope. When that object is destroyed, if an error has occurred since `on_error` was invoked, LEAF will process the stored items to obtain error objects to be associated with the failure. +On error, LEAF first needs to deduce an `error_id` value `err` to associate error objects with. This is done using the following logic: + + + +* If [`new_error`](#new_error) was invoked (by the calling thread) since the object returned by `on_error` was created, `err` is initialized with the value returned by [`current_error`](#current_error); +* Otherwise, if `std::unhandled_exceptions` returns a greater value than it returned during initialization, `err` is initialized with the value returned by [`new_error`](#new_error); +* Otherwise, the stored `item…​` objects are discarded and no further action is taken (no error has occurred). + + + +Next, LEAF proceeds similarly to: + + + +``` +err.load(std::forward(item)...); +``` + +The difference is that unlike [`load`](#error_id::load), `on_error` will not overwrite any error objects already associated with `err`. + + + +| | | +| --- | --- | +| | +See [Using `on_error`](#tutorial-on_error) from the Tutorial. + | + + +--- + +### `try_catch` +#include + + +``` +namespace boost { namespace leaf { + + template + typename std::decay()())>::type + try\_catch( TryBlock && try\_block, H && ... h ); + +} } +``` + +The `try_catch` function works similarly to [`try_handle_some`](#try_handle_some), except that it does not use or understand the semantics of `result` types; instead: + +* It assumes that the `try_block` throws to indicate a failure, in which case `try_catch` will attempt to find a suitable handler among `h…​`; +* If a suitable handler isn’t found, the original exception is re-thrown using `throw;`. + + + +| | | +| --- | --- | +| | +See also Five Minute Introduction [Exception-Handling API](#introduction-eh). + | + + +--- + +### `try_handle_all` +#include + + +``` +namespace boost { namespace leaf { + + template + typename std::decay()().value())>::type + try\_handle\_all( TryBlock && try\_block, H && ... h ); + +} } +``` + +The `try_handle_all` function works similarly to [`try_handle_some`](#try_handle_some), except: + +* In addition, it requires that at least one of `h…​` can be used to handle any error (this requirement is enforced at compile time); +* If the `try_block` returns some `result` type, it must be possible to initialize a value of type `T` with the value returned by each of `h…​`, and +* Because it is required to handle all errors, `try_handle_all` unwraps the `result` object `r` returned by the `try_block`, returning `r.value()` instead of `r`. + + + +| | | +| --- | --- | +| | +See also [Five Minute Introduction](#introduction-result). + | + + +--- + +### `try_handle_some` +#include + + +``` +namespace boost { namespace leaf { + + template + typename std::decay()())>::type + try\_handle\_some( TryBlock && try\_block, H && ... h ); + +} } +``` + + +Requires: + + +* The `try_block` function may not take any arguments. +* The type `R` returned by the `try_block` function must be a `result` type (see [`is_result_type`](#is_result_type)). It is valid for the `try_block` to return `leaf::[result](#result)`, however this is not a requirement. +* Each of the `h…​` functions: + + + must return a type that can be used to initialize an object of the type `R`; in case R is a `result` (that is, in case of success it does not communicate a value), handlers that return `void` are permitted. If such a handler is selected, the `try_handle_some` return value is initialized by `{}`; + + may take any error objects, by value, by (`const`) reference, or as pointer (to `const`); + + may take arguments, by value, of any predicate type: [`catch_`](#catch_), [`match`](#match), [`match_value`](#match_value), [`match_member`](#match_member), [`if_not`](#if_not), or of any user-defined predicate type `Pred` for which `[is\_predicate](#is_predicate)::value` is `true`; + + may take an [`error_info`](#error_info) argument by `const &`; + + may take a [`diagnostic_info`](#diagnostic_info) argument by `const &`; + + may take a [`verbose_diagnostic_info`](#verbose_diagnostic_info) argument by `const &`. + +Effects: + + +* Creates a local `[context](#context)` object `ctx`, where the `E…​` types are automatically deduced from the types of arguments taken by each of `h…​`, which guarantees that `ctx` is able to store all of the types required to handle errors. +* Invokes the `try_block`: + + + if the returned object `r` indicates success and the `try_block` did not throw, `r` is forwarded to the caller. + + otherwise, LEAF considers each of the `h…​` handlers, in order, until it finds one that it can supply with arguments using the error objects currently stored in `ctx`, associated with `r.error()`. The first such handler is invoked and its return value is used to initialize the return value of `try_handle_some`, which can indicate success if the handler was able to handle the error, or failure if it was not. + + if `try_handle_some` is unable to find a suitable handler, it returns `r`. + + + +| | | +| --- | --- | +| | `try_handle_some` is exception-neutral: it does not throw exceptions, however the `try_block` and any of `h…​` are permitted to throw. + | + + +Handler Selection Procedure: + + +A handler `h` is suitable to handle the failure reported by `r` iff `try_handle_some` is able to produce values to pass as its arguments, using the error objects currently available in `ctx`, associated with the error ID obtained by calling `r.error()`. As soon as it is determined that an argument value can not be produced, the current handler is dropped and the selection process continues with the next handler, if any. + +The return value of `r.error()` must be implicitly convertible to [`error_id`](#error_id). Naturally, the `leaf::result` template satisfies this requirement. If an external `result` type is used instead, usually `r.error()` would return a `std::error_code`, which is able to communicate LEAF error IDs; see [Interoperability](#tutorial-interoperability). + +If `err` is the `error_id` obtained from `r.error()`, each argument `ai` taken by the handler currently under consideration is produced as follows: + +* If `ai` is of type `Ai`, `Ai const&` or `Ai&`: + + + + + If an error object of type `Ai`, associated with `err`, is currently available in `ctx`, `ai` is initialized with a reference to that object; otherwise + + If `Ai` derives from `std::exception`, and the `try_block` throws an object `ex` of type that derives from `std::exception`, LEAF obtains `Ai* p = dynamic_cast(&ex)`. The handler is dropped if `p` is null, otherwise `ai` is initialized with `*p`. + + Otherwise the handler is dropped. + +Example: + + +``` +.... +auto r = leaf::try\_handle\_some( + []() -> leaf::result + { + return f(); + }, + + [](leaf::e\_file\_name const & fn) **(1)** + { + std::cerr << "File Name: \"" << fn.value << '"' << std::endl; **(2)** + + return 1; + } ); +``` + +[`result`](#result) | [`e_file_name`](#e_file_name) + + + +| | | +| --- | --- | +| **1** | In case the `try_block` indicates a failure, this handler will be selected if `ctx` stores an `e_file_name` associated with the error. Because this is the only supplied handler, if an `e_file_name` is not available, `try_handle_some` will return the `leaf::result` returned by `f`. | +| **2** | Print the file name, handle the error. | +* If `ai` is of type `Ai` `const*` or `Ai*`, `try_handle_some` is always able to produce it: first it attempts to produce it as if it is taken by reference; if that fails, rather than dropping the handler, `ai` is initialized with `0`. +Example: + + +``` +.... +try\_handle\_some( + []() -> leaf::result + { + return f(); + }, + + [](leaf::e\_file\_name const \* fn) **(1)** + { + if( fn ) **(2)** + std::cerr << "File Name: \"" << fn->value << '"' << std::endl; + + return 1; + } ); +} +``` + +[`result`](#result) | [`e_file_name`](#e_file_name) + + + +| | | +| --- | --- | +| **1** | This handler can be selected to handle any error, because it takes `e_file_name` as a `const *` (and nothing else). | +| **2** | If an `e_file_name` is available with the current error, print it. | +* If `ai` is of a predicate type `Pred` (for which `[is\_predicate](#is_predicate)::value` is `true`), `E` is deduced as `typename Pred::error_type`, and then: + + + If `E` is not `void`, and an error object `e` of type `E`, associated with `err`, is not currently stored in `ctx`, the handler is dropped; otherwise the handler is dropped if the expression `Pred::evaluate(e)` returns `false`. + + if `E` is `void`, and a `std::exception` was not caught, the handler is dropped; otherwise the handler is dropped if the expression `Pred::evaluate(e)`, where `e` is of type `std::exception const &`, returns `false`. + + To invoke the handler, the `Pred` argument `ai` is initialized with `Pred{e}`. + + + + + + | | | + | --- | --- | + | | + See also: [Predicates](#predicates). + | +* If `ai` is of type `error_info const &`, `try_handle_some` is always able to produce it. +Example: + + +``` +.... +try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + [](leaf::error\_info const & info) **(1)** + { + std::cerr << "leaf::error\_info:" << std::endl << info; **(2)** + return info.error(); **(3)** + } ); +``` + +[`result`](#result) | [`error_info`](#error_info) + + + +| | | +| --- | --- | +| **1** | This handler matches any error. | +| **2** | Print error information. | +| **3** | Return the original error, which will be returned out of `try_handle_some`. | +* If `ai` is of type `diagnostic_info const &`, `try_handle_some` is always able to produce it. +Example: + + +``` +.... +try\_handle\_some( + [] + { + return f(); // throws + }, + + [](leaf::diagnostic\_info const & info) **(1)** + { + std::cerr << "leaf::diagnostic\_information:" << std::endl << info; **(2)** + return info.error(); **(3)** + } ); +``` + +[`result`](#result) | [`diagnostic_info`](#diagnostic_info) + + + +| | | +| --- | --- | +| **1** | This handler matches any error. | +| **2** | Print diagnostic information, including limited information about dropped error objects. | +| **3** | Return the original error, which will be returned out of `try_handle_some`. | +* If `ai` is of type `verbose_diagnostic_info const &`, `try_handle_some` is always able to produce it. +Example: + + +``` +.... +try\_handle\_some( + [] + { + return f(); // throws + }, + + [](leaf::verbose\_diagnostic\_info const & info) **(1)** + { + std::cerr << "leaf::verbose\_diagnostic\_information:" << std::endl << info; **(2)** + return info.error(); **(3)** + } ); +``` + +[`result`](#result) | [`verbose_diagnostic_info`](#verbose_diagnostic_info) + + + +| | | +| --- | --- | +| **1** | This handler matches any error. | +| **2** | Print verbose diagnostic information, including values of dropped error objects. | +| **3** | Return the original error, which will be returned out of `try_handle_some`. | + + + + +Reference: Types +---------------- + + + +| | | +| --- | --- | +| | +The contents of each Reference section are organized alphabetically. + | + + +--- +### `context` +#include + + +``` +namespace boost { namespace leaf { + + template + class context + { + context( context const & ) = delete; + context & operator=( context const & ) = delete; + + public: + + context() noexcept; + context( context && x ) noexcept; + ~context() noexcept; + + void activate() noexcept; + void deactivate() noexcept; + bool is\_active() const noexcept; + + void propagate() noexcept; + + void print( std::ostream & os ) const; + + template + R handle\_error( error\_id, H && ... ) const; + + }; + + template + using context\_type\_from\_handlers = typename <>::type; + +} } +``` + +[Constructors](#context::context) | [`activate`](#context::activate) | [`deactivate`](#context::deactivate) | [`is_active`](#context::is_active) | [`propagate`](#context::propagate) | [`print`](#context::print) | [`handle_error`](#context::handle_error) | [`context_type_from_handlers`](#context_type_from_handlers) + +The `context` class template provides storage for each of the specified `E…​` types. Typically, `context` objects are not used directly; they’re created internally when the [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) functions are invoked, instantiated with types that are automatically deduced from the types of the arguments of the passed handlers. + +Independently, users can create `context` objects if they need to capture error objects and then transport them, by moving the `context` object itself. + +Even in that case it is recommended that users do not instantiate the `context` template by explicitly listing the `E…​` types they want it to be able to store. Instead, use [`context_type_from_handlers`](#context_type_from_handlers) or call the [`make_context`](#make_context) function template, which deduce the correct `E…​` types from a captured list of handler function objects. + +To be able to load up error objects in a `context` object, it must be activated. Activating a `context` object `ctx` binds it to the calling thread, setting thread-local pointers of the stored `E…​` types to point to the corresponding storage within `ctx`. It is possible, even likely, to have more than one active `context` in any given thread. In this case, activation/deactivation must happen in a LIFO manner. For this reason, it is best to use a [`context_activator`](#context_activator), which relies on RAII to activate and deactivate a `context`. + +When a `context` is deactivated, it detaches from the calling thread, restoring the thread-local pointers to their pre-`activate` values. Typically, at this point the stored error objects, if any, are either discarded (by default) or moved to corresponding storage in other `context` objects active in the calling thread (if available), by calling [`propagate`](#context::propagate). + +While error handling typically uses [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch), it is also possible to handle errors by calling the member function [`handle_error`](#context::handle_error). It takes an [`error_id`](#error_id), and attempts to select an error handler based on the error objects stored in `*this`, associated with the passed `error_id`. + + + +| | | +| --- | --- | +| | `context` objects can be moved, as long as they aren’t active. + | + + + +| | | +| --- | --- | +| | +Moving an active `context` results in undefined behavior. + | + + +--- +#### Constructors +#include + + +``` +namespace boost { namespace leaf { + + template + context::context() noexcept; + + template + context::context( context && x ) noexcept; + +} } +``` + +The default constructor initializes an empty `context` object: it provides storage for, but does not contain any error objects. + +The move constructor moves the stored error objects from one `context` to the other. + + + +| | | +| --- | --- | +| | +Moving an active `context` object results in undefined behavior. + | + + +--- + +#### `activate` +#include + + +``` +namespace boost { namespace leaf { + + template + void context::activate() noexcept; + +} } +``` + + +Requires: + +`![is\_active](#context::is_active)()`. +Effects: + +Associates `*this` with the calling thread. +Ensures: + +`[is\_active](#context::is_active)()`. + + + +When a context is associated with a thread, thread-local pointers are set to point each `E…​` type in its store, while the previous value of each such pointer is preserved in the `context` object, so that the effect of `activate` can be undone by calling `deactivate`. + +When an error object is [loaded](#tutorial-loading), it is moved in the last activated (in the calling thread) `context` object that provides storage for its type (note that this may or may not be the last activated `context` object). If no such storage is available, the error object is discarded. + + +--- + +#### `deactivate` +#include + + +``` +namespace boost { namespace leaf { + + template + void context::deactivate() noexcept; + +} } +``` + + +Requires: + + +* `[is\_active](#context::is_active)()`; +* `*this` must be the last activated `context` object in the calling thread. + +Effects: + +Un-associates `*this` with the calling thread. +Ensures: + +`![is\_active](#context::is_active)()`. + + + +When a context is deactivated, the thread-local pointers that currently point to each individual error object storage in it are restored to their original value prior to calling [`activate`](#context::activate). + + +--- + +#### `handle_error` +#include + + +``` +namespace boost { namespace leaf { + + template + template + R context::handle\_error( error\_id err, H && ... h ) const; + +} } +``` + +This function works similarly to [`try_handle_all`](#try_handle_all), but rather than calling a `try_block` and obtaining the [`error_id`](#error_id) from a returned `result` type, it matches error objects (stored in `*this`, associated with `err`) with a suitable error handler from the `h…​` pack. + + + +| | | +| --- | --- | +| | +The caller is required to specify the return type `R`. This is because in general the supplied handlers may return different types (which must all be convertible to `R`). + | + + +--- + +#### `is_active` +#include + + +``` +namespace boost { namespace leaf { + + template + bool context::is\_active() const noexcept; + +} } +``` + + +Returns: + +`true` if the `*this` is active in any thread, `false` otherwise. + +--- + +#### `print` +#include + + +``` +namespace boost { namespace leaf { + + template + void context::print( std::ostream & os ) const; + +} } +``` + + +Effects: + +Prints all error objects currently stored in `*this`, together with the unique error ID each individual error object is associated with. + +--- + +#### `propagate` +#include + + +``` +namespace boost { namespace leaf { + + template + void context::propagate() noexcept; + +} } +``` + + +Requires: + +`![is\_active](#context::is_active)()`. +Effects: + +Each stored error object of some type `E` is moved into another `context` object active in the call stack that provides storage for objects of type `E`, if any, or discarded. + +--- + + +### `context_activator` +#include + + +``` +namespace boost { namespace leaf { + + template + class context\_activator + { + context\_activator( context\_activator const & ) = delete; + context\_activator & operator=( context\_activator const & ) = delete; + + public: + + explicit context\_activator( Ctx & ctx ) noexcept; + context\_activator( context\_activator && ) noexcept; + ~context\_activator() noexcept; + }; + +} } +``` + +`context_activator` is a simple class that activates and deactivates a [`context`](#context) using RAII: + +If `[ctx.is\_active](#context::is_active)`() is `true` at the time the `context_activator` is initialized, the constructor and the destructor have no effects. Otherwise: + +* The constructor stores a reference to `ctx` in `*this` and calls `[ctx.activate](#context::activate)`(). +* The destructor: + + + Has no effects if `ctx.is_active()` is `false` (that is, it is valid to call [`deactivate`](#context::deactivate) manually, before the `context_activator` object expires); + + Otherwise, calls `[ctx.deactivate](#context::deactivate)`() and, if there are new uncaught exceptions since the constructor was called, the destructor calls `[ctx.propagate](#context::propagate)`(). + +For automatic deduction of `Ctx`, use [`activate_context`](#activate_context). + + +--- + +### `diagnostic_info` +#include + + +``` +namespace boost { namespace leaf { + + class diagnostic\_info: public error\_info + { + //Constructors unspecified + + friend std::ostream & operator<<( std::ostream & os, diagnostic\_info const & x ); + }; + +} } +``` + +Handlers passed to [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) may take an argument of type `diagnostic_info const &` if they need to print diagnostic information about the error. + +The message printed by `operator<<` includes the message printed by `error_info`, followed by basic information about error objects that were communicated to LEAF (to be associated with the error) for which there was no storage available in any active [`context`](#context) (these error objects were discarded by LEAF, because no handler needed them). + +The additional information is limited to the type name of the first such error object, as well as their total count. + + + +| | | +| --- | --- | +| | +The behavior of `diagnostic_info` (and [`verbose_diagnostic_info`](#verbose_diagnostic_info)) is affected by the value of the macro `BOOST_LEAF_DIAGNOSTICS`: + + +* If it is 1 (the default), LEAF produces `diagnostic_info` but only if an active error handling context on the call stack takes an argument of type `diagnostic_info`; +* If it is 0, the `diagnostic_info` functionality is stubbed out even for error handling contexts that take an argument of type `diagnostic_info`. This could shave a few cycles off the error path in some programs (but it is probably not worth it). + + + | + + +--- + +### `error_id` +#include + + +``` +namespace boost { namespace leaf { + + class error\_id + { + public: + + error\_id() noexcept; + + template + result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + error\_id( std::error\_code const & ec ) noexcept; + + int value() const noexcept; + explicit operator bool() const noexcept; + + std::error\_code to\_error\_code() const noexcept; + + friend bool operator==( error\_id a, error\_id b ) noexcept; + friend bool operator!=( error\_id a, error\_id b ) noexcept; + friend bool operator<( error\_id a, error\_id b ) noexcept; + + template + error\_id load( Item && ... item ) const noexcept; + + friend std::ostream & operator<<( std::ostream & os, error\_id x ); + }; + + bool is\_error\_id( std::error\_code const & ec ) noexcept; + + template + error\_id new\_error( E && ... e ) noexcept; + + error\_id current\_error() noexcept; + +} } +``` + +[Constructors](#error_id::error_id) | [`value`](#error_id::value) | [`operator bool`](#error_id::operator_bool) | [`to_error_code`](#error_id::to_error_code) | [`operator==`, `!=`, `<`](#error_id::comparison_operators) | [`load`](#error_id::load) | [`is_error_id`](#is_error_id) | [`new_error`](#new_error) | [`current_error`](#current_error) + +Values of type `error_id` identify a specific occurrence of a failure across the entire program. They can be copied, moved, assigned to, and compared to other `error_id` objects. They’re as efficient as an `int`. + + +--- +#### Constructors +#include + + +``` +namespace boost { namespace leaf { + + error\_id::error\_id() noexcept = default; + + template + error\_id::error\_id( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + error\_id::error\_id( std::error\_code const & ec ) noexcept; + +} } +``` + +A default-initialized `error_id` object does not represent a specific failure. It compares equal to any other default-initialized `error_id` object. All other `error_id` objects identify a specific occurrence of a failure. + + + +| | | +| --- | --- | +| | +When using an object of type `error_id` to initialize a `result` object, it will be initialized in error state, even when passing a default-initialized `error_id` value. + | + +Converting an `error_id` object to `std::error_code` uses an unspecified `std::error_category` which LEAF recognizes. This allows an `error_id` to be transported through interfaces that work with `std::error_code`. The `std::error_code` constructor allows the original `error_id` to be restored. + + + +| | | +| --- | --- | +| | +To check if a given `std::error_code` is actually carrying an `error_id`, use [`is_error_id`](#is_error_id). + | + +Typically, users create new `error_id` objects by invoking [`new_error`](#new_error). The constructor that takes `std::error_code`, and the one that takes a type `Enum` for which `std::is_error_code_enum::value` is `true`, have the following effects: + +* If `ec.value()` is `0`, the effect is the same as using the default constructor. +* Otherwise, if `[is\_error\_id](#is_error_id)(ec)` is `true`, the original `error_id` value is used to initialize `*this`; +* Otherwise, `*this` is initialized by the value returned by [`new_error`](#new_error), while `ec` is passed to `load`, which enables handlers used with `try_handle_some`, `try_handle_all` or `try_catch` to receive it as an argument of type `std::error_code`. + + +--- + +#### `is_error_id` +#include + + +``` +namespace boost { namespace leaf { + + bool is\_error\_id( std::error\_code const & ec ) noexcept; + +} } +``` + + +Returns: + +`true` if `ec` uses the LEAF-specific `std::error_category` that identifies it as carrying an error ID rather than another error code; otherwise returns `false`. + +--- + +#### `load` +#include + + +``` +namespace boost { namespace leaf { + + template + error\_id error\_id::load( Item && ... item ) const noexcept; + +} } +``` + + +Requires: + +Each of the `Item…​` types must be no-throw movable. +Effects: + + +* If `value()==0`, all of `item…​` are discarded and no further action is taken. +* Otherwise, what happens with each `item` depends on its type: + + + If it is a function that takes a single argument of some type `E &`, that function is called with the object of type `E` currently associated with `*this`. If no such object exists, a default-initialized object is associated with `*this` and then passed to the function. + + If it is a function that takes no arguments, than function is called to obtain an error object, which is associated with `*this`. + + Otherwise, the `item` itself is assumed to be an error object, which is associated with `*this`. + +Returns: + +`*this`. + + +| | | +| --- | --- | +| | `load` discards error objects which are not used in any active error-handling calling scope. + | + + + +| | | +| --- | --- | +| | +When loaded into a `context`, an error object of a type `E` will overwrite the previously loaded object of type `E`, if any. + | + + +See also: + +[Loading of Error Objects](#tutorial-loading). + +--- + +#### `operator==`, `!=`, `<` +#include + + +``` +namespace boost { namespace leaf { + + friend bool operator==( error\_id a, error\_id b ) noexcept; + friend bool operator!=( error\_id a, error\_id b ) noexcept; + friend bool operator<( error\_id a, error\_id b ) noexcept; + +} } +``` + +These functions have the usual semantics, comparing `a.value()` and `b.value()`. + + + +| | | +| --- | --- | +| | +The exact strict weak ordering implemented by `operator<` is not specified. In particular, if for two `error_id` objects `a` and `b`, `a < b` is true, it does not follow that the failure identified by `a` ocurred earlier than the one identified by `b`. + | + + +--- + +#### `operator bool` +#include + + +``` +namespace boost { namespace leaf { + + explicit error\_id::operator bool() const noexcept; + +} } +``` + + +Effects: + +As if `return value()!=0`. + +--- + +#### `to_error_code` +#include + + +``` +namespace boost { namespace leaf { + + std::error\_code error\_id::to\_error\_code() const noexcept; + +} } +``` + + +Effects: + +Returns a `std::error_code` with the same `value()` as `*this`, using an unspecified `std::error_category`. + + +| | | +| --- | --- | +| | +The returned object can be used to initialize an `error_id`, in which case the original `error_id` value will be restored. + | + + + +| | | +| --- | --- | +| | +Use [`is_error_id`](#is_error_id) to check if a given `std::error_code` carries an `error_id`. + | + + +--- + +#### `value` +#include + + +``` +namespace boost { namespace leaf { + + int error\_id::value() const noexcept; + +} } +``` + + +Effects: + + +* If `*this` was initialized using the default constructor, returns 0. +* Otherwise returns an `int` that is guaranteed to not be 0: a program-wide unique identifier of the failure. + + +--- + + +### `error_monitor` +#include + + +``` +namespace boost { namespace leaf { + + class error\_monitor + { + public: + + error\_monitor() noexcept; + + error\_id check() const noexcept; + + error\_id assigned\_error\_id( E && ... e ) const noexcept; + }; + +} } +``` + +This class helps obtain an [`error_id`](#error_id) to associate error objects with, when augmenting failures communicated using LEAF through uncooperative APIs that do not use LEAF to report errors (and therefore do not return an `error_id` on error). + +The common usage of this class is as follows: + + + +``` +error\_code compute\_value( int \* out\_value ) noexcept; **(1)** + +leaf::error augmenter() noexcept +{ + leaf::error\_monitor cur\_err; **(2)** + + int val; + auto ec = compute\_value(&val); + + if( failure(ec) ) + return cur\_err.assigned\_error\_id().load(e1, e2, ...); **(3)** + else + return val; **(4)** +} +``` + + + +| | | +| --- | --- | +| **1** | Uncooperative third-party API that does not use LEAF, but may result in calling a user callback that does use LEAF. In case our callback reports a failure, we’ll augment it with error objects available in the calling scope, even though `compute_value` can not communicate an [`error_id`](#error_id). | +| **2** | Initialize an `error_monitor` object. | +| **3** | The call to `compute_value` has failed: + +* If [`new_error`](#new_error) was invoked (by the calling thread) after the `augment` object was initialized, `assigned_error_id` returns the last `error_id` returned by `new_error`. This would be the case if the failure originates in our callback (invoked internally by `compute_value`). +* Else, `assigned_error_id` invokes `new_error` and returns that `error_id`. + + + | +| **4** | The call was successful, return the computed value. | + +The `check` function works similarly, but instead of invoking `new_error` it returns a default-initialized `error_id`. + + + +| | | +| --- | --- | +| | +See [Using `error_monitor` to Report Arbitrary Errors from C-callbacks](#tutorial-on_error_in_c_callbacks). + | + + +--- + +### `e_api_function` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_api\_function {char const \* value;}; + +} } +``` + +The `e_api_function` type is designed to capture the name of the API function that failed. For example, if you’re reporting an error from `fread`, you could use `leaf::e_api_function {"fread"}`. + + + +| | | +| --- | --- | +| | +The passed value is stored as a C string (`char const *`), so `value` should only be initialized with a string literal. + | + + +--- + +### `e_at_line` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_at\_line { int value; }; + +} } +``` + +`e_at_line` can be used to communicate the line number when reporting errors (for example parse errors) about a text file. + + +--- + +### `e_errno` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_errno + { + int value; + friend std::ostream & operator<<( std::ostream & os, e\_errno const & err ); + }; + +} } +``` + +To capture `errno`, use `e_errno`. When printed in automatically-generated diagnostic messages, `e_errno` objects use `strerror` to convert the `errno` code to string. + + +--- + +### `e_file_name` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_file\_name { std::string value; }; + +} } +``` + +When a file operation fails, you could use `e_file_name` to store the name of the file. + + + +| | | +| --- | --- | +| | +It is probably better to define your own file name wrappers to avoid clashes if different modules all use `leaf::e_file_name`. It is best to use a descriptive name that clarifies what kind of file name it is (e.g. `e_source_file_name`, `e_destination_file_name`), or at least define `e_file_name` in a given module’s namespace. + | + + +--- + +### `e_LastError` +#include + + +``` +namespace boost { namespace leaf { + + namespace windows + { + struct e\_LastError + { + unsigned value; + friend std::ostream & operator<<( std::ostream & os, e\_LastError const & err ); + }; + } + +} } +``` + +`e_LastError` is designed to communicate `GetLastError()` values on Windows. + + +--- + +### `e_source_location` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_source\_location + { + char const \* const file; + int const line; + char const \* const function; + + friend std::ostream & operator<<( std::ostream & os, e\_source\_location const & x ); + }; + +} } +``` + +The [`NEW_ERROR`](#BOOST_LEAF_NEW_ERROR), [`EXCEPTION`](#BOOST_LEAF_EXCEPTION) and [`THROW_EXCEPTION`](#BOOST_LEAF_THROW_EXCEPTION) macros capture `__FILE__`, `__LINE__` and `__FUNCTION__` into a `e_source_location` object. + + +--- + +### `e_type_info_name` +#include + + +``` +namespace boost { namespace leaf { + + struct e\_type\_info\_name { char const \* value; }; + +} } +``` + +`e_type_info_name` is designed to store the return value of `std::type_info::name`. + + +--- + +### `error_info` +#include + + +``` +namespace boost { namespace leaf { + + class error\_info + { + //Constructors unspecified + + public: + + error\_id error() const noexcept; + + bool exception\_caught() const noexcept; + std::exception const \* exception() const noexcept; + + friend std::ostream & operator<<( std::ostream & os, error\_info const & x ); + }; + +} } +``` + +Handlers passed to error-handling functions such as [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) may take an argument of type `error_info const &` to receive generic information about the error being handled. + +The `error` member function returns the program-wide unique [`error_id`](#error_id) of the error. + +The `exception_caught` member function returns `true` if the handler that received `*this` is being invoked to handle an exception, `false` otherwise. + +If handling an exception, the `exception` member function returns a pointer to the `std::exception` subobject of the caught exception, or `0` if that exception could not be converted to `std::exception`. + + + +| | | +| --- | --- | +| | +It is illegal to call the `exception` member function unless `exception_caught()` is `true`. + | + +The `operator<<` overload prints diagnostic information about each error object currently stored in the [`context`](#context) local to the [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) scope that invoked the handler, but only if it is associated with the [`error_id`](#error_id) returned by `error()`. + + +--- + +### `polymorphic_context` +#include + + +``` +namespace boost { namespace leaf { + + class polymorphic\_context + { + protected: + + polymorphic\_context() noexcept; + ~polymorphic\_context() noexcept; + + public: + + virtual void activate() noexcept = 0; + virtual void deactivate() noexcept = 0; + virtual bool is\_active() const noexcept = 0; + + virtual void propagate() noexcept = 0; + + virtual void print( std::ostream & ) const = 0; + }; + +} } +``` + +The `polymorphic_context` class is an abstract base type which can be used to erase the type of the exact instantiation of the [`context`](#context) class template used. See [`make_shared_context`](#make_shared_context). + + +--- + +### `result` +#include + + +``` +namespace boost { namespace leaf { + + template + class result + { + public: + + result() noexcept; + result( T && v ) noexcept; + result( T const & v ); + + template + result( U &&, <> ); + + result( error\_id err ) noexcept; + result( std::shared\_ptr && ctx ) noexcept; + + template + result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + result( std::error\_code const & ec ) noexcept; + + result( result && r ) noexcept; + + template + result( result && r ) noexcept; + + result & operator=( result && r ) noexcept; + + template + result & operator=( result && r ) noexcept; + + explicit operator bool() const noexcept; + + T const & value() const; + T & value(); + + T const & operator\*() const; + T & operator\*(); + + T const \* operator->() const; + T \* operator->(); + + <> error() noexcept; + + template + error\_id load( Item && ... item ) noexcept; + }; + + template <> + class result + { + public: + + result() noexcept; + + result( error\_id err ) noexcept; + result( std::shared\_ptr && ctx ) noexcept; + + template + result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + result( std::error\_code const & ec ) noexcept; + + result( result && r ) noexcept; + + template + result( result && r ) noexcept; + + result & operator=( result && r ) noexcept; + + template + result & operator=( result && r ) noexcept; + + explicit operator bool() const noexcept; + + void value() const; + + <> error() noexcept; + + template + error\_id load( Item && ... item ) noexcept; + }; + + struct bad\_result: std::exception { }; + +} } +``` + +[Constructors](#result::result) | [`operator=`](#result::operator_eq) | [`operator bool`](#result::operator_bool) | [`value`, `operator*`, `->`](#result::value) | [`error`](#result::error) | [`load`](#result::load) + +The `result` type can be returned by functions which produce a value of type `T` but may fail doing so. + + +Requires: + +`T` must be movable, and its move constructor may not throw. +Invariant: + +A `result` object is in one of three states: +* Value state, in which case it contains an object of type `T`, and `[value](#result::value)`/`[operator\*](#result::value)`/`[operator->](#result::value)` can be used to access the contained value. +* Error state, in which case it contains an error ID, and calling `[value](#result::value)`/`[operator\*](#result::value)`/`[operator->](#result::value)` throws `leaf::bad_result`. +* Error-capture state, which is the same as the Error state, but in addition to the error ID, it holds a `std::shared_ptr<[polymorphic\_context](#polymorphic_context)>`. + +`result` objects are nothrow-moveable but are not copyable. + + +--- +#### Constructors + + +#include + + +``` +namespace boost { namespace leaf { + + template + result::result() noexcept; + + template + result::result( T && v ) noexcept; **(1)** + + template + result::result( T const & v ); **(1)** + + template + result::result( U && u, <> ); **(2)** + + template + result::result( leaf::error\_id err ) noexcept; + + template + template + result::result( Enum e, typename std::enable\_if::value, Enum>::type \* = 0 ) noexcept; + + template + result::result( std::error\_code const & ec ) noexcept; + + template + result::result( std::shared\_ptr && ctx ) noexcept; + + template + result::result( result && ) noexcept; + + template + template + result::result( result && ) noexcept; + +} } +``` + + + +| | | +| --- | --- | +| **1** | Not available if `T` is `void`. | +| **2** | Available if an object of type `T` can be initialized with `std::forward(u)`. This is to enable e.g. `result` to be initialized with a string literal. | + +Requires: + +`T` must be movable, and its move constructor may not throw; or `void`. +Effects: + +Establishes the `result` invariant: + + +* To get a `result` in [Value state](#result), initialize it with an object of type `T` or use the default constructor. +* To get a `result` in [Error state](#result), initialize it with: + + + an [`error_id`](#error_id) object. + + + + + + | | | + | --- | --- | + | | + Initializing a `result` with a default-initialized `error_id` object (for which `.value()` returns `0`) will still result in [Error state](#result)! + | + + a `std::error_code` object. + + an object of type `Enum` for which `std::is_error_code_enum::value` is `true`. +* To get a `result` in [Error-capture state](#result), initialize it with a `std::shared_ptr<[polymorphic\_context](#polymorphic_context)>` (which can be obtained by calling e.g. [`make_shared_context`](#make_shared_context)). + + + +When a `result` object is initialized with a `std::error_code` object, it is used to initialize an `error_id` object, then the behavior is the same as if initialized with `error_id`. + +Throws: + + +* Initializing the `result` in Value state may throw, depending on which constructor of `T` is invoked; +* Other constructors do not throw. + + + +| | | +| --- | --- | +| | +A `result` that is in value state converts to `true` in boolean contexts. A `result` that is not in value state converts to `false` in boolean contexts. + | + + + +| | | +| --- | --- | +| | `result` objects are nothrow-moveable but are not copyable. + | + + +--- + +#### `error` +#include + + +``` +namespace boost { namespace leaf { + + template + <> result::error() noexcept; + +} } +``` + +Returns: A proxy object of unspecified type, implicitly convertible to any instance of the `result` class template, as well as to [`error_id`](#error_id). + +* If the proxy object is converted to some `result`: + + + If `*this` is in [Value state](#result), returns `result(error_id())`. + + Otherwise the state of `*this` is moved into the returned `result`. +* If the proxy object is converted to an `error_id`: + + + If `*this` is in [Value state](#result), returns a default-initialized [`error_id`](#error_id) object. + + If `*this` is in [Error-capture state](#result), all captured error objects are [loaded](#tutorial-loading) in the calling thread, and the captured `error_id` value is returned. + + If `*this` is in [Error state](#result), returns the stored `error_id`. +* If the proxy object is not used, the state of `*this` is not modified. + + + +| | | +| --- | --- | +| | +The returned proxy object refers to `*this`; avoid holding on to it. + | + + +--- + +#### `load` +#include + + +``` +namespace boost { namespace leaf { + + template + template + error\_id result::load( Item && ... item ) noexcept; + +} } +``` + +This member function is designed for use in `return` statements in functions that return `result` to forward additional error objects to the caller. + + +Effects: + +As if `error_id(this->error()).load(std::forward(item)…​)`. +Returns: + +`*this`. + +--- + +#### `operator=` +#include + + +``` +namespace boost { namespace leaf { + + template + result & result::operator=( result && ) noexcept; + + template + template + result & result::operator=( result && ) noexcept; + +} } +``` + + +Effects: + +Destroys `*this`, then re-initializes it as if using the appropriate `result` constructor. Basic exception-safety guarantee. + +--- + +#### `operator bool` +#include + + +``` +namespace boost { namespace leaf { + + template + result::operator bool() const noexcept; + +} } +``` + + +Returns: + +If `*this` is in [value state](#result), returns `true`, otherwise returns `false`. + +--- + +#### `value`, `operator*`, `->` +#include + + +``` +namespace boost { namespace leaf { + + void result::value() const; **(1)** + + template + T const & result::value() const; **(2)** + + template + T & result::value(); + + template + T const & result::operator\*() const; **(2)** + + template + T & result::operator\*(); + + template + T const \* result::operator->() const; **(2)** + + template + T \* result::operator->(); **(2)** + + struct bad\_result: std::exception { }; + +} } +``` + + + +| | | +| --- | --- | +| **1** | Only when `T` is `void`. | +| **2** | Only when `T` is not `void`. | + + +Effects: + +If `*this` is in [value state](#result), returns a reference (or pointer) to the stored value, otherwise throws `bad_result`. + +--- + + +### `verbose_diagnostic_info` +#include + + +``` +namespace boost { namespace leaf { + + class verbose\_diagnostic\_info: public error\_info + { + //Constructors unspecified + + friend std::ostream & operator<<( std::ostream & os, verbose\_diagnostic\_info const & x ); + }; + +} } +``` + +Handlers passed to error-handling functions such as [`try_handle_some`](#try_handle_some), [`try_handle_all`](#try_handle_all) or [`try_catch`](#try_catch) may take an argument of type `verbose_diagnostic_info const &` if they need to print diagnostic information about the error. + +The message printed by `operator<<` includes the message printed by `error_info`, followed by information about error objects that were communicated to LEAF (to be associated with the error) for which there was no storage available in any active [`context`](#context) (these error objects were discarded by LEAF, because no handler needed them). + +The additional information includes the types and the values of all such error objects. + + + +| | | +| --- | --- | +| | +The behavior of `verbose_diagnostic_info` (and [`diagnostic_info`](#diagnostic_info)) is affected by the value of the macro `BOOST_LEAF_DIAGNOSTICS`: + + +* If it is 1 (the default), LEAF produces `verbose_diagnostic_info` but only if an active error handling context on the call stack takes an argument of type `verbose_diagnostic_info`; +* If it is 0, the `verbose_diagnostic_info` functionality is stubbed out even for error handling contexts that take an argument of type `verbose_diagnostic_info`. This could save some cycles on the error path in some programs (but is probably not worth it). + + + | + + + +| | | +| --- | --- | +| | +Using `verbose_diagnostic_info` will likely allocate memory dynamically. + | + +Reference: Predicates +--------------------- + + + +| | | +| --- | --- | +| | +The contents of each Reference section are organized alphabetically. + | + +A predicate is a special type of error handler argument which enables the [handler selection procedure](#handler_selection_procedure) to consider the *value* of available error objects, not only their type; see [Using Predicates to Handle Errors](#tutorial-predicates). + +The following predicates are available: + +* [`match`](#match) +* [`match_value`](#match_value) +* [`match_member`](#match_member) +* [`catch_`](#catch_) +* [`if_not`](#if_not) + +In addition, any user-defined type `Pred` for which `[is\_predicate](#is_predicate)::value` is `true` is treated as a predicate. In this case, it is required that: + +* `Pred` defines an accessible member type `error_type` to specify the error object type it requires; +* `Pred` defines an accessible static member function `evaluate`, which returns a boolean type, and can be invoked with an object of type `error_type const &`; +* A `Pred` instance can be initialized with an object of type `error_type`. + +When an error handler takes an argument of a predicate type `Pred`, the [handler selection procedure](#handler_selection_procedure) drops the handler if an error object `e` of type `Pred::error_type` is not available. Otherwise, the handler is dropped if `Pred::evaluate(e)` returns `false`. If the handler is invoked, the `Pred` argument is initialized with `Pred{e}`. + + + +| | | +| --- | --- | +| | +Predicates are evaluated before the error handler is invoked, and so they may not access dynamic state (of course the error handler itself can access dynamic state, e.g. by means of lambda expression captures). + | + +Example 1: + + +``` +enum class my\_error { e1 = 1, e2, e3 }; + +struct my\_pred +{ + using error\_type = my\_error; **(1)** + + static bool evaluate(my\_error) noexcept; **(2)** + + my\_error matched; **(3)** +} + +namespace boost { namespace leaf { + + template <> + struct is\_predicate: std::true\_type + { + }; + +} } +``` + + + +| | | +| --- | --- | +| **1** | This predicate requires an error object of type `my_error`. | +| **2** | The handler selection procedure will call this function with an object `e` of type `my_error` to evaluate the predicate…​ | +| **3** | …​and if successful, initialize the `my_pred` error handler argument with `my_pred{e}`. | + +Example 2: + + +``` +struct my\_pred +{ + using error\_type = leaf::e\_errno; **(1)** + + static bool evaluate(leaf::e\_errno const &) noexcept; **(2)** + + leaf::e\_errno const & matched; **(3)** +} + +namespace boost { namespace leaf { + + template <> + struct is\_predicate: std::true\_type + { + }; + +} } +``` + + + +| | | +| --- | --- | +| **1** | This predicate requires an error object of type [`e_errno`](#e_errno). | +| **2** | The handler selection procedure will call this function with an object `e` of type `e_errno` to evaluate the predicate…​ | +| **3** | …​and if successful, initialize the `my_pred` error handler argument with `my_pred{e}`. | + + +--- +### `catch_` +#include + + +``` +namespace boost { namespace leaf { + + template + struct catch\_ + { + std::exception const & matched; + + // Other members not specified + }; + + template + struct catch\_ + { + Ex const & matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + +} } +``` + +[`is_predicate`](#is_predicate) + +When an error handler takes an argument of type that is an instance of the `catch_` template, the [handler selection procedure](#handler_selection_procedure) first checks if a `std::exception` was caught. If not, the handler is dropped. Otherwise, the handler is dropped if the caught `std::exception` can not be `dynamic_cast` to any of the specified types `Ex…​`. + +If the error handler is invoked, the `matched` member can be used to access the exception object. + + + +| | | +| --- | --- | +| | +See also: [Using Predicates to Handle Errors](#tutorial-predicates). + | + + + +| | | +| --- | --- | +| | +While `catch_` requires that the caught exception object is of type that derives from `std::exception`, it is not required that the `Ex…​` types derive from `std::exception`. + | + +Example 1: + + +``` +struct ex1: std::exception { }; +struct ex2: std::exception { }; + +leaf::try\_catch( + [] + { + return f(); // throws + }, + + [](leaf::catch\_ c) + { **(1)** + assert(dynamic\_cast(&c.matched) || dynamic\_cast(&c.matched)); + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if `f` throws an exception of type `ex1` or `ex2`. | + +Example 2: + + +``` +struct ex1: std::exception { }; + +leaf::try\_handle\_some( + [] + { + return f(); // returns leaf::result + }, + + [](ex1 & e) + { **(1)** + .... + } ); +``` + + + +| | | +| --- | --- | +| **1** | The handler is selected if `f` throws an exception of type `ex1`. Notice that if we’re interested in only one exception type, as long as that type derives from `std::exception`, the use of `catch_` is not required. | + + +--- + +### `if_not` +#include + + +``` +namespace boost { namespace leaf { + + template + struct if\_not + { + <> matched; + + // Other members not specified + }; + + template + struct is\_predicate>: std::true\_type + { + }; + +} } +``` + +[`is_predicate`](#is_predicate) + +When an error handler takes an argument of type `if_not