Compare commits

..

7 Commits

Author SHA1 Message Date
bf7341000c Merged revisions 42451-43517 via svnmerge from
https://svn.boost.org/svn/boost/trunk

................
  r42455 | johnmaddock | 2008-01-04 08:54:35 -0800 (Fri, 04 Jan 2008) | 1 line
  
  Fix typos.
................
  r42456 | eric_niebler | 2008-01-04 09:14:53 -0800 (Fri, 04 Jan 2008) | 1 line
  
  mark up borland and sun accumulators failures
................
  r42459 | andreas_huber69 | 2008-01-04 10:23:18 -0800 (Fri, 04 Jan 2008) | 1 line
  
  This should fix template parameter shadowing errors for gcc and Intel compilers.
................
  r42462 | bgubenko | 2008-01-04 15:55:43 -0800 (Fri, 04 Jan 2008) | 1 line
  
  mark Accumulators tests for gcc 4.2.1 affected by GCC Bugzilla Bug 33580
................
  r42471 | turkanis | 2008-01-04 20:51:49 -0800 (Fri, 04 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42441-42469; added 'std::' for Intel on Linux/Darwin; added STDCXX workaround for codecvt; fixed docs for invert.hpp
................
  r42473 | turkanis | 2008-01-04 23:35:44 -0800 (Fri, 04 Jan 2008) | 1 line
  
  new iostreams expected failures: stream_offset_64bit_test.cpp on Borland, and wide stream tests on gcc-3.4.2_hpux_pa_risc
................
  r42475 | andreas_huber69 | 2008-01-05 04:42:02 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added defaults for in_state_reaction template parameters and updated tests accordingly.
................
  r42476 | bemandawes | 2008-01-05 06:41:55 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Disable Microsoft "secure" overloads in Dinkumware libraries since they cause compile errors with Intel versions 9 and 10
................
  r42478 | jurko | 2008-01-05 07:19:53 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo corrections. Minor stylistic changes.
................
  r42479 | jurko | 2008-01-05 08:53:03 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Updated Boost.Jam command line option texts. Minor stylistic changes.
................
  r42480 | jurko | 2008-01-05 08:55:36 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo corrections. Minor stylistic changes.
................
  r42481 | jurko | 2008-01-05 08:56:42 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo correction. Corrected an invalid command-line option name.
................
  r42482 | jurko | 2008-01-05 08:57:17 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected an invalid command-line option name reference.
................
  r42483 | jurko | 2008-01-05 08:58:01 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected an out-of-date comment listing all command-line options.
................
  r42484 | jurko | 2008-01-05 09:11:50 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected the used file suffix for the VERBATIM file type. Now the documentation is in sync with the 'customization' example. This also closes the Trac ticket 134. Minor stylistic changes.
................
  r42485 | jurko | 2008-01-05 09:46:45 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Stylistic comment changes & typo corrections.
................
  r42486 | jurko | 2008-01-05 09:52:31 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Stylistic comment changes & typo corrections in several files. Corrected an incorrect error message in boost-build/build/project.jam displayed when a --build-dir command-line option and a non top-level project build-dir attribute are specified.
................
  r42487 | jurko | 2008-01-05 09:54:02 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Cleaned up some import rule calls.
................
  r42488 | jurko | 2008-01-05 10:02:23 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Documentation wording cleaned up a bit.
................
  r42489 | jurko | 2008-01-05 10:13:10 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Removed or simplified some import calls. Comment updates. Minor stylistic changes.
................
  r42490 | jurko | 2008-01-05 10:14:20 -0800 (Sat, 05 Jan 2008) | 2 lines
  
  Simplified the used make rules. Removed some dead code. Minor stylistic changes.
................
  r42492 | jurko | 2008-01-05 10:29:36 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Removed trailing spaces and some empty lines.
................
  r42494 | jurko | 2008-01-05 12:02:24 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, etc.
................
  r42495 | jurko | 2008-01-05 12:06:15 -0800 (Sat, 05 Jan 2008) | 2 lines
  
  Cleaned up where the stage module is imported in tools/builtin.jam. Added a missing import in tools/stage.jam that causes errors with the previous fix. Minor stylistic changes in tools/stage.jam.
................
  r42496 | jurko | 2008-01-05 12:14:48 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Comment cleanup.
................
  r42497 | jurko | 2008-01-05 12:37:44 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic changes - cleaned up import calls, wrapped much text at 80 characters updated comments, typo corrections, removed trailing spaces, etc.
................
  r42498 | jurko | 2008-01-05 12:48:50 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Renamed some Jamfile and project-root.jam references to Jamfile.jam and Jamroot.jam respectively.
................
  r42499 | jurko | 2008-01-05 13:37:15 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Test code cleaned up a bit. No functional changes.
................
  r42502 | hkaiser | 2008-01-05 14:44:28 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Wave: updated copyright messages to include the year 2008 (merged from release branch).
................
  r42504 | jurko | 2008-01-05 15:18:17 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Refactored the test into two separate test functions. Made the 'directory names with dots' test use the expect_output_line() tool instead of a manual find, causing a better diagnostic to be displayed in case of a failure. Made one of the test Jam scripts more compact. Made the test use the Jamroot.jam file instead of project-root.jam.
................
  r42505 | bgubenko | 2008-01-05 15:35:05 -0800 (Sat, 05 Jan 2008) | 1 line
  
  mark up accumulators library test weighted_kurtosis for acc toolset
................
  r42506 | jurko | 2008-01-05 16:25:48 -0800 (Sat, 05 Jan 2008) | 1 line
  
  No functional changes but only stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, removing empty lines, made tests use Jamfile.jam and Jamroot.jam Boost Build script names, removed unnecessary module imports, etc.
................
  r42507 | jurko | 2008-01-05 16:53:09 -0800 (Sat, 05 Jan 2008) | 1 line
  
  No functional changes but only stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, removing empty lines, removed unnecessary module imports, etc.
................
  r42508 | jurko | 2008-01-05 22:15:39 -0800 (Sat, 05 Jan 2008) | 5 lines
  
  Refactored build-system.jam. Added many detailed comments.
  
  Test configuration module now gets loaded the same as all other configuration modules.
  
  In addition to being able to specify which user configuration to load, user may now also prevent loading the user configuration by specifying an empty file name for it.
................
  r42509 | jurko | 2008-01-05 22:50:56 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added a --test-config command-line option for specifying where the test configuration file should be loaded from instead of always being looked up in Boost Build's test folder. This allows non-test builds to not use test config when it exists on the system and different tests to use different test configurations when needed.
................
  r42510 | jurko | 2008-01-05 22:58:24 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Specifying that a build uses test configuration no longer prevents toolset auto-configuration and therefore no longer causes --toolset options to be ignored.
................
  r42511 | jurko | 2008-01-05 23:13:28 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic comment changes.
................
  r42512 | jurko | 2008-01-05 23:17:08 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added support for choosing the toolset and toolset version to be used 'by default' by Boost Build. Allows testing of default toolset functionality.
................
  r42513 | jurko | 2008-01-05 23:26:46 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Upgraded the tool for testing that a certain line exists in the given output support so that it now also knows how to test that a certain line does not exist in the given output.
................
  r42514 | jurko | 2008-01-05 23:28:47 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added the --ignore-site-config option telling Boost.Build not to load the site configuration file.
................
  r42516 | jurko | 2008-01-06 00:16:34 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Stylistic changes: typo corrections, comment alignments, output string updates, no functional changes, etc.
................
  r42527 | andreas_huber69 | 2008-01-06 05:49:31 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Various doc updates.
................
  r42528 | danieljames | 2008-01-06 08:47:16 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add Boost.Unordered and add to the documentation. Not fully integrated yet.
................
  r42529 | danieljames | 2008-01-06 08:48:36 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add more libraries that use Boost.Hash to its intro.
................
  r42530 | danieljames | 2008-01-06 08:49:11 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add Boost.Unordered to Boost.Hash's intro.
................
  r42531 | danieljames | 2008-01-06 08:59:18 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Combine the 'container' and 'unordered' tests.
................
  r42532 | danieljames | 2008-01-06 08:59:49 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Give the unordered exception test suite its own name.
................
  r42533 | danieljames | 2008-01-06 09:13:15 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add the contents of compile_tests.cpp to set_compile.cpp and map_compile.cpp
................
  r42534 | danieljames | 2008-01-06 09:16:51 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Rename the test-suites to match other libraries' style.
................
  r42535 | danieljames | 2008-01-06 09:23:16 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add forwarding html files for Boost.Unordered.
................
  r42536 | danieljames | 2008-01-06 09:40:32 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add Boost.Unordered to the regression tests.
................
  r42537 | eric_niebler | 2008-01-06 09:44:06 -0800 (Sun, 06 Jan 2008) | 1 line
  
  add myself as maintainer of accumulators
................
  r42538 | danieljames | 2008-01-06 09:45:18 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add library identification.
................
  r42539 | danieljames | 2008-01-06 09:48:11 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add the unordered library to the maintainers list.
................
  r42540 | danieljames | 2008-01-06 09:56:06 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add unordered to the library list.
................
  r42544 | turkanis | 2008-01-06 10:32:05 -0800 (Sun, 06 Jan 2008) | 18 lines
  
  copy.hpp: 
  
      fix for Visual Age: std::min was passed arguments of different types; replaced std:: min with conditional
  
  detail/streambuf/indirect_streambuf.hpp: 
  
      removed trailing comma in enum definition
  
  test/combine_test.cpp:
  test/symmetric_filter_test.cpp:
  test/compose_test.cpp:
  test/close_test.cpp:
  test/invert_test.cpp:
  test/tee_test.cpp:
  test/restrict_test.cpp:
  test/Jamfile.v2:
  
      moved tests for close() into the test files for various adapters
................
  r42546 | jurko | 2008-01-06 12:06:33 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Corrected a bug with the customized default toolset being read from the toolset module but defined in the build-system module. Effect was that customized default toolsets were getting ignored.
................
  r42547 | jurko | 2008-01-06 12:37:55 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Simple code cleanup. Typo corrections.
................
  r42548 | jurko | 2008-01-06 12:43:25 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Added support for tests configuring whether they want their Boost Build to ignore toolset requirements instead of always ignoring them. Minor stylistic changes.
................
  r42549 | jurko | 2008-01-06 12:56:20 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Added new tests related to Boost Build's default toolset handling. They test that the correct default toolset gets use and that when it gets used that has no different status than any other explicitly specified toolset.
................
  r42563 | turkanis | 2008-01-06 17:26:52 -0800 (Sun, 06 Jan 2008) | 1 line
  
  marked restrict_test.cpp as failing on vacpp and stream_offset_64bit_test as failing on sun (iostreams)
................
  r42564 | turkanis | 2008-01-06 17:32:29 -0800 (Sun, 06 Jan 2008) | 1 line
  
  alphabetized the iostreams failures
................
  r42565 | turkanis | 2008-01-06 21:20:32 -0800 (Sun, 06 Jan 2008) | 5 lines
  
  merged changes from branches/iostreams_dev, revisions 42544-42544
  
  - added "slice" as an alias for "restrict", for platforms on which "restrict" is a keyword
  - attempted to configure file_descriptor for __IBMCPP__
  - added better error output to stream_offset_64bit_test.cpp
................
  r42566 | jurko | 2008-01-07 09:00:59 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Corrected explicitly specified user-config file handling. Was not looking for the specified file in the regular path instead of the current folder and did not work with absolute paths.
................
  r42567 | jurko | 2008-01-07 10:15:13 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Code cleanup. Converted to using True/False instead of 1/0. Changed to obey documented coding conventions regarding whitespace and function parameters. Renamed private member functions to use the __ name prefix.
................
  r42568 | jurko | 2008-01-07 10:38:28 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Added a new configuration test making sure that the bug with not being able to process absolute user-config configuration file references never rears its ugly head again.
................
  r42570 | eric_niebler | 2008-01-07 11:06:31 -0800 (Mon, 07 Jan 2008) | 1 line
  
  s/order/tail/
................
  r42571 | eric_niebler | 2008-01-07 11:08:16 -0800 (Mon, 07 Jan 2008) | 1 line
  
  add missing includes, fix signed/unsigned warnings, clean-up trailing whitespace, fixes #1552
................
  r42572 | danieljames | 2008-01-07 11:40:32 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Rename the exception tests so that they don't clash with the normal tests.
................
  r42573 | danieljames | 2008-01-07 11:41:05 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Remove some development code.
................
  r42575 | danieljames | 2008-01-07 11:44:13 -0800 (Mon, 07 Jan 2008) | 3 lines
  
  Add missing 'use namespace std'. Which I should have done when I was told about
  them before. Sorry.
................
  r42576 | danieljames | 2008-01-07 11:46:27 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Add support for multiple copyrights in the library info.
................
  r42578 | danieljames | 2008-01-07 11:51:02 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Reneame the set and map compile tests so they'll be adjacent in the test results.
................
  r42580 | danieljames | 2008-01-07 12:06:15 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Avoid some uses of an invalid pointer.
................
  r42581 | danieljames | 2008-01-07 12:07:12 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Use the default location for the reference documentation.
................
  r42587 | danieljames | 2008-01-07 13:05:42 -0800 (Mon, 07 Jan 2008) | 5 lines
  
  Fix a bug which was causing the memory area stuff to fail.
  
  I should probably try to be less clever and use memory area's lower
  bounds as the key, and do the extra work required to get that working.
................
  r42588 | danieljames | 2008-01-07 13:07:43 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Fix an off by one error.
................
  r42591 | danieljames | 2008-01-07 13:47:24 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Merge in spell check.
................
  r42596 | turkanis | 2008-01-07 15:13:26 -0800 (Mon, 07 Jan 2008) | 5 lines
  
  merged changes from branches/iostreams_dev, revisions 42565-42595:
  
  - Simplified implementation with the help to the C-runtime function _get_osfhandle so that on Windows only a single HANDLE is stored and the POSIX-style implementation is never needed; added the handle_type on POSIX systems (typedef for int) and a function returning the underlying handle as an instance of handle_type
  - fixed the bug described in ticket Ticket #1551 (stream_buffer::seekpos ignores openmode parameter)
  - fixed test/operation_sequence_test.cpp file description
................
  r42598 | grafik | 2008-01-07 18:49:25 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Mostly fix bad path calc for direct html from doxygen doc generation. (fixes #1562)
................
  r42600 | turkanis | 2008-01-07 19:49:23 -0800 (Mon, 07 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev revisions 42595-42599; applied Dinkumware implementation of positioning functions to IBM Visual Age; simplified and corrected implementation
................
  r42602 | turkanis | 2008-01-07 20:20:38 -0800 (Mon, 07 Jan 2008) | 1 line
  
  removed unneeded headers, one of which (restrict.hpp) causes failures on IBM Visual Age
................
  r42603 | turkanis | 2008-01-07 20:52:54 -0800 (Mon, 07 Jan 2008) | 1 line
  
  removed spurious '.cpp' extension from test names (iostreams)
................
  r42612 | danieljames | 2008-01-08 05:59:01 -0800 (Tue, 08 Jan 2008) | 3 lines
  
  Merge in latest unordered developments (revisions 42607-42611).
................
  r42613 | jurko | 2008-01-08 06:40:24 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Added a new test making sure properties conditioned on multiple different feature values are handled correctly. This especially includes testing the case when one of those features is <toolset> and the value given for it includes a toolset version.
................
  r42614 | jurko | 2008-01-08 07:21:15 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Made some debugging messages more consistent.
................
  r42615 | eric_niebler | 2008-01-08 09:42:20 -0800 (Tue, 08 Jan 2008) | 1 line
  
  support for LaTeX formulas in Doxygen comments
................
  r42616 | eric_niebler | 2008-01-08 09:43:34 -0800 (Tue, 08 Jan 2008) | 1 line
  
  automatically generate png files from LaTeX formulas using doxygen
................
  r42617 | jurko | 2008-01-08 09:51:30 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Comment correction.
................
  r42619 | danieljames | 2008-01-08 10:15:01 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Merge: Another missing 'using namespace std'
................
  r42620 | eric_niebler | 2008-01-08 10:43:43 -0800 (Tue, 08 Jan 2008) | 1 line
  
  fix signed/unsigned warnings, clean up trailing whitespace
................
  r42624 | eric_niebler | 2008-01-08 13:40:52 -0800 (Tue, 08 Jan 2008) | 1 line
  
  disable iterator debugging for all msvc versions
................
  r42625 | turkanis | 2008-01-08 14:25:01 -0800 (Tue, 08 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev, revisions 42602-42624: adding missing included to fix #1550; fix for positioning on IBM; fix for file_descriptor on POSIX; restructed the version range for the Borland workaround in large_file_test.cpp
................
  r42626 | jurko | 2008-01-08 17:09:26 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Minor stylistic code indentation changes.
................
  r42627 | jurko | 2008-01-08 17:11:03 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Tried trailing spaces. Minor comment typo corrections.
................
  r42628 | jurko | 2008-01-08 17:18:38 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Remove trailing spaces. Removed an empty line.
................
  r42629 | jurko | 2008-01-08 20:05:29 -0800 (Tue, 08 Jan 2008) | 8 lines
  
  Updated the __ACTION_RULE__ to not return its action command output as a single string but instead split it into a list of output lines. This allows Jam code using this output to work correctly independently of what newline character combinations are in use. This was causing problems with Boost Build unit tests which can now be updated to pass.
  
  Consequences & checks:
    * Final __ACTION_RULE__ rule parameter has changed from output ? to output-lines *.
    * Updated corresponding Jam documentation.
    * Updated the all related Boost Build code.
    * No code on the Boost trunk uses this rule except for Boost Build itself.
................
  r42630 | jurko | 2008-01-08 20:15:35 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Fixed a failing test by making it access action output using the __ACTION_RULE__ rule so it would not be affected by the level of debug output given by Boost Build/Jam.
................
  r42631 | jurko | 2008-01-08 20:30:25 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Fixed a failing test by making it access its action results using the __ACTION_RULE__ rule. Now it works with the default debug level settings (i.e. no action output displayed).
................
  r42632 | grafik | 2008-01-08 20:31:58 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Revert various changes that break backward compatibility, and also some minor edits.
................
  r42633 | grafik | 2008-01-08 20:34:12 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Revert various changes that break backward compatibility, and also some minor edits.
................
  r42637 | jurko | 2008-01-09 06:36:37 -0800 (Wed, 09 Jan 2008) | 1 line
  
  Updated the test so it passes on Windows. Had to change it to enable action output logging and compensate for the fact that now action names are sent to the output as well. Minor stylistic changes.
................
  r42639 | jurko | 2008-01-09 09:03:45 -0800 (Wed, 09 Jan 2008) | 1 line
  
  Updated the test so it passes on Windows. Had to change it to enable action output logging and compensate for the fact that now action names are sent to the output as well. Minor stylistic changes.
................
  r42641 | eric_niebler | 2008-01-09 12:21:51 -0800 (Wed, 09 Jan 2008) | 1 line
  
  copy the png files to where fop will look for them when building pdf
................
  r42642 | eric_niebler | 2008-01-09 12:33:05 -0800 (Wed, 09 Jan 2008) | 1 line
  
  fix more signed/unsigned warnings
................
  r42644 | turkanis | 2008-01-09 15:13:57 -0800 (Wed, 09 Jan 2008) | 1 line
  
  marked stream_offset_64bit_test as an expected failure on vacpp (iostreams)
................
  r42645 | turkanis | 2008-01-09 15:16:17 -0800 (Wed, 09 Jan 2008) | 1 line
  
  replaced 2 occurrences of the identifier 'restrict' with BOOST_IOSTREAMS_RESTRICT
................
  r42646 | turkanis | 2008-01-09 19:27:51 -0800 (Wed, 09 Jan 2008) | 1 line
  
  added expected failures for Sun and IBM; removed a Borland intermittent failure; removed some obsolete toolsets (iostreams)
................
  r42647 | troyer | 2008-01-10 01:49:16 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Optimizations for Boost.MPI
................
  r42648 | troyer | 2008-01-10 03:54:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Undid backward-compatibility breaking change in pair serialization
................
  r42651 | johnmaddock | 2008-01-10 04:10:37 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Apply patch from Issue #1187.
................
  r42657 | anthonyw | 2008-01-10 06:19:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  removed references to NULL
................
  r42658 | turkanis | 2008-01-10 10:50:19 -0800 (Thu, 10 Jan 2008) | 1 line
  
  marked up two moe expected failures for sun-5.7-5.8 (iostreams)
................
  r42664 | bgubenko | 2008-01-10 13:13:42 -0800 (Thu, 10 Jan 2008) | 1 line
  
  marked iostreams library compose_test for gcc-3.4.6_linux_ia64 : linking exceeds 10 min. limit
................
  r42665 | danieljames | 2008-01-10 14:25:35 -0800 (Thu, 10 Jan 2008) | 2 lines
  
  Initialise svnmerge for merging changes for unordered.
................
  r42666 | danieljames | 2008-01-10 14:30:46 -0800 (Thu, 10 Jan 2008) | 6 lines
  
  Merge latest unordered developments:
  
  Make simple_test test a little more.
  Use doubles for calculating max load factor.
  Some workarounds, mostly for Borland and running the tests.
................
  r42670 | turkanis | 2008-01-10 16:02:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev, revisions 42645=42660; fix for Intel-darwin; removed dependence of file_descriptor_test and mapped_file_test on library boost_iostreams
................
  r42672 | turkanis | 2008-01-10 17:35:46 -0800 (Thu, 10 Jan 2008) | 1 line
  
  force static runtime-link for intel-darwin
................
  r42674 | johnmaddock | 2008-01-11 01:55:43 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Fix bugs reported by Will Drewry: certain invalid regexes can cause the library to access invalid memory, changed to ensure that the correct exception is thrown long before this happens.
................
  r42676 | jurko | 2008-01-11 05:44:51 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Removed the manual boost-build.jam file creation since that file already exists in the SVN repository and this only overwrote it with the same content minus the copyright notice. Removed a reference to the no longer existing boost_build_v2.html file.
................
  r42677 | johnmaddock | 2008-01-11 05:48:57 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Update for Intel-10.1.
................
  r42684 | turkanis | 2008-01-11 11:12:22 -0800 (Fri, 11 Jan 2008) | 1 line
  
  another attempt to fix linking for compression tests on intel-darwin
................
  r42688 | turkanis | 2008-01-11 14:58:21 -0800 (Fri, 11 Jan 2008) | 1 line
  
  merged changes from iostreams_dev; fixes for IBM and more documentation
................
  r42689 | turkanis | 2008-01-11 18:45:55 -0800 (Fri, 11 Jan 2008) | 1 line
  
  more detailed note for vacpp (iostreams)
................
  r42691 | eric_niebler | 2008-01-11 22:43:28 -0800 (Fri, 11 Jan 2008) | 1 line
  
  new style transforms a-la proto v3
................
  r42693 | nesotto | 2008-01-12 04:38:57 -0800 (Sat, 12 Jan 2008) | 1 line
  
  doc fixes
................
  r42698 | danieljames | 2008-01-12 06:43:40 -0800 (Sat, 12 Jan 2008) | 9 lines
  
  Merge the latest unordered changes. These are concerned with getting the tests
  working on more compilers. The biggest change is that the exception tests have
  been changed to use a very simple exception testing mechanism on top of
  lightweight_test. This was because Boost.Test exception testing isn't working
  on several platforms. I'm trying to set this up so that I can use Boost.Test on
  compilers which it completely supports, and lightweight test on others.
  Boost.Test tests more than my simple exception testing code ever will so it's
  worth using where I can.
................
  r42700 | eric_niebler | 2008-01-12 09:09:17 -0800 (Sat, 12 Jan 2008) | 1 line
  
  missing includes
................
  r42701 | eric_niebler | 2008-01-12 09:40:40 -0800 (Sat, 12 Jan 2008) | 1 line
  
  more msvc-7.1-friendly default_context implementation, more missing headers
................
  r42706 | turkanis | 2008-01-12 12:19:42 -0800 (Sat, 12 Jan 2008) | 1 line
  
  corrected use of feature detection macros for AIX; simplified implementation slightly; updated docs
................
  r42707 | turkanis | 2008-01-12 12:20:35 -0800 (Sat, 12 Jan 2008) | 1 line
  
  removed intel-darwin sepcific code, since it didn't work
................
  r42708 | eric_niebler | 2008-01-12 13:19:45 -0800 (Sat, 12 Jan 2008) | 1 line
  
  port toy_spirit example to proto v3
................
  r42713 | turkanis | 2008-01-12 23:17:07 -0800 (Sat, 12 Jan 2008) | 1 line
  
  improved docs
................
  r42715 | nesotto | 2008-01-13 03:37:41 -0800 (Sun, 13 Jan 2008) | 1 line
  
  fixed #if to #ifdef
................
  r42722 | bgubenko | 2008-01-13 07:52:12 -0800 (Sun, 13 Jan 2008) | 1 line
  
  better note for iostreams library test compose_test on gcc-3.4.6_linux_ia64
................
  r42723 | bgubenko | 2008-01-13 08:12:37 -0800 (Sun, 13 Jan 2008) | 1 line
  
  marked up random library test random_test for gcc-3.4.6_linux_ia64
................
  r42724 | danieljames | 2008-01-13 08:19:26 -0800 (Sun, 13 Jan 2008) | 3 lines
  
  Merge in latest changes to Boost.Unordered. Some compiler workarounds and
  starting to clean up the tests a little.
................
  r42729 | eric_niebler | 2008-01-13 11:39:54 -0800 (Sun, 13 Jan 2008) | 1 line
  
  work around msvc-7.1 bug
................
  r42741 | eric_niebler | 2008-01-13 13:56:56 -0800 (Sun, 13 Jan 2008) | 1 line
  
  boost template instantiation depth on darwin
................
  r42745 | johnmaddock | 2008-01-14 01:46:12 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Ooops, fix broken escape sequence.
................
  r42747 | johnmaddock | 2008-01-14 01:58:36 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Fix documentation typos.
................
  r42750 | chris_kohlhoff | 2008-01-14 05:13:35 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Fix concept name in comment.
................
  r42751 | johnmaddock | 2008-01-14 05:17:09 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Patch regex concept checks and TR1 library to work with VC9 + MS TR1 feature pack.
................
  r42752 | chris_kohlhoff | 2008-01-14 05:20:06 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Add missing broken pipe error.
................
  r42753 | chris_kohlhoff | 2008-01-14 05:21:37 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Don't include sys/time.h when compiling with aCC, as that header does not
  supply pselect(), which is needed for HP-UX/aCC to work correctly.
................
  r42754 | chris_kohlhoff | 2008-01-14 05:22:21 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Disable noisy and incorrect /Wp64 warnings generated by MSVC.
................
  r42755 | chris_kohlhoff | 2008-01-14 05:24:28 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Don't call epoll_wait/kevent if there are no old operations (where old means
  added prior to the last epoll_wait/kevent call) needing to be demultiplexed.
................
  r42756 | chris_kohlhoff | 2008-01-14 05:25:24 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Silence some integer truncation warnings.
................
  r42758 | chris_kohlhoff | 2008-01-14 05:27:52 -0800 (Mon, 14 Jan 2008) | 8 lines
  
  Silence some integer truncation warnings.
  
  Only perform the windows-bug workaround where we use a short timeout with
  GetQueuedCompletionStatus from one thread, i.e. the timer thread.
  
  Keep track of the number of OVERLAPPED-derived operations to ensure that
  they all get cleaned up when the io_service is destroyed.
................
  r42759 | chris_kohlhoff | 2008-01-14 05:29:08 -0800 (Mon, 14 Jan 2008) | 5 lines
  
  Check for truncation when converting buffer size from size_t to openssl's
  int argument.
  
  Try to fix possible thread-safety issues in SSL wrapper.
................
  r42766 | eric_niebler | 2008-01-14 08:49:32 -0800 (Mon, 14 Jan 2008) | 1 line
  
  register mpl::bool_ with typeof
................
  r42767 | dgregor | 2008-01-14 09:01:26 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Improved suggestion for dealing with Qt MOC, from Niels Dekker
................
  r42771 | niels_dekker | 2008-01-14 10:17:30 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Documented value_init workaround to compiler issues, added new introduction, updated to 2003 edition of C++ Standard -- reviewed by Fernando Cacciola
................
  r42773 | guwi17 | 2008-01-14 11:04:43 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  - fixed typo
................
  r42776 | eric_niebler | 2008-01-14 12:26:58 -0800 (Mon, 14 Jan 2008) | 1 line
  
  add skip(), for specifying a skip regex
................
  r42778 | turkanis | 2008-01-14 12:47:17 -0800 (Mon, 14 Jan 2008) | 1 line
  
  overhaul of dual_use filters: close() is now called just once; suppressed Borland/Dinkumware warnings in mapped_file.hpp
................
  r42779 | niels_dekker | 2008-01-14 13:46:20 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Minor "beautifications" of value_init documentation, inc. placing references in order of appearance
................
  r42780 | lbourdev | 2008-01-14 14:06:07 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Changed size_t to std::size_t
................
  r42781 | lbourdev | 2008-01-14 15:25:10 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  GIL: Changing size_t to std::size_t
................
  r42788 | eric_niebler | 2008-01-14 22:46:39 -0800 (Mon, 14 Jan 2008) | 1 line
  
  code clean-up, begin updating the transform section in proto's docs
................
  r42789 | eric_niebler | 2008-01-14 23:46:51 -0800 (Mon, 14 Jan 2008) | 1 line
  
  try disabling iterator debugging for intel-win toolset
................
  r42797 | t_schwinger | 2008-01-15 11:46:10 -0800 (Tue, 15 Jan 2008) | 3 lines
  
  adds missing #include
................
  r42798 | niels_dekker | 2008-01-15 11:53:28 -0800 (Tue, 15 Jan 2008) | 1 line
  
  value_init doc + test: Added revision date.
................
  r42801 | jurko | 2008-01-15 13:13:52 -0800 (Tue, 15 Jan 2008) | 1 line
  
  Minor stylistic comment changes. Removed trailing spaces.
................
  r42804 | eric_niebler | 2008-01-15 14:06:51 -0800 (Tue, 15 Jan 2008) | 1 line
  
  document call<>, make<> and bind<>
................
  r42807 | turkanis | 2008-01-15 14:54:40 -0800 (Tue, 15 Jan 2008) | 1 line
  
  rewrote treatment of result_of in terms of a new (hopefully temporary) config macro BOOST_IOSTREAMS_NO_RESULT_OF; fixed docs
................
  r42811 | turkanis | 2008-01-15 17:14:04 -0800 (Tue, 15 Jan 2008) | 1 line
  
  reverted last change except for doc fixes; regression was result of test runner's local patch
................
  r42813 | turkanis | 2008-01-15 17:16:36 -0800 (Tue, 15 Jan 2008) | 1 line
  
  botched last commit
................
  r42814 | djenkins | 2008-01-15 22:39:34 -0800 (Tue, 15 Jan 2008) | 1 line
  
  missing include
................
  r42815 | niels_dekker | 2008-01-16 01:35:12 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Added convenience class initialized_value, as announced at http://article.gmane.org/gmane.comp.lib.boost.devel/169833
................
  r42816 | niels_dekker | 2008-01-16 01:37:25 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Added test and documentation for convenience class initialized_value, that was added with changeset [42815]
................
  r42817 | chris_kohlhoff | 2008-01-16 05:46:01 -0800 (Wed, 16 Jan 2008) | 2 lines
  
  Set the openssl callback function for getting a thread ID.
................
  r42818 | anthonyw | 2008-01-16 07:23:36 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Provide tss_cleanup_implemented as a dummy function on Windows CE to allow tests to run
................
  r42821 | t_schwinger | 2008-01-16 11:16:37 -0800 (Wed, 16 Jan 2008) | 3 lines
  
  works around MSVC7.1 problems (hopefully)
................
  r42822 | t_schwinger | 2008-01-16 11:17:09 -0800 (Wed, 16 Jan 2008) | 3 lines
  
  attempts to fix Borland regressions
................
  r42823 | eric_niebler | 2008-01-16 11:24:33 -0800 (Wed, 16 Jan 2008) | 1 line
  
  document when<> and is_callable<>
................
  r42825 | turkanis | 2008-01-16 12:46:56 -0800 (Wed, 16 Jan 2008) | 1 line
  
  replaced __IBMCPP__ with _AIX
................
  r42827 | turkanis | 2008-01-16 16:50:14 -0800 (Wed, 16 Jan 2008) | 1 line
  
  added pgi to toolsets expected to fail seekawble_file_test (iostreams)
................
  r42836 | eric_niebler | 2008-01-17 14:47:54 -0800 (Thu, 17 Jan 2008) | 1 line
  
  stl_iterator does better error handling
................
  r42837 | jurko | 2008-01-17 17:14:17 -0800 (Thu, 17 Jan 2008) | 1 line
  
  Stylistic changes. Removed trailing spaces. Removed empty lines. Corrected comment typos and wording.
................
  r42839 | eric_niebler | 2008-01-17 23:56:31 -0800 (Thu, 17 Jan 2008) | 1 line
  
  tweaks for better doxygen-ated output
................
  r42840 | eric_niebler | 2008-01-17 23:56:59 -0800 (Thu, 17 Jan 2008) | 1 line
  
  updated reference section
................
  r42841 | eric_niebler | 2008-01-17 23:58:48 -0800 (Thu, 17 Jan 2008) | 1 line
  
  add back reference section, document user-defined transforms
................
  r42843 | t_schwinger | 2008-01-18 06:37:41 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  makes member object support work with BCC
................
  r42851 | johnmaddock | 2008-01-18 08:56:57 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Add needed <iostream> include.
................
  r42852 | johnmaddock | 2008-01-18 09:05:35 -0800 (Fri, 18 Jan 2008) | 1 line
  
  We don't have a tr1::hash functor if the std lib is the Apache version.
................
  r42853 | hkaiser | 2008-01-18 09:56:53 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Wave: removed T_DEFINED token id from the library.
................
  r42855 | johnmaddock | 2008-01-18 10:18:17 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Needs to #include <cstring> in order to use std::memset.
................
  r42856 | danieljames | 2008-01-18 11:35:55 -0800 (Fri, 18 Jan 2008) | 2 lines
  
  Merge in some changes to the unordered tests.
................
  r42857 | t_schwinger | 2008-01-18 12:05:56 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  simplifies function_types markup
................
  r42858 | t_schwinger | 2008-01-18 12:52:06 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  attempts to fix BCB 5.9 regression in synthesis/mem_func_ptr_cv_ptr_to_this test
................
  r42859 | t_schwinger | 2008-01-18 13:06:44 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  attempts to fix pathscale failure 
................
  r42868 | niels_dekker | 2008-01-19 12:21:18 -0800 (Sat, 19 Jan 2008) | 1 line
  
  value_init_test now works around Borland 5.82 bug ("Error E2015: Ambiguity..." when using initialized_value), that is fixed with a newer compiler version
................
  r42869 | niels_dekker | 2008-01-19 12:52:04 -0800 (Sat, 19 Jan 2008) | 1 line
  
  Removed local named variable from     value_initialized::operator=, as Fernando Cacciola suggested me to avoid unnecessary named variables.
................
  r42873 | bemandawes | 2008-01-19 18:01:35 -0800 (Sat, 19 Jan 2008) | 1 line
  
  Remove extraneous defines since they are inherited from library build Jamfile
................
  r42877 | johnmaddock | 2008-01-20 01:42:35 -0800 (Sun, 20 Jan 2008) | 1 line
  
  Add include of <eh.h> for msvc.
................
  r42878 | igaztanaga | 2008-01-20 03:54:47 -0800 (Sun, 20 Jan 2008) | 5 lines
  
  Updated Interprocess and Intrusive:
  
  -> Added linear slist to intrusive
  -> Updated all allocators to version 2 allocators in Interprocess
  -> Optimized rbtree_best_fit size overhead to 1 std:size_t.
................
  r42881 | danieljames | 2008-01-20 09:37:21 -0800 (Sun, 20 Jan 2008) | 1 line
  
  Include <new> to get std::bad_alloc.
................
  r42882 | danieljames | 2008-01-20 10:55:57 -0800 (Sun, 20 Jan 2008) | 22 lines
  
  Merged revisions 42856-42881 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r42880 | danieljames | 2008-01-20 16:10:43 +0000 (Sun, 20 Jan 2008) | 17 lines
    
    Simplify the tests a little:
    
    Add a parameter to random_values to control what sort of values it generates.
    This means that instead of using equivalent_object to test collisions (which
    was a total hack) we now just need another parameter.
    
    This requires some meta programming to act differently for maps and sets.
    Because of this pairs no longer need to be generated so remove the code for
    doing that (which doesn't work on some compilers).
    
    Remove the generator object, just call generate directly.
    
    Remove some of the tests using int containers, they didn't really add to
    anthing other than the compile time (some tests are timing out).
  ........
................
  r42884 | jurko | 2008-01-20 12:18:50 -0800 (Sun, 20 Jan 2008) | 5 lines
  
  Minor stylistic changes:
    * Removed trailing spaces.
    * Added a comment for code discovering the user's home-directories.
    * Removed a stale regex import.
    * Removed an old corpse 'identity' rule found inside the __test__ rule.
................
  r42890 | johnmaddock | 2008-01-21 01:41:17 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Only disable wide character support for HP aCC: for gcc the logic is already taken care of in libstdcpp3.hpp.
................
  r42897 | hkaiser | 2008-01-21 08:13:31 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Removed a duplicate entry.
................
  r42898 | rogeeff | 2008-01-21 09:02:53 -0800 (Mon, 21 Jan 2008) | 1 line
  
  changed output of booleans
................
  r42899 | johnmaddock | 2008-01-21 10:11:09 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Updated type traits library so that everything compiles with -Wall -pedantic with GCC.
................
  r42904 | davedeakins | 2008-01-21 11:38:44 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Don't include <eh.h> for WinCE (since WinCE does not have this header)
................
  r42906 | eric_niebler | 2008-01-21 12:39:35 -0800 (Mon, 21 Jan 2008) | 1 line
  
  minor clean-up
................
  r42909 | rogeeff | 2008-01-21 19:41:23 -0800 (Mon, 21 Jan 2008) | 1 line
  
  missing header
................
  r42911 | igaztanaga | 2008-01-22 08:49:22 -0800 (Tue, 22 Jan 2008) | 1 line
  
  Refactor some allocation code and fix instantiation problem in 64 bit platforms
................
  r42916 | eric_niebler | 2008-01-22 12:42:18 -0800 (Tue, 22 Jan 2008) | 1 line
  
  add concepts section to proto reference
................
  r42917 | hljin | 2008-01-22 14:10:48 -0800 (Tue, 22 Jan 2008) | 1 line
  
  GIL: fixed the problem with std::hex by adding #include <ios>
................
  r42918 | eric_niebler | 2008-01-22 18:23:15 -0800 (Tue, 22 Jan 2008) | 1 line
  
  proto works with boost 1.34.1
................
  r42929 | johnmaddock | 2008-01-23 08:08:44 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Applies fix for issue #1598: added missing #include.
................
  r42931 | igaztanaga | 2008-01-23 11:34:39 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Ticket #1593: [interprocess] 'streamoff' : is not a member of 'std'
................
  r42934 | andreas_huber69 | 2008-01-23 13:46:58 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Fixes #1594
................
  r42935 | eric_niebler | 2008-01-23 13:57:47 -0800 (Wed, 23 Jan 2008) | 1 line
  
  fix dependency issue in Jamfile
................
  r42938 | jano_gaspar | 2008-01-23 15:04:57 -0800 (Wed, 23 Jan 2008) | 1 line
  
  circular_buffer: updated documentation
................
  r42939 | eric_niebler | 2008-01-23 15:25:24 -0800 (Wed, 23 Jan 2008) | 1 line
  
  fix quickbook scanner to recognize the [import ...] block
................
  r42943 | danieljames | 2008-01-23 15:39:59 -0800 (Wed, 23 Jan 2008) | 60 lines
  
  Merged revisions 42882-42941 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ................
    r42887 | danieljames | 2008-01-20 21:32:04 +0000 (Sun, 20 Jan 2008) | 10 lines
    
    Merged revisions 42590-42664,42667-42697,42699-42723,42725-42855,42857-42881 via svnmerge from 
    https://svn.boost.org/svn/boost/trunk
    
    ........
      r42881 | danieljames | 2008-01-20 17:37:21 +0000 (Sun, 20 Jan 2008) | 1 line
      
      Include <new> to get std::bad_alloc.
    ........
  ................
    r42892 | danieljames | 2008-01-21 13:03:16 +0000 (Mon, 21 Jan 2008) | 1 line
    
    On some compilers the Rogue Wave/Apache stdcxx library doesn't have the normal std::distance, but instead has a variant that takes the result as the third parameter so it doesn't have to work out the type from the iterator.
  ................
    r42893 | danieljames | 2008-01-21 13:07:58 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Fix a typo in the last commit.
  ................
    r42895 | danieljames | 2008-01-21 13:33:29 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Remove tabs from the last checkin.
  ................
    r42896 | danieljames | 2008-01-21 15:51:40 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Use Boost config to tell when we have a std::distance function. Also, no need for a macro.
  ................
    r42908 | danieljames | 2008-01-21 21:37:04 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Use boost::long_long_type and boost::ulong_long_type.
  ................
    r42921 | danieljames | 2008-01-23 11:43:35 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Remove some tabs.
  ................
    r42922 | danieljames | 2008-01-23 11:46:28 +0000 (Wed, 23 Jan 2008) | 2 lines
    
    Add missing include. Refs #1596
  ................
    r42923 | danieljames | 2008-01-23 11:52:47 +0000 (Wed, 23 Jan 2008) | 2 lines
    
    Always use void const* for the second parameter of allocate. Refs #1596.
  ................
    r42936 | danieljames | 2008-01-23 22:22:16 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Use Boost style library name in the documentation.
  ................
    r42937 | danieljames | 2008-01-23 22:22:32 +0000 (Wed, 23 Jan 2008) | 1 line
    
    More tabs.
  ................
    r42941 | danieljames | 2008-01-23 23:35:01 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Fix all the allocators.
  ................
................
  r42948 | turkanis | 2008-01-23 22:50:32 -0800 (Wed, 23 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42825-42947
................
  r42950 | t_schwinger | 2008-01-24 10:56:27 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  correctsbroken compiler support for MPL
................
  r42951 | eric_niebler | 2008-01-24 13:06:23 -0800 (Thu, 24 Jan 2008) | 1 line
  
  peeker optimization looks inside independent sub-expressions
................
  r42952 | nesotto | 2008-01-24 14:22:35 -0800 (Thu, 24 Jan 2008) | 1 line
  
  test of output iterators
................
  r42953 | nesotto | 2008-01-24 14:26:36 -0800 (Thu, 24 Jan 2008) | 1 line
  
  output iterator test
................
  r42954 | nesotto | 2008-01-24 14:27:27 -0800 (Thu, 24 Jan 2008) | 1 line
  
  output iterators for ptr_containers 
................
  r42957 | t_schwinger | 2008-01-24 16:26:16 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  simplifies preprocessing code
................
  r42958 | t_schwinger | 2008-01-24 16:28:15 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  touched
................
  r42960 | noel_belcourt | 2008-01-24 20:41:16 -0800 (Thu, 24 Jan 2008) | 6 lines
  
  Changed the -soname and -shared options in intel-darwin.jam
  to use -dynamiclib and -install_name, as done in darwin.jam.
  Apparently the Intel compilers on the Mac support the same 
  options as gcc for setting the internal dynamic library name.
................
  r42963 | nesotto | 2008-01-24 23:52:14 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming ...
................
  r42964 | nesotto | 2008-01-24 23:52:56 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming
................
  r42965 | nesotto | 2008-01-24 23:54:28 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming
................
  r42970 | turkanis | 2008-01-25 09:56:25 -0800 (Fri, 25 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42947-42962: fixed tickets 1003, 1139, 1140, 1149
................
  r42971 | noel_belcourt | 2008-01-25 11:52:47 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Fixed a typo to yesterdays patch.
................
  r42972 | dgregor | 2008-01-25 13:07:14 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Include <ios> to get std::boolalpha. Fixes #1586
................
  r42974 | igaztanaga | 2008-01-25 15:07:51 -0800 (Fri, 25 Jan 2008) | 4 lines
  
  1)Fixed gcc release mode warnings.
  2)Replaced throw with BOOST_RETHROW when BOOST_TRY is used.
  3)Fixed issues with singly linked lists
................
  r42976 | hkaiser | 2008-01-25 17:24:21 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Wave: Fixed a problem in flex_string::compare() (#include_next was non-functional).
................
  r42977 | hkaiser | 2008-01-25 17:36:20 -0800 (Fri, 25 Jan 2008) | 1 line
  
  Wave: Added new testcase.
................
  r42980 | hkaiser | 2008-01-25 17:44:32 -0800 (Fri, 25 Jan 2008) | 1 line
  
  Wave: Tweaked new testcase.
................
  r42982 | igaztanaga | 2008-01-26 03:52:25 -0800 (Sat, 26 Jan 2008) | 1 line
  
  Refactored common slist functions in a single class
................
  r42984 | noel_belcourt | 2008-01-26 10:35:59 -0800 (Sat, 26 Jan 2008) | 7 lines
  
  Fixes #416
  
  Fixed spelling of Jack Edmonds name and renamed files
  where necessary.  Updated the documentation as well.
  Tested changes by building/running tests in libs/graph/test.
................
  r42985 | noel_belcourt | 2008-01-26 10:51:28 -0800 (Sat, 26 Jan 2008) | 5 lines
  
  Fixes #640
  
  Corrected the mpl push_front html documentation.
................
  r42986 | eric_niebler | 2008-01-26 11:38:44 -0800 (Sat, 26 Jan 2008) | 1 line
  
  optimize repeated searches with patterns that have leading repeats
................
  r42987 | t_schwinger | 2008-01-26 13:50:14 -0800 (Sat, 26 Jan 2008) | 3 lines
  
  attempts to allow some preprocessing with VACPP (IBM)
................
  r42988 | noel_belcourt | 2008-01-26 14:21:57 -0800 (Sat, 26 Jan 2008) | 5 lines
  
  Fixes #1539
  
  Fixed typo in the random documentation.
................
  r42989 | noel_belcourt | 2008-01-26 15:06:24 -0800 (Sat, 26 Jan 2008) | 6 lines
  
  Fixes #965
  
  Patched the XML and will check to ensure the html
  page reflects this change.
................
  r42990 | eric_niebler | 2008-01-26 21:56:46 -0800 (Sat, 26 Jan 2008) | 1 line
  
  updated vcproj
................
  r42991 | eric_niebler | 2008-01-26 21:57:08 -0800 (Sat, 26 Jan 2008) | 1 line
  
  fix typo
................
  r42992 | johnmaddock | 2008-01-27 10:43:35 -0800 (Sun, 27 Jan 2008) | 1 line
  
  Extended leading repeat optimization to more cases.
................
  r42997 | vladimir_prus | 2008-01-28 09:59:27 -0800 (Mon, 28 Jan 2008) | 1 line
  
  Correct speliing of --build-dir in --help output
................
  r43000 | eric_niebler | 2008-01-28 12:03:41 -0800 (Mon, 28 Jan 2008) | 1 line
  
  update acknowledgement of john maddock
................
  r43001 | bgubenko | 2008-01-28 13:27:13 -0800 (Mon, 28 Jan 2008) | 1 line
  
  marked 2 asio library tests for gcc-4.2.1_hpux_ia64 (HP-UX 11.23 with gcc)
................
  r43002 | eric_niebler | 2008-01-28 14:55:30 -0800 (Mon, 28 Jan 2008) | 1 line
  
  doc more concepts, misc clean-up
................
  r43003 | eric_niebler | 2008-01-28 14:56:46 -0800 (Mon, 28 Jan 2008) | 1 line
  
  proto doxygen comments, misc clean-up
................
  r43006 | eric_niebler | 2008-01-28 18:20:45 -0800 (Mon, 28 Jan 2008) | 1 line
  
  more proto doxygen comments, update copyright
................
  r43007 | vladimir_prus | 2008-01-28 22:28:09 -0800 (Mon, 28 Jan 2008) | 1 line
  
  Retain top-level boost-build.jam
................
  r43008 | vladimir_prus | 2008-01-28 22:40:06 -0800 (Mon, 28 Jan 2008) | 4 lines
  
  Disable relinking when <target-os> is either windows or cygwin.
  
  Fixes #1062.
................
  r43009 | eric_niebler | 2008-01-28 23:03:03 -0800 (Mon, 28 Jan 2008) | 1 line
  
  add tests for deep_copy, make_expr, unpack_expr; fix bugs; update more copyrights
................
  r43012 | djenkins | 2008-01-29 08:41:12 -0800 (Tue, 29 Jan 2008) | 1 line
  
  fix typo
................
  r43013 | djenkins | 2008-01-29 08:43:51 -0800 (Tue, 29 Jan 2008) | 1 line
  
  update copyright and misc cleanup
................
  r43014 | bgubenko | 2008-01-29 09:47:01 -0800 (Tue, 29 Jan 2008) | 1 line
  
  marked interprocess library unusable on gcc-4.2.1_hpux_ia64 (until it is ported to HP-UX platform)
................
  r43016 | eric_niebler | 2008-01-29 13:02:52 -0800 (Tue, 29 Jan 2008) | 1 line
  
  make_expr and unpack_expr improvements, fix scary transform::arg_c bug
................
  r43018 | djenkins | 2008-01-29 19:39:02 -0800 (Tue, 29 Jan 2008) | 1 line
  
  use skip directive to simplify example
................
  r43023 | eric_niebler | 2008-01-30 14:10:13 -0800 (Wed, 30 Jan 2008) | 1 line
  
  finally, a make_expr() I can live with
................
  r43024 | eric_niebler | 2008-01-30 14:26:34 -0800 (Wed, 30 Jan 2008) | 1 line
  
  regenerated boostbook reference
................
  r43025 | niels_dekker | 2008-01-30 14:42:23 -0800 (Wed, 30 Jan 2008) | 1 line
  
  value_init: Removed aligned_storage::address() calls, to improve TR1 compatibility, as confirmed by John Maddock. Added internal helper function, wrapper_address(), as discussed with Fernando.
................
  r43026 | eric_niebler | 2008-01-30 15:03:36 -0800 (Wed, 30 Jan 2008) | 1 line
  
  minor tweak to make_expr result_of return type calculation
................
  r43031 | eric_niebler | 2008-01-30 23:36:28 -0800 (Wed, 30 Jan 2008) | 1 line
  
  simplify make_expr.hpp, user docs for make_expr()
................
  r43035 | eric_niebler | 2008-01-31 10:44:17 -0800 (Thu, 31 Jan 2008) | 1 line
  
  minor tweak to fusion value_of and value_at for expressions, for better interop with proto::unpack_expr
................
  r43037 | vladimir_prus | 2008-01-31 11:47:12 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Build in MT mode (as long as wave links to boost.thread)
................
  r43038 | hkaiser | 2008-01-31 12:57:47 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: fixed expanding_function_like_macro()
................
  r43040 | eric_niebler | 2008-01-31 13:12:44 -0800 (Thu, 31 Jan 2008) | 1 line
  
  finish documentation for expression construction utilities
................
  r43041 | hkaiser | 2008-01-31 14:33:43 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: Added additional configuration possibility to allow control threading support.
................
  r43042 | hkaiser | 2008-01-31 14:48:56 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: Added additional configuration possibility to allow control threading support. Updated the documentation.
................
  r43043 | jurko | 2008-01-31 16:27:31 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Reverted changes made in rev 43038 which seem to have been committed by mistake and include some user specific settings in it local to the comitter's environment while this file is intended to be used as generic template for actual user-config.jam files and do nothing in case user does not specify his own settings there.
................
  r43044 | jurko | 2008-01-31 16:44:23 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Minor stylistic spacing changes. Remove trailing spaces.
................
  r43045 | jurko | 2008-01-31 16:46:50 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Corrected outputting native Windows paths so that it works correctly for absolute paths without the drive letter being explicitly specified, e.g. \aaa\bbb or /aaa/bbb.
................
  r43046 | jurko | 2008-01-31 17:49:16 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Added the missing end-of-line character when outputting DEBUG_SEARCH debug messages from file_build1(). This cleans up the -d+6 bjam output a lot.
................
  r43050 | eric_niebler | 2008-02-01 12:30:29 -0800 (Fri, 01 Feb 2008) | 1 line
  
  add future group example
................
  r43052 | noel_belcourt | 2008-02-01 18:41:23 -0800 (Fri, 01 Feb 2008) | 4 lines
  
  Fix a typo in pgi.jam that prevented shared libraries
  from being built correctly.
................
  r43054 | chris_kohlhoff | 2008-02-02 03:37:45 -0800 (Sat, 02 Feb 2008) | 4 lines
  
  Ensure that the workaround for the MSVC secure iterator problem is only
  used when compiling with MSVC. The workaround causes g++'s library debug
  mode to report errors due to the assignment from a singular iterator.
................
  r43055 | chris_kohlhoff | 2008-02-02 03:39:17 -0800 (Sat, 02 Feb 2008) | 2 lines
  
  Fix "possible loss of data" warning when building for Windows 2000 targets.
................
  r43056 | chris_kohlhoff | 2008-02-02 04:02:23 -0800 (Sat, 02 Feb 2008) | 3 lines
  
  The latest Windows SDKs don't support IPv6 when building for Windows 2000,
  so we need to use the SDK emulation in that case.
................
  r43057 | eric_niebler | 2008-02-02 04:27:16 -0800 (Sat, 02 Feb 2008) | 1 line
  
  port test to boost version 1.34.1
................
  r43061 | turkanis | 2008-02-02 14:10:46 -0800 (Sat, 02 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42962-43059: updated copyright notices
................
  r43080 | eric_niebler | 2008-02-03 10:40:03 -0800 (Sun, 03 Feb 2008) | 1 line
  
  fix bug found by L. Evans re: fusion and stateful function objects
................
  r43083 | johnmaddock | 2008-02-04 01:13:36 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Added missing file.
................
  r43085 | johnmaddock | 2008-02-04 01:17:35 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead file.
................
  r43087 | johnmaddock | 2008-02-04 01:20:46 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead files.
................
  r43089 | johnmaddock | 2008-02-04 01:23:28 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead files.
................
  r43094 | anthonyw | 2008-02-04 05:16:32 -0800 (Mon, 04 Feb 2008) | 1 line
  
  added test for duration overloads of timed_lock, and added missing implementation to win32 version
................
  r43101 | hkaiser | 2008-02-04 11:21:46 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Wave: trying to fix stdcxx_gcc regression.
................
  r43103 | matias | 2008-02-04 13:01:06 -0800 (Mon, 04 Feb 2008) | 1 line
  
  hooking --> additional information in html docs
................
  r43106 | eric_niebler | 2008-02-04 18:09:51 -0800 (Mon, 04 Feb 2008) | 1 line
  
  fleshing out evaluation.qbk, document transforms of if_, not_, and_ and or_
................
  r43107 | eric_niebler | 2008-02-04 21:33:12 -0800 (Mon, 04 Feb 2008) | 1 line
  
  eliminate warnings under msvc's -W4
................
  r43111 | eric_niebler | 2008-02-04 22:03:01 -0800 (Mon, 04 Feb 2008) | 1 line
  
  fix typo
................
  r43112 | marshall | 2008-02-05 08:07:19 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Fix typo (bug #1434)
................
  r43113 | marshall | 2008-02-05 08:15:35 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Applied patch (fixes bug #1307)
................
  r43117 | dgregor | 2008-02-05 12:51:23 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Fix add_vertex and add_vertices when the CSR graph has vertex properties
................
  r43118 | danieljames | 2008-02-05 12:57:02 -0800 (Tue, 05 Feb 2008) | 13 lines
  
  Merged revisions 42942-43116 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r42975 | danieljames | 2008-01-26 00:29:32 +0000 (Sat, 26 Jan 2008) | 1 line
    
    Typedef some types before using them, to make life easier for Borland.
  ........
    r43116 | danieljames | 2008-02-05 20:47:44 +0000 (Tue, 05 Feb 2008) | 1 line
    
    Some compilers and libraries combinations have problems with deques of non-assingable types. Using a list instead.
  ........
................
  r43120 | eric_niebler | 2008-02-05 13:07:31 -0800 (Tue, 05 Feb 2008) | 1 line
  
  add missing #include
................
  r43121 | bemandawes | 2008-02-05 18:01:46 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Add circular_buffer to the alphabetic list
................
  r43125 | t_schwinger | 2008-02-06 05:00:08 -0800 (Wed, 06 Feb 2008) | 3 lines
  
  attempts to make synthesis metafunctions work with sun compiler
................
  r43129 | danieljames | 2008-02-06 11:02:38 -0800 (Wed, 06 Feb 2008) | 2 lines
  
  In the boostbook navbar, link FAQ and people to the website.
................
  r43130 | eric_niebler | 2008-02-06 11:57:51 -0800 (Wed, 06 Feb 2008) | 1 line
  
  untabify
................
  r43132 | nesotto | 2008-02-06 14:46:19 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection report
................
  r43133 | nesotto | 2008-02-06 14:46:31 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection report
................
  r43134 | eric_niebler | 2008-02-06 14:57:57 -0800 (Wed, 06 Feb 2008) | 1 line
  
  add handy get() accessors on literal<> wrapper
................
  r43135 | nesotto | 2008-02-06 15:12:21 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection tool
................
  r43136 | eric_niebler | 2008-02-06 16:05:01 -0800 (Wed, 06 Feb 2008) | 1 line
  
  reasonably complete user docs for expression evaluation
................
  r43138 | eric_niebler | 2008-02-07 00:06:29 -0800 (Thu, 07 Feb 2008) | 1 line
  
  tweaks for doxygen 1.5.4, document matches<>
................
  r43141 | johnmaddock | 2008-02-07 01:55:41 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Fix last checked version.
................
  r43143 | johnmaddock | 2008-02-07 02:03:16 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Remove tabs.
................
  r43145 | johnmaddock | 2008-02-07 02:13:31 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Fix min/max usage violation.
................
  r43147 | vladimir_prus | 2008-02-07 02:17:03 -0800 (Thu, 07 Feb 2008) | 2 lines
  
  Attempt to unbreak <library-file>
................
  r43148 | johnmaddock | 2008-02-07 02:24:29 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Added comment to suppress inspect warning.
................
  r43150 | johnmaddock | 2008-02-07 02:29:59 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Added fix for inspection report.
................
  r43152 | vladimir_prus | 2008-02-07 03:04:30 -0800 (Thu, 07 Feb 2008) | 4 lines
  
  Fix <framework> with no path.
  
  Patch from Jon Olsson.
................
  r43154 | bemandawes | 2008-02-07 05:22:34 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Remove obsolete CVS scripts, add 1.35.0 SVN scripts, beginning of docs page
................
  r43155 | nesotto | 2008-02-07 06:41:04 -0800 (Thu, 07 Feb 2008) | 6 lines
  
  
  iterator_range disables msvc warning 4996
      <http://svn.boost.org/trac/boost/ticket/1565>
  
  [range] sub_range assignment issue
      <http://svn.boost.org/trac/boost/ticket/1284> 
................
  r43156 | nesotto | 2008-02-07 06:46:19 -0800 (Thu, 07 Feb 2008) | 1 line
  
  test
................
  r43157 | joaquin | 2008-02-07 08:29:27 -0800 (Thu, 07 Feb 2008) | 1 line
  
  updated according to latest regression tests results, fixed a broken link, typo
................
  r43159 | turkanis | 2008-02-07 09:07:28 -0800 (Thu, 07 Feb 2008) | 1 line
  
  added missing 'self.' qualification
................
  r43165 | dgregor | 2008-02-07 13:08:09 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Support for non-blocking MPI operations in Python, from Andreas Kloeckner
................
  r43166 | dgregor | 2008-02-07 13:09:38 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Note addition of nonblocking operations to the Python interface
................
  r43171 | nesotto | 2008-02-08 01:58:35 -0800 (Fri, 08 Feb 2008) | 1 line
  
  silence of warnings for unused arguments
................
  r43175 | nesotto | 2008-02-08 07:25:01 -0800 (Fri, 08 Feb 2008) | 1 line
  
  missing ) fixed
................
  r43176 | noel_belcourt | 2008-02-08 08:32:35 -0800 (Fri, 08 Feb 2008) | 14 lines
  
  Force PPC Darwin to use fork instead of vfork.  This change
  requires both the parent and child process to explicitly set
  the process group id. Vfork guarantees the child process 
  runs to the exec before it releases the parent process.  
  Now that we use fork instead of vfork, it's possible for the 
  parent to wait on the child process without having the child 
  setpgid on itself.  This eliminates spurious hangs on ppc
  darwin caused by either a race condition between vfork and
  execvp, or a bug in the vfork implementation.
  
  Added a test to ensure we don't try to read from the
  stderr pipe descriptor if the descriptor's not valid.
................
  r43177 | eric_niebler | 2008-02-08 09:11:57 -0800 (Fri, 08 Feb 2008) | 1 line
  
  reserve some c_type bits for dinkumware on windows, fixes #1625
................
  r43179 | noel_belcourt | 2008-02-08 09:53:50 -0800 (Fri, 08 Feb 2008) | 13 lines
  
  I've added the -single_module option to the intel-darwin.link.dll
  action to fix this linker error when linking dylibs:
  
  ld: common symbols not allowed with MH_DYLIB output format with the -multi_module option
  boost/bin.v2/libs/system/build/intel-darwin-9.1/debug/macosx-version-10.4/error_code.o 
    definition of common __ZGVZNK5boost6system14error_category7messageEiE1s (size 16)
  boost/bin.v2/libs/system/build/intel-darwin-9.1/debug/macosx-version-10.4/error_code.o 
    definition of common __ZZNK5boost6system14error_category7messageEiE1s (size 16)
  
  though I would note that the common symbols problem occurs in a number of
  other libraries (test, graph, spirit, ...) as well.
................
  r43188 | danieljames | 2008-02-09 04:29:02 -0800 (Sat, 09 Feb 2008) | 2 lines
  
  Fix a link in the intrusive redirect.
................
  r43189 | danieljames | 2008-02-09 04:37:00 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix another redirect link.
................
  r43190 | danieljames | 2008-02-09 04:38:19 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Update link to Jamfile, to link to the version 2 jamfile.
................
  r43191 | danieljames | 2008-02-09 04:39:06 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix a link.
................
  r43192 | danieljames | 2008-02-09 04:45:32 -0800 (Sat, 09 Feb 2008) | 2 lines
  
  Add a forwarding header for hash/custom.html as Boost.Bimap links to it.
................
  r43193 | danieljames | 2008-02-09 05:02:45 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix the link to the license.
................
  r43199 | eric_niebler | 2008-02-09 12:32:27 -0800 (Sat, 09 Feb 2008) | 1 line
  
  more doxygen comments, const-correctness tweak for fusion::at() on proto expression
................
  r43200 | eric_niebler | 2008-02-09 12:34:33 -0800 (Sat, 09 Feb 2008) | 1 line
  
  document how to access children of proto expressions
................
  r43204 | eric_niebler | 2008-02-09 22:57:24 -0800 (Sat, 09 Feb 2008) | 1 line
  
  fix oops in proto fusion interface
................
  r43205 | eric_niebler | 2008-02-09 23:02:54 -0800 (Sat, 09 Feb 2008) | 1 line
  
  suppress msvc warning
................
  r43206 | danieljames | 2008-02-10 01:55:03 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Fix some broken links.
................
  r43207 | vladimir_prus | 2008-02-10 05:13:41 -0800 (Sun, 10 Feb 2008) | 4 lines
  
  Tolerate argc being zero.
  
  Patch from C. K. Jester-Young.
................
  r43209 | danieljames | 2008-02-10 06:56:22 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Link to people pages on the website, as they've been removed from the download.
................
  r43210 | danieljames | 2008-02-10 07:02:17 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Point links to the pages that used to be in 'more' to the site.
................
  r43212 | danieljames | 2008-02-10 08:10:16 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Fix links on the home page as well.
................
  r43213 | danieljames | 2008-02-10 08:21:22 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Generated documentation which is no longer generated.
................
  r43220 | eric_niebler | 2008-02-10 19:48:41 -0800 (Sun, 10 Feb 2008) | 1 line
  
  include config.hpp and workaround.hpp before uses of BOOST_WORKAROUND and BOOST_MSVC
................
  r43221 | chris_kohlhoff | 2008-02-11 05:59:44 -0800 (Mon, 11 Feb 2008) | 2 lines
  
  Need to define _XOPEN_SOURCE_EXTENDED when compiling for HP-UX.
................
  r43226 | djenkins | 2008-02-11 12:49:19 -0800 (Mon, 11 Feb 2008) | 1 line
  
  cleanup using local<> and skip()
................
  r43239 | turkanis | 2008-02-12 21:43:39 -0800 (Tue, 12 Feb 2008) | 1 line
  
  fixed return value of read(), to correctly handle eof
................
  r43240 | turkanis | 2008-02-12 21:47:44 -0800 (Tue, 12 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43059-43238: better debug output for mapped file; fixed large_file_test.cpp under UNICODE on Windows
................
  r43241 | turkanis | 2008-02-13 11:38:52 -0800 (Wed, 13 Feb 2008) | 1 line
  
  added markup for stdcxx failures (iostreams)
................
  r43243 | turkanis | 2008-02-13 11:42:10 -0800 (Wed, 13 Feb 2008) | 1 line
  
  switched from <wchar.h> to <cwchar>, for stdcxx (which is conforming in this case)
................
  r43246 | matias | 2008-02-14 09:33:12 -0800 (Thu, 14 Feb 2008) | 1 line
  
  remove local admonitions
................
  r43247 | matias | 2008-02-14 09:43:52 -0800 (Thu, 14 Feb 2008) | 1 line
  
  optional docs fixes
................
  r43248 | matias | 2008-02-14 09:44:21 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect optional docs to new version
................
  r43251 | matias | 2008-02-14 10:08:16 -0800 (Thu, 14 Feb 2008) | 1 line
  
  conversion docs fixes
................
  r43252 | matias | 2008-02-14 10:09:34 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect to new conversion docs
................
  r43253 | matias | 2008-02-14 10:19:34 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect optional and numeric/conversion docs to new version
................
  r43254 | matias | 2008-02-14 11:03:55 -0800 (Thu, 14 Feb 2008) | 1 line
  
  bimap doc fixes
................
  r43255 | matias | 2008-02-14 11:05:04 -0800 (Thu, 14 Feb 2008) | 1 line
  
  fix tabs in files
................
  r43256 | matias | 2008-02-14 11:22:15 -0800 (Thu, 14 Feb 2008) | 1 line
  
  fix tabs in files
................
  r43260 | matias | 2008-02-14 13:24:11 -0800 (Thu, 14 Feb 2008) | 1 line
  
  add missing images
................
  r43262 | hkaiser | 2008-02-14 14:01:54 -0800 (Thu, 14 Feb 2008) | 1 line
  
  Fixed a whitespace insertion glitch, where whitespace got inserted unconditionally between two operators even if one of these was a comma.
................
  r43264 | hkaiser | 2008-02-14 15:52:33 -0800 (Thu, 14 Feb 2008) | 1 line
  
  Wave: More fixes to whitespace insertion engine.
................
  r43266 | hkaiser | 2008-02-15 06:35:36 -0800 (Fri, 15 Feb 2008) | 1 line
  
  Wave: More fixes to whitespace insertion engine.
................
  r43269 | pdimov | 2008-02-15 10:40:36 -0800 (Fri, 15 Feb 2008) | 1 line
  
  Added support for &&, ||
................
  r43272 | andreas_huber69 | 2008-02-16 02:13:08 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Updated statechart markup
................
  r43274 | andreas_huber69 | 2008-02-16 02:19:49 -0800 (Sat, 16 Feb 2008) | 2 lines
  
  Silenced GCC 4.0.1 warning (patch supplied by Euan)
  <http://thread.gmane.org/gmane.comp.lib.boost.devel/171071>
................
  r43280 | jurko | 2008-02-16 08:50:42 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Corrected comments related to the allowed linker & linker-type values. Minor stylistic changes.
................
  r43281 | jurko | 2008-02-16 08:53:33 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Added support for compiling C++ programs without RTTI support using the gcc toolset.
................
  r43282 | jurko | 2008-02-16 09:03:54 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Made the msvc toolset always explicitly enable or disable rtti support based on the <rtti> feature value instead of only setting it if <rtti>on and depending on it being disabled by default. The original behaviour did not work well with msvc 8.0 for which there was not way to disable rtti support as that compiler enables rtti support by default.
................
  r43283 | bemandawes | 2008-02-16 18:01:32 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Show output of example program
................
  r43290 | hkaiser | 2008-02-17 08:45:08 -0800 (Sun, 17 Feb 2008) | 1 line
  
  Wave: Extended a workaround to newest Intel compiler version (Linux V10.1)
................
  r43292 | nesotto | 2008-02-17 08:49:38 -0800 (Sun, 17 Feb 2008) | 1 line
  
  support for comparinson operators
................
  r43293 | nesotto | 2008-02-17 08:50:02 -0800 (Sun, 17 Feb 2008) | 1 line
  
  support for comparison operators
................
  r43294 | hkaiser | 2008-02-17 09:00:20 -0800 (Sun, 17 Feb 2008) | 1 line
  
  Wave: Fixed test cases to reflect recent changes to whitespace insertion.
................
  r43296 | eric_niebler | 2008-02-17 12:53:18 -0800 (Sun, 17 Feb 2008) | 1 line
  
  proto documentation improvements
................
  r43299 | turkanis | 2008-02-17 21:48:13 -0800 (Sun, 17 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43243-43298: overhaul of category_of and close(): stringstream is now dual_seekable; standard file streams and string streams are closable; public Boost.Iostreams streams and streambufs are closable; close() pops filtering streams and streambufs
................
  r43300 | eric_niebler | 2008-02-17 22:16:27 -0800 (Sun, 17 Feb 2008) | 1 line
  
  remove dependence on boost.lambda, make numeric function objects work with std binders
................
  r43301 | chris_kohlhoff | 2008-02-18 05:31:26 -0800 (Mon, 18 Feb 2008) | 2 lines
  
  Fix printing of error messages.
................
  r43302 | chris_kohlhoff | 2008-02-18 05:33:23 -0800 (Mon, 18 Feb 2008) | 2 lines
  
  Only define _XOPEN_SOURCE_EXTENDED when building with gcc on HP-UX.
................
  r43303 | chris_kohlhoff | 2008-02-18 05:35:15 -0800 (Mon, 18 Feb 2008) | 3 lines
  
  Add missing #include of socket_types.hpp needed for the SSL unit tests
  to compile successfully on Windows.
................
  r43306 | eric_niebler | 2008-02-18 10:29:29 -0800 (Mon, 18 Feb 2008) | 1 line
  
  remove post_construct docs, fix link to boost.parameter library
................
  r43308 | niels_dekker | 2008-02-18 14:11:19 -0800 (Mon, 18 Feb 2008) | 1 line
  
  Fixed the assignment of value_initialized<T> for T being a C-style array. (The previous version would trigger a compile error in this case.)
................
  r43309 | niels_dekker | 2008-02-18 14:13:21 -0800 (Mon, 18 Feb 2008) | 1 line
  
  Tested the assignment of value_initialized<T>, for T being a C-style array. Related to the fix of changeset [43308]
................
  r43310 | eric_niebler | 2008-02-18 15:03:23 -0800 (Mon, 18 Feb 2008) | 1 line
  
  some doxygen comments for proto/traits.hpp
................
  r43311 | eric_niebler | 2008-02-18 21:56:52 -0800 (Mon, 18 Feb 2008) | 1 line
  
  more proto documentation tweaks, remove unnecessary result_of::arg_c instantiation
................
  r43312 | eric_niebler | 2008-02-18 23:14:37 -0800 (Mon, 18 Feb 2008) | 1 line
  
  fix droppable accumulators
................
  r43314 | eric_niebler | 2008-02-18 23:33:30 -0800 (Mon, 18 Feb 2008) | 1 line
  
  darn, back out bad droppable changes
................
  r43316 | pdimov | 2008-02-19 05:18:58 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fixes #1590.
................
  r43317 | pdimov | 2008-02-19 06:01:13 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fixes #1444.
................
  r43318 | pdimov | 2008-02-19 06:26:36 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #398, as long as the macros BOOST_NO_STD_TYPEINFO and BOOST_NO_IOSTREAM are defined. I don't know how Boost.Config needs to be changed to autodetect eVC4 and set these on its own.
................
  r43319 | pdimov | 2008-02-19 06:51:10 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1641.
................
  r43320 | pdimov | 2008-02-19 06:59:28 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1646.
................
  r43321 | pdimov | 2008-02-19 07:09:10 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1642.
................
  r43322 | nesotto | 2008-02-19 07:10:05 -0800 (Tue, 19 Feb 2008) | 1 line
  
  fixed problem with operator()() when the value_type was abstract.
................
  r43323 | pdimov | 2008-02-19 07:40:58 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1643.
................
  r43325 | turkanis | 2008-02-19 11:34:07 -0800 (Tue, 19 Feb 2008) | 1 line
  
  stringstreams are no longer closable; the semantics of close() for these devices was illconsidered
................
  r43328 | turkanis | 2008-02-19 16:09:06 -0800 (Tue, 19 Feb 2008) | 1 line
  
  menu fix from iostreams_dev
................
  r43329 | turkanis | 2008-02-19 19:20:17 -0800 (Tue, 19 Feb 2008) | 1 line
  
  markup for pgi-7.0 (iostreams)
................
  r43330 | bemandawes | 2008-02-20 05:46:49 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add .z7 archive generation
................
  r43332 | grafik | 2008-02-20 09:32:09 -0800 (Wed, 20 Feb 2008) | 1 line
  
  New readme page for now standalone release.
................
  r43334 | grafik | 2008-02-20 11:15:16 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Fix link to getting started docs.
................
  r43335 | grafik | 2008-02-20 14:50:03 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add the <python.interpreter> to all requirements to allow other toolsets to use the currently configured python instead of relying on python being in the path.
................
  r43336 | grafik | 2008-02-20 15:01:43 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Use the configured python interpreter instead of assuming it's in the path.
................
  r43337 | grafik | 2008-02-20 15:03:28 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add missing, and assumed, white background for screen rendering.
................
  r43338 | grafik | 2008-02-20 15:26:58 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Doc cleanups.
................
  r43344 | eric_niebler | 2008-02-20 23:18:24 -0800 (Wed, 20 Feb 2008) | 1 line
  
  More Proto documentation
................
  r43346 | johnmaddock | 2008-02-21 02:37:59 -0800 (Thu, 21 Feb 2008) | 3 lines
  
  Fix typo in example.
  Added links to PDF versions of the docs.
  Regenerated all the docs to fix people links.
................
  r43347 | johnmaddock | 2008-02-21 03:53:59 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Update main overview page.
................
  r43349 | bemandawes | 2008-02-21 04:46:11 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Fix typo; .z7 should be .7z
................
  r43351 | johnmaddock | 2008-02-21 04:58:15 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs, and regenerated.
................
  r43354 | johnmaddock | 2008-02-21 05:51:18 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs, and regenerated.
................
  r43357 | johnmaddock | 2008-02-21 08:49:59 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs.
................
  r43359 | johnmaddock | 2008-02-21 09:01:26 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Regenerated docs to fix links.
................
  r43361 | bemandawes | 2008-02-21 12:11:32 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Fix still another typo
................
  r43362 | eric_niebler | 2008-02-21 12:12:02 -0800 (Thu, 21 Feb 2008) | 1 line
  
  doxygen comments for proto::when<>
................
  r43363 | eric_niebler | 2008-02-21 16:42:12 -0800 (Thu, 21 Feb 2008) | 1 line
  
  fix crash when actions are in keep() expressions
................
  r43364 | eric_niebler | 2008-02-21 18:01:46 -0800 (Thu, 21 Feb 2008) | 1 line
  
  doxygen comments
................
  r43365 | grafik | 2008-02-21 21:26:39 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Rename readme.html to index.html, and add forwarding index.htm for backward compatibility.
................
  r43368 | danieljames | 2008-02-22 01:21:22 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Update the index.html link in the navbar.
................
  r43371 | grafik | 2008-02-22 08:25:21 -0800 (Fri, 22 Feb 2008) | 1 line
  
  Remove obsolete getting started files. They where replaced by more/getting_started/*.
................
  r43377 | chris_kohlhoff | 2008-02-22 14:43:54 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Use the correct vector of timer queues when dispatching timers.
................
  r43390 | turkanis | 2008-02-22 16:05:49 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Ported change from iostreams_dev
................
  r43391 | turkanis | 2008-02-22 16:06:24 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Ported changes from iostreams_dev
................
  r43392 | turkanis | 2008-02-22 16:07:13 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43327-43389
................
  r43393 | turkanis | 2008-02-22 16:11:07 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev
................
  r43395 | turkanis | 2008-02-22 22:07:59 -0800 (Fri, 22 Feb 2008) | 1 line
  
  updated to test close() on filtering streambufs
................
  r43399 | turkanis | 2008-02-22 23:44:58 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev
................
  r43402 | bemandawes | 2008-02-23 06:04:02 -0800 (Sat, 23 Feb 2008) | 1 line
  
  Give the 1st and 2nd level index.html files a common look-and-feel.
................
  r43405 | vladimir_prus | 2008-02-24 04:59:04 -0800 (Sun, 24 Feb 2008) | 3 lines
  
  Recognize that fact, for that for intel-win, <runtime-debuggin>
  matters and should be added to the library name.
................
  r43409 | bemandawes | 2008-02-24 16:53:26 -0800 (Sun, 24 Feb 2008) | 1 line
  
  Fix html boo boo
................
  r43410 | schoepflin | 2008-02-25 00:37:10 -0800 (Mon, 25 Feb 2008) | 1 line
  
  Added missing template keyword.
................
  r43411 | t_schwinger | 2008-02-25 03:45:51 -0800 (Mon, 25 Feb 2008) | 3 lines
  
  removes unnecessary escaping
................
  r43412 | t_schwinger | 2008-02-25 03:47:59 -0800 (Mon, 25 Feb 2008) | 3 lines
  
  removes unnecessary comment
................
  r43416 | hkaiser | 2008-02-26 11:25:05 -0800 (Tue, 26 Feb 2008) | 1 line
  
  Wave: Fixed expanding_function_like_macro preprocessing hook.
................
  r43417 | danieljames | 2008-02-26 14:04:55 -0800 (Tue, 26 Feb 2008) | 2 lines
  
  Fix a link to Boost.Bimap.
................
  r43418 | danieljames | 2008-02-26 14:07:25 -0800 (Tue, 26 Feb 2008) | 2 lines
  
  Change another link that's no longer in the repository to link to the website.
................
  r43419 | hkaiser | 2008-02-26 14:36:36 -0800 (Tue, 26 Feb 2008) | 1 line
  
  Fixed a compilation problem on pathscale
................
  r43421 | eric_niebler | 2008-02-27 10:48:22 -0800 (Wed, 27 Feb 2008) | 1 line
  
  partially revert breaking change to independent sub-expressions until I can make a proper fix
................
  r43422 | danieljames | 2008-02-27 10:51:14 -0800 (Wed, 27 Feb 2008) | 1 line
  
  Fix broken copyright urls. Fixes #1573.
................
  r43423 | danieljames | 2008-02-27 11:22:01 -0800 (Wed, 27 Feb 2008) | 1 line
  
  Fix incorrect links to copyright of the form 'http:#www.boost.org
................
  r43424 | eric_niebler | 2008-02-27 11:39:43 -0800 (Wed, 27 Feb 2008) | 1 line
  
  fix bug in use_simple_repeat calculation
................
  r43428 | eric_niebler | 2008-02-27 16:03:15 -0800 (Wed, 27 Feb 2008) | 1 line
  
  add test case for use_simple_repeat fix
................
  r43433 | eric_niebler | 2008-02-28 14:47:12 -0800 (Thu, 28 Feb 2008) | 1 line
  
  fix oops
................
  r43434 | johnmaddock | 2008-02-29 01:49:42 -0800 (Fri, 29 Feb 2008) | 1 line
  
  Apply fixes to issue #1658 which fixes some broken URL's.
................
  r43435 | johnmaddock | 2008-02-29 01:58:30 -0800 (Fri, 29 Feb 2008) | 1 line
  
  Fix broken link as per report #1658.
................
  r43437 | chris_kohlhoff | 2008-02-29 04:57:57 -0800 (Fri, 29 Feb 2008) | 2 lines
  
  Add missing tie().
................
  r43438 | schoepflin | 2008-02-29 07:13:41 -0800 (Fri, 29 Feb 2008) | 2 lines
  
  Added expected failure markup for the test weighted_tail_variate_means on Tru64/CXX.
................
  r43441 | eric_niebler | 2008-03-01 11:32:56 -0800 (Sat, 01 Mar 2008) | 1 line
  
  add map_assign example
................
  r43458 | turkanis | 2008-03-02 22:20:14 -0800 (Sun, 02 Mar 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43399-43457
................
  r43461 | anthonyw | 2008-03-03 00:44:42 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Test and fix for issue #1665
................
  r43464 | anthonyw | 2008-03-03 02:52:44 -0800 (Mon, 03 Mar 2008) | 1 line
  
  thread constructor now accepts up to three additional arguments to pass to thread function
................
  r43467 | danieljames | 2008-03-03 04:10:35 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Tell subversion that date_time.doc is a text file, not a word document.
................
  r43468 | danieljames | 2008-03-03 04:11:25 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Fix license link in date_time.doc
................
  r43469 | chris_kohlhoff | 2008-03-03 05:21:05 -0800 (Mon, 03 Mar 2008) | 4 lines
  
  Disable use of CancelIo by default, due to the possibility of silent
  failure on some system configurations. Swallow error returned by CancelIoEx
  if there are no operations to be cancelled.
................
  r43470 | chris_kohlhoff | 2008-03-03 05:27:06 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Add missing 'boost_' prefix to helper namespace.
................
  r43471 | chris_kohlhoff | 2008-03-03 05:36:35 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Regenerate documentation.
................
  r43472 | chris_kohlhoff | 2008-03-03 06:05:35 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Update copyright notices.
................
  r43473 | chris_kohlhoff | 2008-03-03 06:13:01 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Update copyright notices.
................
  r43476 | eric_niebler | 2008-03-03 11:44:54 -0800 (Mon, 03 Mar 2008) | 1 line
  
  add Map Assign example to documentation
................
  r43478 | eric_niebler | 2008-03-03 11:47:47 -0800 (Mon, 03 Mar 2008) | 1 line
  
  second attempt at fixing actions in independent expressions
................
  r43484 | eric_niebler | 2008-03-03 15:48:17 -0800 (Mon, 03 Mar 2008) | 1 line
  
  handle static regexes with actions nested in dynamic independent subexpressions
................
  r43485 | emildotchevski | 2008-03-03 17:41:17 -0800 (Mon, 03 Mar 2008) | 1 line
  
  boost exception
................
  r43496 | eric_niebler | 2008-03-04 10:51:07 -0800 (Tue, 04 Mar 2008) | 1 line
  
  rename numeric::empty to numeric::default_, fixes #1650
................
  r43501 | eric_niebler | 2008-03-04 11:31:57 -0800 (Tue, 04 Mar 2008) | 1 line
  
  eliminate msvc level 4 warnings, fixes #1631
................
  r43502 | eric_niebler | 2008-03-04 11:42:36 -0800 (Tue, 04 Mar 2008) | 1 line
  
  add Dave Jenkin's evil static/dynamic actions in keep test case
................
  r43503 | eric_niebler | 2008-03-04 13:09:47 -0800 (Tue, 04 Mar 2008) | 1 line
  
  work around msvc bug 331418, fixes #1652
................
  r43506 | eric_niebler | 2008-03-04 15:01:17 -0800 (Tue, 04 Mar 2008) | 1 line
  
  fix bad interaction between boyer-moore optimization and partial match feature, fixes #1564
................
  r43508 | eric_niebler | 2008-03-04 22:32:39 -0800 (Tue, 04 Mar 2008) | 1 line
  
  add BOOST_REVERSE_FOREACH, fixes #1071
................
  r43509 | eric_niebler | 2008-03-04 23:12:03 -0800 (Tue, 04 Mar 2008) | 1 line
  
  fix bug iterating over abstract base
................


[SVN r43519]
2008-03-05 20:37:04 +00:00
26c81fa5b0 Merged revisions 41268-41398 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41270 | dgregor | 2007-11-20 21:50:21 -0800 (Tue, 20 Nov 2007) | 1 line
  
  Fixes #1456
........
  r41271 | johnmaddock | 2007-11-21 01:39:00 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added super/subscript styling as per boost-docs mailing list discussion.
........
  r41272 | johnmaddock | 2007-11-21 01:46:36 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fix << iostream operator for the NTL bindings.
........
  r41273 | anthonyw | 2007-11-21 02:44:22 -0800 (Wed, 21 Nov 2007) | 1 line
  
  changed platform split to allow bjam to track includes and check dependencies
........
  r41274 | schoepflin | 2007-11-21 03:00:18 -0800 (Wed, 21 Nov 2007) | 2 lines
  
  Added myself to the platform maintainers file.
........
  r41276 | bgubenko | 2007-11-21 03:43:00 -0800 (Wed, 21 Nov 2007) | 1 line
  
  fix typo in the marking of function_types library tests
........
  r41277 | johnmaddock | 2007-11-21 04:09:28 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Change warning suppression, to suppress warnings for VC8 as well.
........
  r41278 | johnmaddock | 2007-11-21 06:03:16 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Apply warning fix for VC8 and later only: earlier versions warn about the warning suppression :-(
........
  r41279 | schoepflin | 2007-11-21 07:21:53 -0800 (Wed, 21 Nov 2007) | 2 lines
  
  Marked function_types failures depending on stdcall as expected on Tru64/CXX.
........
  r41280 | igaztanaga | 2007-11-21 08:18:29 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added offset_ptr test
........
  r41281 | igaztanaga | 2007-11-21 08:19:19 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fixed offset_ptr issues with volatile values.
........
  r41282 | igaztanaga | 2007-11-21 08:39:48 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Changed precalculated sqrt(2) values selection to use enable_if.
........
  r41284 | igaztanaga | 2007-11-21 09:32:20 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added performance Jamfile to the project
........
  r41285 | hkaiser | 2007-11-21 09:53:37 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Wave: Fixed #line statements in generated files not to contain Windows paths anymore.
........
  r41286 | marshall | 2007-11-21 11:20:15 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Bug fixes #284, #836, #991
........
  r41287 | grafik | 2007-11-21 11:29:55 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fix search for Boost.Build so that it only finds the approved version.
........
  r41288 | djowel | 2007-11-21 14:24:37 -0800 (Wed, 21 Nov 2007) | 1 line
  
  updated the master css
........
  r41289 | matias | 2007-11-21 20:55:54 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Explicit failure markup for Bimap
........
  r41290 | matias | 2007-11-21 21:18:38 -0800 (Wed, 21 Nov 2007) | 1 line
  
  remove wrong placed typename
........
  r41297 | joaquin | 2007-11-21 23:59:28 -0800 (Wed, 21 Nov 2007) | 1 line
  
  included an exe filename modifying rule to avoid interference problems with Vista UAC (fixes #1429)
........
  r41299 | djowel | 2007-11-22 00:39:46 -0800 (Thu, 22 Nov 2007) | 1 line
  
  bug fix
........
  r41300 | schoepflin | 2007-11-22 01:32:15 -0800 (Thu, 22 Nov 2007) | 3 lines
  
  Marked failures for kolmogorov_max_flow_test and max_flow_test in the graph
  library as expected for cxx and acc.
........
  r41301 | johnmaddock | 2007-11-22 01:59:38 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Added try...catch around TSS initialisation.
........
  r41302 | johnmaddock | 2007-11-22 02:38:48 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Fixes #501 #1334.
........
  r41303 | bgubenko | 2007-11-22 03:33:09 -0800 (Thu, 22 Nov 2007) | 1 line
  
  fix typo in r41302 causing validation error
........
  r41304 | rogeeff | 2007-11-22 11:44:12 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Try to make it work in release build
........
  r41305 | rogeeff | 2007-11-22 11:56:58 -0800 (Thu, 22 Nov 2007) | 1 line
  
  new file
........
  r41308 | rogeeff | 2007-11-22 12:56:07 -0800 (Thu, 22 Nov 2007) | 2 lines
  
  negative chars test added
  some statements added to the online_test
........
  r41310 | rogeeff | 2007-11-22 13:57:16 -0800 (Thu, 22 Nov 2007) | 1 line
  
  issue with class base test cases addressed
........
  r41311 | anthonyw | 2007-11-22 14:01:30 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Removed thread::self in favour of allowing interruption through a thread::id; no longer requires DuplicateHandle
........
  r41312 | rogeeff | 2007-11-22 14:06:59 -0800 (Thu, 22 Nov 2007) | 1 line
  
  comments cleanup
........
  r41313 | grafik | 2007-11-22 18:57:42 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Produce less regression reports to reduce the cycle time for test reporting.
........
  r41314 | grafik | 2007-11-22 18:58:14 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Produce less regression reports to reduce the cycle time for test reporting.
........
  r41315 | joaquin | 2007-11-22 23:57:15 -0800 (Thu, 22 Nov 2007) | 1 line
  
  added .exe suffix missing at rev 41297
........
  r41317 | johnmaddock | 2007-11-23 09:05:25 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Remove the log files, we don't need these in SVN Trunk.
........
  r41318 | grafik | 2007-11-23 12:43:38 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Add --skip-script-download option to run.py to avoid repeated regression script downloads. Thanks to _m_ for the changes.
........
  r41319 | bemandawes | 2007-11-23 14:55:48 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Add the instructions formerly in the (now deleted) runner sub-directory
........
  r41320 | anthonyw | 2007-11-23 15:09:36 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Integrate TSS with thread data; test to ensure cleanup done for native threads as well as boost::thread-launched threads now runs for pthread API as well as win32 API
........
  r41324 | grafik | 2007-11-23 18:16:50 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Allow use of "conditional" to multiply a condition that already has the full condition in it.
........
  r41325 | igaztanaga | 2007-11-24 01:44:30 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Marked msvc-8.0-wm5 as unusable
........
  r41326 | niels_dekker | 2007-11-24 03:51:03 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Checked the result of value_init test function, hoping to pinpoint exactly for what particular type T value_initialized<T> might fail, on some platforms
........
  r41327 | johnmaddock | 2007-11-24 04:25:25 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Apply patches for building regex on WinCE see: http://lists.boost.org/Archives/boost/2007/11/130839.php
........
  r41328 | bemandawes | 2007-11-24 05:15:03 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Bring required compilers list closer into sync with actual testers and list discussion
........
  r41330 | bemandawes | 2007-11-24 06:59:08 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Remove mingw plus some compilers no longer being tested from required list
........
  r41331 | nasonov | 2007-11-24 07:22:52 -0800 (Sat, 24 Nov 2007) | 1 line
  
  minor changes
........
  r41333 | bemandawes | 2007-11-24 08:39:30 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Change long name inspection to follow ISO 9660:1997, thus replacing all length requirements with a single 207 maximum path length requirement. 
........
  r41338 | garcia | 2007-11-24 10:19:22 -0800 (Sat, 24 Nov 2007) | 2 lines
  
  A bunch of review dates have been added.
........
  r41339 | johnmaddock | 2007-11-24 10:34:17 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Changed meaning of "at_end" needs copy-constructor fix.
........
  r41341 | noel_belcourt | 2007-11-24 11:09:56 -0800 (Sat, 24 Nov 2007) | 6 lines
  
  Replace mpi wrappers with native pathscale compilers.
  Fixed how we invoke f77 (pathf90 -f77).
  
  Thanks to Alain Miniussi for reporting this.
........
  r41342 | igaztanaga | 2007-11-24 11:47:58 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Added workaround for systems without SEM_FAILED and semaphores based on filesystem
........
  r41343 | rogeeff | 2007-11-24 11:49:24 -0800 (Sat, 24 Nov 2007) | 5 lines
  
  switch to nasic_cstring.hpp instead of fwd header
  added failed expression to the system error
  system_error is caught and reported in cpp_main.ipp
  64 bit compatibility issue in debug.ipp fixed
  missing headers in algorithm.hpp added
........
  r41344 | davedeakins | 2007-11-24 12:30:50 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Define the BOOST_NO_SWPRINTF macro for WinCE.  WinCE's CRT does not have a conforming swprintf signature.
........
  r41348 | igaztanaga | 2007-11-24 16:55:14 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Marked pathscale and vacpp as unusable for Interprocess/Intrusive
........
  r41350 | davedeakins | 2007-11-24 20:30:02 -0800 (Sat, 24 Nov 2007) | 1 line
  
  A few corrections to the WinCE patches
........
  r41352 | dave | 2007-11-25 01:02:01 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Attempt SunPro workaround
........
  r41353 | guwi17 | 2007-11-25 05:34:20 -0800 (Sun, 25 Nov 2007) | 6 lines
  
  - fix and close #1237
  - symmetric resize used wrong internal resize method
  -- Dese und die folgenden Zeilen werden ignoriert --
  
  M    symmetric.hpp
........
  r41355 | bemandawes | 2007-11-25 05:56:09 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Remove extra ) from prior commit
........
  r41356 | danieljames | 2007-11-25 06:10:05 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Deleting the BoostCon* files. Fixes #1256
........
  r41357 | bemandawes | 2007-11-25 07:08:28 -0800 (Sun, 25 Nov 2007) | 1 line
  
  clear # 1230, mbstate uninitialized
........
  r41358 | igaztanaga | 2007-11-25 07:18:04 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Marked intel-linux-8.* as unusable for Interprocess and Intrusive
........
  r41359 | johnmaddock | 2007-11-25 07:47:58 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Oops, previous commit messed up POSIX timing code, now fixed.
........
  r41361 | johnmaddock | 2007-11-25 08:26:36 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Redirection file.
........
  r41362 | grafik | 2007-11-25 09:06:17 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Move buildbot support to sandbox until we decide what to do with it.
........
  r41363 | grafik | 2007-11-25 09:12:42 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Some cleanup of tools documentation. Add boostbook redir file. Delete duplicate time_string.hpp. Repoint regression instructions to web site.
........
  r41364 | johnmaddock | 2007-11-25 09:23:25 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Fix date.
........
  r41378 | bemandawes | 2007-11-25 11:56:10 -0800 (Sun, 25 Nov 2007) | 1 line
  
  remove hp_cxx-71_006_tru64 as required.
........
  r41380 | grafik | 2007-11-25 12:10:10 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Add --build-type option to root build. Two choices possible at the moment "minimal" and "complete". With minimal as the default we only build the common release variant. The old behavior of building many variants is available with "complete".
........
  r41381 | fcacciola | 2007-11-25 12:26:14 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Cast to base added to avoid a call to the convertir constructor/assignment (see Tickes 1419 and 1420)
........
  r41383 | burbelgruff | 2007-11-25 13:16:46 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Revert to old sizeof based solution for retrieving the type from a typeof hack. This is in order to overcome problems with the code analysis module introduced in Visual Studio 2005.
........
  r41384 | davedeakins | 2007-11-25 13:53:26 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Added a primitive tmpnam function for WinCE (which does not supply any kind of tmpnam in its CRT)
........
  r41385 | nasonov | 2007-11-25 14:28:16 -0800 (Sun, 25 Nov 2007) | 3 lines
  
  Pass unsigned type to lcast_put_unsigned.
........
  r41387 | nasonov | 2007-11-25 15:08:50 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Support for string with non-default char_traits and allocator.
........
  r41391 | davedeakins | 2007-11-25 22:36:55 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Nearly all test for the intrusive library pass on the MSVC8/WM5 platform.
........
  r41394 | joaquin | 2007-11-26 03:52:03 -0800 (Mon, 26 Nov 2007) | 1 line
  
  added missing traits template arg to a lexical_stream instantiation
........
  r41395 | anthonyw | 2007-11-26 04:17:45 -0800 (Mon, 26 Nov 2007) | 1 line
  
  workaround for Borland compiler
........
  r41396 | anthonyw | 2007-11-26 05:29:15 -0800 (Mon, 26 Nov 2007) | 1 line
  
  Don't compare native_handle_t against 0 --- do appropriate checks in create_native_thread for platforms where pthread_t is not comparable
........
  r41397 | joaquin | 2007-11-26 05:48:36 -0800 (Mon, 26 Nov 2007) | 1 line
  
  ADL-based swap call moved to an utility function (after mistaken attempt at rev 41220 to solve name-hiding issues)
........
  r41398 | anthonyw | 2007-11-26 07:44:07 -0800 (Mon, 26 Nov 2007) | 1 line
  
  fixed import/export declarations so new once code works with pthread-win32
........


[SVN r41399]
2007-11-26 16:25:40 +00:00
e3371ee841 Merged revisions 41161-41246 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41161 | bemandawes | 2007-11-16 15:21:47 -0800 (Fri, 16 Nov 2007) | 1 line
  
  Fix markup error
........
  r41163 | bgubenko | 2007-11-16 17:28:10 -0800 (Fri, 16 Nov 2007) | 1 line
  
  mark some fusion library tests for acc toolset
........
  r41164 | djowel | 2007-11-16 17:51:04 -0800 (Fri, 16 Nov 2007) | 1 line
  
  fix for trac ticket #1450
........
  r41165 | lbourdev | 2007-11-16 19:38:25 -0800 (Fri, 16 Nov 2007) | 10 lines
  
  Updated to version 2.1.2
  Added support for more compilers.
  Added new flag GIL_NONWORD_POINTER_ALIGNMENT_SUPPORTED to indicate whether dereferencing on non-word
  boundary is supported. Enabling this flag improves performance.
  Fixed two bugs related to non-byte-aligned images. The image alignment parameter is now specified in
  bytes, and has a default of 0, which means "packed" alignment. In particular, for non-byte-aligned
  images alignment of 0 means there are no padding bits at the ends of rows.
  Added the allocator as an optional parameter to image constructors and image recreate methods.
........
  r41167 | grafik | 2007-11-16 20:11:49 -0800 (Fri, 16 Nov 2007) | 1 line
  
  Add "--out-xml=xyz.xml" option that dumps the output of all actions, and the test.jam information, to the given file. Changes are mostly from Dave.
........
  r41169 | johnmaddock | 2007-11-17 02:00:43 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Ooops, check on wrong index, now fixed.
........
  r41170 | johnmaddock | 2007-11-17 04:17:05 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Fix WinCE issues.
........
  r41172 | johnmaddock | 2007-11-17 10:41:29 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Changed test to catch throw exceptions from thread creation.
........
  r41173 | bemandawes | 2007-11-17 12:13:16 -0800 (Sat, 17 Nov 2007) | 1 line
  
  // Add or correct comment identifying Boost library this header is associated with.
........
  r41174 | grafik | 2007-11-17 12:14:24 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add in Dave's comments, and expand information in XML output to include action names, sources, properties, bjam info, and platform info. This required one minor change to actions to keep track of the action object generating the targets.
........
  r41175 | nesotto | 2007-11-17 12:22:05 -0800 (Sat, 17 Nov 2007) | 1 line
  
  minor update of comments
........
  r41176 | nesotto | 2007-11-17 12:22:20 -0800 (Sat, 17 Nov 2007) | 1 line
  
  last updates
........
  r41177 | nesotto | 2007-11-17 12:44:29 -0800 (Sat, 17 Nov 2007) | 1 line
  
  works after local test with vc8
........
  r41178 | nesotto | 2007-11-17 13:02:22 -0800 (Sat, 17 Nov 2007) | 1 line
  
  added missing header
........
  r41180 | nesotto | 2007-11-17 13:19:13 -0800 (Sat, 17 Nov 2007) | 1 line
  
  iostream macro patch
........
  r41181 | nesotto | 2007-11-17 13:21:53 -0800 (Sat, 17 Nov 2007) | 1 line
  
  removed some warnings
........
  r41182 | grafik | 2007-11-17 13:22:40 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add working dir to build description, move jam version to an attribute.
........
  r41183 | nesotto | 2007-11-17 13:24:16 -0800 (Sat, 17 Nov 2007) | 1 line
  
  macro patch
........
  r41185 | nesotto | 2007-11-17 13:43:32 -0800 (Sat, 17 Nov 2007) | 1 line
  
  minor change to define the value type of the iterators better
........
  r41186 | grafik | 2007-11-17 14:09:26 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Change "actual" to the more natural "target", and change "target" to "path". Add bjam command and bb version to XML.
........
  r41187 | bemandawes | 2007-11-17 14:48:06 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add or correct comment identifying Boost library this header is associated with.
........
  r41188 | andreas_huber69 | 2007-11-17 16:08:46 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Added markup for statechart failures on msvc-8.0~wm5~stlport5.1
........
  r41192 | grafik | 2007-11-17 22:42:14 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add to XML output the known targets and dependencies to allow creation of the full build dependency graph. Merge from Dave's Bitten branch.
........
  r41193 | johnmaddock | 2007-11-18 02:07:14 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Ooops: previous commit broke platforms/compilers with no long double support, added workaround as fix.
........
  r41194 | igaztanaga | 2007-11-18 02:41:57 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41195 | igaztanaga | 2007-11-18 02:43:35 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added scapegoat trees and an option to store the hash value in the hook for unordered containers
........
  r41196 | igaztanaga | 2007-11-18 02:44:56 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added scapegoat trees and an option to store the hash value in the hook for unordered containers
........
  r41197 | igaztanaga | 2007-11-18 02:51:19 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41198 | igaztanaga | 2007-11-18 02:54:48 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41199 | johnmaddock | 2007-11-18 04:23:37 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added missing template argument to specialisations.
........
  r41200 | johnmaddock | 2007-11-18 04:24:42 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Fix IMB xlc error limits, added workarounds where these were missed by the last commit.
........
  r41201 | t_schwinger | 2007-11-18 06:06:47 -0800 (Sun, 18 Nov 2007) | 3 lines
  
  adds comment to fusion aCC failure markup
........
  r41202 | danieljames | 2007-11-18 08:10:12 -0800 (Sun, 18 Nov 2007) | 2 lines
  
  Move the instructions for running regression tests to the new site. Fixes #1265.
........
  r41210 | danieljames | 2007-11-18 12:18:04 -0800 (Sun, 18 Nov 2007) | 2 lines
  
  Move the 'implementation variations' page to the new site. Fixes #1355.
........
  r41211 | eric_niebler | 2007-11-18 12:19:55 -0800 (Sun, 18 Nov 2007) | 1 line
  
  vc6 doesn't like BOOST_MPL_ASSERT_MSG
........
  r41212 | grafik | 2007-11-18 12:24:25 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Inspection report fixes.
........
  r41213 | grafik | 2007-11-18 12:53:28 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Cleanup tools/regression to remove obsolete runner scripts, move existing docs to doc subdir, and clean html docs into valid xhtml.
........
  r41214 | grafik | 2007-11-18 13:02:51 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Add missing <cstring> include, for std::strchr function.
........
  r41215 | grafik | 2007-11-18 13:07:26 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Add keyword tags.
........
  r41216 | niels_dekker | 2007-11-18 14:11:57 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Code refactoring: removed private base classes of value_initialized, as suggested by Fernando Cacciola.
........
  r41217 | djowel | 2007-11-18 16:05:43 -0800 (Sun, 18 Nov 2007) | 1 line
  
  added link to docs
........
  r41218 | johnmaddock | 2007-11-19 02:02:16 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Oops: added missing template specialisation argument.
........
  r41219 | johnmaddock | 2007-11-19 02:20:36 -0800 (Mon, 19 Nov 2007) | 1 line
  
  No user32.lib on WinCE
........
  r41220 | joaquin | 2007-11-19 03:08:11 -0800 (Mon, 19 Nov 2007) | 1 line
  
  moved some ADL stuff out of a potentially name-hiding scope
........
  r41221 | troyer | 2007-11-19 04:15:58 -0800 (Mon, 19 Nov 2007) | 1 line
  
  made complex seriaqlization more portable
........
  r41222 | anthonyw | 2007-11-19 04:17:31 -0800 (Mon, 19 Nov 2007) | 1 line
  
  fixed TSS cleanup on 64-bit Windows
........
  r41223 | anthonyw | 2007-11-19 04:29:14 -0800 (Mon, 19 Nov 2007) | 1 line
  
  fixed problems with TSS cleanup when using LoadLibrary and when threads finish after thread_specific_ptr instance has been destroyed
........
  r41224 | garcia | 2007-11-19 05:28:00 -0800 (Mon, 19 Nov 2007) | 2 lines
  
  A bunch of review volunteers.
........
  r41225 | garcia | 2007-11-19 06:01:34 -0800 (Mon, 19 Nov 2007) | 2 lines
  
  Added boost.range update
........
  r41226 | anthonyw | 2007-11-19 06:29:22 -0800 (Mon, 19 Nov 2007) | 1 line
  
  added copyright
........
  r41227 | aaron_windsor | 2007-11-19 07:28:26 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Cleaning up #includes to avoid errors on gcc 4.1 and above.
........
  r41234 | igaztanaga | 2007-11-19 08:55:23 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Fixed errors detected by gcc-4.3
........
  r41235 | hljin | 2007-11-19 09:26:12 -0800 (Mon, 19 Nov 2007) | 1 line
  
  GIL: updated the design guide based on the new changes
........
  r41236 | grafik | 2007-11-19 09:44:31 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Make quietly actions really quiet by not printing the command output. The output for the quietly actions is still available through "__ACTION_RULE__".
........
  r41237 | grafik | 2007-11-19 10:02:43 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Add architecture and instruction-set values for HP/PA-RISC.
........
  r41238 | igaztanaga | 2007-11-19 10:09:13 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Corrected ifdef
........
  r41240 | igaztanaga | 2007-11-19 10:32:12 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Fixed 64 bit std::size_t specialization error
........
  r41241 | hljin | 2007-11-19 10:34:59 -0800 (Mon, 19 Nov 2007) | 1 line
  
  GIL: broke the main test into small tests
........
  r41242 | bgubenko | 2007-11-19 11:25:21 -0800 (Mon, 19 Nov 2007) | 1 line
  
  add OSPLAT=PARISC for HP-UX PA-RISC
........


[SVN r41247]
2007-11-20 07:41:38 +00:00
a4c44b2421 Merged revisions 41072-41140 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41077 | troyer | 2007-11-13 23:00:02 -0800 (Tue, 13 Nov 2007) | 1 line
  
  Added support for std::complex to serialization
........
  r41078 | joaquin | 2007-11-13 23:09:29 -0800 (Tue, 13 Nov 2007) | 1 line
  
  added missing include
........
  r41079 | djowel | 2007-11-14 02:13:51 -0800 (Wed, 14 Nov 2007) | 1 line
  
  adjust to compensate for lack of <small> tag.
........
  r41080 | djowel | 2007-11-14 02:17:09 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41081 | djowel | 2007-11-14 02:23:23 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41082 | djowel | 2007-11-14 02:24:21 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41083 | anthonyw | 2007-11-14 03:08:09 -0800 (Wed, 14 Nov 2007) | 1 line
  
  ignore and join all threads in group on exception
........
  r41084 | anthonyw | 2007-11-14 03:56:53 -0800 (Wed, 14 Nov 2007) | 1 line
  
  interrupt and join all threads in a group if an exception is thrown during a test
........
  r41086 | johnmaddock | 2007-11-14 04:14:19 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Merged changes from the Sandbox to Trunk.
........
  r41087 | anthonyw | 2007-11-14 04:17:41 -0800 (Wed, 14 Nov 2007) | 1 line
  
  interrupt and join all threads in a group if an exception is thrown during a test
........
  r41088 | johnmaddock | 2007-11-14 04:41:32 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Added WinCE workaround.
........
  r41089 | johnmaddock | 2007-11-14 05:03:15 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Catch exceptions thrown from thread creation.
........
  r41090 | anthonyw | 2007-11-14 06:49:58 -0800 (Wed, 14 Nov 2007) | 1 line
  
  fixes for pthread implementation
........
  r41091 | bemandawes | 2007-11-14 07:50:43 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Replace old docs with excerpts from http://article.gmane.org/gmane.comp.lib.boost.testing/5020
........
  r41093 | eric_niebler | 2007-11-14 08:36:15 -0800 (Wed, 14 Nov 2007) | 1 line
  
  fix support for segmented iteration
........
  r41094 | dave | 2007-11-14 09:37:55 -0800 (Wed, 14 Nov 2007) | 3 lines
  
  Update command-prompt instructions per
  http://news.gmane.org/find-root.php?message_id=%3cfhcrem%24c4%241%40ger.gmane.org%3e
........
  r41095 | bemandawes | 2007-11-14 12:05:30 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Bring docs more in line with reality:-)
........
  r41097 | hljin | 2007-11-14 18:07:53 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: removed the example directory from the documentation as it is a duplication and re-directed the Doxygen documentation to a local copy (to be submitted next)
........
  r41098 | hljin | 2007-11-14 18:30:13 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: added a local copy of the Doxygen documentation
........
  r41099 | hljin | 2007-11-14 18:32:04 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: added a local copy of the Doxygen documentation (second batch)
........
  r41100 | chris_kohlhoff | 2007-11-14 22:19:04 -0800 (Wed, 14 Nov 2007) | 6 lines
  
  Try to fix an order-of-initialisation problem with error_category references.
  The symptom, which only occurs in some applications, is a crash due to a
  dereference of a null pointer. The exact conditions under which the problem
  occurs are not fully understood, so this fix is probably more paranoid than
  necessary.
........
  r41102 | jhunold | 2007-11-14 23:04:24 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Suppress msvc "deprecated" warnings.
........
  r41103 | johnmaddock | 2007-11-15 01:52:26 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fix some compiler warnings when building with the Intel and aCC compilers.
........
  r41104 | garcia | 2007-11-15 04:50:48 -0800 (Thu, 15 Nov 2007) | 2 lines
  
  John Torjo is reviewing the X-files.
........
  r41105 | hkaiser | 2007-11-15 05:27:24 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Suppressed more warnings during build of Wave.
........
  r41106 | bemandawes | 2007-11-15 06:36:40 -0800 (Thu, 15 Nov 2007) | 1 line
  
  GetUserDefaultUILanguage isn't present for Cygwin, so disable use
........
  r41107 | bemandawes | 2007-11-15 07:20:27 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Get rid of .cvsignore files
........
  r41108 | eric_niebler | 2007-11-15 08:06:22 -0800 (Thu, 15 Nov 2007) | 1 line
  
  fix typo
........
  r41110 | grafik | 2007-11-15 08:58:21 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fix building of multiple regression tools at once.
........
  r41111 | gmelquio | 2007-11-15 09:52:31 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fixed documentation typo.
........
  r41113 | grafik | 2007-11-15 10:56:43 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Switch intel-win32 to use static multi thread runtime since the single thread static runtime is no longer available. (fixes #1287)
........
  r41114 | andreas_huber69 | 2007-11-15 11:22:12 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Added new FAQ item suggested by Chris Paulse.
........
  r41116 | guwi17 | 2007-11-15 12:52:37 -0800 (Thu, 15 Nov 2007) | 4 lines
  
  This patch now lets the Sun compiler work for most of uBLAS. 'test4' is now failing.
  Too avoid other compilers complaining about missing return values in some functions where exceptions are thrown, code was added so an arbitatry were chosen.
........
  r41117 | danmarsden | 2007-11-15 13:15:47 -0800 (Thu, 15 Nov 2007) | 1 line
  
  removing failing test on EDG compilers
........
  r41118 | grafik | 2007-11-15 14:05:15 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Remove redundant reference to system library. It causes double linking when used indirectly through filesystem. Which can lead to double linking incompatible variants when a specific filesystem variant is requested.
........
  r41119 | grafik | 2007-11-15 14:05:22 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Oops, forgot we need to use the root boost project settings when building.
........


[SVN r41141]
2007-11-16 08:03:15 +00:00
86dcda219a Merged revisions 40857-40860 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40858 | eric_niebler | 2007-11-06 14:18:11 -0800 (Tue, 06 Nov 2007) | 1 line
  
  update example.vcproj
........
  r40859 | fcacciola | 2007-11-06 14:20:38 -0800 (Tue, 06 Nov 2007) | 1 line
  
  Added explicit failures for newly discovered GCC const ref binding bug (see Ticket #1301)
........
  r40860 | fcacciola | 2007-11-06 14:21:43 -0800 (Tue, 06 Nov 2007) | 1 line
  
  Fixed intention in the added binding test
........


[SVN r40861]
2007-11-06 22:24:03 +00:00
0326c44711 Merged revisions 38539-40814 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r38547 | djowel | 2007-08-08 19:07:16 -0700 (Wed, 08 Aug 2007) | 1 line
  
  fix line endings
........
  r38548 | djowel | 2007-08-08 19:10:29 -0700 (Wed, 08 Aug 2007) | 1 line
  
  fixed error (wrong include file assign_key.hh)
........
  r38549 | djowel | 2007-08-09 00:23:00 -0700 (Thu, 09 Aug 2007) | 1 line
  
  added fusion to libraries list.
........
  r38551 | johnmaddock | 2007-08-09 02:26:56 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Updated.
........
  r38553 | bemandawes | 2007-08-09 07:56:05 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Get boost.png from web site
........
  r38555 | johnmaddock | 2007-08-09 10:13:18 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Added another entry
........
  r38558 | speedsnail | 2007-08-09 18:22:59 -0700 (Thu, 09 Aug 2007) | 1 line
  
  made the feature "format" propagated
........
  r38559 | djowel | 2007-08-09 18:45:05 -0700 (Thu, 09 Aug 2007) | 1 line
  
  push/pop pragma warning
........
  r38560 | djowel | 2007-08-09 18:45:21 -0700 (Thu, 09 Aug 2007) | 1 line
  
  push/pop pragma warning
........
  r38561 | johnmaddock | 2007-08-10 03:10:05 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Added two more entries.
........
  r38562 | johnmaddock | 2007-08-10 03:11:03 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Tidied up msvc-warning suppression code.
........
  r38563 | (no author) | 2007-08-10 03:32:21 -0700 (Fri, 10 Aug 2007) | 4 lines
  
  Add overloads of hash_value for more built in types. They're not strictly
  needed and aren't in the original specifiction but they avoid a warning. See
  ticket #1095 for details.
........
  r38564 | (no author) | 2007-08-10 04:08:19 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add some missing 'inline's.
........
  r38565 | (no author) | 2007-08-10 04:22:54 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add -Wsign-promo to the hash test compile flags since I'm now trying to avoid the warning. I still need to check that it won't break older versions of gcc.
........
  r38567 | bemandawes | 2007-08-10 05:53:52 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Fix #995 by adding inline
........
  r38568 | hkaiser | 2007-08-10 08:03:46 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Wave: Added missing file to real_positions example, fixed corresponding Jamfile.
........
  r38576 | vladimir_prus | 2007-08-10 09:33:48 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Fix typo. Closes #1150.
........
  r38587 | grafik | 2007-08-10 17:32:25 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add test to check 'bjam -n'.
........
  r38588 | grafik | 2007-08-10 17:42:32 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Minor adjustment to -n test, and add corresponding -d2 test.
........
  r38590 | grafik | 2007-08-10 19:39:13 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Bring back midding output of -n option. The -o option continues to be broken as it has been for a long time now because of the @ file feature. (fixes #1155)
........
  r38591 | grafik | 2007-08-10 19:46:49 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Make shell script executable.
........
  r38592 | grafik | 2007-08-10 19:58:04 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Adjust test to reflect real results of empty strings instead of empty values.
........
  r38593 | vladimir_prus | 2007-08-10 22:15:54 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Stop BoostBuild.py from crashing on certain test failures.
........
  r38594 | grafik | 2007-08-10 22:53:37 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Update GC support to work with Boehm GC 7.0.
........
  r38605 | djowel | 2007-08-11 18:24:22 -0700 (Sat, 11 Aug 2007) | 1 line
  
  pragma push/pop added
........
  r38606 | agurtovoy | 2007-08-11 23:10:45 -0700 (Sat, 11 Aug 2007) | 1 line
  
  Move /libs/expected_results.xml to the /status/ directory
........
  r38614 | agurtovoy | 2007-08-12 21:36:40 -0700 (Sun, 12 Aug 2007) | 1 line
  
  CVS -> SVN
........
  r38615 | grafik | 2007-08-12 23:11:14 -0700 (Sun, 12 Aug 2007) | 1 line
  
  SVN update and bjam build commands working.
........
  r38616 | agurtovoy | 2007-08-13 01:14:34 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Update http://www.boost.org/regression/ redirects
........
  r38618 | speedsnail | 2007-08-13 08:35:16 -0700 (Mon, 13 Aug 2007) | 2 lines
  
  Revert the last change, since the directory passed to boost-build should be first in searched paths, else project local build system will not be picked correctly.
  The order had been changed to allow searching of alternate user-config.jam files from boost build. This better should be done with --user-config= switch or similar. 
........
  r38619 | bemandawes | 2007-08-13 09:27:31 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Final agreement. Effective date August 10, 2007. Signed by Beman G. Dawes on August 7, 2007, for Boost, and Bradley M. Kuhn on August 10, 2007, for the Software Freedom Conservancy. 
........
  r38620 | speedsnail | 2007-08-13 09:39:02 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Added support for BOOST_USER_CONFIG environment variable. This variable is able to take the same rhs as --user-config= switch. The switch still overrides the variable when present. (This has been added to allow for the BOOST_BUILD_PATH to be restored to its original i.e. documented behaviour.)
........
  r38626 | johnmaddock | 2007-08-13 10:54:01 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Added some missing match_flag_type options.
........
  r38638 | hkaiser | 2007-08-13 18:19:20 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Wave: Fixed test Jamfile.v2
........
  r38647 | danieljames | 2007-08-14 02:53:55 -0700 (Tue, 14 Aug 2007) | 3 lines
  
  Test the hash library with warning level 4 on Visual C++ - although there's
  still one warning for hashing long doubles.
........
  r38662 | garcia | 2007-08-14 12:30:31 -0700 (Tue, 14 Aug 2007) | 2 lines
  
  scope exit review begins.
........
  r38669 | igaztanaga | 2007-08-14 17:18:10 -0700 (Tue, 14 Aug 2007) | 1 line
  
  Corrected incorrect iterator definition
........
  r38679 | danieljames | 2007-08-15 07:35:39 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Avoid a comparison with zero warning on gcc when compiling with -Wextra.
........
  r38688 | grafik | 2007-08-15 10:25:46 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Trow ValueError exception from remove functions to match the set.remove functionality.
........
  r38694 | grafik | 2007-08-15 11:35:11 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Change remove() to glob_remove() in expect_modification, even though this check is not used.
........
  r38702 | grafik | 2007-08-15 13:15:36 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Do some normalizing of paths to remove some of the variant feature subdirs that may be different based on platform and toolset. This fixes some tests that pass on GCC/Linux and not on MSVC/Windows.
........
  r38704 | hljin | 2007-08-15 15:19:48 -0700 (Wed, 15 Aug 2007) | 1 line
  
  GIL: added runtime endian-ness detection routines: little_endian() and big_endian()
........
  r38705 | hljin | 2007-08-15 15:21:06 -0700 (Wed, 15 Aug 2007) | 1 line
  
  GIL: fixed a endian-ness related bug in PNG IO routines
........
  r38710 | grafik | 2007-08-15 21:56:08 -0700 (Wed, 15 Aug 2007) | 1 line
  
  More changes to account for differing variant subdirs between toolsets, and of toolset expansion.
........
  r38711 | speedsnail | 2007-08-16 05:05:44 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Changed BOOST_USER_CONFIG to BOOST_BUILD_USER_CONFIG as this is a more systematic name.
........
  r38717 | samuel_krempp | 2007-08-16 06:56:57 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  updated - can't be a student forever !
........
  r38724 | grafik | 2007-08-16 09:51:10 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Fix changed remote shell command argument names. Disable the svn poller as it taxes the server too much. Bjam build, bjam run, and test tools build working now.
........
  r38726 | samuel_krempp | 2007-08-16 10:00:13 -0700 (Thu, 16 Aug 2007) | 2 lines
  
  small fix (charset set to utf-8, + typo)
........
  r38727 | samuel_krempp | 2007-08-16 10:04:05 -0700 (Thu, 16 Aug 2007) | 2 lines
  
  previous commit was messed-up 
........
  r38729 | samuel_krempp | 2007-08-16 10:33:47 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  bug fixed : prefix_ was not reset by make_or_reuse (all other buffers were).
  Solves ticket #570
........
  r38730 | samuel_krempp | 2007-08-16 11:48:03 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  handle invalid format string (ends with %) without asserting, 
  closing ticket #493
........
  r38732 | grafik | 2007-08-16 14:30:21 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Add testing step, which unfortunately doesn't work.
........
  r38740 | grafik | 2007-08-17 07:51:49 -0700 (Fri, 17 Aug 2007) | 1 line
  
  Minor fix to get btest step working.
........
  r38741 | dgregor | 2007-08-17 07:57:54 -0700 (Fri, 17 Aug 2007) | 1 line
  
  Revert inadvertent changes to csr_graph_test.cpp
........
  r38755 | grafik | 2007-08-18 10:11:07 -0700 (Sat, 18 Aug 2007) | 1 line
  
  Guard against empty result files.
........
  r38756 | grafik | 2007-08-18 23:05:26 -0700 (Sat, 18 Aug 2007) | 1 line
  
  Add support for posting to Dart server using the specified http proxy.
........
  r38777 | burbelgruff | 2007-08-19 23:51:54 -0700 (Sun, 19 Aug 2007) | 1 line
  
  #1188 Removed extra (unnecessary) semicolons in BOOST_TYPEOF_NESTED_TYPEDEF. 
........
  r38781 | chris_kohlhoff | 2007-08-20 06:48:38 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Fix inspect errors.
........
  r38782 | chris_kohlhoff | 2007-08-20 06:50:30 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Fix gcc warning about too few braces.
........
  r38783 | chris_kohlhoff | 2007-08-20 06:53:27 -0700 (Mon, 20 Aug 2007) | 3 lines
  
  Add a note to basic_socket<>::close() indicating that shutdown() should
  be used for portable graceful closure.
........
  r38784 | chris_kohlhoff | 2007-08-20 07:07:23 -0700 (Mon, 20 Aug 2007) | 4 lines
  
  Add a workaround for Windows Vista's handling of the boolean socket option
  tcp::no_delay, where ::getsockopt will return the size of the option as one
  byte, even though a four byte integer was passed in.
........
  r38785 | chris_kohlhoff | 2007-08-20 07:08:16 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Add missing static keyword to the service_id_matches functions.
........
  r38786 | chris_kohlhoff | 2007-08-20 07:11:46 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix order of initialisation problem with error categories.
........
  r38787 | chris_kohlhoff | 2007-08-20 07:12:31 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix unused argument warning.
........
  r38788 | chris_kohlhoff | 2007-08-20 07:17:15 -0700 (Mon, 20 Aug 2007) | 5 lines
  
  Increase number of buffers that may be sent or received in a single operation.
  
  Clean up win_iocp_socket_service's close-on-destruction handling to ensure
  non-blocking socket destructors.
........
  r38789 | chris_kohlhoff | 2007-08-20 07:19:49 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Use shutdown() for portable graceful connection closure.
........
  r38790 | chris_kohlhoff | 2007-08-20 07:21:47 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Clean up gcc warnings.
........
  r38791 | chris_kohlhoff | 2007-08-20 07:32:05 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix unused argument warnings.
........
  r38792 | grafik | 2007-08-20 09:52:55 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Merge changes from Version_1_34_1 back to trunk.
........
  r38800 | ramey | 2007-08-20 11:06:17 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Merged in additions from serialization_next_release branch to support validation of one's current boost installation on a either a library by library or global basis
........
  r38801 | burbelgruff | 2007-08-20 11:09:14 -0700 (Mon, 20 Aug 2007) | 1 line
  
  native typeof implementation for VC7.1 and VC8.0 now uses typeid() instead of sizeof() to map a type. This bypasses some bugs in Microsofts sizeof implementation, and removes a limitation on the number of typeof invocations that can be done in a single compilation unit
........
  r38803 | speedsnail | 2007-08-20 12:14:14 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Merge from RC_1_34_0 (CVS 1.12.2.53) to trunk. CVS RC_1_34_0 - 1.12.2.23 and CVS HEAD - 1.51 are the last versions that were equal. Between these and trunk was only a small diff for HPUX that removed pthread lib. This fix seems to be already present in the merged in version. 
........
  r38804 | garcia | 2007-08-20 12:16:39 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Added "dimensionality" compile-time constant to the MultiArray concept.
........
  r38814 | johnmaddock | 2007-08-21 02:04:39 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Added needed include: see http://article.gmane.org/gmane.comp.lib.boost.devel/163941.
........
  r38815 | garcia | 2007-08-21 05:27:05 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Time Series accepted.
........
  r38820 | garcia | 2007-08-21 06:54:25 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Added "dimensionality" compile-time constant to the MultiArray concept.
........
  r38821 | garcia | 2007-08-21 06:54:58 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Changed all uses of assert to BOOST_ASSERT.
........
  r38822 | vladimir_prus | 2007-08-21 06:55:41 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Revive V1 Jamfiles at Christopher's request
........
  r38827 | dgregor | 2007-08-21 08:35:19 -0700 (Tue, 21 Aug 2007) | 3 lines
  
  Committed patch to eliminate warnings with GCC's -Wundef. Fixes #1197
........
  r38834 | igaztanaga | 2007-08-21 12:18:32 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Erased temporarily until problems on Mac Os PowerPC are solved
........
  r38835 | vladimir_prus | 2007-08-22 05:14:05 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Revive V1 Jamfile to please asio
........
  r38837 | vladimir_prus | 2007-08-22 05:40:34 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Revive V1 Jamfile to please asio
........
  r38838 | johnmaddock | 2007-08-22 05:56:39 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Fixed include guard.
........
  r38847 | vladimir_prus | 2007-08-22 08:02:20 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Make 'library_status' target explicit
........
  r38853 | garcia | 2007-08-22 08:29:48 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Initial Revision.
........
  r38854 | garcia | 2007-08-22 08:30:47 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Added a new test case for replacing asserts with exceptions.
........
  r38856 | garcia | 2007-08-22 11:19:43 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Added mention of assert.cpp.
........
  r38857 | garcia | 2007-08-22 11:31:43 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  was missing storage_order_convert.cpp
........
  r38864 | johnmaddock | 2007-08-23 02:06:24 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Fixes track issue #775, see http://svn.boost.org/trac/boost/ticket/775.
  All regex code should now compile warning free at level 4 with MSCV.
........
  r38868 | hljin | 2007-08-23 12:26:55 -0700 (Thu, 23 Aug 2007) | 1 line
  
  GIL: a further fix on the PNG IO 16-bit bug
........
  r38871 | vladimir_prus | 2007-08-23 12:51:47 -0700 (Thu, 23 Aug 2007) | 3 lines
  
  Apply patch to fix gcc warning.
  Fixes #1209.
........
  r38872 | vladimir_prus | 2007-08-23 12:57:23 -0700 (Thu, 23 Aug 2007) | 3 lines
  
  Support the address-model feature for the sun
  toolset. Addresses #1186.
........
  r38873 | danieljames | 2007-08-23 17:42:19 -0700 (Thu, 23 Aug 2007) | 6 lines
  
  Copy hash library from 1.34.1 over trunk.
  
  For the first merge with the release branch, I only want to include some of the
  changes I've been working on (fixes and some trivial changes), so I'm starting
  again from 1.34.1.
........
  r38876 | danieljames | 2007-08-23 18:05:36 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Update the copyright in the hash library.
........
  r38877 | danieljames | 2007-08-23 18:11:33 -0700 (Thu, 23 Aug 2007) | 5 lines
  
  Remove the errno check when hashing floating point numbers. It's not really
  needed and was causing problems on the Microsoft Windows Smarthone Edition
  platform. Fixes #1064.
........
  r38878 | danieljames | 2007-08-23 18:16:54 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Merge some documentation improvements from the development branch.
........
  r38881 | danieljames | 2007-08-23 18:44:15 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Add extra overloads for hash_value to cover all the specializations of boost::hash. Fixes 1095
........
  r38882 | danieljames | 2007-08-23 18:56:47 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Add some missing hash_value documentation for the new overloads.
........
  r38883 | danieljames | 2007-08-23 19:01:47 -0700 (Thu, 23 Aug 2007) | 6 lines
  
  Change a comparison in the float hashing code, which can cause a warning on
  gcc. Although the warning doesn't currently turn up in this branch, it could
  be caused quite easily. Originally reported in:
  
  http://lists.boost.org/Archives/boost/2007/08/126084.php
........
  r38884 | danieljames | 2007-08-23 19:33:43 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Remove hash_complex_test - it should have been removed when I reverted to 1.34.1
........
  r38911 | igaztanaga | 2007-08-24 14:24:23 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Erased old archives imported from CVS
........
  r38913 | grafik | 2007-08-24 16:03:10 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Disable interprocess tests until parallel execution problem is fixed. (see ticket #1211)
........
  r38914 | grafik | 2007-08-24 16:27:14 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Reverting changes from revision [http://svn.boost.org/trac/boost/changeset/38800 38800] as it break XSLT regression reports.
........
  r38918 | grafik | 2007-08-24 21:08:28 -0700 (Fri, 24 Aug 2007) | 1 line
  
  On Windows static libs have the lib prefix, but DLLs don't.
........
  r38919 | vladimir_prus | 2007-08-24 21:34:31 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Use -KPIC for shared libs. Addresses #1186.
........
  r38920 | vladimir_prus | 2007-08-24 21:36:02 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Revert mistaken commit
........
  r38923 | ramey | 2007-08-25 00:37:21 -0700 (Sat, 25 Aug 2007) | 1 line
  
  corrections for gcc compiler
........
  r38924 | johnmaddock | 2007-08-25 01:53:29 -0700 (Sat, 25 Aug 2007) | 1 line
  
  Fix for http://svn.boost.org/trac/boost/ticket/1075.
........
  r38934 | johnmaddock | 2007-08-25 05:26:25 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  Fixes for http://svn.boost.org/trac/boost/ticket/1104, http://svn.boost.org/trac/boost/ticket/1102, http://svn.boost.org/trac/boost/ticket/1103 and http://svn.boost.org/trac/boost/ticket/1105.
  Also updated tests for some previous macro additions.
........
  r38946 | igaztanaga | 2007-08-25 11:04:13 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38948 | igaztanaga | 2007-08-25 11:14:34 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38949 | igaztanaga | 2007-08-25 12:05:18 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38950 | igaztanaga | 2007-08-25 12:07:32 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38951 | igaztanaga | 2007-08-25 12:10:12 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38952 | igaztanaga | 2007-08-25 12:13:02 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38953 | igaztanaga | 2007-08-25 12:17:24 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38954 | igaztanaga | 2007-08-25 12:18:28 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38955 | igaztanaga | 2007-08-25 12:19:34 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38956 | aaron_windsor | 2007-08-25 14:11:06 -0700 (Sat, 25 Aug 2007) | 1 line
  
  merging planar graph algorithms into the BGL
........
  r38960 | igaztanaga | 2007-08-26 02:59:28 -0700 (Sun, 26 Aug 2007) | 1 line
  
  This file is a badly imported CVS file
........
  r38963 | vladimir_prus | 2007-08-26 08:53:45 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Make executable
........
  r38964 | grafik | 2007-08-26 09:14:44 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Read expected files with universal EOL translation enabled to account for comparing with newline only Python strings.
........
  r38965 | grafik | 2007-08-26 09:16:38 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Use some wildcard matching on the expected output as 'echo' on Windows outputs extra space before EOLs, which Unix doesn't.
........
  r38968 | vladimir_prus | 2007-08-26 10:15:51 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Use SVN for nightly builds
........
  r38969 | vladimir_prus | 2007-08-26 10:23:03 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Include svn revision in nightly build
........
  r38971 | vladimir_prus | 2007-08-26 11:32:21 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Fix quoting. Remove .svn directories
........
  r38973 | grafik | 2007-08-26 12:24:13 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Make rm try the glob_file in addition to regular glob. Clears alternatives and project_glob failures on windows.
........
  r38975 | pdimov | 2007-08-26 12:42:50 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Updated the unspecified_bool_type to match shared_ptr.
........
  r38976 | pdimov | 2007-08-26 13:34:40 -0700 (Sun, 26 Aug 2007) | 1 line
  
  BOOST_NO_TYPEID support (#1108).
........
  r38977 | pdimov | 2007-08-26 13:35:52 -0700 (Sun, 26 Aug 2007) | 1 line
  
  BOOST_NO_TYPEID support (#1108).
........
  r38981 | vladimir_prus | 2007-08-26 23:18:11 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Run svnversion before removing .svn
........
  r38984 | vladimir_prus | 2007-08-26 23:30:56 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Run svnversion before modifying anything
........
  r38985 | grafik | 2007-08-26 23:34:52 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Repoint tarball source to direct tarball generator.
........
  r38986 | vladimir_prus | 2007-08-26 23:41:18 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Another svnversion fix
........
  r38987 | vladimir_prus | 2007-08-27 00:00:18 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Another fix
........
  r38999 | garcia | 2007-08-27 04:51:04 -0700 (Mon, 27 Aug 2007) | 1 line
  
  *** empty log message ***
........
  r39007 | grafik | 2007-08-27 09:02:50 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Bring back the interprocess tests, as they seem fixed now for parallel execution.
........
  r39009 | danieljames | 2007-08-27 10:59:54 -0700 (Mon, 27 Aug 2007) | 2 lines
  
  Comment out -Wextra because it doesn't work on older versions of gcc.
........
  r39014 | danieljames | 2007-08-27 11:16:54 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Add proper support for long longs and unsigned long longs.
........
  r39020 | grafik | 2007-08-27 14:05:35 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Tarball generation script.
........
  r39022 | grafik | 2007-08-27 14:19:41 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Add copyright+BSL.
........
  r39052 | dgregor | 2007-08-29 09:00:53 -0700 (Wed, 29 Aug 2007) | 3 lines
  
  Constify status::count and status::cancelled. Fixes #1101
........
  r39060 | dgregor | 2007-08-29 11:59:16 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Disable MSVC warning about native code generation. Fixes #1163
........
  r39061 | dgregor | 2007-08-29 12:06:11 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Handle GCC's -fno-exceptions properly. Fixes #1198
........
  r39062 | dlwalker | 2007-08-29 12:54:14 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Fixed comments listed in #766 that didn't match their described code
........
  r39073 | eric_niebler | 2007-08-30 08:21:00 -0700 (Thu, 30 Aug 2007) | 1 line
  
  example/main.cpp compiles clean with gcc -Wall
........
  r39075 | eric_niebler | 2007-08-30 08:40:34 -0700 (Thu, 30 Aug 2007) | 1 line
  
  dynamically optimizing TST, from Dave Jenkins
........
  r39089 | dgregor | 2007-08-31 10:23:51 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Add empty directory
........
  r39090 | dgregor | 2007-08-31 10:24:36 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Create an empty directory
........
  r39091 | igaztanaga | 2007-08-31 15:57:11 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Added missing comma
........
  r39092 | chris_kohlhoff | 2007-08-31 23:08:45 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Need to try binding the acceptor to test whether IPv6 is supported.
........
  r39093 | chris_kohlhoff | 2007-08-31 23:13:02 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Ignore errors from shutdown().
........
  r39094 | chris_kohlhoff | 2007-08-31 23:20:19 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Enable buffer() overload workaround for Sun C++.
........
  r39095 | chris_kohlhoff | 2007-08-31 23:25:55 -0700 (Fri, 31 Aug 2007) | 3 lines
  
  Add AIX-specific compile time test for whether sockaddr_storage's family
  field is called ss_family or __ss_family.
........
  r39096 | chris_kohlhoff | 2007-08-31 23:28:40 -0700 (Fri, 31 Aug 2007) | 3 lines
  
  Ensure that a strand is kept alive as long as there are wrapped handlers
  for it.
........
  r39097 | chris_kohlhoff | 2007-08-31 23:33:44 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Add #include needed for IOV_MAX.
........
  r39098 | chris_kohlhoff | 2007-08-31 23:41:15 -0700 (Fri, 31 Aug 2007) | 7 lines
  
  Fix problem where a thread can go idle even if there are handlers that are
  ready to be dispatched.
  
  Remove need to have a mutex per idle thread.
  
  Remove need to have a mutex per idle thread.
........
  r39100 | chris_kohlhoff | 2007-09-01 00:32:28 -0700 (Sat, 01 Sep 2007) | 3 lines
  
  Define _WIN32_WINNT to suppress warnings. Add define necessary
  for building with cygwin.
........
  r39102 | vladimir_prus | 2007-09-01 01:55:35 -0700 (Sat, 01 Sep 2007) | 1 line
  
  Initial support for defining action body from Python.
........
  r39103 | vladimir_prus | 2007-09-01 13:28:42 -0700 (Sat, 01 Sep 2007) | 4 lines
  
  Fix glob excludes in subdirectories.
  
  Thanks to Norbert Unterberg for the bug report.
........
  r39104 | vladimir_prus | 2007-09-01 14:46:09 -0700 (Sat, 01 Sep 2007) | 5 lines
  
  Make free features on the command line affect all targets,
  not just directly requested ones.
  
  Fixes #985.
........
  r39105 | vladimir_prus | 2007-09-01 15:10:46 -0700 (Sat, 01 Sep 2007) | 4 lines
  
  Previously, I've accidentally committed a patch
  to make <tag> affect names of searched libraries.
  This commit greatly simplifies that.
........
  r39106 | speedsnail | 2007-09-02 08:57:36 -0700 (Sun, 02 Sep 2007) | 2 lines
  
  Merged in volodyas patch from RC_1_34_0
  http://lists.boost.org/boost-users/2007/05/27724.php
........
  r39107 | speedsnail | 2007-09-02 11:37:14 -0700 (Sun, 02 Sep 2007) | 1 line
  
  Changed library naming convention for mingw and cygwin. For details see comment in file. Also should resolve Ticket #1058 .
........
  r39112 | aaron_windsor | 2007-09-03 08:04:05 -0700 (Mon, 03 Sep 2007) | 1 line
  
  Modified odd_components_counter to fix signed/unsigned mismatch on Sandi pgi-6.1 tests.
........
  r39113 | speedsnail | 2007-09-03 12:38:40 -0700 (Mon, 03 Sep 2007) | 1 line
  
  Make use of gnu ld's -Bstatic and -Bdynamic switches to choose order of libraries searched by -l switch.
........
  r39120 | vladimir_prus | 2007-09-04 13:26:19 -0700 (Tue, 04 Sep 2007) | 2 lines
  
  Allow to print the tree delta to any file.
........
  r39121 | vladimir_prus | 2007-09-04 13:29:56 -0700 (Tue, 04 Sep 2007) | 1 line
  
  Unbreak the gcc_runtime test
........
  r39126 | eric_niebler | 2007-09-04 23:31:27 -0700 (Tue, 04 Sep 2007) | 1 line
  
  remove unused variables
........
  r39128 | vladimir_prus | 2007-09-05 01:03:17 -0700 (Wed, 05 Sep 2007) | 1 line
  
  Remove unnecessary line
........
  r39130 | bgubenko | 2007-09-05 10:14:29 -0700 (Wed, 05 Sep 2007) | 1 line
  
  missing conditionalization for g++ on HP-UX
........
  r39131 | burbelgruff | 2007-09-05 12:52:18 -0700 (Wed, 05 Sep 2007) | 1 line
  
  boost.typeof now supports native typeof for VC8.0
........
  r39132 | bgubenko | 2007-09-05 16:43:40 -0700 (Wed, 05 Sep 2007) | 1 line
  
  Boost.Build V2 toolset for the HP aC++ compiler on PA-RISC
........
  r39134 | burbelgruff | 2007-09-06 00:22:10 -0700 (Thu, 06 Sep 2007) | 1 line
  
  typeof: Implemented native typeof for DMC 8.50 based on the same bugfeature used to support VC6.5 and VC7.1
........
  r39150 | johnmaddock | 2007-09-06 10:10:05 -0700 (Thu, 06 Sep 2007) | 1 line
  
  Updated gcc config using STLport's settings so that TR1 functions correctly when Boost is installed in for example /usr/include/
........
  r39151 | bgubenko | 2007-09-06 12:01:07 -0700 (Thu, 06 Sep 2007) | 1 line
  
  marking up tests for acc_pa_risc toolset
........
  r39156 | bgubenko | 2007-09-07 10:02:12 -0700 (Fri, 07 Sep 2007) | 1 line
  
  markup test is_lvalue_iterator for acc_pa_risc toolset
........
  r39157 | nielsdekker | 2007-09-07 10:17:09 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Added MSVC workaround to value_initialized, as described by ticket #1217, proposed at the Boost Developers mailing list, and discussed with Fernando Cacciola.
........
  r39158 | bgubenko | 2007-09-07 11:40:47 -0700 (Fri, 07 Sep 2007) | 1 line
  
  conditionalization for PA-RISC
........
  r39160 | vladimir_prus | 2007-09-07 14:34:27 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Adjust faq entry about targets in site-config.jam
........
  r39161 | vladimir_prus | 2007-09-07 16:18:20 -0700 (Fri, 07 Sep 2007) | 4 lines
  
  Make output from test run nicer, and more structured.
  In future, we might be able to generate XML, or any other voodoo
  we want.
........
  r39162 | vladimir_prus | 2007-09-07 16:51:07 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Undo #38702, which fixes alternative.py on linux. Real fix for win coming soon.
........
  r39163 | vladimir_prus | 2007-09-07 16:59:10 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Make it work
........
  r39164 | vladimir_prus | 2007-09-07 16:59:54 -0700 (Fri, 07 Sep 2007) | 3 lines
  
  Implement --ignore-toolset-requirements and set in
  during testing.
........
  r39165 | vladimir_prus | 2007-09-07 17:15:23 -0700 (Fri, 07 Sep 2007) | 3 lines
  
  Fix remove_requirements test.  I have no idea how
  it could have passed as-is.
........
  r39166 | vladimir_prus | 2007-09-07 17:26:18 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Print test results summary at the end
........
  r39168 | vladimir_prus | 2007-09-08 09:24:50 -0700 (Sat, 08 Sep 2007) | 4 lines
  
  	Fix the rebuilds test on linux.
  	* BoostBuild.py (wait_for_time_change): Use floor,
  	to avoid waiting 0.5 seconds.
  	* rebuilds.py: Wait for time change as necessary.
........
  r39169 | vladimir_prus | 2007-09-08 10:10:26 -0700 (Sat, 08 Sep 2007) | 1 line
  
  Record failure reason when we fail to open a file.
........
  r39173 | bemandawes | 2007-09-09 07:59:10 -0700 (Sun, 09 Sep 2007) | 1 line
  
  Merge system and filesystem branches, bringing them in sync with N2415. Several filesystem bugs fixed, and current_path setter added.
........
  r39174 | bemandawes | 2007-09-09 10:48:17 -0700 (Sun, 09 Sep 2007) | 1 line
  
  Posix and Linux fixes
........
  r39175 | johnmaddock | 2007-09-10 02:19:49 -0700 (Mon, 10 Sep 2007) | 8 lines
  
  Big type_traits update:
  
  Added make_signed, make_unsigned and is_complex.
  Added docs for some previously undocumented traits: is_signed, is_unsigned and decay.html
  Added synonyms for some traits that have changed name in the latest C++ std draft.
  Re-organised docs, moved docs out of the main doc build for now (it takes too long).
  
  This also fixes issues: http://svn.boost.org/trac/boost/ticket/492 and http://svn.boost.org/trac/boost/ticket/1008.
........
  r39176 | johnmaddock | 2007-09-10 03:35:51 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Applied fix for http://svn.boost.org/trac/boost/ticket/883.
........
  r39177 | johnmaddock | 2007-09-10 03:37:19 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Added optional code to test SGI rope with Regex.
........
  r39178 | johnmaddock | 2007-09-10 04:24:53 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Try and force a date update.
........
  r39179 | johnmaddock | 2007-09-10 04:27:31 -0700 (Mon, 10 Sep 2007) | 1 line
  
  OK finally got date modified set right.
........
  r39181 | johnmaddock | 2007-09-10 09:22:35 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Oops, doc update broke the tests, fixed now.
........
  r39183 | johnmaddock | 2007-09-10 10:18:16 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Added new macros def's that are needed by the various additions that have been added to Boost.Config.
........
  r39186 | bemandawes | 2007-09-10 18:11:03 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Chris Kohlhoff says change needed for asio to link correctly
........
  r39187 | bemandawes | 2007-09-10 19:05:58 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Ha! Finally figured out how to shut off msvc exception switch warning.
........
  r39188 | bemandawes | 2007-09-10 19:07:50 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Ha! Finally figured out how to shut off msvc exception switch warning. Also fix define misspelling.
........
  r39189 | chris_kohlhoff | 2007-09-11 04:17:56 -0700 (Tue, 11 Sep 2007) | 2 lines
  
  Use enum-based error code constants.
........
  r39190 | bgubenko | 2007-09-11 09:24:28 -0700 (Tue, 11 Sep 2007) | 1 line
  
  add conditionalization for g++ on HP-UX
........
  r39191 | rwgk | 2007-09-11 09:53:50 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Patches by Nikolay Mladenov (nickm at sitius com): new pythonic signatures; docstring support for enums; fix unrelated Visual C++ 6 problem
........
  r39193 | bgubenko | 2007-09-11 11:54:50 -0700 (Tue, 11 Sep 2007) | 1 line
  
  base detection of EDG-based compiler on __EDG__ macro
........
  r39194 | vladimir_prus | 2007-09-11 12:16:06 -0700 (Tue, 11 Sep 2007) | 3 lines
  
  Don't try to apply --build-dir to standalone projects.
  Fixes build_dir test failure on linux.
........
  r39195 | vladimir_prus | 2007-09-11 12:17:49 -0700 (Tue, 11 Sep 2007) | 4 lines
  
          * BoostBuild.py (wait_for_time_change): Wait
          for more serious time change, in order to
          fix sporadic dependency_test failures.
........
  r39196 | bgubenko | 2007-09-11 12:31:55 -0700 (Tue, 11 Sep 2007) | 1 line
  
  define macros specific to RW V2.2 on HP-UX
........
  r39197 | vladimir_prus | 2007-09-11 12:36:48 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Don't run gcc_runtime test on msvc
........
  r39198 | bgubenko | 2007-09-11 12:54:59 -0700 (Tue, 11 Sep 2007) | 1 line
  
  make sure HP-UX-specific macros are not redefined
........
  r39199 | pdimov | 2007-09-11 13:58:19 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Fixes #1243
........
  r39204 | grafik | 2007-09-11 21:21:57 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Add regression result pages automation script.
........
  r39211 | chris_kohlhoff | 2007-09-12 05:24:21 -0700 (Wed, 12 Sep 2007) | 2 lines
  
  AIX seems to have the socket address family as an unsigned char rather than unsigned short.
........
  r39219 | johnmaddock | 2007-09-12 09:44:16 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Fixed is_base_of/is_base_and_derived so that you get a compiler error if you try and use them with an incomplete class type.
........
  r39220 | bemandawes | 2007-09-12 11:31:25 -0700 (Wed, 12 Sep 2007) | 1 line
  
  POSIX fix from Neal Becker
........
  r39223 | nikiml | 2007-09-12 14:31:39 -0700 (Wed, 12 Sep 2007) | 1 line
  
  fixed problem reported by Neal Becker; added a test case
........
  r39226 | bemandawes | 2007-09-12 14:43:20 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Some compilers warn on trailing enum constant list commas, so remove these to quiet the warnings.
........
  r39227 | guwi17 | 2007-09-12 14:44:37 -0700 (Wed, 12 Sep 2007) | 2 lines
  
  lu.hpp: introduced temporary to avoid strange compiler problem.
........
  r39230 | bemandawes | 2007-09-12 20:17:17 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Add Boost.System test suite
........
  r39231 | johnmaddock | 2007-09-13 02:04:12 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Fix for broken limits_test build.
........
  r39233 | guwi17 | 2007-09-13 05:13:20 -0700 (Thu, 13 Sep 2007) | 3 lines
  
  overview.htm: fixed typo 
........
  r39237 | bgubenko | 2007-09-13 09:11:38 -0700 (Thu, 13 Sep 2007) | 1 line
  
  reapply fix for gcc on HP-UX in -r39130
........
  r39238 | garcia | 2007-09-13 09:17:05 -0700 (Thu, 13 Sep 2007) | 2 lines
  
  added fast-track reviews.
........
  r39240 | dgregor | 2007-09-13 10:38:58 -0700 (Thu, 13 Sep 2007) | 7 lines
  
  function/function_base.hpp, function/function_template.hpp:
    - Switch from dynamic initialization of the vtable pointer to static
      initialization (Fixes #1260)
    - Handle member pointers properly, only using mem_fn within the invoker
      to deal with all of the messy bits of calling member pointers
........
  r39242 | dgregor | 2007-09-13 11:43:00 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Update the nag script to use Subversion
........
  r39243 | dgregor | 2007-09-13 11:50:50 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Work around bugs in Sun Studio 11
........
  r39244 | dgregor | 2007-09-13 12:06:53 -0700 (Thu, 13 Sep 2007) | 4 lines
  
  function_template.hpp:
    - Pass-by-reference internally, when we can. Fixes #1067
........
  r39245 | dgregor | 2007-09-13 12:31:03 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Don't use BOOST_TEST_DONT_PRINT_LOG_VALUE if it isn't defined
........
  r39246 | dgregor | 2007-09-13 12:41:27 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Teach cycle_ratio_tests to find its input files during regression testing
........
  r39247 | dgregor | 2007-09-13 12:58:30 -0700 (Thu, 13 Sep 2007) | 1 line
  
  We can no longer use is_base_and_derived with incomplete types, not that it worked well before
........
  r39248 | bemandawes | 2007-09-13 14:47:25 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Ensure error_category::operator< test works regardless of how compiler lays out memory.
........
  r39249 | hkaiser | 2007-09-13 14:49:01 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Wave: fixed test build/Jamfile.v2 to include threading library
........
  r39251 | hkaiser | 2007-09-13 14:54:32 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Wave: Fixed a bug in the Slex token class, which was the reason for some failing tests lately
........
  r39254 | bemandawes | 2007-09-13 18:58:20 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Add usage-requirements. See comment in file.
........
  r39255 | bemandawes | 2007-09-13 19:00:25 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Remove <runtime-link>static to see if that is what is causing link problems on a few gcc platforms
........
  r39256 | bgubenko | 2007-09-13 19:25:06 -0700 (Thu, 13 Sep 2007) | 1 line
  
  on HP-UX, macro BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS should be defined only if macro _REENTRANT is defined
........
  r39258 | johnmaddock | 2007-09-14 01:54:31 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Apply sunpro fix from 1.34.1
........
  r39259 | johnmaddock | 2007-09-14 02:20:37 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Touched header to force rebuild of config tests.
........
  r39260 | johnmaddock | 2007-09-14 02:25:29 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Touched files to force tests to be re-run with new Jamfile.
........
  r39261 | bemandawes | 2007-09-14 03:37:11 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Supply errno values missing from Windows Mobile
........
  r39266 | garcia | 2007-09-14 08:04:41 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Updated the comments on the libraries that were newly released in 1.34.
........
  r39267 | vladimir_prus | 2007-09-14 08:28:13 -0700 (Fri, 14 Sep 2007) | 3 lines
  
          * gcc.jam (init-link-flags): Add missing
          'unchecked'. This was breaking intel.
........
  r39268 | vladimir_prus | 2007-09-14 08:30:42 -0700 (Fri, 14 Sep 2007) | 4 lines
  
  Remove acc_pa_risc.jam. Given that it's a copy
  of acc.jam with only toolset name changed, I see
  no point in having this file.
........
  r39269 | bemandawes | 2007-09-14 08:43:22 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Initial commit
........
  r39270 | bemandawes | 2007-09-14 08:45:36 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Replace docs with up-to-date contents, design
........
  r39273 | grafik | 2007-09-14 09:29:37 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Point dev reports to beta.boost.org site.
........
  r39274 | cepstein | 2007-09-14 10:18:02 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Quiet unused argument warnings from gcc.
........
  r39282 | pdimov | 2007-09-14 12:19:09 -0700 (Fri, 14 Sep 2007) | 1 line
  
  CINT support (Nils Krumnack)
........
  r39283 | garcia | 2007-09-14 13:56:59 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Initial Revision.
........
  r39284 | garcia | 2007-09-14 13:59:44 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Review Wizard Status Report for October 2007.
........
  r39285 | dgregor | 2007-09-14 14:05:46 -0700 (Fri, 14 Sep 2007) | 5 lines
  
  Finalizes the fix to Bug #1260, making vtable_base an actual POD type (oops)
  and playing more nicely with reinterpret_cast (thanks to Brad King for the
  fixes).
........
  r39286 | dgregor | 2007-09-14 14:17:06 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Fix the cycle ratio tests for real
........
  r39291 | djowel | 2007-09-14 17:19:44 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Fix Ticket Ticket #1235
  (http://svn.boost.org/trac/boost/ticket/1235)
........
  r39292 | bemandawes | 2007-09-14 18:36:14 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Missing std added to ::remove to clear problem in Sun tests
........
  r39295 | grafik | 2007-09-14 21:33:32 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Call the correct subjam file.
........
  r39302 | rwgk | 2007-09-15 16:11:50 -0700 (Sat, 15 Sep 2007) | 1 line
  
  work around Visual C++ 7.1 internal compiler error
........
  r39307 | johnmaddock | 2007-09-16 01:50:09 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Fix msvc warnings.
........
  r39308 | niels_dekker | 2007-09-16 02:33:34 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Visual C++ 7.1 ICE workaround by Ralf W. Grosse-Kunstleve added to ~const_T_base() as well.  See also Boost Developers mailing list, subject "utility/value_init.hpp: VC 7.1 ICE & workaround" 
........
  r39309 | niels_dekker | 2007-09-16 02:48:28 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Added unit test to make sure that Visual C++ 7.1 ICE reported by Ralf W. Grosse-Kunstleve (Boost Developers mailing list, subject "utility/value_init.hpp: VC 7.1 ICE & workaround") will not occur anymore.
........
  r39315 | johnmaddock | 2007-09-16 04:20:25 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Added needed include (for CHAR_BIT).
........
  r39330 | grafik | 2007-09-16 14:35:19 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Implement @() expansion during parse phase. (fixes #721)
........
  r39331 | grafik | 2007-09-16 14:55:02 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Define OSPLAT var unconditionally, and more generically, when possible. (fixes #798)
........
  r39332 | grafik | 2007-09-16 15:13:02 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Fix undeclared INT_MAX on some platforms, i.e. Linux.
........
  r39334 | noel_belcourt | 2007-09-16 17:27:37 -0700 (Sun, 16 Sep 2007) | 14 lines
  
  Added missing #include <utility> and qualified
  make_pair with std:: to library_status.cpp.
  
  Added missing headers to make1.c and missing prototypes
  to builtin.h
  
  Modified execunix.c to add support for terminating
  processes that consume too much cpu or that hang and
  fail to consume cpu at all.  This in support of the
  bjam -lx option.
  
  http://svn.boost.org/trac/boost/ticket/1266#comment:2
........
  r39335 | grafik | 2007-09-16 17:44:16 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Add test for ticket #431.
........
  r39336 | grafik | 2007-09-16 17:54:20 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Really fix missing INT_MAX declaration. And fix pma.jam test on Unix.
........
  r39337 | lbourdev | 2007-09-16 23:36:22 -0700 (Sun, 16 Sep 2007) | 3 lines
  
  GIL: Updating mandelbrot example with the new GIL.
........
  r39338 | lbourdev | 2007-09-17 00:53:06 -0700 (Mon, 17 Sep 2007) | 1 line
  
  fixing affine
........
  r39339 | lbourdev | 2007-09-17 01:12:19 -0700 (Mon, 17 Sep 2007) | 1 line
  
  GIL 2.0 to 2.1 (see http://opensource.adobe.com/gil/gil2.1_changes.pdf). GIL 2.1 to 2.1.1 (see http://sourceforge.net/forum/forum.php?thread_id=1824588&forum_id=648138)
........
  r39341 | grafik | 2007-09-17 01:32:24 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add internal dependencies for multi-file generating actions to indicate that the targets all only appear when the first target appears. (fixes ticket #431)
........
  r39342 | schoepflin | 2007-09-17 02:04:37 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Corrections for Tru64/CXX.
........
  r39350 | grafik | 2007-09-17 09:16:29 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add redirect for trunk so that we can point the issues email link to a stable location.
........
  r39351 | grafik | 2007-09-17 09:17:52 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Point issues link to stable location.
........
  r39352 | grafik | 2007-09-17 09:58:10 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add test of -l limit option now that it's implemented on windows and unix.
........
  r39353 | dgregor | 2007-09-17 11:33:20 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Support Win64
........
  r39354 | vladimir_prus | 2007-09-17 12:29:06 -0700 (Mon, 17 Sep 2007) | 3 lines
  
  Allow to specify version, and explicitly specify
  the command, when initializing the acc toolset.
........
  r39355 | grafik | 2007-09-17 13:00:18 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add test for no-op @() expansion.
........
  r39357 | grafik | 2007-09-17 14:35:58 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Handle invalid formats of @() as doing a straight substitution instead of erroring out.
........
  r39358 | noel_belcourt | 2007-09-17 16:30:57 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  Rene found a problem with the code I committed to
  terminate expired processes.  This patch basically
  causes the select function to return after -l seconds.
  This gives me a shot at killing processes still
  running.
........
  r39359 | djowel | 2007-09-17 17:18:56 -0700 (Mon, 17 Sep 2007) | 1 line
  
  bugfix tuples::null_type and tuples::tuple<> iterators not comparing ok.
........
  r39360 | noel_belcourt | 2007-09-17 19:42:13 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  Fix One more obscure way for the timeout to miss processes.
  
  If select times out (no processes terminated), then all running
  processes can be terminated.  Cleaned up code when this condition
  applies.
........
  r39361 | noel_belcourt | 2007-09-17 20:27:48 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  A minor optimization to eliminate two OS calls (one
  to times, one to kill).  Now all expired processes
  are killed in one place.  If the select command
  times out, I set each processes start_time to zero
  to ensure it is picked up as an expired process.
........
  r39362 | vladimir_prus | 2007-09-18 04:44:13 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Expand aCC documentation
........
  r39363 | dgregor | 2007-09-18 05:09:53 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Second attempt at fixing usage of 64-bit integer type
........
  r39364 | chris_kohlhoff | 2007-09-18 06:13:40 -0700 (Tue, 18 Sep 2007) | 2 lines
  
  Fix unused argument warning.
........
  r39365 | bemandawes | 2007-09-18 08:37:36 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Remove files after tests
........
  r39366 | johnmaddock | 2007-09-18 09:32:29 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Added Mathias Kock and Joerg Walter.
........
  r39367 | grafik | 2007-09-18 10:02:04 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Replace breaks, to remove warnings, with custom structural templates.
........
  r39368 | nikiml | 2007-09-18 10:16:31 -0700 (Tue, 18 Sep 2007) | 1 line
  
  epydoc friendlier formatting
........
  r39369 | johnmaddock | 2007-09-18 10:19:41 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Updated licences using blanket_permission.txt.
........
  r39370 | nikiml | 2007-09-18 10:28:23 -0700 (Tue, 18 Sep 2007) | 1 line
  
  tabs removes, code reformatting
........
  r39371 | nikiml | 2007-09-18 10:32:06 -0700 (Tue, 18 Sep 2007) | 1 line
  
  epydoc friendlier formatting
........
  r39372 | nikiml | 2007-09-18 10:51:47 -0700 (Tue, 18 Sep 2007) | 1 line
  
  fixed cpp signature related test failure
........
  r39373 | garcia | 2007-09-18 12:03:47 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  Added Tobias Schwinger as Review Manager for Exception.
  Added entry for X-files.
  Added download links for Property Maps and Graph.
........
  r39374 | garcia | 2007-09-18 12:10:12 -0700 (Tue, 18 Sep 2007) | 2 lines
  
  Split X-Files review into three separate reviews.
........
  r39375 | bemandawes | 2007-09-18 14:01:26 -0700 (Tue, 18 Sep 2007) | 1 line
  
  quiet compiler warning
........
  r39376 | hljin | 2007-09-18 14:19:05 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  GIL:
  1. changed int to std::ptrdiff_t in utilities.hpp and iterator_from_2d.hpp for problems under 64-bit platforms
  2. removed several extra semi-colons after GIL_CLASS_REQUIRE
........
  r39377 | hljin | 2007-09-18 14:37:08 -0700 (Tue, 18 Sep 2007) | 1 line
  
  GIL: fixed incorrect header files for std::bad_cast
........
  r39378 | noel_belcourt | 2007-09-18 15:46:26 -0700 (Tue, 18 Sep 2007) | 14 lines
  
  Remove unnecessary overhead in execunix.c related to
  the timeout implementation.  Also removed unused variables
  as diagnosed by the Sgi (mipspro) compiler.
  
  Fixed const-correctness error in operations.hpp that
  Sgi complained about.
  
  There's no strerror_r function on Irix 6.5 so I replaced
  it with a strerror call.
  
  With these changes, I can now build process jam log and
  start running Sgi tests.
........
  r39379 | noel_belcourt | 2007-09-18 18:46:11 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  Undo patch of operations.hpp, Sgi wants this fix
  but it causes svn trunk to break.
........
  r39381 | grafik | 2007-09-18 19:39:08 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Fix extra, missed, para inside warning admonition.
........
  r39382 | noel_belcourt | 2007-09-18 19:59:00 -0700 (Tue, 18 Sep 2007) | 8 lines
  
  Update the mipspro.jam file so have the compiler
  emit each referenced template in the object file
  where referenced and then rely on the linker to
  remove duplicates.
  
  Added some missing macros to sgi_mipspro.hpp.
........
  r39383 | grafik | 2007-09-18 20:59:52 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Style simplelist tables, to look like regular text lines.
........
  r39384 | grafik | 2007-09-18 21:03:22 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Don't make nav links white to prevent then from not showing up when the images are not present.
........
  r39385 | grafik | 2007-09-18 21:54:30 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Remove some outdated comments as some bugs are now fixed. Try to work around boostbook XSL.
........
  r39392 | hljin | 2007-09-19 11:41:47 -0700 (Wed, 19 Sep 2007) | 1 line
  
  GIL: fixed the C4503 warnings under VC
........
  r39393 | hljin | 2007-09-19 11:45:30 -0700 (Wed, 19 Sep 2007) | 1 line
  
  GIL: commented out unnecessary pragma warning directives
........
  r39394 | bemandawes | 2007-09-19 12:28:56 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Add get_posix_category, get_system_category, to solve order-of-initialization issues
........
  r39395 | grafik | 2007-09-19 12:29:31 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Make get-values preserve the values exactly, instead of treating them like paths and hence munging them.
........
  r39396 | bemandawes | 2007-09-19 12:30:23 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Add get_posix_category, get_system_category, to solve order-of-initialization issues
........
  r39397 | grafik | 2007-09-19 12:47:25 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Work around boostbook path issues.
........
  r39398 | garcia | 2007-09-19 14:29:29 -0700 (Wed, 19 Sep 2007) | 2 lines
  
  made Tobias' reviews fast-track.
........
  r39399 | noel_belcourt | 2007-09-19 21:11:11 -0700 (Wed, 19 Sep 2007) | 15 lines
  
  Fix a bug Chris Cambly reported with the timeout code on
  AIX.  Apparently AIX doesn't permit a forked process to 
  reference (set) memory in the parent's address space.  No 
  other system seems to object to this practice but it taught
  me a lesson!
  
  The fix was to move the call to get the child process start 
  time directly before calling vfork.  This isn't really fair 
  to the forked process as we start counting time against the
  child process that we haven't even forked (we count the 
  vfork/exec call overhead against the child process).
  
  Tested Rene's test.sh script on Sun, Linux, AIX, and Sgi.
........
  r39400 | grafik | 2007-09-19 21:36:27 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Now that the exec*.c files are really platform specific, adjust the build script to only build the needed ones for MinGW.
........
  r39401 | schoepflin | 2007-09-20 00:35:43 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Added missing include for assert.
........
  r39404 | garcia | 2007-09-20 05:15:28 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fixed dates and filename.
........
  r39405 | johnmaddock | 2007-09-20 05:28:34 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Updated ICU build options to fix build on Darwin and elsewhere.
........
  r39408 | johnmaddock | 2007-09-20 05:38:53 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Update to TR1 to better support gcc.
  Refactored configuration settings so if the .hpp versions of the headers are included then there's no need to figure out the location of the actual std lib headers.
  Updated docs to match.
........
  r39409 | bgubenko | 2007-09-20 05:42:27 -0700 (Thu, 20 Sep 2007) | 1 line
  
  add -AA to link actions, remove +DD64
........
  r39412 | garcia | 2007-09-20 08:34:17 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fixed the date, updated the copy.
........
  r39415 | garcia | 2007-09-20 08:59:57 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Added Lexer.
........
  r39416 | grafik | 2007-09-20 09:31:44 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Add partial code for indicating to the output function that a command finished because of a timeout.
........
  r39417 | bgubenko | 2007-09-20 09:34:31 -0700 (Thu, 20 Sep 2007) | 1 line
  
  more conditionalization for PA-RISC
........
  r39418 | bgubenko | 2007-09-20 09:59:45 -0700 (Thu, 20 Sep 2007) | 1 line
  
  check that on HP-UX, the Standard RW library is used
........
  r39421 | johnmaddock | 2007-09-20 10:54:55 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Oops, forgot to add new file!!
........
  r39423 | noel_belcourt | 2007-09-20 12:06:54 -0700 (Thu, 20 Sep 2007) | 13 lines
  
  Added diagnostic message to output.c to inform users
  when a process has timed out and been killed.
  
  Because timed out processes now emit a diagnostic, I
  had to update option_l.jam so we wouldn't break test.sh
  when it runs.
  
  Minor cleanup to execunix.c to remove unneeded code
  and to set the process exit status as returned from
  waitpid.  The exit status is used to identify timed
  out processes so we can emit a diagnostic to the user.
........
  r39424 | garcia | 2007-09-20 12:39:53 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Updated. Added links for constrained value.
........
  r39425 | bemandawes | 2007-09-20 12:55:32 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Always update self. Updating based on file date was not reliable on all systems.
........
  r39427 | pdimov | 2007-09-20 13:46:56 -0700 (Thu, 20 Sep 2007) | 1 line
  
  defined(__ppc) added (Daniel P Furlani)
........
  r39428 | bemandawes | 2007-09-20 14:04:34 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Strictly conforming compilers (EDG with --dep_name) require the make_* functions be defined before used. Report and fix from Markus Schopflin. EDG info from Boris Gubenko.
........
  r39429 | chris_kohlhoff | 2007-09-20 15:20:57 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Larger storage size needed for Windows x64.
........
  r39430 | chris_kohlhoff | 2007-09-20 15:26:55 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Move handler queue management to a separate class.
........
  r39431 | chris_kohlhoff | 2007-09-20 15:30:54 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Some compilers require namespace-scope declarations of use_service,
  has_service and add_service.
........
  r39432 | chris_kohlhoff | 2007-09-20 15:33:29 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Eliminate use of types and structure members that may not be present when
  build for non-XOPEN targets.
........
  r39433 | chris_kohlhoff | 2007-09-20 15:44:33 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Regenerate documentation.
........
  r39434 | rwgk | 2007-09-20 16:20:45 -0700 (Thu, 20 Sep 2007) | 1 line
  
  gcc 4.3.0 compatibility (resolves new "changes meaning" error)
........
  r39435 | garcia | 2007-09-20 16:22:46 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  A little note to minimize confusion (I know I was confused).
........
  r39436 | chris_kohlhoff | 2007-09-20 22:42:55 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fix documentation generation.
........
  r39438 | bemandawes | 2007-09-21 04:45:23 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Some compilers require all of the make_error_* functions be template specializations. See prior log message.
........
  r39440 | bemandawes | 2007-09-21 04:58:05 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add revision to collected, uploaded, info
........
  r39441 | bemandawes | 2007-09-21 04:59:54 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add revision to collected, uploaded, info. Add --have-source, --skip-tests options to ease regression.py testing.
........
  r39442 | garcia | 2007-09-21 05:33:31 -0700 (Fri, 21 Sep 2007) | 2 lines
  
  small html and grammar fixes.
........
  r39443 | chris_kohlhoff | 2007-09-21 05:34:19 -0700 (Fri, 21 Sep 2007) | 5 lines
  
  Strict compilers don't like it when you pass a function with C linkage
  as an argument when the parameter type has C++ linkage. Try using the type
  of the msghdr::msg_namelen field as an alternative way of deducing the
  socklen_t-equivalent type.
........
  r39447 | bemandawes | 2007-09-21 07:46:04 -0700 (Fri, 21 Sep 2007) | 1 line
  
  revision default needs actual value
........
  r39448 | danmarsden | 2007-09-21 08:44:57 -0700 (Fri, 21 Sep 2007) | 1 line
  
  fixing result of related fusion docs issues for fold, accumulate, and transform view/alg
........
  r39449 | bemandawes | 2007-09-21 09:42:27 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Fix order-of-initialization problem, add initialization_test.cpp to detect regression.
........
  r39450 | grafik | 2007-09-21 10:14:13 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add svn_info.txt file to annotate the revision exported.
........
  r39464 | igaztanaga | 2007-09-21 13:45:14 -0700 (Fri, 21 Sep 2007) | 2 lines
  
  Glenn Schrader patch: Segmentation fault with 1.34+ on Linux x86_64.
  Reason: The ~ only complemented the 32 bit unsigned value. When the value was expanded into a size_t the value isn't sign extended so the upper 32 bits wind up being zero. Since this is used as an address mask the upper half of the address is zeroed.
........
  r39465 | bemandawes | 2007-09-21 13:57:44 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Eliminate Concept library use to reduce dependencies
........
  r39466 | grafik | 2007-09-21 14:01:45 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Adjust timing to avoid spurious test failures on busy machines.
........
  r39467 | noel_belcourt | 2007-09-21 15:38:17 -0700 (Fri, 21 Sep 2007) | 21 lines
  
  Another patch to fix the -lx timeout code.  Some actions spawn
  sub-processes after bjam forks a new process (for example, after
  g++ is forked by bjam, g++ then forks sub-processes like cc1plus).
  The timeout code would kill the g++ process, but might not kill
  the subprocesses spawned by g++.
  
  I fixed this problem by making the bjam fork'ed process (g++) a 
  session leader by calling setsid() before calling exec.  The setsid 
  call, in essence, gives all child processes a parent process id 
  (ppid) of the g++ process id.  This guarantees that killing g++ 
  will kill all child processes spawned by g++ as well.
  
  One last comment on the maximum process time before a process is actually
  killed.  The worst case process elapsed time is 2x seconds if -lx is
  given.  The reason is that a process might be one second away from being
  killed and, if there's no other signal activity, the select function will
  wait x seconds before timing out and killing any active processes.  So
  if you say -lx and monitor a build known to have lengthy processes, you 
  may see a process with up to 2x seconds of time before it is killed.
........
  r39468 | djowel | 2007-09-21 18:05:29 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Doc updates
........
  r39469 | djowel | 2007-09-21 18:08:51 -0700 (Fri, 21 Sep 2007) | 1 line
  
  bugfix tuples::null_type and tuples::tuple<> iterators not comparing ok.
........
  r39470 | igaztanaga | 2007-09-21 23:15:21 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Sign extension bug. Not should be applied after the constant has been expanded to size_t. Thanks to Glenn Schrader.
........
  r39473 | johnmaddock | 2007-09-22 02:24:05 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Fix for gcc -Wundef warnings. See http://svn.boost.org/trac/boost/ticket/1130.
........
  r39474 | t_schwinger | 2007-09-22 04:09:35 -0700 (Sat, 22 Sep 2007) | 2 lines
  
  adds concept examples
........
  r39475 | johnmaddock | 2007-09-22 04:27:25 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Updated license declaration.
........
  r39477 | bemandawes | 2007-09-22 07:39:50 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Add revision to column heads. Patch courtesy of Sebastian Redl.
........
  r39480 | aaron_windsor | 2007-09-22 10:41:18 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Some fixes for errors and warnings on HP cxx.
........
  r39481 | eric_niebler | 2007-09-22 12:30:25 -0700 (Sat, 22 Sep 2007) | 1 line
  
  attempt to fix hp tru64
........
  r39484 | ramey | 2007-09-22 14:24:41 -0700 (Sat, 22 Sep 2007) | 1 line
  
  merged in changes - tested with gcc and msvc
........
  r39485 | nmusatti | 2007-09-23 05:47:52 -0700 (Sun, 23 Sep 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39490 | johnmaddock | 2007-09-23 10:49:44 -0700 (Sun, 23 Sep 2007) | 1 line
  
  Fix up file so it can be compiled in C mode.
........
  r39492 | noel_belcourt | 2007-09-23 14:31:43 -0700 (Sun, 23 Sep 2007) | 5 lines
  
  Fix problems with Pathscale toolset (-G and -h options
  are unknown).   Thanks John Maddock for pointing these
  out.
........
  r39497 | djowel | 2007-09-23 23:03:12 -0700 (Sun, 23 Sep 2007) | 1 line
  
  added new import syntax for ignoring code.
........
  r39498 | schoepflin | 2007-09-24 00:31:43 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Removed unused variable.
........
  r39499 | schoepflin | 2007-09-24 00:38:35 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Add needed include (according to XOPEN) for definition of WIFEXITED and WEXITSTATUS.
........
  r39502 | chris_kohlhoff | 2007-09-24 05:53:37 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Use a switch rather than an array to translate system_category error codes to their corresponding default error conditions. Add translations for the Winsock error codes.
........
  r39503 | chris_kohlhoff | 2007-09-24 06:19:31 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Try making the ip::multicast::enable_loopback socket option an unsigned char on AIX.
........
  r39504 | chris_kohlhoff | 2007-09-24 06:21:03 -0700 (Mon, 24 Sep 2007) | 3 lines
  
  Check whether exceptions are enabled on the output iostream and throw or not
  throw errors accordingly.
........
  r39505 | chris_kohlhoff | 2007-09-24 06:21:49 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Output error codes and error messages when a test fails.
........
  r39506 | grafik | 2007-09-24 06:24:23 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Make per target manifest files and a single global catalog files, so that one can have multiple boostbook targets in one project.
........
  r39507 | chris_kohlhoff | 2007-09-24 06:29:12 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Fix warning on AIX about omitted 'private' keyword when deriving from noncopyable.
........
  r39508 | bemandawes | 2007-09-24 06:32:43 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Replace use of re in detecting revision with string functions. Nicola Musatti reported problems with Italian version of XP. Although this change should fix the crash, it isn't the final solution.
........
  r39509 | chris_kohlhoff | 2007-09-24 06:32:47 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Add extra library 'ipv6' needed on HP-UX.
........
  r39510 | hljin | 2007-09-24 11:20:56 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: fixed the test files to the new bit_aligned_pixel_reference interface
........
  r39511 | hljin | 2007-09-24 11:25:48 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: fixed endian-ness related bugs for bit_aligned_pixel_reference and pixel_aligned_pixel_iterator
........
  r39512 | hljin | 2007-09-24 11:45:57 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: added a MSVC macro in the Jamfile to suppress warnings on unsafe STL calls
........
  r39513 | guwi17 | 2007-09-24 14:01:11 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  - Ticket #1234 : patch committed as suggested.
........
  r39514 | noel_belcourt | 2007-09-24 14:01:45 -0700 (Mon, 24 Sep 2007) | 7 lines
  
  Fix a problem with the -lx timeout code on ppc darwin.
  The intel based darwin system was killing subprocesses
  okay but for some reason, ppc systems were not.  This
  change fixes the timeout code so subprocesses are
  properly killed on ppc darwin systems.
........
  r39516 | guwi17 | 2007-09-24 14:26:00 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  - Ticket #688 : Outer iterators can now skip empty rows. Thus matrix_assign works now as expected.
........
  r39517 | chris_kohlhoff | 2007-09-24 18:56:46 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Add missing "lib ipv6 ;" that's needed for HP-UX.
........
  r39518 | noel_belcourt | 2007-09-24 20:39:06 -0700 (Mon, 24 Sep 2007) | 3 lines
  
  Get pic and threading working with pathscale.
........
  r39519 | schoepflin | 2007-09-25 01:46:31 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Added missing include.
........
  r39520 | bemandawes | 2007-09-25 06:45:52 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Clear compiler warnings
........
  r39523 | garcia | 2007-09-25 08:32:23 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  Initial Revision.  Stolen from the write-graphviz.html docs.
........
  r39524 | garcia | 2007-09-25 08:36:35 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  Made the output of the example program more realistic.
........
  r39525 | bemandawes | 2007-09-25 10:27:04 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Supply std:: to fix Borland 5.9.2 errors
........
  r39526 | bemandawes | 2007-09-25 10:55:58 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Fix revision not propagating (Sebastian Redl)
........
  r39531 | noel_belcourt | 2007-09-25 13:34:36 -0700 (Tue, 25 Sep 2007) | 9 lines
  
  Add pgi.hpp configuration file for the Portland Group.
  
  Fixed problems with threading, pic code, missing math
  library, etc. to get mipspro toolset working better.
  
  Updated pgi toolset to fix various problems with the
  link line.
........
  r39532 | garcia | 2007-09-25 15:49:00 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  set dates for reviews.
........
  r39534 | noel_belcourt | 2007-09-25 16:11:12 -0700 (Tue, 25 Sep 2007) | 9 lines
  
  Add macros to gcc.hpp to support pathscale toolset.
  
  Added an optimization to the -lx unix timeout code.  I
  compute the amount of time the select call should sleep
  until the "oldest" process times out.  This ensures that
  all processes that timeout will be killed within one
  second of their expiration.
........
  r39544 | garcia | 2007-09-26 08:07:19 -0700 (Wed, 26 Sep 2007) | 2 lines
  
  Thread-Safe Signals.
........
  r39545 | igaztanaga | 2007-09-26 08:07:29 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39546 | igaztanaga | 2007-09-26 08:11:38 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39547 | igaztanaga | 2007-09-26 08:25:36 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39548 | igaztanaga | 2007-09-26 08:26:35 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39549 | igaztanaga | 2007-09-26 10:35:50 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39550 | igaztanaga | 2007-09-26 10:38:32 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39551 | igaztanaga | 2007-09-26 10:39:06 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39552 | igaztanaga | 2007-09-26 10:46:34 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39553 | bemandawes | 2007-09-26 10:48:27 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Turns out the --dep_name errors were due to functions in the wrong namespace (Chris Kohlhoff)
........
  r39554 | igaztanaga | 2007-09-26 10:51:58 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39555 | igaztanaga | 2007-09-26 10:53:01 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39556 | bemandawes | 2007-09-26 11:11:27 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Win64 returns ERROR_BAD_PATHNAME for //nosuch, while Win32 returns ERROR_BAD_NETPATH
........
  r39561 | bemandawes | 2007-09-26 17:22:16 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Get rid of <runtime-link>static. Appears to cause problems on Sun and perhaps other Unix boxes.
........
  r39563 | noel_belcourt | 2007-09-26 20:41:11 -0700 (Wed, 26 Sep 2007) | 4 lines
  
  Fix pathscale.jam so -rpath is passed correctly to the
  linker.
........
  r39574 | bemandawes | 2007-09-27 06:44:55 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Change location of svn_info.txt to boost_root, as that's where it is in the tarball
........
  r39575 | garcia | 2007-09-27 08:52:41 -0700 (Thu, 27 Sep 2007) | 2 lines
  
  exception review dates.
........
  r39576 | igaztanaga | 2007-09-27 09:38:14 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Updated unusable toolsets for Interprocess and Intrusive
........
  r39577 | bemandawes | 2007-09-27 09:56:23 -0700 (Thu, 27 Sep 2007) | 1 line
  
  AIX treats ENOTEMPTY and EEXIST as the same value. Reported by Chris Cambly
........
  r39583 | t_schwinger | 2007-09-27 14:25:18 -0700 (Thu, 27 Sep 2007) | 3 lines
  
  changes review dates for Boost.Exception as agreed on with Ron
........
  r39584 | cepstein | 2007-09-27 18:30:27 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Changed required toolset gcc-4.1.1_sunos_i86pc to gcc-4.1.2_sunos_i86pc
........
  r39585 | bemandawes | 2007-09-27 19:03:29 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Quiet compiler warnings
........
  r39586 | schoepflin | 2007-09-28 00:19:29 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Added missing include.
........
  r39587 | schoepflin | 2007-09-28 03:28:26 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Added two missing fwd declarations and a Tru64/CXX specific workaround.
........
  r39588 | garcia | 2007-09-28 12:39:57 -0700 (Fri, 28 Sep 2007) | 2 lines
  
  Exception has begun.
........
  r39589 | burbelgruff | 2007-09-28 13:09:01 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Implement typeof emulation for the Borland compiler. Tested with Borland 5.8.2
........
  r39590 | burbelgruff | 2007-09-28 13:11:32 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Modified tests to account for Borland compiler
........
  r39591 | burbelgruff | 2007-09-28 13:16:39 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Updated failures markup to account for typeof support for Borland
........
  r39592 | grafik | 2007-09-28 18:50:16 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Minor adjustment to save half of the upload bandwidth, at the cost of another layer of compression on both ends.
........
  r39595 | eric_niebler | 2007-09-29 08:45:08 -0700 (Sat, 29 Sep 2007) | 1 line
  
  remove unnecessary semicolons
........
  r39596 | eric_niebler | 2007-09-29 08:51:29 -0700 (Sat, 29 Sep 2007) | 1 line
  
  mark xpressive unusable with sun compiler
........
  r39597 | vladimir_prus | 2007-09-29 10:12:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Summarize changes
........
  r39601 | vladimir_prus | 2007-09-29 10:28:10 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update version.
........
  r39602 | vladimir_prus | 2007-09-29 10:29:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update download locations.
........
  r39603 | vladimir_prus | 2007-09-29 10:31:44 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Adjust date
........
  r39605 | vladimir_prus | 2007-09-29 11:17:27 -0700 (Sat, 29 Sep 2007) | 7 lines
  
  Adjust boostbook test for boostbook changes. It
  seems that doxygen target now produces a target
  with different name, and it does not produce
  any target unless there's explicit dependency
  on it. I'm not sure I like the change, but
  anyway.
........
  r39606 | vladimir_prus | 2007-09-29 11:21:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Adjust Qt4 example test
........
  r39607 | vladimir_prus | 2007-09-29 11:22:57 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Set executable flag
........
  r39608 | grafik | 2007-09-29 11:30:06 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Fix action multi-generation for case when there are no targets for the action.
........
  r39609 | bemandawes | 2007-09-29 12:40:23 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Limit Windows expected message check to US English
........
  r39610 | grafik | 2007-09-29 12:48:51 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update distribution and build scripts to account for inclusion of boehm_gc sources. Add history of changes to docs.
........
  r39611 | grafik | 2007-09-29 12:58:28 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Set executable flag.
........
  r39612 | noel_belcourt | 2007-09-29 13:23:29 -0700 (Sat, 29 Sep 2007) | 6 lines
  
  When terminating unix processes I forgot to check for negative 
  time differences.  This patch only sets the select timeout if
  the difference between the requested and consumed time is 
  positive.
........
  r39613 | noel_belcourt | 2007-09-29 14:47:24 -0700 (Sat, 29 Sep 2007) | 15 lines
  
  Renamed variables used in timeout code so I don't make
  silly mistakes like using a negative time for the select
  timeout.  
  
  Also added the setrlimit call back in since the
  named_condition_test occassionally consumes multiple cpus
  worth of time.  That is, when I ran this test -j4, I found
  the named_condition test consuming 4 cpus worth of time so
  after 300 seconds of elapsed time when the test timed out, 
  it had consumed almost 1200 seconds worth of cpu.  While the 
  test is killed after the elapsed time expired, setting a hard 
  cpu limit ensures it's killed after consuming either -lx seconds 
  worth of cpu or -lx seconds of elapsed time.
........
  r39614 | eric_niebler | 2007-09-29 21:05:31 -0700 (Sat, 29 Sep 2007) | 1 line
  
  slightly more informative test errors
........
  r39615 | garcia | 2007-09-30 07:58:38 -0700 (Sun, 30 Sep 2007) | 2 lines
  
  FSM dates.
........
  r39616 | grafik | 2007-09-30 08:52:31 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix missing files in tar generation, by using a tar format that doesn't have short limits on file name lengths. (and that is still readable by the Python tarfile module)
........
  r39617 | grafik | 2007-09-30 09:33:36 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix copying the wrong files for the archive, and prefer using POSIX/pax format.
........
  r39619 | johnmaddock | 2007-09-30 10:29:54 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix for failing Borland test results.
........
  r39620 | grafik | 2007-09-30 10:33:21 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Bump to bjam version 3.1.16
........
  r39621 | johnmaddock | 2007-09-30 10:35:14 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Touched file to force regressions runners to rebuild the test.
........
  r39623 | vladimir_prus | 2007-09-30 12:05:38 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update example test-config.jam
........
  r39624 | vladimir_prus | 2007-09-30 12:06:19 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update roll.sh
........
  r39630 | vladimir_prus | 2007-09-30 23:04:17 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Correct example test-config.jam
........
  r39631 | vladimir_prus | 2007-09-30 23:05:03 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update release procedure
........
  r39632 | vladimir_prus | 2007-09-30 23:06:25 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Set release date
........
  r39633 | johnmaddock | 2007-10-01 01:29:15 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Disable test for Intel-10.
........
  r39634 | johnmaddock | 2007-10-01 02:38:05 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Almost get things building with Borland.
........
  r39635 | johnmaddock | 2007-10-01 02:39:07 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Added workarounds for broken WCHAR_MAX.
........
  r39638 | guwi17 | 2007-10-01 06:04:29 -0700 (Mon, 01 Oct 2007) | 2 lines
  
  - added redirect from index.html to real start page: index.htm
........
  r39641 | vladimir_prus | 2007-10-01 10:29:11 -0700 (Mon, 01 Oct 2007) | 3 lines
  
  Allow to specify the list of bound targets
  and flags, when defining action from Python.
........
  r39642 | vladimir_prus | 2007-10-01 10:34:43 -0700 (Mon, 01 Oct 2007) | 2 lines
  
  Fix gcc on HP-UX. Patch from Boris Gubenko. 
........
  r39643 | vladimir_prus | 2007-10-01 11:27:53 -0700 (Mon, 01 Oct 2007) | 3 lines
  
  Append .lib suffix to library names without :S= modifier.
  The latter will remove any existing suffix.
........
  r39644 | vladimir_prus | 2007-10-01 11:40:44 -0700 (Mon, 01 Oct 2007) | 4 lines
  
          * builtin.jam (searched-lib-generator.run):
          When no <name> feature present, use requested
          name.
........
  r39645 | vladimir_prus | 2007-10-01 11:44:44 -0700 (Mon, 01 Oct 2007) | 8 lines
  
  STLPort improvements:
          - Add _static in library name as necessary
          - Define _STLP_USE_DYNAMIC_LIB depending
          on <runtime-link>, not <runtime-debugging>
  
  Patch from David Deakins.
  Addresses #1177.
........
  r39646 | vladimir_prus | 2007-10-01 11:53:05 -0700 (Mon, 01 Oct 2007) | 5 lines
  
  Disallow using stlport by just adding /stlport//stlport
  to sources.  This logic was trying to use non-free
  usage requirements that are not supported, and can
  potentially result in inconsistent builds.
........
  r39647 | bemandawes | 2007-10-01 14:50:02 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Detect and report missing boost-test lines in input log file
........
  r39648 | bemandawes | 2007-10-01 18:33:00 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Add --compile-time and --run-time options
........
  r39649 | eric_niebler | 2007-10-01 23:47:58 -0700 (Mon, 01 Oct 2007) | 1 line
  
  attempt to fix xpressive formatting bug on tru64
........
  r39651 | hkaiser | 2007-10-02 08:10:05 -0700 (Tue, 02 Oct 2007) | 1 line
  
  [Wave] Unterminated C++/C comment diagnostics are now a warning and not an error anymore.
........
  r39652 | bemandawes | 2007-10-02 09:30:04 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Remove dependency on boost::bind so that tests will still work on broken compilers where bind fails.
........
  r39654 | hkaiser | 2007-10-02 10:24:17 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Wave: Fixed the waveidl example
........
  r39655 | johnmaddock | 2007-10-02 10:28:01 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Update for Borland compilers: new Borland versions, and new tests, but otherwise the same failures as before.
........
  r39657 | johnmaddock | 2007-10-02 10:41:35 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Fix for Borland compilers.
........
  r39658 | eric_niebler | 2007-10-02 10:58:33 -0700 (Tue, 02 Oct 2007) | 1 line
  
  work around msvc-7.1 bugs
........
  r39660 | bgubenko | 2007-10-02 12:07:37 -0700 (Tue, 02 Oct 2007) | 1 line
  
  mark lambda library test control_structures for gcc 4.2 series
........
  r39663 | nmusatti | 2007-10-02 13:32:05 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39664 | chris_kohlhoff | 2007-10-02 18:40:55 -0700 (Tue, 02 Oct 2007) | 2 lines
  
  Add missing #include needed for MinGW.
........
  r39665 | chris_kohlhoff | 2007-10-02 18:43:08 -0700 (Tue, 02 Oct 2007) | 3 lines
  
  Try using an unsigned char for the multicast::enable_loopback socket option
  when compiling for Tru64.
........
  r39673 | hkaiser | 2007-10-03 06:18:23 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Fixed a regex definition problem in the Slex lexer.
........
  r39674 | hkaiser | 2007-10-03 06:44:42 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Fixed a minor problem in the predefined macros code.
........
  r39675 | hkaiser | 2007-10-03 06:51:32 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Updated test to reflect recent error text changes.
........
  r39676 | bemandawes | 2007-10-03 10:30:23 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Add revision number to heading if boost-root is subversion working copy. Use BOOST_PLATFORM for platform description. Fix problem if test type was run_pyd. Make Boost build v2 the default. Link to www.boost.org for boost.png.
........
  r39677 | burbelgruff | 2007-10-03 11:45:56 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Mark borland 5.6.4 as unusable
........
  r39678 | noel_belcourt | 2007-10-03 12:00:18 -0700 (Wed, 03 Oct 2007) | 3 lines
  
  Fix problem with -rpath for pathscale compiler.
........
  r39680 | vladimir_prus | 2007-10-04 01:15:13 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Redo homepage
........
  r39681 | vladimir_prus | 2007-10-04 01:18:40 -0700 (Thu, 04 Oct 2007) | 3 lines
  
  When building docs, use the same Boost.Build that
  we're rolling.
........
  r39682 | johnmaddock | 2007-10-04 02:18:16 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Added tip to function_traits.qbk, rebuilt docs.
........
  r39683 | schoepflin | 2007-10-04 04:51:51 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Added missing boost namespace reference to as_literal.
........
  r39684 | hkaiser | 2007-10-04 08:01:23 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Changed an error text.
........
  r39685 | igaztanaga | 2007-10-04 09:41:15 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Marked acc as n/a for Interprocess.
........
  r39686 | hkaiser | 2007-10-04 10:49:20 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Trying to work around a SUN 5.8 compiler error.
........
  r39687 | hkaiser | 2007-10-04 10:55:20 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Silenced a SUN compiler warning.
........
  r39688 | hkaiser | 2007-10-04 16:37:25 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Trying to fix MSVC regressions.
........
  r39689 | grafik | 2007-10-04 20:09:03 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Fix mislabeled argument to collect_logs().
........
  r39690 | eric_niebler | 2007-10-04 23:50:00 -0700 (Thu, 04 Oct 2007) | 1 line
  
  one more try at getting tru64 tests to pass
........
  r39691 | burbelgruff | 2007-10-05 00:06:13 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Update typeof emulation to support Borland 5.9.2
........
  r39692 | danieljames | 2007-10-05 02:43:01 -0700 (Fri, 05 Oct 2007) | 2 lines
  
  Fix an if statement.
........
  r39693 | anthonyw | 2007-10-05 02:46:00 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Updated in line with RC 1.34
........
  r39694 | danieljames | 2007-10-05 02:46:22 -0700 (Fri, 05 Oct 2007) | 3 lines
  
  On Cygwin use a binary based hash function for floating point numbers, as
  Cygwin doesn't have decent floating point functions for long doubles.
........
  r39701 | anthonyw | 2007-10-05 05:10:06 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Changed call_once to header-only template that takes arbitrary function objects; this changes parameter order
........
  r39702 | anthonyw | 2007-10-05 05:20:50 -0700 (Fri, 05 Oct 2007) | 1 line
  
  added platform-specific call_once implementations
........
  r39703 | anthonyw | 2007-10-05 05:21:55 -0700 (Fri, 05 Oct 2007) | 1 line
  
  added platform dispatcher
........
  r39704 | burbelgruff | 2007-10-05 05:39:15 -0700 (Fri, 05 Oct 2007) | 1 line
  
  typeof support for template template arguments for Borland 5.9.2 (also used for Borland 5.8.2) (reverted to old scheme for other compilers)
........
  r39705 | anthonyw | 2007-10-05 05:50:29 -0700 (Fri, 05 Oct 2007) | 1 line
  
  include config header from right place for pthread/once.hpp
........
  r39707 | burbelgruff | 2007-10-05 07:32:04 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Better support for BOOST_TYPEOF_NESTED_TYPEDEF for Borland
........
  r39708 | johnmaddock | 2007-10-05 08:00:40 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Disable PP-logic for __DECCXX compiler: WCAHR_MAX is defined but doesn't work in PP-logic on that platform.
........
  r39709 | johnmaddock | 2007-10-05 08:07:44 -0700 (Fri, 05 Oct 2007) | 1 line
  
  run_random was failing in the last release with Borland but wasn't marked up for some reason.
........
  r39710 | johnmaddock | 2007-10-05 08:47:02 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Markup for common_factor_test and Borland along with explanation of the issue (a code generation bug apparently).
........
  r39711 | danieljames | 2007-10-05 09:57:38 -0700 (Fri, 05 Oct 2007) | 2 lines
  
  Generate documentation for typedef members of classes. Fixes #1218.
........
  r39714 | johnmaddock | 2007-10-05 10:49:12 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Update Jamfiles to make PDF generation easier.
........
  r39715 | igaztanaga | 2007-10-05 10:54:39 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Marked hpp_cxx* as broken for Interprocess/Intrusive, and acc for Interprocess.
........
  r39716 | hkaiser | 2007-10-05 11:48:56 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Pool: Added detection of availability of pthreads using the BOOST_HAS_PTHREADS constant.
........
  r39717 | eric_niebler | 2007-10-05 12:00:43 -0700 (Fri, 05 Oct 2007) | 1 line
  
  put format string argument in non-deduced context
........
  r39718 | hkaiser | 2007-10-05 15:04:04 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Added a compiler workaround for IntelV9.1/linux.
........
  r39719 | hkaiser | 2007-10-05 16:25:09 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Wave: Fixed missing test case in regression status pages.
........
  r39720 | hkaiser | 2007-10-05 16:27:43 -0700 (Fri, 05 Oct 2007) | 1 line
  
  ProgramOptions: Silenced VC++ warnings.
........
  r39721 | hkaiser | 2007-10-05 17:26:30 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Wave: Fixed typos in comments.
........
  r39722 | pdimov | 2007-10-06 01:59:01 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Marked up bind_placeholder_test
........
  r39723 | johnmaddock | 2007-10-06 04:12:33 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix Borland infinite looping issue.
........
  r39724 | djowel | 2007-10-06 07:10:30 -0700 (Sat, 06 Oct 2007) | 1 line
  
  fix for incomplete type is not allowed when tuple is forward declared. fixed the other as_xxx files as well.
........
  r39725 | johnmaddock | 2007-10-06 10:40:20 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix typo.
........
  r39726 | hkaiser | 2007-10-06 10:43:08 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Wave: Fixed Jamfile for regression tests.
........
  r39727 | johnmaddock | 2007-10-06 10:46:25 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Update docs to match quickbook.
........
  r39728 | hkaiser | 2007-10-06 10:54:28 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Wave: added a missing header.
........
  r39729 | vladimir_prus | 2007-10-06 11:24:04 -0700 (Sat, 06 Oct 2007) | 3 lines
  
  When we skip build of a target, say about that
  in --debug-building output.
........
  r39731 | grafik | 2007-10-06 12:46:39 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Remove BPL build conditional as it prevents normal build failures.
........
  r39751 | nmusatti | 2007-10-06 14:32:05 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39752 | chris_kohlhoff | 2007-10-06 17:11:25 -0700 (Sat, 06 Oct 2007) | 5 lines
  
  The epoll_wait function can produce EPOLLHUP events for a descriptor even
  if not specifically requested, resulting in a tight loop of calls to
  epoll_wait. Delete a descriptor from epoll if an EPOLLHUP event is
  received and there are no registered operations for the descriptor.
........
  r39753 | troyer | 2007-10-06 23:57:36 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix for Borland
........
  r39755 | johnmaddock | 2007-10-07 04:08:51 -0700 (Sun, 07 Oct 2007) | 1 line
  
  math_info doesn't link with Borland unless built against the static runtime.
........
  r39756 | johnmaddock | 2007-10-07 04:09:45 -0700 (Sun, 07 Oct 2007) | 1 line
  
  math_info doesn't link with Borland unless built against the static runtime.
........
  r39757 | johnmaddock | 2007-10-07 04:10:24 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Added expm1 and lop1p support.
........
  r39759 | hkaiser | 2007-10-07 07:46:52 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Fixed a couple of pedantic gcc warnings.
........
  r39760 | hkaiser | 2007-10-07 07:51:46 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Wave: Silenced a couple of pedantic gcc warnings.
........
  r39761 | hkaiser | 2007-10-07 08:55:00 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Fixed a failing unit test.
........
  r39762 | hkaiser | 2007-10-07 08:57:37 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Silenced some warnings.
........
  r39763 | aaron_windsor | 2007-10-07 09:52:39 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Fixing some errors and warnings on the planar graph tests coming from Sun compilers.
........
  r39766 | danieljames | 2007-10-07 11:08:35 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Include the size of function pointers, void* and std::size_t in the output of the function pointer hash test, to give me a clue why it's failling on a platform.
........
  r39767 | aaron_windsor | 2007-10-07 11:43:16 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Fix config issue for cycle ratio tests - the path to the input file used in the test should be relative to the graph test subdirectory.
........
  r39772 | bemandawes | 2007-10-07 14:59:46 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Appy Godegear patches from Nicola Musatti. Ticket #1304
........
  r39773 | aaron_windsor | 2007-10-07 16:49:07 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Adding some missing typenames
........
  r39774 | eric_niebler | 2007-10-07 17:44:52 -0700 (Sun, 07 Oct 2007) | 1 line
  
  add awesome number parser from Dave Jenkins
........
  r39776 | eric_niebler | 2007-10-07 18:15:01 -0700 (Sun, 07 Oct 2007) | 1 line
  
  fix warnings under msvc
........
  r39777 | anthonyw | 2007-10-08 00:18:27 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Use InterlockedCompareExchange when _ReadWriteBarrier not available
........
  r39778 | agurtovoy | 2007-10-08 01:06:15 -0700 (Mon, 08 Oct 2007) | 1 line
  
  MPL: more inclusive markup for the gcc 4.1 regression
........
  r39780 | anthonyw | 2007-10-08 02:48:57 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added extended test for new call_once
........
  r39781 | anthonyw | 2007-10-08 02:55:56 -0700 (Mon, 08 Oct 2007) | 1 line
  
  call_once passes exceptions to caller and leaves flag unset
........
  r39784 | anthonyw | 2007-10-08 08:41:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  New mutex implementations, more akin to C++0x
........
  r39785 | anthonyw | 2007-10-08 08:44:13 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added backwards-compatibility overload for call_once
........
  r39786 | eric_niebler | 2007-10-08 08:49:09 -0700 (Mon, 08 Oct 2007) | 1 line
  
  fix postinc/assign problem with case_converting_iterator
........
  r39787 | eric_niebler | 2007-10-08 08:57:04 -0700 (Mon, 08 Oct 2007) | 1 line
  
  doc tweaks
........
  r39788 | burbelgruff | 2007-10-08 09:35:06 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] Updated failures list to include failing borland tests and some failing native tests
........
  r39789 | burbelgruff | 2007-10-08 09:37:01 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] native typeof support added for the Digital Mars compiler (same as the typeof hack used for Visual C++)
........
  r39790 | eric_niebler | 2007-10-08 09:49:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  work around msvc-7.1 bug
........
  r39792 | johnmaddock | 2007-10-08 09:58:15 -0700 (Mon, 08 Oct 2007) | 2 lines
  
  Initial math-toolkit commit.
  Includes all code and tests, but no docs yet.
........
  r39793 | eric_niebler | 2007-10-08 10:12:56 -0700 (Mon, 08 Oct 2007) | 1 line
  
  better fix for case_converting_iterator as suggested by Steven Watanabe
........
  r39794 | eric_niebler | 2007-10-08 10:13:29 -0700 (Mon, 08 Oct 2007) | 1 line
  
  clean up gcc unused parameter warnings
........
  r39796 | burbelgruff | 2007-10-08 10:46:23 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] testing for typeof hacks on all compilers
........
  r39805 | vladimir_prus | 2007-10-08 10:54:17 -0700 (Mon, 08 Oct 2007) | 1 line
  
  New changes
........
  r39812 | johnmaddock | 2007-10-08 11:03:19 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Initial commit of math-toolkit docs.
........
  r39817 | vladimir_prus | 2007-10-08 14:10:41 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39818 | vladimir_prus | 2007-10-08 14:13:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39819 | eric_niebler | 2007-10-08 14:14:14 -0700 (Mon, 08 Oct 2007) | 1 line
  
  escape accented character
........
  r39820 | vladimir_prus | 2007-10-08 14:28:09 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39821 | vladimir_prus | 2007-10-08 14:47:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39823 | eric_niebler | 2007-10-08 15:41:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  symbols docs, acknowledgement for dave j., doxygen tweaks
........
  r39826 | eric_niebler | 2007-10-08 16:48:25 -0700 (Mon, 08 Oct 2007) | 1 line
  
  fix warning
........
  r39828 | vladimir_prus | 2007-10-08 22:33:45 -0700 (Mon, 08 Oct 2007) | 2 lines
  
  Make NORMALIZE_PATH convert \ to /.
........
  r39829 | vladimir_prus | 2007-10-08 22:35:48 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Make it compile, even
........
  r39830 | vladimir_prus | 2007-10-08 22:38:31 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Make it work, for extra benefit ('=' vs '==' bug)
........
  r39831 | vladimir_prus | 2007-10-08 23:37:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Attemp to fix searched_lib on windows
........
  r39832 | anthonyw | 2007-10-08 23:59:14 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added missing move.hpp header
........
  r39833 | danieljames | 2007-10-09 00:19:30 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Output some info about a test failure when hashing function pointers.
........
  r39834 | johnmaddock | 2007-10-09 04:15:11 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Fix problem with GCC on Linux not finding std_real_concept overload for fmod.
........
  r39835 | johnmaddock | 2007-10-09 04:30:19 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added HTML docs, changed some section names to shorten the file names produced.
........
  r39836 | anthonyw | 2007-10-09 05:23:09 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed direction of conditional
........
  r39837 | johnmaddock | 2007-10-09 05:26:27 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Disabled long double support on some platforms.
........
  r39838 | anthonyw | 2007-10-09 05:45:46 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed typo in pthread_cond_timedwait and ETIMEDOUT
........
  r39839 | anthonyw | 2007-10-09 07:08:22 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed typo in pthread_cond_timedwait and ETIMEDOUT
........
  r39840 | garcia | 2007-10-09 07:28:42 -0700 (Tue, 09 Oct 2007) | 2 lines
  
  Exception review period has ended.
........
  r39841 | anthonyw | 2007-10-09 07:44:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed more has-timed-lock backwards conditions
........
  r39842 | johnmaddock | 2007-10-09 07:49:04 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Changed call signatures to keep Borland happy.
........
  r39843 | johnmaddock | 2007-10-09 07:49:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  A few fixes to keep Borland happy.
........
  r39848 | bemandawes | 2007-10-09 09:39:13 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Apply dll fixes from David Deakins
........
  r39849 | igaztanaga | 2007-10-09 09:49:47 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Marked acc as n/a for Interprocess.
........
  r39850 | johnmaddock | 2007-10-09 10:16:58 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39851 | johnmaddock | 2007-10-09 10:17:50 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39852 | johnmaddock | 2007-10-09 10:25:30 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39853 | eric_niebler | 2007-10-09 10:56:18 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fix broken link to OASIS DocBook DTD
........
  r39854 | johnmaddock | 2007-10-09 11:11:17 -0700 (Tue, 09 Oct 2007) | 1 line
  
  More Borland workarounds.
........
  r39855 | johnmaddock | 2007-10-09 11:12:06 -0700 (Tue, 09 Oct 2007) | 1 line
  
  More Borland workarounds.
........
  r39863 | chris_kohlhoff | 2007-10-09 14:47:07 -0700 (Tue, 09 Oct 2007) | 2 lines
  
  Assume that HP-UX and AIX both need to have SIGPIPE blocked.
........
  r39864 | chris_kohlhoff | 2007-10-09 14:47:40 -0700 (Tue, 09 Oct 2007) | 3 lines
  
  HP-UX with aCC uses a variant of select() that takes int* arguments rather
  than fd_set*.
........
  r39865 | chris_kohlhoff | 2007-10-09 14:59:38 -0700 (Tue, 09 Oct 2007) | 3 lines
  
  Try changing the default target to Windows XP rather than Windows 2000 to see
  effect on borland-5.9.2.
........
  r39867 | eric_niebler | 2007-10-09 15:25:18 -0700 (Tue, 09 Oct 2007) | 1 line
  
  more user docs for semantic actions
........
  r39868 | eric_niebler | 2007-10-09 15:26:59 -0700 (Tue, 09 Oct 2007) | 1 line
  
  add xpressive::function<> for defining function objects for use in semantic actions
........
  r39869 | djowel | 2007-10-09 16:15:12 -0700 (Tue, 09 Oct 2007) | 1 line
  
  adding fusion
........
  r39870 | eric_niebler | 2007-10-09 18:46:53 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fix buggy predicate_matcher and stomp more msvc warnings
........
  r39871 | aaron_windsor | 2007-10-09 19:18:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Trying to clear some errors from Sun CC.
........
  r39872 | hkaiser | 2007-10-09 19:25:35 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Boost.Thread now depends on Boost.DateTime.
........
  r39873 | vladimir_prus | 2007-10-10 00:40:05 -0700 (Wed, 10 Oct 2007) | 4 lines
  
  Add values of variables specified with -s to .EVNRION
  module, so that we can override environment on
  command line.
........
  r39874 | schoepflin | 2007-10-10 00:42:19 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Disambiguate the identifier 'exception' and fix vector construction to make the test pass on Tru64/CXX.
........
  r39875 | schoepflin | 2007-10-10 01:21:36 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Blind shot trying to fix error blocking regression runs.
........
  r39876 | vladimir_prus | 2007-10-10 01:25:27 -0700 (Wed, 10 Oct 2007) | 2 lines
  
  New bjam.variable function exposed to Python.
........
  r39881 | johnmaddock | 2007-10-10 02:28:48 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Adjusted limits for Win64 and Sun OS.
........
  r39884 | johnmaddock | 2007-10-10 02:31:44 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Tentative Sunpro workaround.
........
  r39885 | joaquin | 2007-10-10 03:20:43 -0700 (Wed, 10 Oct 2007) | 1 line
  
  reverted 36306 for CW 8.3
........
  r39886 | vladimir_prus | 2007-10-10 03:23:20 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Add link to PythonPort page
........
  r39887 | vladimir_prus | 2007-10-10 03:35:07 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Fix URL
........
  r39890 | hkaiser | 2007-10-10 05:42:16 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Wave: Updated Jamfiles to include Boost.DateTime.
........
  r39891 | anthonyw | 2007-10-10 08:33:49 -0700 (Wed, 10 Oct 2007) | 1 line
  
  read_write_mutex makes a comeback --- as shared_mutex
........
  r39892 | bemandawes | 2007-10-10 08:49:32 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Fix date_time boo boo that was causing all regression tests to fail
........
  r39893 | johnmaddock | 2007-10-10 09:05:26 -0700 (Wed, 10 Oct 2007) | 7 lines
  
  Added Compaq CXX long long workaround to real_concept.hpp.
  Added missing forward declaration to ellint_1.hpp.
  Adjusted native log1p support for aCC.
  Removed bad forward declaration of fpclassify: correct declaration appears later in the file.
  Adjusted compile_test/test_compile_result.hpp to not return a NULL reference.
  Adjusted permitted error-limits for new platforms.
  Split some of the tests into smaller units so we don't get compiler timeouts when building (hopefully!)
........
  r39894 | hkaiser | 2007-10-10 09:44:29 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Wave: Fixed Jamfiles. 
........
  r39897 | eric_niebler | 2007-10-10 11:13:18 -0700 (Wed, 10 Oct 2007) | 1 line
  
  work around gcc bug in proto, add test for custom assertions, fix more gcc warnings
........
  r39898 | vladimir_prus | 2007-10-10 12:07:57 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Add logo, tweak the page
........
  r39899 | vladimir_prus | 2007-10-10 12:10:45 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Revert mistaken commit
........
  r39900 | johnmaddock | 2007-10-10 12:12:46 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Workaround for msvc+stlport.
........
  r39901 | vladimir_prus | 2007-10-10 12:18:25 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Upload logo, too
........
  r39902 | vladimir_prus | 2007-10-10 12:26:30 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Keep the logo
........
  r39903 | vladimir_prus | 2007-10-10 12:39:04 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Doh. Fix link
........
  r39909 | eric_niebler | 2007-10-10 14:20:49 -0700 (Wed, 10 Oct 2007) | 1 line
  
  extra test for custom assertions, fix nasty bug in custom assertion handling
........
  r39913 | chris_kohlhoff | 2007-10-10 16:12:06 -0700 (Wed, 10 Oct 2007) | 2 lines
  
  Add a /dev/poll reactor implementation for Solaris.
........
  r39914 | eric_niebler | 2007-10-10 17:44:57 -0700 (Wed, 10 Oct 2007) | 1 line
  
  document user-defined assertions
........
  r39915 | eric_niebler | 2007-10-10 19:12:07 -0700 (Wed, 10 Oct 2007) | 1 line
  
  document placeholder<> and match_results<>::let()
........
  r39918 | schoepflin | 2007-10-11 00:36:41 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Fixed bug preventing compilation on Tru64/CXX.
........
  r39921 | johnmaddock | 2007-10-11 03:51:10 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Removed math docs from central build
........
  r39922 | joaquin | 2007-10-11 03:57:30 -0700 (Thu, 11 Oct 2007) | 77 lines
  
  Boost 1.35 version of Boost.MultiIndex
  allocator_utilities.hpp: added partial_std_allocator_wrapper::value_type
  composite_key.hpp: used hash_fwd.hpp
  auto_space.hpp: added support for non-standard allocators
  bidir_node_iterator.hpp: moved friend-injected operators out of class
  copy_map.hpp: added support for non-standard allocators
  hash_index_args.hpp: removed deprecated use of <boost/functional/hash/hash.hpp>
  hash_index_iterator.hpp: moved friend-injected operators our of class
  hash_index_node.hpp: added support for non-standard allocators
  header_holder.hpp:added support for non-standard allocators
  index_base.hpp: added support for non-standard allocators, added modify_rollback, added small improvement to modify
  index_loader.hpp: added support for non-standard allocators
  index_matcher.hpp: added support for non-standard allocators
  index_node_base.hpp: added support for non-standard allocators
  iter_adaptor.hpp: added some out-of-class operators to alleviate a MSVC++ 6.0 problem
  modify_key_adaptor.hpp: renamed some vars to accomudate broader usage scope
  node_type.hpp: added support for non-standard allocators
  ord_index_node.hpp: added support for non-standard allocators
  ord_index_ops.hpp: implemented a more efficient equal_range
  rnd_index_loader.hpp: added support for non-standard allocators
  rnd_index_node.hpp: added support for non-standard allocators
  rnd_index_ops.hpp: added support for non-standard allocators
  rnd_index_ptr_array.hpp: added support for non-standard allocators
  rnd_node_iterator.hpp: moved friend-injected operators out of class
  seq_index_node.hpp: added support for non-standard allocators
  seq_index_ops.hpp: added support for non-standard allocators
  uintptr_type.hpp: added support for __int64
  unbounded.hpp: fixed ODR problem
  value_compare.hpp: fixed a small unefficiency
  global_fun: initial commit
  hashed_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, [local_]iterator_to, rollback modify
  identity_fwd.hpp: fixed wrong include guard name
  key_extractors.hpp: added global_fun
  mem_fun.hpp: removed superfluous =0's
  ordered_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, improved equal_range and range, added conformance to DR 233
  random_access_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, added conformance to 23.1.1/9
  sequenced_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, added conformance to 23.1.1/9, improved resize
  multi_index_container.hpp: added support for non-standard allocators, improved ctor_args_list, rollback modify
  acknowledgements.html: added entry for Boost 1.35
  examples.html: renamed example 2, added B.IP example/composite_keys.cpp
  future_work.html: removed entry on bimap
  hash_indices.html: added c[r]{begin|end}, [local_]iterator_to, rollback modify
  reference/index.html: added global_fun
  reference/key_extraction.html: added global_fun, added technical correction
  multi_index_container.html: added support for non-standard allocators
  ord_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  rnd_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  seq_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  release_notes.html: added entry for Boost 1.35
  tests.html: added new serialization test file
  basics.html: added rollback modify
  creation.html: added support for non-standard allocators
  tutorial/indices.html: added iterator_to
  tutorial/key_extraction.html: added global_fun
  composite_keys.cpp: fixed technicality
  fun_key.cpp: was memfun_key.cpp, added global_fun
  ip_allocator.cpp: initial commit
  example/Jamfile.v2: renamed memfun_key, added ip_allocator
  test_perf.cpp: fixed technicality
  employee.hpp: used a non-standard allocator
  test/Jamfile.v2: added new test file
  non_std_allocator.hpp: initial commit
  pair_of_ints.hpp: added decrement facilities
  test_capacity.cpp: added extra check on resize
  test_copy_assignment.cpp: added test for 23.1.1/9
  test_iterators.cpp: added tests for c[r]{begin|end} and [local_]iterator_to, fixed technicality
  test_key_extractors.cpp: added tests for global_fun
  test_modifiers.cpp: added tests dor DR 233, fixed technicality
  test_range.cpp: added extra checks to secure range refactoring
  test_rearrange.cpp: fixed technicality
  test_serialization.cpp: added new test file
  test_serialization1.cpp: corrected include, used a non-standard allocator
  test_serialization2.cpp: corrected include, used a non-standard allocator, split some stuff ro test_serialization3.cpp
  test_serialization3.cpp: initial commit
  test_serialization3.hpp: initial commit
  test_serialization_template.hpp: removed some reliance on ADL
  test_update.cpp: addes tests for rollback modify, fixed technicality
........
  r39923 | joaquin | 2007-10-11 04:23:47 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  def_ctor_tuple_cons.hpp: no longer used
  memfun_key.cpp: is now fun_key.cpp
........
  r39924 | johnmaddock | 2007-10-11 04:47:11 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Added Boost.Math overview.
........
  r39925 | johnmaddock | 2007-10-11 04:51:19 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Redirect to new index.
........
  r39926 | johnmaddock | 2007-10-11 05:05:29 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated Math library entries.
........
  r39927 | garcia | 2007-10-11 07:51:48 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  math toolkit has been added to the trunk.
........
  r39928 | johnmaddock | 2007-10-11 08:59:48 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Fixed some typos, and rebuilt docs.
........
  r39933 | eric_niebler | 2007-10-11 10:02:13 -0700 (Thu, 11 Oct 2007) | 1 line
  
  new number parser example from dave jenkins
........
  r39934 | eric_niebler | 2007-10-11 10:05:35 -0700 (Thu, 11 Oct 2007) | 1 line
  
  remove self-adjusting TST optimization for thread-safety reasons
........
  r39935 | danieljames | 2007-10-11 10:12:24 -0700 (Thu, 11 Oct 2007) | 3 lines
  
  Try to fix function pointer hashing for the sun compiler. A bit of a stab in
  the dark.
........
  r39939 | danielw | 2007-10-11 13:37:37 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  Added missing Py_INCREF(Py_None).
........
  r39941 | eric_niebler | 2007-10-11 13:50:59 -0700 (Thu, 11 Oct 2007) | 1 line
  
  add let() so regexes with late-bound action args can be used with regex_(token_)iterator
........
  r39944 | nmusatti | 2007-10-11 14:07:17 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39945 | nmusatti | 2007-10-11 14:09:07 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39946 | eric_niebler | 2007-10-11 14:12:22 -0700 (Thu, 11 Oct 2007) | 1 line
  
  add tests for late-bound action args with regex_(token_)iterator
........
  r39947 | eric_niebler | 2007-10-11 14:29:57 -0700 (Thu, 11 Oct 2007) | 1 line
  
  document use of let() with regex_(token_)iterator
........
  r39948 | eric_niebler | 2007-10-11 14:57:12 -0700 (Thu, 11 Oct 2007) | 1 line
  
  fix gcc warnings
........
  r39955 | eric_niebler | 2007-10-11 21:31:10 -0700 (Thu, 11 Oct 2007) | 1 line
  
  reenable self-adjusting TST if BOOST_DISABLE_THREADS is defined
........
  r39956 | eric_niebler | 2007-10-12 00:04:13 -0700 (Fri, 12 Oct 2007) | 1 line
  
  xpressive works with boost 1.34.1
........
  r39957 | igaztanaga | 2007-10-12 01:58:04 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Corrected bug in atomic_dec32 for PPC
........
  r39958 | johnmaddock | 2007-10-12 03:01:36 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Lots of Borland specific patches: quite a few of the special-function tests do now do actually pass.
........
  r39960 | danieljames | 2007-10-12 04:58:34 -0700 (Fri, 12 Oct 2007) | 5 lines
  
  Fix my botched attempt at supporting function pointers on Sun's compilers.
  Also, now only applies the workaround to function pointers, non-function
  pointers are treated as before. I might need to apply the special case to
  member function pointers as well.
........
  r39962 | igaztanaga | 2007-10-12 08:41:44 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Fixed dispose_and_assign bug in list
........
  r39964 | eric_niebler | 2007-10-12 09:50:13 -0700 (Fri, 12 Oct 2007) | 1 line
  
  updated installation information
........
  r39971 | johnmaddock | 2007-10-13 09:23:18 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fixed most of the remaining Borland issues, and removed dependency to Boost.Lambda.
  Added tentative fix for the Sunpro compilers.
........
  r39972 | danieljames | 2007-10-13 09:34:09 -0700 (Sat, 13 Oct 2007) | 11 lines
  
  New attempt at fixing the function pointer hash on the Sun compilers.
  
  I think I was barking up the wrong tree - it could be that when calling
  hash_value with a function pointer the compiler was choosing the
  hash_value(bool) overload over the hash_value(T*) overload, so instead I'm
  trying to call the correct one by giving it a template parameter. Another
  alternative would be to calculate the hash function inside boost::hash.
  
  Unfortunately, if I'm right, this means that other calls to hash_value will go
  wrong for function pointers.
........
  r39973 | johnmaddock | 2007-10-13 09:40:36 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fixed image path in complex number docs.
  Suppressed draft mode in PDF generation (stops the FO renderer from grabbing draft.png from sourceforge).
........
  r39976 | grafik | 2007-10-13 10:25:41 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Partial rework of regression scripts for branch independent testing.
........
  r39977 | danieljames | 2007-10-13 10:35:48 -0700 (Sat, 13 Oct 2007) | 3 lines
  
  Remove the pointles separation of the float tests into three functions
  (probably a throwback to when I used Boost.Test)
........
  r39978 | grafik | 2007-10-13 10:41:07 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Partial rework of regression scripts for branch independent testing.
........
  r39979 | danieljames | 2007-10-13 10:47:57 -0700 (Sat, 13 Oct 2007) | 5 lines
  
  Separate the long double hash tests from the test for other float types. On
  some platforms the standard library has poor support for long doubles causing
  long doubles to fail when the others pass. So this makes it clearer that the
  problem is only for long doubles.
........
  r39982 | danieljames | 2007-10-13 10:57:23 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Oops, I messed the properties when adding files, this should hopefully fix them.
........
  r39983 | danieljames | 2007-10-13 11:34:25 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Add support for complex numbers to Boost.Hash
........
  r39984 | danieljames | 2007-10-13 11:47:10 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fix the copyright line for the hash library.
........
  r39985 | danieljames | 2007-10-13 11:47:41 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Use quickbook v1.4 for the hash library.
........
  r39986 | eric_niebler | 2007-10-13 14:16:23 -0700 (Sat, 13 Oct 2007) | 1 line
  
  update copyright year
........
  r39988 | vladimir_prus | 2007-10-13 14:32:51 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Fix module messup when calling into Python.
........
  r39990 | eric_niebler | 2007-10-13 14:37:02 -0700 (Sat, 13 Oct 2007) | 1 line
  
  update copyright information
........
  r39991 | danieljames | 2007-10-13 14:50:05 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Use a pragma for warnings in Visual C++.
........
  r39993 | danieljames | 2007-10-13 15:30:50 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Clean up the hash tests a little.
........
  r39994 | danieljames | 2007-10-13 15:43:13 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Add a trivial test to see if the deprecated hash headers compile okay when included.
........
  r40004 | danieljames | 2007-10-14 00:38:49 -0700 (Sun, 14 Oct 2007) | 2 lines
  
  Avoid some warnings when compiling the test with Visual C++.
........
  r40005 | vladimir_prus | 2007-10-14 01:03:50 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Remove tools/release/user-config.jam that keeps confusing everybody.
........
  r40006 | vladimir_prus | 2007-10-14 02:09:41 -0700 (Sun, 14 Oct 2007) | 3 lines
  
  Better diagnostics when trying to import non-callable Python
  object to Jam.
........
  r40008 | vladimir_prus | 2007-10-14 02:55:41 -0700 (Sun, 14 Oct 2007) | 7 lines
  
     * common.jam (get-invocation-command): When
     we cannot find a specified tool, return
     tool's name so that the command line looks sane,
     even if it does not work.
     (handle-options): Report which command will
     be used, in debug mode.
........
  r40011 | bemandawes | 2007-10-14 05:40:10 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Change svn info to svn info --xml to cope with non-English locales. Make scan for number insensitive to svn info --xml option.
........
  r40012 | johnmaddock | 2007-10-14 05:54:49 -0700 (Sun, 14 Oct 2007) | 4 lines
  
  Renamed two over-long files
  simplified test_compile_result.hpp so hopefully Sunpro can cope with it.
  Modified Jamfile to static link to regex lib on Sun.
  Adjusted Solaris expected error levels.
........
  r40014 | rogeeff | 2007-10-14 09:47:45 -0700 (Sun, 14 Oct 2007) | 1 line
  
  cleanup log
........
  r40015 | rogeeff | 2007-10-14 09:49:00 -0700 (Sun, 14 Oct 2007) | 1 line
  
  cleanup Tag comment
........
  r40018 | rogeeff | 2007-10-14 10:49:02 -0700 (Sun, 14 Oct 2007) | 1 line
  
  switch from non-portable warning to message
........
  r40019 | nmusatti | 2007-10-14 10:51:32 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Applied patch from Ticket #1319
........
  r40020 | nmusatti | 2007-10-14 10:53:15 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Applied patch from Ticket #1320
........
  r40021 | grafik | 2007-10-14 10:54:28 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Add usage dependency on system library.
........
  r40023 | rogeeff | 2007-10-14 11:33:16 -0700 (Sun, 14 Oct 2007) | 1 line
  
  accessor to the reporter stream provided
........
  r40024 | rogeeff | 2007-10-14 11:56:23 -0700 (Sun, 14 Oct 2007) | 1 line
  
  increase max number of elems in fixed map
........
  r40025 | rogeeff | 2007-10-14 11:58:05 -0700 (Sun, 14 Oct 2007) | 3 lines
  
  2 new command line arguments (yet unused):
  --auto_start_dbg
  --use_alt_stack
........
  r40026 | rogeeff | 2007-10-14 12:23:14 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo in a comment
........
  r40027 | rogeeff | 2007-10-14 12:24:19 -0700 (Sun, 14 Oct 2007) | 1 line
  
  set init value for result
........
  r40028 | rogeeff | 2007-10-14 12:25:18 -0700 (Sun, 14 Oct 2007) | 1 line
  
  max macro guard
........
  r40029 | rogeeff | 2007-10-14 12:26:23 -0700 (Sun, 14 Oct 2007) | 1 line
  
  bug in output_test_stream constructor error generation fixed
........
  r40030 | rogeeff | 2007-10-14 12:27:32 -0700 (Sun, 14 Oct 2007) | 1 line
  
  avoid start/finish messages if log is disabled completely
........
  r40031 | rogeeff | 2007-10-14 12:28:46 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Test module initialization error message is redirected into result reporter stream
........
  r40032 | rogeeff | 2007-10-14 12:29:59 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo in a comment
........
  r40033 | rogeeff | 2007-10-14 12:39:33 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Log level enum value renamed
........
  r40035 | rogeeff | 2007-10-14 14:14:29 -0700 (Sun, 14 Oct 2007) | 6 lines
  
  Support for expected failures in test cases with automated registration reworked completely. It now allows to be used within auto-test-stuites. 
  framework API changed to return non const references to the test units to allow post creation modifications
  unit_test_suite.hpp dependency on framework.hpp removed
  inlined version includes all necessary files now
  in test_tools.hpp BOOST_TEST_DECL is added/removed where necessary
  Test suite auto registration modified to allow c++ namespace like behavior 
........
  r40036 | danieljames | 2007-10-14 14:52:12 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Sun C++ didn't like the function call, so just try inlining the implementation for now.
........
  r40040 | joaquin | 2007-10-14 23:54:34 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo
........
  r40041 | anthonyw | 2007-10-15 02:18:32 -0700 (Mon, 15 Oct 2007) | 1 line
  
  added missing include to basic_timed_mutex.hpp
........
  r40046 | fmhess | 2007-10-15 06:06:26 -0700 (Mon, 15 Oct 2007) | 5 lines
  
  Fixed some invalid docbook (<para> is not allowed to be a child of
  <part>).  This fixes one of the failures when building pdf docs with
  fop 0.94.
........
  r40047 | fmhess | 2007-10-15 06:24:34 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Prevent the generation of empty <itemizedlist> elements, which is invalid
  docbook and causes apache fop 0.94 to choke and die.
........
  r40048 | fmhess | 2007-10-15 06:27:50 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Fixed a problem with boostbook printing an extra colon in the class 
  synopsis, when a class inherits from a single base class and it's too 
  long to fit on one line.
........
  r40049 | fmhess | 2007-10-15 06:43:00 -0700 (Mon, 15 Oct 2007) | 9 lines
  
  Updated setup_boostbook scripts to download newer versions of apache fop
  and docbook xsl, since the old versions are no longer posted for download.
  The newer version of apache fop is stricter about its input, 
  and currently fails to validate its input when trying to build boost.pdf, 
  due to various bits on invalid docbook.  I have it working locally
  though, and will create tickets with patches in trac for the remaining
  issues in the library docs and tools.
........
  r40050 | fmhess | 2007-10-15 06:46:23 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Stop quickbook from generating empty <calloutlist> 
  elements (which is invalid docbook and causes apache fop 0.94 to 
  choke and die).
........
  r40051 | bemandawes | 2007-10-15 07:50:59 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Suppress message tests on Windows unless the language is US English
........
  r40052 | grafik | 2007-10-15 07:53:28 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Rework of regression scripts for branch independent testing -- complete.
........
  r40053 | grafik | 2007-10-15 08:45:25 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Bootstrap from trunk sources of regression scripts.
........
  r40056 | joaquin | 2007-10-15 09:10:39 -0700 (Mon, 15 Oct 2007) | 1 line
  
  added missing #include
........
  r40058 | igaztanaga | 2007-10-15 09:55:23 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Fixed doxygen error in reference
........
  r40059 | igaztanaga | 2007-10-15 09:56:27 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Added missing include
........
  r40060 | igaztanaga | 2007-10-15 09:57:15 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Fixed assignment operator
........
  r40061 | johnmaddock | 2007-10-15 09:57:57 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Disregard ".svn" directories
........
  r40062 | igaztanaga | 2007-10-15 09:58:15 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Changed wrong insert_after_and_dispose() with insert_after
........
  r40063 | danieljames | 2007-10-15 11:47:05 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Mark up the expected hash error for the sun compilers.
........
  r40064 | grafik | 2007-10-15 14:54:01 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Add default to 'regression' when no commands are given.
........
  r40065 | rogeeff | 2007-10-15 19:01:39 -0700 (Mon, 15 Oct 2007) | 1 line
  
  avoid warnings
........
  r40066 | rogeeff | 2007-10-15 19:02:16 -0700 (Mon, 15 Oct 2007) | 1 line
  
  msvc 6.5 port
........
  r40067 | rogeeff | 2007-10-15 19:03:16 -0700 (Mon, 15 Oct 2007) | 1 line
  
  proper report for the exceptions in inti_unit_test_suite function
........
  r40068 | rogeeff | 2007-10-15 20:47:24 -0700 (Mon, 15 Oct 2007) | 1 line
  
  use io_saver directly
........
  r40069 | rogeeff | 2007-10-15 20:51:54 -0700 (Mon, 15 Oct 2007) | 2 lines
  
  unified test runner interface for both original and alternative init API, the same time streamlining error handling for all the cases
  new property p_enabled is added to  the test unit in preparation for the run by name
........
  r40076 | rogeeff | 2007-10-16 00:06:10 -0700 (Tue, 16 Oct 2007) | 1 line
  
  fix A bug in auto TC exp failure support
........
  r40077 | rogeeff | 2007-10-16 00:07:43 -0700 (Tue, 16 Oct 2007) | 1 line
  
  temporary disable debug related features - to be reverted soon
........
  r40078 | rogeeff | 2007-10-16 00:18:10 -0700 (Tue, 16 Oct 2007) | 9 lines
  
  Major rework of execution monitor functionality:
  update to the error reporting on both NT and *nix
  support for signal handling on alternative stack
  execution monitor parameter made public properties
  structured exception handling moved to double __try approach with custom SE filter
  support for floating point errors enhanced on NT based compilers
  Notion of system_error is introduced (to be replaced potentially with boost::system later on)
  Invalid parameter error detected by MSVC runtime properly reported
  report_error implemented using vsnprintf allowing better output
........
  r40079 | johnmaddock | 2007-10-16 02:32:28 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Fixed lots of "inspect" issues: bad hyperlinks, tabs in source and missing licenses.
  Tweaked some error levels again.
........
  r40080 | anthonyw | 2007-10-16 04:08:17 -0700 (Tue, 16 Oct 2007) | 1 line
  
  removed lock_ops as no longer needed
........
  r40082 | igaztanaga | 2007-10-16 08:25:13 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Tru64 re-enabled for intrusive to try to solve remaining issues
........
  r40083 | johnmaddock | 2007-10-16 08:41:57 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Fixes for the Sun-5.9 compiler: don't try and encode constants smaller than LDBL_MIN, the compiler chokes on it.
  Fixes for STLport: long double stream operators are broken (streaming in appears not to work at all, streaming out can segfault if the value is too small).
........
  r40084 | grafik | 2007-10-16 08:52:38 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Minor modification to pass in the branch type to generate results for, and to move the boost checkout to the root dir.
........
  r40086 | johnmaddock | 2007-10-16 09:11:30 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Fully qualified use of "extended" flag, to keep gcc on Solaris happy.
........
  r40087 | johnmaddock | 2007-10-16 09:15:38 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Update for Borland 5.8.2 and 5.9.2.
........
  r40088 | niels_dekker | 2007-10-16 10:00:28 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Disabled MSVC warning C4345, in response to Gennadiy Rozental, Boost Developer mailing list, "[utility] value_init warning", October 14, 2007.  Push'n'pop reminder from Paul A Bristow taken into account.
........
  r40089 | niels_dekker | 2007-10-16 10:06:39 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Added value_initialized<T> test, having T as aggregate POD struct. In the past, this would have triggered MSVC warning C4345; this warning is now disabled within value_init.hpp, changeset [40088]
........
  r40090 | rogeeff | 2007-10-16 10:11:00 -0700 (Tue, 16 Oct 2007) | 1 line
  
  cygwin issue fix
........
  r40091 | eric_niebler | 2007-10-16 10:15:44 -0700 (Tue, 16 Oct 2007) | 1 line
  
  cleanup
........
  r40094 | eric_niebler | 2007-10-16 12:07:12 -0700 (Tue, 16 Oct 2007) | 1 line
  
  reverted to r40064
........
  r40095 | grafik | 2007-10-16 12:08:58 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Allow specifying options with quotes, i.e. "--with-python=xyz", to work around the CMD shell using "=" as an argument separator.
........
  r40096 | grafik | 2007-10-16 13:05:35 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Specify user to post results to OSL server.
........
  r40098 | guwi17 | 2007-10-16 14:48:01 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  - added section "nested products"
........
  r40099 | bemandawes | 2007-10-16 15:05:29 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Add failure count for each compiler column.
........
  r40100 | eric_niebler | 2007-10-16 15:13:11 -0700 (Tue, 16 Oct 2007) | 1 line
  
  revert more boost.test changes
........
  r40101 | danieljames | 2007-10-16 16:25:37 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Remove the free-function-groups from the hash reference documentation, they were causing the functions to be listed on the documentation for every specialization of boost::hash<T>, and the functions to be described on the main synopsis page, instead of their own page.
........
  r40103 | eric_niebler | 2007-10-16 21:26:36 -0700 (Tue, 16 Oct 2007) | 1 line
  
  misc cleann-up from Dave Jenkins
........
  r40104 | chris_kohlhoff | 2007-10-16 21:44:38 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Revert HP-UX/aCC change to select() wrapper as it breaks more than it fixes.
........
  r40106 | chris_kohlhoff | 2007-10-16 22:22:26 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Borland C++ wants friendship for the task_cleanup nested class.
........
  r40107 | chris_kohlhoff | 2007-10-17 00:25:03 -0700 (Wed, 17 Oct 2007) | 2 lines
  
  Throw an exception if unable to create a pipe for the pipe_select_interrupter.
........
  r40108 | chris_kohlhoff | 2007-10-17 00:58:38 -0700 (Wed, 17 Oct 2007) | 3 lines
  
  Make Windows XP the default target Windows version as the latest Windows
  SDK doesn't support IPv6 for Windows 2000 targets.
........
  r40109 | chris_kohlhoff | 2007-10-17 01:20:30 -0700 (Wed, 17 Oct 2007) | 2 lines
  
  Add define to disable /dev/poll support.
........
  r40110 | johnmaddock | 2007-10-17 02:19:35 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Change #warning to #pragma message: #warning is a gcc-ism and the code in question is msvc-specific (Tested on all msvc variants, plus gcc-minw32).
........
  r40117 | johnmaddock | 2007-10-17 05:58:55 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Disable FOP1 extensions so we can build with xep extensions instead.
........
  r40119 | chris_kohlhoff | 2007-10-17 07:04:42 -0700 (Wed, 17 Oct 2007) | 3 lines
  
  Add dummy enum for ssl errors. Change to static const references to error
  category objects to be consistent with boost.system.
........
  r40124 | igaztanaga | 2007-10-17 08:40:41 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Added <algorithm> include. Erased wrong "non" word in swap members' Throws clause.
........
  r40128 | johnmaddock | 2007-10-17 10:15:53 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Updates to build system: Sun and SGI compilers have a problem doing a shared link, and some platforms don't have an icudata library.
........
  r40129 | eric_niebler | 2007-10-17 10:21:01 -0700 (Wed, 17 Oct 2007) | 1 line
  
  mark up expected xpressive failures on acc toolset
........
  r40130 | danieljames | 2007-10-17 10:27:42 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Include authors that are in authorgroups in the generated chapterinfo.
........
  r40131 | danieljames | 2007-10-17 10:29:46 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Merge some minor changes from the development branch to remove some unnecessary differences.
........
  r40146 | joaquin | 2007-10-17 23:57:25 -0700 (Wed, 17 Oct 2007) | 1 line
  
  applied workaround for MSVC++ 6.5/7.0 problem with static constants inside templates, see http://lists.boost.org/Archives/boost/2007/10/128392.php
........
  r40147 | rogeeff | 2007-10-18 00:13:43 -0700 (Thu, 18 Oct 2007) | 1 line
  
  try run
........
  r40148 | rogeeff | 2007-10-18 00:14:56 -0700 (Thu, 18 Oct 2007) | 3 lines
  
  fixed issue with num of exp failure calculation 
  mwerks port in execution_monitor.ipp
  bug in init function invocation fixed
........
  r40149 | chris_kohlhoff | 2007-10-18 01:34:03 -0700 (Thu, 18 Oct 2007) | 2 lines
  
  Assume that Tru64 also needs SIGPIPE to be blocked.
........
  r40155 | johnmaddock | 2007-10-18 08:37:01 -0700 (Thu, 18 Oct 2007) | 3 lines
  
  Workaround for real_concept when there are no long double math functions.
  Added HP-UX on PA RISC to list of platforms with no long double overloads.
  Added macro expansion suppression code to declarations of sign and to it's usages (an AIX fix).
........
  r40156 | grafik | 2007-10-18 09:11:41 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Fix build system error when Python is not configured, without preventing the BPL target from being declared. Instead the target is now unbuildable, and will be skipped when Python is not configured.
........
  r40159 | igaztanaga | 2007-10-18 09:20:28 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Added atomic operations for alpha processors
........
  r40160 | vladimir_prus | 2007-10-18 09:53:01 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Enable index for Boost.Build standalone docs.
........
  r40162 | johnmaddock | 2007-10-18 11:17:15 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Fixed some links and merged changes in the Sandbox to here.
........
  r40165 | rogeeff | 2007-10-18 14:43:35 -0700 (Thu, 18 Oct 2007) | 2 lines
  
  FP exceptions made optional and disabled by default
  new CLA --detect_fp_exceptions=[yes|no] introduced
........
  r40166 | rogeeff | 2007-10-18 14:53:14 -0700 (Thu, 18 Oct 2007) | 1 line
  
  included alias added
........
  r40167 | aaron_windsor | 2007-10-18 17:16:36 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Un-asserted two function calls - this was causing the function calls to turn into no-ops when the example was compiled with debugging off.
........
  r40172 | rogeeff | 2007-10-18 19:17:52 -0700 (Thu, 18 Oct 2007) | 1 line
  
  msvc 6.5 port fix
........
  r40173 | eric_niebler | 2007-10-18 20:16:51 -0700 (Thu, 18 Oct 2007) | 1 line
  
  don't copy singular iterator in sub_match, misc clean-up
........
  r40174 | vladimir_prus | 2007-10-19 00:00:03 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Add indexterms for glob-tree and install-source-root.
........
  r40176 | chris_kohlhoff | 2007-10-19 01:09:55 -0700 (Fri, 19 Oct 2007) | 2 lines
  
  Add get_io_service() synonym for io_service() to match TR2 proposal.
........
  r40178 | schoepflin | 2007-10-19 02:06:04 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Detailed OSF detection macro to include the compiler used.
........
  r40179 | schoepflin | 2007-10-19 02:52:23 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added missing include file.
........
  r40180 | danieljames | 2007-10-19 02:55:10 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Fix the deprecated warnings on Borland, should also check before using #warning.
........
  r40181 | johnmaddock | 2007-10-19 05:03:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Add needed config options.
........
  r40183 | johnmaddock | 2007-10-19 05:30:46 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added revision ID.
........
  r40184 | johnmaddock | 2007-10-19 05:46:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Update configure files with revision Id and some compiler specific fixes.
........
  r40186 | schoepflin | 2007-10-19 07:45:06 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added support for Tru64/CXX.
........
  r40187 | anthonyw | 2007-10-19 07:52:52 -0700 (Fri, 19 Oct 2007) | 1 line
  
  small changes to reduce warnings; extracted pthread_mutex_scoped_lock to its own file
........
  r40188 | igaztanaga | 2007-10-19 07:54:18 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Fixed newline issue between two [endsect].
........
  r40189 | anthonyw | 2007-10-19 08:31:35 -0700 (Fri, 19 Oct 2007) | 1 line
  
  more tweaks to remove warnings
........
  r40191 | anthonyw | 2007-10-19 10:40:04 -0700 (Fri, 19 Oct 2007) | 1 line
  
  New condition_variable and condition_variable_any as per proposed C++0x interface
........
  r40192 | bemandawes | 2007-10-19 10:43:44 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Initial commit
........
  r40193 | johnmaddock | 2007-10-19 10:55:44 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Adjust ICU build support: almost works now :-)
........
  r40194 | turkanis | 2007-10-19 11:09:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  updated turkanis email address (iostreams + rational)
........
  r40196 | vladimir_prus | 2007-10-19 12:16:10 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Remove unused code
........
  r40197 | vladimir_prus | 2007-10-19 12:18:32 -0700 (Fri, 19 Oct 2007) | 2 lines
  
  Remove project-target.intern-constants as unused.
........
  r40203 | rogeeff | 2007-10-19 22:38:57 -0700 (Fri, 19 Oct 2007) | 1 line
  
  borland port
........
  r40204 | rogeeff | 2007-10-19 23:59:27 -0700 (Fri, 19 Oct 2007) | 1 line
  
  intel port
........
  r40205 | johnmaddock | 2007-10-20 02:20:30 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Removed ICU options from main requirements: BBv2 barfs at it.
........
  r40206 | danieljames | 2007-10-20 03:31:58 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Try to only issue deprecation warnings on compilers that support them.
........
  r40208 | djowel | 2007-10-20 04:01:50 -0700 (Sat, 20 Oct 2007) | 1 line
  
  refactoring for v2.1
........
  r40209 | djowel | 2007-10-20 04:31:03 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase2: refactoring for v2.1
........
  r40210 | djowel | 2007-10-20 04:49:17 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase3: refactoring for v2.1
........
  r40211 | djowel | 2007-10-20 04:50:27 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase3: refactoring for v2.1
........
  r40212 | djowel | 2007-10-20 06:13:46 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase4: refactoring for v2.1
........
  r40213 | djowel | 2007-10-20 06:13:58 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase4: refactoring for v2.1
........
  r40214 | johnmaddock | 2007-10-20 09:30:01 -0700 (Sat, 20 Oct 2007) | 1 line
  
  ICU libraries are only available as shared libraries.
........
  r40215 | grafik | 2007-10-20 09:35:58 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Do not refer to nonexistent target when python is not configured.
........
  r40216 | grafik | 2007-10-20 09:36:18 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Do not refer to nonexistent target when python is not configured.
........
  r40219 | djowel | 2007-10-20 15:21:43 -0700 (Sat, 20 Oct 2007) | 1 line
  
  reverting to 2.0
........
  r40220 | djowel | 2007-10-20 15:33:52 -0700 (Sat, 20 Oct 2007) | 1 line
  
  reverting to 2.0
........
  r40233 | danieljames | 2007-10-20 17:41:01 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Don't test long double in hash_number_test. This is a bit of a cop out, but it's silly to fail this test just because a platform has poor support for long double - hash_long_double_test is thorough enough.
........
  r40236 | danieljames | 2007-10-20 17:51:43 -0700 (Sat, 20 Oct 2007) | 6 lines
  
  Markup test that fail because of poor long double support.
  
  gcc-3.4.3_sunos doesn't seem to be tested any more, but I'll leave it in.
  PA Risc has a software long double which doesn't seem to be very well supported
  by the standard library functions.
........
  r40241 | chris_kohlhoff | 2007-10-20 18:48:03 -0700 (Sat, 20 Oct 2007) | 3 lines
  
  Ensure the buffers and completion condition objects are destroyed before
  the completion handler is invoked.
........
  r40255 | chris_kohlhoff | 2007-10-20 22:46:15 -0700 (Sat, 20 Oct 2007) | 3 lines
  
  HP-UX fails to declare if_nametoindex and if_indextoname as extern "C".
  Added declarations for them with correct linkage to avoid linker errors.
........
  r40256 | chris_kohlhoff | 2007-10-20 22:46:47 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Documentation fixes.
........
  r40259 | chris_kohlhoff | 2007-10-21 00:09:19 -0700 (Sun, 21 Oct 2007) | 4 lines
  
  On HP-UX use pselect() rather than select() to avoid weirdness where
  different select() prototypes are declared depending on the order the
  system headers are included.
........
  r40261 | chris_kohlhoff | 2007-10-21 00:30:04 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Use an unsigned char for the enable_loopback socket option on HP-UX.
........
  r40262 | chris_kohlhoff | 2007-10-21 00:59:53 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Seems that the watermark socket options are supported on HP-UX 11i v3.
........
  r40263 | chris_kohlhoff | 2007-10-21 01:13:21 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Fix address_v6::operator<.
........
  r40264 | danieljames | 2007-10-21 01:36:47 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  New algorithm for hash floating point numbers.
........
  r40265 | igaztanaga | 2007-10-21 01:49:42 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Solved Doxygen bug
........
  r40267 | igaztanaga | 2007-10-21 02:01:16 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Doxygen bug workaround. Corrected Solaris errors. Experimental grow/shrink_to_fit for managed_shared_memory and managed_mapped_file.
........
  r40268 | igaztanaga | 2007-10-21 02:02:23 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Doxygen bug workaround. Corrected Solaris errors. Experimental grow/shrink_to_fit for managed_shared_memory and managed_mapped_file.
........
  r40269 | johnmaddock | 2007-10-21 09:02:34 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Use __hppa to detect HP-UX on PA-RISC.
........
  r40270 | rogeeff | 2007-10-21 13:53:56 -0700 (Sun, 21 Oct 2007) | 3 lines
  
  Missing header in exception_safety.hpp
  Run by name support
  new tools BOOST_CHECK_NE, BOOST_CHECK_LE, BOOST_CHECK_LT, BOOST_CHECK_GE, BOOST_CHECK_GT implemented
........
  r40271 | rogeeff | 2007-10-21 13:59:15 -0700 (Sun, 21 Oct 2007) | 6 lines
  
  correct run rules in examples
  make example 2 more pronounced
  removed unnecessary ; in example 4 and 5
  new alias test in test directory
  msvc 6.5 should use static lib
  test case for new tools added
........
  r40272 | rogeeff | 2007-10-21 17:36:26 -0700 (Sun, 21 Oct 2007) | 1 line
  
  clean up
........
  r40273 | rogeeff | 2007-10-21 21:02:53 -0700 (Sun, 21 Oct 2007) | 3 lines
  
  added missing export for framework::get
  added line number to the name of the TU registrar, allowing to restart test suites within same module
  test_suite::size() implemented to provide an access to the suite size
........
  r40274 | rogeeff | 2007-10-21 21:09:01 -0700 (Sun, 21 Oct 2007) | 1 line
  
  new unit test: test_tree_management_test.cpp
........
  r40276 | rogeeff | 2007-10-21 23:36:50 -0700 (Sun, 21 Oct 2007) | 4 lines
  
  framework::is_initialized introduced to catch framework misuse errors
  Message report too few failed assertions updated
  New message added to report no assertion occurred in a test case 
  test_suite::remove interface is added to allow remove test units from the test suite if necessary
........
  r40277 | schoepflin | 2007-10-22 00:54:08 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Fix compilation.
........
  r40278 | johnmaddock | 2007-10-22 01:43:52 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Skip some "impossible" vc8 targets.
........
  r40280 | rogeeff | 2007-10-22 04:11:51 -0700 (Mon, 22 Oct 2007) | 1 line
  
  correct patterns
........
  r40281 | johnmaddock | 2007-10-22 04:16:15 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  Added Bjorn Roald's patches to enable scans of svn.
  Updated docs accordingly.
........
  r40282 | fmhess | 2007-10-22 06:17:19 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  Eliminated the possibility of empty <variablelist> elements in enum 
  references (invalid docbook, apache fop doesn't like it).
........
  r40284 | joaquin | 2007-10-22 07:50:08 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  extended MSVC 6.5 fix to Intel
........
  r40285 | igaztanaga | 2007-10-22 08:20:21 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Marked (temporarily) win64 toolsets unusable for Interprocess
........
  r40288 | johnmaddock | 2007-10-22 09:14:02 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Simplified regex usage.
........
  r40289 | vladimir_prus | 2007-10-22 09:45:49 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  Add missing Py_INCREF on Py_None objects.
........
  r40292 | joaquin | 2007-10-22 10:22:46 -0700 (Mon, 22 Oct 2007) | 1 line
  
  guarded some static asserts in project() funs from Sun C++ 5.7
........
  r40293 | johnmaddock | 2007-10-22 10:46:40 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Added support for _WIN32_WCE.
........
  r40294 | johnmaddock | 2007-10-22 10:48:51 -0700 (Mon, 22 Oct 2007) | 3 lines
  
  Disabled intrinsic type traits testing for SGI compiler.
  Disabled one is_convertible test for aCC on PA RISC.
  Disabled some tests in promote_basic_test.cpp for more platforms that have broken WCHAR_MAX macros.
........
  r40295 | johnmaddock | 2007-10-22 10:53:05 -0700 (Mon, 22 Oct 2007) | 1 line
  
  IBM xlc++ has support for TR1 when __IBMCPP_TR1__ is defined.
........
  r40299 | dgregor | 2007-10-22 12:37:05 -0700 (Mon, 22 Oct 2007) | 3 lines
  
  Fix warnings from GCC 4.3. Fixes #1337
........
  r40300 | dgregor | 2007-10-22 12:54:54 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  Suppress a GCC 4.3 warning and fix a couple header-inclusion issues.
  
  Fixes #1338
........
  r40301 | eric_niebler | 2007-10-22 13:14:11 -0700 (Mon, 22 Oct 2007) | 1 line
  
  needed typeof registrations, from David Jenkins
........
  r40302 | nesotto | 2007-10-22 13:26:51 -0700 (Mon, 22 Oct 2007) | 1 line
  
  added copyability to all containers
........
  r40306 | nesotto | 2007-10-22 15:50:52 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  minor refactorings to support copyability etc
........
  r40307 | nesotto | 2007-10-22 15:51:42 -0700 (Mon, 22 Oct 2007) | 1 line
  
  update of test to try copyability
........
  r40310 | eric_niebler | 2007-10-22 17:40:16 -0700 (Mon, 22 Oct 2007) | 1 line
  
  fix problem with ->* rewrite in actions, add x->*y as alias for y(x)
........
  r40322 | rogeeff | 2007-10-22 20:44:01 -0700 (Mon, 22 Oct 2007) | 1 line
  
  streamlined handling of SIGPOLL
........
  r40323 | bgubenko | 2007-10-22 20:44:33 -0700 (Mon, 22 Oct 2007) | 1 line
  
  fix typo in rev. 40321
........
  r40338 | rogeeff | 2007-10-22 22:25:42 -0700 (Mon, 22 Oct 2007) | 1 line
  
  update to tests and example
........
  r40342 | eric_niebler | 2007-10-23 00:01:53 -0700 (Tue, 23 Oct 2007) | 1 line
  
  clean-up, actionable need not be a template
........
  r40344 | chris_kohlhoff | 2007-10-23 01:09:21 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Only use pselect() when compiling with aCC.
........
  r40345 | chris_kohlhoff | 2007-10-23 01:09:46 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Documentation fixes.
........
  r40346 | schoepflin | 2007-10-23 01:20:26 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Now that intrusive is working, enable the interprocess library for Tru64/CXX.
........
  r40347 | schoepflin | 2007-10-23 01:26:51 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  Toolsets tru64cxx* have long been renamed to hp_cxx-*_tru64; removed markup
  obsoleted by the rename.
........
  r40348 | anthonyw | 2007-10-23 01:57:17 -0700 (Tue, 23 Oct 2007) | 1 line
  
  platform split for pthread and win32 builds so can use pthread-win32 library on Windows with <thrd-api>pthread feature; new C++0x-alike thread class interface on win32.
........
  r40349 | johnmaddock | 2007-10-23 02:34:40 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Ooops, put preprocessor logic in the right place!
........
  r40352 | bemandawes | 2007-10-23 06:00:18 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Rename posix, windows, Linux, and cygwin namespaces to conform with C++ std.
........
  r40353 | johnmaddock | 2007-10-23 06:10:32 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Removed redundant #define.
........
  r40354 | t_schwinger | 2007-10-23 06:25:57 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  removes dependencies to MPL intrinsics (removes top-level cv-qualifiers from element types, now)
........
  r40355 | t_schwinger | 2007-10-23 06:26:56 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  adjusts test: deduce_sequence removes top-level cv-qualifiers from element types, now
........
  r40356 | chris_kohlhoff | 2007-10-23 06:31:12 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Clean up documentation.
........
  r40359 | djowel | 2007-10-23 06:39:15 -0700 (Tue, 23 Oct 2007) | 1 line
  
  remove superfluous include
........
  r40360 | bemandawes | 2007-10-23 08:04:43 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fix linux_errno misspelling
........
  r40361 | igaztanaga | 2007-10-23 08:48:08 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Marked win64 toolsets again for testing in Interprocess
........
  r40363 | igaztanaga | 2007-10-23 10:46:36 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Temporary hack to avoid compilation errors in operator->()
........
  r40364 | igaztanaga | 2007-10-23 10:47:49 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Corrected error in create_from_istream
........
  r40365 | dgregor | 2007-10-23 11:16:57 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fix SIGPOLL and sigemptyset handling on Darwin
........
  r40367 | nesotto | 2007-10-23 11:36:03 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added test for char array with nested null in response to Ticket #471
........
  r40370 | nesotto | 2007-10-23 11:59:11 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  applied patch from Ticket #1302 (new Patches) to handle char arrays correctly
........
  r40371 | nesotto | 2007-10-23 12:06:39 -0700 (Tue, 23 Oct 2007) | 1 line
  
  change names of ADL functions back to 1.34 names ... the old names have been in use for too long so let's not break code that depends on them
........
  r40372 | nesotto | 2007-10-23 12:07:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  changed ADL functions back the names of 1.34 ... these names have been in use for too long ... let's not break code that depends on them
........
  r40373 | nesotto | 2007-10-23 12:12:19 -0700 (Tue, 23 Oct 2007) | 1 line
  
  new fancy quickbook documentaion
........
  r40374 | nesotto | 2007-10-23 12:34:06 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added test for operator()
........
  r40375 | nesotto | 2007-10-23 12:34:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added operator() to allow random access index with transform iterators 
........
  r40376 | nesotto | 2007-10-23 12:50:59 -0700 (Tue, 23 Oct 2007) | 1 line
  
  displabed some warnings and applied Ticket #1284: sub_range_copy.patch
........
  r40377 | nesotto | 2007-10-23 12:56:39 -0700 (Tue, 23 Oct 2007) | 1 line
  
  applied Ticket #1309 (new Patches)
........
  r40378 | nesotto | 2007-10-23 13:08:35 -0700 (Tue, 23 Oct 2007) | 1 line
  
  cleanup
........
  r40379 | nesotto | 2007-10-23 13:23:05 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Adding Shunsuke Sogame fantastic MFC/ATL mappings
........
  r40381 | nesotto | 2007-10-23 13:28:52 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Shunsuke Sogame's MFC/ATL docs and tests
........
  r40382 | chris_kohlhoff | 2007-10-23 15:32:11 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Mark borland 5.6.* and 5.8.* as unusable for asio.
........
  r40389 | djowel | 2007-10-23 19:30:52 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40390 | djowel | 2007-10-23 19:32:28 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40391 | djowel | 2007-10-23 19:33:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40392 | djowel | 2007-10-23 19:36:29 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40393 | djowel | 2007-10-23 19:37:23 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40394 | djowel | 2007-10-23 19:38:02 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40396 | rogeeff | 2007-10-23 21:48:16 -0700 (Tue, 23 Oct 2007) | 1 line
  
  win CE and solaris workarounds
........
  r40397 | djowel | 2007-10-23 21:58:50 -0700 (Tue, 23 Oct 2007) | 1 line
  
  merging tobias changes
........
  r40399 | schoepflin | 2007-10-24 01:21:15 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Added missing include file.
........
  r40401 | johnmaddock | 2007-10-24 01:49:06 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fix HPUX error levels: reordered expected failure rates so that they still work when largest_real == double.
........
  r40403 | schoepflin | 2007-10-24 02:02:32 -0700 (Wed, 24 Oct 2007) | 3 lines
  
  Fixed code which incorrectly assumed that an iterator returned by begin() is
  always a modifiable lvalue.
........
  r40404 | schoepflin | 2007-10-24 02:04:47 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Clarify lookup for destroy_n().
........
  r40405 | johnmaddock | 2007-10-24 02:15:20 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Update makefiles and the script that creates them: was generating dependencies that weren't required.
........
  r40406 | anthonyw | 2007-10-24 02:32:29 -0700 (Wed, 24 Oct 2007) | 1 line
  
  added real default constructor to condition::list_entry
........
  r40407 | anthonyw | 2007-10-24 02:36:51 -0700 (Wed, 24 Oct 2007) | 1 line
  
  thrd-api is no longer a symmetric feature
........
  r40408 | schoepflin | 2007-10-24 04:17:05 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Added missing include file.
........
  r40409 | vladimir_prus | 2007-10-24 04:34:53 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Improve comments
........
  r40410 | vladimir_prus | 2007-10-24 04:38:49 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fix typo
........
  r40411 | schoepflin | 2007-10-24 04:41:21 -0700 (Wed, 24 Oct 2007) | 3 lines
  
  Use external linkage for function templates, otherwise they are not considered
  as candidate functions during name loopkup.
........
  r40412 | anthonyw | 2007-10-24 05:00:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  updated thread move semantics to work with Borland
........
  r40413 | chris_kohlhoff | 2007-10-24 06:23:59 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Fixes for HP-UX test failures.
........
  r40414 | nesotto | 2007-10-24 06:35:04 -0700 (Wed, 24 Oct 2007) | 1 line
  
  changed example with prime numbers according to Ticket #807 (new Bugs: None)
........
  r40415 | nesotto | 2007-10-24 06:54:11 -0700 (Wed, 24 Oct 2007) | 1 line
  
  conversion operator was not in 1.34, so removed here also
........
  r40416 | nesotto | 2007-10-24 06:54:52 -0700 (Wed, 24 Oct 2007) | 1 line
  
  cleanup
........
  r40417 | nesotto | 2007-10-24 07:46:42 -0700 (Wed, 24 Oct 2007) | 1 line
  
  some updates from 1,34 branch
........
  r40418 | eric_niebler | 2007-10-24 08:00:20 -0700 (Wed, 24 Oct 2007) | 1 line
  
  s/boost_range_begin/range_begin/
........
  r40419 | nesotto | 2007-10-24 08:02:01 -0700 (Wed, 24 Oct 2007) | 1 line
  
  newer docs from 1.34
........
  r40420 | eric_niebler | 2007-10-24 08:04:41 -0700 (Wed, 24 Oct 2007) | 1 line
  
  more typeof registrations from Dave Jankins
........
  r40422 | nesotto | 2007-10-24 08:18:22 -0700 (Wed, 24 Oct 2007) | 1 line
  
  roll back of ADL names
........
  r40423 | nesotto | 2007-10-24 08:19:16 -0700 (Wed, 24 Oct 2007) | 1 line
  
  roll-back of ADL names
........
  r40424 | anthonyw | 2007-10-24 08:39:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  updated pthreads code to support move and multiple joins
........
  r40425 | nesotto | 2007-10-24 08:53:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  removed deprecated mfc stuff
........
  r40426 | nesotto | 2007-10-24 09:26:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  minor updates from 1.34
........
  r40427 | johnmaddock | 2007-10-24 10:57:45 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Removed files that are no longer used and regenerated the Makefiles so they are no longer dependent on the removed files.
  Hidden some seldom-used dependencies in static_mutex.hpp to reduce library footprint when extracted with bcp.
........
  r40428 | igaztanaga | 2007-10-24 11:59:26 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris-gcc errors and added splay trees
........
  r40429 | igaztanaga | 2007-10-24 12:00:30 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris-gcc errors and added splay trees
........
  r40430 | igaztanaga | 2007-10-24 12:25:40 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Corrected operator >> bug
........
  r40433 | grafik | 2007-10-24 12:56:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Obsolete in new web site. (fixes #1373)
........
  r40435 | burbelgruff | 2007-10-24 13:30:31 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Deleted regression tests.
........
  r40437 | grafik | 2007-10-24 14:01:44 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Obsolete files, as they are now moved to the new web site structure. (fixes #1248)
........
  r40438 | eric_niebler | 2007-10-24 14:37:09 -0700 (Wed, 24 Oct 2007) | 1 line
  
  remove unneeded msvc-7.1 work-around
........
  r40440 | danieljames | 2007-10-24 15:56:42 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Delete background.html as it's now in the new web site.
........
  r40442 | djowel | 2007-10-24 16:29:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  fix remaining includes
........
  r40444 | danieljames | 2007-10-24 16:36:57 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Delete bibliography, now that it's updated in the site. Fixes #1254.
........
  r40445 | eric_niebler | 2007-10-24 16:37:40 -0700 (Wed, 24 Oct 2007) | 1 line
  
  replace all throw statements with boost::throw_exception
........
  r40447 | rogeeff | 2007-10-24 17:01:38 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  avoid msvc 8.0 warning 
  more win CE workaround
........
  r40448 | rogeeff | 2007-10-24 17:02:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  avoid some msvc warning
........
  r40449 | rogeeff | 2007-10-24 17:17:25 -0700 (Wed, 24 Oct 2007) | 1 line
  
  missed sunpro workaround
........
  r40451 | rogeeff | 2007-10-24 22:38:19 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  minor cleanup
  final major piece of this update: debug services (almost complete: without stack dump)
........
  r40453 | igaztanaga | 2007-10-24 23:33:50 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris and Linux bugs
........
  r40454 | igaztanaga | 2007-10-24 23:34:41 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed intrusive_ptr and named condition test and added documentation.
........
  r40455 | rogeeff | 2007-10-24 23:35:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  missing file included
........
  r40456 | anthonyw | 2007-10-25 00:17:20 -0700 (Thu, 25 Oct 2007) | 1 line
  
  thread move constructor is not explicit, so self() compiles for MSVC8 and Intel; thread_exit_callback_node constructor added to remove warnings on MSVC8; thread destructor no longer calls cancel
........
  r40457 | rogeeff | 2007-10-25 00:29:07 -0700 (Thu, 25 Oct 2007) | 1 line
  
  missed debug in another included component
........
  r40458 | speedsnail | 2007-10-25 00:52:25 -0700 (Thu, 25 Oct 2007) | 1 line
  
  More verbose "Skipping" message, telling what it is beeing skipped.
........
  r40459 | speedsnail | 2007-10-25 00:57:12 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Corrected typo
........
  r40460 | schoepflin | 2007-10-25 03:21:10 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Removed extra semicolons to silence warnings.
........
  r40461 | igaztanaga | 2007-10-25 08:53:19 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Corrected error when checking file size against maximum address range for 64 bit platforms
........
  r40462 | vladimir_prus | 2007-10-25 09:48:24 -0700 (Thu, 25 Oct 2007) | 3 lines
  
  Report underfined paths before trying to replace
  spaces in them (and crash on emptry paths).
........
  r40463 | vladimir_prus | 2007-10-25 10:08:27 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Don't use boost.test for testing.
........
  r40464 | nesotto | 2007-10-25 13:47:59 -0700 (Thu, 25 Oct 2007) | 1 line
  
  major update of copy-operations and various pending fixes
........
  r40465 | nesotto | 2007-10-25 13:49:02 -0700 (Thu, 25 Oct 2007) | 1 line
  
  major update of test to handle new functionality and better test of old functionality
........
  r40466 | nesotto | 2007-10-25 13:50:51 -0700 (Thu, 25 Oct 2007) | 1 line
  
  update of test for ptr_list_of which can now actually works because of copyability of the ptr_contaners
........
  r40467 | nesotto | 2007-10-25 13:51:16 -0700 (Thu, 25 Oct 2007) | 1 line
  
  proper definition of the conversion operator
........
  r40468 | dave | 2007-10-25 16:19:48 -0700 (Thu, 25 Oct 2007) | 3 lines
  
  Closes #1379.  It would be good to have a much more principled approach; 
  see comments in the diffs for details.
........
  r40469 | grafik | 2007-10-25 18:02:48 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Merge search path for include & import from backend branch. And add corresponding support for <include> to BBv2 quickbook tool. Remove obsolete quickbook.xml file. (fixes #1263)
........
  r40471 | rogeeff | 2007-10-25 23:47:29 -0700 (Thu, 25 Oct 2007) | 2 lines
  
  made it to compile if unicode is defined
  avoid assertion for negative chars
........
  r40472 | anthonyw | 2007-10-26 00:33:22 -0700 (Fri, 26 Oct 2007) | 1 line
  
  added tests for cancellation
........
  r40473 | vladimir_prus | 2007-10-26 01:41:34 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Fix typo
........
  r40474 | vladimir_prus | 2007-10-26 01:45:26 -0700 (Fri, 26 Oct 2007) | 2 lines
  
  Make 'install' for individual lib explicit.
........
  r40475 | vladimir_prus | 2007-10-26 02:04:25 -0700 (Fri, 26 Oct 2007) | 6 lines
  
  Make sure every library can be installed by using
  
       bjam stage|install
  
  in libs/<library>/build.
........
  r40476 | anthonyw | 2007-10-26 02:45:46 -0700 (Fri, 26 Oct 2007) | 1 line
  
  disable_cancellation and restore_cancellation need to be declared BOOST_THREAD_DECL to work with DLLs
........
  r40477 | anthonyw | 2007-10-26 02:53:10 -0700 (Fri, 26 Oct 2007) | 1 line
  
  disable_cancellation and restore_cancellation need to be declared BOOST_THREAD_DECL to work with DLLs with pthread-win32
........
  r40478 | anthonyw | 2007-10-26 03:46:01 -0700 (Fri, 26 Oct 2007) | 1 line
  
  improved lifetime management of thread data
........
  r40479 | t_schwinger | 2007-10-26 05:16:37 -0700 (Fri, 26 Oct 2007) | 3 lines
  
  reverts clobbered changes before merge
........
  r40480 | igaztanaga | 2007-10-26 07:24:58 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Added missing include
........
  r40483 | schoepflin | 2007-10-26 08:36:56 -0700 (Fri, 26 Oct 2007) | 3 lines
  
  Use external linkage for function templates, otherwise they are not considered
  as candidate functions during name loopkup.
........
  r40484 | johnmaddock | 2007-10-26 11:12:28 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Try and work around a Tru64 overload resolution bug.
........
  r40485 | rogeeff | 2007-10-26 11:31:55 -0700 (Fri, 26 Oct 2007) | 1 line
  
  removed install target for now
........
  r40487 | vladimir_prus | 2007-10-26 12:37:56 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Fix winmain test
........
  r40488 | nesotto | 2007-10-26 16:03:11 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Added test of xml-archives.
........
  r40489 | nesotto | 2007-10-26 16:16:15 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Ticket #1027 (new Patches)
........
  r40494 | igaztanaga | 2007-10-27 02:17:14 -0700 (Sat, 27 Oct 2007) | 1 line
  
  updated new acc toolsets as unusable for Interprocess
........
  r40497 | vladimir_prus | 2007-10-27 02:55:58 -0700 (Sat, 27 Oct 2007) | 2 lines
  
  New Python rule -- 'backtrace'.
........
  r40498 | johnmaddock | 2007-10-27 04:25:05 -0700 (Sat, 27 Oct 2007) | 1 line
  
  Added first lot of markup for the new Boost.Math additions.
........
  r40499 | johnmaddock | 2007-10-27 04:27:19 -0700 (Sat, 27 Oct 2007) | 1 line
  
  Changed concept code so there are no null-references any more (the code breaks on EDG based compilers otherwise).
........
  r40500 | johnmaddock | 2007-10-27 04:32:30 -0700 (Sat, 27 Oct 2007) | 2 lines
  
  Set expected error limits for HP Tru64.
  Prevent very extreme-value round-trip tests from being run.
........
  r40506 | nesotto | 2007-10-27 08:57:20 -0700 (Sat, 27 Oct 2007) | 1 line
  
  cleaned up deprecated headers
........
  r40507 | nesotto | 2007-10-27 08:57:56 -0700 (Sat, 27 Oct 2007) | 1 line
  
  updated example to new syntax
........
  r40508 | nesotto | 2007-10-27 08:58:22 -0700 (Sat, 27 Oct 2007) | 1 line
  
  first update ... more to come
........
  r40509 | nesotto | 2007-10-27 11:20:45 -0700 (Sat, 27 Oct 2007) | 1 line
  
  small renaming
........
  r40510 | nesotto | 2007-10-27 11:21:17 -0700 (Sat, 27 Oct 2007) | 1 line
  
  better test of bilk headers
........
  r40511 | nesotto | 2007-10-27 14:50:14 -0700 (Sat, 27 Oct 2007) | 1 line
  
  update of all new functionality
........
  r40512 | nesotto | 2007-10-27 14:52:13 -0700 (Sat, 27 Oct 2007) | 1 line
  
  minor change to scoped_deleter, some cleanup of explicit, and fixed a bug in assignment of ptr_maps
........
  r40513 | nesotto | 2007-10-27 14:52:51 -0700 (Sat, 27 Oct 2007) | 1 line
  
  minor update of copying of maps
........
  r40514 | nesotto | 2007-10-27 15:00:47 -0700 (Sat, 27 Oct 2007) | 1 line
  
  added mfc/atl link
........
  r40515 | danmarsden | 2007-10-27 15:16:35 -0700 (Sat, 27 Oct 2007) | 1 line
  
  fixing performance tests, mainly result of issues, and arity issues with unfused typed
........
  r40516 | danmarsden | 2007-10-27 15:18:13 -0700 (Sat, 27 Oct 2007) | 1 line
  
  fixing missing traversal category on binary transform view, by reusing zip_view algorithm
........
  r40517 | nesotto | 2007-10-27 15:35:20 -0700 (Sat, 27 Oct 2007) | 1 line
  
  update that hopefully will help eg the sun compiler
........
  r40518 | nesotto | 2007-10-27 15:52:29 -0700 (Sat, 27 Oct 2007) | 1 line
  
  changed range_result_iterator to range_iterator
........
  r40520 | nesotto | 2007-10-28 03:11:10 -0700 (Sun, 28 Oct 2007) | 1 line
  
  fixes broken one from trunk ... still not finished
........
  r40521 | nesotto | 2007-10-28 03:11:54 -0700 (Sun, 28 Oct 2007) | 1 line
  
  adds test for inclusion of concept header
........
  r40522 | johnmaddock | 2007-10-28 04:07:14 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  split test_policy into 2 to reduce compile times.
  Added expected error rates for Mac OS X on Intel.
........
  r40524 | andreas_huber69 | 2007-10-28 06:26:00 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  - Added to-do
  - Update for 1.35
........
  r40527 | hkaiser | 2007-10-28 07:29:40 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Changed the code to allow ADL to find the correct pow() function, not relying on an existing overload in the std namespace anymore.
........
  r40530 | martin_wille | 2007-10-28 09:02:15 -0700 (Sun, 28 Oct 2007) | 5 lines
  
  -- compensated for changes to Boost.Thread:
     o Boost.Thread no longer accepts boost::reference_wrapper instances as callable arguments
     o created a new callable_reference_wrapper type that gets used instead of the no longer
       accepted type.
........
  r40531 | hkaiser | 2007-10-28 09:16:52 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Added test of real_parser specialized for a custom data type.
........
  r40534 | danmarsden | 2007-10-28 10:40:45 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Documentation for the struct extension macros
........
  r40535 | dave | 2007-10-28 12:22:21 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  Closes #1379, really this time.  The old code would sandwich argv[1] between quotes and interpret it as a string, so backslashes in windows paths were interpreted as escape sequences.
........
  r40536 | dave | 2007-10-28 12:24:02 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  Take out print statement I added for debugging purposes.
........
  r40537 | grafik | 2007-10-28 12:53:09 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Fix misspelled test file name.
........
  r40539 | djowel | 2007-10-28 18:19:31 -0700 (Sun, 28 Oct 2007) | 1 line
  
  added Tobias to fusion authors list
........
  r40540 | burbelgruff | 2007-10-29 01:05:17 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Fixed duplicate definition of boost::type_of::push_back when BOOST_TYPEOF_LIMIT_SIZE>50 and not a multiple of 50. (From Dave Jenkins)
........
  r40541 | joaquin | 2007-10-29 01:12:58 -0700 (Mon, 29 Oct 2007) | 1 line
  
  updated according to latest regression tests results
........
  r40542 | joaquin | 2007-10-29 01:16:56 -0700 (Mon, 29 Oct 2007) | 1 line
  
  fixed some struct/class discordances between decls and defs
........
  r40543 | nesotto | 2007-10-29 05:29:57 -0700 (Mon, 29 Oct 2007) | 1 line
  
  change use of range_result_iterator to range_iterator
........
  r40546 | chris_kohlhoff | 2007-10-29 06:06:12 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Mac OS X 10.5 (Leopard) gives a compile error if you try to perform an
  operation on a const fd_set pointer.
........
  r40547 | chris_kohlhoff | 2007-10-29 06:06:39 -0700 (Mon, 29 Oct 2007) | 2 lines
  
  Ensure the task handler is put back on the queue after polling.
........
  r40548 | chris_kohlhoff | 2007-10-29 06:07:08 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Use GetModuleHandleA rather than GetModuleHandle to avoid being broken by
  UNICODE #defines.
........
  r40549 | chris_kohlhoff | 2007-10-29 06:08:32 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  HP-UX fails to declare if_nametoindex as extern "C". Added a declaration
  for it with correct linkage to avoid a linker error.
........
  r40551 | dgregor | 2007-10-29 07:43:19 -0700 (Mon, 29 Oct 2007) | 1 line
  
  sigemptyset is a macro on Darwin, so don't precede it by ::
........
  r40553 | eric_niebler | 2007-10-29 08:04:11 -0700 (Mon, 29 Oct 2007) | 1 line
  
  better solution for deprecated range_result_iterator
........
  r40554 | fmhess | 2007-10-29 08:08:46 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Extended the hack in docbook.xsl for dealing with nested <part> elements.  
  It now handles the case of <appendix> children of <part>.
........
  r40555 | fmhess | 2007-10-29 08:18:49 -0700 (Mon, 29 Oct 2007) | 16 lines
  
  Added support for new boostbook <access> element for documenting non-public
  class members.
  
  function.xsl, type.xsl, utility.xsl: Added support for <access> elements to
  allow nonpublic access specifiers for class member documentation.
  
  boostbook.dtd: Updated to reflect new <access> element.  Updated Peter Simons
  email address.  Added mention of boost license.
  
  reference.dtdxml: Added reference documentation for new <access> element.
  Removed some obsolete remarks from the description of inherit element.
  
  reference.xml: The changes to this file were generated by applying
  dtd2boostbook.xsl to the updated reference.dtdxml file.
........
  r40556 | grafik | 2007-10-29 09:12:14 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Fix force-update and have-source options to be correct boolean options. And bring back the rmtree code to work around Python rmtree deficiencies.
........
  r40557 | grafik | 2007-10-29 12:12:07 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Now that tarballs are working again... Implement getting the tools source from tarballs, and fix getting boost sources from tarball.
........
  r40558 | rwgk | 2007-10-29 12:12:56 -0700 (Mon, 29 Oct 2007) | 1 line
  
  gcc 4.3.0 compatibility (resolves new "changes meaning" error)
........
  r40595 | grafik | 2007-10-29 18:50:42 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Add support for using a proxy as some firewalls are restrictive even to HTTP/GET access.
........
  r40597 | igaztanaga | 2007-10-30 00:00:51 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added avl trees
........
  r40598 | igaztanaga | 2007-10-30 00:02:10 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added avl trees
........
  r40599 | agurtovoy | 2007-10-30 00:25:27 -0700 (Tue, 30 Oct 2007) | 1 line
  
  xsl_reports: display the corresponding run's revision/timestamp on the test output page
........
  r40603 | bgubenko | 2007-10-30 05:43:47 -0700 (Tue, 30 Oct 2007) | 1 line
  
  add support for aC++ on HP-UX ia64
........
  r40604 | bgubenko | 2007-10-30 05:48:44 -0700 (Tue, 30 Oct 2007) | 1 line
  
  add support for aC++ on HP-UX ia64
........
  r40605 | bgubenko | 2007-10-30 05:58:36 -0700 (Tue, 30 Oct 2007) | 1 line
  
  fix typo in comment
........
  r40609 | anthonyw | 2007-10-30 10:16:24 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added specialization for reference_wrapper to allow use of boost::ref with boost::thread (again)
........
  r40611 | hkaiser | 2007-10-30 11:17:59 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Merged a change from 1.34.1.
........
  r40612 | nesotto | 2007-10-30 12:47:40 -0700 (Tue, 30 Oct 2007) | 1 line
  
  current version gave problem in regression ... to be updated later
........
  r40614 | andreas_huber69 | 2007-10-30 14:27:34 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Marked up new failures for 1.35
........
  r40615 | andreas_huber69 | 2007-10-30 15:01:41 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Updated link to test results.
........
  r40617 | danieljames | 2007-10-30 15:33:35 -0700 (Tue, 30 Oct 2007) | 3 lines
  
  Remove regression/.htaccess as it has been merged with the beta website's
  .htaccess. Fixes #1249.
........
  r40623 | johnmaddock | 2007-10-31 05:43:10 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Try and get better error messages to debug Tru64 failures.
........
  r40625 | bemandawes | 2007-10-31 08:09:35 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Remove some older compilers from required list
........
  r40627 | bemandawes | 2007-10-31 11:28:39 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Add missing BOOST_SYSTEM_NO_DEPRECATED #ifndef
........
  r40628 | grafik | 2007-10-31 13:20:07 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Remove dependence on boost.test for PJL. It causes too many dependence problems on the testing platforms.
........
  r40629 | nesotto | 2007-10-31 14:48:11 -0700 (Wed, 31 Oct 2007) | 1 line
  
  added deprecated headers again for backward compatibility sake
........
  r40630 | bemandawes | 2007-10-31 15:01:58 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Treat Windows ERROR_SHARING_VIOLATION as an existing file of unknown type. Fixes ticket #897
........
  r40631 | agurtovoy | 2007-10-31 15:25:46 -0700 (Wed, 31 Oct 2007) | 1 line
  
  xsl_report: fix timestamp/revision age highlighting
........
  r40632 | hkaiser | 2007-10-31 16:13:34 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Applied patch from #1208.
........
  r40633 | bgubenko | 2007-10-31 18:05:07 -0700 (Wed, 31 Oct 2007) | 1 line
  
  mark parameter library tests affected by GCC Bugzilla Bug 33580
........
  r40634 | rogeeff | 2007-10-31 19:46:57 -0700 (Wed, 31 Oct 2007) | 1 line
  
  disable on CE
........
  r40635 | rogeeff | 2007-10-31 19:54:15 -0700 (Wed, 31 Oct 2007) | 1 line
  
  debug was missing in PEM
........
  r40636 | johnmaddock | 2007-11-01 03:17:49 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Still more tweaks to try and figure out why this fails on Tru64.
........
  r40637 | igaztanaga | 2007-11-01 04:47:00 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Uncommented pointer conversion utilities
........
  r40638 | bgubenko | 2007-11-01 04:47:20 -0700 (Thu, 01 Nov 2007) | 1 line
  
  fix typo
........
  r40639 | johnmaddock | 2007-11-01 07:01:44 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Added <stdio.h> and <sys/time.h> to the list of Unix-specific includes: these are needed by Sun's compiler, and for that matter, by Boost.Test to be std conforming.
........
  r40640 | bemandawes | 2007-11-01 08:23:06 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Enable the XPG-compliant version of readdir_r() on AIX. Merged from 1.34.1.
........
  r40642 | gmelquio | 2007-11-01 09:01:30 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Ported patch from 1.34.1 about conflicting math.h functions on PPC. Commented use of old control function for MSVC.
........
  r40645 | dgregor | 2007-11-01 09:16:30 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Use unsigned long long for the path count to avoid overflows. Fixes #1398
........
  r40646 | bemandawes | 2007-11-01 09:35:45 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Mingw doesn't support GetUserDefaultUILanguage so set it to US English.
........
  r40647 | anthonyw | 2007-11-01 10:07:47 -0700 (Thu, 01 Nov 2007) | 1 line
  
  condition wait and sleep are now cancellation points
........
  r40649 | johnmaddock | 2007-11-01 10:16:41 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix for http://svn.boost.org/trac/boost/ticket/1381.
........
  r40650 | anthonyw | 2007-11-01 10:18:54 -0700 (Thu, 01 Nov 2007) | 1 line
  
  shared_mutex lock functions are not cancellation points
........
  r40651 | danieljames | 2007-11-01 10:58:13 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Merge version history from 1.34.1.
........
  r40652 | johnmaddock | 2007-11-01 11:02:37 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Ticket #583.
........
  r40653 | anthonyw | 2007-11-01 11:04:55 -0700 (Thu, 01 Nov 2007) | 1 line
  
  added timed_join to thread
........
  r40654 | johnmaddock | 2007-11-01 11:05:33 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Patches from Trac #583.
........
  r40655 | danieljames | 2007-11-01 11:22:33 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix the previous merge commit, it didn't include all the changes.
........
  r40656 | johnmaddock | 2007-11-01 11:26:07 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Strengthened admonishment and rebuilt docs.
........
  r40657 | bemandawes | 2007-11-01 11:39:32 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Add Boost.System
........
  r40669 | danieljames | 2007-11-01 14:57:03 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Delete people from main repository, now that the beta website has been updated.
........
  r40670 | chris_kohlhoff | 2007-11-01 15:42:26 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Fix memory leak when an io_service is allowed to destruct with unfinished
  async_wait operations.
........
  r40671 | dave | 2007-11-01 16:39:02 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Initialized merge tracking via "svnmerge" with revisions "1-40670" from 
  https://svn.boost.org/svn/boost/branches/RC_1_34_0/boost
........
  r40672 | dave | 2007-11-01 16:44:39 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Initialized merge tracking via "svnmerge" with revisions "1-33417" from 
  https://svn.boost.org/svn/boost/branches/RC_1_34_0/boost
........
  r40673 | dgregor | 2007-11-01 20:07:24 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix for Borland/CodeGear, from JongSoo Park
........
  r40674 | matias | 2007-11-01 20:51:40 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Add not supported compilers for Bimap
........
  r40675 | eric_niebler | 2007-11-01 21:35:01 -0700 (Thu, 01 Nov 2007) | 1 line
  
  merge Changeset  37947
........
  r40676 | speedsnail | 2007-11-02 00:42:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  changed translate-indirect to skip rules, that are already in indirect format. This allows e.g. to make use of the -<tag> to remove already set tag feature.
........
  r40677 | speedsnail | 2007-11-02 01:40:11 -0700 (Fri, 02 Nov 2007) | 2 lines
  
  New thread Jamfile. Requirement <threading>multi now correctly handled, even when requested with <threading>single. New project specific feature <threadapi> with values win32 and pthread available.
........
  r40678 | johnmaddock | 2007-11-02 01:59:24 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Some minor tweaks to support Sun's compiler on Linux.
........
  r40679 | anthonyw | 2007-11-02 02:17:02 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added changes from David Deakins to enable compilation on Windows CE
........
  r40680 | anthonyw | 2007-11-02 04:47:56 -0700 (Fri, 02 Nov 2007) | 1 line
  
  rewrite xtime_get in terms of get_system_time to ensure clock consistency, and fix Borland test failures
........
  r40682 | bemandawes | 2007-11-02 05:43:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  WinCE workaround for lack of FormatMessageA
........
  r40683 | johnmaddock | 2007-11-02 06:01:39 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added a couple of boost:: qualifiers that were present in 1.34.1 but got lost from the Trunk.
........
  r40684 | johnmaddock | 2007-11-02 06:02:41 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixes for Mac OS X on PowerPC Darwin.
........
  r40685 | anthonyw | 2007-11-02 07:58:48 -0700 (Fri, 02 Nov 2007) | 1 line
  
  renamed cancellation to interruption
........
  r40687 | rogeeff | 2007-11-02 09:08:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  allow tests to be run by regression testing facilities
........
  r40688 | johnmaddock | 2007-11-02 10:40:10 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added one more needed #include (stdlib.h for mkstemp).
........
  r40692 | anthonyw | 2007-11-02 11:19:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixed typo with interruption change
........
  r40693 | johnmaddock | 2007-11-02 11:26:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added needed #include and using declaration.
........
  r40697 | pavol_droba | 2007-11-02 13:55:26 -0700 (Fri, 02 Nov 2007) | 2 lines
  
  merging changes from 1.34
........
  r40698 | pavol_droba | 2007-11-02 14:00:08 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  merging changes from 1.34
........
  r40702 | fmhess | 2007-11-02 15:37:52 -0700 (Fri, 02 Nov 2007) | 4 lines
  
  Fixed spurious paragraph in html output for overloaded
  methods.
........
  r40703 | fmhess | 2007-11-02 15:40:25 -0700 (Fri, 02 Nov 2007) | 4 lines
  
  Added descriptions of class member typedefs to class documentation.  This
  replaces Daniel James' previous one-line patch from changeset 39711.
........
  r40704 | fcacciola | 2007-11-02 15:55:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Merged changests from RC_1_34_0 - base rev 33417
........
  r40705 | fcacciola | 2007-11-02 15:56:23 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Merged changests from RC_1_34_0 - base rev 33417
........
  r40706 | fcacciola | 2007-11-02 16:06:42 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixed error reported by Edward Diener
........
  r40707 | fcacciola | 2007-11-02 16:41:37 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added test to ensure proper binding of optional references (in reference to Ticket 1301)
........
  r40708 | pdimov | 2007-11-02 16:46:04 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Port unspecified_bool fix for Sun 5.8 from RC_1_34
........
  r40709 | hkaiser | 2007-11-02 17:30:33 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Bumped Spirit version to 1.8.6.
........
  r40710 | bemandawes | 2007-11-02 17:49:07 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Detect Windows FormatMessage errors, standardize message() return on message-not-found errors
........
  r40712 | djowel | 2007-11-02 20:05:26 -0700 (Fri, 02 Nov 2007) | 1 line
  
  replacing reinterpret_cast with static_cast<PySliceObject*>(static_cast<void*>(i))
........
  r40714 | dave | 2007-11-02 20:25:13 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  
  Merging some of the more obvious changes from RC_1_34_0
........
  r40715 | noel_belcourt | 2007-11-02 21:08:23 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  Have intel on darwin use intel-linux.jam toolset.
........
  r40716 | danieljames | 2007-11-03 03:10:11 -0700 (Sat, 03 Nov 2007) | 2 lines
  
  Merge in changes to forwarding html files in doc/html.
........
  r40717 | danieljames | 2007-11-03 03:18:52 -0700 (Sat, 03 Nov 2007) | 2 lines
  
  Add titles to redirect pages so that they will validate.
........
  r40718 | danieljames | 2007-11-03 03:32:35 -0700 (Sat, 03 Nov 2007) | 9 lines
  
  Attribute copyright to Douglas Gregor.
  
  The copyright in these files was attributed to William Kempf, but the revision
  history shows that he has never touched them and the original file that they
  were based on (threads.html) was created by Douglas Gregor.
  
  The copyright was actually added by Hartmut Kaiser, who was adding the
  copyright to all the Boost.Thread files and included this one.
........
  r40719 | johnmaddock | 2007-11-03 05:36:55 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Hopefully, take care of the remaining Tru64 failures: adjust >= test to > in some of the tests, and fix one expected error level for the incomplete beta function.
........
  r40720 | johnmaddock | 2007-11-03 05:43:41 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Try again to fix Darwin failure: the wrong error limit is currently being found.
........
  r40725 | johnmaddock | 2007-11-03 10:05:11 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Need stdarg.h to use vsnprintf as well as stdio.h
........
  r40726 | johnmaddock | 2007-11-03 11:30:07 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Beginning to add Math Library markup.
........
  r40727 | johnmaddock | 2007-11-03 11:32:54 -0700 (Sat, 03 Nov 2007) | 3 lines
  
  Added workaround for Sunpro not compiling the traits classes.
  Added workaround for platforms where numeric_limits<>::denorm_min() does not return a denorm!
  Updated Solaris error rates.
........
  r40728 | pdimov | 2007-11-03 13:55:22 -0700 (Sat, 03 Nov 2007) | 1 line
  
  BOOST_VERIFY added.
........
  r40730 | anthonyw | 2007-11-03 15:00:12 -0700 (Sat, 03 Nov 2007) | 1 line
  
  added missing include
........
  r40731 | pdimov | 2007-11-03 15:47:17 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Added a sentence with a brief explanation of the intended uses of BOOST_VERIFY.
........
  r40733 | djowel | 2007-11-03 16:42:06 -0700 (Sat, 03 Nov 2007) | 1 line
  
  fixed [cpp] to [c++]
........
  r40734 | djowel | 2007-11-03 17:12:29 -0700 (Sat, 03 Nov 2007) | 1 line
  
  tutorial update
........
  r40735 | agurtovoy | 2007-11-03 18:34:39 -0700 (Sat, 03 Nov 2007) | 1 line
  
  explicit-failures-markup.xml: partially reverting change #39788 (see http://article.gmane.org/gmane.comp.lib.boost.testing/5254)
........
  r40736 | johnmaddock | 2007-11-04 04:01:16 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Fix path to test case.
........
  r40737 | danmarsden | 2007-11-04 07:26:51 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Basic sequence and iterator fascade docs
........
  r40738 | bemandawes | 2007-11-04 07:32:03 -0800 (Sun, 04 Nov 2007) | 1 line
  
  glibc++ may append unknown error value, so only test first part of string
........
  r40739 | bemandawes | 2007-11-04 07:48:31 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Try to bring the required toolsets more in sync with what testers are actually running. Sort required toolsets.
........
  r40742 | speedsnail | 2007-11-04 09:17:01 -0800 (Sun, 04 Nov 2007) | 3 lines
  
  Get rid of "unsused variable" warnings by making use of BOOST_VERIFY.
  This changeset is for pthread only.
........
  r40744 | bemandawes | 2007-11-04 09:18:53 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Workaround MingW doesn't supply GetUserDefaultUILanguage
........
  r40749 | rwgk | 2007-11-04 10:08:28 -0800 (Sun, 04 Nov 2007) | 1 line
  
  reinterpret_cast -> const_cast; commented out dead code removed
........
  r40751 | danieljames | 2007-11-04 11:09:56 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Remove borland_cpp.html as it has been added to the new site.
........
  r40753 | danieljames | 2007-11-04 11:29:41 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Remove the submission process documentation as it's up to date in the new site.
........
  r40758 | danieljames | 2007-11-04 13:07:02 -0800 (Sun, 04 Nov 2007) | 3 lines
  
  Delete int_const_guidlines from trunk, as it's been added to the beta site.
  Fixes: #1356.
........
  r40759 | chris_kohlhoff | 2007-11-04 13:25:49 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Some changes to enable support for WinCE.
........
  r40762 | eric_niebler | 2007-11-04 14:53:27 -0800 (Sun, 04 Nov 2007) | 1 line
  
  remove dead proto v1 code
........
  r40763 | eric_niebler | 2007-11-04 15:53:13 -0800 (Sun, 04 Nov 2007) | 1 line
  
  various fixes and missing includes, from Jens Seidel
........
  r40764 | eric_niebler | 2007-11-04 15:58:44 -0800 (Sun, 04 Nov 2007) | 1 line
  
  change header include order
........
  r40765 | djowel | 2007-11-04 17:13:11 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Fixed Ticket #1328 (http://svn.boost.org/trac/boost/ticket/1328)
........
  r40766 | djowel | 2007-11-04 18:10:42 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Workarounds for Fusion on IBM xlc
........
  r40767 | bemandawes | 2007-11-04 18:34:04 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Add copyright and license
........
  r40768 | garcia | 2007-11-04 19:13:15 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  multi_array doesn't work under Borland 5.9.
........
  r40769 | dave | 2007-11-04 19:54:19 -0800 (Sun, 04 Nov 2007) | 9 lines
  
  
  Updated Concept Check library documentation.
  
  Changed BOOST_CONCEPT_WHERE to BOOST_CONCEPT_REQUIRES to be more
  consistent with the current C++0x proposal, which now uses a
  "requires" keyword in lieu of "where."
  
  Factored GCC workarounds into the BOOST_CONCEPT_USAGE macro.
........
  r40770 | dave | 2007-11-04 20:43:31 -0800 (Sun, 04 Nov 2007) | 7 lines
  
  
  Moved boost/concept/where.hpp to boost/concept/requires.hpp
  
  Updated reference.htm to include BOOST_CONCEPT_REQUIRES
  
  Fixed a copyright notice.
........
  r40771 | johnmaddock | 2007-11-05 01:33:31 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Still trying to get Mac OS error rates correct...
........
  r40774 | anthonyw | 2007-11-05 02:15:24 -0800 (Mon, 05 Nov 2007) | 1 line
  
  threadapi is a composite feature again
........
  r40779 | chris_kohlhoff | 2007-11-05 03:52:52 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Don't set errno when building for Windows targets. Should fix WinCE build.
........
  r40780 | johnmaddock | 2007-11-05 04:07:47 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Disabled long double support for Intel on Linux prior to version 10.
........
  r40781 | johnmaddock | 2007-11-05 04:08:39 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Changed test so that input values are exact binary values to fix failure at float precision.
........
  r40782 | bemandawes | 2007-11-05 04:36:41 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add message display to illuminate why aCC fails Unknown error test
........
  r40783 | chris_kohlhoff | 2007-11-05 04:38:39 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Add checks for expected failures on Windows CE.
........
  r40785 | nesotto | 2007-11-05 05:54:23 -0800 (Mon, 05 Nov 2007) | 1 line
  
  added lost changes from 1.34 branch
........
  r40787 | anthonyw | 2007-11-05 06:16:21 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Use pthread_equal for comparing pthread_t IDs; use BOOST_VERIFY instead of BOOST_ASSERT in many places in order to avoid unused variable warnings
........
  r40789 | djowel | 2007-11-05 07:13:58 -0800 (Mon, 05 Nov 2007) | 1 line
  
  fusion markups
........
  r40790 | speedsnail | 2007-11-05 08:12:49 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Usage requirements added.
........
  r40791 | speedsnail | 2007-11-05 08:22:17 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Cosmetic change to please gcc.
........
  r40792 | anthonyw | 2007-11-05 08:47:25 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Use BOOST_VERIFY instead of BOOST_ASSERT in many places in order to avoid unused variable warnings
........
  r40793 | eric_niebler | 2007-11-05 09:12:50 -0800 (Mon, 05 Nov 2007) | 1 line
  
  markup foreach failures on sun-5.9
........
  r40794 | t_schwinger | 2007-11-05 09:15:04 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - nonstandard calling conventions disabled by default
  - automatic fallback configuration
........
  r40795 | t_schwinger | 2007-11-05 09:16:30 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  removes unportable 'chdir'
........
  r40796 | t_schwinger | 2007-11-05 09:17:57 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  just a touch
........
  r40797 | t_schwinger | 2007-11-05 09:19:23 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds test case for pointer to data member type
........
  r40798 | t_schwinger | 2007-11-05 09:20:44 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - nonstandard calling conventions need to be enabled now
  - using #ifdef ... #error to detect whether test makes sense for a particular compiler
........
  r40799 | t_schwinger | 2007-11-05 09:23:57 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds navigation icons
........
  r40800 | t_schwinger | 2007-11-05 09:24:58 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  integrates forgotten changes
........
  r40801 | t_schwinger | 2007-11-05 09:25:26 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  updates html
........
  r40802 | hljin | 2007-11-05 10:33:19 -0800 (Mon, 05 Nov 2007) | 1 line
  
  GIL: added documentation links and maintainer info into libs/libraries.htm and libs/maintainers.txt
........
  r40803 | igaztanaga | 2007-11-05 10:46:38 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Marked sun5.9 and Borland 5.9 for Interprocess and Intrusive as unusable
........
  r40804 | hljin | 2007-11-05 11:04:08 -0800 (Mon, 05 Nov 2007) | 1 line
  
  GIL: minor cumulative fixes
........
  r40805 | t_schwinger | 2007-11-05 12:00:43 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds redirect to documentation
........
  r40806 | t_schwinger | 2007-11-05 12:01:33 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - adds FunctionTypes
  - adds myself to all occurences of the Fusion authors
........
  r40807 | eric_niebler | 2007-11-05 12:28:51 -0800 (Mon, 05 Nov 2007) | 1 line
  
  doc tweaks
........
  r40808 | dgregor | 2007-11-05 13:16:26 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add MPI library
........
  r40809 | dgregor | 2007-11-05 13:20:23 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add copyright, 1.34.1 history
........
  r40810 | nasonov | 2007-11-05 13:20:35 -0800 (Mon, 05 Nov 2007) | 1 line
  
  lexical_cast_loopback_test
........
  r40811 | dgregor | 2007-11-05 13:22:29 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Merge lots of copyrights
........
  r40812 | dgregor | 2007-11-05 13:25:10 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Removed ancient BGL-Python code
........
  r40813 | dgregor | 2007-11-05 13:43:24 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Merge in Boost.Graph changes from RC_1_34_0 branch
........


[SVN r40849]
2007-11-06 19:12:30 +00:00
35cf3d6eb3 development version of proto for new-style transforms
[SVN r38539]
2007-08-08 21:34:10 +00:00
156 changed files with 7397 additions and 12885 deletions

View File

@ -1,36 +0,0 @@
# Use, modification, and distribution are
# subject to the Boost Software License, Version 1.0. (See accompanying
# file LICENSE.txt)
#
# Copyright Rene Rivera 2020.
# For Drone CI we use the Starlark scripting language to reduce duplication.
# As the yaml syntax for Drone CI is rather limited.
#
#
globalenv={}
linuxglobalimage="cppalliance/droneubuntu1604:1"
windowsglobalimage="cppalliance/dronevs2019"
def main(ctx):
return [
linux_cxx("TOOLSET=gcc COMPILER=g++ CXXSTD=03,11 Job 0", "g++", packages="", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': 'b6589fc6ab'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11 Job 1", "g++-4.7", packages="g++-4.7", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-4.7', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': '356a192b79'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11 Job 2", "g++-4.8", packages="g++-4.8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-4.8', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': 'da4b9237ba'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11 Job 3", "g++-4.9", packages="g++-4.9", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-4.9', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': '77de68daec'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z Job 4", "g++-5", packages="g++-5", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-5', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': '1b64538924'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z Job 5", "g++-6", packages="g++-6", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-6', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'ac3478d69a'}, globalenv=globalenv),
linux_cxx("TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17 Job 6", "g++-7", packages="g++-7", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-7', 'CXXSTD': '03,11,14,17', 'DRONE_JOB_UUID': 'c1dfd96eea'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++ CXXSTD=03,11 Job 7", "clang++", packages="", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': '902ba3cda1'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03, Job 8", "clang++-3.5", packages="clang-3.5 libstdc++-4.9-dev", llvm_os="precise", llvm_ver="3.5", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-3.5', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'fe5dbbcea5'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03, Job 9", "clang++-3.6", packages="clang-3.6", llvm_os="precise", llvm_ver="3.6", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-3.6', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': '0ade7c2cf9'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03, Job 10", "clang++-3.7", packages="clang-3.7", llvm_os="precise", llvm_ver="3.7", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-3.7', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'b1d5781111'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03, Job 11", "clang++-3.8", packages="clang-3.8 libstdc++-4.9-dev", llvm_os="precise", llvm_ver="3.8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-3.8', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': '17ba079149'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03, Job 12", "clang++-3.9", packages="clang-3.9 libstdc++-4.9-dev", llvm_os="precise", llvm_ver="3.9", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-3.9', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': '7b52009b64'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03, Job 13", "clang++-4.0", packages="clang-4.0", llvm_os="trusty", llvm_ver="4.0", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-4.0', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'bd307a3ec3'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03, Job 14", "clang++-5.0", packages="clang-5.0", llvm_os="trusty", llvm_ver="5.0", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-5.0', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'fa35e19212'}, globalenv=globalenv),
osx_cxx("TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,1 Job 15", "clang++", packages="", buildtype="boost", buildscript="drone", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'f1abd67035'}, globalenv=globalenv),
]
# from https://github.com/boostorg/boost-ci
load("@boost_ci//ci/drone/:functions.star", "linux_cxx","windows_cxx","osx_cxx","freebsd_cxx")

View File

@ -1,37 +0,0 @@
#!/bin/bash
# Copyright 2020 Rene Rivera, Sam Darwin
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.txt or copy at http://boost.org/LICENSE_1_0.txt)
set -e
export TRAVIS_BUILD_DIR=$(pwd)
export DRONE_BUILD_DIR=$(pwd)
export TRAVIS_BRANCH=$DRONE_BRANCH
export VCS_COMMIT_ID=$DRONE_COMMIT
export GIT_COMMIT=$DRONE_COMMIT
export REPO_NAME=$DRONE_REPO
export PATH=~/.local/bin:/usr/local/bin:$PATH
if [ "$DRONE_JOB_BUILDTYPE" == "boost" ]; then
echo '==================================> INSTALL'
BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
git submodule update --init tools/build
git submodule update --init libs/config
git submodule update --init tools/boostdep
cp -r $TRAVIS_BUILD_DIR/* libs/optional
python tools/boostdep/depinst/depinst.py optional
./bootstrap.sh
./b2 headers
echo '==================================> SCRIPT'
echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
./b2 libs/optional/test toolset=$TOOLSET cxxstd=$CXXSTD
fi

View File

@ -1,614 +0,0 @@
name: CI
on:
pull_request:
push:
branches:
- master
- develop
- feature/**
env:
UBSAN_OPTIONS: print_stacktrace=1
jobs:
posix:
strategy:
fail-fast: false
matrix:
include:
- toolset: gcc-4.8
cxxstd: "03,11"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-4.8-multilib
address-model: 32,64
- toolset: gcc-5
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-5-multilib
address-model: 32,64
- toolset: gcc-6
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-6-multilib
address-model: 32,64
- toolset: gcc-7
cxxstd: "03,11,14,17"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-7-multilib
address-model: 32,64
- toolset: gcc-8
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-8-multilib
address-model: 32,64
- toolset: gcc-9
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-9-multilib
address-model: 32,64
- toolset: gcc-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-10-multilib
address-model: 32,64
- toolset: gcc-11
cxxstd: "03,11,14,17,20"
os: ubuntu-22.04
install: g++-11-multilib
address-model: 32,64
- toolset: gcc-12
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: g++-12-multilib
address-model: 32,64
- toolset: gcc-13
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
install: g++-13-multilib
address-model: 32,64
- toolset: clang
compiler: clang++-3.9
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-3.9
- toolset: clang
compiler: clang++-4.0
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-4.0
- toolset: clang
compiler: clang++-5.0
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-5.0
- toolset: clang
compiler: clang++-6.0
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-6.0
- toolset: clang
compiler: clang++-7
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-7
- toolset: clang
compiler: clang++-8
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-8
- toolset: clang
compiler: clang++-9
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: clang-9
- toolset: clang
compiler: clang++-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-11
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-12
cxxstd: "03,11,14,17,20"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-13
cxxstd: "03,11,14,17,20,2b"
container: ubuntu:22.04
os: ubuntu-latest
install: clang-13
- toolset: clang
compiler: clang++-14
cxxstd: "03,11,14,17,20,2b"
container: ubuntu:22.04
os: ubuntu-latest
install: clang-14
- toolset: clang
compiler: clang++-15
cxxstd: "03,11,14,17,20,2b"
container: ubuntu:22.04
os: ubuntu-latest
install: clang-15
- toolset: clang
compiler: clang++-16
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
install: clang-16
- toolset: clang
compiler: clang++-17
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
install: clang-17
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-13
runs-on: ${{matrix.os}}
container:
image: ${{matrix.container}}
volumes:
- /node20217:/node20217:rw,rshared
- ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }}
defaults:
run:
shell: bash
steps:
- name: Setup container environment
if: matrix.container
run: |
apt-get update
apt-get -y install sudo python3 git g++ curl
if [[ "${{matrix.container}}" == "ubuntu:1"* ]]; then
# Node 20 doesn't work with Ubuntu 16/18 glibc: https://github.com/actions/checkout/issues/1590
curl -sL https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217
fi
- uses: actions/checkout@v4
- name: Install packages
if: matrix.install
run: |
sudo apt-get update
sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
./bootstrap.sh
./b2 -d0 headers
- name: Create user-config.jam
if: matrix.compiler
run: |
echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam
- name: Run tests
run: |
cd ../boost-root
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} variant=debug,release
windows:
strategy:
fail-fast: false
matrix:
include:
- toolset: msvc-14.0
cxxstd: 14,latest
addrmd: 32,64
os: windows-2019
- toolset: msvc-14.2
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2019
- toolset: msvc-14.3
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2022
- toolset: clang-win
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2022
- toolset: gcc
cxxstd: "03,11,14,17,2a"
addrmd: 64
os: windows-2019
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
cmd /c bootstrap
b2 -d0 headers
- name: Run tests
shell: cmd
run: |
cd ../boost-root
b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release embed-manifest-via=linker
posix-cmake-subdir:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Use library with add_subdirectory
run: |
cd ../boost-root/libs/$LIBRARY/test/cmake_subdir_test
mkdir __build__ && cd __build__
cmake ..
cmake --build .
ctest --output-on-failure --no-tests=error
posix-cmake-install:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Configure
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DCMAKE_INSTALL_PREFIX=~/.local ..
- name: Install
run: |
cd ../boost-root/__build__
cmake --build . --target install
- name: Use the installed library
run: |
cd ../boost-root/libs/$LIBRARY/test/cmake_install_test && mkdir __build__ && cd __build__
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
cmake --build .
ctest --output-on-failure --no-tests=error
posix-cmake-test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Configure
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DBUILD_TESTING=ON ..
- name: Build tests
run: |
cd ../boost-root/__build__
cmake --build . --target tests
- name: Run tests
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error
windows-cmake-subdir:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Use library with add_subdirectory (Debug)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test
mkdir __build__ && cd __build__
cmake ..
cmake --build . --config Debug
ctest --output-on-failure --no-tests=error -C Debug
- name: Use library with add_subdirectory (Release)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test/__build__
cmake --build . --config Release
ctest --output-on-failure --no-tests=error -C Release
windows-cmake-install:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Configure
shell: cmd
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix ..
- name: Install (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target install --config Debug
- name: Install (Release)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target install --config Release
- name: Use the installed library (Debug)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test && mkdir __build__ && cd __build__
cmake -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix ..
cmake --build . --config Debug
ctest --output-on-failure --no-tests=error -C Debug
- name: Use the installed library (Release)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test/__build__
cmake --build . --config Release
ctest --output-on-failure --no-tests=error -C Release
windows-cmake-test:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Configure
shell: cmd
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DBUILD_TESTING=ON ..
- name: Build tests (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target tests --config Debug
- name: Run tests (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error -C Debug
- name: Build tests (Release)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target tests --config Release
- name: Run tests (Release)
shell: cmd
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error -C Release

View File

@ -1,201 +0,0 @@
# Copyright 2016, 2017 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
language: cpp
sudo: false
python: "2.7"
branches:
only:
- master
- develop
- /feature\/.*/
env:
matrix:
- BOGUS_JOB=true
matrix:
exclude:
- env: BOGUS_JOB=true
include:
- os: linux
compiler: g++
env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11
- os: linux
compiler: g++-4.7
env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11
addons:
apt:
packages:
- g++-4.7
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-4.8
env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11
addons:
apt:
packages:
- g++-4.8
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-4.9
env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11
addons:
apt:
packages:
- g++-4.9
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-5
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- g++-5
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-6
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- g++-6
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: trusty
compiler: g++-7
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17
addons:
apt:
packages:
- g++-7
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: clang++
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
- os: linux
compiler: clang++-3.5
env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.5
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.5
- os: linux
compiler: clang++-3.6
env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.6
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
- os: linux
compiler: clang++-3.7
env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.7
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7
- os: linux
compiler: clang++-3.8
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.8
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
- os: linux
compiler: clang++-3.9
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.9
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.9
- os: linux
dist: trusty
compiler: clang++-4.0
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-4.0
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
- os: linux
dist: trusty
compiler: clang++-5.0
env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-5.0
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
- os: osx
compiler: clang++
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
install:
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
- cd ..
- git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
- cd boost-root
- git submodule update --init tools/build
- git submodule update --init libs/config
- git submodule update --init tools/boostdep
- cp -r $TRAVIS_BUILD_DIR/* libs/optional
- python tools/boostdep/depinst/depinst.py optional
- ./bootstrap.sh
- ./b2 headers
script:
- |-
echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
- ./b2 libs/optional/test toolset=$TOOLSET cxxstd=$CXXSTD
notifications:
email:
on_success: always

View File

@ -1,33 +0,0 @@
# Generated by `boostdep --cmake optional`
# Copyright 2020, 2021 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.20)
project(boost_optional VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
add_library(boost_optional INTERFACE)
add_library(Boost::optional ALIAS boost_optional)
target_include_directories(boost_optional INTERFACE include)
if(NOT CMAKE_VERSION VERSION_LESS "3.19")
file(GLOB_RECURSE headers include/*.hpp)
target_sources(boost_optional PRIVATE ${headers})
endif()
target_link_libraries(boost_optional
INTERFACE
Boost::assert
Boost::config
Boost::core
Boost::throw_exception
Boost::type_traits
)
target_compile_features(boost_optional INTERFACE cxx_std_11)
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()

View File

@ -1,15 +0,0 @@
optional
========
A library for representing optional (nullable) objects in C++.
```cpp
optional<int> readInt(); // this function may return either an int or a not-an-int
if (optional<int> oi = readInt()) // did I get a real int
cout << "my int is: " << *oi; // use my int
else
cout << "I have no int";
```
For more information refer to the documentation provided with this library.

View File

@ -1,23 +0,0 @@
# Copyright René Ferdinand Rivera Morell 2023-2024
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
require-b2 5.2 ;
constant boost_dependencies :
/boost/assert//boost_assert
/boost/config//boost_config
/boost/core//boost_core
/boost/throw_exception//boost_throw_exception
/boost/type_traits//boost_type_traits ;
project /boost/optional ;
explicit
[ alias boost_optional : : : : <library>$(boost_dependencies) <include>include ]
[ alias all : boost_optional test ]
;
call-if : boost-library optional
;

View File

@ -1,113 +0,0 @@
[library Boost.Optional
[quickbook 1.4]
[authors [Cacciola Carballal, Fernando Luis]]
[copyright 2003-2007 Fernando Luis Cacciola Carballal]
[copyright 2014-2024 Andrzej Krzemie&#324;ski]
[category miscellaneous]
[id optional]
[dirname optional]
[purpose
Discriminated-union wrapper for optional values
]
[source-mode c++]
[license
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
[@http://www.boost.org/LICENSE_1_0.txt])
]
]
[/ Macros will be used for links so we have a central place to change them ]
[/ Cited Boost resources ]
[def __BOOST_VARIANT__ [@../../../variant/index.html Boost.Variant]]
[def __BOOST_TUPLE__ [@../../../tuple/index.html Boost.Tuple]]
[def __BOOST_TRIBOOL__ [@../../../../doc/html/tribool.html boost::tribool]]
[def __OPTIONAL_POINTEE__ [@../../../utility/OptionalPointee.html `OptionalPointee`]]
[def __COPY_CONSTRUCTIBLE__ [@../../../utility/CopyConstructible.html `CopyConstructible`]]
[def __MOVE_CONSTRUCTIBLE__ `MoveConstructible`]
[def __FUNCTION_EQUAL_POINTEES__ [@../../../utility/OptionalPointee.html#equal `equal_pointees()`]]
[def __FUNCTION_LESS_POINTEES__ [@../../../utility/OptionalPointee.html#less `less_pointees()`]]
[def __IN_PLACE_FACTORY_HPP__ [@../../../../boost/utility/in_place_factory.hpp in_place_factory.hpp]]
[def __TYPED_IN_PLACE_FACTORY_HPP__ [@../../../../boost/utility/typed_in_place_factory.hpp typed_in_place_factory.hpp]]
[/ Other web resources ]
[def __HASKELL__ [@http://www.haskell.org/ Haskell]]
[def __STD_DEFAULT_CONSTRUCTIBLE__ [@https://en.cppreference.com/w/cpp/named_req/DefaultConstructible `DefaultConstructible`]]
[def __STD_LESS_THAN_COMPARABLE__ [@https://en.cppreference.com/w/cpp/named_req/LessThanComparable `LessThanComparable`]]
[def __STD_EQUALITY_COMPARABLE__ [@https://en.cppreference.com/w/cpp/named_req/EqualityComparable `EqualityComparable`]]
[def __SGI_GENERATOR__ [@http://www.rrsd.com/software_development/stl/stl/Generator.html `Generator`]]
[/ Icons ]
[def __SPACE__ [$images/space.png]]
[def __GO_TO__ [$images/R.png]]
[/ Common terms ]
[def __UB__ [@https://en.cppreference.com/w/cpp/language/ub ['undefined behavior]]]
[section Introduction]
Class template `optional` is a wrapper for representing 'optional' (or 'nullable')
objects who may not (yet) contain a valid value. Optional objects offer full value semantics;
they are good for passing by value and usage inside STL containers. This is a header-only C++11 library.
[heading Problem]
Suppose we want to read a parameter from a config file which represents some integral value, let's call it `"MaxValue"`. It is possible that this parameter is not specified; such situation is no error. It is valid to not specify the parameter and in that case the program is supposed to behave slightly differently. Also, suppose that any possible value of type `int` is a valid value for `"MaxValue"`, so we cannot just use `-1` to represent the absence of the parameter in the config file.
[heading Solution]
This is how you solve it with `boost::optional`:
#include <boost/optional.hpp>
boost::optional<int> getConfigParam(std::string name); // return either an int or a `not-an-int`
int main()
{
if (boost::optional<int> oi = getConfigParam("MaxValue")) // did I get a real int?
runWithMax(*oi); // use my int
else
runWithNoMax();
}
[endsect]
[include 01_quick_start.qbk]
[section:design Design Overview and Rationale]
[include 11_development.qbk]
[include 12_relational_operators.qbk]
[include 13_convenience.qbk]
[include 15_io.qbk]
[include 16_optional_references.qbk]
[include 17_in_place_factories.qbk]
[include 18_gotchas.qbk]
[include 19_exception_safety.qbk]
[include 1A_type_requirements.qbk]
[endsect]
[section:reference Reference]
[include 21_ref_none.qbk]
[include 22_ref_bad_optional_access.qbk]
[include 23_ref_optional_io.qbk]
[include 24_ref_optional_fwd.qbk]
[section Header <boost/optional/optional.hpp>]
[include 27_ref_optional_synopsis.qbk]
[include 28_ref_optional_semantics.qbk]
[endsect]
[include 29_ref_optional_convenience.qbk]
[endsect]
[section:advice Advice]
[include 31_when_to_use.qbk]
[include 32_on_performance.qbk]
[endsect]
[include 90_dependencies.qbk]
[include 91_comparison_with_std.qbk]
[include 92_relnotes.qbk]
[include 93_acknowledgments.qbk]

View File

@ -1,195 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2014 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Quick Overview]
[section Optional return values]
Let's write and use a converter function that converts a `std::string` to an `int`.
It is possible that for a given string (e.g. `"cat"`) there exists no value of type
`int` capable of representing the conversion result. We do not consider such
situation an error. We expect that the converter can be used only to check if
the conversion is possible. A natural signature for this function can be:
#include <boost/optional.hpp>
boost::optional<int> convert(const std::string& text);
All necessary functionality can be included with one header `<boost/optional.hpp>`.
The above function signature means that the function can either return a value
of type `int` or a flag indicating that no value of `int` is available.
This does not indicate an error. It is like one additional value of `int`.
This is how we can use our function:
const std::string& text = /*... */;
boost::optional<int> oi = convert(text); // move-construct
if (oi) // contextual conversion to bool
int i = *oi; // operator*
In order to test if `optional` contains a value, we use the contextual conversion to type `bool`. Because of this we can combine the initialization of the optional object and the test into one instruction:
if (boost::optional<int> oi = convert(text))
int i = *oi;
We extract the contained value with `operator*` (and with `operator->` where it makes sense). An attempt to extract the contained value of an uninitialized optional object is an ['undefined behaviour] (UB). This implementation guards the call with `BOOST_ASSERT`. Therefore you should be sure that the contained value is there before extracting. For instance, the following code is reasonably UB-safe:
int i = *convert("100");
This is because we know that string value `"100"` converts to a valid value of `int`. If you do not like this potential UB, you can use an alternative way of extracting the contained value:
try {
int j = convert(text).value();
}
catch (const boost::bad_optional_access&) {
// deal with it
}
This version throws an exception upon an attempt to access a nonexistent contained value. If your way of dealing with the missing value is to use some default, like `0`, there exists a yet another alternative:
int k = convert(text).value_or(0);
This uses the `atoi`-like approach to conversions: if `text` does not represent an integral number just return `0`. Finally, you can provide a callback to be called when trying to access the contained value fails:
int fallback_to_default()
{
cerr << "could not convert; using -1 instead" << endl;
return -1;
}
int l = convert(text).value_or_eval(fallback_to_default);
This will call the provided callback and return whatever the callback returns. The callback can have side effects: they will only be observed when the optional object does not contain a value.
Now, let's consider how function `convert` can be implemented.
boost::optional<int> convert(const std::string& text)
{
std::stringstream s(text);
int i;
if ((s >> i) && s.get() == std::char_traits<char>::eof())
return i;
else
return boost::none;
}
Observe the two return statements. `return i` uses the converting constructor that can create `optional<T>` from `T`. Thus constructed optional object is initialized and its value is a copy of `i`. The other return statement uses another converting constructor from a special tag `boost::none`. It is used to indicate that we want to create an uninitialized optional object.
[endsect]
[section Optional automatic variables]
We could write function `convert` in a slightly different manner, so that it has a single `return`-statement:
boost::optional<int> convert(const std::string& text)
{
boost::optional<int> ans;
std::stringstream s(text);
int i;
if ((s >> i) && s.get() == std::char_traits<char>::eof())
ans = i;
return ans;
}
The default constructor of `optional` creates an uninitialized optional object. Unlike with `int`s you cannot have an `optional<int>` in an indeterminate state. Its state is always well defined. Instruction `ans = i` initializes the optional object. It uses the 'mixed' assignment from `int`. In general, for `optional<T>`, when an assignment from `T` is invoked, it can do two things. If the optional object is not initialized (our case here), it initializes the contained value using `T`'s copy constructor. If the optional object is already initialized, it assigns the new value to it using `T`'s copy assignment.
[endsect]
[section Optional data members]
Suppose we want to implement a ['lazy load] optimization. This is because we do not want to perform an expensive initialization of our `Resource` until (if at all) it is really used. We can do it this way:
class Widget
{
mutable boost::optional<const Resource> resource_;
public:
Widget() {}
const Resource& getResource() const // not thread-safe
{
if (resource_ == boost::none)
resource_.emplace("resource", "arguments");
return *resource_;
}
};
`optional`'s default constructor creates an uninitialized optional. No call to `Resource`'s default constructor is attempted. `Resource` doesn't have to be __STD_DEFAULT_CONSTRUCTIBLE__. In function `getResource` we first check if `resource_` is initialized. This time we do not use the contextual conversion to `bool`, but a comparison with `boost::none`. These two ways are equivalent. Function `emplace` initializes the optional in-place by perfect-forwarding the arguments to the constructor of `Resource`. No copy- or move-construction is involved here. `Resource` doesn't even have to be `MoveConstructible`.
[note Function `emplace` is only available on compilers that support rvalue references and variadic templates. If your compiler does not support these features and you still need to avoid any move-constructions, use [link boost_optional.design.in_place_factories In-Place Factories].]
[endsect]
[section Storage in containers]
Suppose you want to ask users to choose some number (an `int`). One of the valid responses is to choose nothing, which is represented by an uninitialized `optional<int>`. You want to make a histogram showing how many times each choice was made. You can use an `std::map`:
std::map<boost::optional<int>, int> choices;
for (int i = 0; i < LIMIT; ++i) {
boost::optional<int> choice = readChoice();
++choices[choice];
}
This works because `optional<T>` is __STD_LESS_THAN_COMPARABLE__ whenever `T` is __STD_LESS_THAN_COMPARABLE__.
In this case the state of being uninitialized is treated as a yet another value of `T`,
which is compared less than any value of `T`.
`optional<T>` can also be stored as a key in `std::unordered_map` and `std::unordered_set`
as it provides specializations for `std::hash`.
[endsect]
[section Monadic interface]
The monadic interface of `optional` allows the application of functions
to optional values without resorting to the usage of explicit `if`-statements.
Function `map` takes a function mapping type `T` onto type `U` and maps an `optional<T>`
onto an `optional<U>` using the provided function.
int length(const string& s){ return s.size(); };
optional<string> null{}, thin{""}, word{"word"};
assert (null.map(length) == none);
assert (thin.map(length) == 0);
assert (word.map(length) == 4);
Function `flat_map` is similar, but it requires the function to return an
`optional<V>` for some type `V`. This `optional<V>` becomes the return type of
`flat_map`.
optional<char> first_char(const string& s) {
if (s.empty()) return none;
else return s[0];
};
optional<string> null{}, thin{""}, word{"word"};
assert (null.flat_map(first_char) == none);
assert (thin.flat_map(first_char) == none);
assert (word.flat_map(first_char) == 'w');
These functions can be combined in one expression reflecting a chain of computations:
auto get_contents(path p) -> optional<string>;
auto trim(string) -> string;
auto length(string) -> int;
auto trimmed_size_of(optional<path> p) -> int
{
return p.flat_map(get_contents)
.map(trim)
.map(length)
.value_or(0);
}
[endsect]
[endsect]

View File

@ -1,130 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2024 andrzej Krzemieński
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Design Goals]
In C++ you can create an automatic object of a scalar type, and manipulate it,
without assigning it the initial value.
{
int i; // indeterminate value
populate(&i);
cout << i;
}
Such an object is said to have ['indeterminate value]. If you subsequently
assign a proper value to the object, all is fine; but if the program tries to
read an indeterminate value, this is ['undefined behavior'], and since C++26
this is ['erroneous behavior].
In any case, the program is now likely to do something else than what the
programmer intended. In case you have some object `i`, and you do not know if it
has an indeterminate value, or a normal, intended, value, there is no way to
check it, because the checking would require reading the value.
This is one of the primary problems that `optional` was intended to address: so
that you may have a type that knows whether it has been assigned a proper value,
and it can tell you that if requested.
In the case of type `int` the internal representation of such a class could be:
class OptionalInt
{
bool _has_value = false;
int _value;
};
In the general case, the internal representation is something equivalent to:
template <typename T>
class Optional
{
bool _has_value = false;
alignas(T) char _value [sizeof(T)];
};
Next, because we need to pass around these "optional" `int`s as normal `int`s,
like returning them from functions, when copying, we need to copy `_has_value`,
which indicates whether we have the value or not, and, if we do have value, and
only then, to also copy `_value`.
This means that our type requires ['deep copy] semantics.
[note
This is a C++ equivalent of a
[@https://hackage.haskell.org/package/base-4.20.0.1/docs/Data-Maybe.html Maybe]
monad in [@http://www.haskell.org/ Haskell].
]
[endsect]
[section:iface Interface Design]
One part of the interface is for modifying and setting the initial state of
the object. It has to be able to say that
* we want to store a specific value of type `T`,
* we want to store no value.
The default constructor stores no value. Other than that, we require that
the assignment and construction from a `T` reflects the former, while assignment
and construction of a special ['tag] value `none` reflect the latter need.
optional<int> o1; // contains no value
optional<int> o2 = 2; // contains value 2
optional<int> o3 = none; // contains no value
o1 = 1; // assign value 1
o2 = none; // assign a no-value
o3 = {}; // assign a no-value
[heading Inspecting the State]
Inspecting the state of an optional object requires two steps:
* check if we have the value or not,
* if so, read the stored value.
This 'procedure' is characteristic of inspecting pointers in C++, therefore the
pointer-like syntax was chosen to represent this.
void inspect (optional<string> os)
{
if (os) { // contextual conversion to `bool`
read_string(*os); // `operator*` to access the stored value
read_int(os->size()); // `operator->` as shortcut for accessing members
}
}
Also, similarly to pointers, if you access the value when it is not there,
you trigger __UB__.
This library detects and reports it via
[@../../../assert/assert.html `BOOST_ASSERT()`]. This common property of
pointers and `optional<>` has been formalized into a concept __OPTIONAL_POINTEE__.
However, there is also the counter-intuitive part. All pointers embed ['shallow-copy]
semantics: when you copy a pointer, the pointed-to object stays at the same location
and you can access it via either of the pointers. This is unlike optional objects
where the represented value is copied along.
[caution
Optional objects are not pointers.
]
There is a similar difference in relational operations: they compare deeply for
`optional<>`, while they are shallow for pointers.
[note
When you need a deep relational operations that work uniformly for `optional<>`
and pointers in generic contexts, use functions
[@../../../utility/OptionalPointee.html#equal `equal_pointees()`] and
[@../../../utility/OptionalPointee.html#less `less_pointees()`].
]
[endsect]

View File

@ -1,37 +0,0 @@

[section Relational operators]
Type `optional<T>` is __STD_EQUALITY_COMPARABLE__ whenever `T` is __STD_EQUALITY_COMPARABLE__. Two optional objects containing a value compare in the same way as their contained values. The uninitialized state of `optional<T>` is treated as a distinct value, equal to itself, and unequal to any value of type `T`:
boost::optional<int> oN = boost::none;
boost::optional<int> o0 = 0;
boost::optional<int> o1 = 1;
assert(oN != o0);
assert(o1 != oN);
assert(o0 != o1);
assert(oN == oN);
assert(o0 == o0);
The converting constructor from `T` as well as from `boost::none` implies the existence and semantics of the mixed comparison between `T` and `optional<T>` as well as between `none_t` and `optional<T>`:
assert(oN != 0);
assert(o1 != boost::none);
assert(o0 != 1);
assert(oN == boost::none);
assert(o0 == 0);
This mixed comparison has a practical interpretation, which is occasionally useful:
boost::optional<int> choice = ask_user();
if (choice == 2)
start_procedure_2();
In the above example, the meaning of the comparison is 'user chose number 2'. If user chose nothing, he didn't choose number 2.
In case where `optional<T>` is compared to `none`, it is not required that `T` be __STD_EQUALITY_COMPARABLE__.
In a similar manner, type `optional<T>` is __STD_LESS_THAN_COMPARABLE__ whenever `T` is __STD_LESS_THAN_COMPARABLE__. The optional object containing no value is compared less than any value of `T`. To illustrate this, if the default ordering of `size_t` is {`0`, `1`, `2`, ...}, the default ordering of `optional<size_t>` is {`boost::none`, `0`, `1`, `2`, ...}. This order does not have a practical interpretation. The goal is to have any semantically correct default ordering in order for `optional<T>` to be usable in ordered associative containers (wherever `T` is usable).
Mixed relational operators are the only case where the contained value of an optional object can be inspected without the usage of value accessing function (`operator*`, `value`, `value_or`).
[endsect]

View File

@ -1,102 +0,0 @@

[section Convenience Conversions and Deductions]
Unlike `std::optional`, `boost::optional` does not offer a number of
"convenience" converting constructors, mixed relational operations and
deductions for class template parameters.
std::optional oi = 1; // OK
std:string_view sv = "hi";
std::optional<std::string> os = sv; // OK
os == sv; // OK
std::optional<std::string> osv;
std::optional<std::string> os2 = osv; // OK
os2 == osv; // OK
They are practical, and sometimes stem from the argument for consistency:
if `(optT && *optT == u)` works then `(optT == u)` should also work.
However, these intelligent convenience functions sometimes produce results
that are counter to the programmer intentions and produce silent bugs.
Consider a more complicated example:
Threshold th = /*...*/;
std::optional o = th;
assert (o);
In this code, can we expect that thus initialized `optional` contains a value?
The answer is: it depends on the type of `Threshold`. It can be defined as:
using Threshold = std::optional<int>;
And then the assertion will fire. This is because in this case the intelligence
decides that since we already have an optional, the additional wrapping into
a yet another optional is unnecessary.
If we explicitly specify the template type, the situation doesn't get less
complicated.
Threshold th;
std::optional<Threshold> o = th;
assert(o);
Can this assertion fire? Now we have two competing constructors:
template <typename U>
optional(U const&);
template <typename U>
optional(optional<U> const&);
Which one will get chosen? Actually, we are lucky, and it is going to be the
first one due to concept tricks. But let's try a different example:
Threshold th;
std::optional<Threshold> o = th;
assert(o);
assert(o == th);
Here, the first assertion passes, but the second one fires. This is because
there are two competing overloads of the comparison operator:
template <typename T, typename U>
bool operator==(optional<T> const&, U const&);
template <typename T, typename U>
bool operator==(optional<T> const&, optional<U> const&);
And this time there is no concept trickery, so the second overload is chosen,
and gives different results: we are comparing an optional object `th`, which does
not contain a value, with an optional object `o` which does contain a value.
This problem -- that the operations compile, but have runtime behavior counter
to programmer's intuition -- gains new significance with the introduction of
concepts to C++.
static_assert(std::equality_comparable_with<std::optional<Threshold>, Threshold>);
Concepts have both syntactic constraints and semantic constraints. Syntactic
constraints are statically checked by the compiler. For semantic constraints,
functions that use the concept trust the programmer that these constraints are
met, and if not, this is __UB__.
These are problems with `std::optional`. `boost::optional` doesn't have these
problems, because it does not offer the said convenience operations.
The design principle for `boost::optional` is not to offer functionality that
nicely deduces the programmer intentions in 95% of the cases, and in the remaining
5% renders effects counter to programmer expectations.
Instead, this library recommends using a more verbose syntax that works in 100%
of the cases:
Threshold th;
auto o = boost::make_potional(th); // *always* add a new layer of optionality
return boost::equal_pointees(o, th); // *always* unpack optionals for comparison
return o && *o == th; // *always* treat the right-hand side argument as value
[endsect]

View File

@ -1,37 +0,0 @@

[section IO operators]
It is possible to use `optional<T>` with IO streams, provided that `T` can be used with streams. IOStream operators are defined in a separate header.
``
#include <iostream>
#include <boost/optional/optional_io.hpp>
int main()
{
boost::optional<int> o1 = 1, oN = boost::none;
std::cout << o1;
std::cin >> oN;
}
``
The current implementation does not guarantee any particular output. What it guarantees is that if streaming out and then back in `T` gives the same value, then streaming out and then back in `optional<T>` will also give back the same result:
``
#include <cassert>
#include <sstream>
#include <boost/optional/optional_io.hpp>
int main()
{
boost::optional<int> o1 = 1, oN = boost::none;
boost::optional<int> x1, x2;
std::stringstream s;
s << o1 << oN;
s >> x1 >> x2;
assert (o1 == x1);
assert (oN == x2);
}
``
[endsect]

View File

@ -1,128 +0,0 @@

[section Optional references]
[section Overview]
This library allows the template parameter `T` to be of reference type:
`T&`, and to some extent, `T const&`.
However, since references are not real objects some restrictions apply and
some operations are not available in this case:
* Converting constructors
* Converting assignment
* InPlace construction
* InPlace assignment
* Value-access via pointer
Also, even though `optional<T&>` treats it wrapped pseudo-object much as
a real value, a true real reference is stored so aliasing will occur:
* Copies of `optional<T&>` will copy the references but all these references
will nonetheless refer to the same object.
* Value-access will actually provide access to the referenced object
rather than the reference itself.
[caution
On compilers that do not conform to Standard C++ rules of reference binding,
some operations on optional references are disabled in order to prevent subtle
bugs. For more details see
[link boost_optional.dependencies_and_portability.optional_reference_binding Dependencies and Portability section].
]
[heading Rvalue references]
Rvalue references and lvalue references to const have the ability in C++ to extend the life time of a temporary they bind to. Optional references do not have this capability, therefore to avoid surprising effects it is not possible to initialize an optional references from a temporary. Optional rvalue references are disabled altogether. Also, the initialization and assignment of an optional reference to const from rvalue reference is disabled.
const int& i = 1; // legal
optional<const int&> oi = 1; // illegal
[endsect]
[section Rebinding semantics for assignment of optional references]
If you assign to an ['uninitialized ] `optional<T&>` the effect is to bind (for
the first time) to the object. Clearly, there is no other choice.
int x = 1 ;
int& rx = x ;
optional<int&> ora ;
optional<int&> orb(x) ;
ora = orb ; // now 'ora' is bound to 'x' through 'rx'
*ora = 2 ; // Changes value of 'x' through 'ora'
assert(x==2);
If you assign to a bare C++ reference, the assignment is forwarded to the
referenced object; its value changes but the reference is never rebound.
int a = 1 ;
int& ra = a ;
int b = 2 ;
int& rb = b ;
ra = rb ; // Changes the value of 'a' to 'b'
assert(a==b);
b = 3 ;
assert(ra!=b); // 'ra' is not rebound to 'b'
Now, if you assign to an ['initialized ] `optional<T&>`, the effect is to
[*rebind] to the new object instead of assigning the referee. This is unlike
bare C++ references.
int a = 1 ;
int b = 2 ;
int& ra = a ;
int& rb = b ;
optional<int&> ora(ra) ;
optional<int&> orb(rb) ;
ora = orb ; // 'ora' is rebound to 'b'
*ora = 3 ; // Changes value of 'b' (not 'a')
assert(a==1);
assert(b==3);
[heading Rationale]
Rebinding semantics for the assignment of ['initialized ] `optional` references has
been chosen to provide [*consistency among initialization states] even at the
expense of lack of consistency with the semantics of bare C++ references.
It is true that `optional<U>` strives to behave as much as possible as `U`
does whenever it is initialized; but in the case when `U` is `T&`, doing so would
result in inconsistent behavior w.r.t to the lvalue initialization state.
Imagine `optional<T&>` forwarding assignment to the referenced object (thus
changing the referenced object value but not rebinding), and consider the
following code:
optional<int&> a = get();
int x = 1 ;
int& rx = x ;
optional<int&> b(rx);
a = b ;
What does the assignment do?
If `a` is ['uninitialized], the answer is clear: it binds to `x` (we now have
another reference to `x`).
But what if `a` is already ['initialized]? it would change the value of the
referenced object (whatever that is); which is inconsistent with the other
possible case.
If `optional<T&>` would assign just like `T&` does, you would never be able to
use Optional's assignment without explicitly handling the previous
initialization state unless your code is capable of functioning whether
after the assignment, `a` aliases the same object as `b` or not.
That is, you would have to discriminate in order to be consistent.
If in your code rebinding to another object is not an option, then it is very
likely that binding for the first time isn't either. In such case, assignment
to an ['uninitialized ] `optional<T&>` shall be prohibited. It is quite possible
that in such a scenario it is a precondition that the lvalue must be already
initialized. If it isn't, then binding for the first time is OK
while rebinding is not which is IMO very unlikely.
In such a scenario, you can assign the value itself directly, as in:
assert(!!opt);
*opt=value;
[endsect]
[endsect]

View File

@ -1,139 +0,0 @@

[section In-Place Factories]
One of the typical problems with wrappers and containers is that their
interfaces usually provide an operation to initialize or assign the
contained object as a copy of some other object. This not only requires the
underlying type to be __COPY_CONSTRUCTIBLE__, but also requires the existence of
a fully constructed object, often temporary, just to follow the copy from:
struct X
{
X ( int, std::string ) ;
} ;
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
} ;
void foo()
{
// Temporary object created.
W ( 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 only needs to supply the arguments to the
constructor to use in the wrapped object construction.
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
W ( int a0, std::string a1) : wrapped_(a0,a1) {}
} ;
void foo()
{
// Wrapped object constructed in-place
// No temporary created.
W (123,"hello") ;
}
A limitation of this method is that it doesn't scale well to wrapped
objects with multiple constructors nor to generic code were the constructor
overloads are unknown.
The solution presented in this library is the family of [*InPlaceFactories]
and [*TypedInPlaceFactories].
These factories are a family of classes which encapsulate an increasing
number of arbitrary constructor parameters and supply a method to construct
an object of a given type using those parameters at an address specified by
the user via placement new.
For example, one member of this family looks like:
template<class T,class A0, class A1>
class TypedInPlaceFactory2
{
A0 m_a0 ; A1 m_a1 ;
public:
TypedInPlaceFactory2( A0 const& a0, A1 const& a1 ) : m_a0(a0), m_a1(a1) {}
void construct ( void* p ) { new (p) T(m_a0,m_a1) ; }
} ;
A wrapper class aware of this can use it as:
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
W ( TypedInPlaceFactory2 const& fac ) { fac.construct(&wrapped_) ; }
} ;
void foo()
{
// Wrapped object constructed in-place via a TypedInPlaceFactory.
// No temporary created.
W ( TypedInPlaceFactory2<X,int,std::string>(123,"hello")) ;
}
The factories are divided in two groups:
* [_TypedInPlaceFactories]: those which take the target type as a primary
template parameter.
* [_InPlaceFactories]: those with a template `construct(void*)` member
function taking the target type.
Within each group, all the family members differ only in the number of
parameters allowed.
This library provides an overloaded set of helper template functions to
construct these factories without requiring unnecessary template parameters:
template<class A0,...,class AN>
InPlaceFactoryN <A0,...,AN> in_place ( A0 const& a0, ..., AN const& aN) ;
template<class T,class A0,...,class AN>
TypedInPlaceFactoryN <T,A0,...,AN> in_place ( T const& a0, A0 const& a0, ..., AN const& aN) ;
In-place factories can be used generically by the wrapper and user as follows:
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
template< class InPlaceFactory >
W ( InPlaceFactory const& fac ) { fac.template <X>construct(&wrapped_) ; }
} ;
void foo()
{
// Wrapped object constructed in-place via a InPlaceFactory.
// No temporary created.
W ( in_place(123,"hello") ) ;
}
The factories are implemented in the headers: __IN_PLACE_FACTORY_HPP__ and __TYPED_IN_PLACE_FACTORY_HPP__
[endsect]

View File

@ -1,111 +0,0 @@
[section Gotchas]
[section A note about optional<bool>]
`optional<bool>` should be used with special caution and consideration.
First, it is functionally similar to a tristate boolean (false, maybe, true)
—such as __BOOST_TRIBOOL__— except that in a tristate boolean, the maybe state
[_represents a valid value], unlike the corresponding state of an uninitialized
`optional<bool>`.
It should be carefully considered if an `optional<bool>` instead of a `tribool`
is really needed.
Second, although `optional<>` provides a contextual conversion to `bool` in C++11,
this falls back to an implicit conversion on older compilers. This conversion refers
to the initialization state and not to the contained value. Using `optional<bool>`
can lead to subtle errors due to the implicit `bool` conversion:
void foo ( bool v ) ;
void bar()
{
optional<bool> v = try();
// The following intended to pass the value of 'v' to foo():
foo(v);
// But instead, the initialization state is passed
// due to a typo: it should have been foo(*v).
}
The only implicit conversion is to `bool`, and it is safe in the sense that
typical integral promotions don't apply (i.e. if `foo()` takes an `int`
instead, it won't compile).
Third, mixed comparisons with `bool` work differently than similar mixed comparisons between pointers and `bool`, so the results might surprise you:
optional<bool> oEmpty(none), oTrue(true), oFalse(false);
if (oEmpty == none); // renders true
if (oEmpty == false); // renders false!
if (oEmpty == true); // renders false!
if (oFalse == none); // renders false
if (oFalse == false); // renders true!
if (oFalse == true); // renders false
if (oTrue == none); // renders false
if (oTrue == false); // renders false
if (oTrue == true); // renders true
In other words, for `optional<>`, the following assertion does not hold:
assert((opt == false) == (!opt));
[endsect]
[section Moved-from `optional`]
When an optional object that contains a value is moved from (is a source of move constructor or assignment) it still contains a value and its contained value is left in a moved-from state. This can be illustrated with the following example.
optional<std::unique_ptr<int>> opi {std::make_unique<int>(1)};
optional<std::unique_ptr<int>> opj = std::move(opi);
assert (opi);
assert (*opi == nullptr);
Quite a lot of people expect that when an object that contains a value is moved from, its contained value should be destroyed. This is not so, for performance reasons. Current semantics allow the implementation of `boost::optional<T>` to be trivially copyable when `T` is trivial.
[endsect]
[section Mixed relational comparisons]
Because `T` is convertible to `optional<T>` and because `optional<T>` is __STD_LESS_THAN_COMPARABLE__ when `T` is __STD_LESS_THAN_COMPARABLE__,
you can sometimes get an unexpected runtime result where you would rather expect a compiler error:
optional<double> Flight_plan::weight(); // sometimes no weight can be returned
bool is_aircraft_too_heavy(Flight_plan const& p)
{
return p.weight() > p.aircraft().max_weight(); // compiles!
} // returns false when the optional contains no value
[endsect]
[section False positive with -Wmaybe-uninitialized]
Sometimes on GCC compilers below version 5.1 you may get an -Wmaybe-uninitialized warning when compiling with option -02 on a perfectly valid `boost::optional` usage. For instance in this program:
#include <boost/optional.hpp>
boost::optional<int> getitem();
int main(int argc, const char *[])
{
boost::optional<int> a = getitem();
boost::optional<int> b;
if (argc > 0)
b = argc;
if (a != b)
return 1;
return 0;
}
This is a bug in the compiler. As a workaround (provided in [@http://stackoverflow.com/questions/21755206/how-to-get-around-gcc-void-b-4-may-be-used-uninitialized-in-this-funct this Stack Overflow question]) use the following way of initializing an optional containing no value:
boost::optional<int> b = boost::make_optional(false, int());
This is obviously redundant, but makes the warning disappear.
[endsect]
[endsect]

View File

@ -1,57 +0,0 @@

[section Exception Safety Guarantees]
This library assumes that `T`'s destructor does not throw exceptions. If it does, the behaviour of many operations on `optional<T>` is undefined.
The following mutating operations never throw exceptions:
* `optional<T>::operator= ( none_t ) noexcept`
* `optional<T>::reset() noexcept`
In addition, the following constructors and the destructor never throw exceptions:
* `optional<T>::optional() noexcept`
* `optional<T>::optional( none_t ) noexcept`
Regarding the following assignment functions:
* `optional<T>::operator= ( optional<T> const& )`
* `optional<T>::operator= ( T const& )`
* `template<class U> optional<T>::operator= ( optional<U> const& )`
* `template<class InPlaceFactory> optional<T>::operator= ( InPlaceFactory const& )`
* `template<class TypedInPlaceFactory> optional<T>::operator= ( TypedInPlaceFactory const& ) `
* `optional<T>::reset( T const& )`
They forward calls to the corresponding `T`'s constructors or assignments (depending on whether the optional object is initialized or not); so if both `T`'s constructor and the assignment provide strong exception safety guarantee, `optional<T>`'s assignment also provides strong exception safety guarantee; otherwise we only get the basic guarantee. Additionally, if both involved `T`'s constructor and the assignment never throw, `optional<T>`'s assignment also never throws.
Unless `T`'s constructor or assignment throws, assignments to `optional<T>` do not throw anything else on its own. A throw during assignment never changes the initialization state of any optional object involved:
optional<T> opt1(val1);
optional<T> opt2(val2);
assert(opt1);
assert(opt2);
try
{
opt1 = opt2; // throws
}
catch(...)
{
assert(opt1);
assert(opt2);
}
This also applies to move assignments/constructors. However, move operations are made no-throw more often.
Operation `emplace` provides basic exception safety guarantee. If it throws, the optional object becomes uninitialized regardless of its initial state, and its previous contained value (if any) is destroyed. It doesn't call any assignment or move/copy constructor on `T`.
[heading Swap]
Unless `swap` on optional is customized, its primary implementation forwards calls to `T`'s `swap` or move constructor (depending on the initialization state of the optional objects). Thus, if both `T`'s `swap` and move constructor never throw, `swap` on `optional<T>` never throws. similarly, if both `T`'s `swap` and move constructor offer strong guarantee, `swap` on `optional<T>` also offers a strong guarantee.
In case `swap` on optional is customized, the call to `T`'s move constructor are replaced with the calls to `T`'s default constructor followed by `swap`. (This is more useful on older compilers that do not support move semantics, when one wants to achieve stronger exception safety guarantees.) In this case the exception safety guarantees for `swap` are reliant on the guarantees of `T`'s `swap` and default constructor
[endsect]

View File

@ -1,38 +0,0 @@

[section Type requirements]
The very minimum requirement of `optional<T>` is that `T` is a complete type and that it has a publicly accessible destructor. `T` doesn't even need to be constructible. You can use a very minimum interface:
optional<T> o; // uninitialized
assert(o == none); // check if initialized
assert(!o); //
o.value(); // always throws
But this is practically useless. In order for `optional<T>` to be able to do anything useful and offer all the spectrum of ways of accessing the contained value, `T` needs to have at least one accessible constructor. In that case you need to initialize the optional object with function `emplace()`, or if your compiler does not support it, resort to [link boost_optional.design.in_place_factories In-Place Factories]:
optional<T> o;
o.emplace("T", "ctor", "params");
If `T` is __MOVE_CONSTRUCTIBLE__, `optional<T>` is also __MOVE_CONSTRUCTIBLE__ and can be easily initialized from an rvalue of type `T` and be passed by value:
optional<T> o = make_T();
optional<T> p = optional<T>();
If `T` is __COPY_CONSTRUCTIBLE__, `optional<T>` is also __COPY_CONSTRUCTIBLE__ and can be easily initialized from an lvalue of type `T`:
T v = make_T();
optional<T> o = v;
optional<T> p = o;
If `T` is not `MoveAssignable`, it is still possible to reset the value of `optional<T>` using function `emplace()`:
optional<const T> o = make_T();
o.emplace(make_another_T());
If `T` is `Moveable` (both __MOVE_CONSTRUCTIBLE__ and `MoveAssignable`) then `optional<T>` is also `Moveable` and additionally can be constructed and assigned from an rvalue of type `T`.
Similarly, if `T` is `Copyable` (both __COPY_CONSTRUCTIBLE__ and `CopyAssignable`) then `optional<T>` is also `Copyable` and additionally can be constructed and assigned from an lvalue of type `T`.
`T` ['is not] required to be __STD_DEFAULT_CONSTRUCTIBLE__.
[endsect]

View File

@ -1,31 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2015 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Header <boost/none.hpp>]
[section Synopsis]
```
namespace boost {
class none_t {/* see below */};
inline constexpr none_t none (/* see below */);
} // namespace boost
```
Class `none_t` is meant to serve as a tag for selecting appropriate overloads of from `optional`'s interface. It is an empty, trivially copyable class with disabled default constructor.
Constant `none` is used to indicate an optional object that does not contain a value in initialization, assignment and relational operations of `optional`.
[endsect]
[endsect]

View File

@ -1,40 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2015 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Header <boost/optional/bad_optional_access.hpp>]
[section Synopsis]
```
namespace boost {
class bad_optional_access : public std::logic_error
{
public:
bad_optional_access(); ``[link reference_bad_optional_access_constructor __GO_TO__]``
};
} // namespace boost
```
[endsect]
[section Detailed semantics]
__SPACE__
[#reference_bad_optional_access_constructor]
`bad_optional_access();`
* [*Effect:] Constructs an object of class `bad_optional_access`.
* [*Postconditions:] `what()` returns an implementation-defined NTBS.
[endsect]
[endsect]

View File

@ -1,79 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2015 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section:io_header Header <boost/optional/optional_io.hpp>]
[section:io_synop Synopsis]
```
#include <istream>
#include <ostream>
#include <boost/optional/optional.hpp>
namespace boost {
template <class CharType, class CharTrait, class T>
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v); ``[link reference_operator_ostream __GO_TO__]``
template <class CharType, class CharTrait>
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, none_t const&); ``[link reference_operator_ostream_none __GO_TO__]``
template<class CharType, class CharTrait, class T>
std::basic_istream<CharType, CharTrait>&
operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v); ``[link reference_operator_istream __GO_TO__]``
} // namespace boost
```
[endsect]
[section:io_semantics Detailed semantics]
[#reference_operator_ostream]
```
template <class CharType, class CharTrait, class T>
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v);
```
* [*Effect:] Outputs an implementation-defined string. The output contains the information about whether the optional object contains a value or not. If `v` contains a value, the output contains result of calling `out << *v`.
* [*Returns:] `out`.
__SPACE__
[#reference_operator_ostream_none]
```
template <class CharType, class CharTrait, class T>
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, none_t);
```
* [*Effect:] Outputs an implementation-defined string.
* [*Returns:] `out`.
__SPACE__
[#reference_operator_istream]
```
template <class CharType, class CharTrait, class T>
std::basic_ostream<CharType, CharTrait>&
operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v);
```
* [*Requires:] `T` is __STD_DEFAULT_CONSTRUCTIBLE__ and __MOVE_CONSTRUCTIBLE__.
* [*Effect:] Reads the value of optional object from `in`. If the string representation indicates that the optional object should contain a value, `v` contains a value and its contained value is obtained as if by default-constructing an object `o` of type `T` and then calling `in >> o`; otherwise `v` does not contain a value, and the previously contained value (if any) has been destroyed.
* [*Returns:] `out`.
[endsect]
[endsect]

View File

@ -1,32 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2015 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Header <boost/optional/optional_fwd.hpp>]
[section Synopsis]
```
namespace boost {
template <class T> class optional ;
template <class T> void swap ( optional<T>& , optional<T>& );
template <class T> struct optional_swap_should_use_default_constructor ;
} // namespace boost
```
This header only contains declarations.
[endsect]
[endsect]

View File

@ -1,303 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[#ref_header_optional_optional_hpp] [section:header_optional_optional Synopsis]
```// In Header: <`[@boost:/boost/optional/optional.hpp boost/optional/optional.hpp]'''<phrase role="comment">&gt;</phrase>'''``
namespace boost {
class in_place_init_t { /* see below */ } ; ``[link reference_in_place_init __GO_TO__]``
inline constexpr in_place_init_t in_place_init ( /* see below */ ) ;
class in_place_init_if_t { /*see below*/ } ; ``[link reference_in_place_init_if __GO_TO__]``
inline constexpr in_place_init_if_t in_place_init_if ( /*see below*/ ) ;
template <class T>
class optional ; ``[link reference_operator_template __GO_TO__]``
template <class T>
class optional<T&> ; ``[link reference_operator_template_spec __GO_TO__]``
template<class T> inline bool operator == ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator != ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_not_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator < ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_optional_optional __GO_TO__]``
template<class T> inline bool operator > ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_optional_optional __GO_TO__]``
template<class T> inline bool operator <= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_or_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator >= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_or_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator == ( optional<T> const& x, none_t ) noexcept ; ``[link reference_operator_compare_equal_optional_none __GO_TO__]``
template<class T> inline bool operator != ( optional<T> const& x, none_t ) noexcept ; ``[link reference_operator_compare_not_equal_optional_none __GO_TO__]``
template<class T> inline optional<T> make_optional ( T const& v ) ; ``[link reference_make_optional_value __GO_TO__]``
template<class T> inline optional<std::decay_t<T>> make_optional ( T && v ) ; ``[link reference_make_optional_rvalue __GO_TO__]``
template<class T> inline optional<T> make_optional ( bool condition, T const& v ) ; ``[link reference_make_optional_bool_value __GO_TO__]``
template<class T> inline optional<std::decay_t<T>> make_optional ( bool condition, T && v ) ; ``[link reference_make_optional_bool_rvalue __GO_TO__]``
template<class T> inline auto get_optional_value_or ( optional<T> const& opt, typename optional<T>::reference_const_type def ) -> typename optional<T>::reference_const_type; ``[link reference_free_get_value_or __GO_TO__]``
template<class T> inline auto get_optional_value_or ( optional<T> const& opt, typename optional<T>::reference_type def ) -> typename optional<T>::reference_type ; ``[link reference_free_get_value_or __GO_TO__]``
template<class T> inline T const& get ( optional<T> const& opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T& get ( optional<T> & opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T const* get ( optional<T> const* opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T* get ( optional<T>* opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline auto get_pointer ( optional<T> const& opt ) -> ``['see below]``; ``[link reference_free_get_pointer __GO_TO__]``
template<class T> inline auto get_pointer ( optional<T> & opt ) -> ``['see below]``; ``[link reference_free_get_pointer __GO_TO__]``
template<class T> inline void swap( optional<T>& x, optional<T>& y ) ; ``[link reference_swap_optional_optional __GO_TO__]``
template<class T> inline void swap( optional<T&>& x, optional<T&>& y ) ; ``[link reference_swap_optional_reference __GO_TO__]``
} // namespace boost
namespace std {
template <typename T>
struct hash<boost::optional<T> > ; ``[link reference_std_hash_spec __GO_TO__]``
template <typename T>
struct hash<boost::optional<T&> > ; ``[link reference_std_hash_spec __GO_TO__]``
} // namespace std
[endsect]
[section:header_optional_in_place_init Initialization tags]
[#reference_in_place_init]
[#reference_in_place_init_if]
namespace boost {
class in_place_init_t { /* see below */ } ;
const in_place_init_t in_place_init ( /* see below */ ) ;
class in_place_init_if_t { /*see below*/ } ;
const in_place_init_if_t in_place_init_if ( /*see below*/ ) ;
}
Classes `in_place_init_t` and `in_place_init_if_t` are empty classes. Their purpose is to control overload resolution in the initialization of optional objects.
They are empty, trivially copyable classes with disabled default constructor.
[endsect]
[section:header_optional_optional_values Optional Values]
[#reference_operator_template]
template <class T>
class optional
{
public :
typedef T value_type ;
typedef T & reference_type ;
typedef T const& reference_const_type ;
typedef T && rval_reference_type ;
typedef T * pointer_type ;
typedef T const* pointer_const_type ;
optional () noexcept ; ``[link reference_optional_constructor __GO_TO__]``
optional ( none_t ) noexcept ; ``[link reference_optional_constructor_none_t __GO_TO__]``
optional ( T const& v ) ; ``[link reference_optional_constructor_value __GO_TO__]``
optional ( T&& v ) ; ``[link reference_optional_constructor_move_value __GO_TO__]``
optional ( bool condition, T const& v ) ; ``[link reference_optional_constructor_bool_value __GO_TO__]``
optional ( optional const& rhs ) ; ``[link reference_optional_constructor_optional __GO_TO__]``
optional ( optional&& rhs ) noexcept(``['see below]``) ; ``[link reference_optional_move_constructor_optional __GO_TO__]``
template<class U> explicit optional ( optional<U> const& rhs ) ; ``[link reference_optional_constructor_other_optional __GO_TO__]``
template<class U> explicit optional ( optional<U>&& rhs ) ; ``[link reference_optional_move_constructor_other_optional __GO_TO__]``
template<class... Args> explicit optional ( in_place_init_t, Args&&... args ) ; ``[link reference_optional_in_place_init __GO_TO__]``
template<class... Args> explicit optional ( in_place_init_if_t, bool condition, Args&&... args ) ; ``[link reference_optional_in_place_init_if __GO_TO__]``
template<class InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``
template<class TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``
optional& operator = ( none_t ) noexcept ; ``[link reference_optional_operator_equal_none_t __GO_TO__]``
optional& operator = ( T const& v ) ; ``[link reference_optional_operator_equal_value __GO_TO__]``
optional& operator = ( T&& v ) ; ``[link reference_optional_operator_move_equal_value __GO_TO__]``
optional& operator = ( optional const& rhs ) ; ``[link reference_optional_operator_equal_optional __GO_TO__]``
optional& operator = ( optional&& rhs ) noexcept(``['see below]``) ; ``[link reference_optional_operator_move_equal_optional __GO_TO__]``
template<class U> optional& operator = ( optional<U> const& rhs ) ; ``[link reference_optional_operator_equal_other_optional __GO_TO__]``
template<class U> optional& operator = ( optional<U>&& rhs ) ; ``[link reference_optional_operator_move_equal_other_optional __GO_TO__]``
template<class... Args> void emplace ( Args&&... args ) ; ``[link reference_optional_emplace __GO_TO__]``
template<class InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ; ``[link reference_optional_operator_equal_factory __GO_TO__]``
template<class TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ; ``[link reference_optional_operator_equal_factory __GO_TO__]``
T const& get() const ; ``[link reference_optional_get __GO_TO__]``
T& get() ; ``[link reference_optional_get __GO_TO__]``
T const* operator ->() const ; ``[link reference_optional_operator_arrow __GO_TO__]``
T* operator ->() ; ``[link reference_optional_operator_arrow __GO_TO__]``
T const& operator *() const& ; ``[link reference_optional_operator_asterisk __GO_TO__]``
T& operator *() & ; ``[link reference_optional_operator_asterisk __GO_TO__]``
T&& operator *() && ; ``[link reference_optional_operator_asterisk_move __GO_TO__]``
T const& value() const& ; ``[link reference_optional_value __GO_TO__]``
T& value() & ; ``[link reference_optional_value __GO_TO__]``
T&& value() && ; ``[link reference_optional_value_move __GO_TO__]``
template<class U> T value_or( U && v ) const& ; ``[link reference_optional_value_or __GO_TO__]``
template<class U> T value_or( U && v ) && ; ``[link reference_optional_value_or_move __GO_TO__]``
template<class F> T value_or_eval( F f ) const& ; ``[link reference_optional_value_or_call __GO_TO__]``
template<class F> T value_or_eval( F f ) && ; ``[link reference_optional_value_or_call_move __GO_TO__]``
template<class F> auto map( F f ) const& -> ``['see below]``; ``[link reference_optional_map __GO_TO__]``
template<class F> auto map( F f ) & -> ``['see below]``; ``[link reference_optional_map __GO_TO__]``
template<class F> auto map( F f ) && -> ``['see below]``; ``[link reference_optional_map_move __GO_TO__]``
template<class F> auto flat_map( F f ) const& -> ``['see below]``; ``[link reference_optional_flat_map __GO_TO__]``
template<class F> auto flat_map( F f ) & -> ``['see below]``; ``[link reference_optional_flat_map __GO_TO__]``
template<class F> auto flat_map( F f ) && -> ``['see below]``; ``[link reference_optional_flat_map_move __GO_TO__]``
T const* get_ptr() const ; ``[link reference_optional_get_ptr __GO_TO__]``
T* get_ptr() ; ``[link reference_optional_get_ptr __GO_TO__]``
bool has_value() const noexcept ; ``[link reference_optional_operator_bool __GO_TO__]``
explicit operator bool() const noexcept ; ``[link reference_optional_operator_bool __GO_TO__]``
bool operator!() const noexcept ; ``[link reference_optional_operator_not __GO_TO__]``
void reset() noexcept ; ``[link reference_optional_reset __GO_TO__]``
// deprecated methods
// (deprecated)
void reset ( T const& ) ; ``[link reference_optional_reset_value __GO_TO__]``
// (deprecated)
bool is_initialized() const ; ``[link reference_optional_is_initialized __GO_TO__]``
// (deprecated)
T const& get_value_or( T const& default ) const ; ``[link reference_optional_get_value_or_value __GO_TO__]``
};
[endsect]
[section:header_optional_optional_refs Optional References]
[#reference_operator_template_spec]
template <class T>
class optional<T&> // specialization for lvalue references
{
public :
typedef T& value_type;
typedef T& reference_type;
typedef T& reference_const_type; // no const propagation
typedef T& rval_reference_type;
typedef T* pointer_type;
typedef T* pointer_const_type; // no const propagation
optional () noexcept ; ``[link reference_optional_ref_default_ctor __GO_TO__]``
optional ( none_t ) noexcept ; ``[link reference_optional_ref_default_ctor __GO_TO__]``
template<class R> optional(R&& r) noexcept ; ``[link reference_optional_ref_value_ctor __GO_TO__]``
template <class R> optional(bool cond, R&& r) noexcept ; ``[link reference_optional_ref_cond_value_ctor __GO_TO__]``
optional ( optional const& rhs ) noexcept ; ``[link reference_optional_ref_copy_ctor __GO_TO__]``
template<class U> explicit optional ( optional<U&> const& rhs ) noexcept ; ``[link reference_optional_ref_ctor_from_opt_U __GO_TO__]``
optional& operator = ( none_t ) noexcept ; ``[link reference_optional_ref_assign_none_t __GO_TO__]``
optional& operator = ( optional const& rhs ) noexcept; ``[link reference_optional_ref_copy_assign __GO_TO__]``
template<class U> optional& operator = ( optional<U&> const& rhs ) noexcept ; ``[link reference_optional_ref_assign_optional_U __GO_TO__]``
template<class R> optional& operator = (R&& r) noexcept ; ``[link reference_optional_ref_assign_R __GO_TO__]``
template<class R> void emplace ( R&& r ) noexcept ; ``[link reference_optional_ref_emplace_R __GO_TO__]``
T& get() const ; ``[link reference_optional_ref_get __GO_TO__]``
T& operator *() const ; ``[link reference_optional_ref_get __GO_TO__]``
T* operator ->() const ; ``[link reference_optional_ref_arrow __GO_TO__]``
T& value() const& ; ``[link reference_optional_ref_value __GO_TO__]``
template<class R> T& value_or( R && r ) const noexcept ; ``[link reference_optional_ref_value_or __GO_TO__]``
template<class F> T& value_or_eval( F f ) const ; ``[link reference_optional_ref_value_or_eval __GO_TO__]``
template<class F> auto map( F f ) const -> ``['see below]``; ``[link reference_optional_ref_map __GO_TO__]``
template<class F> auto flat_map( F f ) const -> ``['see below]``; ``[link reference_optional_ref_flat_map __GO_TO__]``
T* get_ptr() const noexcept ; ``[link reference_optional_ref_get_ptr __GO_TO__]``
bool has_value() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``
explicit operator bool() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``
bool operator!() const noexcept ; ``[link reference_optional_ref_operator_not __GO_TO__]``
void reset() noexcept ; ``[link reference_optional_ref_reset __GO_TO__]``
// deprecated methods
// (deprecated)
template<class R> void reset ( R && r ) noexcept ; ``[link reference_optional_ref_reset_value __GO_TO__]``
// (deprecated)
bool is_initialized() const noexcept ; ``[link reference_optional_ref_is_initialized __GO_TO__]``
// (deprecated)
template<class R> T& get_value_or( R && r ) constnoexcept; ``[link reference_optional_ref_get_value_or_value __GO_TO__]``
private:
T* ref; // exposition only
};
[endsect]

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +0,0 @@

[section When to use Optional]
It is recommended to use `optional<T>` in situations where there is exactly one, clear (to all parties) reason for having no value of type `T`, and where the lack of value is as natural as having any regular value of `T`. One example of such situation is asking the user in some GUI form to optionally specify some limit on an `int` value, but the user is allowed to say 'I want the number not to be constrained by the maximum'.
For another example, consider a config parameter specifying how many threads the application should launch. Leaving this parameter unspecified means that the application should decide itself. For yet another example, consider a function returning the index of the smallest element in a `vector`. We need to be prepared for the situation, where the `vector` is empty. Therefore a natural signature for such function would be:
template <typename T>
optional<size_t> find_smallest_elem(const std::vector<T>& vec);
Here, having received an empty `vec` and having no `size_t` to return is not a ['failure] but a ['normal], albeit irregular, situation.
Another typical situation is to indicate that we do not have a value yet, but we expect to have it later. This notion can be used in implementing solutions like lazy initialization or a two-phase initialization.
`optional` can be used to take a non-__STD_DEFAULT_CONSTRUCTIBLE__ type `T` and create a sibling type with a default constructor. This is a way to add a ['null-state] to any type that doesn't have it already.
Sometimes type `T` already provides a built-in null-state, but it may still be useful to wrap it into `optional`. Consider `std::string`. When you read a piece of text from a GUI form or a DB table, it is hardly ever that the empty string indicates anything else but a missing text. And some data bases do not even distinguish between a null string entry and a non-null string of length 0. Still, it may be practical to use `optional<string>` to indicate in the returned type that we want to treat the empty string in a special dedicated program path:
if(boost::optional<std::string> name = ask_user_name()) {
assert(*name != "");
logon_as(*name);
}
else {
skip_logon();
}
In the example above, the assertion indicates that if we choose to use this technique, we must translate the empty string state to an optional object with no contained value (inside function `ask_user_name`).
[heading Not recommended usages]
It is not recommended to use `optional` to indicate that we were not able to compute a value because of a ['failure]. It is difficult to define what a failure is, but it usually has one common characteristic: an associated information on the cause of the failure. This can be the type and member data of an exception object, or an error code. It is a bad design to signal a failure and not inform about the cause. If you do not want to use exceptions, and do not like the fact that by returning error codes you cannot return the computed value, you can use [@https://github.com/ptal/Boost.Expected Expected] library. It is sort of __BOOST_VARIANT__ that contains either a computed value or a reason why the computation failed.
Sometimes the distinction into what is a failure and what is a valid but irregular result is blurry and depends on a particular usage and personal preference. Consider a function that converts a `string` to an `int`. Is it a failure that you cannot convert? It might in some cases, but in other you may call it exactly for the purpose of figuring out if a given `string` is convertible, and you are not even interested in the resulting value. Sometimes when a conversion fails you may not consider it a failure, but you need to know why it cannot be converted; for instance at which character it is determined that the conversion is impossible. In this case returning `optional<T>` will not suffice. Finally, there is a use case where an input string that does not represent an `int` is not a failure condition, but during the conversion we use resources whose acquisition may fail. In that case the natural representation is to both return `optional<int>` and signal failure:
optional<int> convert1(const string& str); // throws
expected<ErrorT, optional<int>> convert2(const string& str); // return either optional or error
[endsect]

View File

@ -1,156 +0,0 @@

[section Performance considerations]
Technical details aside, the memory layout of `optional<T>` for a generic `T` is more-less this:
template <typename T>
class optional
{
bool _initialized;
std::aligned_storage_t<sizeof(t), alignof(T)> _storage;
};
Lifetime of the `T` inside `_storage` is manually controlled with placement-`new`s and pseudo-destructor calls. However, for scalar `T`s we use a different way of storage, by simply holding a `T`:
template <typename T>
class optional
{
bool _initialized;
T _storage;
};
We call it a ['direct] storage. This makes `optional<T>` a trivially-copyable type for scalar `T`s. This only works for compilers that support defaulted functions (including defaulted move assignment and constructor). On compilers without defaulted functions we still use the direct storage, but `optional<T>` is no longer recognized as trivially-copyable. Apart from scalar types, we leave the programmer a way of customizing her type, so that it is recognized by `optional` as candidate for optimized storage, by specializing type trait `boost::optional_config::optional_uses_direct_storage_for`:
struct X // not trivial
{
X() {}
};
namespace boost { namespace optional_config {
template <> struct optional_uses_direct_storage_for<X> : boost::true_type {};
}}
[heading Controlling the size]
For the purpose of the following analysis, considering memory layouts, we can think of it as:
template <typename T>
class optional
{
bool _initialized;
T _storage;
};
Given type `optional<int>`, and assuming that `sizeof(int) == 4`, we will get `sizeof(optional<int>) == 8`. This is so because of the alignment rules, for our two members we get the following alignment:
[$images/opt_align1.png]
This means you can fit twice as many `int`s as `optional<int>`s into the same space of memory. Therefore, if the size of the objects is critical for your application (e.g., because you want to utilize your CPU cache in order to gain performance) and you have determined you are willing to trade the code clarity, it is recommended that you simply go with type `int` and use some 'magic value' to represent ['not-an-int], or use something like [@https://github.com/akrzemi1/markable `markable`] library.
Even if you cannot spare any value of `int` to represent ['not-an-int] (e.g., because every value is useful, or you do want to signal ['not-an-int] explicitly), at least for `Trivial` types you should consider storing the value and the `bool` flag representing the ['null-state] separately. Consider the following class:
struct Record
{
optional<int> _min;
optional<int> _max;
};
Its memory layout can be depicted as follows:
[$images/opt_align2.png]
This is exactly the same as if we had the following members:
struct Record
{
bool _has_min;
int _min;
bool _has_max;
int _max;
};
But when they are stored separately, we at least have an option to reorder them like this:
struct Record
{
bool _has_min;
bool _has_max;
int _min;
int _max;
};
Which gives us the following layout (and smaller total size):
[$images/opt_align3.png]
Sometimes it requires detailed consideration what data we make optional. In our case above, if we determine that both minimum and maximum value can be provided or not provided together, but one is never provided without the other, we can make only one optional member:
struct Limits
{
int _min;
int _max;
};
struct Record
{
optional<Limits> _limits;
};
This would give us the following layout:
[$images/opt_align4.png]
[heading Optional function parameters]
Having function parameters of type `const optional<T>&` may incur certain unexpected run-time cost connected to copy construction of `T`. Consider the following code.
void fun(const optional<Big>& v)
{
if (v) doSomethingWith(*v);
else doSomethingElse();
}
int main()
{
optional<Big> ov;
Big v;
fun(none);
fun(ov); // no copy
fun(v); // copy constructor of Big
}
No copy elision or move semantics can save us from copying type `Big` here. Not that we need any copy, but this is how `optional` works. In order to avoid copying in this case, one could provide second overload of `fun`:
void fun(const Big& v)
{
doSomethingWith(v);
}
int main()
{
optional<Big> ov;
Big v;
fun(ov); // no copy
fun(v); // no copy: second overload selected
}
Alternatively, you could consider using an optional reference instead:
void fun(optional<const Big&> v) // note where the reference is
{
if (v) doSomethingWith(*v);
else doSomethingElse();
}
int main()
{
optional<Big> ov;
Big v;
fun(none);
fun(ov); // doesn't compile
fun(v); // no copy
}
[endsect]

View File

@ -1,77 +0,0 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Dependencies and Portability]
[section Dependencies]
The implementation uses the following other Boost modules:
# assert
# config
# core
# static_assert
# throw_exception
# type_traits
[endsect]
[section Optional Reference Binding][#optional_reference_binding]
A number of compilers incorrectly treat const lvalues of integral type as rvalues, and create an illegal temporary when binding to an lvalue reference to const in some expressions. This could result in creating an optional lvalue reference that is in fact bound to an unexpected temporary rather than to the intended object. In order to prevent hard to find run-time bugs, this library performs compile-time checks to prevent expressions that would otherwise bind an optional reference to an unexpected temporary. As a consequence, on certain compilers certain pieces of functionality in optional references are missing. In order to maintain a portability of your code across different compilers, it is recommended that you only stick to the minimum portable interface of optional references: prefer direct-initialization and copy assignment of optional references to copy-initialization and assignment from `T&`:
const int i = 0;
optional<const int&> or1;
optional<const int&> or2 = i; // caution: not portable
or1 = i; // caution: not portable
optional<const int&> or3(i); // portable
or1 = optional<const int&>(i); // portable
Compilers known to have these deficiencies include GCC versions 4.2, 4.3, 4.4, 4.5, 5.1, 5.2; QCC 4.4.2; MSVC versions 8.0, 9.0, 10.0, 11.0, 12.0. In order to check if your compiler correctly implements reference binding use this test program.
#include <cassert>
const int global_i = 0;
struct TestingReferenceBinding
{
TestingReferenceBinding(const int& ii)
{
assert(&ii == &global_i);
}
void operator=(const int& ii)
{
assert(&ii == &global_i);
}
void operator=(int&&) // remove this if your compiler doesn't have rvalue refs
{
assert(false);
}
};
int main()
{
const int& iref = global_i;
assert(&iref == &global_i);
TestingReferenceBinding ttt = global_i;
ttt = global_i;
TestingReferenceBinding ttt2 = iref;
ttt2 = iref;
}
[endsect]
[endsect]

View File

@ -1,48 +0,0 @@
[/
Boost.Optional
Copyright (c) 2015 - 2024 Andrzej Krzemieński
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section:std_comp Comparison with `std::optional`]
[table
[]
[ [[*`boost::optional`]] [[*`std::optional`]] [] ]
[ [`optional<int> o = none;`] [`optional<int> o = nullopt;`] [Different name for no-value tag.] ]
[ [`optional<X> o {in_place_init, a, b};`] [`optional<int> o {in_place, a, b};`] [Different name for in-place initialization tag.] ]
[ [] [`optional<vector<int>> o {in_place, {1, 2, 3}};`
`o.emplace({4, 5, 6});`] [No in-place initialization with initializer-list in `boost`.] ]
[ [`optional<X> o {in_place_init_if, cond, a, b};`] [] [No syntax for conditional in-place initialization in `std`.] ]
[ [`optional<X> o {cond, x};`] [] [No syntax for conditional initialization from `T` in `std`.] ]
[ [`optional<T> o {U{}};`
`optional<T> o {optional<U>{}};`] [`optional<T> o = U{};`
`optional<T> o = optional<U>{}`] [Constructors form `U` and `optional<U>` are explicit in `boost` and implicit in `std`.] ]
[ [] [`optional o = 1;`] [No clever deduction of of `optional`'s template parameters in initialization in `boost`. ]]
[ [`optional<X const&> o;`] [] [No optional references in `std`.] ]
[ [] [`constexpr optional<int> o;`] [No `constexpr` interface in `boost`.] ]
[ [`o.map(&f);`
`o.flat_map(&of);` ] [`o.transform(&f);`
`o.and_then(&of);`] [Different names and signatures for monadic interface functions. `boost` takes callbacks by value, `std` by universal reference.] ]
[ [] [`o.or_else(&of);`] [No `or_else` function in `boost`.] ]
[ [`o.value_or_eval(&f);`] [] [No `value_or_eval` function in `std`.] ]
[ [] [`optional<T>{} == U{}`;
`optional<T>{} == optional<U>{}`] [No comparisons with `U` or `optional<U>` in `boost`.] ]
[ [`make_optional(cond, v);`] [] [No `make_optional` with condition in `std`.] ]
[ [] [`make_optional<T>(a, b);`] [No `make_optional` with specified `T` in `boost`.] ]
[ [`std::cout << optional<int>{};`] [] [No printing to IOStreams in `std`.]]
]
[endsect][/ std_comp]

View File

@ -1,159 +0,0 @@
[/
Boost.Optional
Copyright (c) 2015 - 2023 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section:relnotes Release Notes]
[heading Boost Release 1.87]
* *Breaking change.* Dropped support for C++03. C++11 is now the required minimum; at least some C++11 features.
* Dropped dependency on Boost.Utility.
* Dropped dependency on Boost.Predef.
* Dropped dependency on Boost.StaticAssert.
* Dropped dependency on Boost.Move.
* A bit faster implementation of some relational operations.
* *Warning.* In the future releases we intend to introduce the range interface
into `optional`, so that `std::ranges::range<optional<T>>` will be `true`.
This may affect the overload resolution in programs that make decisions based
on predicates such as `std::ranges::range`.
* Tags `in_place_init` and `in_place_init_if` become `inline constexpr` and therewith leave smaller footprint in the executable. This addresses [@https://github.com/boostorg/optional/issues/103 issue #103].
[heading Boost Release 1.85]
* Fixed the implementation for trivial types. Now it is slower, because it always initializes the `T`, but it avoids undefined behavior when `optional<T>` is copied. This fixes [@https://github.com/boostorg/optional/issues/108 issue #108].
* Fixed some `-Wmaybe-uninitialized` warnings in GCC 12. Thanks to Christian Mazakas for the fix.
* Dropped dependency on Boost.Detail.
[heading Boost Release 1.83]
* Deprecated support for C++03 and earlier, C++11 will be required in release 1.86.
[heading Boost Release 1.80]
* [*Breaking change:] Added specializations for `std::hash<boost::optional<T>>`. This fixes [@https://github.com/boostorg/optional/issues/55 issue #55]. You may get compiler errors when your program provides specializations for `std::hash<boost::optional<T>>`. If this happens, define macro `BOOST_OPTIONAL_CONFIG_DO_NOT_SPECIALIZE_STD_HASH` to suppress the specializations of `std::hash` in this library.
[heading Boost Release 1.79]
* Fixed [@https://github.com/boostorg/optional/issues/98 issue #98].
* Fixed [@https://github.com/boostorg/optional/issues/92 issue #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.
[heading Boost Release 1.76]
* Fixed MSVC warning C4702.
[heading Boost Release 1.75]
* `boost::none` is `constexpr`-declared.
* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78].
[heading Boost Release 1.73]
* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78].
* `boost::none` is now declared as an inline variable (on compilers that support it): there is only one instance of `boost::none` across all translation units.
* Fixed a number of compilation errors in GCC 4.4.7 in `optional<T>` for trivial `T`s. Thanks to Robert Leahy for the fix. For details see [@https://github.com/boostorg/optional/pull/80 pr #78].
* Now suppressing warning `-Wweak-vtables`.
[heading Boost Release 1.69]
* Remove deprecation mark from `reset()` method (without arguments).
* Fixed [@https://github.com/boostorg/optional/issues/59 issue #59].
* Fixed bug with initialization of certain wrapper types in clang with -std=c++03. See [@https://github.com/boostorg/optional/pull/64 pr #64].
[heading Boost Release 1.68]
* Added member function `has_value()` for compatibility with `std::optional` ([@https://github.com/boostorg/optional/issues/52 issue #52]).
* Added member function `map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> U`.
* Added member function `flat_map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> optional<U>`.
[heading Boost Release 1.67]
* Fixed [@https://github.com/boostorg/optional/issues/46 issue #46].
* Fixed `-Wzero-as-null-pointer-constant` warnings.
[heading Boost Release 1.66]
* 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.
[heading Boost Release 1.63]
* 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 optional, just like in `std::optional`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/12203 Trac #12203].
* Fixed [@https://svn.boost.org/trac/boost/ticket/12563 Trac #12563].
[heading Boost Release 1.62]
* Fixed [@https://svn.boost.org/trac/boost/ticket/12179 Trac #12179].
[heading Boost Release 1.61]
* 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: shallow, underlying objects are not affected,
* optional references to abstract types work.
* Documented nested typedefs ([@https://svn.boost.org/trac/boost/ticket/5193 Trac #5193]).
* Made the perfect-forwarding constructor SFINAE-friendly, which fixes [@https://svn.boost.org/trac/boost/ticket/12002 Trac #12002]. However, this only works in the newer platforms that correctly implement C++11 `<type_traits>`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/10445 Trac #10445].
[heading Boost Release 1.60]
* Changed the implementation of `boost::none` again. Now it is a const object with internal linkage (as any other tag). This fixes [@https://svn.boost.org/trac/boost/ticket/11203 Trac #11203].
[heading Boost Release 1.59]
* For C++03 compilers, added 0-argument overload for member function `emplace()`, and therewith removed the dependency on `<boost/utility/in_place_factory.hpp>`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/11241 Trac #11241].
[heading Boost Release 1.58]
* `boost::none_t` is no longer convertible from literal `0`. This avoids a bug where `optional<rational<int>> oi = 0;` would initialize an optional object with no contained value.
* Improved the trick that prevents streaming out `optional` without header `optional_io.hpp` by using safe-bool idiom. This addresses [@https://svn.boost.org/trac/boost/ticket/10825 Trac #10825].
* IOStream operators are now mentioned in documentation.
* Added a way to manually disable move semantics: just define macro `BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES`. This can be used to work around [@https://svn.boost.org/trac/boost/ticket/10399 Trac #10399].
* It is no longer possible to assign `optional<U>` to `optional<T>` when `U` is not assignable or convertible to `T` ([@https://svn.boost.org/trac/boost/ticket/11087 Trac #11087]).
* Value accessors now work correctly on rvalues of `optional<T&>` ([@https://svn.boost.org/trac/boost/ticket/10839 Trac #10839]).
[heading Boost Release 1.57]
* [@https://github.com/boostorg/optional/pull/9 Git pull #9]: ['"Supply `<string>` to fix C++03 compile error on `logic_error("...")`"].
[heading Boost Release 1.56]
* Added support for rvalue references. Now `optional<T>` 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 [@https://svn.boost.org/trac/boost/ticket/1841 Trac #1841],
* `optional` is moveable, including conditional `noexcept` specifications, which make it `move_if_noexcept`-friendly,
* Using explicit operator bool() on platforms that support it ([@https://svn.boost.org/trac/boost/ticket/4227 Trac #4227]) (breaking change),
* Forward declaration of `operator<<(ostream&, optional const&)` to prevent inadvertent incorrect serialization of optional objects,
* Removed deprecated function `reset()` from examples ([@https://svn.boost.org/trac/boost/ticket/9005 Trac #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.
[endsect][/ relnotes]

View File

@ -10,46 +10,21 @@
# Quickbook
# -----------------------------------------------------------------------------
using boostbook ;
import quickbook ;
path-constant images : html ;
xml optional
:
00_optional.qbk
;
install images
:
images/opt_align1.png
images/opt_align2.png
images/opt_align3.png
images/opt_align4.png
images/R.png
images/space.png
:
<location>html/images
optional.qbk
;
boostbook standalone
:
optional
:
<format>html:<xsl:param>"boost.root=../../../.."
<format>html:<xsl:param>"boost.libraries=../../../../libs/libraries.htm"
<xsl:param>"chapter.autolabel=0"
<xsl:param>"chunk.section.depth=8"
<xsl:param>"toc.section.depth=1"
<xsl:param>"toc.max.depth=2"
<xsl:param>"generate.section.toc.level=1"
<format>pdf:<xsl:param>"img.src.path=$(images)/"
<format>pdf:<xsl:param>"boost.url.prefix=http://www.boost.org/doc/libs/release/libs/optional/doc/html"
<format>docbook:<auto-index-internal>on
<xsl:param>boost.root=../../../..
<xsl:param>boost.libraries=../../../libraries.htm
<xsl:param>toc.max.depth=2
<xsl:param>toc.section.depth=2
<xsl:param>chunk.section.depth=1
;
###############################################################################
alias boostdoc ;
explicit boostdoc ;
alias boostrelease : standalone ;
explicit boostrelease ;

View File

@ -9,7 +9,7 @@
]
[section:acknowledgements Acknowledgements]
[section Acknowledgments]
[heading Pre-formal review]
@ -55,8 +55,6 @@ Rob Stewart, and others.
with the proper semantics.
* Mat Marcus shown the virtues of a value-oriented interface, influencing
the current design, and contributed the idea of "none".
* Vladimir Batov's design of Boost.Convert library motivated the development
of value accessors for `optional`: functions `value`, `value_or`, `value_or_eval`.
[endsect]

View File

@ -2,16 +2,16 @@
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Copyright (c) 2015 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Header <boost/optional.hpp>]
This is an alias for header [link boost_optional.reference.header__boost_optional_optional_hpp_.header_optional_optional `<boost/optional/optional.hpp>`].
[section Dependencies and Portability]
The implementation uses `type_traits/alignment_of.hpp` and
`type_traits/type_with_alignment.hpp`
[endsect]
[endsect]

251
doc/development.qbk Normal file
View File

@ -0,0 +1,251 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Development]
[section The models]
In C++, we can ['declare] an object (a variable) of type `T`, and we can give this
variable an ['initial value] (through an ['initializer]. (c.f. 8.5)).
When a declaration includes a non-empty initializer (an initial value is given),
it is said that the object has been initialized.
If the declaration uses an empty initializer (no initial value is given), and
neither default nor value initialization applies, it is said that the object is
[*uninitialized]. Its actual value exist but has an ['indeterminate initial value]
(c.f. 8.5.9).
`optional<T>` intends to formalize the notion of initialization (or lack of it)
allowing a program to test whether an object has been initialized and stating
that access to the value of an uninitialized object is undefined behavior. That
is, when a variable is declared as `optional<T>` and no initial value is given,
the variable is ['formally] uninitialized. A formally uninitialized optional object
has conceptually no value at all and this situation can be tested at runtime. It
is formally ['undefined behavior] to try to access the value of an uninitialized
optional. An uninitialized optional can be assigned a value, in which case its initialization state changes to initialized. Furthermore, given the formal
treatment of initialization states in optional objects, it is even possible to
reset an optional to ['uninitialized].
In C++ there is no formal notion of uninitialized objects, which means that
objects always have an initial value even if indeterminate.
As discussed on the previous section, this has a drawback because you need
additional information to tell if an object has been effectively initialized.
One of the typical ways in which this has been historically dealt with is via
a special value: `EOF`, `npos`, -1, etc... This is equivalent to adding the
special value to the set of possible values of a given type. This super set of
`T` plus some ['nil_t]—were `nil_t` is some stateless POD-can be modeled in modern
languages as a [*discriminated union] of T and nil_t. Discriminated unions are
often called ['variants]. A variant has a ['current type], which in our case is either
`T` or `nil_t`.
Using the __BOOST_VARIANT__ library, this model can be implemented in terms of `boost::variant<T,nil_t>`.
There is precedent for a discriminated union as a model for an optional value:
the __HASKELL__ [*Maybe] built-in type constructor. Thus, a discriminated union
`T+nil_t` serves as a conceptual foundation.
A `variant<T,nil_t>` follows naturally from the traditional idiom of extending
the range of possible values adding an additional sentinel value with the
special meaning of ['Nothing]. However, this additional ['Nothing] value is largely
irrelevant for our purpose since our goal is to formalize the notion of
uninitialized objects and, while a special extended value can be used to convey
that meaning, it is not strictly necessary in order to do so.
The observation made in the last paragraph about the irrelevant nature of the
additional `nil_t` with respect to [_purpose] of `optional<T>` suggests an
alternative model: a ['container] that either has a value of `T` or nothing.
As of this writing I don't know of any precedence for a variable-size
fixed-capacity (of 1) stack-based container model for optional values, yet I
believe this is the consequence of the lack of practical implementations of
such a container rather than an inherent shortcoming of the container model.
In any event, both the discriminated-union or the single-element container
models serve as a conceptual ground for a class representing optional—i.e.
possibly uninitialized—objects.
For instance, these models show the ['exact] semantics required for a wrapper
of optional values:
Discriminated-union:
* [*deep-copy] semantics: copies of the variant implies copies of the value.
* [*deep-relational] semantics: comparisons between variants matches both
current types and values
* If the variant's current type is `T`, it is modeling an ['initialized] optional.
* If the variant's current type is not `T`, it is modeling an ['uninitialized]
optional.
* Testing if the variant's current type is `T` models testing if the optional
is initialized
* Trying to extract a `T` from a variant when its current type is not `T`, models
the undefined behavior of trying to access the value of an uninitialized optional
Single-element container:
* [*deep-copy] semantics: copies of the container implies copies of the value.
* [*deep-relational] semantics: comparisons between containers compare container
size and if match, contained value
* If the container is not empty (contains an object of type `T`), it is modeling
an ['initialized] optional.
* If the container is empty, it is modeling an ['uninitialized] optional.
* Testing if the container is empty models testing if the optional is
initialized
* Trying to extract a `T` from an empty container models the undefined behavior
of trying to access the value of an uninitialized optional
[endsect]
[section The semantics]
Objects of type `optional<T>` are intended to be used in places where objects of
type `T` would but which might be uninitialized. Hence, `optional<T>`'s purpose is
to formalize the additional possibly uninitialized state.
From the perspective of this role, `optional<T>` can have the same operational
semantics of `T` plus the additional semantics corresponding to this special
state.
As such, `optional<T>` could be thought of as a ['supertype] of `T`. Of course, we
can't do that in C++, so we need to compose the desired semantics using a
different mechanism.
Doing it the other way around, that is, making `optional<T>` a ['subtype] of `T`
is not only conceptually wrong but also impractical: it is not allowed to
derive from a non-class type, such as a built-in type.
We can draw from the purpose of `optional<T>` the required basic semantics:
* [*Default Construction:] To introduce a formally uninitialized wrapped
object.
* [*Direct Value Construction via copy:] To introduce a formally initialized
wrapped object whose value is obtained as a copy of some object.
* [*Deep Copy Construction:] To obtain a new yet equivalent wrapped object.
* [*Direct Value Assignment (upon initialized):] To assign a value to the
wrapped object.
* [*Direct Value Assignment (upon uninitialized):] To initialize the wrapped
object with a value obtained as a copy of some object.
* [*Assignment (upon initialized):] To assign to the wrapped object the value
of another wrapped object.
* [*Assignment (upon uninitialized):] To initialize the wrapped object with
value of another wrapped object.
* [*Deep Relational Operations (when supported by the type T):] To compare
wrapped object values taking into account the presence of uninitialized states.
* [*Value access:] To unwrap the wrapped object.
* [*Initialization state query:] To determine if the object is formally
initialized or not.
* [*Swap:] To exchange wrapped objects. (with whatever exception safety
guarantees are provided by `T`'s swap).
* [*De-initialization:] To release the wrapped object (if any) and leave the
wrapper in the uninitialized state.
Additional operations are useful, such as converting constructors and
converting assignments, in-place construction and assignment, and safe
value access via a pointer to the wrapped object or null.
[endsect]
[section The Interface]
Since the purpose of optional is to allow us to use objects with a formal
uninitialized additional state, the interface could try to follow the
interface of the underlying `T` type as much as possible. In order to choose
the proper degree of adoption of the native `T` interface, the following must
be noted: Even if all the operations supported by an instance of type `T` are
defined for the entire range of values for such a type, an `optional<T>`
extends such a set of values with a new value for which most
(otherwise valid) operations are not defined in terms of `T`.
Furthermore, since `optional<T>` itself is merely a `T` wrapper (modeling a `T`
supertype), any attempt to define such operations upon uninitialized optionals
will be totally artificial w.r.t. `T`.
This library chooses an interface which follows from `T`'s interface only for
those operations which are well defined (w.r.t the type `T`) even if any of the
operands are uninitialized. These operations include: construction,
copy-construction, assignment, swap and relational operations.
For the value access operations, which are undefined (w.r.t the type `T`) when
the operand is uninitialized, a different interface is chosen (which will be
explained next).
Also, the presence of the possibly uninitialized state requires additional
operations not provided by `T` itself which are supported by a special interface.
[heading Lexically-hinted Value Access in the presence of possibly
untitialized optional objects: The operators * and ->]
A relevant feature of a pointer is that it can have a [*null pointer value].
This is a ['special] value which is used to indicate that the pointer is not
referring to any object at all. In other words, null pointer values convey
the notion of inexistent objects.
This meaning of the null pointer value allowed pointers to became a ['de
facto] standard for handling optional objects because all you have to do
to refer to a value which you don't really have is to use a null pointer
value of the appropriate type. Pointers have been used for decades—from
the days of C APIs to modern C++ libraries—to ['refer] to optional (that is,
possibly inexistent) objects; particularly as optional arguments to a
function, but also quite often as optional data members.
The possible presence of a null pointer value makes the operations that
access the pointee's value possibly undefined, therefore, expressions which
use dereference and access operators, such as: `( *p = 2 )` and `( p->foo() )`,
implicitly convey the notion of optionality, and this information is tied to
the ['syntax] of the expressions. That is, the presence of operators `*` and `->`
tell by themselves —without any additional context— that the expression will
be undefined unless the implied pointee actually exist.
Such a ['de facto] idiom for referring to optional objects can be formalized
in the form of a concept: the __OPTIONAL_POINTEE__ concept.
This concept captures the syntactic usage of operators `*`, `->` and
conversion to `bool` to convey the notion of optionality.
However, pointers are good to [_refer] to optional objects, but not particularly
good to handle the optional objects in all other respects, such as initializing
or moving/copying them. The problem resides in the shallow-copy of pointer
semantics: if you need to effectively move or copy the object, pointers alone
are not enough. The problem is that copies of pointers do not imply copies of
pointees. For example, as was discussed in the motivation, pointers alone
cannot be used to return optional objects from a function because the object
must move outside from the function and into the caller's context.
A solution to the shallow-copy problem that is often used is to resort to
dynamic allocation and use a smart pointer to automatically handle the details
of this. For example, if a function is to optionally return an object `X`, it can
use `shared_ptr<X>` as the return value. However, this requires dynamic allocation
of `X`. If `X` is a built-in or small POD, this technique is very poor in terms of
required resources. Optional objects are essentially values so it is very
convenient to be able to use automatic storage and deep-copy semantics to
manipulate optional values just as we do with ordinary values. Pointers do
not have this semantics, so are inappropriate for the initialization and
transport of optional values, yet are quite convenient for handling the access
to the possible undefined value because of the idiomatic aid present in the
__OPTIONAL_POINTEE__ concept incarnated by pointers.
[heading Optional<T> as a model of OptionalPointee]
For value access operations `optional<>` uses operators `*` and `->` to
lexically warn about the possibly uninitialized state appealing to the
familiar pointer semantics w.r.t. to null pointers.
[warning
However, it is particularly important to note that `optional<>` objects
are not pointers. [_`optional<>` is not, and does not model, a pointer].
]
For instance, `optional<>` does not have shallow-copy so does not alias:
two different optionals never refer to the ['same] value unless `T` itself is
a reference (but may have ['equivalent] values).
The difference between an `optional<T>` and a pointer must be kept in mind,
particularly because the semantics of relational operators are different:
since `optional<T>` is a value-wrapper, relational operators are deep: they
compare optional values; but relational operators for pointers are shallow:
they do not compare pointee values.
As a result, you might be able to replace `optional<T>` by `T*` on some
situations but not always. Specifically, on generic code written for both,
you cannot use relational operators directly, and must use the template
functions __FUNCTION_EQUAL_POINTEES__ and __FUNCTION_LESS_POINTEES__ instead.
[endsect]
[endsect]

102
doc/examples.qbk Normal file
View File

@ -0,0 +1,102 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Examples]
[section Optional return values]
optional<char> get_async_input()
{
if ( !queue.empty() )
return optional<char>(queue.top());
else return optional<char>(); // uninitialized
}
void receive_async_message()
{
optional<char> rcv ;
// The safe boolean conversion from 'rcv' is used here.
while ( (rcv = get_async_input()) && !timeout() )
output(*rcv);
}
[endsect]
[section Optional local variables]
optional<string> name ;
if ( database.open() )
{
name.reset ( database.lookup(employer_name) ) ;
}
else
{
if ( can_ask_user )
name.reset ( user.ask(employer_name) ) ;
}
if ( name )
print(*name);
else print("employer's name not found!");
[endsect]
[section Optional data members]
class figure
{
public:
figure()
{
// data member 'm_clipping_rect' is uninitialized at this point.
}
void clip_in_rect ( rect const& rect )
{
....
m_clipping_rect.reset ( rect ) ; // initialized here.
}
void draw ( canvas& cvs )
{
if ( m_clipping_rect )
do_clipping(*m_clipping_rect);
cvs.drawXXX(..);
}
// this can return NULL.
rect const* get_clipping_rect() { return get_pointer(m_clipping_rect); }
private :
optional<rect> m_clipping_rect ;
};
[endsect]
[section Bypassing expensive unnecessary default construction]
class ExpensiveCtor { ... } ;
class Fred
{
Fred() : mLargeVector(10000) {}
std::vector< optional<ExpensiveCtor> > mLargeVector ;
} ;
[endsect]
[endsect]

14
doc/html/HTML.manifest Normal file
View File

@ -0,0 +1,14 @@
index.html
boost_optional/development.html
boost_optional/synopsis.html
boost_optional/detailed_semantics.html
boost_optional/examples.html
boost_optional/optional_references.html
boost_optional/rebinding_semantics_for_assignment_of_optional_references.html
boost_optional/in_place_factories.html
boost_optional/a_note_about_optional_bool_.html
boost_optional/exception_safety_guarantees.html
boost_optional/type_requirements.html
boost_optional/implementation_notes.html
boost_optional/dependencies_and_portability.html
boost_optional/acknowledgments.html

View File

@ -0,0 +1,88 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>A note about
optional&lt;bool&gt;</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="in_place_factories.html" title="In-Place Factories">
<link rel="next" href="exception_safety_guarantees.html" title="Exception Safety
Guarantees">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="in_place_factories.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.a_note_about_optional_bool_"></a><a href="a_note_about_optional_bool_.html" title="A note about
optional&lt;bool&gt;">A note about
optional&lt;bool&gt;</a>
</h2></div></div></div>
<p>
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;</span></code> should
be used with special caution and consideration.
</p>
<p>
First, it is functionally similar to a tristate boolean (false,maybe,true)
&#8212;such as <a href="../../../../tribool/index.html" target="_top">boost::tribool</a>&#8212;
except that in a tristate boolean, the maybe state <span class="underline">represents
a valid value</span>, unlike the corresponding state of an uninitialized
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;</span></code>. It
should be carefully considered if an <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;</span></code>
instead of a <code class="computeroutput"><span class="identifier">tribool</span></code> is really
needed.
</p>
<p>
Second, <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code>
provides an implicit conversion to <code class="computeroutput"><span class="keyword">bool</span></code>.
This conversion refers to the initialization state and not to the contained
value. Using <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;</span></code> can
lead to subtle errors due to the implicit <code class="computeroutput"><span class="keyword">bool</span></code>
conversion:
</p>
<pre class="programlisting">
<span class="keyword">void</span> <span class="identifier">foo</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">bar</span><span class="special">()</span>
<span class="special">{</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;</span> <span class="identifier">v</span> <span class="special">=</span> <span class="keyword">try</span><span class="special">();</span>
<span class="comment">// The following intended to pass the value of 'v' to foo():
</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
<span class="comment">// But instead, the initialization state is passed
</span> <span class="comment">// due to a typo: it should have been foo(*v).
</span><span class="special">}</span>
</pre>
<p>
The only implicit conversion is to <code class="computeroutput"><span class="keyword">bool</span></code>,
and it is safe in the sense that typical integral promotions don't apply (i.e.
if <code class="computeroutput"><span class="identifier">foo</span><span class="special">()</span></code>
takes an <code class="computeroutput"><span class="keyword">int</span></code> instead, it won't
compile).
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="in_place_factories.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,126 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Acknowledgments</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="dependencies_and_portability.html" title="Dependencies
and Portability">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.acknowledgments"></a><a href="acknowledgments.html" title="Acknowledgments">Acknowledgments</a>
</h2></div></div></div>
<a name="boost_optional.acknowledgments.pre_formal_review"></a><h4>
<a name="id2645003"></a>
<a href="acknowledgments.html#boost_optional.acknowledgments.pre_formal_review">Pre-formal
review</a>
</h4>
<div class="itemizedlist"><ul type="disc">
<li>
Peter Dimov suggested the name 'optional', and was the first to point out
the need for aligned storage.
</li>
<li>
Douglas Gregor developed 'type_with_alignment', and later Eric Friedman coded
'aligned_storage', which are the core of the optional class implementation.
</li>
<li>
Andrei Alexandrescu and Brian Parker also worked with aligned storage techniques
and their work influenced the current implementation.
</li>
<li>
Gennadiy Rozental made extensive and important comments which shaped the
design.
</li>
<li>
Vesa Karvonen and Douglas Gregor made quite useful comparisons between optional,
variant and any; and made other relevant comments.
</li>
<li>
Douglas Gregor and Peter Dimov commented on comparisons and evaluation in
boolean contexts.
</li>
<li>
Eric Friedman helped understand the issues involved with aligned storage,
move/copy operations and exception safety.
</li>
<li>
Many others have participated with useful comments: Aleksey Gurotov, Kevlin
Henney, David Abrahams, and others I can't recall.
</li>
</ul></div>
<a name="boost_optional.acknowledgments.post_formal_review"></a><h4>
<a name="id2645073"></a>
<a href="acknowledgments.html#boost_optional.acknowledgments.post_formal_review">Post-formal
review</a>
</h4>
<div class="itemizedlist"><ul type="disc">
<li>
William Kempf carefully considered the originally proposed interface and
suggested the new interface which is currently used. He also started and
fueled the discussion about the analogy optional&lt;&gt;/smart pointer and
about relational operators.
</li>
<li>
Peter Dimov, Joel de Guzman, David Abrahams, Tanton Gibbs and Ian Hanson
focused on the relational semantics of optional (originally undefined); concluding
with the fact that the pointer-like interface doesn't make it a pointer so
it shall have deep relational operators.
</li>
<li>
Augustus Saunders also explored the different relational semantics between
optional&lt;&gt; and a pointer and developed the OptionalPointee concept
as an aid against potential conflicts on generic code.
</li>
<li>
Joel de Guzman noticed that optional&lt;&gt; can be seen as an API on top
of variant&lt;T,nil_t&gt;.
</li>
<li>
Dave Gomboc explained the meaning and usage of the Haskell analog to optional&lt;&gt;:
the Maybe type constructor (analogy originally pointed out by David Sankel).
</li>
<li>
Other comments were posted by Vincent Finn, Anthony Williams, Ed Brey, Rob
Stewart, and others.
</li>
<li>
Joel de Guzman made the case for the support of references and helped with
the proper semantics.
</li>
<li>
Mat Marcus shown the virtues of a value-oriented interface, influencing the
current design, and contributed the idea of "none".
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,50 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Dependencies
and Portability</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="implementation_notes.html" title="Implementation Notes">
<link rel="next" href="acknowledgments.html" title="Acknowledgments">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="implementation_notes.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.dependencies_and_portability"></a><a href="dependencies_and_portability.html" title="Dependencies
and Portability">Dependencies
and Portability</a>
</h2></div></div></div>
<p>
The implementation uses <code class="computeroutput"><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">alignment_of</span><span class="special">.</span><span class="identifier">hpp</span></code> and
<code class="computeroutput"><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">type_with_alignment</span><span class="special">.</span><span class="identifier">hpp</span></code>
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="implementation_notes.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,412 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Development</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="next" href="synopsis.html" title="Synopsis">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.development"></a><a href="development.html" title="Development">Development</a>
</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="development.html#boost_optional.development.the_models">The models</a></span></dt>
<dt><span class="section"><a href="development.html#boost_optional.development.the_semantics">The semantics</a></span></dt>
<dt><span class="section"><a href="development.html#boost_optional.development.the_interface">The Interface</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.development.the_models"></a><a href="development.html#boost_optional.development.the_models" title="The models">The models</a>
</h3></div></div></div>
<p>
In C++, we can <span class="emphasis"><em>declare</em></span> an object (a variable) of type
<code class="computeroutput"><span class="identifier">T</span></code>, and we can give this variable
an <span class="emphasis"><em>initial value</em></span> (through an <span class="emphasis"><em>initializer</em></span>.
(c.f. 8.5)). When a declaration includes a non-empty initializer (an initial
value is given), it is said that the object has been initialized. If the
declaration uses an empty initializer (no initial value is given), and neither
default nor value initialization applies, it is said that the object is
<span class="bold"><strong>uninitialized</strong></span>. Its actual value exist but
has an <span class="emphasis"><em>indeterminate initial value</em></span> (c.f. 8.5.9). <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> intends
to formalize the notion of initialization (or lack of it) allowing a program
to test whether an object has been initialized and stating that access to
the value of an uninitialized object is undefined behavior. That is, when
a variable is declared as <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
and no initial value is given, the variable is <span class="emphasis"><em>formally</em></span>
uninitialized. A formally uninitialized optional object has conceptually
no value at all and this situation can be tested at runtime. It is formally
<span class="emphasis"><em>undefined behavior</em></span> to try to access the value of an
uninitialized optional. An uninitialized optional can be assigned a value,
in which case its initialization state changes to initialized. Furthermore,
given the formal treatment of initialization states in optional objects,
it is even possible to reset an optional to <span class="emphasis"><em>uninitialized</em></span>.
</p>
<p>
In C++ there is no formal notion of uninitialized objects, which means that
objects always have an initial value even if indeterminate. As discussed
on the previous section, this has a drawback because you need additional
information to tell if an object has been effectively initialized. One of
the typical ways in which this has been historically dealt with is via a
special value: <code class="computeroutput"><span class="identifier">EOF</span></code>, <code class="computeroutput"><span class="identifier">npos</span></code>, -1, etc... This is equivalent to
adding the special value to the set of possible values of a given type. This
super set of <code class="computeroutput"><span class="identifier">T</span></code> plus some
<span class="emphasis"><em>nil_t</em></span>&#8212;were <code class="computeroutput"><span class="identifier">nil_t</span></code>
is some stateless POD-can be modeled in modern languages as a <span class="bold"><strong>discriminated
union</strong></span> of T and nil_t. Discriminated unions are often called <span class="emphasis"><em>variants</em></span>.
A variant has a <span class="emphasis"><em>current type</em></span>, which in our case is either
<code class="computeroutput"><span class="identifier">T</span></code> or <code class="computeroutput"><span class="identifier">nil_t</span></code>.
Using the <a href="../../../../variant/index.html" target="_top">Boost.Variant</a>
library, this model can be implemented in terms of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">nil_t</span><span class="special">&gt;</span></code>.
There is precedent for a discriminated union as a model for an optional value:
the <a href="http://www.haskell.org/" target="_top">Haskell</a> <span class="bold"><strong>Maybe</strong></span>
built-in type constructor. Thus, a discriminated union <code class="computeroutput"><span class="identifier">T</span><span class="special">+</span><span class="identifier">nil_t</span></code>
serves as a conceptual foundation.
</p>
<p>
A <code class="computeroutput"><span class="identifier">variant</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">nil_t</span><span class="special">&gt;</span></code> follows naturally from the traditional
idiom of extending the range of possible values adding an additional sentinel
value with the special meaning of <span class="emphasis"><em>Nothing</em></span>. However,
this additional <span class="emphasis"><em>Nothing</em></span> value is largely irrelevant
for our purpose since our goal is to formalize the notion of uninitialized
objects and, while a special extended value can be used to convey that meaning,
it is not strictly necessary in order to do so.
</p>
<p>
The observation made in the last paragraph about the irrelevant nature of
the additional <code class="computeroutput"><span class="identifier">nil_t</span></code> with
respect to <span class="underline">purpose</span> of <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> suggests
an alternative model: a <span class="emphasis"><em>container</em></span> that either has a
value of <code class="computeroutput"><span class="identifier">T</span></code> or nothing.
</p>
<p>
As of this writing I don't know of any precedence for a variable-size fixed-capacity
(of 1) stack-based container model for optional values, yet I believe this
is the consequence of the lack of practical implementations of such a container
rather than an inherent shortcoming of the container model.
</p>
<p>
In any event, both the discriminated-union or the single-element container
models serve as a conceptual ground for a class representing optional&#8212;i.e.
possibly uninitialized&#8212;objects. For instance, these models show the <span class="emphasis"><em>exact</em></span>
semantics required for a wrapper of optional values:
</p>
<p>
Discriminated-union:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<span class="bold"><strong>deep-copy</strong></span> semantics: copies of the variant
implies copies of the value.
</li>
<li>
<span class="bold"><strong>deep-relational</strong></span> semantics: comparisons
between variants matches both current types and values
</li>
<li>
If the variant's current type is <code class="computeroutput"><span class="identifier">T</span></code>,
it is modeling an <span class="emphasis"><em>initialized</em></span> optional.
</li>
<li>
If the variant's current type is not <code class="computeroutput"><span class="identifier">T</span></code>,
it is modeling an <span class="emphasis"><em>uninitialized</em></span> optional.
</li>
<li>
Testing if the variant's current type is <code class="computeroutput"><span class="identifier">T</span></code>
models testing if the optional is initialized
</li>
<li>
Trying to extract a <code class="computeroutput"><span class="identifier">T</span></code> from
a variant when its current type is not <code class="computeroutput"><span class="identifier">T</span></code>,
models the undefined behavior of trying to access the value of an uninitialized
optional
</li>
</ul></div>
<p>
Single-element container:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<span class="bold"><strong>deep-copy</strong></span> semantics: copies of the container
implies copies of the value.
</li>
<li>
<span class="bold"><strong>deep-relational</strong></span> semantics: comparisons
between containers compare container size and if match, contained value
</li>
<li>
If the container is not empty (contains an object of type <code class="computeroutput"><span class="identifier">T</span></code>), it is modeling an <span class="emphasis"><em>initialized</em></span>
optional.
</li>
<li>
If the container is empty, it is modeling an <span class="emphasis"><em>uninitialized</em></span>
optional.
</li>
<li>
Testing if the container is empty models testing if the optional is initialized
</li>
<li>
Trying to extract a <code class="computeroutput"><span class="identifier">T</span></code> from
an empty container models the undefined behavior of trying to access the
value of an uninitialized optional
</li>
</ul></div>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.development.the_semantics"></a><a href="development.html#boost_optional.development.the_semantics" title="The semantics">The semantics</a>
</h3></div></div></div>
<p>
Objects of type <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
are intended to be used in places where objects of type <code class="computeroutput"><span class="identifier">T</span></code>
would but which might be uninitialized. Hence, <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>'s
purpose is to formalize the additional possibly uninitialized state. From
the perspective of this role, <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
can have the same operational semantics of <code class="computeroutput"><span class="identifier">T</span></code>
plus the additional semantics corresponding to this special state. As such,
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> could
be thought of as a <span class="emphasis"><em>supertype</em></span> of <code class="computeroutput"><span class="identifier">T</span></code>.
Of course, we can't do that in C++, so we need to compose the desired semantics
using a different mechanism. Doing it the other way around, that is, making
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> a
<span class="emphasis"><em>subtype</em></span> of <code class="computeroutput"><span class="identifier">T</span></code>
is not only conceptually wrong but also impractical: it is not allowed to
derive from a non-class type, such as a built-in type.
</p>
<p>
We can draw from the purpose of <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
the required basic semantics:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<span class="bold"><strong>Default Construction:</strong></span> To introduce a formally
uninitialized wrapped object.
</li>
<li>
<span class="bold"><strong>Direct Value Construction via copy:</strong></span> To
introduce a formally initialized wrapped object whose value is obtained
as a copy of some object.
</li>
<li>
<span class="bold"><strong>Deep Copy Construction:</strong></span> To obtain a new
yet equivalent wrapped object.
</li>
<li>
<span class="bold"><strong>Direct Value Assignment (upon initialized):</strong></span>
To assign a value to the wrapped object.
</li>
<li>
<span class="bold"><strong>Direct Value Assignment (upon uninitialized):</strong></span>
To initialize the wrapped object with a value obtained as a copy of some
object.
</li>
<li>
<span class="bold"><strong>Assignment (upon initialized):</strong></span> To assign
to the wrapped object the value of another wrapped object.
</li>
<li>
<span class="bold"><strong>Assignment (upon uninitialized):</strong></span> To initialize
the wrapped object with value of another wrapped object.
</li>
<li>
<span class="bold"><strong>Deep Relational Operations (when supported by the
type T):</strong></span> To compare wrapped object values taking into account
the presence of uninitialized states.
</li>
<li>
<span class="bold"><strong>Value access:</strong></span> To unwrap the wrapped object.
</li>
<li>
<span class="bold"><strong>Initialization state query:</strong></span> To determine
if the object is formally initialized or not.
</li>
<li>
<span class="bold"><strong>Swap:</strong></span> To exchange wrapped objects. (with
whatever exception safety guarantees are provided by <code class="computeroutput"><span class="identifier">T</span></code>'s
swap).
</li>
<li>
<span class="bold"><strong>De-initialization:</strong></span> To release the wrapped
object (if any) and leave the wrapper in the uninitialized state.
</li>
</ul></div>
<p>
Additional operations are useful, such as converting constructors and converting
assignments, in-place construction and assignment, and safe value access
via a pointer to the wrapped object or null.
</p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.development.the_interface"></a><a href="development.html#boost_optional.development.the_interface" title="The Interface">The Interface</a>
</h3></div></div></div>
<p>
Since the purpose of optional is to allow us to use objects with a formal
uninitialized additional state, the interface could try to follow the interface
of the underlying <code class="computeroutput"><span class="identifier">T</span></code> type
as much as possible. In order to choose the proper degree of adoption of
the native <code class="computeroutput"><span class="identifier">T</span></code> interface, the
following must be noted: Even if all the operations supported by an instance
of type <code class="computeroutput"><span class="identifier">T</span></code> are defined for
the entire range of values for such a type, an <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
extends such a set of values with a new value for which most (otherwise valid)
operations are not defined in terms of <code class="computeroutput"><span class="identifier">T</span></code>.
</p>
<p>
Furthermore, since <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
itself is merely a <code class="computeroutput"><span class="identifier">T</span></code> wrapper
(modeling a <code class="computeroutput"><span class="identifier">T</span></code> supertype),
any attempt to define such operations upon uninitialized optionals will be
totally artificial w.r.t. <code class="computeroutput"><span class="identifier">T</span></code>.
</p>
<p>
This library chooses an interface which follows from <code class="computeroutput"><span class="identifier">T</span></code>'s
interface only for those operations which are well defined (w.r.t the type
<code class="computeroutput"><span class="identifier">T</span></code>) even if any of the operands
are uninitialized. These operations include: construction, copy-construction,
assignment, swap and relational operations.
</p>
<p>
For the value access operations, which are undefined (w.r.t the type <code class="computeroutput"><span class="identifier">T</span></code>) when the operand is uninitialized, a
different interface is chosen (which will be explained next).
</p>
<p>
Also, the presence of the possibly uninitialized state requires additional
operations not provided by <code class="computeroutput"><span class="identifier">T</span></code>
itself which are supported by a special interface.
</p>
<a name="boost_optional.development.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_untitialized_optional_objects__the_operators___and___gt_"></a><h5>
<a name="id2615375"></a>
<a href="development.html#boost_optional.development.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_untitialized_optional_objects__the_operators___and___gt_">Lexically-hinted
Value Access in the presence of possibly untitialized optional objects: The
operators * and -&gt;</a>
</h5>
<p>
A relevant feature of a pointer is that it can have a <span class="bold"><strong>null
pointer value</strong></span>. This is a <span class="emphasis"><em>special</em></span> value which
is used to indicate that the pointer is not referring to any object at all.
In other words, null pointer values convey the notion of inexistent objects.
</p>
<p>
This meaning of the null pointer value allowed pointers to became a <span class="emphasis"><em>de
facto</em></span> standard for handling optional objects because all you have
to do to refer to a value which you don't really have is to use a null pointer
value of the appropriate type. Pointers have been used for decades&#8212;from
the days of C APIs to modern C++ libraries&#8212;to <span class="emphasis"><em>refer</em></span>
to optional (that is, possibly inexistent) objects; particularly as optional
arguments to a function, but also quite often as optional data members.
</p>
<p>
The possible presence of a null pointer value makes the operations that access
the pointee's value possibly undefined, therefore, expressions which use
dereference and access operators, such as: <code class="computeroutput"><span class="special">(</span>
<span class="special">*</span><span class="identifier">p</span> <span class="special">=</span> <span class="number">2</span> <span class="special">)</span></code>
and <code class="computeroutput"><span class="special">(</span> <span class="identifier">p</span><span class="special">-&gt;</span><span class="identifier">foo</span><span class="special">()</span> <span class="special">)</span></code>, implicitly
convey the notion of optionality, and this information is tied to the <span class="emphasis"><em>syntax</em></span>
of the expressions. That is, the presence of operators <code class="computeroutput"><span class="special">*</span></code>
and <code class="computeroutput"><span class="special">-&gt;</span></code> tell by themselves
&#8212;without any additional context&#8212; that the expression will be undefined
unless the implied pointee actually exist.
</p>
<p>
Such a <span class="emphasis"><em>de facto</em></span> idiom for referring to optional objects
can be formalized in the form of a concept: the <a href="../../../../utility/OptionalPointee.html" target="_top">OptionalPointee</a>
concept. This concept captures the syntactic usage of operators <code class="computeroutput"><span class="special">*</span></code>, <code class="computeroutput"><span class="special">-&gt;</span></code>
and conversion to <code class="computeroutput"><span class="keyword">bool</span></code> to convey
the notion of optionality.
</p>
<p>
However, pointers are good to <span class="underline">refer</span>
to optional objects, but not particularly good to handle the optional objects
in all other respects, such as initializing or moving/copying them. The problem
resides in the shallow-copy of pointer semantics: if you need to effectively
move or copy the object, pointers alone are not enough. The problem is that
copies of pointers do not imply copies of pointees. For example, as was discussed
in the motivation, pointers alone cannot be used to return optional objects
from a function because the object must move outside from the function and
into the caller's context.
</p>
<p>
A solution to the shallow-copy problem that is often used is to resort to
dynamic allocation and use a smart pointer to automatically handle the details
of this. For example, if a function is to optionally return an object <code class="computeroutput"><span class="identifier">X</span></code>, it can use <code class="computeroutput"><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">&gt;</span></code>
as the return value. However, this requires dynamic allocation of <code class="computeroutput"><span class="identifier">X</span></code>. If <code class="computeroutput"><span class="identifier">X</span></code>
is a built-in or small POD, this technique is very poor in terms of required
resources. Optional objects are essentially values so it is very convenient
to be able to use automatic storage and deep-copy semantics to manipulate
optional values just as we do with ordinary values. Pointers do not have
this semantics, so are inappropriate for the initialization and transport
of optional values, yet are quite convenient for handling the access to the
possible undefined value because of the idiomatic aid present in the <a href="../../../../utility/OptionalPointee.html" target="_top">OptionalPointee</a> concept
incarnated by pointers.
</p>
<a name="boost_optional.development.the_interface.optional_lt_t_gt__as_a_model_of_optionalpointee"></a><h5>
<a name="id2615714"></a>
<a href="development.html#boost_optional.development.the_interface.optional_lt_t_gt__as_a_model_of_optionalpointee">Optional&lt;T&gt;
as a model of OptionalPointee</a>
</h5>
<p>
For value access operations <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code> uses operators <code class="computeroutput"><span class="special">*</span></code>
and <code class="computeroutput"><span class="special">-&gt;</span></code> to lexically warn
about the possibly uninitialized state appealing to the familiar pointer
semantics w.r.t. to null pointers.
</p>
<div class="warning"><table border="0" summary="Warning">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/html/images/warning.png"></td>
<th align="left">Warning</th>
</tr>
<tr><td align="left" valign="top"><p>
However, it is particularly important to note that <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code> objects are not pointers. <span class="underline"><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code> is not, and does not model, a pointer</span>.
</p></td></tr>
</table></div>
<p>
For instance, <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code>
does not have shallow-copy so does not alias: two different optionals never
refer to the <span class="emphasis"><em>same</em></span> value unless <code class="computeroutput"><span class="identifier">T</span></code>
itself is a reference (but may have <span class="emphasis"><em>equivalent</em></span> values).
The difference between an <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
and a pointer must be kept in mind, particularly because the semantics of
relational operators are different: since <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
is a value-wrapper, relational operators are deep: they compare optional
values; but relational operators for pointers are shallow: they do not compare
pointee values. As a result, you might be able to replace <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
by <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code>
on some situations but not always. Specifically, on generic code written
for both, you cannot use relational operators directly, and must use the
template functions <a href="../../../../utility/OptionalPointee.html#equal" target="_top"><code class="computeroutput"><span class="identifier">equal_pointees</span><span class="special">()</span></code></a>
and <a href="../../../../utility/OptionalPointee.html#less" target="_top"><code class="computeroutput"><span class="identifier">less_pointees</span><span class="special">()</span></code></a>
instead.
</p>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,155 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Examples</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="detailed_semantics.html" title="Detailed Semantics">
<link rel="next" href="optional_references.html" title="Optional references">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="detailed_semantics.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.examples"></a><a href="examples.html" title="Examples">Examples</a>
</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="examples.html#boost_optional.examples.optional_return_values">Optional
return values</a></span></dt>
<dt><span class="section"><a href="examples.html#boost_optional.examples.optional_local_variables">Optional
local variables</a></span></dt>
<dt><span class="section"><a href="examples.html#boost_optional.examples.optional_data_members">Optional
data members</a></span></dt>
<dt><span class="section"><a href="examples.html#boost_optional.examples.bypassing_expensive_unnecessary_default_construction">Bypassing
expensive unnecessary default construction</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.examples.optional_return_values"></a><a href="examples.html#boost_optional.examples.optional_return_values" title="Optional
return values">Optional
return values</a>
</h3></div></div></div>
<pre class="programlisting">
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;</span> <span class="identifier">get_async_input</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">queue</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span> <span class="special">)</span>
<span class="keyword">return</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;(</span><span class="identifier">queue</span><span class="special">.</span><span class="identifier">top</span><span class="special">());</span>
<span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;();</span> <span class="comment">// uninitialized
</span><span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">receive_async_message</span><span class="special">()</span>
<span class="special">{</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;</span> <span class="identifier">rcv</span> <span class="special">;</span>
<span class="comment">// The safe boolean conversion from 'rcv' is used here.
</span> <span class="keyword">while</span> <span class="special">(</span> <span class="special">(</span><span class="identifier">rcv</span> <span class="special">=</span> <span class="identifier">get_async_input</span><span class="special">())</span> <span class="special">&amp;&amp;</span> <span class="special">!</span><span class="identifier">timeout</span><span class="special">()</span> <span class="special">)</span>
<span class="identifier">output</span><span class="special">(*</span><span class="identifier">rcv</span><span class="special">);</span>
<span class="special">}</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.examples.optional_local_variables"></a><a href="examples.html#boost_optional.examples.optional_local_variables" title="Optional
local variables">Optional
local variables</a>
</h3></div></div></div>
<pre class="programlisting">
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">name</span> <span class="special">;</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">database</span><span class="special">.</span><span class="identifier">open</span><span class="special">()</span> <span class="special">)</span>
<span class="special">{</span>
<span class="identifier">name</span><span class="special">.</span><span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">database</span><span class="special">.</span><span class="identifier">lookup</span><span class="special">(</span><span class="identifier">employer_name</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
<span class="keyword">else</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">can_ask_user</span> <span class="special">)</span>
<span class="identifier">name</span><span class="special">.</span><span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">user</span><span class="special">.</span><span class="identifier">ask</span><span class="special">(</span><span class="identifier">employer_name</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">name</span> <span class="special">)</span>
<span class="identifier">print</span><span class="special">(*</span><span class="identifier">name</span><span class="special">);</span>
<span class="keyword">else</span> <span class="identifier">print</span><span class="special">(</span><span class="string">"employer's name not found!"</span><span class="special">);</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.examples.optional_data_members"></a><a href="examples.html#boost_optional.examples.optional_data_members" title="Optional
data members">Optional
data members</a>
</h3></div></div></div>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">figure</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">figure</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// data member 'm_clipping_rect' is uninitialized at this point.
</span> <span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">clip_in_rect</span> <span class="special">(</span> <span class="identifier">rect</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rect</span> <span class="special">)</span>
<span class="special">{</span>
<span class="special">....</span>
<span class="identifier">m_clipping_rect</span><span class="special">.</span><span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">rect</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// initialized here.
</span> <span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">draw</span> <span class="special">(</span> <span class="identifier">canvas</span><span class="special">&amp;</span> <span class="identifier">cvs</span> <span class="special">)</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">m_clipping_rect</span> <span class="special">)</span>
<span class="identifier">do_clipping</span><span class="special">(*</span><span class="identifier">m_clipping_rect</span><span class="special">);</span>
<span class="identifier">cvs</span><span class="special">.</span><span class="identifier">drawXXX</span><span class="special">(..);</span>
<span class="special">}</span>
<span class="comment">// this can return NULL.
</span> <span class="identifier">rect</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_clipping_rect</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">get_pointer</span><span class="special">(</span><span class="identifier">m_clipping_rect</span><span class="special">);</span> <span class="special">}</span>
<span class="keyword">private</span> <span class="special">:</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">rect</span><span class="special">&gt;</span> <span class="identifier">m_clipping_rect</span> <span class="special">;</span>
<span class="special">};</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_optional.examples.bypassing_expensive_unnecessary_default_construction"></a><a href="examples.html#boost_optional.examples.bypassing_expensive_unnecessary_default_construction" title="Bypassing
expensive unnecessary default construction">Bypassing
expensive unnecessary default construction</a>
</h3></div></div></div>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">ExpensiveCtor</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span> <span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">Fred</span>
<span class="special">{</span>
<span class="identifier">Fred</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">mLargeVector</span><span class="special">(</span><span class="number">10000</span><span class="special">)</span> <span class="special">{}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">ExpensiveCtor</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mLargeVector</span> <span class="special">;</span>
<span class="special">}</span> <span class="special">;</span>
</pre>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="detailed_semantics.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,144 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Exception Safety
Guarantees</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="a_note_about_optional_bool_.html" title="A note about
optional&lt;bool&gt;">
<link rel="next" href="type_requirements.html" title="Type requirements">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.exception_safety_guarantees"></a><a href="exception_safety_guarantees.html" title="Exception Safety
Guarantees">Exception Safety
Guarantees</a>
</h2></div></div></div>
<p>
Because of the current implementation (see <a href="../index.html#optional_implementation_notes">Implementation
Notes</a>), all of the assignment methods:
</p>
<div class="itemizedlist"><ul type="disc">
<li><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span>
<span class="keyword">const</span><span class="special">&amp;</span>
<span class="special">)</span></code></li>
<li><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="special">)</span></code></li>
<li><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span>
<span class="keyword">const</span><span class="special">&amp;</span>
<span class="special">)</span></code></li>
<li><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span>
<span class="keyword">const</span><span class="special">&amp;</span>
<span class="special">)</span></code></li>
<li><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span>
<span class="keyword">const</span><span class="special">&amp;</span>
<span class="special">)</span> </code></li>
<li><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;:::</span><span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;)</span></code></li>
</ul></div>
<p>
Can only <span class="emphasis"><em>guarantee</em></span> the <span class="underline">basic
exception safety</span>: The lvalue optional is left <span class="underline">uninitialized</span>
if an exception is thrown (any previous value is <span class="emphasis"><em>first</em></span>
destroyed using <code class="computeroutput"><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>)
</p>
<p>
On the other hand, the <span class="emphasis"><em>uninitializing</em></span> methods:
</p>
<div class="itemizedlist"><ul type="disc">
<li><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">none_t</span> <span class="special">)</span></code></li>
<li><code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reset</span><span class="special">()</span></code></li>
</ul></div>
<p>
Provide the no-throw guarantee (assuming a no-throw <code class="computeroutput"><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>)
</p>
<p>
However, since <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code>
itself doesn't throw any exceptions, the only source for exceptions here are
<code class="computeroutput"><span class="identifier">T</span></code>'s constructor, so if you
know the exception guarantees for <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span> <span class="special">(</span>
<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="special">)</span></code>, you
know that <code class="computeroutput"><span class="identifier">optional</span></code>'s assignment
and reset has the same guarantees.
</p>
<pre class="programlisting">
<span class="comment">//
</span><span class="comment">// Case 1: Exception thrown during assignment.
</span><span class="comment">//
</span><span class="identifier">T</span> <span class="identifier">v0</span><span class="special">(</span><span class="number">123</span><span class="special">);</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">opt0</span><span class="special">(</span><span class="identifier">v0</span><span class="special">);</span>
<span class="keyword">try</span>
<span class="special">{</span>
<span class="identifier">T</span> <span class="identifier">v1</span><span class="special">(</span><span class="number">456</span><span class="special">);</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">opt1</span><span class="special">(</span><span class="identifier">v1</span><span class="special">);</span>
<span class="identifier">opt0</span> <span class="special">=</span> <span class="identifier">opt1</span> <span class="special">;</span>
<span class="comment">// If no exception was thrown, assignment succeeded.
</span> <span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">opt0</span> <span class="special">==</span> <span class="identifier">v1</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
<span class="keyword">catch</span><span class="special">(...)</span>
<span class="special">{</span>
<span class="comment">// If any exception was thrown, 'opt0' is reset to uninitialized.
</span> <span class="identifier">assert</span><span class="special">(</span> <span class="special">!</span><span class="identifier">opt0</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
<span class="comment">//
</span><span class="comment">// Case 2: Exception thrown during reset(v)
</span><span class="comment">//
</span><span class="identifier">T</span> <span class="identifier">v0</span><span class="special">(</span><span class="number">123</span><span class="special">);</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v0</span><span class="special">);</span>
<span class="keyword">try</span>
<span class="special">{</span>
<span class="identifier">T</span> <span class="identifier">v1</span><span class="special">(</span><span class="number">456</span><span class="special">);</span>
<span class="identifier">opt</span><span class="special">.</span><span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">v1</span> <span class="special">)</span> <span class="special">;</span>
<span class="comment">// If no exception was thrown, reset succeeded.
</span> <span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v1</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
<span class="keyword">catch</span><span class="special">(...)</span>
<span class="special">{</span>
<span class="comment">// If any exception was thrown, 'opt' is reset to uninitialized.
</span> <span class="identifier">assert</span><span class="special">(</span> <span class="special">!</span><span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
</pre>
<a name="boost_optional.exception_safety_guarantees.swap"></a><h4>
<a name="id2644478"></a>
<a href="exception_safety_guarantees.html#boost_optional.exception_safety_guarantees.swap">Swap</a>
</h4>
<p>
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;,</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="special">)</span></code> has the same exception guarantee as <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span><span class="identifier">T</span><span class="special">&amp;)</span></code>
when both optionals are initialized. If only one of the optionals is initialized,
it gives the same <span class="emphasis"><em>basic</em></span> exception guarantee as <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reset</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="special">)</span></code> (since
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reset</span><span class="special">()</span></code> doesn't throw). If none of the optionals
is initialized, it has no-throw guarantee since it is a no-op.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,56 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implementation Notes</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="type_requirements.html" title="Type requirements">
<link rel="next" href="dependencies_and_portability.html" title="Dependencies
and Portability">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="type_requirements.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.implementation_notes"></a><a href="implementation_notes.html" title="Implementation Notes">Implementation Notes</a>
</h2></div></div></div>
<p>
<code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is
currently implemented using a custom aligned storage facility built from <code class="computeroutput"><span class="identifier">alignment_of</span></code> and <code class="computeroutput"><span class="identifier">type_with_alignment</span></code>
(both from Type Traits). It uses a separate boolean flag to indicate the initialization
state. Placement new with <code class="computeroutput"><span class="identifier">T</span></code>'s
copy constructor and <code class="computeroutput"><span class="identifier">T</span></code>'s destructor
are explicitly used to initialize,copy and destroy optional values. As a result,
<code class="computeroutput"><span class="identifier">T</span></code>'s default constructor is
effectively by-passed, but the exception guarantees are basic. It is planned
to replace the current implementation with another with stronger exception
safety, such as a future <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span></code>.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="type_requirements.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,204 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>In-Place Factories</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding
semantics for assignment of optional references">
<link rel="next" href="a_note_about_optional_bool_.html" title="A note about
optional&lt;bool&gt;">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.in_place_factories"></a><a href="in_place_factories.html" title="In-Place Factories">In-Place Factories</a>
</h2></div></div></div>
<p>
One of the typical problems with wrappers and containers is that their interfaces
usually provide an operation to initialize or assign the contained object as
a copy of some other object. This not only requires the underlying type to
be <a href="../../../../utility/CopyConstructible.html" target="_top">Copy Constructible</a>,
but also requires the existence of a fully constructed object, often temporary,
just to follow the copy from:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">X</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="special">(</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">:::</span><span class="identifier">string</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span> <span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">W</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="identifier">wrapped_</span> <span class="special">;</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">X</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">wrapped_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{}</span>
<span class="special">}</span> <span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// Temporary object created.
</span> <span class="identifier">W</span> <span class="special">(</span> <span class="identifier">X</span><span class="special">(</span><span class="number">123</span><span class="special">,</span><span class="string">"hello"</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
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 only needs
to supply the arguments to the constructor to use in the wrapped object construction.
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">W</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="identifier">wrapped_</span> <span class="special">;</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">X</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">wrapped_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{}</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="keyword">int</span> <span class="identifier">a0</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">a1</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">wrapped_</span><span class="special">(</span><span class="identifier">a0</span><span class="special">,</span><span class="identifier">a1</span><span class="special">)</span> <span class="special">{}</span>
<span class="special">}</span> <span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// Wrapped object constructed in-place
</span> <span class="comment">// No temporary created.
</span> <span class="identifier">W</span> <span class="special">(</span><span class="number">123</span><span class="special">,</span><span class="string">"hello"</span><span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
A limitation of this method is that it doesn't scale well to wrapped objects
with multiple constructors nor to generic code were the constructor overloads
are unknown.
</p>
<p>
The solution presented in this library is the family of <span class="bold"><strong>InPlaceFactories</strong></span>
and <span class="bold"><strong>TypedInPlaceFactories</strong></span>. These factories
are a family of classes which encapsulate an increasing number of arbitrary
constructor parameters and supply a method to construct an object of a given
type using those parameters at an address specified by the user via placement
new.
</p>
<p>
For example, one member of this family looks like:
</p>
<pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A0</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory2</span>
<span class="special">{</span>
<span class="identifier">A0</span> <span class="identifier">m_a0</span> <span class="special">;</span> <span class="identifier">A1</span> <span class="identifier">m_a1</span> <span class="special">;</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">TypedInPlaceFactory2</span><span class="special">(</span> <span class="identifier">A0</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a0</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a1</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_a0</span><span class="special">(</span><span class="identifier">a0</span><span class="special">),</span> <span class="identifier">m_a1</span><span class="special">(</span><span class="identifier">a1</span><span class="special">)</span> <span class="special">{}</span>
<span class="keyword">void</span> <span class="identifier">construct</span> <span class="special">(</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">)</span> <span class="special">{</span> <span class="keyword">new</span> <span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="identifier">T</span><span class="special">(</span><span class="identifier">m_a0</span><span class="special">,</span><span class="identifier">m_a1</span><span class="special">)</span> <span class="special">;</span> <span class="special">}</span>
<span class="special">}</span> <span class="special">;</span>
</pre>
<p>
A wrapper class aware of this can use it as:
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">W</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="identifier">wrapped_</span> <span class="special">;</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">X</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">wrapped_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{}</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fac</span> <span class="special">)</span> <span class="special">{</span> <span class="identifier">fac</span><span class="special">.</span><span class="identifier">construct</span><span class="special">(&amp;</span><span class="identifier">wrapped_</span><span class="special">)</span> <span class="special">;</span> <span class="special">}</span>
<span class="special">}</span> <span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// Wrapped object constructed in-place via a TypedInPlaceFactory.
</span> <span class="comment">// No temporary created.
</span> <span class="identifier">W</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory2</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">,</span><span class="keyword">int</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span><span class="identifier">rt</span><span class="special">(</span><span class="number">123</span><span class="special">,</span><span class="string">"hello"</span><span class="special">))</span> <span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
The factories are divided in two groups:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<span class="underline">TypedInPlaceFactories</span>: those which
take the target type as a primary template parameter.
</li>
<li>
<span class="underline">InPlaceFactories</span>: those with a template
<code class="computeroutput"><span class="identifier">construct</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code> member
function taking the target type.
</li>
</ul></div>
<p>
Within each group, all the family members differ only in the number of parameters
allowed.
</p>
<p>
This library provides an overloaded set of helper template functions to construct
these factories without requiring unnecessary template parameters:
</p>
<pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A0</span><span class="special">,...,</span><span class="keyword">class</span> <span class="identifier">AN</span><span class="special">&gt;</span>
<span class="identifier">InPlaceFactoryN</span> <span class="special">&lt;</span><span class="identifier">A0</span><span class="special">,...,</span><span class="identifier">AN</span><span class="special">&gt;</span> <span class="identifier">in_place</span> <span class="special">(</span> <span class="identifier">A0</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AN</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">aN</span><span class="special">)</span> <span class="special">;</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A0</span><span class="special">,...,</span><span class="keyword">class</span> <span class="identifier">AN</span><span class="special">&gt;</span>
<span class="identifier">TypedInPlaceFactoryN</span> <span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">A0</span><span class="special">,...,</span><span class="identifier">AN</span><span class="special">&gt;</span> <span class="identifier">in_place</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a0</span><span class="special">,</span> <span class="identifier">A0</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AN</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">aN</span><span class="special">)</span> <span class="special">;</span>
</pre>
<p>
In-place factories can be used generically by the wrapper and user as follows:
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">W</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="identifier">wrapped_</span> <span class="special">;</span>
<span class="keyword">public</span><span class="special">:</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">X</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">wrapped_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{}</span>
<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">InPlaceFactory</span> <span class="special">&gt;</span>
<span class="identifier">W</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fac</span> <span class="special">)</span> <span class="special">{</span> <span class="identifier">fac</span><span class="special">.</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">X</span><span class="special">&gt;</span><span class="identifier">construct</span><span class="special">(&amp;</span><span class="identifier">wrapped_</span><span class="special">)</span> <span class="special">;</span> <span class="special">}</span>
<span class="special">}</span> <span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// Wrapped object constructed in-place via a InPlaceFactory.
</span> <span class="comment">// No temporary created.
</span> <span class="identifier">W</span> <span class="special">(</span> <span class="identifier">in_place</span><span class="special">(</span><span class="number">123</span><span class="special">,</span><span class="string">"hello"</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
The factories are implemented in the headers: <a href="../../../../../boost/utility/in_place_factory.hpp" target="_top">in_place_factory.hpp</a>
and <a href="../../../../../boost/utility/typed_in_place_factory.hpp" target="_top">typed_in_place_factory.hpp</a>
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,86 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Optional references</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="examples.html" title="Examples">
<link rel="next" href="rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding
semantics for assignment of optional references">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.optional_references"></a><a href="optional_references.html" title="Optional references">Optional references</a>
</h2></div></div></div>
<p>
This library allows the template parameter <code class="computeroutput"><span class="identifier">T</span></code>
to be of reference type: <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>, and to some extent, <code class="computeroutput"><span class="identifier">T</span>
<span class="keyword">const</span><span class="special">&amp;</span></code>.
</p>
<p>
However, since references are not real objects some restrictions apply and
some operations are not available in this case:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
Converting constructors
</li>
<li>
Converting assignment
</li>
<li>
InPlace construction
</li>
<li>
InPlace assignment
</li>
<li>
Value-access via pointer
</li>
</ul></div>
<p>
Also, even though <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
treats it wrapped pseudo-object much as a real value, a true real reference
is stored so aliasing will ocurr:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
Copies of <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
will copy the references but all these references will nonetheless reefer
to the same object.
</li>
<li>
Value-access will actually provide access to the referenced object rather
than the reference itself.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,155 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Rebinding
semantics for assignment of optional references</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="optional_references.html" title="Optional references">
<link rel="next" href="in_place_factories.html" title="In-Place Factories">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.rebinding_semantics_for_assignment_of_optional_references"></a><a href="rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding
semantics for assignment of optional references">Rebinding
semantics for assignment of optional references</a>
</h2></div></div></div>
<p>
If you assign to an <span class="emphasis"><em>uninitialized </em></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
the effect is to bind (for the first time) to the object. Clearly, there is
no other choice.
</p>
<pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">rx</span> <span class="special">=</span> <span class="identifier">x</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">ora</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">orb</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span>
<span class="identifier">ora</span> <span class="special">=</span> <span class="identifier">orb</span> <span class="special">;</span> <span class="comment">// now 'ora' is bound to 'x' through 'rx'
</span><span class="special">*</span><span class="identifier">ora</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> <span class="comment">// Changes value of 'x' through 'ora'
</span><span class="identifier">assert</span><span class="special">(</span><span class="identifier">x</span><span class="special">==</span><span class="number">2</span><span class="special">);</span>
</pre>
<p>
If you assign to a bare C++ reference, the assignment is forwarded to the referenced
object; it's value changes but the reference is never rebound.
</p>
<pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span>
<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span>
<span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">rb</span> <span class="special">;</span> <span class="comment">// Changes the value of 'a' to 'b'
</span><span class="identifier">assert</span><span class="special">(</span><span class="identifier">a</span><span class="special">==</span><span class="identifier">b</span><span class="special">);</span>
<span class="identifier">b</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span>
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">ra</span><span class="special">!=</span><span class="identifier">b</span><span class="special">);</span> <span class="comment">// 'ra' is not rebound to 'b'
</span></pre>
<p>
Now, if you assign to an <span class="emphasis"><em>initialized </em></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>,
the effect is to <span class="bold"><strong>rebind</strong></span> to the new object
instead of assigning the referee. This is unlike bare C++ references.
</p>
<pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span>
<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">ora</span><span class="special">(</span><span class="identifier">ra</span><span class="special">)</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">orb</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span> <span class="special">;</span>
<span class="identifier">ora</span> <span class="special">=</span> <span class="identifier">orb</span> <span class="special">;</span> <span class="comment">// 'ora' is rebound to 'b'
</span><span class="special">*</span><span class="identifier">ora</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span> <span class="comment">// Changes value of 'b' (not 'a')
</span><span class="identifier">assert</span><span class="special">(</span><span class="identifier">a</span><span class="special">==</span><span class="number">1</span><span class="special">);</span>
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">b</span><span class="special">==</span><span class="number">3</span><span class="special">);</span>
</pre>
<a name="boost_optional.rebinding_semantics_for_assignment_of_optional_references.rationale"></a><h4>
<a name="id2640074"></a>
<a href="rebinding_semantics_for_assignment_of_optional_references.html#boost_optional.rebinding_semantics_for_assignment_of_optional_references.rationale">Rationale</a>
</h4>
<p>
Rebinding semantics for the assignment of <span class="emphasis"><em>initialized </em></span>
<code class="computeroutput"><span class="identifier">optional</span></code> references has been
chosen to provide <span class="bold"><strong>consistency among initialization states</strong></span>
even at the expense of lack of consistency with the semantics of bare C++ references.
It is true that <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code> strives
to behave as much as possible as <code class="computeroutput"><span class="identifier">U</span></code>
does whenever it is initialized; but in the case when <code class="computeroutput"><span class="identifier">U</span></code>
is <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>,
doing so would result in inconsistent behavior w.r.t to the lvalue initialization
state.
</p>
<p>
Imagine <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
forwarding assignment to the referenced object (thus changing the referenced
object value but not rebinding), and consider the following code:
</p>
<pre class="programlisting">
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">a</span> <span class="special">=</span> <span class="identifier">get</span><span class="special">();</span>
<span class="keyword">int</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span>
<span class="keyword">int</span><span class="special">&amp;</span> <span class="identifier">rx</span> <span class="special">=</span> <span class="identifier">x</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&gt;</span> <span class="identifier">b</span><span class="special">(</span><span class="identifier">rx</span><span class="special">);</span>
<span class="identifier">a</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span>
</pre>
<p>
What does the assignment do?
</p>
<p>
If <code class="computeroutput"><span class="identifier">a</span></code> is <span class="emphasis"><em>uninitialized</em></span>,
the answer is clear: it binds to <code class="computeroutput"><span class="identifier">x</span></code>
(we now have another reference to <code class="computeroutput"><span class="identifier">x</span></code>).
But what if <code class="computeroutput"><span class="identifier">a</span></code> is already <span class="emphasis"><em>initialized</em></span>?
it would change the value of the referenced object (whatever that is); which
is inconsistent with the other possible case.
</p>
<p>
If <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
would assign just like <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>
does, you would never be able to use Optional's assignment without explicitly
handling the previous initialization state unless your code is capable of functioning
whether after the assignment, <code class="computeroutput"><span class="identifier">a</span></code>
aliases the same object as <code class="computeroutput"><span class="identifier">b</span></code>
or not.
</p>
<p>
That is, you would have to discriminate in order to be consistency.
</p>
<p>
If in your code rebinding to another object is not an option, then is very
likely that binding for the fist time isn't either. In such case, assignment
to an <span class="emphasis"><em>uninitialized </em></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span></code>
shall be prohibited. It is quite possible that in such scenario the precondition
that the lvalue must be already initialized exist. If it doesn't, then binding
for the first time is OK while rebinding is not which is IMO very unlikely.
In such scenario, you can assign the value itself directly, as in:
</p>
<pre class="programlisting">
<span class="identifier">assert</span><span class="special">(!!</span><span class="identifier">opt</span><span class="special">);</span>
<span class="special">*</span><span class="identifier">opt</span><span class="special">=</span><span class="identifier">value</span><span class="special">;</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,151 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Synopsis</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="development.html" title="Development">
<link rel="next" href="detailed_semantics.html" title="Detailed Semantics">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="development.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.synopsis"></a><a href="synopsis.html" title="Synopsis">Synopsis</a>
</h2></div></div></div>
<pre class="programlisting">
<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">optional</span>
<span class="special">{</span>
<span class="keyword">public</span> <span class="special">:</span>
<span class="comment">// (If T is of reference type, the parameters and results by reference are by value)
</span>
<span class="identifier">optional</span> <span class="special">()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_none_t"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// [new in 1.34]
</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_bool_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">&gt;</span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">&gt;</span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="special">;</span>
<span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_equal_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_equal_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_equal_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">&gt;</span> <span class="identifier">optional</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span>
<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// [new in 1.34]
</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="keyword">default</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">-&gt;()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">-&gt;()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">operator</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="keyword">bool</span><span class="special">-</span><span class="identifier">type</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_bool"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_operator_not"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// deprecated methods
</span>
<span class="comment">// (deprecated)
</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">()</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_reset"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// (deprecated)
</span> <span class="keyword">void</span> <span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_reset_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// (deprecated)
</span> <span class="keyword">bool</span> <span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_is_initialized"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="special">};</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_not_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">&lt;</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_less_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">&gt;</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_greater_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">&lt;=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_less_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">&gt;=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_operator_compare_greater_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// [new in 1.34]
</span><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_make_optional_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// [new in 1.34]
</span><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_make_optional_bool_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="comment">// [new in 1.34]
</span><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">get_optional_value_or</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">opt</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a href="detailed_semantics.html#reference_swap_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a>
<span class="special">}</span> <span class="comment">// namespace boost
</span></pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="development.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -0,0 +1,54 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Type requirements</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="prev" href="exception_safety_guarantees.html" title="Exception Safety
Guarantees">
<link rel="next" href="implementation_notes.html" title="Implementation Notes">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.type_requirements"></a><a href="type_requirements.html" title="Type requirements">Type requirements</a>
</h2></div></div></div>
<p>
In general, <code class="computeroutput"><span class="identifier">T</span></code> must be <a href="../../../../utility/CopyConstructible.html" target="_top">Copy Constructible</a> and
have a no-throw destructor. The copy-constructible requirement is not needed
if <span class="bold"><strong>InPlaceFactories</strong></span> are used.
</p>
<p>
<code class="computeroutput"><span class="identifier">T</span></code> <span class="underline">is
not</span> required to be <a href="http://www.sgi.com/tech/stl/DefaultConstructible.html" target="_top">Default
Constructible</a>.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

582
doc/html/boostbook.css Executable file
View File

@ -0,0 +1,582 @@
/*=============================================================================
Copyright (c) 2004 Joel de Guzman
http://spirit.sourceforge.net/
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
/*=============================================================================
Body defaults
=============================================================================*/
body
{
margin: 1em;
font-family: sans-serif;
}
/*=============================================================================
Paragraphs
=============================================================================*/
p
{
text-align: left;
font-size: 10pt;
line-height: 1.15;
}
/*=============================================================================
Program listings
=============================================================================*/
/* Code on paragraphs */
p tt.computeroutput
{
font-size: 10pt;
}
pre.synopsis
{
font-size: 10pt;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
.programlisting,
.screen
{
font-size: 10pt;
display: block;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
/* Program listings in tables don't get borders */
td .programlisting,
td .screen
{
margin: 0pc 0pc 0pc 0pc;
padding: 0pc 0pc 0pc 0pc;
}
/*=============================================================================
Headings
=============================================================================*/
h1, h2, h3, h4, h5, h6
{
text-align: left;
margin: 1em 0em 0.5em 0em;
font-weight: bold;
}
h1 { font: 140% }
h2 { font: bold 140% }
h3 { font: bold 130% }
h4 { font: bold 120% }
h5 { font: italic 110% }
h6 { font: italic 100% }
/* Top page titles */
title,
h1.title,
h2.title
h3.title,
h4.title,
h5.title,
h6.title,
.refentrytitle
{
font-weight: bold;
margin-bottom: 1pc;
}
h1.title { font-size: 140% }
h2.title { font-size: 140% }
h3.title { font-size: 130% }
h4.title { font-size: 120% }
h5.title { font-size: 110% }
h6.title { font-size: 100% }
.section h1
{
margin: 0em 0em 0.5em 0em;
font-size: 140%;
}
.section h2 { font-size: 140% }
.section h3 { font-size: 130% }
.section h4 { font-size: 120% }
.section h5 { font-size: 110% }
.section h6 { font-size: 100% }
/* Code on titles */
h1 tt.computeroutput { font-size: 140% }
h2 tt.computeroutput { font-size: 140% }
h3 tt.computeroutput { font-size: 130% }
h4 tt.computeroutput { font-size: 120% }
h5 tt.computeroutput { font-size: 110% }
h6 tt.computeroutput { font-size: 100% }
/*=============================================================================
Author
=============================================================================*/
h3.author
{
font-size: 100%
}
/*=============================================================================
Lists
=============================================================================*/
li
{
font-size: 10pt;
line-height: 1.3;
}
/* Unordered lists */
ul
{
text-align: left;
}
/* Ordered lists */
ol
{
text-align: left;
}
/*=============================================================================
Links
=============================================================================*/
a
{
text-decoration: none; /* no underline */
}
a:hover
{
text-decoration: underline;
}
/*=============================================================================
Spirit style navigation
=============================================================================*/
.spirit-nav
{
text-align: right;
}
.spirit-nav a
{
color: white;
padding-left: 0.5em;
}
.spirit-nav img
{
border-width: 0px;
}
/*=============================================================================
Table of contents
=============================================================================*/
.toc
{
margin: 1pc 4% 0pc 4%;
padding: 0.1pc 1pc 0.1pc 1pc;
font-size: 10pt;
line-height: 1.15;
}
.toc-main
{
text-align: center;
margin: 3pc 16% 3pc 16%;
padding: 3pc 1pc 3pc 1pc;
line-height: 0.1;
}
.boost-toc
{
float: right;
padding: 0.5pc;
}
/*=============================================================================
Tables
=============================================================================*/
.table-title,
div.table p.title
{
margin-left: 4%;
padding-right: 0.5em;
padding-left: 0.5em;
}
.informaltable table,
.table table
{
width: 92%;
margin-left: 4%;
margin-right: 4%;
}
div.informaltable table,
div.table table
{
padding: 4px;
}
/* Table Cells */
div.informaltable table tr td,
div.table table tr td
{
padding: 0.5em;
text-align: left;
}
div.informaltable table tr th,
div.table table tr th
{
padding: 0.5em 0.5em 0.5em 0.5em;
border: 1pt solid white;
font-size: 120%;
}
/*=============================================================================
Blurbs
=============================================================================*/
div.note,
div.tip,
div.important,
div.caution,
div.warning,
div.sidebar
{
font-size: 10pt;
line-height: 1.2;
display: block;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
div.sidebar img
{
padding: 1pt;
}
/*=============================================================================
Callouts
=============================================================================*/
.line_callout_bug img
{
float: left;
position:relative;
left: 4px;
top: -12px;
clear: left;
margin-left:-22px;
}
.callout_bug img
{
}
/*=============================================================================
Variable Lists
=============================================================================*/
/* Make the terms in definition lists bold */
div.variablelist dl dt,
span.term
{
font-weight: bold;
font-size: 10pt;
}
div.variablelist table tbody tr td
{
text-align: left;
vertical-align: top;
padding: 0em 2em 0em 0em;
font-size: 10pt;
margin: 0em 0em 0.5em 0em;
line-height: 1;
}
/* Make the terms in definition lists bold */
div.variablelist dl dt
{
margin-bottom: 0.2em;
}
div.variablelist dl dd
{
margin: 0em 0em 0.5em 2em;
font-size: 10pt;
}
div.variablelist table tbody tr td p
div.variablelist dl dd p
{
margin: 0em 0em 0.5em 0em;
line-height: 1;
}
/*=============================================================================
Misc
=============================================================================*/
/* Title of books and articles in bibliographies */
span.title
{
font-style: italic;
}
span.underline
{
text-decoration: underline;
}
span.strikethrough
{
text-decoration: line-through;
}
/* Copyright, Legal Notice */
div div.legalnotice p
{
text-align: left
}
/*=============================================================================
Colors
=============================================================================*/
@media screen
{
/* Links */
a
{
color: #0C7445;
}
a:visited
{
color: #663974;
}
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
{
text-decoration: none; /* no underline */
color: #000000;
}
/* Syntax Highlighting */
.keyword { color: #0000AA; }
.identifier { color: #000000; }
.special { color: #707070; }
.preprocessor { color: #402080; }
.char { color: teal; }
.comment { color: #800000; }
.string { color: teal; }
.number { color: teal; }
.white_bkd { background-color: #E8FBE9; }
.dk_grey_bkd { background-color: #A0DAAC; }
/* Copyright, Legal Notice */
.copyright
{
color: #666666;
font-size: small;
}
div div.legalnotice p
{
color: #666666;
}
/* Program listing */
pre.synopsis
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
.programlisting,
.screen
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
td .programlisting,
td .screen
{
border: 0px solid #DCDCDC;
}
/* Blurbs */
div.note,
div.tip,
div.important,
div.caution,
div.warning,
div.sidebar
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
/* Table of contents */
.toc
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
/* Table of contents */
.toc-main
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
/* Tables */
div.informaltable table tr td,
div.table table tr td
{
border: 1px solid #DCDCDC;
background-color: #FAFFFB;
}
div.informaltable table tr th,
div.table table tr th
{
background-color: #E3F9E4;
border: 1px solid #DCDCDC;
}
/* Misc */
span.highlight
{
color: #00A000;
}
}
@media print
{
/* Links */
a
{
color: black;
}
a:visited
{
color: black;
}
.spirit-nav
{
display: none;
}
/* Program listing */
pre.synopsis
{
border: 1px solid gray;
background-color: #FAFFFB;
}
.programlisting,
.screen
{
border: 1px solid gray;
background-color: #FAFFFB;
}
td .programlisting,
td .screen
{
border: 0px solid #DCDCDC;
}
/* Table of contents */
.toc
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
/* Table of contents */
.toc-main
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
background-color: #FAFFFB;
}
.informaltable table,
.table table
{
border: 1px solid #DCDCDC;
border-bottom: 3px solid #9D9D9D;
border-right: 3px solid #9D9D9D;
border-collapse: collapse;
background-color: #FAFFFB;
}
/* Tables */
div.informaltable table tr td,
div.table table tr td
{
border: 1px solid #DCDCDC;
background-color: #FAFFFB;
}
div.informaltable table tr th,
div.table table tr th
{
border: 1px solid #DCDCDC;
background-color: #FAFFFB;
}
/* Misc */
span.highlight
{
font-weight: bold;
}
}

View File

Before

Width:  |  Height:  |  Size: 293 B

After

Width:  |  Height:  |  Size: 293 B

View File

Before

Width:  |  Height:  |  Size: 81 B

After

Width:  |  Height:  |  Size: 81 B

183
doc/html/index.html Normal file
View File

@ -0,0 +1,183 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter<EFBFBD>1.<2E>Boost.Optional</title>
<link rel="stylesheet" href="boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.70.1">
<link rel="start" href="index.html" title="Chapter<65>1.<2E>Boost.Optional">
<link rel="next" href="boost_optional/development.html" title="Development">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
<td align="center"><a href="../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/people/people.htm">People</a></td>
<td align="center"><a href="http://www.boost.org/more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
<div class="chapter" lang="en">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="optional"></a>Chapter<EFBFBD>1.<2E>Boost.Optional</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Fernando Luis</span> <span class="surname">Cacciola Carballal</span>
</h3></div></div>
<div><p class="copyright">Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal</p></div>
<div><div class="legalnotice">
<a name="id2604939"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section"><a href="index.html#optional.motivation">Motivation</a></span></dt>
<dt><span class="section"><a href="boost_optional/development.html">Development</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="boost_optional/development.html#boost_optional.development.the_models">The models</a></span></dt>
<dt><span class="section"><a href="boost_optional/development.html#boost_optional.development.the_semantics">The semantics</a></span></dt>
<dt><span class="section"><a href="boost_optional/development.html#boost_optional.development.the_interface">The Interface</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="boost_optional/synopsis.html">Synopsis</a></span></dt>
<dt><span class="section"><a href="boost_optional/detailed_semantics.html">Detailed Semantics</a></span></dt>
<dt><span class="section"><a href="boost_optional/examples.html">Examples</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_return_values">Optional
return values</a></span></dt>
<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_local_variables">Optional
local variables</a></span></dt>
<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_data_members">Optional
data members</a></span></dt>
<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.bypassing_expensive_unnecessary_default_construction">Bypassing
expensive unnecessary default construction</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="boost_optional/optional_references.html">Optional references</a></span></dt>
<dt><span class="section"><a href="boost_optional/rebinding_semantics_for_assignment_of_optional_references.html">Rebinding
semantics for assignment of optional references</a></span></dt>
<dt><span class="section"><a href="boost_optional/in_place_factories.html">In-Place Factories</a></span></dt>
<dt><span class="section"><a href="boost_optional/a_note_about_optional_bool_.html">A note about
optional&lt;bool&gt;</a></span></dt>
<dt><span class="section"><a href="boost_optional/exception_safety_guarantees.html">Exception Safety
Guarantees</a></span></dt>
<dt><span class="section"><a href="boost_optional/type_requirements.html">Type requirements</a></span></dt>
<dt><span class="section"><a href="boost_optional/implementation_notes.html">Implementation Notes</a></span></dt>
<dt><span class="section"><a href="boost_optional/dependencies_and_portability.html">Dependencies
and Portability</a></span></dt>
<dt><span class="section"><a href="boost_optional/acknowledgments.html">Acknowledgments</a></span></dt>
</dl>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="optional.motivation"></a><a href="index.html#optional.motivation" title="Motivation">Motivation</a>
</h2></div></div></div>
<p>
Consider these functions which should return a value but which might not have
a value to return:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
(A) <code class="computeroutput"><span class="keyword">double</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">n</span>
<span class="special">);</span></code>
</li>
<li>
(B) <code class="computeroutput"><span class="keyword">char</span> <span class="identifier">get_async_input</span><span class="special">();</span></code>
</li>
<li>
(C) <code class="computeroutput"><span class="identifier">point</span> <span class="identifier">polygon</span><span class="special">::</span><span class="identifier">get_any_point_effectively_inside</span><span class="special">();</span></code>
</li>
</ul></div>
<p>
There are different approaches to the issue of not having a value to return.
</p>
<p>
A typical approach is to consider the existence of a valid return value as
a postcondition, so that if the function cannot compute the value to return,
it has either undefined behavior (and can use assert in a debug build) or uses
a runtime check and throws an exception if the postcondition is violated. This
is a reasonable choice for example, for function (A), because the lack of a
proper return value is directly related to an invalid parameter (out of domain
argument), so it is appropriate to require the callee to supply only parameters
in a valid domain for execution to continue normally.
</p>
<p>
However, function (B), because of its asynchronous nature, does not fail just
because it can't find a value to return; so it is incorrect to consider such
a situation an error and assert or throw an exception. This function must return,
and somehow, must tell the callee that it is not returning a meaningful value.
</p>
<p>
A similar situation occurs with function (C): it is conceptually an error to
ask a <span class="emphasis"><em>null-area</em></span> polygon to return a point inside itself,
but in many applications, it is just impractical for performance reasons to
treat this as an error (because detecting that the polygon has no area might
be too expensive to be required to be tested previously), and either an arbitrary
point (typically at infinity) is returned, or some efficient way to tell the
callee that there is no such point is used.
</p>
<p>
There are various mechanisms to let functions communicate that the returned
value is not valid. One such mechanism, which is quite common since it has
zero or negligible overhead, is to use a special value which is reserved to
communicate this. Classical examples of such special values are <code class="computeroutput"><span class="identifier">EOF</span></code>, <code class="computeroutput"><span class="identifier">string</span><span class="special">::</span><span class="identifier">npos</span></code>, points
at infinity, etc...
</p>
<p>
When those values exist, i.e. the return type can hold all meaningful values
<span class="emphasis"><em>plus</em></span> the <span class="emphasis"><em>signal</em></span> value, this mechanism
is quite appropriate and well known. Unfortunately, there are cases when such
values do not exist. In these cases, the usual alternative is either to use
a wider type, such as <code class="computeroutput"><span class="keyword">int</span></code> in place
of <code class="computeroutput"><span class="keyword">char</span></code>; or a compound type, such
as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span><span class="keyword">bool</span><span class="special">&gt;</span></code>.
</p>
<p>
Returning a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="keyword">bool</span><span class="special">&gt;</span></code>, thus attaching a boolean flag to the result
which indicates if the result is meaningful, has the advantage that can be
turned into a consistent idiom since the first element of the pair can be whatever
the function would conceptually return. For example, the last two functions
could have the following interface:
</p>
<pre class="programlisting">
<span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span><span class="keyword">bool</span><span class="special">&gt;</span> <span class="identifier">get_async_input</span><span class="special">();</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span><span class="keyword">bool</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">::</span><span class="identifier">get_any_point_effectively_inside</span><span class="special">();</span>
</pre>
<p>
These functions use a consistent interface for dealing with possibly inexistent
results:
</p>
<pre class="programlisting">
<span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span><span class="keyword">bool</span><span class="special">&gt;</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">poly</span><span class="special">.</span><span class="identifier">get_any_point_effectively_inside</span><span class="special">();</span>
<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">second</span> <span class="special">)</span>
<span class="identifier">flood_fill</span><span class="special">(</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">first</span><span class="special">);</span>
</pre>
<p>
However, not only is this quite a burden syntactically, it is also error prone
since the user can easily use the function result (first element of the pair)
without ever checking if it has a valid value.
</p>
<p>
Clearly, we need a better idiom.
</p>
</div>
<p>
</p>
<a name="optional_refassign"></a><p>
</p>
<a name="optional_in_place_factories"></a><p>
</p>
<a name="optional_implementation_notes"></a><p>
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: February 12, 2008 at 22:47:14 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 B

View File

@ -0,0 +1,28 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[#optional_implementation_notes]
[section Implementation Notes]
`optional<T>` is currently implemented using a custom aligned storage facility
built from `alignment_of` and `type_with_alignment` (both from Type Traits). It
uses a separate boolean flag to indicate the initialization state.
Placement new with `T`'s copy constructor and `T`'s destructor are explicitly used
to initialize,copy and destroy optional values.
As a result, `T`'s default constructor is effectively by-passed, but the exception
guarantees are basic.
It is planned to replace the current implementation with another with stronger
exception safety, such as a future `boost::variant`.
[endsect]

126
doc/optional.qbk Normal file
View File

@ -0,0 +1,126 @@
[library Boost.Optional
[quickbook 1.4]
[authors [Cacciola Carballal, Fernando Luis]]
[copyright 2003-2007 Fernando Luis Cacciola Carballal]
[category miscellaneous]
[id optional]
[dirname optional]
[purpose
Discriminated-union wrapper for optional values
]
[source-mode c++]
[license
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
[@http://www.boost.org/LICENSE_1_0.txt])
]
]
[/ Macros will be used for links so we have a central place to change them ]
[/ Cited Boost resources ]
[def __BOOST_VARIANT__ [@../../../variant/index.html Boost.Variant]]
[def __BOOST_TRIBOOL__ [@../../../tribool/index.html boost::tribool]]
[def __OPTIONAL_POINTEE__ [@../../../utility/OptionalPointee.html OptionalPointee]]
[def __COPY_CONSTRUCTIBLE__ [@../../../utility/CopyConstructible.html Copy Constructible]]
[def __FUNCTION_EQUAL_POINTEES__ [@../../../utility/OptionalPointee.html#equal `equal_pointees()`]]
[def __FUNCTION_LESS_POINTEES__ [@../../../utility/OptionalPointee.html#less `less_pointees()`]]
[def __IN_PLACE_FACTORY_HPP__ [@../../../../boost/utility/in_place_factory.hpp in_place_factory.hpp]]
[def __TYPED_IN_PLACE_FACTORY_HPP__ [@../../../../boost/utility/typed_in_place_factory.hpp typed_in_place_factory.hpp]]
[/ Other web resources ]
[def __HASKELL__ [@http://www.haskell.org/ Haskell]]
[def __SGI_DEFAULT_CONSTRUCTIBLE__ [@http://www.sgi.com/tech/stl/DefaultConstructible.html Default Constructible]]
[/ Icons ]
[def __SPACE__ [$images/space.png]]
[def __GO_TO__ [$images/callouts/R.png]]
[section Motivation]
Consider these functions which should return a value but which might not have
a value to return:
* (A) `double sqrt(double n );`
* (B) `char get_async_input();`
* (C) `point polygon::get_any_point_effectively_inside();`
There are different approaches to the issue of not having a value to return.
A typical approach is to consider the existence of a valid return value as a
postcondition, so that if the function cannot compute the value to return, it
has either undefined behavior (and can use assert in a debug build) or uses a
runtime check and throws an exception if the postcondition is violated. This
is a reasonable choice for example, for function (A), because the lack of a
proper return value is directly related to an invalid parameter (out of domain
argument), so it is appropriate to require the callee to supply only parameters
in a valid domain for execution to continue normally.
However, function (B), because of its asynchronous nature, does not fail just
because it can't find a value to return; so it is incorrect to consider such
a situation an error and assert or throw an exception. This function must
return, and somehow, must tell the callee that it is not returning a meaningful
value.
A similar situation occurs with function (C): it is conceptually an error to
ask a ['null-area] polygon to return a point inside itself, but in many
applications, it is just impractical for performance reasons to treat this as
an error (because detecting that the polygon has no area might be too expensive
to be required to be tested previously), and either an arbitrary point
(typically at infinity) is returned, or some efficient way to tell the callee
that there is no such point is used.
There are various mechanisms to let functions communicate that the returned
value is not valid. One such mechanism, which is quite common since it has
zero or negligible overhead, is to use a special value which is reserved to
communicate this. Classical examples of such special values are `EOF`,
`string::npos`, points at infinity, etc...
When those values exist, i.e. the return type can hold all meaningful values
['plus] the ['signal] value, this mechanism is quite appropriate and well known.
Unfortunately, there are cases when such values do not exist. In these cases,
the usual alternative is either to use a wider type, such as `int` in place of
`char`; or a compound type, such as `std::pair<point,bool>`.
Returning a `std::pair<T,bool>`, thus attaching a boolean flag to the result
which indicates if the result is meaningful, has the advantage that can be
turned into a consistent idiom since the first element of the pair can be
whatever the function would conceptually return. For example, the last two
functions could have the following interface:
std::pair<char,bool> get_async_input();
std::pair<point,bool> polygon::get_any_point_effectively_inside();
These functions use a consistent interface for dealing with possibly inexistent
results:
std::pair<point,bool> p = poly.get_any_point_effectively_inside();
if ( p.second )
flood_fill(p.first);
However, not only is this quite a burden syntactically, it is also error prone
since the user can easily use the function result (first element of the pair)
without ever checking if it has a valid value.
Clearly, we need a better idiom.
[endsect]
[include development.qbk]
[include reference.qbk]
[include examples.qbk]
[include special_cases.qbk]
[include implementation_notes.qbk]
[include dependencies.qbk]
[include acknowledgments.qbk]

881
doc/reference.qbk Normal file
View File

@ -0,0 +1,881 @@
[/
Boost.Optional
Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section Synopsis]
namespace boost {
template<class T>
class optional
{
public :
// (If T is of reference type, the parameters and results by reference are by value)
optional () ; ``[link reference_optional_constructor __GO_TO__]``
optional ( none_t ) ; ``[link reference_optional_constructor_none_t __GO_TO__]``
optional ( T const& v ) ; ``[link reference_optional_constructor_value __GO_TO__]``
// [new in 1.34]
optional ( bool condition, T const& v ) ; ``[link reference_optional_constructor_bool_value __GO_TO__]``
optional ( optional const& rhs ) ; ``[link reference_optional_constructor_optional __GO_TO__]``
template<class U> explicit optional ( optional<U> const& rhs ) ; ``[link reference_optional_constructor_other_optional __GO_TO__]``
template<class InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``
template<class TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``
optional& operator = ( none_t ) ; ``[/[link reference_optional_operator_equal_none_t __GO_TO__]]``
optional& operator = ( T const& v ) ; ``[link reference_optional_operator_equal_value __GO_TO__]``
optional& operator = ( optional const& rhs ) ; ``[link reference_optional_operator_equal_optional __GO_TO__]``
template<class U> optional& operator = ( optional<U> const& rhs ) ; ``[link reference_optional_operator_equal_other_optional __GO_TO__]``
template<class InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ; ``[/[link reference_optional_operator_equal_factory __GO_TO__]]``
template<class TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ; ``[/[link reference_optional_operator_equal_factory __GO_TO__]]``
T const& get() const ; ``[link reference_optional_get __GO_TO__]``
T& get() ; ``[link reference_optional_get __GO_TO__]``
// [new in 1.34]
T const& get_value_or( T const& default ) const ; ``[link reference_optional_get_value_or_value __GO_TO__]``
T const* operator ->() const ; ``[link reference_optional_operator_arrow __GO_TO__]``
T* operator ->() ; ``[link reference_optional_operator_arrow __GO_TO__]``
T const& operator *() const ; ``[link reference_optional_get __GO_TO__]``
T& operator *() ; ``[link reference_optional_get __GO_TO__]``
T const* get_ptr() const ; ``[link reference_optional_get_ptr __GO_TO__]``
T* get_ptr() ; ``[link reference_optional_get_ptr __GO_TO__]``
operator unspecified-bool-type() const ; ``[link reference_optional_operator_bool __GO_TO__]``
bool operator!() const ; ``[link reference_optional_operator_not __GO_TO__]``
// deprecated methods
// (deprecated)
void reset() ; ``[link reference_optional_reset __GO_TO__]``
// (deprecated)
void reset ( T const& ) ; ``[link reference_optional_reset_value __GO_TO__]``
// (deprecated)
bool is_initialized() const ; ``[link reference_optional_is_initialized __GO_TO__]``
};
template<class T> inline bool operator == ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator != ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_not_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator < ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_optional_optional __GO_TO__]``
template<class T> inline bool operator > ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_optional_optional __GO_TO__]``
template<class T> inline bool operator <= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_or_equal_optional_optional __GO_TO__]``
template<class T> inline bool operator >= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_or_equal_optional_optional __GO_TO__]``
// [new in 1.34]
template<class T> inline optional<T> make_optional ( T const& v ) ; ``[link reference_make_optional_value __GO_TO__]``
// [new in 1.34]
template<class T> inline optional<T> make_optional ( bool condition, T const& v ) ; ``[link reference_make_optional_bool_value __GO_TO__]``
// [new in 1.34]
template<class T> inline T const& get_optional_value_or ( optional<T> const& opt, T const& default ) ; ``[link reference_optional_get_value_or_value __GO_TO__]``
template<class T> inline T const& get ( optional<T> const& opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T& get ( optional<T> & opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T const* get ( optional<T> const* opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T* get ( optional<T>* opt ) ; ``[link reference_optional_get __GO_TO__]``
template<class T> inline T const* get_pointer ( optional<T> const& opt ) ; ``[link reference_optional_get_ptr __GO_TO__]``
template<class T> inline T* get_pointer ( optional<T> & opt ) ; ``[link reference_optional_get_ptr __GO_TO__]``
template<class T> inline void swap( optional<T>& x, optional<T>& y ) ; ``[link reference_swap_optional_optional __GO_TO__]``
} // namespace boost
[endsect]
[section Detailed Semantics]
Because `T` might be of reference type, in the sequel, those entries whose
semantic depends on `T` being of reference type or not will be distinguished
using the following convention:
* If the entry reads: `optional<T`['(not a ref)]`>`, the description
corresponds only to the case where `T` is not of reference type.
* If the entry reads: `optional<T&>`, the description corresponds only to
the case where `T` is of reference type.
* If the entry reads: `optional<T>`, the description is the same for both
cases.
[note
The following section contains various `assert()` which are used only to show
the postconditions as sample code. It is not implied that the type `T` must
support each particular expression but that if the expression is supported,
the implied condition holds.
]
__SPACE__
[heading optional class member functions]
__SPACE__
[#reference_optional_constructor]
[: `optional<T>::optional();`]
* [*Effect:] Default-Constructs an `optional`.
* [*Postconditions:] `*this` is [_uninitialized].
* [*Throws:] Nothing.
* Notes: T's default constructor [_is not] called.
* [*Example:]
``
optional<T> def ;
assert ( !def ) ;
``
__SPACE__
[#reference_optional_constructor_none_t]
[: `optional<T>::optional( none_t );`]
* [*Effect:] Constructs an `optional` uninitialized.
* [*Postconditions:] `*this` is [_uninitialized].
* [*Throws:] Nothing.
* [*Notes:] `T`'s default constructor [_is not] called. The expression
`boost::none` denotes an instance of `boost::none_t` that can be used as
the parameter.
* [*Example:]
``
#include <boost/none.hpp>
optional<T> n(none) ;
assert ( !n ) ;
``
__SPACE__
[#reference_optional_constructor_value]
[: `optional<T `['(not a ref)]`>::optional( T const& v )`]
* [*Effect:] Directly-Constructs an `optional`.
* [*Postconditions:] `*this` is [_initialized] and its value is a['copy]
of `v`.
* [*Throws:] Whatever `T::T( T const& )` throws.
* [*Notes: ] `T::T( T const& )` is called.
* [*Exception Safety:] Exceptions can only be thrown during
`T::T( T const& );` in that case, this constructor has no effect.
* [*Example:]
``
T v;
optional<T> opt(v);
assert ( *opt == v ) ;
``
__SPACE__
[: `optional<T&>::optional( T& ref )`]
* [*Effect:] Directly-Constructs an `optional`.
* [*Postconditions:] `*this` is [_initialized] and its value is an instance
of an internal type wrapping the reference `ref`.
* [*Throws:] Nothing.
* [*Example:]
``
T v;
T& vref = v ;
optional<T&> opt(vref);
assert ( *opt == v ) ;
++ v ; // mutate referee
assert (*opt == v);
``
__SPACE__
[#reference_optional_constructor_bool_value]
[: `optional<T` ['(not a ref)]`>::optional( bool condition, T const& v ) ;` ]
[: `optional<T&> ::optional( bool condition, T& v ) ;` ]
* If condition is true, same as:
[: `optional<T` ['(not a ref)]`>::optional( T const& v )`]
[: `optional<T&> ::optional( T& v )`]
* otherwise, same as:
[: `optional<T ['(not a ref)]>::optional()`]
[: `optional<T&> ::optional()`]
__SPACE__
[#reference_optional_constructor_optional]
[: `optional<T `['(not a ref)]`>::optional( optional const& rhs );`]
* [*Effect:] Copy-Constructs an `optional`.
* [*Postconditions:] If rhs is initialized, `*this` is initialized and
its value is a ['copy] of the value of `rhs`; else `*this` is uninitialized.
* [*Throws:] Whatever `T::T( T const& )` throws.
* [*Notes:] If rhs is initialized, `T::T(T const& )` is called.
* [*Exception Safety:] Exceptions can only be thrown during
`T::T( T const& );` in that case, this constructor has no effect.
* [*Example:]
``
optional<T> uninit ;
assert (!uninit);
optional<T> uinit2 ( uninit ) ;
assert ( uninit2 == uninit );
optional<T> init( T(2) );
assert ( *init == T(2) ) ;
optional<T> init2 ( init ) ;
assert ( init2 == init ) ;
``
__SPACE__
[: `optional<T&>::optional( optional const& rhs );`]
* [*Effect:] Copy-Constructs an `optional`.
* [*Postconditions:] If `rhs` is initialized, `*this` is initialized and its
value is another reference to the same object referenced by `*rhs`; else
`*this` is uninitialized.
* [*Throws:] Nothing.
* [*Notes:] If `rhs` is initialized, both `*this` and `*rhs` will reefer to the
same object (they alias).
* [*Example:]
``
optional<T&> uninit ;
assert (!uninit);
optional<T&> uinit2 ( uninit ) ;
assert ( uninit2 == uninit );
T v = 2 ; T& ref = v ;
optional<T> init(ref);
assert ( *init == v ) ;
optional<T> init2 ( init ) ;
assert ( *init2 == v ) ;
v = 3 ;
assert ( *init == 3 ) ;
assert ( *init2 == 3 ) ;
``
__SPACE__
[#reference_optional_constructor_other_optional]
[: `template<U> explicit optional<T` ['(not a ref)]`>::optional( optional<U> const& rhs );`]
* [*Effect:] Copy-Constructs an `optional`.
* [*Postconditions:] If `rhs` is initialized, `*this` is initialized and its
value is a ['copy] of the value of rhs converted to type `T`; else `*this` is
uninitialized.
* [*Throws:] Whatever `T::T( U const& )` throws.
* [*Notes: ] `T::T( U const& )` is called if `rhs` is initialized, which requires a
valid conversion from `U` to `T`.
* [*Exception Safety:] Exceptions can only be thrown during `T::T( U const& );`
in that case, this constructor has no effect.
* [*Example:]
``
optional<double> x(123.4);
assert ( *x == 123.4 ) ;
optional<int> y(x) ;
assert( *y == 123 ) ;
``
__SPACE__
[#reference_optional_constructor_factory]
[: `template<InPlaceFactory> explicit optional<T` ['(not a ref)]`>::optional( InPlaceFactory const& f );`]
[: `template<TypedInPlaceFactory> explicit optional<T` ['(not a ref)]`>::optional( TypedInPlaceFactory const& f );`]
* [*Effect:] Constructs an `optional` with a value of `T` obtained from the
factory.
* [*Postconditions: ] `*this` is [_initialized] and its value is ['directly given]
from the factory `f` (i.e., the value [_is not copied]).
* [*Throws:] Whatever the `T` constructor called by the factory throws.
* [*Notes:] See [link optional_in_place_factories In-Place Factories]
* [*Exception Safety:] Exceptions can only be thrown during the call to
the `T` constructor used by the factory; in that case, this constructor has
no effect.
* [*Example:]
``
class C { C ( char, double, std::string ) ; } ;
C v('A',123.4,"hello");
optional<C> x( in_place ('A', 123.4, "hello") ); // InPlaceFactory used
optional<C> y( in_place<C>('A', 123.4, "hello") ); // TypedInPlaceFactory used
assert ( *x == v ) ;
assert ( *y == v ) ;
``
__SPACE__
[#reference_optional_operator_equal_value]
[: `optional& optional<T` ['(not a ref)]`>::operator= ( T const& rhs ) ;`]
* [*Effect:] Assigns the value `rhs` to an `optional`.
* [*Postconditions: ] `*this` is initialized and its value is a ['copy] of `rhs`.
* [*Throws:] Whatever `T::operator=( T const& )` or `T::T(T const&)` throws.
* [*Notes:] If `*this` was initialized, `T`'s assignment operator is used,
otherwise, its copy-constructor is used.
* [*Exception Safety:] In the event of an exception, the initialization
state of `*this` is unchanged and its value unspecified as far as `optional`
is concerned (it is up to `T`'s `operator=()`). If `*this` is initially
uninitialized and `T`'s ['copy constructor] fails, `*this` is left properly
uninitialized.
* [*Example:]
``
T x;
optional<T> def ;
optional<T> opt(x) ;
T y;
def = y ;
assert ( *def == y ) ;
opt = y ;
assert ( *opt == y ) ;
``
__SPACE__
[: `optional<T&>& optional<T&>::operator= ( T& const& rhs ) ;`]
* [*Effect:] (Re)binds thee wrapped reference.
* [*Postconditions: ] `*this` is initialized and it references the same
object referenced by `rhs`.
* [*Notes:] If `*this` was initialized, is is ['rebound] to the new object.
See [link optional_refassign here] for details on this behavior.
* [*Example:]
``
int a = 1 ;
int b = 2 ;
T& ra = a ;
T& rb = b ;
optional<int&> def ;
optional<int&> opt(ra) ;
def = rb ; // binds 'def' to 'b' through 'rb'
assert ( *def == b ) ;
*def = a ; // changes the value of 'b' to a copy of the value of 'a'
assert ( b == a ) ;
int c = 3;
int& rc = c ;
opt = rc ; // REBINDS to 'c' through 'rc'
c = 4 ;
assert ( *opt == 4 ) ;
``
__SPACE__
[#reference_optional_operator_equal_optional]
[: `optional& optional<T` ['(not a ref)]`>::operator= ( optional const& rhs ) ;`]
* [*Effect:] Assigns another `optional` to an `optional`.
* [*Postconditions:] If `rhs` is initialized, `*this` is initialized and
its value is a ['copy] of the value of `rhs`; else `*this` is uninitialized.
* [*Throws:] Whatever `T::operator( T const&)` or `T::T( T const& )` throws.
* [*Notes:] If both `*this` and `rhs` are initially initialized, `T`'s
['assignment operator] is used. If `*this` is initially initialized but `rhs` is
uninitialized, `T`'s [destructor] is called. If `*this` is initially uninitialized
but `rhs` is initialized, `T`'s ['copy constructor] is called.
* [*Exception Safety:] In the event of an exception, the initialization state of
`*this` is unchanged and its value unspecified as far as optional is concerned
(it is up to `T`'s `operator=()`). If `*this` is initially uninitialized and
`T`'s ['copy constructor] fails, `*this` is left properly uninitialized.
* [*Example:]
``
T v;
optional<T> opt(v);
optional<T> def ;
opt = def ;
assert ( !def ) ;
// previous value (copy of 'v') destroyed from within 'opt'.
``
__SPACE__
[: `optional<T&> & optional<T&>::operator= ( optional<T&> const& rhs ) ;`]
* [*Effect:] (Re)binds thee wrapped reference.
* [*Postconditions:] If `*rhs` is initialized, `*this` is initialized and it
references the same object referenced by `*rhs`; otherwise, `*this` is
uninitialized (and references no object).
* [*Notes:] If `*this` was initialized and so is *rhs, this is is ['rebound] to
the new object. See [link optional_refassign here] for details on this behavior.
* [*Example:]
``
int a = 1 ;
int b = 2 ;
T& ra = a ;
T& rb = b ;
optional<int&> def ;
optional<int&> ora(ra) ;
optional<int&> orb(rb) ;
def = orb ; // binds 'def' to 'b' through 'rb' wrapped within 'orb'
assert ( *def == b ) ;
*def = ora ; // changes the value of 'b' to a copy of the value of 'a'
assert ( b == a ) ;
int c = 3;
int& rc = c ;
optional<int&> orc(rc) ;
ora = orc ; // REBINDS ora to 'c' through 'rc'
c = 4 ;
assert ( *ora == 4 ) ;
``
__SPACE__
[#reference_optional_operator_equal_other_optional]
[: `template<U> optional& optional<T` ['(not a ref)]`>::operator= ( optional<U> const& rhs ) ;`]
* [*Effect:] Assigns another convertible optional to an optional.
* [*Postconditions:] If `rhs` is initialized, `*this` is initialized and
its value is a ['copy] of the value of `rhs` ['converted] to type `T`; else
`*this` is uninitialized.
* [*Throws:] Whatever `T::operator=( U const& )` or `T::T( U const& )` throws.
* [*Notes:] If both `*this` and rhs are initially initialized, `T`'s
['assignment operator] (from `U`) is used. If `*this` is initially initialized
but `rhs` is uninitialized, `T`'s ['destructor] is called. If `*this` is
initially uninitialized but rhs is initialized, `T`'s ['converting constructor]
(from `U`) is called.
* [*Exception Safety:] In the event of an exception, the initialization state
of `*this` is unchanged and its value unspecified as far as optional is
concerned (it is up to `T`'s `operator=()`). If `*this` is initially
uninitialized and `T`'s converting constructor fails, `*this` is left properly
uninitialized.
* [*Example:]
``
T v;
optional<T> opt0(v);
optional<U> opt1;
opt1 = opt0 ;
assert ( *opt1 == static_cast<U>(v) ) ;
``
__SPACE__
[#reference_optional_reset_value]
[: `void optional<T` ['(not a ref)]`>::reset( T const& v ) ;`]
* [*Deprecated:] same as `operator= ( T const& v) ;`
__SPACE__
[#reference_optional_reset]
[: `void optional<T>::reset() ;`]
* [*Deprecated:] Same as `operator=( detail::none_t );`
__SPACE__
[#reference_optional_get]
[: `T const& optional<T` ['(not a ref)]`>::operator*() const ;`]
[: `T& optional<T` ['(not a ref)]`>::operator*();`]
[: `T const& optional<T` ['(not a ref)]`>::get() const ;`]
[: `T& optional<T` ['(not a ref)]`>::get() ;`]
[: `inline T const& get ( optional<T` ['(not a ref)]`> const& ) ;`]
[: `inline T& get ( optional<T` ['(not a ref)]`> &) ;`]
* [*Requirements:] `*this` is initialized
* [*Returns:] A reference to the contained value
* [*Throws:] Nothing.
* [*Notes:] The requirement is asserted via `BOOST_ASSERT()`.
* [*Example:]
``
T v ;
optional<T> opt ( v );
T const& u = *opt;
assert ( u == v ) ;
T w ;
*opt = w ;
assert ( *opt == w ) ;
``
__SPACE__
[#reference_optional_get_value_or_value]
[: `T const& optional<T` ['(not a ref)]`>::get_value_or( T const& default) const ;`]
[: `T& optional<T` ['(not a ref)]`>::get_value_or( T& default ) ;`]
[: `inline T const& get_optional_value_or ( optional<T` ['(not a ref)]`> const& o, T const& default ) ;`]
[: `inline T& get_optional_value_or ( optional<T` ['(not a ref)]`>& o, T& default ) ;`]
* [*Returns:] A reference to the contained value, if any, or `default`.
* [*Throws:] Nothing.
* [*Example:]
``
T v, z ;
optional<T> def;
T const& y = def.get_value_or(z);
assert ( y == z ) ;
optional<T> opt ( v );
T const& u = get_optional_value_or(opt,z);
assert ( u == v ) ;
assert ( u != z ) ;
``
__SPACE__
[: `T const& optional<T&>::operator*() const ;`]
[: `T & optional<T&>::operator*();`]
[: `T const& optional<T&>::get() const ;`]
[: `T& optional<T&>::get() ;`]
[: `inline T const& get ( optional<T&> const& ) ;`]
[: `inline T& get ( optional<T&> &) ;`]
* [*Requirements: ] `*this` is initialized
* [*Returns:] [_The] reference contained.
* [*Throws:] Nothing.
* [*Notes:] The requirement is asserted via `BOOST_ASSERT()`.
* [*Example:]
``
T v ;
T& vref = v ;
optional<T&> opt ( vref );
T const& vref2 = *opt;
assert ( vref2 == v ) ;
++ v ;
assert ( *opt == v ) ;
``
__SPACE__
[#reference_optional_get_ptr]
[: `T const* optional<T` ['(not a ref)]`>::get_ptr() const ;`]
[: `T* optional<T` ['(not a ref)]`>::get_ptr() ;`]
[: `inline T const* get_pointer ( optional<T` ['(not a ref)]`> const& ) ;`]
[: `inline T* get_pointer ( optional<T` ['(not a ref)]`> &) ;`]
* [*Returns:] If `*this` is initialized, a pointer to the contained value;
else `0` (['null]).
* [*Throws:] Nothing.
* [*Notes:] The contained value is permanently stored within `*this`, so you
should not hold nor delete this pointer
* [*Example:]
``
T v;
optional<T> opt(v);
optional<T> const copt(v);
T* p = opt.get_ptr() ;
T const* cp = copt.get_ptr();
assert ( p == get_pointer(opt) );
assert ( cp == get_pointer(copt) ) ;
``
__SPACE__
[#reference_optional_operator_arrow]
[: `T const* optional<T` ['(not a ref)]`>::operator ->() const ;`]
[: `T* optional<T` ['(not a ref)]`>::operator ->() ;`]
* [*Requirements: ] `*this` is initialized.
* [*Returns:] A pointer to the contained value.
* [*Throws:] Nothing.
* [*Notes:] The requirement is asserted via `BOOST_ASSERT()`.
* [*Example:]
``
struct X { int mdata ; } ;
X x ;
optional<X> opt (x);
opt->mdata = 2 ;
``
__SPACE__
[#reference_optional_operator_bool]
[: `optional<T>::operator `['unspecified-bool-type]`() const ;`]
* [*Returns:] An unspecified value which if used on a boolean context
is equivalent to (`get() != 0`)
* [*Throws:] Nothing.
* [*Example:]
``
optional<T> def ;
assert ( def == 0 );
optional<T> opt ( v ) ;
assert ( opt );
assert ( opt != 0 );
``
__SPACE__
[#reference_optional_operator_not]
[: `bool optional<T>::operator!() ;`]
* [*Returns:] If `*this` is uninitialized, `true`; else `false`.
* [*Throws:] Nothing.
* [*Notes:] This operator is provided for those compilers which can't
use the ['unspecified-bool-type operator] in certain boolean contexts.
* [*Example:]
``
optional<T> opt ;
assert ( !opt );
*opt = some_T ;
// Notice the "double-bang" idiom here.
assert ( !!opt ) ;
``
__SPACE__
[#reference_optional_is_initialized]
[: `bool optional<T>::is_initialized() const ;`]
* [*Returns: ] `true` if the `optional` is initialized, `false` otherwise.
* [*Throws:] Nothing.
* [*Example:]
``
optional<T> def ;
assert ( !def.is_initialized() );
optional<T> opt ( v ) ;
assert ( opt.is_initialized() );
``
__SPACE__
[heading Free functions]
__SPACE__
[#reference_make_optional_value]
[: `optional<T` ['(not a ref)]`> make_optional( T const& v )`]
* [*Returns: ] `optional<T>(v)` for the ['deduced] type `T` of `v`.
* [*Example:]
``
template<class T> void foo ( optional<T> const& opt ) ;
foo ( make_optional(1+1) ) ; // Creates an optional<int>
``
__SPACE__
[#reference_make_optional_bool_value]
[: `optional<T` ['(not a ref)]`> make_optional( bool condition, T const& v )`]
* [*Returns: ] `optional<T>(condition,v)` for the ['deduced] type `T` of `v`.
* [*Example:]
``
optional<double> calculate_foo()
{
double val = compute_foo();
return make_optional(is_not_nan_and_finite(val),val);
}
optional<double> v = calculate_foo();
if ( !v )
error("foo wasn't computed");
``
__SPACE__
[#reference_operator_compare_equal_optional_optional]
[: `bool operator == ( optional<T> const& x, optional<T> const& y );`]
* [*Returns:] If both `x` and `y` are initialized, `(*x == *y)`. If only
`x` or `y` is initialized, `false`. If both are uninitialized, `true`.
* [*Throws:] Nothing.
* [*Notes:] Pointers have shallow relational operators while `optional` has
deep relational operators. Do not use `operator ==` directly in generic
code which expect to be given either an `optional<T>` or a pointer; use
__FUNCTION_EQUAL_POINTEES__ instead
* [*Example:]
``
T x(12);
T y(12);
T z(21);
optional<T> def0 ;
optional<T> def1 ;
optional<T> optX(x);
optional<T> optY(y);
optional<T> optZ(z);
// Identity always hold
assert ( def0 == def0 );
assert ( optX == optX );
// Both uninitialized compare equal
assert ( def0 == def1 );
// Only one initialized compare unequal.
assert ( def0 != optX );
// Both initialized compare as (*lhs == *rhs)
assert ( optX == optY ) ;
assert ( optX != optZ ) ;
``
__SPACE__
[#reference_operator_compare_less_optional_optional]
[: `bool operator < ( optional<T> const& x, optional<T> const& y );`]
* [*Returns:] If `y` is not initialized, `false`. If `y` is initialized
and `x` is not initialized, `true`. If both `x` and `y` are initialized,
`(*x < *y)`.
* [*Throws:] Nothing.
* [*Notes:] Pointers have shallow relational operators while `optional` has
deep relational operators. Do not use `operator <` directly in generic code
which expect to be given either an `optional<T>` or a pointer; use __FUNCTION_LESS_POINTEES__ instead.
* [*Example:]
``
T x(12);
T y(34);
optional<T> def ;
optional<T> optX(x);
optional<T> optY(y);
// Identity always hold
assert ( !(def < def) );
assert ( optX == optX );
// Both uninitialized compare equal
assert ( def0 == def1 );
// Only one initialized compare unequal.
assert ( def0 != optX );
// Both initialized compare as (*lhs == *rhs)
assert ( optX == optY ) ;
assert ( optX != optZ ) ;
``
__SPACE__
[#reference_operator_compare_not_equal_optional_optional]
[: `bool operator != ( optional<T> const& x, optional<T> const& y );`]
* [*Returns: ] `!( x == y );`
* [*Throws:] Nothing.
__SPACE__
[#reference_operator_compare_greater_optional_optional]
[: `bool operator > ( optional<T> const& x, optional<T> const& y );`]
* [*Returns: ] `( y < x );`
* [*Throws:] Nothing.
__SPACE__
[#reference_operator_compare_less_or_equal_optional_optional]
[: `bool operator <= ( optional<T> const& x, optional<T> const& y );`]
* [*Returns: ] `!( y<x );`
* [*Throws:] Nothing.
__SPACE__
[#reference_operator_compare_greater_or_equal_optional_optional]
[: `bool operator >= ( optional<T> const& x, optional<T> const& y );`]
* [*Returns: ] `!( x<y );`
* [*Throws:] Nothing.
__SPACE__
[#reference_swap_optional_optional]
[: `void swap ( optional<T>& x, optional<T>& y );`]
* [*Effect:] If both `x` and `y` are initialized, calls `swap(*x,*y)`
using `std::swap`. If only one is initialized, say `x`, calls:
`y.reset(*x); x.reset();` If none is initialized, does nothing.
* [*Postconditions:] The states of `x` and `y` interchanged.
* [*Throws:] If both are initialized, whatever `swap(T&,T&)` throws. If only
one is initialized, whatever `T::T ( T const& )` throws.
* [*Notes:] If both are initialized, `swap(T&,T&)` is used unqualified but
with `std::swap` introduced in scope.
If only one is initialized, `T::~T()` and `T::T( T const& )` is called.
* [*Exception Safety:] If both are initialized, this operation has the
exception safety guarantees of `swap(T&,T&)`.
If only one is initialized, it has the same basic guarantee as
`optional<T>::reset( T const& )`.
* [*Example:]
``
T x(12);
T y(21);
optional<T> def0 ;
optional<T> def1 ;
optional<T> optX(x);
optional<T> optY(y);
boost::swap(def0,def1); // no-op
boost::swap(def0,optX);
assert ( *def0 == x );
assert ( !optX );
boost::swap(def0,optX); // Get back to original values
boost::swap(optX,optY);
assert ( *optX == y );
assert ( *optY == x );
``
[endsect]

376
doc/special_cases.qbk Normal file
View File

@ -0,0 +1,376 @@
[section Optional references]
This library allows the template parameter `T` to be of reference type:
`T&`, and to some extent, `T const&`.
However, since references are not real objects some restrictions apply and
some operations are not available in this case:
* Converting constructors
* Converting assignment
* InPlace construction
* InPlace assignment
* Value-access via pointer
Also, even though `optional<T&>` treats it wrapped pseudo-object much as
a real value, a true real reference is stored so aliasing will ocurr:
* Copies of `optional<T&>` will copy the references but all these references
will nonetheless reefer to the same object.
* Value-access will actually provide access to the referenced object
rather than the reference itself.
[endsect]
[#optional_refassign]
[section Rebinding semantics for assignment of optional references]
If you assign to an ['uninitialized ] `optional<T&>` the effect is to bind (for
the first time) to the object. Clearly, there is no other choice.
int x = 1 ;
int& rx = x ;
optional<int&> ora ;
optional<int&> orb(x) ;
ora = orb ; // now 'ora' is bound to 'x' through 'rx'
*ora = 2 ; // Changes value of 'x' through 'ora'
assert(x==2);
If you assign to a bare C++ reference, the assignment is forwarded to the
referenced object; it's value changes but the reference is never rebound.
int a = 1 ;
int& ra = a ;
int b = 2 ;
int& rb = b ;
ra = rb ; // Changes the value of 'a' to 'b'
assert(a==b);
b = 3 ;
assert(ra!=b); // 'ra' is not rebound to 'b'
Now, if you assign to an ['initialized ] `optional<T&>`, the effect is to
[*rebind] to the new object instead of assigning the referee. This is unlike
bare C++ references.
int a = 1 ;
int b = 2 ;
int& ra = a ;
int& rb = b ;
optional<int&> ora(ra) ;
optional<int&> orb(rb) ;
ora = orb ; // 'ora' is rebound to 'b'
*ora = 3 ; // Changes value of 'b' (not 'a')
assert(a==1);
assert(b==3);
[heading Rationale]
Rebinding semantics for the assignment of ['initialized ] `optional` references has
been chosen to provide [*consistency among initialization states] even at the
expense of lack of consistency with the semantics of bare C++ references.
It is true that `optional<U>` strives to behave as much as possible as `U`
does whenever it is initialized; but in the case when `U` is `T&`, doing so would
result in inconsistent behavior w.r.t to the lvalue initialization state.
Imagine `optional<T&>` forwarding assignment to the referenced object (thus
changing the referenced object value but not rebinding), and consider the
following code:
optional<int&> a = get();
int x = 1 ;
int& rx = x ;
optional<int&> b(rx);
a = b ;
What does the assignment do?
If `a` is ['uninitialized], the answer is clear: it binds to `x` (we now have
another reference to `x`).
But what if `a` is already ['initialized]? it would change the value of the
referenced object (whatever that is); which is inconsistent with the other
possible case.
If `optional<T&>` would assign just like `T&` does, you would never be able to
use Optional's assignment without explicitly handling the previous
initialization state unless your code is capable of functioning whether
after the assignment, `a` aliases the same object as `b` or not.
That is, you would have to discriminate in order to be consistency.
If in your code rebinding to another object is not an option, then is very
likely that binding for the fist time isn't either. In such case, assignment
to an ['uninitialized ] `optional<T&>` shall be prohibited. It is quite possible
that in such scenario the precondition that the lvalue must be already
initialized exist. If it doesn't, then binding for the first time is OK
while rebinding is not which is IMO very unlikely.
In such scenario, you can assign the value itself directly, as in:
assert(!!opt);
*opt=value;
[endsect]
[#optional_in_place_factories]
[section In-Place Factories]
One of the typical problems with wrappers and containers is that their
interfaces usually provide an operation to initialize or assign the
contained object as a copy of some other object. This not only requires the
underlying type to be __COPY_CONSTRUCTIBLE__, but also requires the existence of
a fully constructed object, often temporary, just to follow the copy from:
struct X
{
X ( int, std:::string ) ;
} ;
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
} ;
void foo()
{
// Temporary object created.
W ( 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 only needs to supply the arguments to the
constructor to use in the wrapped object construction.
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
W ( int a0, std::string a1) : wrapped_(a0,a1) {}
} ;
void foo()
{
// Wrapped object constructed in-place
// No temporary created.
W (123,"hello") ;
}
A limitation of this method is that it doesn't scale well to wrapped
objects with multiple constructors nor to generic code were the constructor
overloads are unknown.
The solution presented in this library is the family of [*InPlaceFactories]
and [*TypedInPlaceFactories].
These factories are a family of classes which encapsulate an increasing
number of arbitrary constructor parameters and supply a method to construct
an object of a given type using those parameters at an address specified by
the user via placement new.
For example, one member of this family looks like:
template<class T,class A0, class A1>
class TypedInPlaceFactory2
{
A0 m_a0 ; A1 m_a1 ;
public:
TypedInPlaceFactory2( A0 const& a0, A1 const& a1 ) : m_a0(a0), m_a1(a1) {}
void construct ( void* p ) { new (p) T(m_a0,m_a1) ; }
} ;
A wrapper class aware of this can use it as:
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
W ( TypedInPlaceFactory2 const& fac ) { fac.construct(&wrapped_) ; }
} ;
void foo()
{
// Wrapped object constructed in-place via a TypedInPlaceFactory.
// No temporary created.
W ( TypedInPlaceFactory2<X,int,std::string&rt(123,"hello")) ;
}
The factories are divided in two groups:
* [_TypedInPlaceFactories]: those which take the target type as a primary
template parameter.
* [_InPlaceFactories]: those with a template `construct(void*)` member
function taking the target type.
Within each group, all the family members differ only in the number of
parameters allowed.
This library provides an overloaded set of helper template functions to
construct these factories without requiring unnecessary template parameters:
template<class A0,...,class AN>
InPlaceFactoryN <A0,...,AN> in_place ( A0 const& a0, ..., AN const& aN) ;
template<class T,class A0,...,class AN>
TypedInPlaceFactoryN <T,A0,...,AN> in_place ( T const& a0, A0 const& a0, ..., AN const& aN) ;
In-place factories can be used generically by the wrapper and user as follows:
class W
{
X wrapped_ ;
public:
W ( X const& x ) : wrapped_(x) {}
template< class InPlaceFactory >
W ( InPlaceFactory const& fac ) { fac.template <X>construct(&wrapped_) ; }
} ;
void foo()
{
// Wrapped object constructed in-place via a InPlaceFactory.
// No temporary created.
W ( in_place(123,"hello") ) ;
}
The factories are implemented in the headers: __IN_PLACE_FACTORY_HPP__ and __TYPED_IN_PLACE_FACTORY_HPP__
[endsect]
[section A note about optional<bool>]
`optional<bool>` should be used with special caution and consideration.
First, it is functionally similar to a tristate boolean (false,maybe,true)
—such as __BOOST_TRIBOOL__— except that in a tristate boolean, the maybe state
[_represents a valid value], unlike the corresponding state of an uninitialized
`optional<bool>`.
It should be carefully considered if an `optional<bool>` instead of a `tribool`
is really needed.
Second, `optional<>` provides an implicit conversion to `bool`. This
conversion refers to the initialization state and not to the contained value.
Using `optional<bool>` can lead to subtle errors due to the implicit `bool`
conversion:
void foo ( bool v ) ;
void bar()
{
optional<bool> v = try();
// The following intended to pass the value of 'v' to foo():
foo(v);
// But instead, the initialization state is passed
// due to a typo: it should have been foo(*v).
}
The only implicit conversion is to `bool`, and it is safe in the sense that
typical integral promotions don't apply (i.e. if `foo()` takes an `int`
instead, it won't compile).
[endsect]
[section Exception Safety Guarantees]
Because of the current implementation (see [link optional_implementation_notes Implementation Notes]), all of the assignment methods:
* `optional<T>::operator= ( optional<T> const& )`
* `optional<T>::operator= ( T const& )`
* `template<class U> optional<T>::operator= ( optional<U> const& )`
* `template<class InPlaceFactory> optional<T>::operator= ( InPlaceFactory const& )`
* `template<class TypedInPlaceFactory> optional<T>::operator= ( TypedInPlaceFactory const& ) `
* `optional<T>:::reset ( T const&)`
Can only ['guarantee] the [_basic exception safety]: The lvalue optional is
left [_uninitialized] if an exception is thrown (any previous value is ['first]
destroyed using `T::~T()`)
On the other hand, the ['uninitializing] methods:
* `optional<T>::operator= ( detail::none_t )`
* `optional<T>::reset()`
Provide the no-throw guarantee (assuming a no-throw `T::~T()`)
However, since `optional<>` itself doesn't throw any exceptions, the only
source for exceptions here are `T`'s constructor, so if you know the exception
guarantees for `T::T ( T const& )`, you know that `optional`'s assignment and
reset has the same guarantees.
//
// Case 1: Exception thrown during assignment.
//
T v0(123);
optional<T> opt0(v0);
try
{
T v1(456);
optional<T> opt1(v1);
opt0 = opt1 ;
// If no exception was thrown, assignment succeeded.
assert( *opt0 == v1 ) ;
}
catch(...)
{
// If any exception was thrown, 'opt0' is reset to uninitialized.
assert( !opt0 ) ;
}
//
// Case 2: Exception thrown during reset(v)
//
T v0(123);
optional<T> opt(v0);
try
{
T v1(456);
opt.reset ( v1 ) ;
// If no exception was thrown, reset succeeded.
assert( *opt == v1 ) ;
}
catch(...)
{
// If any exception was thrown, 'opt' is reset to uninitialized.
assert( !opt ) ;
}
[heading Swap]
`void swap( optional<T>&, optional<T>& )` has the same exception guarantee
as `swap(T&,T&)` when both optionals are initialized.
If only one of the optionals is initialized, it gives the same ['basic]
exception guarantee as `optional<T>::reset( T const& )` (since
`optional<T>::reset()` doesn't throw).
If none of the optionals is initialized, it has no-throw guarantee
since it is a no-op.
[endsect]
[section Type requirements]
In general, `T` must be __COPY_CONSTRUCTIBLE__ and have a no-throw destructor.
The copy-constructible requirement is not needed if [*InPlaceFactories] are used.
`T` [_is not] required to be __SGI_DEFAULT_CONSTRUCTIBLE__.
[endsect]

View File

@ -0,0 +1,28 @@
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
//
#ifndef BOOST_DETAIL_NONE_T_17SEP2003_HPP
#define BOOST_DETAIL_NONE_T_17SEP2003_HPP
namespace boost {
namespace detail {
struct none_helper{};
typedef int none_helper::*none_t ;
} // namespace detail
} // namespace boost
#endif

View File

@ -1,5 +1,4 @@
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
// Copyright (C) 2014, 2015 Andrzej Krzemienski.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@ -13,7 +12,6 @@
#ifndef BOOST_NONE_17SEP2003_HPP
#define BOOST_NONE_17SEP2003_HPP
#include "boost/config.hpp"
#include "boost/none_t.hpp"
// NOTE: Borland users have to include this header outside any precompiled headers
@ -22,38 +20,9 @@
namespace boost {
#ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
BOOST_INLINE_VARIABLE none_t BOOST_CONSTEXPR_OR_CONST none = (static_cast<none_t>(0)) ;
#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
namespace detail { namespace optional_detail {
// the trick here is to make boost::none defined once as a global but in a header file
template <typename T>
struct none_instance
{
static const T instance;
};
template <typename T>
const T none_instance<T>::instance = T(); // global, but because 'tis a template, no cpp file required
} } // namespace detail::optional_detail
namespace {
// TU-local
const none_t& none = detail::optional_detail::none_instance<none_t>::instance;
}
#else
BOOST_INLINE_CONSTEXPR none_t none ((none_t::init_tag()));
#endif // older definitions
none_t const none = ((none_t)0) ;
} // namespace boost
#endif // header guard
#endif

View File

@ -1,5 +1,4 @@
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
// Copyright (C) 2014, 2024 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -13,43 +12,13 @@
#ifndef BOOST_NONE_T_17SEP2003_HPP
#define BOOST_NONE_T_17SEP2003_HPP
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#if defined (BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
|| defined(BOOST_NO_CXX11_LAMBDAS) || defined(BOOST_NO_CXX11_DECLTYPE_N3276) \
|| defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) \
|| defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) || defined(BOOST_NO_CXX11_STATIC_ASSERT)
#error "Boost.Optional requires some C++11 features since version 1.87. If you have an older C++ version use Boost.Optional version 1.86 or earlier."
#elif defined(BOOST_NO_CXX11_REF_QUALIFIERS) || defined(BOOST_NO_CXX11_NOEXCEPT) || defined(BOOST_NO_CXX11_DEFAULTED_MOVES)
BOOST_PRAGMA_MESSAGE("C++03 support is deprecated in Boost.Optional 1.83 and will be removed in Boost.Optional 1.88.")
#endif
namespace boost {
#ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;
#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
class none_t {};
#else
struct none_t
{
struct init_tag{};
explicit BOOST_CONSTEXPR none_t(init_tag){} // to disable default constructor
};
#endif // old implementation workarounds
} // namespace boost
#endif // header guard
#endif

View File

@ -1,41 +0,0 @@
// Copyright (C) 2014, Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
//
#ifndef BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
#define BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
#include <stdexcept>
#if __cplusplus < 201103L
#include <string> // to make converting-ctor std::string(char const*) visible
#endif
namespace boost {
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wweak-vtables"
#endif
class bad_optional_access : public std::logic_error
{
public:
bad_optional_access()
: std::logic_error("Attempted to access the value of an uninitialized optional object.")
{}
};
#if defined(__clang__)
# pragma clang diagnostic pop
#endif
} // namespace boost
#endif

View File

@ -1,59 +0,0 @@
// Copyright (C) 2017 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_EXPERIMENTAL_TRAITS_04NOV2017_HPP
#define BOOST_OPTIONAL_DETAIL_EXPERIMENTAL_TRAITS_04NOV2017_HPP
#include <boost/type_traits.hpp>
// The condition to use POD implementation
#ifdef BOOST_OPTIONAL_CONFIG_NO_POD_SPEC
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif defined BOOST_OPTIONAL_CONFIG_NO_SPEC_FOR_TRIVIAL_TYPES
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif !defined BOOST_HAS_TRIVIAL_MOVE_ASSIGN
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif !defined BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif !defined BOOST_HAS_TRIVIAL_COPY
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif !defined BOOST_HAS_TRIVIAL_ASSIGN
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#elif !defined BOOST_HAS_TRIVIAL_DESTRUCTOR
# define BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
#endif
namespace boost { namespace optional_detail {
#ifndef BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
template <typename T>
struct is_trivially_semiregular
: boost::conditional<(boost::has_trivial_copy_constructor<T>::value &&
boost::has_trivial_move_constructor<T>::value &&
boost::has_trivial_destructor<T>::value &&
boost::has_trivial_move_assign<T>::value &&
boost::has_trivial_assign<T>::value),
boost::true_type, boost::false_type>::type
{};
#else
template <typename T>
struct is_trivially_semiregular
: boost::conditional<(boost::is_scalar<T>::value && !boost::is_const<T>::value && !boost::is_volatile<T>::value),
boost::true_type, boost::false_type>::type
{};
#endif
}} // boost::optional_detail
#endif

View File

@ -1,70 +0,0 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2016 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_ALIGNED_STORAGE_AJK_12FEB2016_HPP
#define BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_ALIGNED_STORAGE_AJK_12FEB2016_HPP
namespace boost {
namespace optional_detail {
// This local class is used instead of that in "aligned_storage.hpp"
// because I've found the 'official' class to ICE BCB5.5
// when some types are used with optional<>
// (due to sizeof() passed down as a non-type template parameter)
template <class T>
class aligned_storage
{
// Borland ICEs if unnamed unions are used for this!
// BOOST_MAY_ALIAS works around GCC warnings about breaking strict aliasing rules when casting storage address to T*
union BOOST_MAY_ALIAS dummy_u
{
unsigned char data[ sizeof(T) ];
BOOST_DEDUCED_TYPENAME type_with_alignment<
::boost::alignment_of<T>::value >::type aligner_;
} dummy_ ;
public:
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
void const* address() const { return &dummy_; }
void * address() { return &dummy_; }
#else
void const* address() const { return dummy_.data; }
void * address() { return dummy_.data; }
#endif
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
// This workaround is supposed to silence GCC warnings about broken strict aliasing rules
T const* ptr_ref() const
{
union { void const* ap_pvoid; T const* as_ptype; } caster = { address() };
return caster.as_ptype;
}
T * ptr_ref()
{
union { void* ap_pvoid; T* as_ptype; } caster = { address() };
return caster.as_ptype;
}
#else
T const* ptr_ref() const { return static_cast<T const*>(address()); }
T * ptr_ref() { return static_cast<T *> (address()); }
#endif
T const& ref() const { return *boost::core::launder(ptr_ref()); }
T & ref() { return *boost::core::launder(ptr_ref()); }
} ;
} // namespace optional_detail
} // namespace boost
#endif // header guard

View File

@ -1,144 +0,0 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2015 - 2017 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_OPTIONAL_CONFIG_AJK_28JAN2015_HPP
#define BOOST_OPTIONAL_DETAIL_OPTIONAL_CONFIG_AJK_28JAN2015_HPP
#include <boost/config.hpp>
#include <boost/config/workaround.hpp>
#if (defined BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES)
# define BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
#endif
#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)
// AFAICT only Intel 7 correctly resolves the overload set
// that includes the in-place factory taking functions,
// so for the other icc versions, in-place factory support
// is disabled
# define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
#endif
#if BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x551)
// BCB (5.5.1) cannot parse the nested template struct in an inplace factory.
# define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
#endif
#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) \
&& defined BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
// BCB (up to 5.64) has the following bug:
// If there is a member function/operator template of the form
// template<class Expr> mfunc( Expr expr ) ;
// some calls are resolved to this even if there are other better matches.
// The effect of this bug is that calls to converting ctors and assignments
// are incorrectly sink to this general catch-all member function template as shown above.
# define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
#endif
#if !defined(BOOST_NO_MAY_ALIAS)
// GCC since 3.3 and some other compilers have may_alias attribute that helps to alleviate
// optimizer issues with regard to violation of the strict aliasing rules. The optional< T >
// storage type is marked with this attribute in order to let the compiler know that it will
// alias objects of type T and silence compilation warnings.
# define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
#endif
#if (defined(_MSC_VER) && _MSC_VER <= 1800)
// on MSVC 2013 and earlier an unwanted temporary is created when you assign from
// a const lvalue of integral type. Thus we bind not to the original address but
// to a temporary.
# define BOOST_OPTIONAL_CONFIG_NO_PROPER_ASSIGN_FROM_CONST_INT
#endif
#if (defined __GNUC__) && (!defined BOOST_INTEL_CXX_VERSION) && (!defined __clang__)
// On some GCC versions an unwanted temporary is created when you copy-initialize
// from a const lvalue of integral type. Thus we bind not to the original address but
// to a temporary.
# if (__GNUC__ < 4)
# define BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT
# endif
# if (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
# define BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT
# endif
# if (__GNUC__ == 5 && __GNUC_MINOR__ < 2)
# define BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT
# endif
# if (__GNUC__ == 5 && __GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ == 0)
# define BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT
# endif
#endif // defined(__GNUC__)
#if (defined __GNUC__)
// On some initial rvalue reference implementations GCC does it in a strange way,
// preferring perfect-forwarding constructor to implicit copy constructor.
# if (__GNUC__ == 4 && __GNUC_MINOR__ == 4)
# define BOOST_OPTIONAL_CONFIG_NO_LEGAL_CONVERT_FROM_REF
# endif
# if (__GNUC__ == 4 && __GNUC_MINOR__ == 5)
# define BOOST_OPTIONAL_CONFIG_NO_LEGAL_CONVERT_FROM_REF
# endif
#endif // defined(__GNUC__)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500) && !defined(__SUNPRO_CC)
// this condition is a copy paste from is_constructible.hpp
// I also disable SUNPRO, as it seems not to support type_traits correctly
#else
# define BOOST_OPTIONAL_DETAIL_NO_IS_CONSTRUCTIBLE_TRAIT
#endif
#if defined __SUNPRO_CC
# define BOOST_OPTIONAL_DETAIL_NO_SFINAE_FRIENDLY_CONSTRUCTORS
#elif (defined _MSC_FULL_VER) && (_MSC_FULL_VER < 190023026)
# define BOOST_OPTIONAL_DETAIL_NO_SFINAE_FRIENDLY_CONSTRUCTORS
#elif defined BOOST_GCC && !defined BOOST_GCC_CXX11
# define BOOST_OPTIONAL_DETAIL_NO_SFINAE_FRIENDLY_CONSTRUCTORS
#elif defined BOOST_GCC_VERSION && BOOST_GCC_VERSION < 40800
# define BOOST_OPTIONAL_DETAIL_NO_SFINAE_FRIENDLY_CONSTRUCTORS
#endif
// Detect support for defaulting move operations
// (some older compilers implement rvalue references,
// defaulted functions but move operations are not special members and cannot be defaulted)
#ifdef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS
#elif BOOST_WORKAROUND(BOOST_MSVC, < 1900)
# define BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS
#elif BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40600)
# define BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS
#endif
#ifdef BOOST_OPTIONAL_CONFIG_NO_DIRECT_STORAGE_SPEC
# define BOOST_OPTIONAL_DETAIL_NO_DIRECT_STORAGE_SPEC
#endif
#ifdef BOOST_NO_CXX11_REF_QUALIFIERS
# define BOOST_OPTIONAL_CONST_REF_QUAL const
# define BOOST_OPTIONAL_REF_QUAL
#else
# define BOOST_OPTIONAL_CONST_REF_QUAL const&
# define BOOST_OPTIONAL_REF_QUAL &
#endif
#endif // header guard

View File

@ -1,36 +0,0 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2016 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_FACTORY_SUPPORT_AJK_12FEB2016_HPP
#define BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_FACTORY_SUPPORT_AJK_12FEB2016_HPP
// Daniel Wallin discovered that bind/apply.hpp badly interacts with the apply<>
// member template of a factory as used in the optional<> implementation.
// He proposed this simple fix which is to move the call to apply<> outside
// namespace boost.
namespace boost_optional_detail
{
template <class T, class Factory>
inline void construct(Factory const& factory, void* address)
{
factory.BOOST_NESTED_TEMPLATE apply<T>(address);
}
}
namespace boost
{
class in_place_factory_base ;
class typed_in_place_factory_base ;
}
#endif // header guard

View File

@ -1,49 +0,0 @@
// Copyright (C) 2022 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_OPTIONAL_HASH_AJK_20MAY2022_HPP
#define BOOST_OPTIONAL_DETAIL_OPTIONAL_HASH_AJK_20MAY2022_HPP
#include <boost/optional/optional_fwd.hpp>
#include <boost/config.hpp>
#if !defined(BOOST_OPTIONAL_CONFIG_DO_NOT_SPECIALIZE_STD_HASH) && !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL)
#include <functional>
namespace std
{
template <typename T>
struct hash<boost::optional<T> >
{
typedef std::size_t result_type;
typedef boost::optional<T> argument_type;
BOOST_CONSTEXPR result_type operator()(const argument_type& arg) const {
return arg ? std::hash<T>()(*arg) : result_type();
}
};
template <typename T>
struct hash<boost::optional<T&> >
{
typedef std::size_t result_type;
typedef boost::optional<T&> argument_type;
BOOST_CONSTEXPR result_type operator()(const argument_type& arg) const {
return arg ? std::hash<T>()(*arg) : result_type();
}
};
}
#endif // !defined(BOOST_OPTIONAL_CONFIG_DO_NOT_SPECIALIZE_STD_HASH) && !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL)
#endif // header guard

View File

@ -1,280 +0,0 @@
// Copyright (C) 2015-2024 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_OPTIONAL_REFERENCE_SPEC_AJK_03OCT2015_HPP
#define BOOST_OPTIONAL_DETAIL_OPTIONAL_REFERENCE_SPEC_AJK_03OCT2015_HPP
#ifdef BOOST_OPTIONAL_CONFIG_NO_PROPER_ASSIGN_FROM_CONST_INT
#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/is_const.hpp>
#endif
# if 1
namespace boost {
namespace detail {
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
template <class From>
void prevent_binding_rvalue()
{
#ifndef BOOST_OPTIONAL_CONFIG_ALLOW_BINDING_TO_RVALUES
static_assert(boost::is_lvalue_reference<From>::value,
"binding rvalue references to optional lvalue references is disallowed");
#endif
}
template <class T>
BOOST_DEDUCED_TYPENAME boost::remove_reference<T>::type& forward_reference(T&& r)
{
static_assert(boost::is_lvalue_reference<T>::value,
"binding rvalue references to optional lvalue references is disallowed");
return optional_detail::forward<T>(r);
}
#endif // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
template <class T>
struct is_const_integral
{
static const bool value = boost::is_const<T>::value && boost::is_integral<T>::value;
};
template <class T>
struct is_const_integral_bad_for_conversion
{
#if (!defined BOOST_OPTIONAL_CONFIG_ALLOW_BINDING_TO_RVALUES) && (defined BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT)
static const bool value = boost::is_const<T>::value && boost::is_integral<T>::value;
#else
static const bool value = false;
#endif
};
template <class From>
void prevent_assignment_from_false_const_integral()
{
#ifndef BOOST_OPTIONAL_CONFIG_ALLOW_BINDING_TO_RVALUES
#ifdef BOOST_OPTIONAL_CONFIG_NO_PROPER_ASSIGN_FROM_CONST_INT
// MSVC compiler without rvalue references: we need to disable the assignment from
// const integral lvalue reference, as it may be an invalid temporary
static_assert(!is_const_integral<From>::value,
"binding const lvalue references to integral types is disabled in this compiler");
#endif
#endif
}
template <class T>
struct is_optional_
{
static const bool value = false;
};
template <class U>
struct is_optional_< ::boost::optional<U> >
{
static const bool value = true;
};
template <class T>
struct is_no_optional
{
static const bool value = !is_optional_<BOOST_DEDUCED_TYPENAME boost::decay<T>::type>::value;
};
template <class T, class U>
struct is_same_decayed
{
static const bool value = ::boost::is_same<T, BOOST_DEDUCED_TYPENAME ::boost::remove_reference<U>::type>::value
|| ::boost::is_same<T, const BOOST_DEDUCED_TYPENAME ::boost::remove_reference<U>::type>::value;
};
template <class T, class U>
struct no_unboxing_cond
{
static const bool value = is_no_optional<U>::value && !is_same_decayed<T, U>::value;
};
} // namespace detail
template <class T>
class optional<T&> : public optional_detail::optional_tag
{
T* ptr_;
public:
typedef T& value_type;
typedef T& reference_type;
typedef T& reference_const_type;
typedef T& rval_reference_type;
typedef T* pointer_type;
typedef T* pointer_const_type;
optional() BOOST_NOEXCEPT : ptr_() {}
optional(none_t) BOOST_NOEXCEPT : ptr_() {}
template <class U>
explicit optional(const optional<U&>& rhs) BOOST_NOEXCEPT : ptr_(rhs.get_ptr()) {}
optional(const optional& rhs) BOOST_NOEXCEPT : ptr_(rhs.get_ptr()) {}
// the following two implement a 'conditionally explicit' constructor: condition is a hack for buggy compilers with screwed conversion construction from const int
template <class U>
explicit optional(U& rhs, BOOST_DEDUCED_TYPENAME boost::enable_if_c<detail::is_same_decayed<T, U>::value && detail::is_const_integral_bad_for_conversion<U>::value, bool>::type = true) BOOST_NOEXCEPT
: ptr_(boost::addressof(rhs)) {}
template <class U>
optional(U& rhs, BOOST_DEDUCED_TYPENAME boost::enable_if_c<detail::is_same_decayed<T, U>::value && !detail::is_const_integral_bad_for_conversion<U>::value, bool>::type = true) BOOST_NOEXCEPT
: ptr_(boost::addressof(rhs)) {}
optional& operator=(const optional& rhs) BOOST_NOEXCEPT { ptr_ = rhs.get_ptr(); return *this; }
template <class U>
optional& operator=(const optional<U&>& rhs) BOOST_NOEXCEPT { ptr_ = rhs.get_ptr(); return *this; }
optional& operator=(none_t) BOOST_NOEXCEPT { ptr_ = 0; return *this; }
void swap(optional& rhs) BOOST_NOEXCEPT { std::swap(ptr_, rhs.ptr_); }
T& get() const { BOOST_ASSERT(ptr_); return *ptr_; }
T* get_ptr() const BOOST_NOEXCEPT { return ptr_; }
T* operator->() const { BOOST_ASSERT(ptr_); return ptr_; }
T& operator*() const { BOOST_ASSERT(ptr_); return *ptr_; }
T& value() const
{
if (this->is_initialized())
return this->get();
else
throw_exception(bad_optional_access());
}
explicit operator bool() const BOOST_NOEXCEPT { return ptr_ != 0; }
void reset() BOOST_NOEXCEPT { ptr_ = 0; }
bool is_initialized() const BOOST_NOEXCEPT { return ptr_ != 0; }
bool has_value() const BOOST_NOEXCEPT { return ptr_ != 0; }
template <typename F>
optional<typename optional_detail::result_of<F, reference_const_type>::type>
map(F f) const
{
if (this->has_value())
return f(this->get());
else
return none;
}
template <typename F>
optional<typename optional_detail::result_value_type<F, reference_const_type>::type>
flat_map(F f) const
{
if (this->has_value())
return f(get());
else
return none;
}
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
optional(T&& /* rhs */) BOOST_NOEXCEPT { detail::prevent_binding_rvalue<T&&>(); }
template <class R>
optional(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::no_unboxing_cond<T, R>, bool>::type = true) BOOST_NOEXCEPT
: ptr_(boost::addressof(r)) { detail::prevent_binding_rvalue<R>(); }
template <class R>
optional(bool cond, R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, bool>::type = true) BOOST_NOEXCEPT
: ptr_(cond ? boost::addressof(r) : 0) { detail::prevent_binding_rvalue<R>(); }
template <class R>
BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, optional<T&>&>::type
operator=(R&& r) BOOST_NOEXCEPT { detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); return *this; }
template <class R>
void emplace(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, bool>::type = true) BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }
template <class R>
T& get_value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, bool>::type = true) const BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); return ptr_ ? *ptr_ : r; }
template <class R>
T& value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, bool>::type = true) const BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); return ptr_ ? *ptr_ : r; }
template <class R>
void reset(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, bool>::type = true) BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }
template <class F>
T& value_or_eval(F f) const { return ptr_ ? *ptr_ : detail::forward_reference(f()); }
#else // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
// the following two implement a 'conditionally explicit' constructor
template <class U>
explicit optional(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<detail::no_unboxing_cond<T, U>::value && detail::is_const_integral_bad_for_conversion<U>::value, bool>::type = true) BOOST_NOEXCEPT
: ptr_(boost::addressof(v)) { }
template <class U>
optional(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<detail::no_unboxing_cond<T, U>::value && !detail::is_const_integral_bad_for_conversion<U>::value, bool>::type = true) BOOST_NOEXCEPT
: ptr_(boost::addressof(v)) { }
template <class U>
optional(bool cond, U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, bool>::type = true) BOOST_NOEXCEPT : ptr_(cond ? boost::addressof(v) : 0) {}
template <class U>
BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, optional<T&>&>::type
operator=(U& v) BOOST_NOEXCEPT
{
detail::prevent_assignment_from_false_const_integral<U>();
ptr_ = boost::addressof(v); return *this;
}
template <class U>
void emplace(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, bool>::type = true) BOOST_NOEXCEPT
{ ptr_ = boost::addressof(v); }
template <class U>
T& get_value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, bool>::type = true) const BOOST_NOEXCEPT
{ return ptr_ ? *ptr_ : v; }
template <class U>
T& value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, bool>::type = true) const BOOST_NOEXCEPT
{ return ptr_ ? *ptr_ : v; }
template <class U>
void reset(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, bool>::type = true) BOOST_NOEXCEPT
{ ptr_ = boost::addressof(v); }
template <class F>
T& value_or_eval(F f) const { return ptr_ ? *ptr_ : f(); }
#endif // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
};
template <class T>
void swap ( optional<T&>& x, optional<T&>& y) BOOST_NOEXCEPT
{
x.swap(y);
}
} // namespace boost
#endif // 1/0
#endif // header guard

View File

@ -1,196 +0,0 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2015, 2024 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_OPTIONAL_RELOPS_AJK_03OCT2015_HPP
#define BOOST_OPTIONAL_DETAIL_OPTIONAL_RELOPS_AJK_03OCT2015_HPP
namespace boost {
// optional's relational operators ( ==, !=, <, >, <=, >= ) have deep-semantics (compare values).
// WARNING: This is UNLIKE pointers. Use equal_pointees()/less_pointees() in generic code instead,
// to obtain the same semantic for pointers.
//
// optional<T> vs optional<T> cases
//
template<class T>
inline
bool operator == ( optional<T> const& x, optional<T> const& y )
{ return bool(x) && bool(y) ? *x == *y : bool(x) == bool(y); }
template<class T>
inline
bool operator < ( optional<T> const& x, optional<T> const& y )
{ return !y ? false : (!x ? true : (*x) < (*y)); }
template<class T>
inline
bool operator != ( optional<T> const& x, optional<T> const& y )
{ return !( x == y ) ; }
template<class T>
inline
bool operator > ( optional<T> const& x, optional<T> const& y )
{ return y < x ; }
template<class T>
inline
bool operator <= ( optional<T> const& x, optional<T> const& y )
{ return !( y < x ) ; }
template<class T>
inline
bool operator >= ( optional<T> const& x, optional<T> const& y )
{ return !( x < y ) ; }
//
// optional<T> vs T cases
//
template<class T>
inline
bool operator == ( optional<T> const& x, T const& y )
{ return x && (*x == y); }
template<class T>
inline
bool operator < ( optional<T> const& x, T const& y )
{ return (!x) || (*x < y); }
template<class T>
inline
bool operator != ( optional<T> const& x, T const& y )
{ return !( x == y ) ; }
template<class T>
inline
bool operator > ( optional<T> const& x, T const& y )
{ return y < x ; }
template<class T>
inline
bool operator <= ( optional<T> const& x, T const& y )
{ return !( y < x ) ; }
template<class T>
inline
bool operator >= ( optional<T> const& x, T const& y )
{ return !( x < y ) ; }
//
// T vs optional<T> cases
//
template<class T>
inline
bool operator == ( T const& x, optional<T> const& y )
{ return y && (x == *y); }
template<class T>
inline
bool operator < ( T const& x, optional<T> const& y )
{ return y && (x < *y); }
template<class T>
inline
bool operator != ( T const& x, optional<T> const& y )
{ return !( x == y ) ; }
template<class T>
inline
bool operator > ( T const& x, optional<T> const& y )
{ return y < x ; }
template<class T>
inline
bool operator <= ( T const& x, optional<T> const& y )
{ return !( y < x ) ; }
template<class T>
inline
bool operator >= ( T const& x, optional<T> const& y )
{ return !( x < y ) ; }
//
// optional<T> vs none cases
//
template<class T>
inline
bool operator == ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
{ return !x; }
template<class T>
inline
bool operator < ( optional<T> const&, none_t )
{ return false; }
template<class T>
inline
bool operator != ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
{ return bool(x); }
template<class T>
inline
bool operator > ( optional<T> const& x, none_t y )
{ return y < x ; }
template<class T>
inline
bool operator <= ( optional<T> const& x, none_t y )
{ return !( y < x ) ; }
template<class T>
inline
bool operator >= ( optional<T> const& x, none_t y )
{ return !( x < y ) ; }
//
// none vs optional<T> cases
//
template<class T>
inline
bool operator == ( none_t , optional<T> const& y ) BOOST_NOEXCEPT
{ return !y; }
template<class T>
inline
bool operator < ( none_t , optional<T> const& y )
{ return bool(y); }
template<class T>
inline
bool operator != ( none_t, optional<T> const& y ) BOOST_NOEXCEPT
{ return bool(y); }
template<class T>
inline
bool operator > ( none_t x, optional<T> const& y )
{ return y < x ; }
template<class T>
inline
bool operator <= ( none_t x, optional<T> const& y )
{ return !( y < x ) ; }
template<class T>
inline
bool operator >= ( none_t x, optional<T> const& y )
{ return !( x < y ) ; }
} // namespace boost
#endif // header guard

View File

@ -1,117 +0,0 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2015 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_DETAIL_OPTIONAL_SWAP_AJK_28JAN2015_HPP
#define BOOST_OPTIONAL_DETAIL_OPTIONAL_SWAP_AJK_28JAN2015_HPP
#include <boost/core/invoke_swap.hpp>
#include <boost/optional/optional_fwd.hpp>
namespace boost {
namespace optional_detail {
template <bool use_default_constructor> struct swap_selector;
template <>
struct swap_selector<true>
{
template <class T>
static void optional_swap ( optional<T>& x, optional<T>& y )
{
const bool hasX = !!x;
const bool hasY = !!y;
if ( !hasX && !hasY )
return;
if( !hasX )
x.emplace();
else if ( !hasY )
y.emplace();
// Boost.Core.Swap will take care of ADL and workarounds for broken compilers
boost::core::invoke_swap(x.get(), y.get());
if( !hasX )
y = boost::none ;
else if( !hasY )
x = boost::none ;
}
};
#ifdef BOOST_OPTIONAL_DETAIL_MOVE
# undef BOOST_OPTIONAL_DETAIL_MOVE
#endif
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
# define BOOST_OPTIONAL_DETAIL_MOVE(EXPR_) optional_detail::move(EXPR_)
#else
# define BOOST_OPTIONAL_DETAIL_MOVE(EXPR_) EXPR_
#endif
template <>
struct swap_selector<false>
{
template <class T>
static void optional_swap ( optional<T>& x, optional<T>& y )
//BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(boost::core::invoke_swap(*x, *y)))
{
if (x)
{
if (y)
{
boost::core::invoke_swap(*x, *y);
}
else
{
y = BOOST_OPTIONAL_DETAIL_MOVE(*x);
x = boost::none;
}
}
else
{
if (y)
{
x = BOOST_OPTIONAL_DETAIL_MOVE(*y);
y = boost::none;
}
}
}
};
} // namespace optional_detail
#if (!defined BOOST_CONFIG_RESTORE_OBSOLETE_SWAP_IMPLEMENTATION)
template<class T>
struct optional_swap_should_use_default_constructor : boost::false_type {} ;
#else
template<class T>
struct optional_swap_should_use_default_constructor : has_nothrow_default_constructor<T> {} ;
#endif
template <class T>
inline void swap ( optional<T>& x, optional<T>& y )
//BOOST_NOEXCEPT_IF(::boost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(boost::core::invoke_swap(*x, *y)))
{
optional_detail::swap_selector<optional_swap_should_use_default_constructor<T>::value>::optional_swap(x, y);
}
} // namespace boost
#undef BOOST_OPTIONAL_DETAIL_MOVE
#endif // header guard

View File

@ -1,270 +0,0 @@
// Copyright (C) 2017 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
// trivially-copyable version of the storage
template<class T>
class tc_optional_base : public optional_tag
{
private :
typedef tc_optional_base<T> this_type ;
protected :
typedef T value_type ;
protected:
typedef T & reference_type ;
typedef T const& reference_const_type ;
typedef T && rval_reference_type ;
typedef T && reference_type_of_temporary_wrapper ;
typedef T * pointer_type ;
typedef T const* pointer_const_type ;
typedef T const& argument_type ;
tc_optional_base()
:
m_initialized(false), m_storage() {}
tc_optional_base ( none_t )
:
m_initialized(false), m_storage() {}
tc_optional_base ( init_value_tag, argument_type val )
:
m_initialized(true), m_storage(val) {}
tc_optional_base ( bool cond, argument_type val )
:
m_initialized(cond), m_storage(val) {}
// tc_optional_base ( tc_optional_base const& ) = default;
template<class Expr, class PtrExpr>
explicit tc_optional_base ( Expr&& expr, PtrExpr const* tag )
:
m_initialized(false)
{
construct(optional_detail::forward<Expr>(expr),tag);
}
// tc_optional_base& operator= ( tc_optional_base const& ) = default;
// ~tc_optional_base() = default;
// Assigns from another optional<T> (deep-copies the rhs value)
void assign ( tc_optional_base const& rhs )
{
*this = rhs;
}
// Assigns from another _convertible_ optional<U> (deep-copies the rhs value)
template<class U>
void assign ( optional<U> const& rhs )
{
if ( rhs.is_initialized() )
#ifndef BOOST_OPTIONAL_CONFIG_RESTORE_ASSIGNMENT_OF_NONCONVERTIBLE_TYPES
m_storage = rhs.get();
#else
m_storage = static_cast<value_type>(rhs.get());
#endif
m_initialized = rhs.is_initialized();
}
// move-assigns from another _convertible_ optional<U> (deep-moves from the rhs value)
template<class U>
void assign ( optional<U>&& rhs )
{
typedef BOOST_DEDUCED_TYPENAME optional<U>::rval_reference_type ref_type;
if ( rhs.is_initialized() )
m_storage = static_cast<ref_type>(rhs.get());
m_initialized = rhs.is_initialized();
}
void assign ( argument_type val )
{
construct(val);
}
void assign ( none_t ) { destroy(); }
#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
template<class Expr, class ExprPtr>
void assign_expr ( Expr&& expr, ExprPtr const* tag )
{
construct(optional_detail::forward<Expr>(expr),tag);
}
#endif
public :
// Destroys the current value, if any, leaving this UNINITIALIZED
// No-throw (assuming T::~T() doesn't)
void reset() BOOST_NOEXCEPT { destroy(); }
// **DEPRECATED** Replaces the current value -if any- with 'val'
void reset ( argument_type val ) BOOST_NOEXCEPT { assign(val); }
// Returns a pointer to the value if this is initialized, otherwise,
// returns NULL.
// No-throw
pointer_const_type get_ptr() const { return m_initialized ? get_ptr_impl() : 0 ; }
pointer_type get_ptr() { return m_initialized ? get_ptr_impl() : 0 ; }
bool is_initialized() const { return m_initialized ; }
protected :
void construct ( argument_type val )
{
m_storage = val ;
m_initialized = true ;
}
// Constructs in-place
// upon exception *this is always uninitialized
template<class... Args>
void construct ( in_place_init_t, Args&&... args )
{
m_storage = value_type( optional_detail::forward<Args>(args)... ) ;
m_initialized = true ;
}
template<class... Args>
void emplace_assign ( Args&&... args )
{
construct(in_place_init, optional_detail::forward<Args>(args)...);
}
template<class... Args>
explicit tc_optional_base ( in_place_init_t, Args&&... args )
:
m_initialized(false)
{
construct(in_place_init, optional_detail::forward<Args>(args)...);
}
template<class... Args>
explicit tc_optional_base ( in_place_init_if_t, bool cond, Args&&... args )
:
m_initialized(false)
{
if ( cond )
construct(in_place_init, optional_detail::forward<Args>(args)...);
}
#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
// Constructs in-place using the given factory
template<class Expr>
void construct ( Expr&& factory, in_place_factory_base const* )
{
boost_optional_detail::construct<value_type>(factory, boost::addressof(m_storage));
m_initialized = true ;
}
// Constructs in-place using the given typed factory
template<class Expr>
void construct ( Expr&& factory, typed_in_place_factory_base const* )
{
factory.apply(boost::addressof(m_storage)) ;
m_initialized = true ;
}
template<class Expr>
void assign_expr_to_initialized ( Expr&& factory, in_place_factory_base const* tag )
{
destroy();
construct(factory,tag);
}
// Constructs in-place using the given typed factory
template<class Expr>
void assign_expr_to_initialized ( Expr&& factory, typed_in_place_factory_base const* tag )
{
destroy();
construct(factory,tag);
}
#endif
// Constructs using any expression implicitly convertible to the single argument
// of a one-argument T constructor.
// Converting constructions of optional<T> from optional<U> uses this function with
// 'Expr' being of type 'U' and relying on a converting constructor of T from U.
template<class Expr>
void construct ( Expr&& expr, void const* )
{
m_storage = value_type(optional_detail::forward<Expr>(expr)) ;
m_initialized = true ;
}
// Assigns using a form any expression implicitly convertible to the single argument
// of a T's assignment operator.
// Converting assignments of optional<T> from optional<U> uses this function with
// 'Expr' being of type 'U' and relying on a converting assignment of T from U.
template<class Expr>
void assign_expr_to_initialized ( Expr&& expr, void const* )
{
assign_value( optional_detail::forward<Expr>(expr) );
}
#ifdef BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
// BCB5.64 (and probably lower versions) workaround.
// The in-place factories are supported by means of catch-all constructors
// and assignment operators (the functions are parameterized in terms of
// an arbitrary 'Expr' type)
// This compiler incorrectly resolves the overload set and sinks optional<T> and optional<U>
// to the 'Expr'-taking functions even though explicit overloads are present for them.
// Thus, the following overload is needed to properly handle the case when the 'lhs'
// is another optional.
//
// For VC<=70 compilers this workaround doesn't work because the compiler issues and error
// instead of choosing the wrong overload
//
// Notice that 'Expr' will be optional<T> or optional<U> (but not tc_optional_base<..>)
template<class Expr>
void construct ( Expr&& expr, optional_tag const* )
{
if ( expr.is_initialized() )
{
// An exception can be thrown here.
// It it happens, THIS will be left uninitialized.
m_storage = value_type(optional_detail::move(expr.get())) ;
m_initialized = true ;
}
}
#endif // defined BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
void assign_value ( argument_type val ) { m_storage = val; }
void assign_value ( rval_reference_type val ) { m_storage = static_cast<rval_reference_type>(val); }
void destroy()
{
m_initialized = false;
}
reference_const_type get_impl() const { return m_storage ; }
reference_type get_impl() { return m_storage ; }
pointer_const_type get_ptr_impl() const { return boost::addressof(m_storage); }
pointer_type get_ptr_impl() { return boost::addressof(m_storage); }
private :
bool m_initialized ;
T m_storage ;
} ;

View File

@ -1,41 +0,0 @@
// Copyright (C) 2024 Ryan Malcolm Underwood.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// typenametea@gmail.com
#ifndef BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_UTILITY_RMU_06OCT2024_HPP
#define BOOST_OPTIONAL_OPTIONAL_DETAIL_OPTIONAL_UTILITY_RMU_06OCT2024_HPP
namespace boost {
namespace optional_detail {
// Workaround: forward and move aren't constexpr in C++11
template <class T>
inline constexpr T&& forward(typename boost::remove_reference<T>::type& t) noexcept
{
return static_cast<T&&>(t);
}
template <class T>
inline constexpr T&& forward(typename boost::remove_reference<T>::type&& t) noexcept
{
static_assert(!boost::is_lvalue_reference<T>::value, "Can not forward an rvalue as an lvalue.");
return static_cast<T&&>(t);
}
template <class T>
inline constexpr typename boost::remove_reference<T>::type&& move(T&& t) noexcept
{
return static_cast<typename boost::remove_reference<T>::type&&>(t);
}
} // namespace optional_detail
} // namespace boost
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,40 +1,21 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2016 Andrzej Krzemienski
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
//
// Revisions:
// 10 May 2008 (added swap related forward declaration) Niels Dekker
//
#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
#include <boost/config.hpp>
namespace boost {
template<class T> class optional ;
// This forward is needed to refer to namespace scope swap from the member swap
template<class T> void swap ( optional<T>& , optional<T>& ) ;
template<class T> struct optional_swap_should_use_default_constructor ;
#ifndef BOOST_OPTIONAL_CONFIG_DONT_SPECIALIZE_OPTIONAL_REFS
template<class T> class optional<T&> ;
template<class T> void swap ( optional<T&>& , optional<T&>& ) BOOST_NOEXCEPT;
#endif
} // namespace boost
#endif

View File

@ -4,7 +4,7 @@
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
@ -12,38 +12,39 @@
#ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
#ifndef BOOST_NO_IOSTREAM
#include <istream>
#include <ostream>
#if defined __GNUC__
# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
# define BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
# endif
#endif // __GNUC__
#if defined BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
# include <iostream>
#else
# include <istream>
# include <ostream>
#endif
#include "boost/none.hpp"
#include "boost/optional/optional.hpp"
#include "boost/utility/value_init.hpp"
namespace boost
{
template<class CharType, class CharTrait>
inline
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, none_t)
{
if (out.good())
{
out << "--";
}
return out;
}
#if defined (BOOST_NO_TEMPLATED_STREAMS)
template<class T>
inline std::ostream& operator<<(std::ostream& out, optional<T> const& v)
#else
template<class CharType, class CharTrait, class T>
inline
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
#endif
{
if (out.good())
if ( out.good() )
{
if (!v)
if ( !v )
out << "--" ;
else out << ' ' << *v ;
}
@ -51,35 +52,27 @@ operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
return out;
}
#if defined (BOOST_NO_TEMPLATED_STREAMS)
template<class T>
inline std::istream& operator>>(std::istream& in, optional<T>& v)
#else
template<class CharType, class CharTrait, class T>
inline
std::basic_istream<CharType, CharTrait>&
operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
#endif
{
if (in.good())
if ( in.good() )
{
int d = in.get();
if (d == ' ')
if ( d == ' ' )
{
T x;
T x ;
in >> x;
v = optional_detail::move(x);
v = x ;
}
else
{
if (d == '-')
{
d = in.get();
if (d == '-')
{
v = none;
return in;
}
}
in.setstate( std::ios::failbit );
}
v = optional<T>() ;
}
return in;
@ -87,5 +80,5 @@ operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
} // namespace boost
#endif // BOOST_NO_IOSTREAM
#endif

View File

@ -4,10 +4,10 @@
</head>
<body>
Automatic redirection failed, please go to
<a href="doc/html/index.html">doc/html/index.html</a>.&nbsp;<hr>
<a href="doc/optional.html">doc/html/index.html</a>.&nbsp;<hr>
<p><EFBFBD> Copyright Beman Dawes, 2001</p>
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy
at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
</body>
</html>
</html>

View File

@ -1,17 +0,0 @@
{
"key": "optional",
"boost-version": "1.30.0",
"name": "Optional",
"authors": [
"Fernando Cacciola"
],
"description": "A value-semantic, type-safe wrapper for representing 'optional' (or 'nullable') objects of a given type. An optional object may or may not contain a value of the underlying type.",
"category": [
"Data"
],
"maintainers": [
"Fernando Cacciola <fernando_cacciola -at- ciudad.com.ar>",
"Andrzej Krzemienski <akrzemi1 -at- gmail.com>"
],
"cxxstd": "11"
}

View File

@ -1,11 +0,0 @@
# Copyright 2018, 2019 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
if(HAVE_BOOST_TEST)
boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::optional Boost::core Boost::bind Boost::tuple Boost::utility)
endif()

View File

@ -1,106 +1,33 @@
# Boost.Optional Library test Jamfile
# Boost.Optional Library test Jamfile
#
# Copyright (C) 2003, Fernando Luis Cacciola Carballal.
# Copyright (C) 2014 - 2017 Andrzej Krzemienski
# Copyright (C) 2024 Alexander Grund
# Copyright (C) 2003, Fernando Luis Cacciola Carballal.
#
# Use, modification, and distribution is subject to the Boost Software
# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# This material is provided "as is", with absolutely no warranty expressed
# or implied. Any use is at your own risk.
#
# See http://www.boost.org/libs/optional for documentation.
#
# You are welcome to contact the author at:
# akrzemi1@gmail.com
# Permission to use or copy this software for any purpose is hereby granted
# without fee, provided the above notices are retained on all copies.
# Permission to modify the code and to distribute modified code is granted,
# provided the above notices are retained, and a notice that the code was
# modified is included with the above copyright notice.
#
import config : requires ;
import testing ;
project
: requirements
<library>/boost/optional//boost_optional
[ requires
cxx11_decltype
cxx11_defaulted_functions
cxx11_defaulted_moves
cxx11_deleted_functions
cxx11_explicit_conversion_operators
# cxx11_noexcept
cxx11_rvalue_references
cxx11_static_assert
cxx11_variadic_templates
]
;
run optional_test.cpp : : : <library>/boost/bind//boost_bind ;
run optional_test_assign.cpp ;
run optional_test_swap.cpp ;
compile optional_test_wuninitialized.cpp ;
run optional_test_conversions_from_U.cpp ;
run optional_test_convert_from_T.cpp ;
run optional_test_convert_assign.cpp ;
run optional_test_empty_braces.cpp ;
run optional_test_make_optional.cpp ;
run optional_test_flat_map.cpp ;
run optional_test_hash.cpp ;
run optional_test_map.cpp ;
run optional_test_tie.cpp : : : <library>/boost/tuple//boost_tuple ;
run optional_test_ref_assign_portable_minimum.cpp ;
run optional_test_ref_assign_mutable_int.cpp ;
run optional_test_ref_assign_const_int.cpp ;
run optional_test_ref_converting_ctor.cpp ;
run optional_test_ref_convert_assign_non_int.cpp ;
run optional_test_ref_convert_assign_mutable_int.cpp ;
run optional_test_ref_convert_assign_const_int.cpp ;
run optional_test_ref_portable_minimum.cpp ;
run optional_test_ref_move.cpp ;
run optional_test_ref_to_val.cpp ;
run optional_test_inplace_factory.cpp ;
run optional_test_io.cpp ;
run optional_test_move.cpp ;
run optional_test_noexcept_move.cpp ;
run optional_test_cmp_none.cpp ;
run optional_test_value_access.cpp ;
run optional_test_emplace.cpp ;
run optional_test_minimum_requirements.cpp ;
run optional_test_msvc_bug_workaround.cpp ;
run optional_test_member_T.cpp ;
run optional_test_tc_base.cpp ;
compile optional_test_sfinae_friendly_ctor.cpp ;
compile optional_test_path_assignment.cpp ;
compile-fail optional_test_fail_const_swap.cpp ;
compile-fail optional_test_ref_convert_assign_const_int_prevented.cpp ;
compile-fail optional_test_fail1.cpp ;
compile-fail optional_test_fail3a.cpp ;
compile-fail optional_test_fail3b.cpp ;
compile-fail optional_test_ref_fail1.cpp ;
compile-fail optional_test_ref_fail3.cpp ;
compile-fail optional_test_ref_fail4.cpp ;
compile-fail optional_test_inplace_fail.cpp ;
compile-fail optional_test_inplace_fail2.cpp ;
compile-fail optional_test_fail_implicit_bool_convert.cpp ;
compile-fail optional_test_fail_copying_a_moveable_type.cpp ;
compile-fail optional_test_fail_optional_rvalue_ref.cpp ;
compile-fail optional_test_ref_fail_init_from_Trefref.cpp ;
compile-fail optional_test_ref_fail_init_from_Urefref.cpp ;
compile-fail optional_test_ref_fail_assign_from_Trefref.cpp ;
compile-fail optional_test_ref_fail_assign_from_Urefref.cpp ;
compile-fail optional_test_fail_convert_from_null.cpp ;
compile-fail optional_test_fail_explicit_convert_in_value_or.cpp ;
compile-fail optional_test_fail_explicit_convert_in_value_or_call.cpp ;
compile-fail optional_test_fail_io_without_io.cpp ;
compile-fail optional_test_fail_none_io_without_io.cpp ;
compile-fail optional_test_fail_convert_assign_of_enums.cpp ;
run optional_test_static_properties.cpp ;
compile optional_test_maybe_uninitialized_warning.cpp ;
compile optional_test_deleted_default_ctor.cpp ;
compile optional_test_constructible_from_other.cpp ;
#run optional_xconfig_HACK_TO_LIST_PREDEFINED_MACROS.cpp ;
run optional_xconfig_NO_PROPER_ASSIGN_FROM_CONST_INT_pass.cpp ;
run-fail optional_xconfig_NO_PROPER_ASSIGN_FROM_CONST_INT_fail.cpp ;
run optional_xconfig_NO_PROPER_CONVERT_FROM_CONST_INT_pass.cpp ;
run-fail optional_xconfig_NO_PROPER_CONVERT_FROM_CONST_INT_fail.cpp ;
run optional_xconfig_NO_LEGAL_CONVERT_FROM_REF_pass.cpp ;
compile-fail optional_xconfig_NO_LEGAL_CONVERT_FROM_REF_fail.cpp ;
{
test-suite optional :
[ run optional_test.cpp ]
[ run optional_test_tie.cpp ]
[ run optional_test_ref.cpp ]
[ run optional_test_inplace.cpp ]
[ run optional_test_io.cpp ]
[ compile-fail optional_test_fail1.cpp ]
[ compile-fail optional_test_fail3a.cpp ]
[ compile-fail optional_test_fail3b.cpp ]
[ compile-fail optional_test_ref_fail1.cpp ]
[ compile-fail optional_test_ref_fail3.cpp ]
[ compile-fail optional_test_ref_fail4.cpp ]
[ compile-fail optional_test_inplace_fail.cpp ]
[ compile-fail optional_test_inplace_fail2.cpp ]
;
}

View File

@ -1,17 +0,0 @@
# Copyright 2018, 2019 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(cmake_subdir_test LANGUAGES CXX)
find_package(boost_optional REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main Boost::optional)
enable_testing()
add_test(main main)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -1,13 +0,0 @@
// Copyright 2024 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/optional/optional.hpp>
int main()
{
boost::optional<int> o1;
boost::optional<int> o2( 0 );
o1 = o2;
return *o1;
}

View File

@ -1,18 +0,0 @@
# Copyright 2018, 2019 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(cmake_subdir_test LANGUAGES CXX)
set(BOOST_INCLUDE_LIBRARIES optional)
add_subdirectory(../../../.. boostorg/boost)
add_executable(main main.cpp)
target_link_libraries(main Boost::optional)
enable_testing()
add_test(main main)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -1,13 +0,0 @@
// Copyright 2024 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/optional/optional.hpp>
int main()
{
boost::optional<int> o1;
boost::optional<int> o2( 0 );
o1 = o2;
return *o1;
}

View File

@ -1,181 +0,0 @@
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at: akrzemi1@gmail.com
#ifndef BOOST_OPTIONAL_TEST_OPTIONAL_REF_ASSIGN_TEST_DEFS_AK_07JAN2015_HPP
#define BOOST_OPTIONAL_TEST_OPTIONAL_REF_ASSIGN_TEST_DEFS_AK_07JAN2015_HPP
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/addressof.hpp"
#include "testable_classes.hpp"
using boost::optional;
using boost::none;
using boost::addressof;
template <typename T>
void test_copy_assignment_for_const()
{
const typename concrete_type_of<T>::type v(2);
optional<const T&> o;
o = optional<const T&>(v);
BOOST_TEST(o);
BOOST_TEST(o != none);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST(val(*o) == val(v));
BOOST_TEST(val(*o) == 2);
}
template <typename T>
void test_copy_assignment_for_noconst_const()
{
typename concrete_type_of<T>::type v(2);
optional<const T&> o;
o = optional<const T&>(v);
BOOST_TEST(o);
BOOST_TEST(o != none);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST(val(*o) == val(v));
BOOST_TEST(val(*o) == 2);
val(v) = 9;
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 9);
BOOST_TEST_EQ(val(v), 9);
}
template <typename T>
void test_copy_assignment_for()
{
typename concrete_type_of<T>::type v(2);
optional<T&> o;
o = optional<T&>(v);
BOOST_TEST(o);
BOOST_TEST(o != none);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST(val(*o) == val(v));
BOOST_TEST(val(*o) == 2);
val(v) = 9;
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 9);
BOOST_TEST_EQ(val(v), 9);
val(*o) = 7;
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 7);
BOOST_TEST_EQ(val(v), 7);
}
template <typename T>
void test_rebinding_assignment_semantics_const()
{
const typename concrete_type_of<T>::type v(2), w(7);
optional<const T&> o(v);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 2);
o = optional<const T&>(w);
BOOST_TEST_EQ(val(v), 2);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) != addressof(v));
BOOST_TEST_NE(val(*o), val(v));
BOOST_TEST_NE(val(*o), 2);
BOOST_TEST(addressof(*o) == addressof(w));
BOOST_TEST_EQ(val(*o), val(w));
BOOST_TEST_EQ(val(*o), 7);
}
template <typename T>
void test_rebinding_assignment_semantics_noconst_const()
{
typename concrete_type_of<T>::type v(2), w(7);
optional<const T&> o(v);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 2);
o = optional<const T&>(w);
BOOST_TEST_EQ(val(v), 2);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) != addressof(v));
BOOST_TEST_NE(val(*o), val(v));
BOOST_TEST_NE(val(*o), 2);
BOOST_TEST(addressof(*o) == addressof(w));
BOOST_TEST_EQ(val(*o), val(w));
BOOST_TEST_EQ(val(*o), 7);
}
template <typename T>
void test_rebinding_assignment_semantics()
{
typename concrete_type_of<T>::type v(2), w(7);
optional<T&> o(v);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) == addressof(v));
BOOST_TEST_EQ(val(*o), val(v));
BOOST_TEST_EQ(val(*o), 2);
o = optional<T&>(w);
BOOST_TEST_EQ(val(v), 2);
BOOST_TEST(o);
BOOST_TEST(addressof(*o) != addressof(v));
BOOST_TEST_NE(val(*o), val(v));
BOOST_TEST_NE(val(*o), 2);
BOOST_TEST(addressof(*o) == addressof(w));
BOOST_TEST_EQ(val(*o), val(w));
BOOST_TEST_EQ(val(*o), 7);
val(*o) = 8;
BOOST_TEST(addressof(*o) == addressof(w));
BOOST_TEST_EQ(val(*o), val(w));
BOOST_TEST_EQ(val(*o), 8);
BOOST_TEST_EQ(val(w), 8);
BOOST_TEST_EQ(val(v), 2);
}
template <typename T, typename U>
void test_converting_assignment()
{
typename concrete_type_of<T>::type v1(1), v2(2), v3(3);
optional<U&> oA(v1), oB(none);
oA = v2;
BOOST_TEST(oA);
BOOST_TEST(addressof(*oA) == addressof(v2));
oB = v3;
BOOST_TEST(oB);
BOOST_TEST(addressof(*oB) == addressof(v3));
}
#endif //BOOST_OPTIONAL_TEST_OPTIONAL_REF_ASSIGN_TEST_DEFS_AK_07JAN2015_HPP

View File

@ -1,4 +1,4 @@
// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -9,33 +9,25 @@
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
//
// Revisions:
// 12 May 2008 (added more swap tests)
//
#ifndef BOOST_NO_IOSTREAM
#include<iostream>
#endif // BOOST_NO_IOSTREAM
#include<stdexcept>
#include<string>
#define BOOST_ENABLE_ASSERT_HANDLER
#include "boost/config.hpp"
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
#include "boost/bind/apply.hpp" // Included just to test proper interaction with boost::apply<> as reported by Daniel Wallin
#endif
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "boost/none.hpp"
#include "boost/core/lightweight_test.hpp"
#include "boost/test/minimal.hpp"
#include "optional_test_common.hpp"
#include "optional_test_common.cpp"
void test_implicit_construction ( optional<double> opt, double v, double z )
{
@ -49,12 +41,12 @@ void test_implicit_construction ( optional<X> opt, X const& v, X const& z )
void test_default_implicit_construction ( double, optional<double> opt )
{
BOOST_TEST(!opt);
BOOST_CHECK(!opt);
}
void test_default_implicit_construction ( X const&, optional<X> opt )
{
BOOST_TEST(!opt);
BOOST_CHECK(!opt);
}
//
@ -78,7 +70,7 @@ void test_basics( T const* )
check_uninitialized(def);
// Implicit construction
// The first parameter is implicitly converted to optional<T>(a);
// The first parameter is implicitely converted to optional<T>(a);
test_implicit_construction(a,a,z);
// Direct initialization.
@ -161,27 +153,27 @@ void test_basics( T const* )
ob.reset();
check_is_pending_dtor( ARG(T) ) ;
check_uninitialized(ob);
}
template<class T>
void test_conditional_ctor_and_get_value_or ( T const* )
void test_conditional_ctor_and_get_valur_or ( T const* )
{
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
T a(321);
T z(123);
optional<T> const cdef0(false,a);
optional<T> def0(false,a);
optional<T> def1 = boost::make_optional(false,a); // T is not within boost so ADL won't find make_optional unqualified
check_uninitialized(def0);
check_uninitialized(def1);
optional<T> const co0(true,a);
optional<T> o0(true,a);
optional<T> o1 = boost::make_optional(true,a); // T is not within boost so ADL won't find make_optional unqualified
@ -189,67 +181,67 @@ void test_conditional_ctor_and_get_value_or ( T const* )
check_initialized(o1);
check_value(o0,a,z);
check_value(o1,a,z);
T b = def0.get_value_or(z);
BOOST_TEST( b == z ) ;
BOOST_CHECK( b == z ) ;
b = get_optional_value_or(def0,z);
BOOST_TEST( b == z ) ;
BOOST_CHECK( b == z ) ;
b = o0.get_value_or(z);
BOOST_TEST( b == a ) ;
BOOST_CHECK( b == a ) ;
b = get_optional_value_or(o0,z);
BOOST_TEST( b == a ) ;
BOOST_CHECK( b == a ) ;
T const& crz = z ;
T& rz = z ;
T const& crzz = def0.get_value_or(crz);
BOOST_TEST( crzz == crz ) ;
BOOST_CHECK( crzz == crz ) ;
T& rzz = def0.get_value_or(rz);
BOOST_TEST( rzz == rz ) ;
BOOST_CHECK( rzz == rz ) ;
T const& crzzz = get_optional_value_or(cdef0,crz);
BOOST_TEST( crzzz == crz ) ;
BOOST_CHECK( crzzz == crz ) ;
T& rzzz = get_optional_value_or(def0,rz);
BOOST_TEST( rzzz == rz ) ;
BOOST_CHECK( rzzz == rz ) ;
T const& crb = o0.get_value_or(crz);
BOOST_TEST( crb == a ) ;
BOOST_CHECK( crb == a ) ;
T& rb = o0.get_value_or(rz);
BOOST_TEST( rb == b ) ;
BOOST_CHECK( rb == b ) ;
T const& crbb = get_optional_value_or(co0,crz);
BOOST_TEST( crbb == b ) ;
BOOST_CHECK( crbb == b ) ;
T const& crbbb = get_optional_value_or(o0,crz);
BOOST_TEST( crbbb == b ) ;
BOOST_CHECK( crbbb == b ) ;
T& rbb = get_optional_value_or(o0,rz);
BOOST_TEST( rbb == b ) ;
BOOST_CHECK( rbb == b ) ;
T& ra = a ;
optional<T&> defref(false,ra);
BOOST_TEST(!defref);
BOOST_CHECK(!defref);
optional<T&> ref(true,ra);
BOOST_TEST(!!ref);
BOOST_CHECK(!!ref);
a = T(432);
BOOST_TEST( *ref == a ) ;
BOOST_CHECK( *ref == a ) ;
T& r1 = defref.get_value_or(z);
BOOST_TEST( r1 == z ) ;
BOOST_CHECK( r1 == z ) ;
T& r2 = ref.get_value_or(z);
BOOST_TEST( r2 == a ) ;
BOOST_CHECK( r2 == a ) ;
}
//
@ -265,18 +257,18 @@ void test_direct_value_manip( T const* )
optional<T> const c_opt0(x) ;
optional<T> opt0(x);
BOOST_TEST( c_opt0.get().V() == x.V() ) ;
BOOST_TEST( opt0.get().V() == x.V() ) ;
BOOST_CHECK( c_opt0.get().V() == x.V() ) ;
BOOST_CHECK( opt0.get().V() == x.V() ) ;
BOOST_TEST( c_opt0->V() == x.V() ) ;
BOOST_TEST( opt0->V() == x.V() ) ;
BOOST_CHECK( c_opt0->V() == x.V() ) ;
BOOST_CHECK( opt0->V() == x.V() ) ;
BOOST_TEST( (*c_opt0).V() == x.V() ) ;
BOOST_TEST( (* opt0).V() == x.V() ) ;
BOOST_CHECK( (*c_opt0).V() == x.V() ) ;
BOOST_CHECK( (* opt0).V() == x.V() ) ;
T y(4);
opt0 = y ;
BOOST_TEST( get(opt0).V() == y.V() ) ;
BOOST_CHECK( get(opt0).V() == y.V() ) ;
}
//
@ -294,45 +286,45 @@ void test_uninitialized_access( T const* )
{
// This should throw because 'def' is uninitialized
T const& n = def.get() ;
boost::ignore_unused(n);
unused_variable(n);
passed = true ;
}
catch (...) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
passed = false ;
try
{
// This should throw because 'def' is uninitialized
T const& n = *def ;
boost::ignore_unused(n);
unused_variable(n);
passed = true ;
}
catch (...) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
passed = false ;
try
{
T v(5) ;
boost::ignore_unused(v);
unused_variable(v);
// This should throw because 'def' is uninitialized
*def = v ;
passed = true ;
}
catch (...) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
passed = false ;
try
{
// This should throw because 'def' is uninitialized
T v = *(def.operator->()) ;
boost::ignore_unused(v);
unused_variable(v);
passed = true ;
}
catch (...) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
}
#if BOOST_WORKAROUND( BOOST_INTEL_CXX_VERSION, <= 700) // Intel C++ 7.0
@ -377,7 +369,7 @@ void test_throwing_direct_init( T const* )
}
catch ( ... ){}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_is_not_pending_copy( ARG(T) );
check_instance_count(count, ARG(T) );
@ -413,7 +405,7 @@ void test_throwing_val_assign_on_uninitialized( T const* )
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_is_not_pending_copy( ARG(T) );
check_instance_count(count, ARG(T) );
@ -451,15 +443,15 @@ void test_throwing_val_assign_on_initialized( T const* )
{
// This should:
// Attempt to assign 'a' and throw.
// opt is kept initialized but its value not necessarily fully assigned
// (in this test, incompletely assigned is flagged with the value -1 being set)
// opt is kept initialized but its value not neccesarily fully assigned
// (in this test, incompletely assigned is flaged with the value -1 being set)
set_pending_assign( ARG(T) ) ;
opt.reset ( a ) ;
passed = true ;
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_is_not_pending_assign( ARG(T) );
check_instance_count(count, ARG(T) );
@ -498,7 +490,7 @@ void test_throwing_copy_initialization( T const* )
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_is_not_pending_copy( ARG(T) );
check_instance_count(count, ARG(T) );
@ -541,7 +533,7 @@ void test_throwing_assign_to_uninitialized( T const* )
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_is_not_pending_copy( ARG(T) );
check_instance_count(count, ARG(T) );
@ -576,15 +568,15 @@ void test_throwing_assign_to_initialized( T const* )
{
// This should:
// Attempt to copy construct 'opt1.value()' into opt0 and throw.
// opt0 is kept initialized but its value not necessarily fully assigned
// (in this test, incompletely assigned is flagged with the value -1 being set)
// opt0 is kept initialized but its value not neccesarily fully assigned
// (in this test, incompletely assigned is flaged with the value -1 being set)
set_pending_assign( ARG(T) ) ;
opt0 = opt1 ;
passed = true ;
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
// opt0 was left uninitialized
check_is_not_pending_assign( ARG(T) );
@ -664,7 +656,7 @@ void test_throwing_swap( T const* )
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
// optional's swap doesn't affect the initialized states of the arguments. Therefore,
// the following must hold:
@ -688,14 +680,14 @@ void test_throwing_swap( T const* )
try
{
// This should attempt to swap optionals and fail at opt0.reset(*opt1)
// Both opt0 and op1 are left unchanged (unswapped)
// Both opt0 and op1 are left unchanged (unswaped)
swap(opt0,opt1);
passed = true ;
}
catch ( ... ) {}
BOOST_TEST(!passed);
BOOST_CHECK(!passed);
check_uninitialized(opt0);
check_initialized(opt1);
@ -721,71 +713,71 @@ void test_relops( T const* )
optional<T> opt0(v0);
optional<T> opt1(v1);
optional<T> opt2(v2);
// Check identity
BOOST_TEST ( def0 == def0 ) ;
BOOST_TEST ( opt0 == opt0 ) ;
BOOST_TEST ( !(def0 != def0) ) ;
BOOST_TEST ( !(opt0 != opt0) ) ;
BOOST_CHECK ( def0 == def0 ) ;
BOOST_CHECK ( opt0 == opt0 ) ;
BOOST_CHECK ( !(def0 != def0) ) ;
BOOST_CHECK ( !(opt0 != opt0) ) ;
// Check when both are uninitialized.
BOOST_TEST ( def0 == def1 ) ; // both uninitialized compare equal
BOOST_TEST ( !(def0 < def1) ) ; // uninitialized is never less than uninitialized
BOOST_TEST ( !(def0 > def1) ) ; // uninitialized is never greater than uninitialized
BOOST_TEST ( !(def0 != def1) ) ;
BOOST_TEST ( def0 <= def1 ) ;
BOOST_TEST ( def0 >= def1 ) ;
// Check when both are uininitalized.
BOOST_CHECK ( def0 == def1 ) ; // both uninitialized compare equal
BOOST_CHECK ( !(def0 < def1) ) ; // uninitialized is never less than uninitialized
BOOST_CHECK ( !(def0 > def1) ) ; // uninitialized is never greater than uninitialized
BOOST_CHECK ( !(def0 != def1) ) ;
BOOST_CHECK ( def0 <= def1 ) ;
BOOST_CHECK ( def0 >= def1 ) ;
// Check when only lhs is uninitialized.
BOOST_TEST ( def0 != opt0 ) ; // uninitialized is never equal to initialized
BOOST_TEST ( !(def0 == opt0) ) ;
BOOST_TEST ( def0 < opt0 ) ; // uninitialized is always less than initialized
BOOST_TEST ( !(def0 > opt0) ) ;
BOOST_TEST ( def0 <= opt0 ) ;
BOOST_TEST ( !(def0 >= opt0) ) ;
BOOST_CHECK ( def0 != opt0 ) ; // uninitialized is never equal to initialized
BOOST_CHECK ( !(def0 == opt0) ) ;
BOOST_CHECK ( def0 < opt0 ) ; // uninitialized is always less than initialized
BOOST_CHECK ( !(def0 > opt0) ) ;
BOOST_CHECK ( def0 <= opt0 ) ;
BOOST_CHECK ( !(def0 >= opt0) ) ;
// Check when only rhs is uninitialized.
BOOST_TEST ( opt0 != def0 ) ; // initialized is never equal to uninitialized
BOOST_TEST ( !(opt0 == def0) ) ;
BOOST_TEST ( !(opt0 < def0) ) ; // initialized is never less than uninitialized
BOOST_TEST ( opt0 > def0 ) ;
BOOST_TEST ( !(opt0 <= def0) ) ;
BOOST_TEST ( opt0 >= opt0 ) ;
BOOST_CHECK ( opt0 != def0 ) ; // initialized is never equal to uninitialized
BOOST_CHECK ( !(opt0 == def0) ) ;
BOOST_CHECK ( !(opt0 < def0) ) ; // initialized is never less than uninitialized
BOOST_CHECK ( opt0 > def0 ) ;
BOOST_CHECK ( !(opt0 <= def0) ) ;
BOOST_CHECK ( opt0 >= opt0 ) ;
// If both are initialized, values are compared
BOOST_TEST ( opt0 != opt1 ) ;
BOOST_TEST ( opt1 == opt2 ) ;
BOOST_TEST ( opt0 < opt1 ) ;
BOOST_TEST ( opt1 > opt0 ) ;
BOOST_TEST ( opt1 <= opt2 ) ;
BOOST_TEST ( opt1 >= opt0 ) ;
BOOST_CHECK ( opt0 != opt1 ) ;
BOOST_CHECK ( opt1 == opt2 ) ;
BOOST_CHECK ( opt0 < opt1 ) ;
BOOST_CHECK ( opt1 > opt0 ) ;
BOOST_CHECK ( opt1 <= opt2 ) ;
BOOST_CHECK ( opt1 >= opt0 ) ;
// Compare against a value directly
BOOST_TEST ( opt0 == v0 ) ;
BOOST_TEST ( opt0 != v1 ) ;
BOOST_TEST ( opt1 == v2 ) ;
BOOST_TEST ( opt0 < v1 ) ;
BOOST_TEST ( opt1 > v0 ) ;
BOOST_TEST ( opt1 <= v2 ) ;
BOOST_TEST ( opt1 >= v0 ) ;
BOOST_TEST ( v0 != opt1 ) ;
BOOST_TEST ( v1 == opt2 ) ;
BOOST_TEST ( v0 < opt1 ) ;
BOOST_TEST ( v1 > opt0 ) ;
BOOST_TEST ( v1 <= opt2 ) ;
BOOST_TEST ( v1 >= opt0 ) ;
BOOST_TEST ( def0 != v0 ) ;
BOOST_TEST ( !(def0 == v0) ) ;
BOOST_TEST ( def0 < v0 ) ;
BOOST_TEST ( !(def0 > v0) ) ;
BOOST_TEST ( def0 <= v0 ) ;
BOOST_TEST ( !(def0 >= v0) ) ;
BOOST_TEST ( v0 != def0 ) ;
BOOST_TEST ( !(v0 == def0) ) ;
BOOST_TEST ( !(v0 < def0) ) ;
BOOST_TEST ( v0 > def0 ) ;
BOOST_TEST ( !(v0 <= def0) ) ;
BOOST_TEST ( v0 >= opt0 ) ;
BOOST_CHECK ( opt0 == v0 ) ;
BOOST_CHECK ( opt0 != v1 ) ;
BOOST_CHECK ( opt1 == v2 ) ;
BOOST_CHECK ( opt0 < v1 ) ;
BOOST_CHECK ( opt1 > v0 ) ;
BOOST_CHECK ( opt1 <= v2 ) ;
BOOST_CHECK ( opt1 >= v0 ) ;
BOOST_CHECK ( v0 != opt1 ) ;
BOOST_CHECK ( v1 == opt2 ) ;
BOOST_CHECK ( v0 < opt1 ) ;
BOOST_CHECK ( v1 > opt0 ) ;
BOOST_CHECK ( v1 <= opt2 ) ;
BOOST_CHECK ( v1 >= opt0 ) ;
BOOST_CHECK ( def0 != v0 ) ;
BOOST_CHECK ( !(def0 == v0) ) ;
BOOST_CHECK ( def0 < v0 ) ;
BOOST_CHECK ( !(def0 > v0) ) ;
BOOST_CHECK ( def0 <= v0 ) ;
BOOST_CHECK ( !(def0 >= v0) ) ;
BOOST_CHECK ( v0 != def0 ) ;
BOOST_CHECK ( !(v0 == def0) ) ;
BOOST_CHECK ( !(v0 < def0) ) ;
BOOST_CHECK ( v0 > def0 ) ;
BOOST_CHECK ( !(v0 <= def0) ) ;
BOOST_CHECK ( v0 >= opt0 ) ;
}
template<class T>
@ -799,16 +791,16 @@ void test_none( T const* )
optional<T> def1(none) ;
optional<T> non_def( T(1234) ) ;
BOOST_TEST ( def0 == none ) ;
BOOST_TEST ( non_def != none ) ;
BOOST_TEST ( !def1 ) ;
BOOST_TEST ( !(non_def < none) ) ;
BOOST_TEST ( non_def > none ) ;
BOOST_TEST ( !(non_def <= none) ) ;
BOOST_TEST ( non_def >= none ) ;
BOOST_CHECK ( def0 == none ) ;
BOOST_CHECK ( non_def != none ) ;
BOOST_CHECK ( !def1 ) ;
BOOST_CHECK ( !(non_def < none) ) ;
BOOST_CHECK ( non_def > none ) ;
BOOST_CHECK ( !(non_def <= none) ) ;
BOOST_CHECK ( non_def >= none ) ;
non_def = none ;
BOOST_TEST ( !non_def ) ;
BOOST_CHECK ( !non_def ) ;
test_default_implicit_construction(T(1),none);
}
@ -822,13 +814,13 @@ void test_arrow( T const* )
optional<T> oa(a) ;
optional<T> const coa(a) ;
BOOST_TEST ( coa->V() == 1234 ) ;
BOOST_CHECK ( coa->V() == 1234 ) ;
oa->V() = 4321 ;
BOOST_TEST ( a.V() = 1234 ) ;
BOOST_TEST ( (*oa).V() = 4321 ) ;
BOOST_CHECK ( a.V() = 1234 ) ;
BOOST_CHECK ( (*oa).V() = 4321 ) ;
}
void test_with_builtin_types()
@ -836,31 +828,19 @@ void test_with_builtin_types()
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
test_basics( ARG(double) );
test_conditional_ctor_and_get_value_or( ARG(double) );
test_conditional_ctor_and_get_valur_or( ARG(double) );
test_uninitialized_access( ARG(double) );
test_no_throwing_swap( ARG(double) );
test_relops( ARG(double) ) ;
test_none( ARG(double) ) ;
}
// MSVC < 11.0 doesn't destroy X when we call ptr->VBase::VBase.
// Make sure that we work around this bug.
struct VBase : virtual X
{
VBase(int v) : X(v) {}
// MSVC 8.0 doesn't generate this correctly...
VBase(const VBase& other) : X(static_cast<const X&>(other)) {}
VBase& operator=(VBase const& rhs) { X::operator=(rhs); return *this; }
};
void test_with_class_type()
{
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
test_basics( ARG(X) );
test_basics( ARG(VBase) );
test_conditional_ctor_and_get_value_or( ARG(X) );
test_conditional_ctor_and_get_valur_or( ARG(X) );
test_direct_value_manip( ARG(X) );
test_uninitialized_access( ARG(X) );
test_throwing_direct_init( ARG(X) );
@ -874,7 +854,7 @@ void test_with_class_type()
test_relops( ARG(X) ) ;
test_none( ARG(X) ) ;
test_arrow( ARG(X) ) ;
BOOST_TEST ( X::count == 0 ) ;
BOOST_CHECK ( X::count == 0 ) ;
}
int eat ( bool ) { return 1 ; }
@ -893,7 +873,7 @@ void test_no_implicit_conversions_impl( T const& )
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
optional<T> def ;
BOOST_TEST ( eat(def) == 0 ) ;
BOOST_CHECK ( eat(def) == 0 ) ;
}
void test_no_implicit_conversions()
@ -911,48 +891,58 @@ void test_no_implicit_conversions()
test_no_implicit_conversions_impl(p);
}
// Test for support for classes with overridden operator&
class CustomAddressOfClass
struct A {} ;
void test_conversions1()
{
int n;
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
public:
CustomAddressOfClass() : n(0) {}
CustomAddressOfClass(CustomAddressOfClass const& that) : n(that.n) {}
CustomAddressOfClass& operator=(CustomAddressOfClass const& rhs) { n = rhs.n; return *this; }
explicit CustomAddressOfClass(int m) : n(m) {}
int* operator& () { return &n; }
bool operator== (CustomAddressOfClass const& that) const { return n == that.n; }
};
#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
char c = 20 ;
optional<char> opt0(c);
optional<int> opt1(opt0);
BOOST_CHECK(*opt1 == static_cast<int>(c));
#endif
void test_custom_addressof_operator()
{
boost::optional< CustomAddressOfClass > o1(CustomAddressOfClass(10));
BOOST_TEST(!!o1);
BOOST_TEST(o1.get() == CustomAddressOfClass(10));
o1 = CustomAddressOfClass(20);
BOOST_TEST(!!o1);
BOOST_TEST(o1.get() == CustomAddressOfClass(20));
o1 = boost::none;
BOOST_TEST(!o1);
#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
float f = 21.22f ;
double d = f ;
optional<float> opt2(f) ;
optional<double> opt3 ;
opt3 = opt2 ;
BOOST_CHECK(*opt3 == d);
#endif
}
int main()
void test_conversions2()
{
TRACE( std::endl << BOOST_CURRENT_FUNCTION );
char c = 20 ;
optional<int> opt(c);
BOOST_CHECK( get(opt) == static_cast<int>(c));
float f = 21.22f ;
optional<double> opt1;
opt1 = f ;
BOOST_CHECK(*get(&opt1) == static_cast<double>(f));
}
int test_main( int, char* [] )
{
try
{
test_with_class_type();
test_with_builtin_types();
test_no_implicit_conversions();
test_custom_addressof_operator();
test_conversions1();
test_conversions2();
}
catch ( ... )
{
BOOST_ERROR("Unexpected Exception caught!");
}
return boost::report_errors();
return 0;
}

View File

@ -1,30 +0,0 @@
// Copyright (C) 2018 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/core/lightweight_test.hpp"
#include "boost/optional/optional.hpp"
void test_assignment_to_empty()
{
// this test used to fail on GCC 8.1.0/8.2.0/9.0.0 with -std=c++98
boost::optional<int> oa, ob(1);
BOOST_TEST(!oa);
BOOST_TEST(ob);
oa = ob;
BOOST_TEST(oa);
}
int main()
{
test_assignment_to_empty();
return boost::report_errors();
}

View File

@ -1,83 +0,0 @@
// Copyright (C) 2014 Andrzej Krzemienski.
// Copyright (C) 2024 Alexander Grund
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
#include "boost/none.hpp"
struct SemiRegular // no operator==
{
private: void operator==(SemiRegular const&) const {}
private: void operator!=(SemiRegular const&) const {}
};
void test_equal_to_none_of_noncomparable_T()
{
boost::optional<SemiRegular> i = SemiRegular();
boost::optional<SemiRegular> o;
BOOST_TEST(i != boost::none);
BOOST_TEST(boost::none != i);
BOOST_TEST(o == boost::none);
BOOST_TEST(boost::none == o);
}
void test_comparison_to_none()
{
using boost::none;
boost::optional<SemiRegular> i = SemiRegular();
// the default ordering of optional<size_t> is{ boost::none, 0, 1, 2, ... }
// Hence boost::none < i for any engaged i
// and all others operators ( ==, !=, <, <=, >, >= ) follow
BOOST_TEST(!(i == none));
BOOST_TEST(i != none);
BOOST_TEST(!(i < none));
BOOST_TEST(!(i <= none));
BOOST_TEST(i > none);
BOOST_TEST(i >= none);
// Comparison is symmetric
BOOST_TEST(!(none == i));
BOOST_TEST(none != i);
BOOST_TEST(none < i);
BOOST_TEST(none <= i);
BOOST_TEST(!(none > i));
BOOST_TEST(!(none >= i));
// An un-engaged optional is always equal to none
boost::optional<SemiRegular> o;
BOOST_TEST(o == none);
BOOST_TEST(!(o != none));
BOOST_TEST(!(o < none));
BOOST_TEST(o <= none);
BOOST_TEST(!(o > none));
BOOST_TEST(o >= none);
// Comparison is symmetric
BOOST_TEST(none == o);
BOOST_TEST(!(none != o));
BOOST_TEST(!(none < o));
BOOST_TEST(none <= o);
BOOST_TEST(!(none > o));
BOOST_TEST(none >= o);
}
int main()
{
test_equal_to_none_of_noncomparable_T();
return boost::report_errors();
}

View File

@ -1,5 +1,4 @@
// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
// Copyright (C) 2014, Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -10,8 +9,6 @@
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
//
#include <boost/core/ignore_unused.hpp>
#ifdef ENABLE_TRACE
#define TRACE(msg) std::cout << msg << std::endl ;
#else
@ -40,6 +37,7 @@ void assertion_failed (char const * expr, char const * func, char const * file,
using boost::optional ;
template<class T> inline void unused_variable ( T ) {}
#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
using boost::swap ;
@ -51,14 +49,12 @@ using boost::get_pointer ;
// via the safe_bool operator.
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1300) ) // 1300 == VC++ 7.1
#define BOOST_OPTIONAL_NO_NULL_COMPARE
#else
#define BOOST_OPTIONAL_NO_NULL_COMPARE // Andrzej: I also disable 0 comparison everywhere
#endif
#define ARG(T) (static_cast< T const* >(0))
//
// Helper class used to verify the lifetime management of the values held by optional
// Helper class used to verify the lifetime managment of the values held by optional
//
class X
{
@ -152,21 +148,21 @@ bool X::pending_assign = false ;
bool X::throw_on_copy = false ;
bool X::throw_on_assign = false ;
inline void set_pending_copy ( X const* ) { X::pending_copy = true ; }
inline void set_pending_dtor ( X const* ) { X::pending_dtor = true ; }
inline void set_pending_assign ( X const* ) { X::pending_assign = true ; }
inline void set_throw_on_copy ( X const* ) { X::throw_on_copy = true ; }
inline void set_throw_on_assign ( X const* ) { X::throw_on_assign = true ; }
inline void reset_throw_on_copy ( X const* ) { X::throw_on_copy = false ; }
inline void reset_throw_on_assign ( X const* ) { X::throw_on_assign = false ; }
inline void check_is_pending_copy ( X const* ) { BOOST_TEST( X::pending_copy ) ; }
inline void check_is_pending_dtor ( X const* ) { BOOST_TEST( X::pending_dtor ) ; }
inline void check_is_pending_assign ( X const* ) { BOOST_TEST( X::pending_assign ) ; }
inline void check_is_not_pending_copy ( X const* ) { BOOST_TEST( !X::pending_copy ) ; }
inline void check_is_not_pending_dtor ( X const* ) { BOOST_TEST( !X::pending_dtor ) ; }
inline void check_is_not_pending_assign( X const* ) { BOOST_TEST( !X::pending_assign ) ; }
inline void check_instance_count ( int c, X const* ) { BOOST_TEST( X::count == c ) ; }
inline int get_instance_count ( X const* ) { return X::count ; }
inline void set_pending_copy ( X const* x ) { X::pending_copy = true ; }
inline void set_pending_dtor ( X const* x ) { X::pending_dtor = true ; }
inline void set_pending_assign ( X const* x ) { X::pending_assign = true ; }
inline void set_throw_on_copy ( X const* x ) { X::throw_on_copy = true ; }
inline void set_throw_on_assign ( X const* x ) { X::throw_on_assign = true ; }
inline void reset_throw_on_copy ( X const* x ) { X::throw_on_copy = false ; }
inline void reset_throw_on_assign ( X const* x ) { X::throw_on_assign = false ; }
inline void check_is_pending_copy ( X const* x ) { BOOST_CHECK( X::pending_copy ) ; }
inline void check_is_pending_dtor ( X const* x ) { BOOST_CHECK( X::pending_dtor ) ; }
inline void check_is_pending_assign ( X const* x ) { BOOST_CHECK( X::pending_assign ) ; }
inline void check_is_not_pending_copy ( X const* x ) { BOOST_CHECK( !X::pending_copy ) ; }
inline void check_is_not_pending_dtor ( X const* x ) { BOOST_CHECK( !X::pending_dtor ) ; }
inline void check_is_not_pending_assign( X const* x ) { BOOST_CHECK( !X::pending_assign ) ; }
inline void check_instance_count ( int c, X const* x ) { BOOST_CHECK( X::count == c ) ; }
inline int get_instance_count ( X const* x ) { return X::count ; }
inline void set_pending_copy (...) {}
inline void set_pending_dtor (...) {}
@ -189,27 +185,21 @@ template<class T>
inline void check_uninitialized_const ( optional<T> const& opt )
{
#ifndef BOOST_OPTIONAL_NO_NULL_COMPARE
BOOST_TEST( opt == 0 ) ;
BOOST_CHECK( opt == 0 ) ;
#endif
BOOST_TEST( !opt ) ;
BOOST_TEST( !get_pointer(opt) ) ;
BOOST_TEST( !opt.get_ptr() ) ;
BOOST_TEST( !opt.has_value() ) ;
BOOST_TEST( !opt.is_initialized() ) ;
BOOST_TEST( opt == boost::none ) ;
BOOST_CHECK( !opt ) ;
BOOST_CHECK( !get_pointer(opt) ) ;
BOOST_CHECK( !opt.get_ptr() ) ;
}
template<class T>
inline void check_uninitialized ( optional<T>& opt )
{
#ifndef BOOST_OPTIONAL_NO_NULL_COMPARE
BOOST_TEST( opt == 0 ) ;
BOOST_CHECK( opt == 0 ) ;
#endif
BOOST_TEST( !opt ) ;
BOOST_TEST( !get_pointer(opt) ) ;
BOOST_TEST( !opt.get_ptr() ) ;
BOOST_TEST( !opt.has_value() ) ;
BOOST_TEST( !opt.is_initialized() ) ;
BOOST_TEST( opt == boost::none ) ;
BOOST_CHECK( !opt ) ;
BOOST_CHECK( !get_pointer(opt) ) ;
BOOST_CHECK( !opt.get_ptr() ) ;
check_uninitialized_const(opt);
}
@ -217,35 +207,29 @@ inline void check_uninitialized ( optional<T>& opt )
template<class T>
inline void check_initialized_const ( optional<T> const& opt )
{
BOOST_TEST( opt ) ;
BOOST_CHECK( opt ) ;
#ifndef BOOST_OPTIONAL_NO_NULL_COMPARE
BOOST_TEST( opt != 0 ) ;
BOOST_CHECK( opt != 0 ) ;
#endif
BOOST_TEST ( !!opt ) ;
BOOST_TEST ( get_pointer(opt) ) ;
BOOST_TEST ( opt.get_ptr() ) ;
BOOST_TEST ( opt.has_value() ) ;
BOOST_TEST ( opt.is_initialized() ) ;
BOOST_TEST ( opt != boost::none ) ;
BOOST_CHECK ( !!opt ) ;
BOOST_CHECK ( get_pointer(opt) ) ;
BOOST_CHECK ( opt.get_ptr() ) ;
}
template<class T>
inline void check_initialized ( optional<T>& opt )
{
BOOST_TEST( opt ) ;
BOOST_CHECK( opt ) ;
#ifndef BOOST_OPTIONAL_NO_NULL_COMPARE
BOOST_TEST( opt != 0 ) ;
BOOST_CHECK( opt != 0 ) ;
#endif
BOOST_TEST ( !!opt ) ;
BOOST_TEST ( get_pointer(opt) ) ;
BOOST_TEST ( opt.get_ptr() ) ;
BOOST_TEST ( opt.has_value() ) ;
BOOST_TEST ( opt.is_initialized() ) ;
BOOST_TEST ( opt != boost::none ) ;
BOOST_CHECK ( !!opt ) ;
BOOST_CHECK ( get_pointer(opt) ) ;
BOOST_CHECK ( opt.get_ptr() ) ;
check_initialized_const(opt);
}
@ -253,12 +237,12 @@ inline void check_initialized ( optional<T>& opt )
template<class T>
inline void check_value_const ( optional<T> const& opt, T const& v, T const& z )
{
BOOST_TEST( *opt == v ) ;
BOOST_TEST( *opt != z ) ;
BOOST_TEST( opt.get() == v ) ;
BOOST_TEST( opt.get() != z ) ;
BOOST_TEST( (*(opt.operator->()) == v) ) ;
BOOST_TEST( *get_pointer(opt) == v ) ;
BOOST_CHECK( *opt == v ) ;
BOOST_CHECK( *opt != z ) ;
BOOST_CHECK( opt.get() == v ) ;
BOOST_CHECK( opt.get() != z ) ;
BOOST_CHECK( (*(opt.operator->()) == v) ) ;
BOOST_CHECK( *get_pointer(opt) == v ) ;
}
template<class T>
@ -270,12 +254,12 @@ inline void check_value ( optional<T>& opt, T const& v, T const& z )
reset_throw_on_copy( ARG(T) ) ;
#endif
BOOST_TEST( *opt == v ) ;
BOOST_TEST( *opt != z ) ;
BOOST_TEST( opt.get() == v ) ;
BOOST_TEST( opt.get() != z ) ;
BOOST_TEST( (*(opt.operator->()) == v) ) ;
BOOST_TEST( *get_pointer(opt) == v ) ;
BOOST_CHECK( *opt == v ) ;
BOOST_CHECK( *opt != z ) ;
BOOST_CHECK( opt.get() == v ) ;
BOOST_CHECK( opt.get() != z ) ;
BOOST_CHECK( (*(opt.operator->()) == v) ) ;
BOOST_CHECK( *get_pointer(opt) == v ) ;
check_value_const(opt,v,z);
}

View File

@ -1,59 +0,0 @@
// Copyright (c) 2018 Andrey Semashev
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// The test verifies that Boost.Optional copy constructors do not attempt to invoke
// the element type initializing constructors from templated arguments
#include <boost/optional/optional.hpp>
#include <boost/core/enable_if.hpp>
struct no_type
{
char data;
};
struct yes_type
{
char data[2];
};
template< unsigned int Size >
struct size_tag {};
template< typename T, typename U >
struct is_constructible
{
static U& get();
template< typename T1 >
static yes_type check_helper(size_tag< sizeof(static_cast< T1 >(get())) >*);
template< typename T1 >
static no_type check_helper(...);
static const bool value = sizeof(check_helper< T >(0)) == sizeof(yes_type);
};
template< typename T >
class wrapper
{
public:
wrapper() {}
wrapper(wrapper const&) {}
template< typename U >
wrapper(U const&, typename boost::enable_if_c< is_constructible< T, U >::value, int >::type = 0) {}
};
inline boost::optional< wrapper< int > > foo()
{
return boost::optional< wrapper< int > >();
}
int main()
{
// Invokes boost::optional copy constructor. Should not invoke wrapper constructor from U.
boost::optional< wrapper< int > > res = foo();
return 0;
}

View File

@ -1,111 +0,0 @@
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at: akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
using boost::optional;
// testing types:
// X is convertible to Y
// ADeriv is convertible to ABase
struct X
{
int val;
explicit X(int v) : val(v) {}
};
struct Y
{
int yval;
Y(X const& x) : yval(x.val) {}
friend bool operator==(Y const& l, Y const& r) { return l.yval == r.yval; }
};
struct ABase
{
int val;
explicit ABase(int v) : val(v) {}
friend bool operator==(ABase const& l, ABase const& r) { return l.val == r.val; }
};
struct ADeriv : ABase
{
explicit ADeriv(int v) : ABase(v) {}
};
template <typename T, typename U>
void test_convert_optional_U_to_optional_T_for()
{
#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
{
optional<U> ou(U(8));
optional<T> ot1(ou);
BOOST_TEST(ot1);
BOOST_TEST(*ot1 == T(*ou));
}
#endif
#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
{
optional<U> ou(U(8));
optional<T> ot2;
ot2 = ou;
BOOST_TEST(ot2);
BOOST_TEST(*ot2 == T(*ou));
}
#endif
}
void test_convert_optional_U_to_optional_T()
{
test_convert_optional_U_to_optional_T_for<Y, X>();
test_convert_optional_U_to_optional_T_for<ABase, ADeriv>();
test_convert_optional_U_to_optional_T_for<long, short>();
test_convert_optional_U_to_optional_T_for<double, float>();
}
template <typename T, typename U>
void test_convert_U_to_optional_T_for()
{
U u(8);
optional<T> ot1(u);
BOOST_TEST(ot1);
BOOST_TEST(*ot1 == T(u));
optional<T> ot2;
ot2 = u;
BOOST_TEST(ot2);
BOOST_TEST(*ot2 == T(u));
}
void test_convert_U_to_optional_T()
{
test_convert_U_to_optional_T_for<Y, X>();
test_convert_U_to_optional_T_for<ABase, ADeriv>();
test_convert_U_to_optional_T_for<long, short>();
test_convert_U_to_optional_T_for<double, float>();
}
int main()
{
test_convert_optional_U_to_optional_T();
test_convert_U_to_optional_T();
return boost::report_errors();
}

View File

@ -1,56 +0,0 @@
// Copyright (C) 2021 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#include "boost/core/lightweight_test.hpp"
#include "boost/none.hpp"
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
using boost::optional;
struct implicit_bool_conv
{
operator bool() const { return false; }
};
struct explicit_bool_conv
{
explicit operator bool() const BOOST_NOEXCEPT { return true; }
};
template <typename To, typename From>
void test_convert_assign()
{
optional<To> oi;
oi = From();
BOOST_TEST(oi);
}
void test_no_bad_assignment()
{
#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)
// this means that type trait `boost::is_assignable` works.
static_assert((boost::is_assignable<optional<bool>&, bool>::value), "ERROR");
static_assert((boost::is_assignable<optional<bool>&, implicit_bool_conv>::value), "ERROR");
static_assert((! boost::is_assignable<optional<bool>&, explicit_bool_conv>::value), "ERROR");
#endif
}
int main()
{
test_convert_assign<int, short>();
test_convert_assign<bool, implicit_bool_conv>();
test_no_bad_assignment();
return boost::report_errors();
}

View File

@ -1,70 +0,0 @@
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
#include "boost/none.hpp"
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
using boost::optional;
using boost::none;
template <typename U>
struct superconv
{
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
template <typename T>
superconv(T&&) { static_assert(sizeof(T) == 0, "ERROR"); }
#else
template <typename T>
superconv(const T&) { static_assert(sizeof(T) == 0, "ERROR"); }
template <typename T>
superconv( T&) { static_assert(sizeof(T) == 0, "ERROR"); }
#endif
superconv() {}
};
void test_optional_of_superconverting_T() // compile-time test
{
#ifndef BOOST_OPTIONAL_DETAIL_NO_IS_CONSTRUCTIBLE_TRAIT
superconv<optional<int> > s;
superconv<optional<int> > & rs = s;
optional<superconv<optional<int> > > os = rs;
#endif
}
void test_optional_optional_T()
{
optional<int> oi1 (1), oiN;
optional< optional<int> > ooi1 (oi1), ooiN(oiN);
BOOST_TEST(ooi1);
BOOST_TEST(*ooi1);
BOOST_TEST_EQ(**ooi1, 1);
BOOST_TEST(ooiN);
BOOST_TEST(!*ooiN);
}
int main()
{
test_optional_optional_T();
test_optional_of_superconverting_T();
return boost::report_errors();
}

View File

@ -1,66 +0,0 @@
// Copyright 2017 Peter Dimov
// Copyright 2017 Vinnie Falco
// Copyright 2018 Andrzej Krzemienski
//
// Distributed under the Boost Software License, Version 1.0.
//
// http://www.boost.org/LICENSE_1_0.txt
#include <boost/config.hpp>
#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
int main()
{
}
#else
#include <boost/optional.hpp>
#include <utility>
class basic_multi_buffer;
class const_buffers_type // a similar declaration in boost.beast had problem
{ // with boost optional
basic_multi_buffer const* b_;
friend class basic_multi_buffer;
explicit
const_buffers_type(basic_multi_buffer const& b);
public:
const_buffers_type() = delete;
const_buffers_type(const_buffers_type const&) = default;
const_buffers_type& operator=(const_buffers_type const&) = default;
};
void test_beast_example()
{
// test if it even compiles
boost::optional< std::pair<const_buffers_type, int> > opt, opt2;
opt = opt2;
(void)opt;
}
struct NotDefaultConstructible // minimal class exposing the problem
{
NotDefaultConstructible() = delete;
};
void test_assign_for_non_default_constructible()
{
// test if it even compiles
boost::optional<NotDefaultConstructible> opt, opt2;
opt = opt2;
(void)opt;
}
int main()
{
test_beast_example();
test_assign_for_non_default_constructible();
}
#endif

View File

@ -1,390 +0,0 @@
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include <string>
#include "boost/core/lightweight_test.hpp"
#include "boost/none.hpp"
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
using boost::optional;
using boost::none;
using boost::in_place_init;
using boost::in_place_init_if;
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
class Guard
{
public:
int which_ctor;
Guard () : which_ctor(0) { }
Guard (int&, double&&) : which_ctor(1) { }
Guard (int&&, double&) : which_ctor(2) { }
Guard (int&&, double&&) : which_ctor(3) { }
Guard (int&, double&) : which_ctor(4) { }
Guard (std::string const&) : which_ctor(5) { }
Guard (std::string &) : which_ctor(6) { }
Guard (std::string &&) : which_ctor(7) { }
private:
Guard(Guard&&);
Guard(Guard const&);
void operator=(Guard &&);
void operator=(Guard const&);
};
void test_emplace()
{
int i = 0;
double d = 0.0;
const std::string cs;
std::string ms;
optional<Guard> o;
o.emplace();
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
o.emplace(i, 2.0);
BOOST_TEST(o);
BOOST_TEST(1 == o->which_ctor);
o.emplace(1, d);
BOOST_TEST(o);
BOOST_TEST(2 == o->which_ctor);
o.emplace(1, 2.0);
BOOST_TEST(o);
BOOST_TEST(3 == o->which_ctor);
o.emplace(i, d);
BOOST_TEST(o);
BOOST_TEST(4 == o->which_ctor);
o.emplace(cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
o.emplace(ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
o.emplace(std::string());
BOOST_TEST(o);
BOOST_TEST(7 == o->which_ctor);
}
void test_in_place_ctor()
{
int i = 0;
double d = 0.0;
const std::string cs;
std::string ms;
{
optional<Guard> o (in_place_init);
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, i, 2.0);
BOOST_TEST(o);
BOOST_TEST(1 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, 1, d);
BOOST_TEST(o);
BOOST_TEST(2 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, 1, 2.0);
BOOST_TEST(o);
BOOST_TEST(3 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, i, d);
BOOST_TEST(o);
BOOST_TEST(4 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, std::string());
BOOST_TEST(o);
BOOST_TEST(7 == o->which_ctor);
}
}
void test_in_place_if_ctor()
{
int i = 0;
double d = 0.0;
const std::string cs;
std::string ms;
{
optional<Guard> o (in_place_init_if, true);
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, i, 2.0);
BOOST_TEST(o);
BOOST_TEST(1 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, 1, d);
BOOST_TEST(o);
BOOST_TEST(2 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, 1, 2.0);
BOOST_TEST(o);
BOOST_TEST(3 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, i, d);
BOOST_TEST(o);
BOOST_TEST(4 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, true, std::string());
BOOST_TEST(o);
BOOST_TEST(7 == o->which_ctor);
}
{
optional<Guard> o (in_place_init_if, false, 1, 2.0);
BOOST_TEST(!o);
}
}
#endif
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
struct ThrowOnMove
{
ThrowOnMove(ThrowOnMove&&) { throw int(); }
ThrowOnMove(ThrowOnMove const&) { throw int(); }
ThrowOnMove(int){}
};
void test_no_moves_on_emplacement()
{
try {
optional<ThrowOnMove> o;
o.emplace(1);
BOOST_TEST(o);
}
catch (...) {
BOOST_TEST(false);
}
}
void test_no_moves_on_in_place_ctor()
{
try {
optional<ThrowOnMove> o (in_place_init, 1);
BOOST_TEST(o);
optional<ThrowOnMove> p (in_place_init_if, true, 1);
BOOST_TEST(p);
optional<ThrowOnMove> q (in_place_init_if, false, 1);
BOOST_TEST(!q);
}
catch (...) {
BOOST_TEST(false);
}
}
#endif
struct Thrower
{
Thrower(bool throw_) { if (throw_) throw int(); }
private:
Thrower(Thrower const&);
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
Thrower(Thrower&&);
#endif
};
void test_clear_on_throw()
{
optional<Thrower> ot;
try {
ot.emplace(false);
BOOST_TEST(ot);
} catch(...) {
BOOST_TEST(false);
}
try {
ot.emplace(true);
BOOST_TEST(false);
} catch(...) {
BOOST_TEST(!ot);
}
}
void test_no_assignment_on_emplacement()
{
optional<const std::string> os, ot;
BOOST_TEST(!os);
os.emplace("wow");
BOOST_TEST(os);
BOOST_TEST_EQ(*os, "wow");
BOOST_TEST(!ot);
ot.emplace();
BOOST_TEST(ot);
BOOST_TEST_EQ(*ot, "");
}
namespace no_rvalue_refs {
class Guard
{
public:
int which_ctor;
Guard () : which_ctor(0) { }
Guard (std::string const&) : which_ctor(5) { }
Guard (std::string &) : which_ctor(6) { }
private:
Guard(Guard const&);
void operator=(Guard const&);
};
void test_emplace()
{
const std::string cs;
std::string ms;
optional<Guard> o;
o.emplace();
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
o.emplace(cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
o.emplace(ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
void test_in_place_ctor()
{
const std::string cs;
std::string ms;
{
optional<Guard> o (in_place_init);
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
}
{
optional<Guard> o (in_place_init, ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
}
void test_in_place_if_ctor()
{
const std::string cs;
std::string ms;
{
optional<Guard> n (in_place_init_if, false);
BOOST_TEST(!n);
optional<Guard> o (in_place_init_if, true);
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
}
{
optional<Guard> n (in_place_init_if, false, cs);
BOOST_TEST(!n);
optional<Guard> o (in_place_init_if, true, cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
}
{
optional<Guard> n (in_place_init_if, false, ms);
BOOST_TEST(!n);
optional<Guard> o (in_place_init_if, true, ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
}
} // namespace no_rvalue_ref
int main()
{
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
test_emplace();
test_in_place_ctor();
test_in_place_if_ctor();
#endif
#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
test_no_moves_on_emplacement();
test_no_moves_on_in_place_ctor();
#endif
test_clear_on_throw();
test_no_assignment_on_emplacement();
no_rvalue_refs::test_emplace();
no_rvalue_refs::test_in_place_ctor();
no_rvalue_refs::test_in_place_if_ctor();
return boost::report_errors();
}

View File

@ -1,57 +0,0 @@
// Copyright (C) 2016 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
using boost::optional;
struct Value
{
explicit Value(int) {}
};
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
template <typename T>
void test_brace_init()
{
optional<T> o = {};
BOOST_TEST(!o);
}
template <typename T>
void test_brace_assign()
{
optional<T> o;
o = {};
BOOST_TEST(!o);
}
#endif
int main()
{
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
test_brace_init<int>();
test_brace_init<Value>();
test_brace_assign<int>();
test_brace_assign<Value>();
#endif
return boost::report_errors();
}

View File

@ -1,152 +0,0 @@
// Copyright (C) 2017 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
#include "boost/core/lightweight_test_trait.hpp"
#include "boost/type_traits/is_base_of.hpp"
#include "boost/optional/detail/experimental_traits.hpp"
#ifndef BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS
struct PrivDefault
{
private: PrivDefault() {}
};
struct CustDefault
{
CustDefault() {}
};
struct CustomizedTrivial
{
CustomizedTrivial() {}
};
struct DeletedDefault
{
BOOST_DELETED_FUNCTION(DeletedDefault())
};
namespace boost { namespace optional_config {
template <> struct optional_uses_direct_storage_for<CustomizedTrivial> : boost::true_type {};
}}
struct CustDtor
{
~CustDtor() {}
};
struct NoDefault
{
explicit NoDefault(int) {}
};
struct Empty {};
template <typename T, typename U>
struct Aggregate { T t; U u; };
struct CustAssign
{
CustAssign& operator=(CustAssign const&) { return *this; }
};
struct CustMove
{
CustMove(CustMove &&) {}
};
void test_type_traits()
{
// this only tests if type traits are implemented correctly
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<int> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<double> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<CustomizedTrivial> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<PrivDefault> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<NoDefault> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<CustDefault> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<Aggregate<int, CustDefault> > ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<CustDtor> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<CustAssign> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<CustMove> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<Aggregate<int, CustMove> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<int> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<double> ));
#ifndef BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<Empty> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<Aggregate<int, double> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_config::optional_uses_direct_storage_for<Aggregate<Aggregate<Empty, int>, double> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<Empty> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<Aggregate<int, double> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<Aggregate<Aggregate<Empty, int>, double> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<PrivDefault> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<NoDefault> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<CustDefault> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<Aggregate<int, CustDefault> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<DeletedDefault> ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<Aggregate<int, DeletedDefault> > ));
#endif
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<DeletedDefault> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_config::optional_uses_direct_storage_for<Aggregate<int, DeletedDefault> > ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_detail::is_trivially_semiregular<CustDtor> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_detail::is_trivially_semiregular<CustAssign> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_detail::is_trivially_semiregular<CustMove> ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_detail::is_trivially_semiregular<Aggregate<int, CustMove> > ));
}
void test_trivial_copyability()
{
BOOST_TEST_TRAIT_TRUE((boost::is_base_of<boost::optional_detail::tc_optional_base<int>, boost::optional<int> > ));
BOOST_TEST_TRAIT_TRUE((boost::is_base_of<boost::optional_detail::tc_optional_base<double>, boost::optional<double> > ));
BOOST_TEST_TRAIT_TRUE((boost::is_base_of<boost::optional_detail::tc_optional_base<CustomizedTrivial>, boost::optional<CustomizedTrivial> > ));
BOOST_TEST_TRAIT_FALSE((boost::is_base_of<boost::optional_detail::tc_optional_base<DeletedDefault>, boost::optional<DeletedDefault> > ));
#ifndef BOOST_OPTIONAL_DETAIL_NO_SPEC_FOR_TRIVIAL_TYPES
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<int> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<double> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<CustomizedTrivial> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<Empty> > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<Aggregate<int, double> > > ));
BOOST_TEST_TRAIT_TRUE(( boost::optional_detail::is_trivially_semiregular<boost::optional<Aggregate<Aggregate<Empty, int>, double> > > ));
BOOST_TEST_TRAIT_FALSE(( boost::optional_detail::is_trivially_semiregular<boost::optional<DeletedDefault> > ));
#endif
}
#endif
int main()
{
#ifndef BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS
test_type_traits();
test_trivial_copyability();
#endif
return boost::report_errors();
}

View File

@ -15,7 +15,7 @@
// THIS TEST SHOULD FAIL TO COMPILE
//
#if BOOST_WORKAROUND( BOOST_INTEL_CXX_VERSION, <= 700) // Intel C++ 7.0
// Intel C++ 7.0 incorrectly accepts the initialization "boost::optional<int> opt = 3"
// Interl C++ 7.0 incorrectly accepts the initialization "boost::optional<int> opt = 3"
// even though the ctor is explicit (c.f. 12.3.1.2), so the test uses another form of
// copy-initialization: argument-passing (8.5.12)
void helper ( boost::optional<int> ) ;

View File

@ -1,26 +0,0 @@
// Copyright (C) 2018, Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional.hpp"
// THIS TEST SHOULD FAIL TO COMPILE
void test_converting_assignment_of_different_enums()
{
const boost::optional<int> o1(1);
const boost::optional<int> o2(2);
swap(o1, o2); // no swap on const objects should compile
}
int main()
{
test_converting_assignment_of_different_enums();
}

Some files were not shown because too many files have changed in this diff Show More