|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r77339 - in trunk: boost/exception libs/exception/doc/source
From: emil_at_[hidden]
Date: 2012-03-14 22:13:55
Author: emildotchevski
Date: 2012-03-14 22:13:52 EDT (Wed, 14 Mar 2012)
New Revision: 77339
URL: http://svn.boost.org/trac/boost/changeset/77339
Log:
Making clone_impl derive virtually from clone_base, so that calling boost::copy_exception with a type that already derives from clone_impl doesn't make pointer conversions to clone_impl ambiguous.
Text files modified:
trunk/boost/exception/exception.hpp | 2
trunk/libs/exception/doc/source/boost-exception.reno | 1750 ++++++++++++++++++++--------------------
2 files changed, 876 insertions(+), 876 deletions(-)
Modified: trunk/boost/exception/exception.hpp
==============================================================================
--- trunk/boost/exception/exception.hpp (original)
+++ trunk/boost/exception/exception.hpp 2012-03-14 22:13:52 EDT (Wed, 14 Mar 2012)
@@ -430,7 +430,7 @@
class
clone_impl:
public T,
- public clone_base
+ public virtual clone_base
{
struct clone_tag { };
clone_impl( clone_impl const & x, clone_tag ):
Modified: trunk/libs/exception/doc/source/boost-exception.reno
==============================================================================
--- trunk/libs/exception/doc/source/boost-exception.reno (original)
+++ trunk/libs/exception/doc/source/boost-exception.reno 2012-03-14 22:13:52 EDT (Wed, 14 Mar 2012)
@@ -52,34 +52,28 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>DB156E6A8ACB9FB90C8FB110FC25A5FEB14A619F82EEC47FF913373592E5CC3E</strong>
- <weak>240075319</weak>
- <size>6209</size>
- <position>412</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../example/example_io.cpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>diagnostic_information example</string>
+ <string>Motivation</string>
</title>
<file_name>
- <string></string>
+ <string>motivation</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>7</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also explicit="</string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -91,44 +85,27 @@
<hook>
<hook>
<stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
- <weak>1035445969</weak>
- <size>595</size>
- <position>204</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>exception::exception</string>
+ <string>exception types as simple semantic tags</string>
</title>
<file_name>
- <string>exception_constructors</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
+ <string> </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -141,33 +118,33 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>977045132A532A0071B0B53F737D85367CE9A331402F96790E45B3B6F2FC88A6</strong>
- <weak>1875939463</weak>
- <size>529</size>
- <position>382</position>
+ <strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
+ <weak>1917376632</weak>
+ <size>706</size>
+ <position>408</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../example/error_info_1.cpp</string>
+ <string>../../example/enable_error_info.cpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>adding of arbitrary data at the point of the throw</string>
+ <string>integrating boost exception in existing exception class hierarchies</string>
</title>
<file_name>
- <string>adding_data_at_throw</string>
+ <string>tutorial_enable_error_info</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -189,14 +166,35 @@
</file>
</hook>
<title>
- <string>page index</string>
+ <string>frequently asked questions</string>
</title>
<file_name>
- <string>page_idx</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
+ <variant>2</variant>
+ <string>":) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-7</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>1</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-8</id>
+ </shared_ptr>
+ </weak_ptr>
<size>1</size>
<variant>2</variant>
<string>(:include include:) (:auto also:) </string>
@@ -213,27 +211,32 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>1</size>
+ <strong>977045132A532A0071B0B53F737D85367CE9A331402F96790E45B3B6F2FC88A6</strong>
+ <weak>1875939463</weak>
+ <size>529</size>
+ <position>382</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../example/error_info_1.cpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>exception types as simple semantic tags</string>
+ <string>adding of arbitrary data at the point of the throw</string>
</title>
<file_name>
- <string></string>
+ <string>adding_data_at_throw</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -247,37 +250,44 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
+ <weak>1035445969</weak>
+ <size>595</size>
+ <position>204</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>Motivation</string>
+ <string>exception::exception</string>
</title>
<file_name>
- <string>motivation</string>
+ <string>exception_constructors</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>7</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also explicit="</string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-9</id>
- </shared_ptr>
- </weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string> </string>
- <variant>1</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -289,34 +299,44 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
- <weak>1917376632</weak>
- <size>706</size>
- <position>408</position>
+ <size>3</size>
+ <strong>EFBD8063574E7D463C8E08D9AA1D68CFCE4630C445B20156AC7591F46AB48260</strong>
+ <weak>2082877988</weak>
+ <size>5081</size>
+ <position>751</position>
+ <strong>2C6C9E29E4E23E6C1F5876C33741FB18A63E703410F3CD61ACB348866B7B02B8</strong>
+ <weak>3516588960</weak>
+ <size>3918</size>
+ <position>884</position>
+ <strong>38AA79D330846BE1CF17285796F34A9DBB5A7E995963A55F9B46EB1DA6314610</strong>
+ <weak>542483318</weak>
+ <size>573</size>
+ <position>3130</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../example/enable_error_info.cpp</string>
+ <string>../../../../boost/exception/info.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>integrating boost exception in existing exception class hierarchies</string>
+ <string>exception/operator<<</string>
</title>
<file_name>
- <string>tutorial_enable_error_info</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string> </string>
- <variant>1</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -328,17 +348,24 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>1</size>
+ <strong>DB156E6A8ACB9FB90C8FB110FC25A5FEB14A619F82EEC47FF913373592E5CC3E</strong>
+ <weak>240075319</weak>
+ <size>6209</size>
+ <position>412</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../example/example_io.cpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>frequently asked questions</string>
+ <string>diagnostic_information example</string>
</title>
<file_name>
<string></string>
@@ -346,8 +373,7 @@
</object>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>":) </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -406,32 +432,28 @@
<hook>
<hook>
<stream_hook_path>
- <size>3</size>
- <strong>EFBD8063574E7D463C8E08D9AA1D68CFCE4630C445B20156AC7591F46AB48260</strong>
- <weak>2082877988</weak>
- <size>5081</size>
- <position>751</position>
- <strong>2C6C9E29E4E23E6C1F5876C33741FB18A63E703410F3CD61ACB348866B7B02B8</strong>
- <weak>3516588960</weak>
- <size>3918</size>
- <position>884</position>
- <strong>38AA79D330846BE1CF17285796F34A9DBB5A7E995963A55F9B46EB1DA6314610</strong>
- <weak>542483318</weak>
- <size>573</size>
- <position>3130</position>
+ <size>2</size>
+ <strong>6FB85B536F965F137409D5B5D34786DCBF0B9957A7C251D271B717A1156B823D</strong>
+ <weak>1090406464</weak>
+ <size>362</size>
+ <position>527</position>
+ <strong>D16DAEA8B1792A019AF7FCA362FDC6EFD381AF4C43C076A01C029ECE51F994A6</strong>
+ <weak>3172941848</weak>
+ <size>330</size>
+ <position>26</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/info.hpp</string>
+ <string>../../../../boost/exception/current_exception_cast.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>exception/operator<<</string>
+ <string>current_exception_cast</string>
</title>
<file_name>
<string></string>
@@ -447,17 +469,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>15</id>
<type>
<string>reno_context</string>
@@ -466,28 +477,24 @@
<hook>
<hook>
<stream_hook_path>
- <size>2</size>
- <strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
- <weak>1615599655</weak>
- <size>68</size>
- <position>227</position>
- <strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
- <weak>805836816</weak>
- <size>66</size>
- <position>1</position>
+ <size>1</size>
+ <strong>790A065B0168021FAD180E996254E3CDBC0360D22D3FCB83C143416663D85402</strong>
+ <weak>1376868984</weak>
+ <size>262</size>
+ <position>323</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/error_info.hpp</string>
+ <string>../../../../boost/exception/errinfo_nested_exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>boost/exception/error_info.hpp</string>
+ <string>boost/exception/errinfo_nested_exception.hpp</string>
</title>
<file_name>
<string></string>
@@ -512,27 +519,27 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>6FB85B536F965F137409D5B5D34786DCBF0B9957A7C251D271B717A1156B823D</strong>
- <weak>1090406464</weak>
- <size>362</size>
- <position>527</position>
- <strong>D16DAEA8B1792A019AF7FCA362FDC6EFD381AF4C43C076A01C029ECE51F994A6</strong>
- <weak>3172941848</weak>
- <size>330</size>
- <position>26</position>
+ <strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
+ <weak>1615599655</weak>
+ <size>68</size>
+ <position>321</position>
+ <strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
+ <weak>805836816</weak>
+ <size>66</size>
+ <position>1</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/current_exception_cast.hpp</string>
+ <string>../../../../boost/exception/error_info.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>current_exception_cast</string>
+ <string>boost/exception/error_info.hpp</string>
</title>
<file_name>
<string></string>
@@ -548,17 +555,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
- </shared_ptr>
- </weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>17</id>
<type>
<string>reno_context</string>
@@ -604,6 +600,17 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
+ <id>-6</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>1</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
<id>18</id>
<type>
<string>reno_context</string>
@@ -612,27 +619,20 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>790A065B0168021FAD180E996254E3CDBC0360D22D3FCB83C143416663D85402</strong>
- <weak>1376868984</weak>
- <size>262</size>
- <position>323</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../../../boost/exception/errinfo_nested_exception.hpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>boost/exception/errinfo_nested_exception.hpp</string>
+ <string>page index</string>
</title>
<file_name>
- <string></string>
+ <string>page_idx</string>
</file_name>
</object>
</shared_ptr>
@@ -922,9 +922,9 @@
<hook>
<stream_hook_path>
<size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
<weak>4056200131</weak>
@@ -1139,10 +1139,10 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>9A6D5598D65F1C1B5F913007D1CD1A814F3CDAD07D4AF8C468A0716059B2F7CC</strong>
- <weak>3552995087</weak>
- <size>1405</size>
- <position>527</position>
+ <strong>195FF369BA559E3C0080F75321794B4808B6A278D4DEF8AEDBD9FCEBCE69C548</strong>
+ <weak>458631219</weak>
+ <size>2145</size>
+ <position>321</position>
</stream_hook_path>
</hook>
<file>
@@ -1624,13 +1624,13 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>F7633FDCF6615C0199645701EE6E7ACE5CBCD7A7CF6838573791E91ABB3C09F2</strong>
- <weak>1668435395</weak>
- <size>1332</size>
+ <strong>1B4417301AE3C0338C22E6D497391F51ABD459E521E7DFCE59A6EEC1372D33C2</strong>
+ <weak>202224383</weak>
+ <size>1766</size>
<position>600</position>
- <strong>A1F443AF571973A12005D2F7D4AE09A32AAF686FEEAE272EC21512A65EB943E8</strong>
- <weak>3879093659</weak>
- <size>1300</size>
+ <strong>E0A17503B42EE12F31548A7D20F89916D734CE88B30A1BF6F9FC2D1F83A8B6F4</strong>
+ <weak>3410340567</weak>
+ <size>1734</size>
<position>26</position>
</stream_hook_path>
</hook>
@@ -2117,9 +2117,9 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
<weak>3292878997</weak>
@@ -2330,14 +2330,14 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
<weak>1137981799</weak>
<size>192</size>
- <position>11758</position>
+ <position>11766</position>
</stream_hook_path>
</hook>
<file>
@@ -2665,9 +2665,9 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
<weak>765399792</weak>
@@ -2947,9 +2947,9 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
</stream_hook_path>
</hook>
@@ -3251,7 +3251,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3260,7 +3260,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3269,7 +3269,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3278,7 +3278,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3287,7 +3287,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3334,15 +3343,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>0</size>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>-15</id>
</shared_ptr>
</weak_ptr>
@@ -3361,7 +3361,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3370,7 +3370,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3501,7 +3501,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -4185,7 +4185,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4194,7 +4194,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4203,7 +4203,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4212,7 +4212,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4221,7 +4221,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4230,7 +4230,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4239,7 +4239,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4248,7 +4248,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4267,11 +4267,11 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-63</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> decl:)@] </string>
+ <string> def:)@] </string>
</pair>
<pair>
<weak_ptr>
@@ -4280,16 +4280,18 @@
<id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>3</size>
+ <variant>2</variant>
+ <string>[@(:include </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string> decl:)@] </string>
</pair>
<pair>
<weak_ptr>
@@ -4304,21 +4306,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
- <variant>2</variant>
- <string>[@(:include </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-63</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> def:)@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -4851,7 +4851,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -4889,7 +4889,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5158,7 +5158,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5275,7 +5275,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5355,45 +5355,25 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </weak_ptr>
- <size>7</size>
- <variant>2</variant>
- <string>[@(:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </weak_ptr>
- <variant>2</variant>
- <string> mod="m":)(); (:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> mod="m":)( (:link </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>:) const & x );@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5402,43 +5382,45 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>7</size>
+ <variant>2</variant>
+ <string>[@(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> mod="m":)(); (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
<id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> mod="m":)( (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string>:) const & x );@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<size>5</size>
@@ -5448,7 +5430,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5467,7 +5449,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5476,7 +5458,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5485,7 +5467,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>3</size>
@@ -5495,7 +5477,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5505,7 +5487,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-15</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5543,6 +5534,15 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
+ <id>-6</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
<id>-18</id>
</shared_ptr>
</weak_ptr>
@@ -6536,65 +6536,63 @@
<id>-5</id>
</shared_ptr>
</weak_ptr>
- <size>11</size>
+ <size>33</size>
<variant>2</variant>
- <string>!!!!Example: this is a possible output from the (:link </string>
+ <string>(:auto !!!:) Traditionally, when using exceptions to report failures, the throw site: *creates an exception object of the appropriate type, and *stuffs it with data relevant to the detected error. A higher context in the program contains a catch statement which: *selects failures based on exception types, and *inspects exception objects for data required to deal with the problem. The main issue with this "traditional" approach is that often, the data available at the point of the throw is insufficient for the catch site to handle the failure. Here is an example of a catch statement: [@catch( file_read_error & e ) { std::cerr << e.file_name(); }@] And here is a possible matching throw: [@void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(???); ....
0; }@] Clearly, the problem is that the handler requires a file name but the read_file function does not have a file name to put in the exception object; all it has is a FILE pointer! In an attempt to deal with this problem, we could modify read_file to accept a file name: [@void read_file( FILE * f, char const * name ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(name); .... }@] This is not a real solution: it simply shifts the burden of supplying a file name to the immediate caller of the read_file function. ->''In general, the data required to handle a given library-emitted exception depends on the program that links to it. Many contexts between the throw and the catch may have relevant information which must be transported to the exception handler.'' !!!Exception wrapping The idea of exception wrapping is to catch an excep
tion from a lower level function (such as the read_file function above), and throw a new exception object that contains the original exception (and also carries a file name.) This method seems to be particularly popular with C++ programmers with Java background. Exception wrapping leads to the following problems: *To wrap an exception object it must be copied, which may result in slicing. *Wrapping is practically impossible to use in generic contexts. The second point is actually special case of violating the exception neutrality principle. Most contexts in a program can not handle exceptions; such contexts should not interfere with the process of exception handling. !!!The boost::exception solution *Simply derive your exception types from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function, as used in ''libs/exception/example/example_io.cpp:'' [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<struct fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
+ <string>:). *Confidently limit the throw site to provide only data that is available naturally. *Use exception-neutral contexts between the throw and the catch to augment exceptions with more relevant data as they bubble up. For example, in the throw statement below we only add the errno code, since this is the only failure-relevant information available in this context: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-32</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = fopen [struct boost::(:link </string>
+ <string>:) { }; struct io_error: virtual exception_base { }; struct file_read_error: virtual io_error { }; typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
+ <string>:)<struct tag_errno_code,int> errno_code; void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-72</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
+ <string>|<<:) errno_code(errno); .... }@] In a higher exception-neutral context, we add the file name to ''any'' exception that derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-22</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = rb@] </string>
- </pair>
- <pair>
+ <string>:): [@typedef boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include decl:) !!!!Effects: * Default constructor: initializes an empty boost::(:link </string>
+ <string>:)<struct tag_file_name,std::string> file_name; .... try { if( FILE * fp=fopen("foo.txt","rt") ) { shared_ptr<FILE> f(fp,fclose); .... read_file(fp); //throws types deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6603,204 +6601,198 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) object. * Copy constructor: initializes a boost::(:link </string>
+ <string>:) do_something(); .... } else throw file_open_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) object which shares ownership with x of all data added through (:link </string>
+ <string>|<<:) errno_code(errno); } catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> mod="/":), including data that is added at a future time. !!!!Throws: Nothing. </string>
- </pair>
- <pair>
+ <string>:) & e ) { e (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>17</size>
<variant>2</variant>
- <string>(:auto !!!:) The following example demonstrates how errno can be stored in exception objects using Boost Exception: [@#include <(:link </string>
+ <string>|<<:) file_name("foo.txt"); throw; }@] Finally here is how the handler retrieves data from exceptions that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-77</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)> #include <iostream> typedef boost::(:link </string>
+ <string>:): [@catch( io_error & e ) { std::cerr << "I/O Error!\n"; if( std::string const * fn=(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_my_info,int> my_info; //(1) struct my_error: virtual boost::(:link </string>
+ <string>:)<file_name>(e) ) std::cerr << "File name: " << *fn << "\n"; if( int const * c=(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), virtual std::exception { }; //(2) void f() { throw my_error() << my_info(42); //(3) }@] First, we instantiate the (:link </string>
+ <string>:)<errno_code>(e) ) std::cerr << "OS says: " << strerror(*c) << "\n"; }@] In addition, boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) template using a unique identifier -- tag_my_info, and the type of the info it identifies -- int. This provides compile-time type safety for the various values stored in exception objects. Second, we define class my_error, which derives from boost::(:link </string>
+ <string>:) can be used to compose an automatic (if not user-friendly) message that contains all of the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). Finally, (3) illustrates how the typedef from (1) can be used with (:link </string>
+ <string>:) objects added to a boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|operator<<:) to store values in exception objects at the point of the throw. The stored my_info value can be recovered at a later time like this: [@// ...continued void g() { try { f(); } catch( my_error & x ) { if( int const * mi=boost::(:link </string>
- <variant>1</variant>
+ <string>:). This is useful for inclusion in logs and other diagnostic objects. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
+ <size>27</size>
<variant>2</variant>
- <string>:)<my_info>(x) ) std::cerr << "My info: " << *mi; } }@] The (:link </string>
+ <string>(:auto !!:) Some exception hierarchies can not be modified to make boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function template is instantiated with the typedef from (1), and is passed an exception object of a polymorphic type. If the exception object contains the requested value, err will point to it; otherwise a null pointer is returned. </string>
- </pair>
- <pair>
+ <string>:) a base type. In this case, the (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !:) This is an alphabetical list of all Boost Exception documentation pages. (:pagelist fmt="index" except_tags="index noindex" mod="w":) </string>
- </pair>
- <pair>
+ <string>:) function template can be used to make exception objects derive from boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) Deriving from boost::(:link </string>
+ <string>:) anyway. Here is an example: [@#include <(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-77</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) effectively decouples the semantics of a failure from the information that is relevant to each individual instance of reporting a failure with a given semantic. In other words: with boost::(:link </string>
+ <string>:)> #include <stdexcept> typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), what data a given exception object transports depends primarily on the context in which failures are reported (not on its type.) Since exception types need no members, it becomes very natural to throw exceptions that derive from more than one type to indicate multiple appropriate semantics: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
+ <string>:)<struct tag_std_range_min,size_t> std_range_min; typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
- </weak_ptr>
- <variant>2</variant>
- <string>:) { }; struct io_error: virtual exception_base { }; struct file_error: virtual io_error { }; struct read_error: virtual io_error { }; struct file_read_error: virtual file_error, virtual read_error { };@] Using this approach, exception types become a simple tagging system for categorizing errors and selecting failures in exception handlers. </string>
- </pair>
- <pair>
+ </weak_ptr>
+ <variant>2</variant>
+ <string>:)<struct tag_std_range_max,size_t> std_range_max; typedef boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>33</size>
<variant>2</variant>
- <string>(:auto !!!:) Traditionally, when using exceptions to report failures, the throw site: *creates an exception object of the appropriate type, and *stuffs it with data relevant to the detected error. A higher context in the program contains a catch statement which: *selects failures based on exception types, and *inspects exception objects for data required to deal with the problem. The main issue with this "traditional" approach is that often, the data available at the point of the throw is insufficient for the catch site to handle the failure. Here is an example of a catch statement: [@catch( file_read_error & e ) { std::cerr << e.file_name(); }@] And here is a possible matching throw: [@void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(???); ....
0; }@] Clearly, the problem is that the handler requires a file name but the read_file function does not have a file name to put in the exception object; all it has is a FILE pointer! In an attempt to deal with this problem, we could modify read_file to accept a file name: [@void read_file( FILE * f, char const * name ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(name); .... }@] This is not a real solution: it simply shifts the burden of supplying a file name to the immediate caller of the read_file function. ->''In general, the data required to handle a given library-emitted exception depends on the program that links to it. Many contexts between the throw and the catch may have relevant information which must be transported to the exception handler.'' !!!Exception wrapping The idea of exception wrapping is to catch an excep
tion from a lower level function (such as the read_file function above), and throw a new exception object that contains the original exception (and also carries a file name.) This method seems to be particularly popular with C++ programmers with Java background. Exception wrapping leads to the following problems: *To wrap an exception object it must be copied, which may result in slicing. *Wrapping is practically impossible to use in generic contexts. The second point is actually special case of violating the exception neutrality principle. Most contexts in a program can not handle exceptions; such contexts should not interfere with the process of exception handling. !!!The boost::exception solution *Simply derive your exception types from boost::(:link </string>
+ <string>:)<struct tag_std_range_index,size_t> std_range_index; template <class T> class my_container { public: size_t size() const; T const & operator[]( size_t i ) const { if( i > size() ) throw boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). *Confidently limit the throw site to provide only data that is available naturally. *Use exception-neutral contexts between the throw and the catch to augment exceptions with more relevant data as they bubble up. For example, in the throw statement below we only add the errno code, since this is the only failure-relevant information available in this context: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
+ <string>:)(std::range_error("Index out of range")) << std_range_min(0) << std_range_max(size()) << std_range_index(i); //.... } }; @] The call to (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) { }; struct io_error: virtual exception_base { }; struct file_read_error: virtual io_error { }; typedef boost::(:link </string>
+ <string>:)<T> gets us an object of ''unspecified type'' which is guaranteed to derive from both boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_errno_code,int> errno_code; void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error() (:link </string>
+ <string>:) and T. This makes it possible to use (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) errno_code(errno); .... }@] In a higher exception-neutral context, we add the file name to ''any'' exception that derives from boost::(:link </string>
+ <string> mod="/":) to store additional information in the exception object. The exception can be intercepted as T &, so existing exception handling will not break. It can also be intercepted as boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6809,34 +6801,36 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:): [@typedef boost::(:link </string>
+ <string>:) &, so that (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-73</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_file_name,std::string> file_name; .... try { if( FILE * fp=fopen("foo.txt","rt") ) { shared_ptr<FILE> f(fp,fclose); .... read_file(fp); //throws types deriving from boost::(:link </string>
- <variant>1</variant>
+ <string>|more information can be added to the exception at a later time:). </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
+ <size>81</size>
<variant>2</variant>
- <string>:) do_something(); .... } else throw file_open_error() (:link </string>
+ <string>(:auto !!:) !!!Why doesn't boost::exception derive from std::exception? Despite that (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-38</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) errno_code(errno); } catch( boost::(:link </string>
+ <string>|virtual inheritance should be used in deriving from base exception types:), many programmers fail to follow this principle when deriving from std::exception. If boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6845,16 +6839,16 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
+ <string>:) derives from std::exception, using the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) file_name("foo.txt"); throw; }@] Finally here is how the handler retrieves data from exceptions that derive from boost::(:link </string>
+ <string>:) function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &) statements. Of course, boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6863,43 +6857,43 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:): [@catch( io_error & e ) { std::cerr << "I/O Error!\n"; if( std::string const * fn=(:link </string>
+ <string>:) should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should also be derived virtually.) !!!Why is boost::exception abstract? To prevent exception-neutral contexts from erroneously erasing the type of the original exception when adding (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<file_name>(e) ) std::cerr << "File name: " << *fn << "\n"; if( int const * c=(:link </string>
+ <string>:) to an active exception object: [@catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<errno_code>(e) ) std::cerr << "OS says: " << strerror(*c) << "\n"; }@] In addition, boost::(:link </string>
+ <string>:) & e ) { e (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) can be used to compose an automatic (if not user-friendly) message that contains all of the (:link </string>
+ <string>|<<:) foo_info(foo); throw e; //Compile error: boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) objects added to a boost::(:link </string>
+ <string>:) is abstract }@] The correct code is: [@catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6908,27 +6902,25 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). This is useful for inclusion in logs and other diagnostic objects. </string>
- </pair>
- <pair>
+ <string>:) & e ) { e (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) This type is designed to be used as a standard (:link </string>
+ <string>|<<:) foo_info(foo); throw; //Okay, re-throwing the original exception object. }@] !!!What is the space overhead of the boost::exception base class? The space overhead for the boost::exception data members is negligible in the context of exception handling. Throwing objects that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) instance for transporting a relevant errno value in exceptions deriving from boost::(:link </string>
+ <string>:) does not by itself cause dynamic memory allocations. Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6937,27 +6929,25 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). !!!Example: (:include </string>
+ <string>:) enables any data to be added to exceptions, which usually does allocate memory. However, this memory is reclaimed when the exception has been handled, and since typically user code does not allocate memory during the unrolling of the stack, adding error info to exceptions should not cause memory fragmentation. !!!What is the speed overhead of the boost::exception base class? Throwing objects that derive from boost::exception does not have any speed overhead by itself. Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-60</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) </string>
- </pair>
- <pair>
+ <string>:) enables any data to be added to exceptions, which internally uses constructs that can be considered quite heavy (such as std::map and std::string.) This is still negligible compared to the typical overhead of throwing and handling of exceptions. !!!Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw? The benefit of calling boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: E must be boost::(:link </string>
+ <string>:) instead of using throw directly is that it ensures that the emitted exception derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6966,285 +6956,279 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), or a type that derives (indirectly) from boost::(:link </string>
+ <string>:) and that it is compatible with boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-53</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). !!!!Postcondition: A copy of v is stored into x. If x already contains data of type (:link </string>
+ <string>:). The (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-66</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<Tag,T>, that data is overwritten. Basic exception safety guarantee. !!!!Returns: x. (:include throws:) </string>
- </pair>
- <pair>
+ <string>:) macro also results in a call to boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>27</size>
<variant>2</variant>
- <string>(:auto !!:) Some exception hierarchies can not be modified to make boost::(:link </string>
+ <string>:), but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This has virtually no overhead, yet enables boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) a base type. In this case, the (:link </string>
+ <string>:) to compose a more useful, if not user-friendly message. Typical use of boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function template can be used to make exception objects derive from boost::(:link </string>
+ <string>:) is: [@catch( boost::exception & e ) { std::cerr << "OMG!" << boost::diagnostic_information(e); } catch( ... ) { std::cerr << "OMG!!!"; }@] This is a possible message it may display, the first line is only possible if (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-66</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) anyway. Here is an example: [@#include <(:link </string>
+ <string>:) is used: [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<class fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-77</id>
+ <id>-32</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)> #include <stdexcept> typedef boost::(:link </string>
+ <string>:)_ *] = fopen [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_min,size_t> std_range_min; typedef boost::(:link </string>
+ <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-72</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_max,size_t> std_range_max; typedef boost::(:link </string>
+ <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-22</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_index,size_t> std_range_index; template <class T> class my_container { public: size_t size() const; T const & operator[]( size_t i ) const { if( i > size() ) throw boost::(:link </string>
+ <string>:)_ *] = rb@] !!!Why is boost::exception integrated in boost::throw_exception? The boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)(std::range_error("Index out of range")) << std_range_min(0) << std_range_max(size()) << std_range_index(i); //.... } }; @] The call to (:link </string>
+ <string>:) function predates the Boost Exception library and there has been some concern about its current behavior of injecting boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<T> gets us an object of ''unspecified type'' which is guaranteed to derive from both boost::(:link </string>
+ <string>:) as a base of any exception passed to boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) and T. This makes it possible to use (:link </string>
+ <string>:). Such concerns are dictated by the typical strict interpretation of a common principle in C and C++, that users only pay for features they actually use. The problem is that users of Boost Exception can't by themselves cause a library to throw types that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> mod="/":) to store additional information in the exception object. The exception can be intercepted as T &, so existing exception handling will not break. It can also be intercepted as boost::(:link </string>
+ <string>:), and without this they can't use any of the Boost Exception facilities. For example, if a user wants to use Boost Serialization in a separate thread, it is desirable to be able to transport exceptions emitted by that library into the main thread where they can be analyzed to generate a user-friendly message. This can be easily achieved using boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-21</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) &, so that (:link </string>
+ <string>:), but this requires that Boost Serialization throws exceptions using boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-73</id>
+ <id>-59</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|more information can be added to the exception at a later time:). </string>
- </pair>
- <pair>
+ <string>:). If Boost Serialization calls boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
- </pair>
- <pair>
+ <string>:) to throw, this behavior happens automatically and transparently. The cost of this integration is: * In terms of space: a pointer and 3 ints are added to the static size of exception objects. * In terms of speed: the pointer is initialized to null at the point of the throw. * In terms of coupling: about 400 self-contained lines of C++ with no external includes. !!!Why use operator<< overload for adding info to exceptions? Before throwing an object of type that derives from boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: This function must not be called outside of a catch block. !!!!Returns: A pointer of type E to the current exception object, or null if the current exception object can not be converted to E *. !!!!Throws: Nothing. </string>
- </pair>
- <pair>
+ <string>:), it is often desirable to add one or more (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>81</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Why doesn't boost::exception derive from std::exception? Despite that (:link </string>
+ <string>:) objects in it. The syntactic sugar provided by (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-38</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|virtual inheritance should be used in deriving from base exception types:), many programmers fail to follow this principle when deriving from std::exception. If boost::(:link </string>
+ <string>:) allows this to be done directly in a throw expression: [@throw error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) derives from std::exception, using the (:link </string>
+ <string>|<<:) foo_info(foo) (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &) statements. Of course, boost::(:link </string>
+ <string>|<<:) bar_info(bar);@] which saves typing compared to this possible alternative: [@error e; e.add(foo_info(foo)); e.add(bar_info(bar)); throw e;@] and looks better than something like: [@throw error().add(foo_info(foo)).add(bar_info(bar));@] !!!Why is operator<< allowed to throw? This question is referring to the following issue. Consider this throw statement example: [@throw file_open_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should also be derived virtually.) !!!Why is boost::exception abstract? To prevent exception-neutral contexts from erroneously erasing the type of the original exception when adding (:link </string>
+ <string>|<<:) file_name(fn);@] The intention here is to throw a file_open_error, however if (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to an active exception object: [@catch( boost::(:link </string>
+ <string> mod="/":) fails to copy the std::string contained in the file_name (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
- <variant>1</variant>
+ <string>:) wrapper, a std::bad_alloc could propagate instead. This behavior seems undesirable to some programmers. Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, page 371: ->''"Throwing an exception requires an object to throw. A C++ implementation is required to have enough spare memory to be able to throw bad_alloc in case of memory exhaustion. However, it is possible that throwing some other exception will cause memory exhaustion."'' Therefore, the language itself does not guarantee that an attempt to throw an exception is guaranteed to throw an object of the specified type; propagating a std::bad_alloc seems to be a possibility even outside of the scope of Boost Exception. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
+ <size>17</size>
<variant>2</variant>
- <string>|<<:) foo_info(foo); throw e; //Compile error: boost::(:link </string>
+ <string>(:auto !!!:) The following example demonstrates how errno can be stored in exception objects using Boost Exception: [@#include <(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-77</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) is abstract }@] The correct code is: [@catch( boost::(:link </string>
+ <string>:)> #include <iostream> typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
+ <string>:)<struct tag_my_info,int> my_info; //(1) struct my_error: virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) foo_info(foo); throw; //Okay, re-throwing the original exception object. }@] !!!What is the space overhead of the boost::exception base class? The space overhead for the boost::exception data members is negligible in the context of exception handling. Throwing objects that derive from boost::(:link </string>
+ <string>:), virtual std::exception { }; //(2) void f() { throw my_error() << my_info(42); //(3) }@] First, we instantiate the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) does not by itself cause dynamic memory allocations. Deriving from boost::(:link </string>
+ <string>:) template using a unique identifier -- tag_my_info, and the type of the info it identifies -- int. This provides compile-time type safety for the various values stored in exception objects. Second, we define class my_error, which derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -7253,279 +7237,295 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) enables any data to be added to exceptions, which usually does allocate memory. However, this memory is reclaimed when the exception has been handled, and since typically user code does not allocate memory during the unrolling of the stack, adding error info to exceptions should not cause memory fragmentation. !!!What is the speed overhead of the boost::exception base class? Throwing objects that derive from boost::exception does not have any speed overhead by itself. Deriving from boost::(:link </string>
+ <string>:). Finally, (3) illustrates how the typedef from (1) can be used with (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) enables any data to be added to exceptions, which internally uses constructs that can be considered quite heavy (such as std::map and std::string.) This is still negligible compared to the typical overhead of throwing and handling of exceptions. !!!Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw? The benefit of calling boost::(:link </string>
+ <string>|operator<<:) to store values in exception objects at the point of the throw. The stored my_info value can be recovered at a later time like this: [@// ...continued void g() { try { f(); } catch( my_error & x ) { if( int const * mi=boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) instead of using throw directly is that it ensures that the emitted exception derives from boost::(:link </string>
+ <string>:)<my_info>(x) ) std::cerr << "My info: " << *mi; } }@] The (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) and that it is compatible with boost::(:link </string>
- <variant>1</variant>
+ <string>:) function template is instantiated with the typedef from (1), and is passed an exception object of a polymorphic type. If the exception object contains the requested value, err will point to it; otherwise a null pointer is returned. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-53</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:). The (:link </string>
+ <string>(:auto !!!:) (:include decl:) !!!!Effects: * Default constructor: initializes an empty boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-66</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) macro also results in a call to boost::(:link </string>
+ <string>:) object. * Copy constructor: initializes a boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This has virtually no overhead, yet enables boost::(:link </string>
+ <string>:) object which shares ownership with x of all data added through (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to compose a more useful, if not user-friendly message. Typical use of boost::(:link </string>
- <variant>1</variant>
+ <string> mod="/":), including data that is added at a future time. !!!!Throws: Nothing. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:) is: [@catch( boost::exception & e ) { std::cerr << "OMG!" << boost::diagnostic_information(e); } catch( ... ) { std::cerr << "OMG!!!"; }@] This is a possible message it may display, the first line is only possible if (:link </string>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: E must be boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-66</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) is used: [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<class fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
+ <string>:), or a type that derives (indirectly) from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-32</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = fopen [struct boost::(:link </string>
+ <string>:). !!!!Postcondition: A copy of v is stored into x. If x already contains data of type (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
- <variant>1</variant>
+ <string>:)<Tag,T>, that data is overwritten. Basic exception safety guarantee. !!!!Returns: x. (:include throws:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-72</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
+ <size>11</size>
<variant>2</variant>
- <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
+ <string>!!!!Example: this is a possible output from the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-22</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = rb@] !!!Why is boost::exception integrated in boost::throw_exception? The boost::(:link </string>
+ <string>:) function, as used in ''libs/exception/example/example_io.cpp:'' [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<struct fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-32</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function predates the Boost Exception library and there has been some concern about its current behavior of injecting boost::(:link </string>
+ <string>:)_ *] = fopen [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) as a base of any exception passed to boost::(:link </string>
+ <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-72</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). Such concerns are dictated by the typical strict interpretation of a common principle in C and C++, that users only pay for features they actually use. The problem is that users of Boost Exception can't by themselves cause a library to throw types that derive from boost::(:link </string>
+ <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-22</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), and without this they can't use any of the Boost Exception facilities. For example, if a user wants to use Boost Serialization in a separate thread, it is desirable to be able to transport exceptions emitted by that library into the main thread where they can be analyzed to generate a user-friendly message. This can be easily achieved using boost::(:link </string>
- <variant>1</variant>
+ <string>:)_ *] = rb@] </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-21</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:), but this requires that Boost Serialization throws exceptions using boost::(:link </string>
+ <string>(:auto !!!:) (:include synopsis:) This type is designed to be used as a standard (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-59</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). If Boost Serialization calls boost::(:link </string>
+ <string>:) instance for transporting a relevant errno value in exceptions deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to throw, this behavior happens automatically and transparently. The cost of this integration is: * In terms of space: a pointer and 3 ints are added to the static size of exception objects. * In terms of speed: the pointer is initialized to null at the point of the throw. * In terms of coupling: about 400 self-contained lines of C++ with no external includes. !!!Why use operator<< overload for adding info to exceptions? Before throwing an object of type that derives from boost::(:link </string>
+ <string>:). !!!Example: (:include </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-60</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), it is often desirable to add one or more (:link </string>
- <variant>1</variant>
+ <string>:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>:) objects in it. The syntactic sugar provided by (:link </string>
- <variant>1</variant>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: This function must not be called outside of a catch block. !!!!Returns: A pointer of type E to the current exception object, or null if the current exception object can not be converted to E *. !!!!Throws: Nothing. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>:) allows this to be done directly in a throw expression: [@throw error() (:link </string>
- <variant>1</variant>
+ <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>|<<:) foo_info(foo) (:link </string>
- <variant>1</variant>
+ <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
+ <size>3</size>
<variant>2</variant>
- <string>|<<:) bar_info(bar);@] which saves typing compared to this possible alternative: [@error e; e.add(foo_info(foo)); e.add(bar_info(bar)); throw e;@] and looks better than something like: [@throw error().add(foo_info(foo)).add(bar_info(bar));@] !!!Why is operator<< allowed to throw? This question is referring to the following issue. Consider this throw statement example: [@throw file_open_error() (:link </string>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Effects: Stores a copy of v in the </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) file_name(fn);@] The intention here is to throw a file_open_error, however if (:link </string>
- <variant>1</variant>
+ <string> object. (:include throws:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string> mod="/":) fails to copy the std::string contained in the file_name (:link </string>
+ <string>(:auto !!!:) Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) wrapper, a std::bad_alloc could propagate instead. This behavior seems undesirable to some programmers. Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, page 371: ->''"Throwing an exception requires an object to throw. A C++ implementation is required to have enough spare memory to be able to throw bad_alloc in case of memory exhaustion. However, it is possible that throwing some other exception will cause memory exhaustion."'' Therefore, the language itself does not guarantee that an attempt to throw an exception is guaranteed to throw an object of the specified type; propagating a std::bad_alloc seems to be a possibility even outside of the scope of Boost Exception. </string>
- </pair>
- <pair>
+ <string>:) effectively decouples the semantics of a failure from the information that is relevant to each individual instance of reporting a failure with a given semantic. In other words: with boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Effects: Stores a copy of v in the </string>
+ <string>:), what data a given exception object transports depends primarily on the context in which failures are reported (not on its type.) Since exception types need no members, it becomes very natural to throw exceptions that derive from more than one type to indicate multiple appropriate semantics: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> object. (:include throws:) </string>
+ <string>:) { }; struct io_error: virtual exception_base { }; struct file_error: virtual io_error { }; struct read_error: virtual io_error { }; struct file_read_error: virtual file_error, virtual read_error { };@] Using this approach, exception types become a simple tagging system for categorizing errors and selecting failures in exception handlers. </string>
</pair>
<pair>
<weak_ptr>
@@ -7536,7 +7536,7 @@
</weak_ptr>
<size>1</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ <string>(:auto !:) This is an alphabetical list of all Boost Exception documentation pages. (:pagelist fmt="index" except_tags="index noindex" mod="w":) </string>
</pair>
<pair>
<weak_ptr>
@@ -7608,7 +7608,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -7951,7 +7951,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -7998,7 +7998,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8016,7 +8016,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8034,7 +8034,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8052,7 +8052,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8070,7 +8070,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8097,7 +8097,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8160,7 +8160,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8300,7 +8300,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-5</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8318,7 +8318,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8336,7 +8336,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8399,7 +8399,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8507,7 +8507,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8570,7 +8570,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8579,7 +8579,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8626,7 +8626,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8752,7 +8752,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8790,7 +8790,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8799,7 +8799,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9060,7 +9060,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9069,7 +9069,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9237,7 +9237,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10002,7 +10002,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10047,7 +10047,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10783,7 +10783,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -11028,7 +11028,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11037,7 +11037,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11046,7 +11046,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11055,7 +11055,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11064,16 +11064,18 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>!!!!Throws: std::bad_alloc, or any exception emitted by the T copy constructor. </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11082,18 +11084,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>!!!!Throws: std::bad_alloc, or any exception emitted by the T copy constructor. </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11120,21 +11120,21 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>!!!!Throws: Any exception emitted by v's copy constructor.</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>!!!!Throws: Any exception emitted by v's copy constructor.</string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -11732,7 +11732,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11741,7 +11741,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11750,25 +11750,45 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-10</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>3</size>
+ <variant>2</variant>
+ <string>`#include <(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-57</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string>:)>\\ [@namespace boost { (:include decl pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11811,25 +11831,16 @@
</weak_ptr>
<size>3</size>
<variant>2</variant>
- <string>`#include <(:link </string>
+ <string>`#include <</string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-57</id>
+ <id>-55</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)>\\ [@namespace boost { (:include decl pre_indent="4":) }@] </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>0</size>
+ <string>> [@namespace boost { (:include decl pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
@@ -11838,38 +11849,38 @@
<id>-15</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
+ <size>5</size>
<variant>2</variant>
- <string>[@namespace boost { (:include api pre_indent="4":) }@] </string>
- </pair>
- <pair>
+ <string>[@#include <(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
<id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
<variant>2</variant>
- <string>`#include <</string>
+ <string>:)> namespace boost { (:include </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-55</id>
+ <id>-21</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>> [@namespace boost { (:include decl pre_indent="4":) }@] </string>
+ <string> decl pre_indent="4":) (:include api pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>[@namespace boost { (:include api pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
@@ -11895,30 +11906,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
- </shared_ptr>
- </weak_ptr>
- <size>5</size>
- <variant>2</variant>
- <string>[@#include <(:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-15</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>:)> namespace boost { (:include </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-21</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> decl pre_indent="4":) (:include api pre_indent="4":) }@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -12112,7 +12112,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12152,7 +12152,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12315,7 +12315,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12422,7 +12422,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12482,7 +12482,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12689,7 +12689,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12698,7 +12698,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12718,7 +12718,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12974,7 +12974,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -13011,9 +13011,6 @@
<id>-5</id>
</shared_ptr>
<shared_ptr>
- <id>-6</id>
- </shared_ptr>
- <shared_ptr>
<id>-7</id>
</shared_ptr>
<shared_ptr>
@@ -13026,13 +13023,16 @@
<id>-10</id>
</shared_ptr>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
<shared_ptr>
- <id>-14</id>
+ <id>-12</id>
</shared_ptr>
<shared_ptr>
- <id>-11</id>
+ <id>-13</id>
+ </shared_ptr>
+ <shared_ptr>
+ <id>-14</id>
</shared_ptr>
<shared_ptr>
<id>-15</id>
@@ -13041,10 +13041,10 @@
<id>-16</id>
</shared_ptr>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
<shared_ptr>
<id>-18</id>
@@ -13297,7 +13297,7 @@
</path>
</file>
<shared_ptr>
- <id>-8</id>
+ <id>-18</id>
</shared_ptr>
</pair>
<pair>
@@ -13342,7 +13342,7 @@
</path>
</file>
<shared_ptr>
- <id>-10</id>
+ <id>-5</id>
</shared_ptr>
</pair>
<pair>
@@ -13372,7 +13372,7 @@
</path>
</file>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</pair>
<pair>
@@ -13387,7 +13387,7 @@
</path>
</file>
<shared_ptr>
- <id>-12</id>
+ <id>-8</id>
</shared_ptr>
</pair>
<pair>
@@ -13484,7 +13484,7 @@
</path>
</file>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</pair>
<pair>
@@ -13628,29 +13628,189 @@
</path>
</file>
<shared_ptr>
- <id>-58</id>
+ <id>-58</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>1</size>
+ <strong>4D7009F0868C1DF4898EC6ECF9AD2CFEA98E8653B01B066106761807405D4C22</strong>
+ <weak>1416707852</weak>
+ <size>3107</size>
+ <position>527</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/get_error_info.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-51</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>1</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-74</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
+ <weak>1035445969</weak>
+ <size>595</size>
+ <position>204</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-10</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>28ACC7E8903AFA473B656DAD74C22C3F675AFCCA871D81AB3AB7742FDF5F1E48</strong>
+ <weak>2824899226</weak>
+ <size>2163</size>
+ <position>145</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-25</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
+ <weak>765399792</weak>
+ <size>77</size>
+ <position>6878</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-67</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
+ <weak>1137981799</weak>
+ <size>192</size>
+ <position>11766</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-59</id>
</shared_ptr>
</pair>
<pair>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>4D7009F0868C1DF4898EC6ECF9AD2CFEA98E8653B01B066106761807405D4C22</strong>
- <weak>1416707852</weak>
- <size>3107</size>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
+ <strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
+ <weak>3292878997</weak>
+ <size>282</size>
+ <position>9272</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/get_error_info.hpp</string>
+ <string>../../../../boost/exception/exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-51</id>
+ <id>-54</id>
</shared_ptr>
</pair>
<pair>
@@ -13764,7 +13924,7 @@
</path>
</file>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</pair>
<pair>
@@ -13786,7 +13946,7 @@
</path>
</file>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</pair>
<pair>
@@ -13840,6 +14000,28 @@
<pair>
<hook>
<stream_hook_path>
+ <size>1</size>
+ <strong>195FF369BA559E3C0080F75321794B4808B6A278D4DEF8AEDBD9FCEBCE69C548</strong>
+ <weak>458631219</weak>
+ <size>2145</size>
+ <position>321</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/info_tuple.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-30</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
<size>2</size>
<strong>64A91889D0B296F554DB50496EF8036489999CD3C9A8BC181CCE1C1FD37EBB4B</strong>
<weak>265554338</weak>
@@ -14146,7 +14328,7 @@
</path>
</file>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</pair>
<pair>
@@ -14460,7 +14642,7 @@
</path>
</file>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</pair>
<pair>
@@ -14618,45 +14800,49 @@
<pair>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>AA363B3E599C558409A17235E029C4F635E4FDE629F763F661BDA7FA5B2D99C2</strong>
- <weak>1494903480</weak>
- <size>325</size>
- <position>1300</position>
+ <size>2</size>
+ <strong>1B4417301AE3C0338C22E6D497391F51ABD459E521E7DFCE59A6EEC1372D33C2</strong>
+ <weak>202224383</weak>
+ <size>1766</size>
+ <position>600</position>
+ <strong>E0A17503B42EE12F31548A7D20F89916D734CE88B30A1BF6F9FC2D1F83A8B6F4</strong>
+ <weak>3410340567</weak>
+ <size>1734</size>
+ <position>26</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/throw_exception.hpp</string>
+ <string>../../../../boost/exception/info_tuple.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-66</id>
+ <id>-42</id>
</shared_ptr>
</pair>
<pair>
<hook>
<stream_hook_path>
<size>1</size>
- <strong>9A6D5598D65F1C1B5F913007D1CD1A814F3CDAD07D4AF8C468A0716059B2F7CC</strong>
- <weak>3552995087</weak>
- <size>1405</size>
- <position>527</position>
+ <strong>AA363B3E599C558409A17235E029C4F635E4FDE629F763F661BDA7FA5B2D99C2</strong>
+ <weak>1494903480</weak>
+ <size>325</size>
+ <position>1300</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/info_tuple.hpp</string>
+ <string>../../../../boost/throw_exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-30</id>
+ <id>-66</id>
</shared_ptr>
</pair>
<pair>
@@ -14689,166 +14875,6 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-74</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
- <weak>1035445969</weak>
- <size>595</size>
- <position>204</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>28ACC7E8903AFA473B656DAD74C22C3F675AFCCA871D81AB3AB7742FDF5F1E48</strong>
- <weak>2824899226</weak>
- <size>2163</size>
- <position>145</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-25</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
- <weak>765399792</weak>
- <size>77</size>
- <position>6878</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-67</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
- <weak>1137981799</weak>
- <size>192</size>
- <position>11758</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-59</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
- <weak>3292878997</weak>
- <size>282</size>
- <position>9272</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-54</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>1</size>
<strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
<weak>1917376632</weak>
<size>706</size>
@@ -14864,7 +14890,7 @@
</path>
</file>
<shared_ptr>
- <id>-11</id>
+ <id>-7</id>
</shared_ptr>
</pair>
<pair>
@@ -14874,7 +14900,7 @@
<strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
<weak>1615599655</weak>
<size>68</size>
- <position>227</position>
+ <position>321</position>
<strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
<weak>805836816</weak>
<size>66</size>
@@ -14890,33 +14916,7 @@
</path>
</file>
<shared_ptr>
- <id>-15</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>F7633FDCF6615C0199645701EE6E7ACE5CBCD7A7CF6838573791E91ABB3C09F2</strong>
- <weak>1668435395</weak>
- <size>1332</size>
- <position>600</position>
- <strong>A1F443AF571973A12005D2F7D4AE09A32AAF686FEEAE272EC21512A65EB943E8</strong>
- <weak>3879093659</weak>
- <size>1300</size>
- <position>26</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/info_tuple.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-42</id>
+ <id>-16</id>
</shared_ptr>
</pair>
<pair>
@@ -14992,16 +14992,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
- <string>function</string>
+ <string>tutorial</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<string>noalso noindex tutorial</string>
@@ -15010,43 +15010,43 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <string></string>
+ <string>function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <string>error_info_instance noalso type</string>
+ <string>error_info free function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
- <string>error_info free function</string>
+ <string>error_info_instance noalso type</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
- <string>tutorial</string>
+ <string>function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<string></string>
@@ -15055,19 +15055,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
- <string>function</string>
+ <string>function member</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <string>function member</string>
+ <string></string>
</pair>
<pair>
<weak_ptr>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk