reference.xml 127 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860
  1. <?xml version="1.0" standalone="yes"?>
  2. <library-reference><header name="boost/type_erasure/any.hpp">
  3. <namespace name="boost">
  4. <namespace name="type_erasure">
  5. <class name="any"><template>
  6. <template-type-parameter name="Concept"><purpose><para>The <link linkend="boost_typeerasure.conceptdef">Concept</link> that the stored type should model. </para></purpose></template-type-parameter>
  7. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default><purpose><para>A <classname alt="boost::type_erasure::placeholder">placeholder</classname> specifying which type this is.</para></purpose></template-type-parameter>
  8. </template><description><para>The class template <classname alt="boost::type_erasure::any">any</classname> can store any object that models a specific <link linkend="boost_typeerasure.conceptdef">Concept</link>. It dispatches all the functions defined by the <link linkend="boost_typeerasure.conceptdef">Concept</link> to the contained type at runtime.</para><para>
  9. <para><emphasis role="bold">See Also:</emphasis><para><classname alt="boost::type_erasure::concept_of">concept_of</classname>, <classname alt="boost::type_erasure::placeholder_of">placeholder_of</classname>, <functionname alt="boost::type_erasure::any_cast">any_cast</functionname>, <functionname alt="boost::type_erasure::is_empty">is_empty</functionname>, <functionname alt="boost::type_erasure::binding_of">binding_of</functionname>, <functionname alt="boost::type_erasure::typeid_of">typeid_of</functionname> </para>
  10. </para>
  11. </para></description><method-group name="public member functions">
  12. </method-group>
  13. <constructor><description><para>Constructs an empty <classname alt="boost::type_erasure::any">any</classname>.</para><para>Except as otherwise noted, all operations on an empty <classname alt="boost::type_erasure::any">any</classname> result in a <classname alt="boost::type_erasure::bad_function_call">bad_function_call</classname> exception. The copy-constructor of an empty <classname alt="boost::type_erasure::any">any</classname> creates another null <classname alt="boost::type_erasure::any">any</classname>. The destructor of an empty <classname alt="boost::type_erasure::any">any</classname> is a no-op. Comparison operators treat all empty <classname alt="boost::type_erasure::any">anys</classname> as equal. <functionname alt="boost::type_erasure::typeid_of">typeid_of</functionname> applied to an empty <classname alt="boost::type_erasure::any">any</classname> returns <computeroutput>typeid(void)</computeroutput>.</para><para>An <classname alt="boost::type_erasure::any">any</classname> which does not include <classname alt="boost::type_erasure::relaxed">relaxed</classname> in its <link linkend="boost_typeerasure.conceptdef">Concept</link> can never be null.</para><para>
  14. <para><emphasis role="bold">See Also:</emphasis><para> <functionname alt="boost::type_erasure::is_empty">is_empty</functionname> </para>
  15. </para>
  16. </para></description><requires><para><classname alt="boost::type_erasure::relaxed">relaxed</classname> must be in <computeroutput>Concept</computeroutput>.</para>
  17. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  18. <constructor><template>
  19. <template-type-parameter name="U"/>
  20. </template><parameter name="data"><paramtype>U &amp;&amp;</paramtype><description><para>The object to store in the <classname alt="boost::type_erasure::any">any</classname>.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> to hold a copy of <computeroutput>data</computeroutput>. The <computeroutput>Concept</computeroutput> will be instantiated with the placeholder <computeroutput>T</computeroutput> bound to U.</para><para>
  21. <note><para>This constructor never matches if the argument is an <classname alt="boost::type_erasure::any">any</classname>, <classname alt="boost::type_erasure::binding">binding</classname>, or <classname alt="boost::type_erasure::static_binding">static_binding</classname>. </para>
  22. </note>
  23. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  24. </requires><requires><para><computeroutput>U</computeroutput> must be <ulink url="../../doc/html/CopyConstructible.html">CopyConstructible</ulink>. </para>
  25. </requires><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>.</para>
  26. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of <computeroutput>U</computeroutput> throws.</simpara></throws></constructor>
  27. <constructor><template>
  28. <template-type-parameter name="U"/>
  29. <template-type-parameter name="Map"/>
  30. </template><parameter name="data"><paramtype>U &amp;&amp;</paramtype><description><para>The object to store in the <classname alt="boost::type_erasure::any">any</classname>. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the types that all the placeholders should bind to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> to hold a copy of <computeroutput>data</computeroutput> with explicitly specified placeholder bindings.</para><para>
  31. <note><para>This constructor never matches if the argument is an <classname alt="boost::type_erasure::any">any</classname>. </para>
  32. </note>
  33. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  34. </requires><requires><para><computeroutput>U</computeroutput> must be <ulink url="../../doc/html/CopyConstructible.html">CopyConstructible</ulink>. </para>
  35. </requires><requires><para><computeroutput>Map</computeroutput> is an MPL map with an entry for every non-deduced placeholder referred to by <computeroutput>Concept</computeroutput>. </para>
  36. </requires><requires><para><computeroutput><computeroutput>T</computeroutput> must</computeroutput> map to <computeroutput>U</computeroutput> in <computeroutput>Map</computeroutput>.</para>
  37. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of <computeroutput>U</computeroutput> throws.</simpara></throws></constructor>
  38. <constructor><parameter name="other"><paramtype>const <classname>any</classname> &amp;</paramtype><description><para>The object to make a copy of.</para></description></parameter><description><para>Copies an <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  39. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain <classname alt="boost::type_erasure::constructible">constructible&lt;T(const T&amp;)&gt;</classname>. (This is included in <classname alt="boost::type_erasure::copy_constructible">copy_constructible&lt;T&gt;</classname>)</para>
  40. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of the contained type throws. </simpara></throws></constructor>
  41. <constructor><template>
  42. <template-type-parameter name="Concept2"/>
  43. <template-type-parameter name="Tag2"/>
  44. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to make a copy of.</para></description></parameter><description><para>Upcasts from an <classname alt="boost::type_erasure::any">any</classname> with stricter requirements to an <classname alt="boost::type_erasure::any">any</classname> with weaker requirements.</para><para>
  45. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain <classname alt="boost::type_erasure::constructible">constructible&lt;T(const T&amp;)&gt;</classname>. </para>
  46. </requires><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  47. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  48. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of the contained type throws. </simpara></throws></constructor>
  49. <constructor><template>
  50. <template-type-parameter name="Concept2"/>
  51. <template-type-parameter name="Tag2"/>
  52. <template-type-parameter name="Map"/>
  53. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to make a copy of. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the placeholders used by the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  54. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain <classname alt="boost::type_erasure::constructible">constructible&lt;T(const T&amp;)&gt;</classname>. </para>
  55. </requires><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  56. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  57. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of the contained type throws. </simpara></throws></constructor>
  58. <constructor><template>
  59. <template-type-parameter name="Concept2"/>
  60. <template-type-parameter name="Tag2"/>
  61. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to make a copy of. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  62. <warning><para>This constructor is potentially dangerous, as it cannot check at compile time whether the arguments match. </para>
  63. </warning>
  64. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain <classname alt="boost::type_erasure::constructible">constructible&lt;T(const T&amp;)&gt;</classname>. </para>
  65. </requires><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  66. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  67. </postconditions><throws><simpara><classname>std::bad_alloc</classname> or whatever that the copy constructor of the contained type throws.</simpara></throws></constructor>
  68. <constructor specifiers="explicit"><template>
  69. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  70. </template><parameter name="arg"><paramtype>U &amp;&amp;...</paramtype><description><para>The arguments to be passed to the underlying constructor.</para></description></parameter><description><para>Calls a constructor of the contained type. The bindings will be deduced from the arguments.</para><para>
  71. <note><para>This constructor is never chosen if any other constructor can be called instead. </para>
  72. </note>
  73. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain an instance of <classname alt="boost::type_erasure::constructible">constructible</classname> which can be called with these arguments. </para>
  74. </requires><requires><para>At least one of the arguments must by an <classname alt="boost::type_erasure::any">any</classname> with the same <computeroutput>Concept</computeroutput> as this. </para>
  75. </requires><requires><para>The bindings of all the arguments that are <classname alt="boost::type_erasure::any">any</classname>'s, must be the same.</para>
  76. </requires><throws><simpara><classname>std::bad_alloc</classname> or whatever that the constructor of the contained type throws.</simpara></throws></constructor>
  77. <constructor specifiers="explicit"><template>
  78. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  79. </template><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types. </para></description></parameter><parameter name="arg"><paramtype>U &amp;&amp;...</paramtype><description><para>The arguments to be passed to the underlying constructor.</para></description></parameter><description><para>Calls a constructor of the contained type.</para><para>
  80. </para></description><requires><para><computeroutput>Concept</computeroutput> must contain a matching instance of <classname alt="boost::type_erasure::constructible">constructible</classname>. </para>
  81. </requires><requires><para>The contained type of every argument that is an <classname alt="boost::type_erasure::any">any</classname>, must be the same as that specified by <computeroutput>binding</computeroutput>.</para>
  82. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  83. </postconditions><throws><simpara><classname>std::bad_alloc</classname> or whatever that the constructor of the contained type throws. </simpara></throws></constructor>
  84. <copy-assignment><type><classname>any</classname> &amp;</type><template>
  85. <template-type-parameter name="U"/>
  86. </template><parameter name="other"><paramtype>U &amp;&amp;</paramtype></parameter><description><para>Assigns to an <classname alt="boost::type_erasure::any">any</classname>.</para><para>If an appropriate overload of <classname alt="boost::type_erasure::assignable">assignable</classname> is not available and <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>, falls back on constructing from <computeroutput>other</computeroutput>.</para><para><note><para>If <computeroutput>U</computeroutput> is an <classname alt="boost::type_erasure::any">any</classname>, then this can decide dynamically whether to use construction based on the type stored in other.</para>
  87. </note>
  88. </para></description><throws><simpara><classname>Whatever</classname> the assignment operator of the contained type throws. When falling back on construction, throws <computeroutput>std::bad_alloc</computeroutput> or whatever the move (or copy) constructor of the contained type throws. In this case move assignment provides the strong exception guarantee. When calling a (move) assignment operator of the contained type, the exception guarantee is whatever the contained type provides. </simpara></throws></copy-assignment>
  89. <destructor><description><para>
  90. </para></description><requires><para><computeroutput>Concept</computeroutput> includes <classname alt="boost::type_erasure::destructible">destructible&lt;T&gt;</classname>. </para>
  91. </requires></destructor>
  92. </class><class-specialization name="any"><template>
  93. <template-type-parameter name="Concept"/>
  94. <template-type-parameter name="T"/>
  95. </template><specialization><template-arg>Concept</template-arg><template-arg>const T &amp;</template-arg></specialization><method-group name="public member functions">
  96. </method-group>
  97. <constructor><template>
  98. <template-type-parameter name="U"/>
  99. </template><parameter name="arg"><paramtype>const U &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  100. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  101. </requires><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>.</para>
  102. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  103. <constructor><template>
  104. <template-type-parameter name="U"/>
  105. <template-type-parameter name="Map"/>
  106. </template><parameter name="arg"><paramtype>const U &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the actual types that all the placeholders should bind to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  107. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  108. </requires><requires><para><computeroutput>Map</computeroutput> is an MPL map with an entry for every non-deduced placeholder referred to by <computeroutput>Concept</computeroutput>.</para>
  109. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  110. <constructor><parameter name="other"><paramtype>const <classname>any</classname> &amp;</paramtype><description><para>The reference to copy.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  111. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  112. <constructor><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept, T &amp; &gt; &amp;</paramtype><description><para>The reference to copy.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  113. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  114. <constructor><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept, T &gt; &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  115. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  116. <constructor><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept, T &amp;&amp; &gt; &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  117. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  118. <constructor><template>
  119. <template-type-parameter name="Concept2"/>
  120. <template-type-parameter name="Tag2"/>
  121. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  122. </para></description><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  123. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  124. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  125. <constructor><template>
  126. <template-type-parameter name="Concept2"/>
  127. <template-type-parameter name="Tag2"/>
  128. <template-type-parameter name="Map"/>
  129. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  130. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  131. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  132. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  133. <constructor><template>
  134. <template-type-parameter name="Concept2"/>
  135. <template-type-parameter name="Tag2"/>
  136. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  137. </para></description><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  138. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  139. </postconditions><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  140. <copy-assignment><type><classname>any</classname> &amp;</type><parameter name="other"><paramtype>const <classname>any</classname> &amp;</paramtype></parameter><description><para>Assigns to an <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  141. </para></description><requires><para><classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>.</para>
  142. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></copy-assignment>
  143. <copy-assignment><type><classname>any</classname> &amp;</type><template>
  144. <template-type-parameter name="U"/>
  145. </template><parameter name="other"><paramtype>const U &amp;</paramtype></parameter><description><para>Assigns to an <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  146. </para></description><requires><para><classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>.</para>
  147. </requires><throws><simpara><classname>std::bad_alloc.</classname> Provides the strong exception guarantee. </simpara></throws></copy-assignment>
  148. </class-specialization><class-specialization name="any"><template>
  149. <template-type-parameter name="Concept"/>
  150. <template-type-parameter name="T"/>
  151. </template><specialization><template-arg>Concept</template-arg><template-arg>T &amp;</template-arg></specialization><method-group name="public member functions">
  152. </method-group>
  153. <constructor><template>
  154. <template-type-parameter name="U"/>
  155. </template><parameter name="arg"><paramtype>U &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  156. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  157. </requires><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>.</para>
  158. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  159. <constructor><template>
  160. <template-type-parameter name="U"/>
  161. <template-type-parameter name="Map"/>
  162. </template><parameter name="arg"><paramtype>U &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the actual types that all the placeholders should bind to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  163. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  164. </requires><requires><para><computeroutput>Map</computeroutput> is an MPL map with an entry for every non-deduced placeholder referred to by <computeroutput>Concept</computeroutput>.</para>
  165. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  166. <constructor><parameter name="other"><paramtype>const <classname>any</classname> &amp;</paramtype><description><para>The reference to copy.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another reference.</para><para>
  167. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  168. <constructor><parameter name="other"><paramtype><classname>any</classname>&lt; Concept, T &gt; &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  169. </para></description><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  170. <constructor><template>
  171. <template-type-parameter name="Concept2"/>
  172. <template-type-parameter name="Tag2"/>
  173. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &amp; &gt; &amp;</paramtype><description><para>The reference to copy.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another reference.</para><para>
  174. </para></description><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  175. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  176. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  177. <constructor><template>
  178. <template-type-parameter name="Concept2"/>
  179. <template-type-parameter name="Tag2"/>
  180. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  181. </para></description><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  182. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  183. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  184. <constructor><template>
  185. <template-type-parameter name="Concept2"/>
  186. <template-type-parameter name="Tag2"/>
  187. <template-type-parameter name="Map"/>
  188. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &amp; &gt; &amp;</paramtype><description><para>The reference to copy. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another reference.</para><para>
  189. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  190. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  191. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  192. <constructor><template>
  193. <template-type-parameter name="Concept2"/>
  194. <template-type-parameter name="Tag2"/>
  195. <template-type-parameter name="Map"/>
  196. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  197. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  198. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  199. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  200. <constructor><template>
  201. <template-type-parameter name="Concept2"/>
  202. <template-type-parameter name="Tag2"/>
  203. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &amp; &gt; &amp;</paramtype><description><para>The reference to copy. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another reference.</para><para>
  204. </para></description><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  205. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  206. </postconditions><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  207. <constructor><template>
  208. <template-type-parameter name="Concept2"/>
  209. <template-type-parameter name="Tag2"/>
  210. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  211. </para></description><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  212. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  213. </postconditions><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  214. <copy-assignment><type><classname>any</classname> &amp;</type><template>
  215. <template-type-parameter name="U"/>
  216. </template><parameter name="other"><paramtype>U &amp;&amp;</paramtype></parameter><description><para>Assigns to an <classname alt="boost::type_erasure::any">any</classname>.</para><para>If an appropriate overload of <classname alt="boost::type_erasure::assignable">assignable</classname> is not available and <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>, falls back on constructing from <computeroutput>other</computeroutput>.</para><para>
  217. </para></description><throws><simpara><classname>Whatever</classname> the assignment operator of the contained type throws. When falling back on construction, can only throw <computeroutput>std::bad_alloc</computeroutput> if <computeroutput>U</computeroutput> is an <classname alt="boost::type_erasure::any">any</classname> that uses a different <computeroutput>Concept</computeroutput>. In this case assignment provides the strong exception guarantee. When calling the assignment operator of the contained type, the exception guarantee is whatever the contained type provides. </simpara></throws></copy-assignment>
  218. </class-specialization><class-specialization name="any"><template>
  219. <template-type-parameter name="Concept"/>
  220. <template-type-parameter name="T"/>
  221. </template><specialization><template-arg>Concept</template-arg><template-arg>T &amp;&amp;</template-arg></specialization><method-group name="public member functions">
  222. </method-group>
  223. <constructor><template>
  224. <template-type-parameter name="U"/>
  225. </template><parameter name="arg"><paramtype>U &amp;&amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  226. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  227. </requires><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>.</para>
  228. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  229. <constructor><template>
  230. <template-type-parameter name="U"/>
  231. <template-type-parameter name="Map"/>
  232. </template><parameter name="arg"><paramtype>U &amp;&amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the actual types that all the placeholders should bind to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from a reference.</para><para>
  233. </para></description><requires><para><computeroutput>U</computeroutput> is a model of <computeroutput>Concept</computeroutput>. </para>
  234. </requires><requires><para><computeroutput>Map</computeroutput> is an MPL map with an entry for every non-deduced placeholder referred to by <computeroutput>Concept</computeroutput>.</para>
  235. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  236. <constructor><parameter name="other"><paramtype><classname>any</classname>&lt; Concept, T &gt; &amp;&amp;</paramtype><description><para>The reference to copy.</para></description><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another rvalue reference.</para><para>
  237. </para></description><throws><simpara><classname>Nothing.Constructs</classname> an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</simpara><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  238. <constructor><template>
  239. <template-type-parameter name="Concept2"/>
  240. <template-type-parameter name="Tag2"/>
  241. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &amp;&amp; &gt; &amp;&amp;</paramtype><description><para>The reference to copy.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another rvalue reference.</para><para>
  242. </para></description><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  243. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  244. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  245. <constructor><template>
  246. <template-type-parameter name="Concept2"/>
  247. <template-type-parameter name="Tag2"/>
  248. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;&amp;</paramtype><description><para>The object to bind the reference to.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  249. </para></description><requires><para><computeroutput>Concept</computeroutput> must not refer to any non-deduced placeholder besides <computeroutput>T</computeroutput>. </para>
  250. </requires><requires><para>After substituting <computeroutput>T</computeroutput> for <computeroutput>Tag2</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  251. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  252. <constructor><template>
  253. <template-type-parameter name="Concept2"/>
  254. <template-type-parameter name="Tag2"/>
  255. <template-type-parameter name="Map"/>
  256. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &amp;&amp; &gt; &amp;</paramtype><description><para>The reference to copy. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another reference.</para><para>
  257. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  258. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  259. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  260. <constructor><template>
  261. <template-type-parameter name="Concept2"/>
  262. <template-type-parameter name="Tag2"/>
  263. <template-type-parameter name="Map"/>
  264. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;&amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype><description><para>Specifies the mapping between the two concepts.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  265. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with keys for all the non-deduced placeholders used by <computeroutput>Concept</computeroutput> and values for the corresponding placeholders in <computeroutput>Concept2</computeroutput>. </para>
  266. </requires><requires><para>After substituting placeholders according to <computeroutput>Map</computeroutput>, the requirements of <computeroutput>Concept2</computeroutput> must be a superset of the requirements of <computeroutput>Concept</computeroutput>.</para>
  267. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  268. <constructor><template>
  269. <template-type-parameter name="Concept2"/>
  270. <template-type-parameter name="Tag2"/>
  271. </template><parameter name="other"><paramtype>const <classname>any</classname>&lt; Concept2, Tag2 &amp;&amp; &gt; &amp;</paramtype><description><para>The reference to copy. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another rvalue reference.</para><para>
  272. </para></description><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  273. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  274. </postconditions><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  275. <constructor><template>
  276. <template-type-parameter name="Concept2"/>
  277. <template-type-parameter name="Tag2"/>
  278. </template><parameter name="other"><paramtype><classname>any</classname>&lt; Concept2, Tag2 &gt; &amp;&amp;</paramtype><description><para>The object to bind the reference to. </para></description></parameter><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype><description><para>Specifies the bindings of placeholders to actual types.</para></description></parameter><description><para>Constructs an <classname alt="boost::type_erasure::any">any</classname> from another <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  279. </para></description><requires><para>The type stored in <computeroutput>other</computeroutput> must match the type expected by <computeroutput>binding</computeroutput>.</para>
  280. </requires><postconditions><para>binding_of(*this) == <computeroutput>binding</computeroutput> </para>
  281. </postconditions><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  282. <copy-assignment><type><classname>any</classname> &amp;</type><template>
  283. <template-type-parameter name="U"/>
  284. </template><parameter name="other"><paramtype>U &amp;&amp;</paramtype></parameter><description><para>Assigns to an <classname alt="boost::type_erasure::any">any</classname>.</para><para>If an appropriate overload of <classname alt="boost::type_erasure::assignable">assignable</classname> is not available and <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>, falls back on constructing from <computeroutput>other</computeroutput>.</para><para>
  285. </para></description><throws><simpara><classname>Whatever</classname> the assignment operator of the contained type throws. When falling back on construction, can only throw <computeroutput>std::bad_alloc</computeroutput> if <computeroutput>U</computeroutput> is an <classname alt="boost::type_erasure::any">any</classname> that uses a different <computeroutput>Concept</computeroutput>. In this case assignment provides the strong exception guarantee. When calling the assignment operator of the contained type, the exception guarantee is whatever the contained type provides. </simpara></throws></copy-assignment>
  286. </class-specialization><typedef name="any_ref"><type><classname>any</classname>&lt; Concept, T &amp; &gt;</type></typedef>
  287. <typedef name="any_cref"><type><classname>any</classname>&lt; Concept, const T &amp; &gt;</type></typedef>
  288. <typedef name="any_rvref"><type><classname>any</classname>&lt; Concept, T &amp;&amp; &gt;</type></typedef>
  289. </namespace>
  290. </namespace>
  291. </header>
  292. <header name="boost/type_erasure/any_cast.hpp">
  293. <namespace name="boost">
  294. <namespace name="type_erasure">
  295. <overloaded-function name="any_cast"><signature><type>T</type><template>
  296. <template-type-parameter name="T"/>
  297. <template-type-parameter name="Concept"/>
  298. <template-type-parameter name="Tag"/>
  299. </template><parameter name="arg"><paramtype><classname>any</classname>&lt; Concept, Tag &gt; &amp;</paramtype></parameter></signature><signature><type>T</type><template>
  300. <template-type-parameter name="T"/>
  301. <template-type-parameter name="Concept"/>
  302. <template-type-parameter name="Tag"/>
  303. </template><parameter name="arg"><paramtype>const <classname>any</classname>&lt; Concept, Tag &gt; &amp;</paramtype></parameter></signature><signature><type>T</type><template>
  304. <template-type-parameter name="T"/>
  305. <template-type-parameter name="Concept"/>
  306. <template-type-parameter name="Tag"/>
  307. </template><parameter name="arg"><paramtype><classname>any</classname>&lt; Concept, Tag &gt; *</paramtype></parameter></signature><signature><type>T</type><template>
  308. <template-type-parameter name="T"/>
  309. <template-type-parameter name="Concept"/>
  310. <template-type-parameter name="Tag"/>
  311. </template><parameter name="arg"><paramtype>const <classname>any</classname>&lt; Concept, Tag &gt; *</paramtype></parameter></signature><description><para>Attempts to extract the object that <computeroutput>arg</computeroutput> holds. If casting to a pointer fails, <functionname alt="boost::type_erasure::any_cast">any_cast</functionname> returns a null pointer. Casting to <computeroutput>void*</computeroutput> always succeeds and returns the address of stored object.</para><para><programlisting language="c++">any&lt;mpl::vector&lt;typeid_&lt;&gt;, copy_constructible&lt;&gt; &gt; &gt; x(1);
  312. any_cast&lt;int&gt;(x); // returns 1
  313. any_cast&lt;int&amp;&gt;(x); // returns a reference to the contents of x
  314. any_cast&lt;double&gt;(x); // throws bad_any_cast
  315. any_cast&lt;int*&gt;(&amp;x); // returns a pointer to the contents of x
  316. any_cast&lt;void*&gt;(&amp;x); // returns a pointer to the contents of x
  317. any_cast&lt;double*&gt;(&amp;x); // returns NULL
  318. </programlisting></para><para>
  319. </para></description><requires><para>if <computeroutput>arg</computeroutput> is a pointer, <computeroutput>T</computeroutput> must be a pointer type. </para>
  320. </requires><requires><para><computeroutput>Concept</computeroutput> must contain <classname alt="boost::type_erasure::typeid_">typeid_&lt;Tag&gt;</classname>.</para>
  321. </requires><throws><simpara><classname>bad_any_cast</classname> if <computeroutput>arg</computeroutput> doesn't contain an object of type <computeroutput>T</computeroutput> and we're casting to a value or reference. </simpara></throws></overloaded-function>
  322. </namespace>
  323. </namespace>
  324. </header>
  325. <header name="boost/type_erasure/binding.hpp">
  326. <namespace name="boost">
  327. <namespace name="type_erasure">
  328. <class name="binding"><template>
  329. <template-type-parameter name="Concept"/>
  330. </template><description><para>Stores the binding of a <computeroutput>Concept</computeroutput> to a set of actual types. <computeroutput>Concept</computeroutput> is interpreted in the same way as with <classname alt="boost::type_erasure::any">any</classname>. </para></description><method-group name="friend functions">
  331. <method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>binding</classname> &amp;</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>binding</classname> &amp;</paramtype></parameter><description><para>
  332. </para></description><returns><para>true iff the sets of types that the placeholders bind to are the same for both arguments.</para>
  333. </returns><throws><simpara><classname>Nothing.</classname> </simpara></throws></method>
  334. <method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>binding</classname> &amp;</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>binding</classname> &amp;</paramtype></parameter><description><para>
  335. </para></description><returns><para>true iff the arguments do not map to identical sets of types.</para>
  336. </returns><throws><simpara><classname>Nothing.</classname> </simpara></throws></method>
  337. </method-group>
  338. <method-group name="public member functions">
  339. </method-group>
  340. <constructor><description><para>
  341. </para></description><requires><para><classname alt="boost::type_erasure::relaxed">relaxed</classname> must be in <computeroutput>Concept</computeroutput>.</para>
  342. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  343. <constructor specifiers="explicit"><template>
  344. <template-type-parameter name="Map"/>
  345. </template><parameter name=""><paramtype>const Map &amp;</paramtype></parameter><description><para>
  346. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with an entry for each placeholder referred to by <computeroutput>Concept</computeroutput>.</para>
  347. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  348. <constructor><template>
  349. <template-type-parameter name="Map"/>
  350. </template><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter><description><para>
  351. </para></description><requires><para><computeroutput>Map</computeroutput> must be an MPL map with an entry for each placeholder referred to by <computeroutput>Concept</computeroutput>.</para>
  352. </requires><throws><simpara><classname>Nothing.</classname> </simpara></throws></constructor>
  353. <constructor><template>
  354. <template-type-parameter name="Concept2"/>
  355. <template-type-parameter name="Map"/>
  356. </template><parameter name="other"><paramtype>const <classname>binding</classname>&lt; Concept2 &gt; &amp;</paramtype></parameter><parameter name=""><paramtype>const Map &amp;</paramtype></parameter><description><para>Converts from another set of bindings.</para><para>
  357. </para></description><requires><para>Map must be an MPL map with an entry for each placeholder referred to by <computeroutput>Concept</computeroutput>. The mapped type should be the corresponding placeholder in Concept2.</para>
  358. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  359. <constructor><template>
  360. <template-type-parameter name="Concept2"/>
  361. <template-type-parameter name="Map"/>
  362. </template><parameter name="other"><paramtype>const <classname>binding</classname>&lt; Concept2 &gt; &amp;</paramtype></parameter><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter><description><para>Converts from another set of bindings.</para><para>
  363. </para></description><requires><para>Map must be an MPL map with an entry for each placeholder referred to by <computeroutput>Concept</computeroutput>. The mapped type should be the corresponding placeholder in Concept2.</para>
  364. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  365. <constructor><template>
  366. <template-type-parameter name="Placeholders"/>
  367. <template-type-parameter name="Map"/>
  368. </template><parameter name="other"><paramtype>const <classname>dynamic_binding</classname>&lt; Placeholders &gt; &amp;</paramtype></parameter><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter><description><para>Converts from another set of bindings.</para><para>
  369. </para></description><requires><para>Map must be an MPL map with an entry for each placeholder referred to by <computeroutput>Concept</computeroutput>. The mapped type should be the corresponding placeholder in Concept2.</para>
  370. </requires><throws><simpara><classname>std::bad_alloc</classname> </simpara></throws></constructor>
  371. </class>
  372. </namespace>
  373. </namespace>
  374. </header>
  375. <header name="boost/type_erasure/binding_of.hpp">
  376. <namespace name="boost">
  377. <namespace name="type_erasure">
  378. <function name="binding_of"><type>const <classname>binding</classname>&lt; Concept &gt; &amp;</type><template>
  379. <template-type-parameter name="Concept"/>
  380. <template-type-parameter name="T"/>
  381. </template><parameter name="arg"><paramtype>const <classname>any</classname>&lt; Concept, T &gt; &amp;</paramtype></parameter><description><para>
  382. </para></description><returns><para>The type bindings of an <classname alt="boost::type_erasure::any">any</classname>.</para>
  383. </returns><throws><simpara><classname>Nothing.</classname> </simpara></throws></function>
  384. </namespace>
  385. </namespace>
  386. </header>
  387. <header name="boost/type_erasure/builtin.hpp">
  388. <namespace name="boost">
  389. <namespace name="type_erasure">
  390. <struct name="assignable"><template>
  391. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  392. <template-type-parameter name="U"><default>const T&amp;</default></template-type-parameter>
  393. </template><description><para>Enables assignment of <classname alt="boost::type_erasure::any">any</classname> types. </para></description><method-group name="public static functions">
  394. <method name="apply" specifiers="static"><type>void</type><parameter name="dst"><paramtype>T &amp;</paramtype></parameter><parameter name="src"><paramtype>U</paramtype></parameter></method>
  395. </method-group>
  396. </struct><struct name="copy_constructible"><template>
  397. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  398. </template><inherit access="public">boost::mpl::vector&lt; constructible&lt; T(const T &amp;)&gt;, destructible&lt; T &gt; &gt;</inherit><description><para>The <classname alt="boost::type_erasure::copy_constructible">copy_constructible</classname> concept allows objects to be copied and destroyed.</para><para><note><para>This concept is defined to match C++ 2003, [lib.copyconstructible]. It is not equivalent to the concept of the same name in C++11. </para>
  399. </note>
  400. </para></description></struct><struct name="destructible"><template>
  401. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  402. </template><description><para>The <classname alt="boost::type_erasure::destructible">destructible</classname> concept enables forwarding to the destructor of the contained type. This is required whenever an <classname alt="boost::type_erasure::any">any</classname> is created by value.</para><para><note><para>The <classname alt="boost::type_erasure::destructible">destructible</classname> concept rarely needs to be specified explicitly, because it is included in the <classname alt="boost::type_erasure::copy_constructible">copy_constructible</classname> concept.</para>
  403. </note>
  404. <note><para><classname alt="boost::type_erasure::destructible">destructible</classname> may not be specialized and may not be passed to <functionname alt="boost::type_erasure::call">call</functionname> as it depends on the implementation details of <classname alt="boost::type_erasure::any">any</classname>. </para>
  405. </note>
  406. </para></description><method-group name="public static functions">
  407. </method-group>
  408. </struct><struct name="typeid_"><template>
  409. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  410. </template><description><para>Enables runtime type information. This is required if you want to use <functionname alt="boost::type_erasure::any_cast">any_cast</functionname> or <functionname alt="boost::type_erasure::typeid_of">typeid_of</functionname>.</para><para><note><para><classname alt="boost::type_erasure::typeid_">typeid_</classname> cannot be specialized because several library components including <functionname alt="boost::type_erasure::any_cast">any_cast</functionname> would not work correctly if its behavior changed. There is no need to specialize it anyway, since it works for all types. <classname alt="boost::type_erasure::typeid_">typeid_</classname> also cannot be passed to <functionname alt="boost::type_erasure::call">call</functionname>. To access it, use <functionname alt="boost::type_erasure::typeid_of">typeid_of</functionname>. </para>
  411. </note>
  412. </para></description><method-group name="public static functions">
  413. </method-group>
  414. </struct>
  415. </namespace>
  416. </namespace>
  417. </header>
  418. <header name="boost/type_erasure/call.hpp">
  419. <namespace name="boost">
  420. <namespace name="type_erasure">
  421. <overloaded-function name="call"><signature><type><emphasis>unspecified</emphasis></type><template>
  422. <template-type-parameter name="Concept"/>
  423. <template-type-parameter name="Op"/>
  424. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  425. </template><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype></parameter><parameter name=""><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><signature><type><emphasis>unspecified</emphasis></type><template>
  426. <template-type-parameter name="Op"/>
  427. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  428. </template><parameter name=""><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><description><para>Dispatches a type erased function.</para><para><computeroutput>Op</computeroutput> must be a primitive concept which is present in <computeroutput>Concept</computeroutput>. Its signature determines how the arguments of <functionname alt="boost::type_erasure::call">call</functionname> are handled. If the argument is a <classname alt="boost::type_erasure::placeholder">placeholder</classname>, <functionname alt="boost::type_erasure::call">call</functionname> expects an <classname alt="boost::type_erasure::any">any</classname> using that <classname alt="boost::type_erasure::placeholder">placeholder</classname>. This <classname alt="boost::type_erasure::any">any</classname> is unwrapped by <functionname alt="boost::type_erasure::call">call</functionname>. The type that it stores must be the same type specified by <computeroutput>binding</computeroutput>. Any arguments that are not placeholders in the signature of <computeroutput>Op</computeroutput> are passed through unchanged.</para><para>If <computeroutput>binding</computeroutput> is not specified, it will be deduced from the arguments. Naturally this requires at least one argument to be an <classname alt="boost::type_erasure::any">any</classname>. In this case, all <classname alt="boost::type_erasure::any">any</classname> arguments must have the same <classname alt="boost::type_erasure::binding">binding</classname>.</para><para>
  429. Example:</para><para><programlisting language="c++">typedef mpl::vector&lt;
  430. copy_constructible&lt;_b&gt;,
  431. addable&lt;_a, int, _b&gt; &gt; concept;
  432. any&lt;concept, _a&gt; a = ...;
  433. any&lt;concept, _b&gt; b(call(addable&lt;_a, int, _b&gt;(), a, 10));
  434. </programlisting></para><para>The signature of <classname alt="boost::type_erasure::addable">addable</classname> is <computeroutput>_b(const _a&amp;, const int&amp;)</computeroutput> </para></description><returns><para>The result of the operation. If the result type of the signature of <computeroutput>Op</computeroutput> is a placeholder, the result will be converted to the appropriate <classname alt="boost::type_erasure::any">any</classname> type.</para>
  435. </returns><throws><simpara><classname>bad_function_call</classname> if <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput> and there is a type mismatch.</simpara></throws></overloaded-function>
  436. </namespace>
  437. </namespace>
  438. </header>
  439. <header name="boost/type_erasure/callable.hpp">
  440. <namespace name="boost">
  441. <namespace name="type_erasure">
  442. <struct name="callable"><template>
  443. <template-type-parameter name="Sig"/>
  444. <template-type-parameter name="F"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  445. </template><description><para>The <classname alt="boost::type_erasure::callable">callable</classname> concept allows an <classname alt="boost::type_erasure::any">any</classname> to hold function objects. <computeroutput>Sig</computeroutput> is interpreted in the same way as for Boost.Function, except that the arguments and return type are allowed to be placeholders. <computeroutput>F</computeroutput> must be a <classname alt="boost::type_erasure::placeholder">placeholder</classname>.</para><para>Multiple instances of <classname alt="boost::type_erasure::callable">callable</classname> can be used simultaneously. Overload resolution works normally. Note that unlike Boost.Function, <classname alt="boost::type_erasure::callable">callable</classname> does not provide result_type. It does, however, support <computeroutput>boost::result_of</computeroutput>. </para></description><method-group name="public static functions">
  446. <method name="apply" specifiers="static"><type>R</type><parameter name="f"><paramtype>F &amp;</paramtype></parameter><parameter name="arg"><paramtype>T...</paramtype></parameter><description><para><computeroutput>R</computeroutput> is the result type of <computeroutput>Sig</computeroutput> and <computeroutput>T</computeroutput> is the argument types of <computeroutput>Sig</computeroutput>. </para></description></method>
  447. </method-group>
  448. </struct>
  449. </namespace>
  450. </namespace>
  451. </header>
  452. <header name="boost/type_erasure/check_match.hpp">
  453. <namespace name="boost">
  454. <namespace name="type_erasure">
  455. <overloaded-function name="check_match"><signature><type>bool</type><template>
  456. <template-type-parameter name="Concept"/>
  457. <template-type-parameter name="Op"/>
  458. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  459. </template><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype></parameter><parameter name="f"><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><signature><type>bool</type><template>
  460. <template-type-parameter name="Op"/>
  461. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  462. </template><parameter name="f"><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><description><para>If <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>, checks whether the arguments to <computeroutput>f</computeroutput> match the types specified by <computeroutput>binding</computeroutput>. If <classname alt="boost::type_erasure::relaxed">relaxed</classname> is not in <computeroutput>Concept</computeroutput>, returns true. If <computeroutput>binding</computeroutput> is not specified, it will be deduced from the arguments. </para></description></overloaded-function>
  463. </namespace>
  464. </namespace>
  465. </header>
  466. <header name="boost/type_erasure/concept_interface.hpp">
  467. <namespace name="boost">
  468. <namespace name="type_erasure">
  469. <struct name="concept_interface"><template>
  470. <template-type-parameter name="Concept"><purpose><para>The concept that we're specializing <classname alt="boost::type_erasure::concept_interface">concept_interface</classname> for. One of its placeholders should be <computeroutput>ID</computeroutput>. </para></purpose></template-type-parameter>
  471. <template-type-parameter name="Base"><purpose><para>The base of this class. Specializations of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname> must inherit publicly from this type. </para></purpose></template-type-parameter>
  472. <template-type-parameter name="ID"><purpose><para>The placeholder representing this type. </para></purpose></template-type-parameter>
  473. <template-type-parameter name="Enable"><default>void</default><purpose><para>A dummy parameter that can be used for SFINAE.</para></purpose></template-type-parameter>
  474. </template><inherit access="public">Base</inherit><description><para>The <classname alt="boost::type_erasure::concept_interface">concept_interface</classname> class can be specialized to add behavior to an <classname alt="boost::type_erasure::any">any</classname>. An <classname alt="boost::type_erasure::any">any</classname> inherits from all the relevant specializations of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>.</para><para><classname alt="boost::type_erasure::concept_interface">concept_interface</classname> can be specialized for either primitive or composite concepts. If a concept <computeroutput>C1</computeroutput> contains another concept <computeroutput>C2</computeroutput>, then the library guarantees that the specialization of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname> for <computeroutput>C2</computeroutput> is a base class of the specialization for <computeroutput>C1</computeroutput>. This means that <computeroutput>C1</computeroutput> can safely override members of <computeroutput>C2</computeroutput>.</para><para><classname alt="boost::type_erasure::concept_interface">concept_interface</classname> may only be specialized for user-defined concepts. The library owns the specializations of its own built in concepts.</para><para>
  475. The metafunctions <classname alt="boost::type_erasure::derived">derived</classname>, <classname alt="boost::type_erasure::rebind_any">rebind_any</classname>, and <classname alt="boost::type_erasure::as_param">as_param</classname> (which can be applied to <computeroutput>Base</computeroutput>) are useful for determining the argument and return types of functions defined in <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>.</para><para>For dispatching the function use <functionname alt="boost::type_erasure::call">call</functionname>. </para></description></struct>
  476. </namespace>
  477. </namespace>
  478. </header>
  479. <header name="boost/type_erasure/concept_of.hpp">
  480. <namespace name="boost">
  481. <namespace name="type_erasure">
  482. <struct name="concept_of"><template>
  483. <template-type-parameter name="T"/>
  484. </template><description><para>A metafunction returning the concept corresponding to an <classname alt="boost::type_erasure::any">any</classname>. It will also work for all bases of <classname alt="boost::type_erasure::any">any</classname>, so it can be applied to the <computeroutput>Base</computeroutput> parameter of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  485. </struct><typedef name="concept_of_t"><type>typename ::<classname>boost::type_erasure::concept_of</classname>&lt; T &gt;::type</type></typedef>
  486. </namespace>
  487. </namespace>
  488. </header>
  489. <header name="boost/type_erasure/config.hpp">
  490. <macro name="BOOST_TYPE_ERASURE_MAX_FUNCTIONS"><description><para>The maximum number of functions that an <classname alt="boost::type_erasure::any">any</classname> can have. </para></description></macro>
  491. <macro name="BOOST_TYPE_ERASURE_MAX_ARITY"><description><para>The maximum number of arguments that functions in the library support. </para></description></macro>
  492. <macro name="BOOST_TYPE_ERASURE_MAX_TUPLE_SIZE"><description><para>The maximum number of elements in a <classname alt="boost::type_erasure::tuple">tuple</classname>. </para></description></macro>
  493. </header>
  494. <header name="boost/type_erasure/constructible.hpp">
  495. <namespace name="boost">
  496. <namespace name="type_erasure">
  497. <struct name="constructible"><template>
  498. <template-type-parameter name="Sig"/>
  499. </template><description><para>The <classname alt="boost::type_erasure::constructible">constructible</classname> concept enables calling the constructor of a type contained by an <classname alt="boost::type_erasure::any">any</classname>. <computeroutput>Sig</computeroutput> should be a function signature. The return type is the placeholder specifying the type to be constructed. The arguments are the argument types of the constructor. The arguments of <computeroutput>Sig</computeroutput> may be placeholders.</para><para><note><para><classname alt="boost::type_erasure::constructible">constructible</classname> may not be specialized and may not be passed to <functionname alt="boost::type_erasure::call">call</functionname> as it depends on the implementation details of <classname alt="boost::type_erasure::any">any</classname>. </para>
  500. </note>
  501. </para></description></struct>
  502. </namespace>
  503. </namespace>
  504. </header>
  505. <header name="boost/type_erasure/deduced.hpp">
  506. <namespace name="boost">
  507. <namespace name="type_erasure">
  508. <struct name="deduced"><template>
  509. <template-type-parameter name="Metafunction"/>
  510. </template><inherit access="public">boost::type_erasure::placeholder</inherit><description><para>A placeholder for an associated type. The type corresponding to this placeholder is deduced by substituting placeholders in the arguments of the metafunction and then evaluating it.</para><para>When using <classname alt="boost::type_erasure::deduced">deduced</classname> in a template context, if it is possible for Metafunction to contain no placeholders at all, use the nested type, to automatically evaluate it early as needed. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  511. </struct>
  512. </namespace>
  513. </namespace>
  514. </header>
  515. <header name="boost/type_erasure/derived.hpp">
  516. <namespace name="boost">
  517. <namespace name="type_erasure">
  518. <struct name="derived"><template>
  519. <template-type-parameter name="T"/>
  520. </template><description><para>A metafunction which returns the full <classname alt="boost::type_erasure::any">any</classname> type, when given any of its base classes. This is primarily intended to be used when implementing <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>.</para><para><para><emphasis role="bold">See Also:</emphasis><para><classname alt="boost::type_erasure::rebind_any">rebind_any</classname>, <classname alt="boost::type_erasure::as_param">as_param</classname> </para>
  521. </para>
  522. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  523. </struct><typedef name="derived_t"><type>typename T::_boost_type_erasure_derived_type</type></typedef>
  524. </namespace>
  525. </namespace>
  526. </header>
  527. <header name="boost/type_erasure/dynamic_any_cast.hpp">
  528. <namespace name="boost">
  529. <namespace name="type_erasure">
  530. <overloaded-function name="dynamic_any_cast"><signature><type>R</type><template>
  531. <template-type-parameter name="R"/>
  532. <template-type-parameter name="Any"/>
  533. </template><parameter name="arg"><paramtype>Any &amp;&amp;</paramtype></parameter></signature><signature><type>R</type><template>
  534. <template-type-parameter name="R"/>
  535. <template-type-parameter name="Any"/>
  536. <template-type-parameter name="Map"/>
  537. </template><parameter name="arg"><paramtype>Any &amp;&amp;</paramtype></parameter><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter></signature><description><para>Downcasts or crosscasts an <classname alt="boost::type_erasure::any">any</classname>.</para><para>
  538. The single argument form can only be used when <computeroutput>R</computeroutput> uses a single non-deduced placeholder.</para><para>
  539. Example: <programlisting language="c++">// Assume that typeid_&lt;&gt;, copy_constructible&lt;&gt;, and incrementable&lt;&gt;
  540. // have all been registered for int.
  541. any&lt;mpl::vector&lt;typeid_&lt;&gt;, copy_constructible&lt;&gt; &gt; &gt; x(1);
  542. typedef any&lt;
  543. mpl::vector&lt;
  544. typeid_&lt;&gt;,
  545. copy_constructible&lt;&gt;,
  546. incrementable&lt;&gt;
  547. &gt;
  548. &gt; incrementable_any;
  549. auto y = dynamic_any_cast&lt;incrementable_any&gt;(x);
  550. ++y;
  551. assert(any_cast&lt;int&gt;(y) == 2);
  552. </programlisting> </para></description><requires><para><computeroutput>R</computeroutput> and <computeroutput>Any</computeroutput> must both be specializations of <classname alt="boost::type_erasure::any">any</classname>. </para>
  553. </requires><requires><para>PlaceholderMap must be an MPL map with a key for every non-deduced placeholder used by R. The value associated with each key should be the corresponding placeholder in Any. </para>
  554. </requires><requires><para>The concept of Any must include <classname alt="boost::type_erasure::typeid_">typeid_</classname>, for every <classname alt="boost::type_erasure::placeholder">placeholder</classname> which is used by R.</para>
  555. </requires><throws><simpara><classname>bad_any_cast</classname> if the concepts used by R were not previously registered via a call to <functionname alt="boost::type_erasure::register_binding">register_binding</functionname>.</simpara></throws></overloaded-function>
  556. </namespace>
  557. </namespace>
  558. </header>
  559. <header name="boost/type_erasure/dynamic_binding.hpp">
  560. <namespace name="boost">
  561. <namespace name="type_erasure">
  562. <class name="dynamic_binding"><template>
  563. <template-type-parameter name="PlaceholderList"/>
  564. </template><description><para>Maps a set of placeholders to actual types. </para></description><method-group name="public member functions">
  565. </method-group>
  566. <constructor><template>
  567. <template-type-parameter name="Map"/>
  568. </template><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter></constructor>
  569. <constructor><template>
  570. <template-type-parameter name="Concept"/>
  571. <template-type-parameter name="Map"/>
  572. </template><parameter name="other"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype></parameter><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter></constructor>
  573. </class>
  574. </namespace>
  575. </namespace>
  576. </header>
  577. <header name="boost/type_erasure/exception.hpp">
  578. <namespace name="boost">
  579. <namespace name="type_erasure">
  580. <class name="bad_any_cast"><inherit access="public">bad_cast</inherit><description><para>Exception thrown when an <functionname alt="boost::type_erasure::any_cast">any_cast</functionname> to a reference or value fails. </para></description></class><class name="bad_function_call"><inherit access="public">invalid_argument</inherit><description><para>Exception thrown when the arguments to a primitive concept are incorrect.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <functionname alt="boost::type_erasure::call">call</functionname>, <functionname alt="boost::type_erasure::require_match">require_match</functionname> </para>
  581. </para>
  582. </para></description><method-group name="public member functions">
  583. </method-group>
  584. <constructor/>
  585. </class>
  586. </namespace>
  587. </namespace>
  588. </header>
  589. <header name="boost/type_erasure/free.hpp">
  590. <namespace name="boost">
  591. <namespace name="type_erasure">
  592. </namespace>
  593. </namespace>
  594. <macro name="BOOST_TYPE_ERASURE_FREE" kind="functionlike"><macro-parameter name="concept_name"><description><para>is the name of the concept to declare. If it is omitted it defaults to <computeroutput>has_ ## function_name</computeroutput> </para></description></macro-parameter><macro-parameter name="function_name"><description><para>is the name of the function.</para></description></macro-parameter><purpose>Defines a primitive concept for a free function. </purpose><description><para>
  595. The declaration of the concept is <programlisting language="c++">template&lt;class Sig&gt;
  596. struct concept_name;
  597. </programlisting> where Sig is a function type giving the signature of the function.</para><para>This macro can only be used at namespace scope.</para><para>Example:</para><para><programlisting language="c++">BOOST_TYPE_ERASURE_FREE(to_string)
  598. typedef has_to_string&lt;std::string(_self const&amp;)&gt; to_string_concept;
  599. </programlisting></para><para>In C++03, the macro can only be used in the global namespace and is defined as:</para><para><programlisting language="c++">#define BOOST_TYPE_ERASURE_FREE(qualified_name, function_name, N)
  600. </programlisting></para><para>Example:</para><para><programlisting language="c++">BOOST_TYPE_ERASURE_FREE((boost)(has_to_string), to_string, 1)
  601. </programlisting></para><para>For backwards compatibility, this form is always accepted. </para></description></macro>
  602. </header>
  603. <header name="boost/type_erasure/is_empty.hpp">
  604. <namespace name="boost">
  605. <namespace name="type_erasure">
  606. <function name="is_empty"><type>bool</type><template>
  607. <template-type-parameter name="T"/>
  608. </template><parameter name="arg"><paramtype>const T &amp;</paramtype></parameter><description><para>Returns true for an empty <classname alt="boost::type_erasure::any">any</classname>. </para></description></function>
  609. </namespace>
  610. </namespace>
  611. </header>
  612. <header name="boost/type_erasure/is_placeholder.hpp">
  613. <namespace name="boost">
  614. <namespace name="type_erasure">
  615. <struct name="is_placeholder"><template>
  616. <template-type-parameter name="T"/>
  617. </template><description><para>A metafunction that indicates whether a type is a <classname alt="boost::type_erasure::placeholder">placeholder</classname>. </para></description></struct>
  618. </namespace>
  619. </namespace>
  620. </header>
  621. <header name="boost/type_erasure/is_subconcept.hpp">
  622. <namespace name="boost">
  623. <namespace name="type_erasure">
  624. <struct name="is_subconcept"><template>
  625. <template-type-parameter name="Sub"><purpose><para>The sub concept </para></purpose></template-type-parameter>
  626. <template-type-parameter name="Super"><purpose><para>The super concept </para></purpose></template-type-parameter>
  627. <template-type-parameter name="PlaceholderMap"><default>void</default><purpose><para>(optional) An MPL map with keys for every non-deduced placeholder in Sub. The associated value of each key is the corresponding placeholder in Super. If <computeroutput>PlaceholderMap</computeroutput> is omitted, <computeroutput>Super</computeroutput> and <computeroutput>Sub</computeroutput> are presumed to use the same set of placeholders. </para></purpose></template-type-parameter>
  628. </template><description><para><classname alt="boost::type_erasure::is_subconcept">is_subconcept</classname> is a boolean metafunction that determines whether one concept is a sub-concept of another.</para><para><programlisting language="c++">is_subconcept&lt;incrementable&lt;&gt;, incrementable&lt;&gt; &gt; -&gt; true
  629. is_subconcept&lt;incrementable&lt;&gt;, addable&lt;&gt; &gt; -&gt; false
  630. is_subconcept&lt;incrementable&lt;_a&gt;, forward_iterator&lt;_iter&gt;,
  631. mpl::map&lt;mpl::pair&lt;_a, _iter&gt; &gt; &gt; -&gt; true
  632. </programlisting></para><para>
  633. </para></description></struct>
  634. </namespace>
  635. </namespace>
  636. </header>
  637. <header name="boost/type_erasure/iterator.hpp">
  638. <namespace name="boost">
  639. <namespace name="type_erasure">
  640. <struct name="bidirectional_iterator"><template>
  641. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  642. <template-type-parameter name="Reference"><default>boost::use_default</default></template-type-parameter>
  643. <template-type-parameter name="DifferenceType"><default>std::ptrdiff_t</default></template-type-parameter>
  644. </template><inherit access="public">boost::type_erasure::iterator&lt; boost::bidirectional_traversal_tag, T, Reference, DifferenceType &gt;</inherit></struct><struct name="forward_iterator"><template>
  645. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  646. <template-type-parameter name="Reference"><default>boost::use_default</default></template-type-parameter>
  647. <template-type-parameter name="DifferenceType"><default>std::ptrdiff_t</default></template-type-parameter>
  648. </template><inherit access="public">boost::type_erasure::iterator&lt; boost::forward_traversal_tag, T, Reference, DifferenceType &gt;</inherit></struct><struct name="iterator"><template>
  649. <template-type-parameter name="Traversal"><purpose><para>must be one of <computeroutput>boost::incrementable_traversal_tag</computeroutput>, <computeroutput>boost::single_pass_traversal_tag</computeroutput>, <computeroutput>boost::forward_traversal_tag</computeroutput>, <computeroutput>boost::bidirectional_traversal_tag</computeroutput>, and <computeroutput>boost::random_access_traversal_tag</computeroutput>. </para></purpose></template-type-parameter>
  650. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default><purpose><para>The placeholder representing the iterator. </para></purpose></template-type-parameter>
  651. <template-type-parameter name="Reference"><default>boost::use_default</default><purpose><para>The reference type. If it is boost::use_default, then reference will be value_type&amp;. </para></purpose></template-type-parameter>
  652. <template-type-parameter name="DifferenceType"><default>std::ptrdiff_t</default><purpose><para>The iterator's difference type.</para></purpose></template-type-parameter>
  653. </template><description><para>The <classname alt="boost::type_erasure::iterator">iterator</classname> concept can be used for any iterator category.</para><para>
  654. The value_type of the iterator is deduced. To force it to be a specific type, use the <classname alt="boost::type_erasure::same_type">same_type</classname> concept.</para><para>Example:</para><para><programlisting language="c++">mpl::vector&lt;
  655. iterator&lt;boost::forward_traversal_tag&gt;,
  656. same_type&lt;iterator&lt;boost::forward_traversal_tag&gt;::value_type, int&gt; &gt; int_it;
  657. </programlisting> </para></description><typedef name="value_type"><type><emphasis>unspecified</emphasis></type></typedef>
  658. <typedef name="reference"><type>Reference</type></typedef>
  659. <typedef name="difference_type"><type>DifferenceType</type></typedef>
  660. </struct><struct name="random_access_iterator"><template>
  661. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  662. <template-type-parameter name="Reference"><default>boost::use_default</default></template-type-parameter>
  663. <template-type-parameter name="DifferenceType"><default>std::ptrdiff_t</default></template-type-parameter>
  664. </template><inherit access="public">boost::type_erasure::iterator&lt; boost::random_access_traversal_tag, T, Reference, DifferenceType &gt;</inherit></struct>
  665. </namespace>
  666. </namespace>
  667. </header>
  668. <header name="boost/type_erasure/member.hpp">
  669. <macro name="BOOST_TYPE_ERASURE_MEMBER" kind="functionlike"><macro-parameter name="concept_name"><description><para>is the name of the concept to declare. If it is omitted it defaults to <computeroutput>has_ ## member</computeroutput> </para></description></macro-parameter><macro-parameter name="member"><description><para>is the name of the member function.</para></description></macro-parameter><purpose>Defines a primitive concept for a member function. </purpose><description><para>
  670. The declaration of the concept is <programlisting language="c++">template&lt;class Sig, class T = _self&gt;
  671. struct concept_name;
  672. </programlisting> where <computeroutput>Sig</computeroutput> is a function type giving the signature of the member function, and <computeroutput>T</computeroutput> is the object type. <computeroutput>T</computeroutput> may be const-qualified for const member functions. <computeroutput>concept_name&lt;R(A...) const, T&gt;</computeroutput> is an alias for <computeroutput>concept_name&lt;R(A...), const T&gt;</computeroutput>.</para><para>This macro can only be used at namespace scope.</para><para>Example:</para><para><programlisting language="c++">namespace boost {
  673. BOOST_TYPE_ERASURE_MEMBER(push_back)
  674. }
  675. typedef boost::has_push_back&lt;void(int)&gt; push_back_concept;
  676. </programlisting></para><para>The concept defined by this function may be specialized to provide a concept_map. The class object will be passed by reference as the first parameter.</para><para><programlisting language="c++">template&lt;&gt;
  677. struct has_push_back&lt;void(int), std::list&lt;int&gt; &gt; {
  678. static void apply(std::list&lt;int&gt;&amp; l, int i) { l.push_back(i); }
  679. };
  680. </programlisting></para><para>In C++03, the macro can only be used in the global namespace and is defined as:</para><para><programlisting language="c++">#define BOOST_TYPE_ERASURE_MEMBER(qualified_name, member, N)
  681. </programlisting></para><para>Example:</para><para><programlisting language="c++">BOOST_TYPE_ERASURE_MEMBER((boost)(has_push_back), push_back, 1)
  682. typedef boost::has_push_back&lt;void(int), _self&gt; push_back_concept;
  683. </programlisting></para><para>For backwards compatibility, this form is always accepted. </para></description></macro>
  684. </header>
  685. <header name="boost/type_erasure/operators.hpp">
  686. <namespace name="boost">
  687. <namespace name="type_erasure">
  688. <struct name="add_assignable"><template>
  689. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  690. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  691. </template><method-group name="public static functions">
  692. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  693. </method-group>
  694. </struct><struct name="addable"><template>
  695. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  696. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  697. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  698. </template><method-group name="public static functions">
  699. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  700. </method-group>
  701. </struct><struct name="bitand_assignable"><template>
  702. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  703. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  704. </template><method-group name="public static functions">
  705. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  706. </method-group>
  707. </struct><struct name="bitandable"><template>
  708. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  709. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  710. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  711. </template><method-group name="public static functions">
  712. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  713. </method-group>
  714. </struct><struct name="bitor_assignable"><template>
  715. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  716. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  717. </template><method-group name="public static functions">
  718. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  719. </method-group>
  720. </struct><struct name="bitorable"><template>
  721. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  722. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  723. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  724. </template><method-group name="public static functions">
  725. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  726. </method-group>
  727. </struct><struct name="bitxor_assignable"><template>
  728. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  729. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  730. </template><method-group name="public static functions">
  731. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  732. </method-group>
  733. </struct><struct name="bitxorable"><template>
  734. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  735. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  736. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  737. </template><method-group name="public static functions">
  738. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  739. </method-group>
  740. </struct><struct name="complementable"><template>
  741. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  742. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  743. </template><description><para>The <classname alt="boost::type_erasure::complementable">complementable</classname> concept allow use of the bitwise complement operator on an <classname alt="boost::type_erasure::any">any</classname>. </para></description><method-group name="public static functions">
  744. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter></method>
  745. </method-group>
  746. </struct><struct name="decrementable"><template>
  747. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  748. </template><description><para>The <classname alt="boost::type_erasure::decrementable">decrementable</classname> concept allow pre and post decrement on an <classname alt="boost::type_erasure::any">any</classname>. The contained type must provide a pre-decrement operator. </para></description><method-group name="public static functions">
  749. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter></method>
  750. </method-group>
  751. </struct><struct name="dereferenceable"><template>
  752. <template-type-parameter name="R"/>
  753. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  754. </template><method-group name="public static functions">
  755. <method name="apply" specifiers="static"><type>R</type><parameter name="arg"><paramtype>const T &amp;</paramtype></parameter></method>
  756. </method-group>
  757. </struct><struct name="dividable"><template>
  758. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  759. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  760. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  761. </template><method-group name="public static functions">
  762. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  763. </method-group>
  764. </struct><struct name="divide_assignable"><template>
  765. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  766. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  767. </template><method-group name="public static functions">
  768. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  769. </method-group>
  770. </struct><struct name="equality_comparable"><template>
  771. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  772. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  773. </template><method-group name="public static functions">
  774. <method name="apply" specifiers="static"><type>bool</type><parameter name="lhs"><paramtype>const T &amp;</paramtype></parameter><parameter name="rhs"><paramtype>const U &amp;</paramtype></parameter></method>
  775. </method-group>
  776. </struct><struct name="incrementable"><template>
  777. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  778. </template><description><para>The <classname alt="boost::type_erasure::incrementable">incrementable</classname> concept allow pre and post increment on an <classname alt="boost::type_erasure::any">any</classname>. The contained type must provide a pre-increment operator. </para></description><method-group name="public static functions">
  779. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter></method>
  780. </method-group>
  781. </struct><struct name="istreamable"><template>
  782. <template-type-parameter name="Is"><default>std::istream</default></template-type-parameter>
  783. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  784. </template><description><para>The <classname alt="boost::type_erasure::istreamable">istreamable</classname> concept allows an <classname alt="boost::type_erasure::any">any</classname> to be read from a <computeroutput>std::istream</computeroutput>. </para></description><method-group name="public static functions">
  785. <method name="apply" specifiers="static"><type>void</type><parameter name="out"><paramtype>Is &amp;</paramtype></parameter><parameter name="arg"><paramtype>T &amp;</paramtype></parameter></method>
  786. </method-group>
  787. </struct><struct name="left_shift_assignable"><template>
  788. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  789. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  790. </template><method-group name="public static functions">
  791. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  792. </method-group>
  793. </struct><struct name="left_shiftable"><template>
  794. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  795. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  796. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  797. </template><method-group name="public static functions">
  798. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  799. </method-group>
  800. </struct><struct name="less_than_comparable"><template>
  801. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  802. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  803. </template><method-group name="public static functions">
  804. <method name="apply" specifiers="static"><type>bool</type><parameter name="lhs"><paramtype>const T &amp;</paramtype></parameter><parameter name="rhs"><paramtype>const U &amp;</paramtype></parameter></method>
  805. </method-group>
  806. </struct><struct name="mod_assignable"><template>
  807. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  808. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  809. </template><method-group name="public static functions">
  810. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  811. </method-group>
  812. </struct><struct name="modable"><template>
  813. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  814. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  815. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  816. </template><method-group name="public static functions">
  817. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  818. </method-group>
  819. </struct><struct name="multipliable"><template>
  820. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  821. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  822. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  823. </template><method-group name="public static functions">
  824. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  825. </method-group>
  826. </struct><struct name="multiply_assignable"><template>
  827. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  828. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  829. </template><method-group name="public static functions">
  830. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  831. </method-group>
  832. </struct><struct name="negatable"><template>
  833. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  834. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  835. </template><description><para>The <classname alt="boost::type_erasure::negatable">negatable</classname> concept allow use of the unary minus operator on an <classname alt="boost::type_erasure::any">any</classname>. </para></description><method-group name="public static functions">
  836. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter></method>
  837. </method-group>
  838. </struct><struct name="ostreamable"><template>
  839. <template-type-parameter name="Os"><default>std::ostream</default></template-type-parameter>
  840. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  841. </template><description><para>The <classname alt="boost::type_erasure::ostreamable">ostreamable</classname> concept allows an <classname alt="boost::type_erasure::any">any</classname> to be written to a <computeroutput>std::ostream</computeroutput>. </para></description><method-group name="public static functions">
  842. <method name="apply" specifiers="static"><type>void</type><parameter name="out"><paramtype>Os &amp;</paramtype></parameter><parameter name="arg"><paramtype>const T &amp;</paramtype></parameter></method>
  843. </method-group>
  844. </struct><struct name="right_shift_assignable"><template>
  845. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  846. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  847. </template><method-group name="public static functions">
  848. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  849. </method-group>
  850. </struct><struct name="right_shiftable"><template>
  851. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  852. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  853. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  854. </template><method-group name="public static functions">
  855. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  856. </method-group>
  857. </struct><struct name="subscriptable"><template>
  858. <template-type-parameter name="R"/>
  859. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  860. <template-type-parameter name="N"><default>std::ptrdiff_t</default></template-type-parameter>
  861. </template><method-group name="public static functions">
  862. <method name="apply" specifiers="static"><type>R</type><parameter name="arg"><paramtype>T &amp;</paramtype></parameter><parameter name="index"><paramtype>const N &amp;</paramtype></parameter></method>
  863. </method-group>
  864. </struct><struct name="subtract_assignable"><template>
  865. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  866. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  867. </template><method-group name="public static functions">
  868. <method name="apply" specifiers="static"><type>void</type><parameter name=""><paramtype>T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  869. </method-group>
  870. </struct><struct name="subtractable"><template>
  871. <template-type-parameter name="T"><default><classname alt="boost::type_erasure::_self">_self</classname></default></template-type-parameter>
  872. <template-type-parameter name="U"><default>T</default></template-type-parameter>
  873. <template-type-parameter name="R"><default>T</default></template-type-parameter>
  874. </template><method-group name="public static functions">
  875. <method name="apply" specifiers="static"><type>R</type><parameter name=""><paramtype>const T &amp;</paramtype></parameter><parameter name=""><paramtype>const U &amp;</paramtype></parameter></method>
  876. </method-group>
  877. </struct>
  878. </namespace>
  879. </namespace>
  880. </header>
  881. <header name="boost/type_erasure/param.hpp">
  882. <namespace name="boost">
  883. <namespace name="type_erasure">
  884. <struct name="as_param"><template>
  885. <template-type-parameter name="Any"/>
  886. <template-type-parameter name="T"/>
  887. </template><purpose>Metafunction that creates a <classname alt="boost::type_erasure::param">param</classname>. </purpose><description><para>If <computeroutput>T</computeroutput> is a (cv/reference qualified) placeholder, returns <classname alt="boost::type_erasure::param">param</classname>&lt;<classname alt="boost::type_erasure::concept_of">concept_of&lt;Any&gt;::type</classname>, T&gt;, otherwise, returns T. This metafunction is intended to be used for function arguments in specializations of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>.</para><para><para><emphasis role="bold">See Also:</emphasis><para><classname alt="boost::type_erasure::derived">derived</classname>, <classname alt="boost::type_erasure::rebind_any">rebind_any</classname> </para>
  888. </para>
  889. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  890. </struct><class name="param"><template>
  891. <template-type-parameter name="Concept"/>
  892. <template-type-parameter name="T"/>
  893. </template><purpose>A wrapper to help with overload resolution for functions operating on an <classname alt="boost::type_erasure::any">any</classname>. </purpose><description><para>The template arguments are interpreted in the same way as <classname alt="boost::type_erasure::any">any</classname>.</para><para>A parameter of type <classname alt="boost::type_erasure::param">param</classname> can be initialized with an <classname alt="boost::type_erasure::any">any</classname> that has the same <computeroutput>Concept</computeroutput> and base placeholder when there exists a corresponding standard conversion for the placeholder. A conversion sequence from <classname alt="boost::type_erasure::any">any&lt;C, P&gt;</classname> to <classname alt="boost::type_erasure::param">param&lt;C, P1&gt;</classname> is a better conversion sequence than <classname alt="boost::type_erasure::any">any&lt;C, P&gt;</classname> to <classname alt="boost::type_erasure::param">param&lt;C, P2&gt;</classname> iff the corresponding placeholder standard conversion sequence from P to P1 is a better conversion sequence than P to P2.</para><para><note><para>Overloading based on cv-qualifiers and rvalue-ness is only supported in C++11. In C++03, all conversion sequences from <classname alt="boost::type_erasure::any">any</classname> to <classname alt="boost::type_erasure::param">param</classname> have the same rank.</para>
  894. </note>
  895. Example:</para><para><programlisting language="c++">void f(param&lt;C, _a&amp;&gt;);
  896. void f(param&lt;C, const _a&amp;&gt;);
  897. void g(param&lt;C, const _a&amp;&gt;);
  898. void g(param&lt;C, _a&amp;&amp;&gt;);
  899. any&lt;C, _a&gt; a;
  900. f(any&lt;C, _a&gt;()); // calls void f(param&lt;C, const _a&amp;&gt;);
  901. f(a); // calls void f(param&lt;C, _a&amp;&gt;); (ambiguous in C++03)
  902. g(any&lt;C, _a&gt;()); // calls void g(param&lt;C, _a&amp;&amp;&gt;); (ambiguous in C++03)
  903. g(a); // calls void g(param&lt;C, const _a&amp;&gt;);
  904. </programlisting> </para></description><method-group name="public member functions">
  905. <method name="get" cv="const"><type><classname>any</classname>&lt; Concept, T &gt;</type><description><para>Returns the stored <classname alt="boost::type_erasure::any">any</classname>. </para></description></method>
  906. </method-group>
  907. <constructor><template>
  908. <template-type-parameter name="U"/>
  909. </template><parameter name="a"><paramtype><classname>any</classname>&lt; Concept, U &gt; &amp;</paramtype></parameter></constructor>
  910. <constructor><template>
  911. <template-type-parameter name="U"/>
  912. </template><parameter name="a"><paramtype>const <classname>any</classname>&lt; Concept, U &gt; &amp;</paramtype></parameter></constructor>
  913. <constructor><template>
  914. <template-type-parameter name="U"/>
  915. </template><parameter name="a"><paramtype><classname>any</classname>&lt; Concept, U &gt; &amp;&amp;</paramtype></parameter></constructor>
  916. </class><typedef name="as_param_t"><type>typename ::<classname>boost::type_erasure::as_param</classname>&lt; Any, T &gt;::type</type></typedef>
  917. </namespace>
  918. </namespace>
  919. </header>
  920. <header name="boost/type_erasure/placeholder.hpp">
  921. <namespace name="boost">
  922. <namespace name="type_erasure">
  923. <struct name="_a"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_b"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_c"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_d"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_e"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_f"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_g"><inherit access="public">boost::type_erasure::placeholder</inherit></struct><struct name="_self"><inherit access="public">boost::type_erasure::placeholder</inherit><purpose>The default placeholder. </purpose><description><para><classname alt="boost::type_erasure::_self">_self</classname> is the default <classname alt="boost::type_erasure::placeholder">placeholder</classname> used by <classname alt="boost::type_erasure::any">any</classname>. It should be used as a default by most concepts, so using concepts with no explicit arguments will "just work" as much as possible. </para></description></struct><struct name="placeholder"><description><para>Placeholders are used heavily throughout the library. Every placeholder must derive from <classname alt="boost::type_erasure::placeholder">placeholder</classname>. The library provides a number of placeholders, out of the box, but you are welcome to define your own, if you want more descriptive names. The placeholder <classname alt="boost::type_erasure::_self">_self</classname> is special in that it is used as the default wherever possible.</para><para>What exactly is a placeholder? Placeholders act as a substitute for template parameters in concepts. The library automatically replaces all the placeholders used in a concept with the actual types involved when it stores an object in an <classname alt="boost::type_erasure::any">any</classname>.</para><para>For example, in the following,</para><para><programlisting language="c++">any&lt;copy_constructible&lt;_a&gt;, _a&gt; x(1);
  924. </programlisting></para><para>The library sees that we're constructing an <classname alt="boost::type_erasure::any">any</classname> that uses the <classname alt="boost::type_erasure::_a">_a</classname> placeholder with an <computeroutput>int</computeroutput>. Thus it binds <classname alt="boost::type_erasure::_a">_a</classname> to int and instantiates <classname alt="boost::type_erasure::copy_constructible">copy_constructible&lt;int&gt;</classname>.</para><para>When there are multiple placeholders involved, you will have to use <classname alt="boost::type_erasure::tuple">tuple</classname>, or pass the bindings explicitly, but the substitution still works the same way. </para></description></struct>
  925. </namespace>
  926. </namespace>
  927. </header>
  928. <header name="boost/type_erasure/placeholder_of.hpp">
  929. <namespace name="boost">
  930. <namespace name="type_erasure">
  931. <struct name="placeholder_of"><template>
  932. <template-type-parameter name="T"/>
  933. </template><description><para>A metafunction returning the (const/reference qualified) placeholder corresponding to an <classname alt="boost::type_erasure::any">any</classname>. It will also work for all bases of <classname alt="boost::type_erasure::any">any</classname>, so it can be applied to the <computeroutput>Base</computeroutput> parameter of <classname alt="boost::type_erasure::concept_interface">concept_interface</classname>. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  934. </struct><typedef name="placeholder_of_t"><type>typename ::<classname>boost::type_erasure::placeholder_of</classname>&lt; T &gt;::type</type></typedef>
  935. </namespace>
  936. </namespace>
  937. </header>
  938. <header name="boost/type_erasure/rebind_any.hpp">
  939. <namespace name="boost">
  940. <namespace name="type_erasure">
  941. <struct name="rebind_any"><template>
  942. <template-type-parameter name="Any"/>
  943. <template-type-parameter name="T"/>
  944. </template><description><para>A metafunction that changes the <classname alt="boost::type_erasure::placeholder">placeholder</classname> of an <classname alt="boost::type_erasure::any">any</classname>. If <computeroutput>T</computeroutput> is not a placeholder, returns <computeroutput>T</computeroutput> unchanged. This class is intended to be used in <classname alt="boost::type_erasure::concept_interface">concept_interface</classname> to deduce the argument types from the arguments of the concept.</para><para>
  945. <programlisting language="c++">rebind_any&lt;any&lt;Concept&gt;, _a&gt;::type -&gt; any&lt;Concept, _a&gt;
  946. rebind_any&lt;any&lt;Concept&gt;, _b&amp;&gt;::type -&gt; any&lt;Concept, _b&amp;&gt;
  947. rebind_any&lt;any&lt;Concept&gt;, _c&amp;&amp;&gt;::type -&gt; any&lt;Concept, _c&amp;&amp;&gt;
  948. rebind_any&lt;any&lt;Concept&gt;, int&gt;::type -&gt; int
  949. </programlisting></para><para><para><emphasis role="bold">See Also:</emphasis><para><classname alt="boost::type_erasure::derived">derived</classname>, <classname alt="boost::type_erasure::as_param">as_param</classname> </para>
  950. </para>
  951. </para></description><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef>
  952. </struct><typedef name="rebind_any_t"><type>typename ::<classname>boost::type_erasure::rebind_any</classname>&lt; Any, T &gt;::type</type></typedef>
  953. </namespace>
  954. </namespace>
  955. </header>
  956. <header name="boost/type_erasure/register_binding.hpp">
  957. <namespace name="boost">
  958. <namespace name="type_erasure">
  959. <overloaded-function name="register_binding"><signature><type>void</type><template>
  960. <template-type-parameter name="Concept"/>
  961. <template-type-parameter name="Map"/>
  962. </template><parameter name=""><paramtype>const <classname>static_binding</classname>&lt; Map &gt; &amp;</paramtype></parameter></signature><signature><type>void</type><template>
  963. <template-type-parameter name="Concept"/>
  964. <template-type-parameter name="T"/>
  965. </template></signature><description><para>Registers a model of a concept to allow downcasting <classname alt="boost::type_erasure::any">any</classname> via <functionname alt="boost::type_erasure::dynamic_any_cast">dynamic_any_cast</functionname>. </para></description></overloaded-function>
  966. </namespace>
  967. </namespace>
  968. </header>
  969. <header name="boost/type_erasure/relaxed.hpp">
  970. <namespace name="boost">
  971. <namespace name="type_erasure">
  972. <struct name="is_relaxed"><template>
  973. <template-type-parameter name="Concept"/>
  974. </template><description><para>A metafunction indicating whether <computeroutput>Concept</computeroutput> includes <classname alt="boost::type_erasure::relaxed">relaxed</classname>. </para></description></struct><struct name="relaxed"><inherit access="public">boost::mpl::vector0&lt;&gt;</inherit><description><para>This special concept enables various useful default behavior that makes <classname alt="boost::type_erasure::any">any</classname> act like an ordinary object. By default <classname alt="boost::type_erasure::any">any</classname> forwards all operations to the underlying type, and provides only the operations that are specified in its <computeroutput>Concept</computeroutput>.</para><para>In detail, <classname alt="boost::type_erasure::relaxed">relaxed</classname> enables the following:<itemizedlist>
  975. <listitem><para>A raw value can be assigned to an <classname alt="boost::type_erasure::any">any</classname>. This will replace the value stored by the <classname alt="boost::type_erasure::any">any</classname>. (But note that if <classname alt="boost::type_erasure::assignable">assignable</classname> is present, it takes priority.)</para>
  976. </listitem><listitem><para>assignment of <classname alt="boost::type_erasure::any">any</classname> uses the constructor if it can't use <classname alt="boost::type_erasure::assignable">assignable</classname> (either because <classname alt="boost::type_erasure::assignable">assignable</classname> is missing, or because the stored types do not match).</para>
  977. </listitem><listitem><para>default construction of <classname alt="boost::type_erasure::any">any</classname> is allowed and creates a null any.</para>
  978. </listitem><listitem><para><classname alt="boost::type_erasure::equality_comparable">equality_comparable</classname>: If the types do not match, it will return false.</para>
  979. </listitem><listitem><para><classname alt="boost::type_erasure::less_than_comparable">less_than_comparable</classname>: If the types do not match, the ordering will be according to <computeroutput>std::type_info::before</computeroutput>.</para>
  980. </listitem><listitem><para>if the arguments to any other function do not match, it will throw a <classname alt="boost::type_erasure::bad_function_call">bad_function_call</classname> exception instead of having undefined behavior. </para>
  981. </listitem></itemizedlist>
  982. </para></description></struct>
  983. </namespace>
  984. </namespace>
  985. </header>
  986. <header name="boost/type_erasure/require_match.hpp">
  987. <namespace name="boost">
  988. <namespace name="type_erasure">
  989. <overloaded-function name="require_match"><signature><type>void</type><template>
  990. <template-type-parameter name="Concept"/>
  991. <template-type-parameter name="Op"/>
  992. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  993. </template><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype></parameter><parameter name="f"><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><signature><type>void</type><template>
  994. <template-type-parameter name="Op"/>
  995. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  996. </template><parameter name="f"><paramtype>const Op &amp;</paramtype></parameter><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter></signature><description><para>Checks that the actual types stored in all the <classname alt="boost::type_erasure::any">any</classname> arguments match the types specified by <computeroutput>binding</computeroutput>. If they do not match then,<itemizedlist>
  997. <listitem><para>If <classname alt="boost::type_erasure::relaxed">relaxed</classname> is in <computeroutput>Concept</computeroutput>, throws <classname alt="boost::type_erasure::bad_function_call">bad_function_call</classname>.</para>
  998. </listitem><listitem><para>Otherwise the behavior is undefined.</para>
  999. </listitem></itemizedlist>
  1000. </para><para>If <computeroutput>binding</computeroutput> is not specified, it will be deduced from the arguments.</para><para>
  1001. </para></description><postconditions><para> <functionname alt="boost::type_erasure::call">call</functionname><computeroutput>(binding, f, args...)</computeroutput> is valid. </para>
  1002. </postconditions></overloaded-function>
  1003. </namespace>
  1004. </namespace>
  1005. </header>
  1006. <header name="boost/type_erasure/same_type.hpp">
  1007. <namespace name="boost">
  1008. <namespace name="type_erasure">
  1009. <struct name="same_type"><template>
  1010. <template-type-parameter name="T"/>
  1011. <template-type-parameter name="U"/>
  1012. </template><description><para>A built in concept that indicates that two types are the same. Either T or U or both can be placeholders.</para><para><warning><para>Any number of instances of <classname alt="boost::type_erasure::deduced">deduced</classname> can be connected with <classname alt="boost::type_erasure::same_type">same_type</classname>, but there should be at most one regular placeholder in the group. same_type&lt;_a, _b&gt; is not allowed. The reason for this is that the library needs to normalize all the placeholders, and in this context there is no way to decide whether to use <classname alt="boost::type_erasure::_a">_a</classname> or <classname alt="boost::type_erasure::_b">_b</classname>. </para>
  1013. </warning>
  1014. </para></description></struct>
  1015. </namespace>
  1016. </namespace>
  1017. </header>
  1018. <header name="boost/type_erasure/static_binding.hpp">
  1019. <namespace name="boost">
  1020. <namespace name="type_erasure">
  1021. <struct name="static_binding"><template>
  1022. <template-type-parameter name="Map"/>
  1023. </template><description><para>Represents a mapping from placeholders to the actual types that they bind to.</para><para>
  1024. </para></description><typedef name="map_type"><type>Map</type></typedef>
  1025. </struct>
  1026. <function name="make_binding"><type><classname>static_binding</classname>&lt; Map &gt;</type><template>
  1027. <template-type-parameter name="Map"/>
  1028. </template><description><para>A convenience function to prevent constructor calls from being parsed as function declarations. </para></description></function>
  1029. </namespace>
  1030. </namespace>
  1031. </header>
  1032. <header name="boost/type_erasure/tuple.hpp">
  1033. <namespace name="boost">
  1034. <namespace name="type_erasure">
  1035. <class name="tuple"><template>
  1036. <template-type-parameter name="Concept"/>
  1037. <template-nontype-parameter name="T"><type>class...</type></template-nontype-parameter>
  1038. </template><description><para><classname alt="boost::type_erasure::tuple">tuple</classname> is a Boost.Fusion Random Access Sequence containing <classname alt="boost::type_erasure::any">anys</classname>. <computeroutput>Concept</computeroutput> specifies the <link linkend="boost_typeerasure.conceptdef">Concept</link> for each of the elements. The remaining arguments must be (possibly const and/or reference qualified) placeholders, which are the <classname alt="boost::type_erasure::placeholder">placeholders</classname> of the elements. </para></description><method-group name="public member functions">
  1039. </method-group>
  1040. <constructor specifiers="explicit"><template>
  1041. <template-nontype-parameter name="U"><type>class...</type></template-nontype-parameter>
  1042. </template><parameter name="args"><paramtype>U &amp;&amp;...</paramtype></parameter><description><para>Constructs a tuple. Each element of <computeroutput>args</computeroutput> will be used to initialize the corresponding <classname alt="boost::type_erasure::any">any</classname> member. The <classname alt="boost::type_erasure::binding">binding</classname> for the tuple elements is determined by mapping the placeholders in <computeroutput>T</computeroutput> to the corresponding types in <computeroutput>U</computeroutput>. </para></description></constructor>
  1043. </class>
  1044. <overloaded-function name="get"><signature><type><classname>any</classname>&lt; Concept, TN &gt; &amp;</type><template>
  1045. <template-nontype-parameter name="N"><type>int</type></template-nontype-parameter>
  1046. <template-type-parameter name="Concept"/>
  1047. <template-nontype-parameter name="T"><type>class...</type></template-nontype-parameter>
  1048. </template><parameter name="arg"><paramtype><classname>tuple</classname>&lt; Concept, T... &gt; &amp;</paramtype></parameter></signature><signature><type>const <classname>any</classname>&lt; Concept, TN &gt; &amp;</type><template>
  1049. <template-nontype-parameter name="N"><type>int</type></template-nontype-parameter>
  1050. <template-type-parameter name="Concept"/>
  1051. <template-nontype-parameter name="T"><type>class...</type></template-nontype-parameter>
  1052. </template><parameter name="arg"><paramtype>const <classname>tuple</classname>&lt; Concept, T... &gt; &amp;</paramtype></parameter></signature><description><para>Returns the Nth <classname alt="boost::type_erasure::any">any</classname> in the tuple. </para></description></overloaded-function>
  1053. </namespace>
  1054. </namespace>
  1055. </header>
  1056. <header name="boost/type_erasure/typeid_of.hpp">
  1057. <namespace name="boost">
  1058. <namespace name="type_erasure">
  1059. <overloaded-function name="typeid_of"><signature><type>const std::type_info &amp;</type><template>
  1060. <template-type-parameter name="Concept"/>
  1061. <template-type-parameter name="T"/>
  1062. </template><parameter name="arg"><paramtype>const <classname>any</classname>&lt; Concept, T &gt; &amp;</paramtype></parameter></signature><signature><type>const std::type_info &amp;</type><template>
  1063. <template-type-parameter name="T"/>
  1064. <template-type-parameter name="Concept"/>
  1065. </template><parameter name="binding"><paramtype>const <classname>binding</classname>&lt; Concept &gt; &amp;</paramtype></parameter></signature><description><para>The first form returns the type currently stored in an <classname alt="boost::type_erasure::any">any</classname>.</para><para>The second form returns the type corresponding to a placeholder in <computeroutput>binding</computeroutput>.</para><para>
  1066. </para></description><requires><para><computeroutput>Concept</computeroutput> includes <classname alt="boost::type_erasure::typeid_">typeid_&lt;T&gt;</classname>. </para>
  1067. </requires><requires><para><computeroutput>T</computeroutput> is a non-reference, CV-unqualified <classname alt="boost::type_erasure::placeholder">placeholder</classname>. </para>
  1068. </requires></overloaded-function>
  1069. </namespace>
  1070. </namespace>
  1071. </header>
  1072. </library-reference>